<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://baszerr.eu/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>BaSzErr - prjs</title>
        <description></description>
        <link>https://baszerr.eu/</link>
        <lastBuildDate>Sun, 19 Apr 2026 19:08:17 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://baszerr.eu/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
            <title>BaSzErr</title>
            <link>https://baszerr.eu/</link>
        </image>
        <item>
            <title>dyndns_update</title>
            <link>https://baszerr.eu/doku.php?id=prjs:dyndns_update</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;dyndns_update&quot;&gt;dyndns_update&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
recently i started to use &lt;a href=&quot;http://dyndns.org&quot; class=&quot;urlextern&quot; title=&quot;http://dyndns.org&quot; rel=&quot;ugc nofollow&quot;&gt;DynDNS&lt;/a&gt; service. to automatically manage IP changes on machine involved i wrote simple shell script. since it is on the router with &lt;a href=&quot;http://www.openwrt.org&quot; class=&quot;urlextern&quot; title=&quot;http://www.openwrt.org&quot; rel=&quot;ugc nofollow&quot;&gt;OpenWRT&lt;/a&gt; installed, it includes IP-getting technique required there.
&lt;/p&gt;

&lt;p&gt;
new feature is “-f” option to force IP updating. it is a good thing to do so from time to time, to prevent account removal after 30 days.
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;#!/bin/sh&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;USER&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;username&amp;quot;&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;PASS&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;topsi_kret&amp;quot;&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;DOMAIN&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$USER&lt;/span&gt;.dyndns.org&amp;quot;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# metchod of getting current IP; this one&#039;s valid for OpenWRT/Backfire&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;IP&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es5&quot;&gt;`ifconfig  eth0.1 | grep addr: | sed &#039;s#^ *inet addr:##&#039; | sed &#039;s# .*##&#039;`&lt;/span&gt;&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# get last set IP&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;LAST_IP_FILE&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$HOME&lt;/span&gt;/.dyndns_last_ip&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;touch&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$LAST_IP_FILE&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;LAST_IP&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es5&quot;&gt;`cat &amp;quot;$LAST_IP_FILE&amp;quot;`&lt;/span&gt;&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# skip if not changed and not forced&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;$1&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;= &lt;span class=&quot;st0&quot;&gt;&amp;quot;-f&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$LAST_IP&lt;/span&gt;&amp;quot;&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$IP&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# update on change&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;wget&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-O&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null &lt;span class=&quot;st0&quot;&gt;&amp;quot;http://&lt;span class=&quot;es2&quot;&gt;$USER&lt;/span&gt;:&lt;span class=&quot;es2&quot;&gt;$PASS&lt;/span&gt;@members.dyndns.org/nic/update?hostname=&lt;span class=&quot;es2&quot;&gt;$DOMAIN&lt;/span&gt;&amp;amp;myip=&lt;span class=&quot;es2&quot;&gt;$IP&lt;/span&gt;&amp;amp;wildcard=NOCHG&amp;amp;mx=NOCHG&amp;amp;backmx=NOCHG&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$IP&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$LAST_IP_FILE&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
script in raw (i.e. text) form can be obtained here: &lt;a href=&quot;https://baszerr.eu/lib/exe/fetch.php?media=prjs:dyndns_update.txt&quot; class=&quot;media mediafile mf_txt&quot; title=&quot;prjs:dyndns_update.txt (990 B)&quot;&gt;dyndns_update&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 15 Jun 2021 20:09:51 +0000</pubDate>
        </item>
        <item>
            <title>img_randomizer</title>
            <link>https://baszerr.eu/doku.php?id=prjs:img_randomizer</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;img_randomizer&quot;&gt;img_randomizer&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
img_randomizer is a short shell script that given a set of images randomizes one of them. it uses non-uniform randomization to prefer images that have not been selected yet (or have been selected less often then the others).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;img_randomizer&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;img_randomizer&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-255&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;motivation&quot;&gt;motivation&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
it is interesting alternative to typical tools for randomizing images to be placed on your desktop, since you won&amp;#039;t get bored with old images that fast. i personally use it giving directory with my favorites images from trips, vacations, etc… each time i come back from trip, i get new images and put best of them into that directory. since they were not present before, they have higher probability of being selected. therefor i have recent images on my desktop more often.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;motivation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;motivation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;256-756&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;download&quot;&gt;download&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
you can download script here: &lt;a href=&quot;https://baszerr.eu/lib/exe/fetch.php?media=prjs:img_randomizer.tar.bz2&quot; class=&quot;media mediafile mf_bz2&quot; title=&quot;prjs:img_randomizer.tar.bz2 (1.6 KB)&quot;&gt;img_randomizer.tar.bz2&lt;/a&gt;. current version is v0.3.2. note that current implementaiton does not required explicit config file – if it is missing, it will be automatically generated, with default values.
&lt;/p&gt;

&lt;p&gt;
new version better handles big sets of images, containing thousands of images. it is faster as well.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;download&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;download&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;757-1122&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;configuration&quot;&gt;configuration&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
after unpacking archive copy “img_randomizer” executable to your path (for example ~/bin). when run for the first time script will automatically create file ~/.img_randomizer/config. edit it, before usage.
&lt;/p&gt;

&lt;p&gt;
there are 2 variables: ROOT and SEL_PNT that have to be set. ROOT is root directory containing images (searched recursively). SEL_PNT is points count to be added to image that has been selected – it makes images already seen less probable to reappear next time (the bigger value, the less probable it is).
&lt;/p&gt;

&lt;p&gt;
that&amp;#039;s all. now each time you run script, it&amp;#039;ll return name of selected image as output.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;configuration&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;configuration&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1123-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 15 Jun 2021 20:09:50 +0000</pubDate>
        </item>
        <item>
            <title>plans_and_ideas</title>
            <link>https://baszerr.eu/doku.php?id=prjs:plans_and_ideas</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;plans_and_ideas&quot;&gt;plans and ideas&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
this section describes projects that i plan to realize and some ideas that came through my mind. most of this will probably never be done, since 24h/day limitations but it&amp;#039;s worth noticing that interesting idea came up.
&lt;/p&gt;

&lt;p&gt;
TODO
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 15 Jun 2021 20:09:51 +0000</pubDate>
        </item>
        <item>
            <title>print-if-error_shell</title>
            <link>https://baszerr.eu/doku.php?id=prjs:print-if-error_shell</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;print-if-error_shell&quot;&gt;print-if-error shell&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/cron&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/cron&quot;&gt;cron&lt;/a&gt; is a very nice and useful tool. it has a bit annoying mailing policy – it sends e-mail each time something is output on the screen, by the task being executed. in u*ix silence is gold. however there are commands that do no obey this rule (ex. gnu/make), mix stdout with stderr (ex. unix2dos), and so on… this is annoying, since each time job executes it sends an e-mail you&amp;#039;re not really interested in. to silence bastard you need to redirect stdout and stderr to &lt;em&gt;/dev/null&lt;/em&gt;. but wait! what if there actually IS a problem? what if your backups are no longer executing nightly? well – you&amp;#039;ll never find out.
&lt;/p&gt;

&lt;p&gt;
even if you discard only stdout, you still might be missing some context information, in case some script is more verbose by nature. when scripting it is often much easier to handle errors by aborting shell, and pointing out what&amp;#039;s going on in case of longer running ones by echoing non-error messages. so in fact you&amp;#039;re loosing some pieces of information.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;print-if-error shell&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;print-if-error_shell&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-1022&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;solution&quot;&gt;solution&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
being sick and tired of this i&amp;#039;ve decided to write a wrapper to handle this. rules are simple:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; mail should be sent ONLY if the command returned an error. &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; mail should contain the full output of the command.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
wrapper script has been named &lt;em&gt;printiferror&lt;/em&gt; – pretty self-explaining. :)
&lt;/p&gt;

&lt;p&gt;
the initial solution used syntax for taking command and its arguments as parameters (the way &lt;em&gt;time&lt;/em&gt; or &lt;em&gt;exec&lt;/em&gt; commands do). the original crontab:
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;# ...&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;   ionice &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;nice&lt;/span&gt; make-backup &lt;span class=&quot;re5&quot;&gt;--full&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; ionice &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;nice&lt;/span&gt; make-backup &lt;span class=&quot;re5&quot;&gt;--inc&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# ...&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
evolved to:
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;# ...&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;local&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;printiferror ionice &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;nice&lt;/span&gt; make-backup &lt;span class=&quot;re5&quot;&gt;--full&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;local&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;printiferror ionice &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;nice&lt;/span&gt; make-backup &lt;span class=&quot;re5&quot;&gt;--inc&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# ...&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
script works like a charm! what it does is save stdout and stderr in a temporary file and in case command fails, it prints output of that file on the console. this way cron mails only if the script fails.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;solution&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;solution&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;1023-2021&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;solution_20&quot;&gt;solution 2.0&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
it is annoying to put &lt;em&gt;printiferror&lt;/em&gt; command in front of all cron jobs. it is also error prone, by design (if you forget, by the morning you can end up with dozens of spam messages). this is why i went a step ahead – i&amp;#039;ve made this script behave as if it was a shell! thanks to this syntax using it is plain simple – one extra line in the crontab and we&amp;#039;re done:
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;re2&quot;&gt;SHELL&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;local&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;printiferror
&lt;span class=&quot;co0&quot;&gt;# ...&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;   ionice &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;nice&lt;/span&gt; make-backup &lt;span class=&quot;re5&quot;&gt;--full&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; ionice &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;nice&lt;/span&gt; make-backup &lt;span class=&quot;re5&quot;&gt;--inc&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# ...&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
and voila! no spam, and in case of error, you get full messages.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;solution 2.0&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;solution_20&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2022-2646&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;download&quot;&gt;download&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
you can download and use &lt;a href=&quot;https://baszerr.eu/lib/exe/fetch.php?media=prjs:printiferror.txt&quot; class=&quot;media mediafile mf_txt&quot; title=&quot;prjs:printiferror.txt (376 B)&quot;&gt;printiferror&lt;/a&gt; for free – enjoy. :)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;download&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;download&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2647-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 15 Jun 2021 20:09:50 +0000</pubDate>
        </item>
        <item>
            <title>prjs</title>
            <link>https://baszerr.eu/doku.php?id=prjs:prjs</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;projects&quot;&gt;projects&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;em&gt;One man&amp;#039;s “magic” is another man&amp;#039;s engineering.  “Supernatural” is a null word.&lt;/em&gt; – &lt;a href=&quot;https://en.wikipedia.org/wiki/Robert Heinlein&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/Robert Heinlein&quot;&gt;Robert Heinlein&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
some of my projects are listed below. hope you&amp;#039;ll find them interesting too. :)
&lt;/p&gt;

&lt;p&gt;
almost all of my projects are developed under GNU/Linux, mostly with &lt;a href=&quot;https://en.wikipedia.org/wiki/GNU Compiler Collection&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/GNU Compiler Collection&quot;&gt;gcc&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/clang&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/clang&quot;&gt;clang&lt;/a&gt; – you will need these (and possibly some more) to build them.
&lt;/p&gt;

&lt;p&gt;
i also use external servers for keeping repositories, with lots of projects, often not (yet) listed here, due to early stages of development. you can find me on:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.github.com/el-bart&quot; class=&quot;urlextern&quot; title=&quot;https://www.github.com/el-bart&quot; rel=&quot;ugc nofollow&quot;&gt;github&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://bitbucket.org/basz&quot; class=&quot;urlextern&quot; title=&quot;https://bitbucket.org/basz&quot; rel=&quot;ugc nofollow&quot;&gt;bitbucket&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://code.launchpad.net/~basz&quot; class=&quot;urlextern&quot; title=&quot;https://code.launchpad.net/~basz&quot; rel=&quot;ugc nofollow&quot;&gt;launchpad&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projects&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;projects&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-703&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;software-hardware&quot;&gt;software-hardware&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
some of my projects that combines software with hardware.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:avr_servo:avr_servo&quot; class=&quot;wikilink1&quot; title=&quot;prjs:avr_servo:avr_servo&quot; data-wiki-id=&quot;prjs:avr_servo:avr_servo&quot;&gt;AVR Servo&lt;/a&gt; – multiple servo mechanism controller.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:dns320:dns-320&quot; class=&quot;wikilink1&quot; title=&quot;prjs:dns320:dns-320&quot; data-wiki-id=&quot;prjs:dns320:dns-320&quot;&gt;DNS-320&lt;/a&gt; – Linux on D-link &lt;abbr title=&quot;Domain Name System&quot;&gt;DNS&lt;/abbr&gt;-320 &lt;a href=&quot;https://en.wikipedia.org/wiki/Network Attached Storage&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/Network Attached Storage&quot;&gt;NAS&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:door_light:door_light&quot; class=&quot;wikilink1&quot; title=&quot;prjs:door_light:door_light&quot; data-wiki-id=&quot;prjs:door_light:door_light&quot;&gt;door light&lt;/a&gt; – micro-project of proximity sensor for LEDs light turn on.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:t-20_evo:t-20_evo&quot; class=&quot;wikilink1&quot; title=&quot;prjs:t-20_evo:t-20_evo&quot; data-wiki-id=&quot;prjs:t-20_evo:t-20_evo&quot;&gt;T-20 EVO&lt;/a&gt; – Compaq EVO T-20 is thin-client PC-compatible computer without moving parts&lt;sup&gt;&lt;a href=&quot;#fn__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;. here is some short description how to install Linux on it.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:tier:tier&quot; class=&quot;wikilink1&quot; title=&quot;prjs:tier:tier&quot; data-wiki-id=&quot;prjs:tier:tier&quot;&gt;TIER&lt;/a&gt; – mobile robot with simple mono vision system that i&amp;#039;ve made as my master thesis.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:tiger:tiger&quot; class=&quot;wikilink1&quot; title=&quot;prjs:tiger:tiger&quot; data-wiki-id=&quot;prjs:tiger:tiger&quot;&gt;TIGER&lt;/a&gt; – new mobile robotic platform i work on.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:usb_power_ctrl:usb_power_controller&quot; class=&quot;wikilink1&quot; title=&quot;prjs:usb_power_ctrl:usb_power_controller&quot; data-wiki-id=&quot;prjs:usb_power_ctrl:usb_power_controller&quot;&gt;USB power controller&lt;/a&gt; – power extension cord controlled via USB.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:usmc:usmc&quot; class=&quot;wikilink1&quot; title=&quot;prjs:usmc:usmc&quot; data-wiki-id=&quot;prjs:usmc:usmc&quot;&gt;USMC&lt;/a&gt; – Universal Stepper Motor Controller.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;software-hardware&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;software-hardware&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;704-1601&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;software&quot;&gt;software&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
software project that i do/have done.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://github.com/el-bart/beamer_cpp&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/el-bart/beamer_cpp&quot; rel=&quot;ugc nofollow&quot;&gt;beamer C++ template&lt;/a&gt; – easy to use presentation template, based on beamer, that makes presenting code (&lt;a href=&quot;https://en.wikipedia.org/wiki/C++&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/C++&quot;&gt;C++&lt;/a&gt; by default) easier.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:axplincam:axplincam&quot; class=&quot;wikilink1&quot; title=&quot;prjs:axplincam:axplincam&quot; data-wiki-id=&quot;prjs:axplincam:axplincam&quot;&gt;AxpLinCam&lt;/a&gt; – console tool for rotating pan/tilt AXP IP camera under linux.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:build_process:build_process&quot; class=&quot;wikilink1&quot; title=&quot;prjs:build_process:build_process&quot; data-wiki-id=&quot;prjs:build_process:build_process&quot;&gt;build process&lt;/a&gt; – complete build process for C/C++ based projects written with Makefiles.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:ezdlin:ezdlin&quot; class=&quot;wikilink1&quot; title=&quot;prjs:ezdlin:ezdlin&quot; data-wiki-id=&quot;prjs:ezdlin:ezdlin&quot;&gt;EZDlin&lt;/a&gt; – software for linux to flash uCs with zl5prg and zl6prg programmers.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:latex_template:latex_template&quot; class=&quot;wikilink1&quot; title=&quot;prjs:latex_template:latex_template&quot; data-wiki-id=&quot;prjs:latex_template:latex_template&quot;&gt;LaTeX template&lt;/a&gt; – easy to use LaTeX template (+ some macros) for books/reports, with PDF build in Makefile.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:system:system&quot; class=&quot;wikilink1&quot; title=&quot;prjs:system:system&quot; data-wiki-id=&quot;prjs:system:system&quot;&gt;system&lt;/a&gt; – C++ template library with some useful wrappers and helper classes.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:team_tools:team_tools&quot; class=&quot;wikilink1&quot; title=&quot;prjs:team_tools:team_tools&quot; data-wiki-id=&quot;prjs:team_tools:team_tools&quot;&gt;team tools&lt;/a&gt; – collection of scripts to perform rebase and deliver operations. very useful when working in teams and on separate branches.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;software&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;software&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1602-2554&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;d_prints&quot;&gt;3d prints&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
projects made with 3d printer.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:toothbrush_holder:toothbrush_holder&quot; class=&quot;wikilink1&quot; title=&quot;prjs:toothbrush_holder:toothbrush_holder&quot; data-wiki-id=&quot;prjs:toothbrush_holder:toothbrush_holder&quot;&gt;toothbrush holder&lt;/a&gt; – holder for classical toothbrushes.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:lcd_case_for_prusa_i3:lcd_case_for_prusa_i3&quot; class=&quot;wikilink1&quot; title=&quot;prjs:lcd_case_for_prusa_i3:lcd_case_for_prusa_i3&quot; data-wiki-id=&quot;prjs:lcd_case_for_prusa_i3:lcd_case_for_prusa_i3&quot;&gt;LCD case for prusa i3&lt;/a&gt; – case for electronics and LCD for Prusa i3 printer.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:filament_holder:filament_holder&quot; class=&quot;wikilink1&quot; title=&quot;prjs:filament_holder:filament_holder&quot; data-wiki-id=&quot;prjs:filament_holder:filament_holder&quot;&gt;filament holder&lt;/a&gt; – holder for filament w/o own spool.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:filament_spool_holder:filament_spool_holder&quot; class=&quot;wikilink1&quot; title=&quot;prjs:filament_spool_holder:filament_spool_holder&quot; data-wiki-id=&quot;prjs:filament_spool_holder:filament_spool_holder&quot;&gt;filament spool holder&lt;/a&gt; – holder for filament with own spool, of different sizes.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:braun_oral-b_brush_holder:braun_oral-b_brush_holder&quot; class=&quot;wikilink1&quot; title=&quot;prjs:braun_oral-b_brush_holder:braun_oral-b_brush_holder&quot; data-wiki-id=&quot;prjs:braun_oral-b_brush_holder:braun_oral-b_brush_holder&quot;&gt;braun oral-b brush holder&lt;/a&gt; – multiple users? not a problem any more… :)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3d prints&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;d_prints&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2555-3119&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;misc_projects&quot;&gt;misc projects&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
very small projects (programs/devices) i&amp;#039;ve done, plus some, that do not fit in other categories.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:dyndns_update&quot; class=&quot;wikilink1&quot; title=&quot;prjs:dyndns_update&quot; data-wiki-id=&quot;prjs:dyndns_update&quot;&gt;dyndns_update&lt;/a&gt; – script updating dyndns entry.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:img_randomizer&quot; class=&quot;wikilink1&quot; title=&quot;prjs:img_randomizer&quot; data-wiki-id=&quot;prjs:img_randomizer&quot;&gt;img_randomizer&lt;/a&gt; – non-uniform distribution image randomizer.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:print-if-error_shell&quot; class=&quot;wikilink1&quot; title=&quot;prjs:print-if-error_shell&quot; data-wiki-id=&quot;prjs:print-if-error_shell&quot;&gt;print-if-error shell&lt;/a&gt; – pseudo-shell to smart-send &lt;a href=&quot;https://en.wikipedia.org/wiki/cron&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/cron&quot;&gt;cron&lt;/a&gt; outputs.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:rand_junk&quot; class=&quot;wikilink1&quot; title=&quot;prjs:rand_junk&quot; data-wiki-id=&quot;prjs:rand_junk&quot;&gt;rand_junk&lt;/a&gt; – high-speed pseudo random generator.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/lib/exe/fetch.php?media=prjs:mini_projects:rootn.bc.bz2&quot; class=&quot;media mediafile mf_bz2&quot; title=&quot;prjs:mini_projects:rootn.bc.bz2 (233 B)&quot;&gt;rootn.bc.bz2&lt;/a&gt; – script computing n&amp;#039;th root of given number with given precision. written in &lt;a href=&quot;http://www.gnu.org/software/bc/bc.html&quot; class=&quot;urlextern&quot; title=&quot;http://www.gnu.org/software/bc/bc.html&quot; rel=&quot;ugc nofollow&quot;&gt;bc&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:sledge&quot; class=&quot;wikilink1&quot; title=&quot;prjs:sledge&quot; data-wiki-id=&quot;prjs:sledge&quot;&gt;sledge&lt;/a&gt; – sledge with spring, created during my last days off.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:usb2ttlrs&quot; class=&quot;wikilink1&quot; title=&quot;prjs:usb2ttlrs&quot; data-wiki-id=&quot;prjs:usb2ttlrs&quot;&gt;usb2ttlrs&lt;/a&gt; – USB to TTL-level RS-232 converter.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;misc projects&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;misc_projects&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;3120-3831&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit6&quot; id=&quot;abandonware&quot;&gt;abandonware&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
this is section for the projects that were introduced on this site but, for some reason, are no longer maintained.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:graphics:graphics&quot; class=&quot;wikilink1&quot; title=&quot;prjs:graphics:graphics&quot; data-wiki-id=&quot;prjs:graphics:graphics&quot;&gt;graphics&lt;/a&gt; – C++ template library for manipulating images.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://baszerr.eu/doku.php?id=prjs:vectors:vectors&quot; class=&quot;wikilink1&quot; title=&quot;prjs:vectors:vectors&quot; data-wiki-id=&quot;prjs:vectors:vectors&quot;&gt;vectors&lt;/a&gt; – C++ template library for manipulating multidimensional vectors.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;abandonware&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;abandonware&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;3832-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;this page was previously hosted on one of these.&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 15 Jun 2021 20:09:53 +0000</pubDate>
        </item>
        <item>
            <title>rand_junk</title>
            <link>https://baszerr.eu/doku.php?id=prjs:rand_junk</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;rand_junk&quot;&gt;rand_junk&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
few times i&amp;#039;ve found a need of getting large amounts (tens..hundreds of gigabytes) of pseudo-random data, where randomness is not as important as speed of it&amp;#039;s generation.
&lt;/p&gt;

&lt;p&gt;
this software is on &lt;a href=&quot;https://en.wikipedia.org/wiki/BSD licenses&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/BSD licenses&quot;&gt;revised-BSD&lt;/a&gt; license.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;rand_junk&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;rand_junk&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-260&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;common_use_cases&quot;&gt;common use cases&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
typical example is preparing hard drive for an encryption. using /dev/urandom with reads about 8MB/s takes ages to fill modern-sized drives, and initial filling of them is just a way to prevent easy estimation where the data really is.
&lt;/p&gt;

&lt;p&gt;
another good example is checking/comparing the compression level of different algorithms. just render few random files and try to compress them with different packers.
&lt;/p&gt;

&lt;p&gt;
testing high-speed networks bandwidth can be a case too. thanks to this you minimize influence of compression, that might be provided by underlying protocols. after sending and receiving such a data you can check their checksums as well, to check if it works fine.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;common use cases&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;common_use_cases&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;261-962&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;tool_and_usage&quot;&gt;tool and usage&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
this is where this program comes in – it generates pseudo-random junk to stdout at the speed of about 0.7GB/s, on a casual PC. this is sufficient to saturate modern drives, by the the order of magnitude.
&lt;/p&gt;

&lt;p&gt;
usage is simple. to build just type &amp;#039;make&amp;#039;. Makefile is prepared to handle gcc 4.6 and gcc 4.7, since program uses &lt;a href=&quot;https://en.wikipedia.org/wiki/C++11&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/C++11&quot;&gt;C++11&lt;/a&gt; features. to generate 100GB file of pseudo-random content just type:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;./rand_junk.out 1001024 &amp;gt; my_rand_file.bin&lt;/pre&gt;

&lt;p&gt;
there is also a simple tool that shows how much of a different characters there was on an input (i.e. distribution of output bytes):
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;./check.out &amp;lt; my_rand_file.bin&lt;/pre&gt;

&lt;p&gt;
note that &amp;#039;check&amp;#039; tool is just a simple checker and was never optimized, thus is MUCH slower than &amp;#039;rand_junk&amp;#039;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;tool and usage&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;tool_and_usage&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;963-1716&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;how_does_it_work&quot;&gt;how does it work&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
the idea is simple – it reads 1MB of pseudo-random data from the /dev/urandom and launches two threads:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; constantly reading new content from /dev/urandom&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; doing some pseudo-random modifications at a high speed (xoring with random values, etc…)&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
at the same time main thread is constantly outputting buffer&amp;#039;s content on the stdout, until specified amount of data is produced. to make data even more equally distributed it also does xor of data with the previous content, in each thread, before publishing. all of this happens in parallel (separate threads), thus making output “random enough” for many typical usages, where huge amount of pseudo-random data is needed.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;how does it work&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;how_does_it_work&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1717-2423&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;download&quot;&gt;download&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
you can download &lt;a href=&quot;https://baszerr.eu/lib/exe/fetch.php?media=prjs:rand_junk.tar.bz2&quot; class=&quot;media mediafile mf_bz2&quot; title=&quot;prjs:rand_junk.tar.bz2 (3 KB)&quot;&gt;rand_junk&lt;/a&gt; and do what ever you want with it. :) current version is v2.0.1.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;download&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;download&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2424-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 15 Jun 2021 20:09:50 +0000</pubDate>
        </item>
        <item>
            <title>sledge</title>
            <link>https://baszerr.eu/doku.php?id=prjs:sledge</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;sledge&quot;&gt;sledge&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
motto: &lt;em&gt;“if it smells it&amp;#039;s chemistry, if it crawls it&amp;#039;s biology, if it doesn&amp;#039;t work it&amp;#039;s physics”&lt;/em&gt;.
&lt;/p&gt;

&lt;p&gt;
at the begin of february 2009 i had few days off which i&amp;#039;ve spent at my home city. wanting to do something unusual this time i&amp;#039;ve decided to create sledge of my own invent. you can but a lot of them in different stores for very low prices, but the fun is not the same… :)
&lt;/p&gt;

&lt;p&gt;
sledge has been optimized for sledge running. :)
&lt;/p&gt;

&lt;p&gt;
total cost of project was around 150PLN (~25EUR) + painting (i haven&amp;#039;t done this yet ;)).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;sledge&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sledge&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-542&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;main_ideas&quot;&gt;main ideas&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://baszerr.eu/lib/exe/detail.php?id=prjs%3Asledge&amp;amp;media=prjs:low_dscf6525.jpg&quot; class=&quot;media&quot; title=&quot;prjs:low_dscf6525.jpg&quot;&gt;&lt;img src=&quot;https://baszerr.eu/lib/exe/fetch.php?w=350&amp;amp;tok=99ec97&amp;amp;media=prjs:low_dscf6525.jpg&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;low_dscf6525.jpg&quot; alt=&quot;low_dscf6525.jpg&quot; width=&quot;350&quot; /&gt;&lt;/a&gt;
there are two ideas that i wanted to implement in the construction:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; slanting runner&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; seat with a spring&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
first idea is to make sledge more stable when going through curves. when runners are made from closed profile of rectangular shape and are under some angle to the ground, when one runner goes up the second one gives extra friction which helps getting back to initial position.
&lt;/p&gt;

&lt;p&gt;
second idea is obvious – when doing sledge running behind a car, riding with higher speeds (let&amp;#039;s say: 40-60[km/h]) “meeting” hole in the ground can be painful… ;) having spring (part of absorber) can minimize this unpleasant effect plus can give you additional fun when riding on highly-hollow ground. :)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;main ideas&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;main_ideas&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;543-1298&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;the_mechanics&quot;&gt;the mechanics&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
having in mind technical problems i&amp;#039;ve decided to resign from making slanting runner under some angle to the ground. mayby next time, when i&amp;#039;ll have more time and patience… ;)
&lt;/p&gt;

&lt;p&gt;
making amortization with a spring appeared to be a bit more tricky. after talk with &lt;a href=&quot;#special_thanks&quot; title=&quot;prjs:sledge ↵&quot; class=&quot;wikilink1&quot;&gt;Kuba&lt;/a&gt; we&amp;#039;ve decided to use horizontal configuration (horizontal spring) as shown on the picture:
&lt;a href=&quot;https://baszerr.eu/lib/exe/detail.php?id=prjs%3Asledge&amp;amp;media=prjs:side_view_draft.png&quot; class=&quot;media&quot; title=&quot;prjs:side_view_draft.png&quot;&gt;&lt;img src=&quot;https://baszerr.eu/lib/exe/fetch.php?w=450&amp;amp;tok=4b4c68&amp;amp;media=prjs:side_view_draft.png&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;450&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;https://baszerr.eu/lib/exe/detail.php?id=prjs%3Asledge&amp;amp;media=prjs:low_dscf6526.jpg&quot; class=&quot;media&quot; title=&quot;prjs:low_dscf6526.jpg&quot;&gt;&lt;img src=&quot;https://baszerr.eu/lib/exe/fetch.php?w=150&amp;amp;tok=cb1659&amp;amp;media=prjs:low_dscf6526.jpg&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;low_dscf6526.jpg&quot; alt=&quot;low_dscf6526.jpg&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;https://baszerr.eu/lib/exe/detail.php?id=prjs%3Asledge&amp;amp;media=prjs:low_dscf6527.jpg&quot; class=&quot;media&quot; title=&quot;prjs:low_dscf6527.jpg&quot;&gt;&lt;img src=&quot;https://baszerr.eu/lib/exe/fetch.php?w=100&amp;amp;tok=d7ac45&amp;amp;media=prjs:low_dscf6527.jpg&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;low_dscf6527.jpg&quot; alt=&quot;low_dscf6527.jpg&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;
where colors are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; black – main construction (welded)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; green – spring mounting and a screw to connect both ends (long one :))&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; yellow/black – spring itself&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; blue – silentblock&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; red – strut-like element that makes crucial structural part far more resistible&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
silentblocks are place at the both sides of sledge. this allows moving seat up and down under the pressure, which in turn squeezes spring.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;the mechanics&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_mechanics&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1299-2221&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;parts&quot;&gt;parts&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
details you&amp;#039;ll need are:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; spring – you can but these as a part of car suspension (absorber is not needed here – spring itself should give more fun :)) at the car dumping places (in polish: “szrot” :)).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; spring&amp;#039;s mounting – it is best to ask lathe hand to do this for you in metal. shape depends on spring&amp;#039;s mounting parts you already have bought with a spring.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; two silentblocks.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; wood for covering the seat.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
in addition you&amp;#039;ll need following metal parts (all are closed profiles):
&lt;/p&gt;
&lt;div class=&quot;table sectionedit5&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; name &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; type [mm]x[mm] &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt; length[cm] &lt;/th&gt;&lt;th class=&quot;col3&quot;&gt; count &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; runners &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 20&amp;times;50 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 100 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; 2 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; back column &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 30&amp;times;30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 11 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; 2 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; back cross-bar &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 30&amp;times;30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 40 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; 1 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; front column &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 30&amp;times;30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 20 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; 2 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; front cross-bar &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 30&amp;times;30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 34 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; 1 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; suspension&amp;#039;s transmission &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 30&amp;times;30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 20 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; 1 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; seat sides &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 30&amp;times;30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 70 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; 2 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; seat ends &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; 30&amp;times;30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 34 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; 2 &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2736-3062&amp;quot;} --&gt;
&lt;p&gt;
i&amp;#039;ve also used 4 flats 4[mm] thick, 40[mm] wide and 5[cm] long to mount silentblocks. to make mounting of spring easier i used pipe 90[mm] in cross-section and 90[mm].
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;parts&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;parts&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2222-3232&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;improvements_made&quot;&gt;improvements made&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://baszerr.eu/lib/exe/detail.php?id=prjs%3Asledge&amp;amp;media=prjs:struts_location.jpg&quot; class=&quot;media&quot; title=&quot;prjs:struts_location.jpg&quot;&gt;&lt;img src=&quot;https://baszerr.eu/lib/exe/fetch.php?w=200&amp;amp;tok=3db0d8&amp;amp;media=prjs:struts_location.jpg&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;strut&amp;#039;s location&quot; alt=&quot;strut&amp;#039;s location&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;https://baszerr.eu/lib/exe/detail.php?id=prjs%3Asledge&amp;amp;media=prjs:fender.jpg&quot; class=&quot;media&quot; title=&quot;prjs:fender.jpg&quot;&gt;&lt;img src=&quot;https://baszerr.eu/lib/exe/fetch.php?w=200&amp;amp;tok=a3956e&amp;amp;media=prjs:fender.jpg&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;fender&quot; alt=&quot;fender&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;
since project has been initially started (last year, i.e. 2009) i&amp;#039;ve added 2 small improvements:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; addition of strut in place where the strongest forces are present.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; added small fenders on the back of the construction, to avoid metal-metal hitting when running high-speed.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
i used small piece of thick, metal plate as a strut. i&amp;#039;ve welded it to both elements, right in the corner, on the both sides. in place of small fenders (ex. like the ones used to block the door from opening too wide) i used tight rope that&amp;#039;s doing just fine and does not need that much space and so the spring can move in a bit wider ranges.
&lt;/p&gt;

&lt;p&gt;
both improvement can be seen on the images.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;improvements made&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;improvements_made&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;3233-4014&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;field_trials_and_observations&quot;&gt;field trials and observations&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://baszerr.eu/lib/exe/detail.php?id=prjs%3Asledge&amp;amp;media=prjs:final_construction.jpg&quot; class=&quot;media&quot; title=&quot;prjs:final_construction.jpg&quot;&gt;&lt;img src=&quot;https://baszerr.eu/lib/exe/fetch.php?w=300&amp;amp;tok=44b0ca&amp;amp;media=prjs:final_construction.jpg&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;final sledge&quot; alt=&quot;final sledge&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;
yesterday&lt;sup&gt;&lt;a href=&quot;#fn__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; i&amp;#039;ve finished field trials – riding down the nearby hills. :) my first observation was that this sledge ride totally different from any one i had a chance to ride ever before! they ride very fast and through the vast range of snow. they ride well on ice/polished snow, just like any others, but they ride very well on fluffy snow as well. from my experience most of the sledges just “dived” into such a snow and stopped, while this one just runs it by! and so the speed is really good, nearly despite of the hill you&amp;#039;re riding on.
&lt;/p&gt;

&lt;p&gt;
when welding metal parts last year i got lazy and resigned form slanting runners in favour of regular, “flat” runners (0[deg] angle to the ground). this happened not to be the best idea, since flat runners are responsible for poor manoeuvrability, especially on low speeds. whey you ride faster, you can influence it a bit, but when speed is normal/slow sledge usually just run down the hill.
&lt;/p&gt;

&lt;p&gt;
there is an interesting feature though – since turning direction is so hard, it is easy to rotate it a bit when riding down the hill and keep running in a slide with some angle to the running direction. in practice it is possible to slide in about ~30[deg] constantly. it gives and interesting impression when doing for the first time. :)
&lt;/p&gt;

&lt;p&gt;
since sliding is easy, you can break easily too! when your road ends you can just slide at a higher angle and this will slower you a lot and change direction (when you&amp;#039;re on flat area, already off the hill) so in about 2-3[m] you can make 90[deg] turn and stop sledge. on sledges i ride in the past this would be sure crash&amp;#039;n&amp;#039;roll situation.
&lt;/p&gt;

&lt;p&gt;
sledge&amp;#039;s construction is pretty heavy – i estimate it to be around 15[kg] in total! and here comes additional feature - since they&amp;#039;re heavy and wide, whey&amp;#039;re very stable when moving – it&amp;#039;s not so easy to roll over on them. until now it happened to me just once, when i was sliding under about 45[deg] and hit small hole in the snow. it was kind of fun – boy, i was sure surprised… ;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;field trials and observations&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;field_trials_and_observations&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;4015-6134&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;special_thanks&quot;&gt;special thanks&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
last but not least i&amp;#039;d like to give special thanks to Kuba Szurgot for helping getting things done right: starting with the initial concept, helping with choosing proper materials and on searching for them finishing. additional thanks i&amp;#039;d like to direct also to Andrzej Szurgot for giving access to his workshop, where dispite of all you need, you can find more than you can imagine… ;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;special thanks&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;special_thanks&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;6135-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;2010.01.15&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 15 Jun 2021 20:09:50 +0000</pubDate>
        </item>
        <item>
            <title>usb2ttlrs</title>
            <link>https://baszerr.eu/doku.php?id=prjs:usb2ttlrs</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;usb2ttlrs_-_usb_to_ttl-level_rs-232_converter&quot;&gt;usb2ttlrs - USB to TTL-level RS-232 converter&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://baszerr.eu/lib/exe/detail.php?id=prjs%3Ausb2ttlrs&amp;amp;media=prjs:img_6112.jpg&quot; class=&quot;media&quot; title=&quot;prjs:img_6112.jpg&quot;&gt;&lt;img src=&quot;https://baszerr.eu/lib/exe/fetch.php?w=250&amp;amp;tok=55a0c8&amp;amp;media=prjs:img_6112.jpg&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;converter - macro&quot; alt=&quot;converter - macro&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;https://baszerr.eu/lib/exe/detail.php?id=prjs%3Ausb2ttlrs&amp;amp;media=prjs:img_6119.jpg&quot; class=&quot;media&quot; title=&quot;prjs:img_6119.jpg&quot;&gt;&lt;img src=&quot;https://baszerr.eu/lib/exe/fetch.php?w=250&amp;amp;tok=429ac7&amp;amp;media=prjs:img_6119.jpg&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;converter - top view&quot; alt=&quot;converter - top view&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
while working with microcontrollers it is often required to communicate with the computer or other piece of hardware. since nearly all uCs have &lt;a href=&quot;https://en.wikipedia.org/wiki/USART&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/USART&quot;&gt;USART&lt;/a&gt; it is a natural choice. the bad news is that &lt;a href=&quot;https://en.wikipedia.org/wiki/RS-232&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/RS-232&quot;&gt;RS-232&lt;/a&gt; uses voltages way beyond typical +5V. thus, before connecting to the PC, level conversions need to be done. this is not all - nowadays it is very uncommon for a PC to even have RS-232 port! on the other hand &lt;a href=&quot;https://en.wikipedia.org/wiki/USB&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/USB&quot;&gt;USB&lt;/a&gt; is widespread.
&lt;/p&gt;

&lt;p&gt;
the key of this nano-project is to enable easy communications with the uC, that operates on +5V USART, to talk with computer via USB.
&lt;/p&gt;

&lt;p&gt;
there is a nice chip that provides USART to USB conversion, that is 100% USB compatible and does not require any extra hardware parts, nor software on uC side. may i introduce, the hero of this article - FT232. :) the board itself is trivial - one connects USB on the one and and GND, RX, TX, RTS, CTS on the other. for many applications it is just enough to short wire RTS with CTS (no flow control).
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://baszerr.eu/lib/exe/detail.php?id=prjs%3Ausb2ttlrs&amp;amp;media=prjs:usb2ttlrs-board.png&quot; class=&quot;media&quot; title=&quot;prjs:usb2ttlrs-board.png&quot;&gt;&lt;img src=&quot;https://baszerr.eu/lib/exe/fetch.php?media=prjs:usb2ttlrs-board.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; title=&quot;board view&quot; alt=&quot;board view&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
though device is simple, it is very useful when debug communication is required fast. board schematics and PCB layout can be obtained via &lt;a href=&quot;https://github.com/el-bart/usb2ttlrs&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/el-bart/usb2ttlrs&quot; rel=&quot;ugc nofollow&quot;&gt;USB2TTLRS&lt;/a&gt; project on github. there are &lt;a href=&quot;https://github.com/el-bart/usb2ttlrs/tags&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/el-bart/usb2ttlrs/tags&quot; rel=&quot;ugc nofollow&quot;&gt;recent releases&lt;/a&gt; available via tags as well.
&lt;/p&gt;

&lt;p&gt;
license is &lt;a href=&quot;https://en.wikipedia.org/wiki/revised BSD license&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/revised BSD license&quot;&gt;revised BSD&lt;/a&gt; - feel free to do whatever you want with it.
&lt;/p&gt;

&lt;p&gt;
a bit beyond the scope of this project, but it is worth mentioning an interesting tool for linux, to set FT232 parameters – &lt;a href=&quot;http://rtr.ca/ft232r&quot; class=&quot;urlextern&quot; title=&quot;http://rtr.ca/ft232r&quot; rel=&quot;ugc nofollow&quot;&gt;ft232r_prog&lt;/a&gt;. FT232 chip has an interesting features that allows setting multipurpose pins to do interesting stuff, like giving accurate clock for uC, or enabling signal for sleep modes. this is an open source program that does it from the command line. enjoy! :)
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 15 Jun 2021 20:09:51 +0000</pubDate>
        </item>
    </channel>
</rss>
