<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Philippe Strauss website</title><link>https://straussengineering.ch/</link><description>Website for Philippe Strauss</description><atom:link href="https://straussengineering.ch/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 &lt;a href="mailto:catseyechandra74 at gmail dot com"&gt;Philippe Strauss&lt;/a&gt; 
&lt;a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/"&gt;
&lt;img alt="Creative Commons License BY-NC-SA"
style="border-width:0; margin-bottom:12px;"
src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"&gt;&lt;/a&gt;</copyright><lastBuildDate>Mon, 13 Apr 2026 21:32:24 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Curriculum Vitæ</title><link>https://straussengineering.ch/posts/cv-net/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;div&gt;&lt;h4&gt;Présentation&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Ingénieur &lt;a href="https://www.heig-vd.ch"&gt;ETS/HES&lt;/a&gt; en télécommunication&lt;/strong&gt; de 51 ans, &lt;strong&gt;dévoré par une passion dévorante pour les sciences et technologies dès l'âge de 12-13 ans&lt;/strong&gt; (et c'est cela qui compte &lt;em&gt;réellement&lt;/em&gt;, plus que le cursus d'études, on en devient ainsi une &lt;em&gt;éponge&lt;/em&gt; à conaissance pour la suite), &lt;a href="https://www.etml.ch/"&gt;pragmatique&lt;/a&gt;, je suis actuellement à la recherche de nouveaux mandats!&lt;/p&gt;
&lt;h4&gt;Domaines de compétences&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sécurité informatique:&lt;/strong&gt; Sécurisation de Linux (hardening) incluant la &lt;strong&gt;configuration, patching et compilation super sécurisée et custom du noyau (kernel)&lt;/strong&gt;. Veille technologique de &lt;a href="https://fil-c.org/"&gt;&lt;strong&gt;Fil-C&lt;/strong&gt;&lt;/a&gt; et autres moyens de sécurisation logicielle sous Linux.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Déploiement, gestion et scripting de &lt;a href="https://en.wikipedia.org/wiki/Intrusion_detection_system"&gt;&lt;strong&gt;NIDS&lt;/strong&gt;&lt;/a&gt; open-source &lt;a href="https://suricata.io/"&gt;Suricata&lt;/a&gt; et &lt;a href="https://zeek.org/"&gt;Zeek&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configuration et déploiement de &lt;strong&gt;Firewall/VPN&lt;/strong&gt; basé sur &lt;strong&gt;Cisco ASA&lt;/strong&gt; et Linux.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Equilibrage de trafic à l'aide de &lt;strong&gt;communautés &lt;a href="https://en.wikipedia.org/wiki/Border_Gateway_Protocol"&gt;BGP&lt;/a&gt;&lt;/strong&gt;. Développement et déploiement de communautés BGP pour tous types d'usages, routeurs et réseaux aux technologies d'internet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://debian-handbook.info/browse/stable/sect.supervision.html"&gt;Supervision de serveurs&lt;/a&gt; très sécurisée à l'aide de &lt;a href="https://packages.debian.org/sid/logcheck"&gt;logcheck&lt;/a&gt; et &lt;a href="https://en.wikipedia.org/wiki/Advanced_Intrusion_Detection_Environment"&gt;AIDE&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://straussengineering.ch/posts/cv-net/"&gt;Read more…&lt;/a&gt; (2 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><guid>https://straussengineering.ch/posts/cv-net/</guid><pubDate>Sun, 21 Dec 2025 17:53:00 GMT</pubDate></item><item><title>A 30 SLOC CLI native code sound file player</title><link>https://straussengineering.ch/posts/soundplayer-30-sloc.md/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;p&gt;Here is a short, approximatively 30 SLOC OCaml code to play a soundfile through Jack or Pipewire. I like tidy, simple, straight to the point code and languages, minimizing the number of SLOC to achieve a given task, but still compiled to native code with a serious, highly bug-screening compilation process. Ocaml ideally fits the bill here, but a garbage collector based language does not makes things easy regarding real-time constraints. We use &lt;code&gt;ocaml-bjack&lt;/code&gt;, which buffers sound I/O and we give half a second of buffering to shield us from the GC runtime.&lt;/p&gt;
&lt;p&gt;First lets open the soundfile using &lt;code&gt;ocaml-libsndfile&lt;/code&gt; and query the number of channels and samplerate of the file:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="bp"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;soundfile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="o"&gt;.(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;sf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Sndfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;openfile&lt;/span&gt; &lt;span class="n"&gt;soundfile&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;nchan&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Sndfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;channels&lt;/span&gt; &lt;span class="n"&gt;sf&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;sfreq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Sndfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;samplerate&lt;/span&gt; &lt;span class="n"&gt;sf&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
    &lt;span class="nn"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;printf&lt;/span&gt; &lt;span class="s2"&gt;"Opened sound file %s.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;%!"&lt;/span&gt; &lt;span class="n"&gt;soundfile&lt;/span&gt; &lt;span class="o"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Next we start our Jack client and indicate a one second depth buffer &lt;code&gt;(sfreq*nchan)&lt;/code&gt; for I/O of which we'll use half:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;    &lt;span class="nn"&gt;Bjack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_conversion_function&lt;/span&gt; &lt;span class="nn"&gt;Bjack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Best_quality&lt;/span&gt; &lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;bjk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Bjack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open_t&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;rate&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;sfreq&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;bits_per_sample&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;input_channels&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;output_channels&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;nchan&lt;/span&gt;
        &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;:[&lt;/span&gt; &lt;span class="nn"&gt;Bjack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Output&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;client_name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"sfplay"&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;ringbuffer_size&lt;/span&gt;&lt;span class="o"&gt;:(&lt;/span&gt;&lt;span class="n"&gt;sfreq&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;nchan&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="bp"&gt;()&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
    &lt;span class="nn"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;printf&lt;/span&gt; &lt;span class="s2"&gt;"Opened JACK audio device.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;%!"&lt;/span&gt; &lt;span class="o"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now define a buffer for passing data from libsndfile to jack:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;buflen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="c"&gt;(* samples per channel *)&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;inlen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;buflen&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;nchan&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;interleaved&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt; &lt;span class="n"&gt;inlen&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;More interestening, we receive data from &lt;code&gt;libsndfile&lt;/code&gt; in a normalized to ]-1.0; +1.0] stream of floating point values, while &lt;code&gt;ocaml-bjack&lt;/code&gt; accept samples in a stream of 16bit integers encoded in a string. The function &lt;code&gt;short_from_float&lt;/code&gt; takes a float, amplify it by 32768 and return a pair of values bounded by [0; 255], ready to be encoded as characters in a string. Next the function &lt;code&gt;paircat&lt;/code&gt; takes as input an Array of such pairs and build a string representing a flow of samples using a fold.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;short_from_float&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;inint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;int_of_float&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32768&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="o"&gt;*.&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;lower&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inint&lt;/span&gt; &lt;span class="ow"&gt;land&lt;/span&gt; &lt;span class="mh"&gt;0xff&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;upper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inint&lt;/span&gt; &lt;span class="ow"&gt;land&lt;/span&gt; &lt;span class="mh"&gt;0xff00&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;lsr&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
        &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;upper&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;paircat&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;cp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
        &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;Char&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chr&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snd&lt;/span&gt; &lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;Char&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chr&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fst&lt;/span&gt; &lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Note that the caret means string concatenation and &lt;code&gt;Char.chr&lt;/code&gt; return a character out of its integer index in the 8bit ASCII table, while fst and snd return the first and second in a pair, respectively.
We then define a pause time half the time to sink a &lt;code&gt;buflen&lt;/code&gt; buffer:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;pausetime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;float_of_int&lt;/span&gt; &lt;span class="n"&gt;buflen&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/.&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="o"&gt;*.&lt;/span&gt; &lt;span class="n"&gt;float_of_int&lt;/span&gt; &lt;span class="n"&gt;sfreq&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We start the processing loop until an indication there is nothing more to read from the soundfile:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ref&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nn"&gt;Bjack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_bytes_stored&lt;/span&gt; &lt;span class="n"&gt;bjk&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;sfreq&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;nchan&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Here is the main processing of this program, we read the soundfile &lt;code&gt;buflen*nchan&lt;/code&gt; at a time, use &lt;code&gt;Array.map&lt;/code&gt; and &lt;code&gt;fold_left&lt;/code&gt; to convert our floats to a string, and write this string in the Jack ringbuffer:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;            &lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nn"&gt;Sndfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="n"&gt;sf&lt;/span&gt; &lt;span class="n"&gt;interleaved&lt;/span&gt; &lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;pairs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;short_from_float&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;interleaved&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
            &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;shorts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fold_left&lt;/span&gt; &lt;span class="n"&gt;paircat&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt; &lt;span class="n"&gt;pairs&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
            &lt;span class="n"&gt;ignore&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;Bjack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt; &lt;span class="n"&gt;bjk&lt;/span&gt; &lt;span class="n"&gt;shorts&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;When enough data is in the Jack ringbuffer, we simply idle doing nothing, for a time long enough to empty a bit over one &lt;code&gt;buflen*nchan&lt;/code&gt; in the Jack ringbuffer. Note that using map and fold here imply allocating and collecting arrays of memory inside the tight processing loop, this is not an ideal way of writing a soft real-time program. It can be seen by looking at the CPU usage, something suboptimal is going on (the reccuring, high frequency memory allocation of relatively large arrays). This is a short tutorial only, but shows that OCaml, even used far from its design goal (the Coq theorem prover implementation language) is still able to cope with basics multimedia requirements. It happens, computers history shows, that OCaml has ended as being a broad, expressive general purpose programming language.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;        &lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nn"&gt;Unix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleepf&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;.*.&lt;/span&gt;&lt;span class="n"&gt;pausetime&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="nn"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;printf&lt;/span&gt; &lt;span class="s2"&gt;"Bjack.get_bytes_stored=%d&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s2"&gt;%!"&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;Bjack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_bytes_stored&lt;/span&gt; &lt;span class="n"&gt;bjk&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;done&lt;/span&gt; &lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nn"&gt;Bjack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt; &lt;span class="n"&gt;bjk&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;That's it, a little starter dish in OCaml with more than a "Hello world" or a fibonacci, for peoples having other simpler language as a background.&lt;/p&gt;</description><category>DSP</category><category>OCaml</category><category>Programming</category><guid>https://straussengineering.ch/posts/soundplayer-30-sloc.md/</guid><pubDate>Wed, 28 Aug 2024 13:14:57 GMT</pubDate></item><item><title>Bookmarks destocking (in frenglish)</title><link>https://straussengineering.ch/posts/bookmarks/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;div&gt;&lt;ul&gt;
&lt;li&gt;Some great &lt;a href="https://ig.ft.com/generative-ai/"&gt;animated graphics&lt;/a&gt; explaining the inner working of a large language model (LLM) in AI.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rts.ch/play/tv/sur-les-docs/video/cinq-nouvelles-du-cerveau?urn=urn:rts:video:14340721"&gt;Cinq nouvelles du cerveau&lt;/a&gt;: un documentaire magnifique, pistes de réflexions sur les questionnements soulevés par l'IA.&lt;/li&gt;
&lt;li&gt;Finally an explanation that I get about &lt;a href="https://mfaizan.github.io/2022/03/08/why-tensors.html"&gt;what is a tensor&lt;/a&gt; in physics and mathematics.&lt;/li&gt;
&lt;li&gt;Une &lt;a href="https://straussaudio.ch/share/Qu'est-ce%20qu'un%20tenseur%20%ef%bc%9f%20%5bzPRbbM4KJBY%5d.webm"&gt;très bonne vidéo en français&lt;/a&gt; avec le même but explicatif.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://scienceetonnante.com/"&gt;Science étonnante&lt;/a&gt;, l'excellent site de vulgarisation scientifique de David Louapre.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nautil.us/i-just-want-to-know-what-im-made-of-14367/"&gt;I just want to know what I'm made of&lt;/a&gt;, great article about the few, difficults advances about quantum mechanics those last... 80 years!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://scienceetonnante.com/2018/04/13/lexperience-des-fentes-dyoung-en-mecanique-quantique/"&gt;La plus belle expérience de la physique&lt;/a&gt; par David Louapre.&lt;/li&gt;
&lt;li&gt;Single photon &lt;a href="https://www.researchgate.net/publication/51187205_Observing_the_Average_Trajectories_of_Single_Photons_in_a_Two-Slit_Interferometer"&gt;trajectory reconstruction by weak measurements&lt;/a&gt; in the double-slit experiment.&lt;/li&gt;
&lt;li&gt;Hence my favorite quantum mechanics interpretation: &lt;a href="https://arxiv.org/abs/1902.05108"&gt;Pilot wave and retrocausal models&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Most prominents quantum mechanics &lt;a href="https://en.wikipedia.org/wiki/Interpretations_of_quantum_mechanics"&gt;interpretations&lt;/a&gt; on wikipedia.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.quantamagazine.org/what-is-quantum-field-theory-and-why-is-it-incomplete-20220810/"&gt;What Is Quantum Field Theory&lt;/a&gt; and Why Is It Incomplete, by David Tong.&lt;/li&gt;
&lt;li&gt;We know dozens of parameters about &lt;a href="https://www.quantamagazine.org/what-is-a-particle-20201112/"&gt;what a particle is&lt;/a&gt;, yet we don't know firmly what is a particle.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://scienceetonnante.com/2015/06/01/lenergie-du-vide-la-plus-grosse-erreur-de-toute-lhistoire-de-la-physique-video/"&gt;La plus grand erreur de la physique&lt;/a&gt; par David Louapre, illustration des limites du savoir scientifique.&lt;/li&gt;
&lt;li&gt;A fascinating field of research: trying to understand totally, or "reverse-engineer" photosynthesis. &lt;a href="https://kavlifoundation.org/news/unraveling-the-quantum-mysteries-of-photosynthesis"&gt;Unraveling the Quantum Mysteries of Photosynthesis&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Even after decades of study, mathematicians find themselves unable to answer questions about the repeated execution of very simple rules — the most basic “dynamical systems”. &lt;a href="https://www.quantamagazine.org/entropy-bagels-and-other-complex-structures-emerge-from-simple-rules-20240227/"&gt;‘Entropy Bagels’ and Other Complex Structures Emerge From Simple Rules&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://straussaudio.ch/share/Lilium%20Jet%20achieves%20full%20transition%20on%20wings%20and%20canards%20%5bywJWka1evH8%5d.webm"&gt;Lillium&lt;/a&gt;: prototype d'un impressionant petit avion-taxi.&lt;/li&gt;
&lt;li&gt;Deux entretiens avec Slavoz Zizek, un génial philosophe contemporain du vieux continent, &lt;a href="https://www.arte.tv/fr/videos/113181-000-A/au-fond-de-sa-pensee-slavoj-zizek/"&gt;un sur arte&lt;/a&gt; l'autre sur &lt;a href="https://www.youtube.com/watch?v=06KiOj6gjbs"&gt;iai tv&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Mark Alfano et &lt;a href="https://www.youtube.com/watch?v=p2gEH7tNL2k"&gt;son travail magnifique&lt;/a&gt; de cardinalités sur des concepts du sens moral.&lt;/li&gt;
&lt;li&gt;Le site web de &lt;a href="https://marcchesney.com/"&gt;Marc Chesney&lt;/a&gt;, un économiste à l'avant-garde. &lt;a href="https://fr.wikipedia.org/wiki/Marc_Chesney"&gt;Ici sa page wikipedia&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/GB4s5b9NL3I"&gt;Capitalism will eat democracy - unless we speak up by Yanis Varoufakis&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Connaissez-vous la finance de l'ombre, dite "shadow banking" en anglais? Non? alors &lt;a href="https://fr.wikipedia.org/wiki/Finance_de_l%27ombre"&gt;lisez impérativement sa page wikipedia&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;Signaling System #7 (SS7 - worldwide phone signaling protocol) &lt;a href="https://www.theguardian.com/technology/2016/apr/19/ss7-hack-explained-mobile-phone-vulnerability-snooping-texts-calls"&gt;hacking&lt;/a&gt;: in a single word: frightening, to say the least!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rts.ch/play/tv/geopolitis/video/tous-espionnes?urn=urn:rts:video:13870769"&gt;Pegasus, un espion dans votre poche&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://polyvalens.com"&gt;polyvalens.com&lt;/a&gt;: &lt;a href="http://www.polyvalens.com/blog/wavelets/theory/"&gt;A really friendly guide to wavelets&lt;/a&gt; for engineers (and not mathematicians).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.newscientist.com/gallery/dn16170-snowflakes/"&gt;Snowflakes&lt;/a&gt; as you've never seen them before!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://straussengineering.ch/posts/bookmarks/"&gt;Read more…&lt;/a&gt; (2 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>Bookmarks</category><category>Economie</category><category>Energies renouvelables</category><category>Finance</category><category>Green Energy</category><category>Psychologie</category><category>Psychology</category><guid>https://straussengineering.ch/posts/bookmarks/</guid><pubDate>Thu, 29 Feb 2024 14:32:15 GMT</pubDate></item><item><title>Blackholing and blackhole routing relay setup leveraging BGP communities</title><link>https://straussengineering.ch/posts/blackhole/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;div&gt;&lt;p&gt;Here is a simple yet powerful mean of blackholing, as an ISP, an internal or customer IP address victim of a DDoS, with the goal of minimizing the impact for other customers and services.
The first Cisco IOS config snippet is to be set on a router acting only as a route server. The first BGP peer shows Cogent route blackhole server setup of some years back.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://straussengineering.ch/posts/blackhole/"&gt;Read more…&lt;/a&gt; (2 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>BGP</category><category>Cisco</category><category>DDoS</category><category>Internet networking</category><category>Security</category><guid>https://straussengineering.ch/posts/blackhole/</guid><pubDate>Thu, 15 Jun 2023 14:30:21 GMT</pubDate></item><item><title>A propos</title><link>https://straussengineering.ch/posts/apropos/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;div&gt;&lt;h3&gt;Whoami?&lt;/h3&gt;
&lt;p&gt;Philippe Strauss, né en 1974 à CH-1000 Lausanne, canton de Vaud, Suisse, ingénieur HES en télécom.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://straussengineering.ch/posts/apropos/"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>Who Am I?</category><guid>https://straussengineering.ch/posts/apropos/</guid><pubDate>Mon, 27 Feb 2023 15:42:01 GMT</pubDate></item><item><title>Crash course en (macro)économie</title><link>https://straussengineering.ch/posts/crash-course-en-macroeconomie/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;em&gt;Voici un échange d'emails avec un amis informaticien (Daniel) ayant travaillé 18 ans dans le monde de la finance (en suisse). Il n'est pas économiste, simplement qqun cherchant à comprendre comment fonctionne l'économie et la finance. Ses opinions sont les siennes, que &lt;a href="https://straussengineering.ch/posts/apropos/"&gt;le rédacteur (Philippe)&lt;/a&gt; de ce site partage pour la plupart, ce en étant un béotien complet sur ces sujets.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Philippe: Ne serions-nous pas à nouveau dans une bulle spéculative avec &lt;a href="https://www.reuters.com/markets/us/chipmaker-broadcom-buy-vmware-61-bln-deal-2022-05-26/"&gt;twitter valant 44 milliards et VMware 61 milliards (de US$)&lt;/a&gt;?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://straussengineering.ch/posts/crash-course-en-macroeconomie/"&gt;Read more…&lt;/a&gt; (19 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>Economie</category><category>Finance</category><guid>https://straussengineering.ch/posts/crash-course-en-macroeconomie/</guid><pubDate>Tue, 31 May 2022 23:00:00 GMT</pubDate></item><item><title>OCaml: the choice of discriminating hackers</title><link>https://straussengineering.ch/posts/why-ocaml/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;strong&gt;Discriminating:&lt;/strong&gt; in the first sense: 1a. Able to recognize or draw fine
distinctions; perceptive. 1b. Showing careful judgment or fine taste :-)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hacker:&lt;/strong&gt; computer programming enthusiast, not security breaking fanatic.&lt;/p&gt;
&lt;h3&gt;Why OCaml?&lt;/h3&gt;
&lt;p&gt;I became interested, intrigued by this langage a long while back, in
2000-2002, when seeing it score rank second or third, just behind C and
C++, on the computer language shootout hosted on alioth.debian.org. Never really invested a lot of
time learning it before 2007-2008. It's not the easiest language for
beginners, beeing a toolbox with a lot of tools, each having at least
one distinctive name and functionality on it. Most peoples tends to prefer simple things,
especially when it come to programming, where the overall picture, the
frameworks, libraries, OS surrounding your development can quickly grow
in becoming a big beast to harness.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://straussengineering.ch/posts/why-ocaml/"&gt;Read more…&lt;/a&gt; (3 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>OCaml</category><category>Programming</category><guid>https://straussengineering.ch/posts/why-ocaml/</guid><pubDate>Sat, 31 Dec 2011 23:00:00 GMT</pubDate></item><item><title>Pure javascript HTML5 canvas bilinear image interpolation</title><link>https://straussengineering.ch/posts/javascript-bilinear-image-interpolation/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;div&gt;&lt;p&gt;I've finally got my finger on a motivating javascript tryout. Never
went deep into web programming before, this is the first full day of my
life spent on JS. I wanted to test the feasibility (in term of
computation time spent by the browser) of good quality image
interpolation solely on the client side, in javascript. Even on a mac
air 1.4GHz, it turns out to be a perfectly viable solution.&lt;/p&gt;
&lt;p&gt;Googling to find some existing code, I didn't find any valuable. So
here is one, it's working for me, not just a half baked solution
computing only one pixel in the image and approximatively. The following
HTML+JS is self contained and works fine, at least on my setup.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://straussengineering.ch/posts/javascript-bilinear-image-interpolation/"&gt;Read more…&lt;/a&gt; (6 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>DSP</category><category>Javascript</category><category>Programming</category><guid>https://straussengineering.ch/posts/javascript-bilinear-image-interpolation/</guid><pubDate>Sat, 31 Dec 2011 23:00:00 GMT</pubDate></item><item><title>Zölzer-Boltze (ZB) peak/notch parametric EQ in C</title><link>https://straussengineering.ch/posts/zb-peaknotch-parametric-eq/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;div&gt;&lt;h3&gt;For digital audio signal processing&lt;/h3&gt;
&lt;p&gt;I was looking for a good implementation of parametric EQ for digital
audio, didn't find something valuable enough, so I needed to roll my
own. I retained a paper by two german guys, Mrs. Zölzer and Boltze, and
implemented it.&lt;/p&gt;
&lt;p&gt;It has the best parameters independance of all the one I browsed
through. Well, center frequency, Q factor and cut/boost gain are simply
&lt;em&gt;really&lt;/em&gt; independant in their work, contrary to a lot of such projects
you will find while googling around.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://straussengineering.ch/posts/zb-peaknotch-parametric-eq/"&gt;Read more…&lt;/a&gt; (6 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>ANSI C</category><category>Audio</category><category>Digital filters</category><category>DSP</category><category>Programming</category><guid>https://straussengineering.ch/posts/zb-peaknotch-parametric-eq/</guid><pubDate>Sun, 14 Aug 2011 22:00:00 GMT</pubDate></item><item><title>Une première approche de rationalisation concernant l'harmonie musicale</title><link>https://straussengineering.ch/posts/harmonie-musicale/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;div&gt;&lt;p&gt;Qu'est ce qui caractérise, de manière objective, quantifiable, un accord
de deux sons, deux notes, tantôt dissonantes, tantôt consonantes ? On
connait la nature vibratoire du son, soit une variation rapide de la
pression atmosphérique, généralement de petite amplitude. Qu'elle sont
les grandeurs physiques en jeux par rapport à l'harmonie, aussi notion
apparament subjective si l'en est ?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://straussengineering.ch/posts/harmonie-musicale/"&gt;Read more…&lt;/a&gt; (6 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>Audio</category><category>Musique</category><guid>https://straussengineering.ch/posts/harmonie-musicale/</guid><pubDate>Sun, 31 Jul 2011 22:00:00 GMT</pubDate></item><item><title>FIR filter design experiment using the simplex method</title><link>https://straussengineering.ch/posts/fir-filter-design-experiment/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;div&gt;&lt;p&gt;A starter about symetrical (linear phase) finite impulse response
digital filter design using the simplex method. Much slower than
Parks/McClellan/Remez exchange, but packaged in GLPK. 75 lines of OCaml
code to design an FIR filter, what less could you ask for ?&lt;/p&gt;
&lt;p&gt;The paper to have in hands is the "Meteor" one by Steiglitz. In short,
from a vector dot matrix multiplication, we get the frequency response.
The matrix beeing a cosine table, the vector beeing the filter
coefficients.&lt;/p&gt;
&lt;p&gt;The simplex method beeing a relatively simple optimization procedure for
linear problems.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://straussengineering.ch/posts/fir-filter-design-experiment/"&gt;Read more…&lt;/a&gt; (3 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>Digital filters</category><category>DSP</category><category>OCaml</category><category>Programming</category><guid>https://straussengineering.ch/posts/fir-filter-design-experiment/</guid><pubDate>Tue, 31 Aug 2010 23:00:00 GMT</pubDate></item><item><title>Backing up and archiving Cisco IOS/ASA configurations live from the router without TFTP</title><link>https://straussengineering.ch/posts/cisco-configs-archiving/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;div&gt;&lt;h3&gt;In Python and with Subversion archiving&lt;/h3&gt;
&lt;p&gt;At some point as a network admin, I did find easier to parse config file
using python expect and some regexp, rather than relying on the
unreliable TFTP. Here's a script which worked fine for one year or so.
It also does automate archiving in subversion. It's delibaretly in a
shape suitable for a blog page, working after tuning two paths in the
first script, but without a tarball and 12 pages of doco. Python is
simple enough to read and understand even for peoples having never
learned this language.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://straussengineering.ch/posts/cisco-configs-archiving/"&gt;Read more…&lt;/a&gt; (5 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>Cisco</category><category>Internet networking</category><category>Programming</category><category>Python</category><guid>https://straussengineering.ch/posts/cisco-configs-archiving/</guid><pubDate>Sat, 31 May 2008 23:00:00 GMT</pubDate></item><item><title>L'informatique et l'éducation</title><link>https://straussengineering.ch/posts/informatique-et-leducation/</link><dc:creator>Philippe Strauss</dc:creator><description>&lt;p&gt;L'informatique, science du traitement de l'information, est un domaine
jeune, semblant traverser une crise de croissance, une fuite en avant
permanente depuis qu'elle existe, ou en tout cas depuis qu'elle se
trouve sur le bureau de beaucoup d'entre nous.&lt;/p&gt;
&lt;p&gt;Pourtant, lorsqu'on s'intéresse de très près à ce domaine, qu'on
passe petit-à-petit du stade d'utilisateur d'applicatifs à celui
d'administrateur système et/ou a celui de programmeur, on est mis en
face d'un historique de l'informatique, dans le sens ou les outils de
bases qui permettent de construire dans ce domaine immatériel, que ce
soit les langages de programmations ou les systèmes d'exploitations,
n'ont conceptuellement pas changé depuis 30 ans. Le langage C, le plus
utilisé pour construire les systèmes et applicatifs que nous rencontrons
quotidiennement, existe depuis le début des années 70, comme les
systèmes UNIX et VMS, base des systèmes Linux et Windows NT. Ceci
contraste avec le foisonnement d'avancées techniques clamées a grand
renfort de publicité par les ténors industriels de l'informatique.&lt;/p&gt;
&lt;p&gt;Pourquoi un domaine basé sur des concepts de logiques si solides, si
épurés, si aisés a systématiser, se présente-t-il devant nous sous forme
de systèmes aussi instables, presque vivants tant la liste de 'bugs'
interagissant avec le fonctionnement attendu est longue et non
maîtrisée?&lt;/p&gt;
&lt;p&gt;C'est à force de me poser ces questions, qu'à titre personnel, j'ai
voulu découvrir autre chose que DOS, Windows et Apple avec son MacOS.
J'ai installé Linux, de rage, après que Windows ait réduit à néant
quelques jours de travail en plantant, et corrompant un travail pratique
de physique que je rédigeais sous word.&lt;/p&gt;
&lt;h3&gt;Linux&lt;/h3&gt;
&lt;p&gt;La découverte d'un tel système n'était pas aisée à l'époque (1994) et
accessible aux seuls passionnés d'informatique. Ce qui attire la
plupart des futurs adeptes de linux vers linux, c'est l'ouverture
totale est bien concrète du système, à tous les niveaux (la grande
majorité de ses applicatifs est disponible avec le code source).
Beaucoup de sociétés revendiquent l'ouverture de leurs solutions
logicielles, mais celle-ci est généralement très partielle, l'idée de
livrer le code source d'un tel produit étant difficilement conciliable
avec le fait de capitaliser dans son développement.&lt;/p&gt;
&lt;p&gt;Quand bien même est-ce le cas, on butte sur une fermeture "en-dessous"
au niveau du système d'exploitation, qui, à l'exception des systèmes
d'exploitations libres (Linux, BSD) ne permettent pas un traçage
détaillé de ce qu'ils font lorsque un applicatif les charge d'une
tache, ou ne l'autorisent qu'après l'achat d'un kit de développement
coûtant plusieurs milliers de francs par poste de travail.&lt;/p&gt;
&lt;p&gt;Mais est-ce bien utile de bénéficier d'une ouverture jusqu'au code
source dans notre cas? Pour l'utilisation de l'informatique dans les
spécialisations techniques des écoles professionnelles, de techniciens,
d'ingénieurs et universitaires, OUI sans aucun doute. Pour les classes
de scolarité obligatoire, c'est assez clairement inutile a
l'utilisateur.&lt;/p&gt;
&lt;p&gt;Par contre, le fait de ne pas montrer une seule culture informatique,
celle des géants tel que Microsoft et Apple, à des enfants, leur
expliquer que l'informatique, ce monde de l'immatériel, du
"virtuel", connaît comme le monde réel une diversité culturelle,
c'est fondamental. Se cantonner à montrer une seule de ces cultures
aurait des effets très normatifs.&lt;/p&gt;
&lt;p&gt;En effet, l'ouverture totale de l'informatique libre ne se limite pas
à être avantageuse pour le développeur, elle crée une culture
informatique dans les mains du publique, sans employeur au-dessus d'eux
qui pourrait limiter leur franc parler, une culture du partage de
l'information, discutant de problèmes informatiques sur des forums,
mélangeant simples utilisateurs et programmeurs chevronnés, une culture
foisonnante, encadrée par très peu de règles, si ce n'est celles des
besoins des utilisateurs et du bon vouloir de programmeurs amateurs ou
professionnels de créer des logiciels libres.&lt;/p&gt;
&lt;p&gt;Contrairement au cas des logiciels propriétaires, il circule en effet
autour des logiciels libres, une information très saine, détaillée et
précise, sans retenue, au sujet du dernier bug, du dernier problème
d'utilisation rencontré. Cet état de fait est en accord avec l'esprit
dans lequel est développé le logiciel. En effet, en livrant le code
source à l'utilisateur, on abandonne l'idée de cacher ses éventuelles
erreurs ou maladresses de programmations, il devient inutile d'essayer
de cacher ou d'altérer l'information quand à la réalité lorsque un
défaut (bug) est constaté par un utilisateur.&lt;/p&gt;
&lt;p&gt;Cette manière de faire circuler l'information a l'avantage de
structurer l'esprit face à la technologie, de devenir critique face à
celle-ci, qualité ô combien indispensable désormais.&lt;/p&gt;
&lt;p&gt;La plupart des sociétés de technologies devenues des noms de marques,
exploitent de manière abusive le manque d'esprit critique de la
majorité d'entre nous face à la technologie. Faisons en sorte que le
fossé entre les gens bardés d'informations techniques abstraites et le
commun des mortels ne continuent pas a s'étendre. Par l'ouverture des
logiciels libres, par une présence même discrète a l'école, juste
suffisante pour faire comprendre qu'il n'y a pas un standard en
informatique, mais une diversité laissant de nombreux choix possibles,
on peut faire avancer les choses dans cette direction.&lt;/p&gt;</description><guid>https://straussengineering.ch/posts/informatique-et-leducation/</guid><pubDate>Sun, 30 Sep 2001 23:00:00 GMT</pubDate></item></channel></rss>