<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://uname.pingveno.net/blog/index.php/feed/rss2/xslt" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title># uname -a - Informatique</title>
    <link>https://uname.pingveno.net/blog/index.php/</link>
    <atom:link href="https://uname.pingveno.net/blog/index.php/feed/category/notes/informatique/rss2" rel="self" type="application/rss+xml" />
    <description>Le blog de uname.pingveno.net</description>
    <language>fr</language>
    <pubDate>Wed, 01 Apr 2026 16:19:15 +0200</pubDate>
    <copyright>Mathieu Pellegrin</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Dotclear</generator>
          <item>
        <title>WordPress : Migrate from The Events Calendar to Events Manager</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2026/03/31/WordPress-%3A-Migrate-from-The-Events-Calendar-to-Events-Manager</link>
        <guid isPermaLink="false">urn:md5:72954030b3d2a914e23c5982c18cf758</guid>
        <pubDate>Tue, 31 Mar 2026 18:09:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                        <description>&lt;p&gt;A quick snippet to switch all my events created with &lt;a href=&quot;https://fr.wordpress.org/plugins/the-events-calendar/&quot;&gt;The Events Calendar&lt;/a&gt; to &lt;a href=&quot;https://fr.wordpress.org/plugins/events-manager/&quot;&gt;Events Manager&lt;/a&gt;, which offers more functionnalities in its free version.&lt;/p&gt;

&lt;p&gt;It is a single-file plugin that you can activate in WordPress. Use it at your own risks, and with a backup available before starting.&lt;/p&gt;          &lt;pre&gt;
&amp;lt;?php
/**
 * Plugin Name: TEC → Events Manager Migration
 * Description: Auto migration of The Events Calendar to Events Manager.
 * Version: 1.0
 */

if (!defined('ABSPATH')) exit;

class TEC_To_EM_Migration {

    const DRY_RUN = false;
    const LOG_FILE = WP_CONTENT_DIR . '/tec-em-migration.log';

    public function __construct() {
        add_action('admin_menu', [$this, 'add_admin_page']);
    }

    public function add_admin_page() {
        add_menu_page(
            'Migration TEC → EM',
            'TEC → EM',
            'manage_options',
            'tec-em-migration',
            [$this, 'admin_page']
        );
    }

    public function admin_page() {
        if (isset($_POST['run_migration'])) {
            $this-&amp;gt;log(&quot;=== START MIGRATION ===&quot;);
            $this-&amp;gt;migrate_events();
            $this-&amp;gt;log(&quot;=== END MIGRATION ===&quot;);
            echo &quot;&amp;lt;div class='updated'&amp;gt;&amp;lt;p&amp;gt;Migration finished. See log file.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&quot;;
        }

        echo '&amp;lt;h1&amp;gt;Migration TEC → Events Manager&amp;lt;/h1&amp;gt;';
        echo '&amp;lt;form method=&quot;post&quot;&amp;gt;';
        echo '&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;DRY RUN :&amp;lt;/strong&amp;gt; ' . (self::DRY_RUN ? 'YES' : 'NO') . '&amp;lt;/p&amp;gt;';
        echo '&amp;lt;input type=&quot;submit&quot; name=&quot;run_migration&quot; class=&quot;button button-primary&quot; value=&quot;Start migration&quot;&amp;gt;';
        echo '&amp;lt;/form&amp;gt;';
    }

    private function migrate_events() {
        $events = get_posts([
            'post_type'      =&amp;gt; 'tribe_events',
            'post_status' =&amp;gt; 'publish',
            'posts_per_page' =&amp;gt; -1,
        ]);

        foreach ($events as $event) {
            $this-&amp;gt;log(&quot;The Event Calendar: {$event-&amp;gt;post_title}&quot;);

            // Dates
            $start = get_post_meta($event-&amp;gt;ID, '_EventStartDate', true);
            $end   = get_post_meta($event-&amp;gt;ID, '_EventEndDate', true);

            // Location
            $venue_id = get_post_meta($event-&amp;gt;ID, '_EventVenueID', true);
            $location_id = $this-&amp;gt;migrate_location($venue_id);

            // Create EM event
            $new_post_id = $this-&amp;gt;create_em_event($event, $start, $end, $location_id);

            // Thumbnail
            $thumbnail_id = get_post_thumbnail_id($event-&amp;gt;ID);
            set_post_thumbnail($new_post_id, $thumbnail_id);
        }
    }

    private function migrate_location($venue_id) {
        if (!$venue_id) return 0;

        $venue = get_post($venue_id);
        if (!$venue) return 0;

        $address = get_post_meta($venue_id, '_VenueAddress', true);
        $city    = get_post_meta($venue_id, '_VenueCity', true);
        $country = 'FR';

        $this-&amp;gt;log(&quot; → Location: {$venue-&amp;gt;post_title}&quot;);

        if (self::DRY_RUN) return 0;

        global $wpdb;
        $existing_id = $wpdb-&amp;gt;get_var(
            $wpdb-&amp;gt;prepare(
                &quot;SELECT location_id FROM {$wpdb-&amp;gt;prefix}em_locations WHERE location_name = %s LIMIT 1&quot;, $venue-&amp;gt;post_title
            )
        );
 
        if ($existing_id) {
            $this-&amp;gt;log(&quot;   → Existing location, ID = {$existing_id}&quot;);
            return $existing_id;
        } else {

            $EM_Location = new EM_Location();

            $EM_Location-&amp;gt;location_name    = $venue-&amp;gt;post_title;
            $EM_Location-&amp;gt;location_address = $address;
            $EM_Location-&amp;gt;location_town    = $city;
            $EM_Location-&amp;gt;location_country = $country;

            $lat = get_post_meta($venue_id, '_VenueLatitude', true);
            $lng = get_post_meta($venue_id, '_VenueLongitude', true);
            if ($lat &amp;amp;&amp;amp; $lng) {
                $EM_Location-&amp;gt;location_latitude  = $lat;
                $EM_Location-&amp;gt;location_longitude = $lng;
            }

            $EM_Location-&amp;gt;save();

            $this-&amp;gt;log(&quot;   → New location created, ID = {$EM_Location-&amp;gt;location_id}&quot;);

            return $EM_Location-&amp;gt;location_id;
        }
    }

    private function extract_time($datetime) {
        if (!$datetime) return '00:00:00';

        // Normalize datetime
        $datetime = str_replace('T', ' ', $datetime);

        // Extract hours
        $parts = explode(' ', trim($datetime));
        if (count($parts) &amp;lt; 2) return '00:00:00';

        $time = $parts[1];

        // Add missing seconds
        if (preg_match('/^\d{2}:\d{2}$/', $time)) {
            $time .= ':00';
        }

        // Only keep HH:MM:SS
        if (preg_match('/^\d{2}:\d{2}:\d{2}/', $time, $m)) {
            return $m[0];
        }

        return '00:00:00';
    }

    private function create_em_event($event, $start, $end, $location_id) {
        $this-&amp;gt;log(&quot; → Creating EM: {$event-&amp;gt;post_title}&quot;);

        $start_date = substr($start, 0, 10);
        $end_date   = substr($end, 0, 10);

        $start_time = $this-&amp;gt;extract_time($start);
        $end_time   = $this-&amp;gt;extract_time($end);

        if (self::DRY_RUN) return 0;

        // Create new EM event

        $EM_Event = new EM_Event();
        $EM_Event-&amp;gt;event_type = 'single';
        $EM_Event-&amp;gt;event_archetype = 'event';
        $EM_Event-&amp;gt;event_name = $event-&amp;gt;post_title;
        $EM_Event-&amp;gt;post_content = $event-&amp;gt;post_content;
        $EM_Event-&amp;gt;event_date_created = $event-&amp;gt;post_date;
        $EM_Event-&amp;gt;event_start_date = $start_date;
        $EM_Event-&amp;gt;event_start_time = $start_time;
        $EM_Event-&amp;gt;event_end_date = $end_date;
        $EM_Event-&amp;gt;event_end_time = $end_time;
        $EM_Event-&amp;gt;start = strtotime($EM_Event-&amp;gt;event_start_date.' '.$EM_Event-&amp;gt;event_start_time);
        $EM_Event-&amp;gt;end = strtotime($EM_Event-&amp;gt;event_end_date.' '.$EM_Event-&amp;gt;event_end_time);
        $EM_Event-&amp;gt;event_rsvp = false;
        $EM_Event-&amp;gt;event_rsvp_time = $start_time;
        $EM_Event-&amp;gt;location_id = $location_id;
        $EM_Event-&amp;gt;event_status = 1;
        $EM_Event-&amp;gt;save();

        return $EM_Event-&amp;gt;post_id;
    }

    private function log($msg) {
        file_put_contents(self::LOG_FILE, date('[Y-m-d H:i:s] ') . $msg . &quot;\n&quot;, FILE_APPEND);
    }
}

new TEC_To_EM_Migration();&lt;/pre&gt;</description>
        
              </item>
          <item>
        <title>Drupal 8 / 9 / 10 : Programmatically render a view with contextual and exposed filters input</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2024/03/10/Drupal-8-/-9-/-10-%3A-The-right-way-to-programatically-render-a-view-while-setting-exposed-and-contextual-filters-input</link>
        <guid isPermaLink="false">urn:md5:28fceab459140a8a74e0ec4b7befc8fc</guid>
        <pubDate>Sun, 10 Mar 2024 19:45:00 +0100</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>drupal</category>
                  <category>drupal 10</category>
                  <category>drupal 8</category>
                  <category>drupal 9</category>
                  <category>php</category>
                <description>&lt;p&gt;&lt;strong&gt;Exposed Input&lt;/strong&gt; and &lt;strong&gt;Contextual Input&lt;/strong&gt; are two different ways of providing input to Drupal Views.&lt;/p&gt;

&lt;p&gt;Contextual filters work with an ordered list of parameters, while Exposed Input works with a form that has a couple name/value for every input parameter.&lt;/p&gt;          &lt;h2&gt;Contextual Filters&lt;/h2&gt;

&lt;p&gt;The right way to render a view result with &lt;strong&gt;contextual filters&lt;/strong&gt; is to generate a render array:&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
$render_array = [
  '#type' =&amp;gt; 'view',
  '#name' =&amp;gt; 'YOUR_VIEW_NAME',
  '#display_id' =&amp;gt; 'YOUR_VIEW_DISPLAY',
  '#arguments' =&amp;gt; [CONTEXTUAL_FILTER_1, CONTEXTUAL_FILTER_2, ...],
];&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can then send the render array to a Twig variable, or render it programatically:&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
$result = \Drupal::service('renderer')-&amp;gt;render($render_array);
return $result-&amp;gt;__toString();&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;We are using the &lt;code&gt;__toString()&lt;/code&gt; function to get the rendered HTML because the result returned by Drupal Render service is an object containing cache metadata.&lt;/p&gt;

&lt;h2&gt;Exposed Filters&lt;/h2&gt;

&lt;p&gt;The right way to render a view result with &lt;strong&gt;exposed filters&lt;/strong&gt; is to generate a render array, and set the &lt;code&gt;'#view#'&lt;/code&gt; parameter with a view object where you can initialize the filters:&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
$view = \Drupal\views\Views::getView('YOUR_VIEW_NAME');
$view-&amp;gt;setExposedInput([
    'YOUR_FILTER_NAME' =&amp;gt; 'YOUR_FILTER_VALUE',
]);
$render_array = [
  '#type' =&amp;gt; 'view',
  '#name' =&amp;gt; 'YOUR_VIEW_NAME',
  '#view' =&amp;gt; $view,
  '#display_id' =&amp;gt; 'YOUR_VIEW_DISPLAY',
  '#arguments' =&amp;gt; [CONTEXTUAL_FILTER_1, CONTEXTUAL_FILTER_2, ...],
];&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can then send the render array to a Twig variable, or render it programatically:&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
$result = \Drupal::service('renderer')-&amp;gt;render($render_array);
return $result-&amp;gt;__toString();&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;We are using the &lt;code&gt;__toString()&lt;/code&gt; function to get the rendered HTML because the result returned by Drupal Render service is an object containing cache metadata.&lt;/p&gt;

&lt;h2&gt;Leaked Metadata and Early Rendering&lt;/h2&gt;

&lt;p&gt;If you render a view while rendering a controller output that is suppose&amp;nbsp; to provide its own cache metadata (&lt;code&gt;CacheableJsonResponse&lt;/code&gt; for instance), and run on the error:&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
LogicException: The controller result claims to be providing relevant cache metadata, but leaked metadata was detected. Please ensure you are not rendering content too early.&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Just wrap the rendering in a render context:&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
$context = new Drupal\Core\Render\RenderContext\RenderContext();
$html = \Drupal::service('renderer')-&amp;gt;executeInRenderContext($context, function () {
  $render_array = [
    '#type' =&amp;gt; 'view',
    '#name' =&amp;gt; 'YOUR_VIEW_NAME',
    '#display_id' =&amp;gt; 'YOUR_VIEW_DISPLAY',
    '#arguments' =&amp;gt; [CONTEXTUAL_FILTER_1, CONTEXTUAL_FILTER_2, ...],
  ];
  $result = \Drupal::service('renderer')-&amp;gt;render($render_array);
  return $result-&amp;gt;__toString();
});
&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Sources&lt;/h2&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://drupal.stackexchange.com/a/295496&quot;&gt;https://drupal.stackexchange.com/a/295496&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/docs/drupal-apis/render-api/render-arrays&quot;&gt;https://www.drupal.org/docs/drupal-apis/render-api/render-arrays&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/10/search/setExposedInput&quot;&gt;https://api.drupal.org/api/drupal/10/search/setExposedInput&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.lullabot.com/articles/early-rendering-a-lesson-in-debugging-drupal-8&quot;&gt;https://www.lullabot.com/articles/early-rendering-a-lesson-in-debugging-drupal-8&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
        
              </item>
          <item>
        <title>Configurer Visual Studio Code pour utiliser xdebug avec PHP FPM et SSHFS</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2021/05/28/Configurer-Visual-Studio-Code-pour-utiliser-xdebug-avec-PHP-FPM-et-SSHFS</link>
        <guid isPermaLink="false">urn:md5:82c8f6d6034f3c20d6ad67f5a7f06d52</guid>
        <pubDate>Fri, 28 May 2021 14:46:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                        <description>          &lt;p&gt;Bonjour,&lt;/p&gt;

&lt;p&gt;Une note à moi-même et à mes stagiaires pour utiliser xdebug avec un point de montage SSHFS, et PHP FPM.&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;S'assurer que PHP est bien installé sur la machine du développeur, c'est nécessaire pour la coloration syntaxique et la vérification de syntaxe.&lt;/li&gt;
	&lt;li&gt;Installer PHP xdebug sur la machine distante&lt;/li&gt;
	&lt;li&gt;Configurer xdebug pour PHP FPM sur la machine distante. Attention, cela change selon la version de xdebug.
	&lt;ol&gt;
		&lt;li&gt;Modifier le fichier de configuration FPM pour xdebug, par exemple pour Debian c'est &lt;strong&gt;/etc/php/7.3/fpm/conf.d/20-xdebug.ini&lt;/strong&gt;&lt;/li&gt;
		&lt;li&gt;Y placer les instructions suivantes :&lt;br /&gt;
		Pour xdebug v3 :
		&lt;pre&gt;
&lt;code&gt;[xdebug]
zend_extension=&quot;xdebug.so&quot;
xdebug.mode&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;debug&lt;/code&gt;
&lt;code class=&quot;language-ini&quot;&gt;xdebug.start_with_request = yes&lt;/code&gt;
&lt;code&gt;xdebug.client_host=127.0.0.1
xdebug.client_port=&quot;9003&quot;&lt;/code&gt;
&lt;/pre&gt;
		Pour xdebug v2 :

		&lt;pre&gt;
&lt;code&gt;
[xdebug]
zend_extension=&quot;xdebug.so&quot;
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=&quot;9003&quot;&lt;/code&gt;&lt;/pre&gt;
		&lt;/li&gt;
		&lt;li&gt;Redémarrer PHP FPM.&lt;br /&gt;
		 &lt;/li&gt;
	&lt;/ol&gt;
	&lt;/li&gt;
	&lt;li&gt;Sur la machine du développeur, installer le module PHP xdebug pour Visual Studio : &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug&quot;&gt;https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Connecter en SSHFS le dossier distant (la machine qui exécute PHP) sur la machine (locale) du développeur : sshfs login@distant:dossier_distant dossier_local&lt;/li&gt;
	&lt;li&gt;Connecter un tunnel SSH pour forward le port xdebug vers la machine locale : ssh&lt;code&gt; -R &lt;span class=&quot;token number&quot;&gt;9003&lt;/span&gt;:localhost:9003&lt;/code&gt; login@distant&lt;/li&gt;
	&lt;li&gt;Ouvrir dans Visual Studio le dossier monté avec SSHFS&lt;/li&gt;
	&lt;li&gt;Ouvrir un fichier, puis le debugger dans les onglets à gauche&lt;/li&gt;
	&lt;li&gt;Cliquer sur &quot;create a json launch file&quot;, et vérifier le port de xdebug pour pointer sur le bon port. Ajouter le pathMapping pour mettre en correspondance le chemin local (ouvert dans Visual Studio Code) et le chemin distant (monté en SSHFS) :
	&lt;pre&gt;
&lt;code&gt;{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    &quot;version&quot;: &quot;0.2.0&quot;,
    &quot;configurations&quot;: [
        {
            &quot;name&quot;: &quot;Listen for Xdebug&quot;,
            &quot;type&quot;: &quot;php&quot;,
            &quot;request&quot;: &quot;launch&quot;,
            &quot;port&quot;: 9003,
            &quot;pathMappings&quot;: {
                &quot;&lt;/code&gt;dossier_distant&lt;code&gt;&quot;: &quot;${workspaceFolder}/&quot;
            }
        },
        {
            &quot;name&quot;: &quot;Launch currently open script&quot;,
            &quot;type&quot;: &quot;php&quot;,
            &quot;request&quot;: &quot;launch&quot;,
            &quot;program&quot;: &quot;${file}&quot;,
            &quot;cwd&quot;: &quot;${fileDirname}&quot;,
            &quot;port&quot;: 9003,
            &quot;pathMappings&quot;: {
                &quot;chemin_distant&quot;: &quot;${workspaceFolder}/&quot;
            }
        }
    ]
}&lt;/code&gt;&lt;/pre&gt;
	&lt;/li&gt;
	&lt;li&gt;Redémarrer Visual Studio par sécurité.&lt;/li&gt;
	&lt;li&gt;Lancer l'écoute via le debugger, ajouter les breakpoints dans Visual Studio, puis charger la page du site distant via le navigateur. Visual Studio devrait stopper l'exécution au niveau des breakpoints, pour permettre l'affichage de la pile, et le lancement des commandes.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Sources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.jetbrains.com/help/phpstorm/remote-debugging-via-ssh-tunnel.html#prepare-the-debugging-engine&quot;&gt;https://www.jetbrains.com/help/phpstorm/remote-debugging-via-ssh-tunnel.html#prepare-the-debugging-engine&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/docs/languages/php&quot;&gt;https://code.visualstudio.com/docs/languages/php&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;</description>
        
              </item>
          <item>
        <title>La délégation NS d'un sous-domaine, cet illustre inconnu</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2019/03/02/La-d%C3%A9l%C3%A9gation-NS-d-un-sous-domaine%2C-cet-illustre-inconnu</link>
        <guid isPermaLink="false">urn:md5:1b281af171b186ea2d70f7efa5c4e471</guid>
        <pubDate>Tue, 05 Mar 2019 09:15:00 +0100</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>delegation</category>
                  <category>dns</category>
                  <category>serveur</category>
                <description>&lt;p&gt;Un billet un peu technique aujourd'hui. Si vous travaillez dans le Web, vous n'êtes pas sans savoir que c'est le mécanisme des DNS qui fait en sorte que vos noms de domaine soient résolus en adresses vers votre hébergement.&lt;/p&gt;

&lt;p&gt;Vous savez aussi peut-être ce qu'est une zone DNS. Une zone DNS est un bête fichier présent sur le serveur DNS, et qui contient l'ensemble des enregistrements du domaine&lt;sup&gt;1&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Vous savez aussi certainement ce qu'est un sous-domaine, par exemple pour le domaine example.com, des sous-domaines seraient :&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;www.example.com&lt;/li&gt;
	&lt;li&gt;test.example.com&lt;/li&gt;
	&lt;li&gt;sousdomaine.example.com&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Parfois, pour séparer les services, on souhaite aller encore plus loin et dédier un sous-domaine entier à une tâche, par exemple on souhaite faire en sorte que compta.example.com soit totalement indépendant, c'est à dire :&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Qu'on puisse recevoir sur l'email facturation@compta.example.com ,&lt;/li&gt;
	&lt;li&gt;Qu'on puisse avoir des mini-sites dédiés sous ce sous-domaine, comme urssaf.compta.example.com ou creances.compta.example.com&lt;/li&gt;
	&lt;li&gt;Que le sous-domaine puisse servir tout autre usage tel que permis par les DNS (enregistrements SRV, etc)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bien sûr, ces usages sont possibles à partir de la zone DNS du domaine parent, mais à mesure que le sous-domaine grandit en indépendance (et donc en nombre d'enregistrements), il peut être nécessaire de poser les bases d'une délégation plus avancée, pour éviter de maintenir une zone avec tous les enregistrements. On peut aussi vouloir déléguer à un prestataire la gestion de ce sous-domaine.&lt;/p&gt;

&lt;p&gt;Pour ce qui est des mini-sites, il est relativement simple de déclarer un &lt;em&gt;wildcard&lt;/em&gt; pour rediriger tous les enregistrements d'un sous-domaine vers un même serveur. Mais lorsqu'on veut plus de souplesse, ou que l'on veut aussi déléguer tous les enregistrements de ce sous-domaine, un &lt;em&gt;wildcard&lt;/em&gt; est trop &quot;brutal&quot; et pas toujours supporté par toutes les spécifications, il faut alors déléguer la zone via une délégation NS.&lt;/p&gt;          &lt;h3&gt;En deux images&lt;/h3&gt;

&lt;figure&gt;&lt;a class=&quot;media-link&quot; href=&quot;https://uname.pingveno.net/blog/public/schemas/delegation-ns/requete-dns-classique.png&quot;&gt;&lt;img alt=&quot;requete-dns-classique.png&quot; class=&quot;media&quot; src=&quot;https://uname.pingveno.net/blog/public/schemas/delegation-ns/.requete-dns-classique_m.png&quot; /&gt;&lt;/a&gt;

&lt;figcaption&gt;Requête DNS classique : le serveur répond au client avec un enregistrement A&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;&lt;a class=&quot;media-link&quot; href=&quot;https://uname.pingveno.net/blog/public/schemas/delegation-ns/requete-dns-deleguation.png&quot;&gt;&lt;img alt=&quot;requete-dns-deleguation.png&quot; class=&quot;media&quot; src=&quot;https://uname.pingveno.net/blog/public/schemas/delegation-ns/.requete-dns-deleguation_m.png&quot; /&gt;&lt;/a&gt;

&lt;figcaption&gt;Requête DNS déléguée : le serveur répond d'aller interroger un autre serveur,&lt;br /&gt;
le client transmet la requête à l'autre serveur et obtient l'enregistrement A.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3&gt;En exemple&lt;/h3&gt;

&lt;p&gt;Prenons un exemple de la vie réelle. Sortez votre commande &lt;em&gt;dig&lt;/em&gt;, et examinez le domaine &lt;em&gt;pingveno.net&lt;/em&gt; :&lt;/p&gt;

&lt;pre&gt;
dig +trace pingveno.net @8.8.8.8

pingveno.net.        172800    IN    NS    ns-197-a.gandi.net.
pingveno.net.        172800    IN    NS    ns-150-b.gandi.net.
pingveno.net.        172800    IN    NS    ns-153-c.gandi.net.
;; Received 733 bytes from 192.52.178.30#53(k.gtld-servers.net) in 46 ms

pingveno.net.        3600    IN    A    xx.xx.xx.xx
;; Received 57 bytes from 217.70.187.154#53(ns-153-c.gandi.net) in 45 ms&lt;/pre&gt;

&lt;p&gt;Dans l'exemple ci-dessus, j'ai retiré les appels du &lt;em&gt;root server&lt;/em&gt; car ils ne sont pas pertinents pour notre exemple. On constate que la requête est transmise aux serveurs de Gandi, qui répondent directement avec l'enregistrement A du domaine.&lt;/p&gt;

&lt;p&gt;Nouvel exemple, avec le sous-domaine uname.pingveno.net :&lt;/p&gt;

&lt;pre&gt;
dig +trace pingveno.net @8.8.8.8

pingveno.net.        172800    IN    NS    ns-197-a.gandi.net.
pingveno.net.        172800    IN    NS    ns-150-b.gandi.net.
pingveno.net.        172800    IN    NS    ns-153-c.gandi.net.
;; Received 737 bytes from 2001:501:b1f9::30#53(m.gtld-servers.net) in 114 ms

pingveno.net.        3600    IN    A    xx.xx.xx.xx
www.pingveno.net.    10800    IN    CNAME    pingveno.net.
;; Received 75 bytes from 217.70.187.154#53(ns-153-c.gandi.net) in 44 ms&lt;/pre&gt;

&lt;p&gt;Cette fois le serveur répond avec un CNAME vers pingveno.net, c'est la méthode &quot;pas chère&quot; de déléguer le sous-domaine à un autre enregistrement. Ce n'est pas un wildcard, puisque l'enregistrement est seul, mais le résultat aurait été le même avec un wildcard.&lt;/p&gt;

&lt;p&gt;Enfin, essayons avec ishimaru.pingveno.net :&lt;/p&gt;

&lt;pre&gt;
dig +trace ishimaru.pingveno.net @8.8.8.8

pingveno.net.        172800    IN    NS    ns-197-a.gandi.net.
pingveno.net.        172800    IN    NS    ns-150-b.gandi.net.
pingveno.net.        172800    IN    NS    ns-153-c.gandi.net.
;; Received 742 bytes from 192.41.162.30#53(l.gtld-servers.net) in 45 ms

ishimaru.pingveno.net.    10800    IN    NS    a.ns.wellhosted.ch.
ishimaru.pingveno.net.    10800    IN    NS    b.ns.wellhosted.ch.
;; Received 98 bytes from 213.167.230.151#53(ns-150-b.gandi.net) in 44 ms

ishimaru.pingveno.net.    60    IN    A    xx.xx.xx.xx
ishimaru.pingveno.net.    3600    IN    NS    b.ns.wellhosted.ch.
ishimaru.pingveno.net.    3600    IN    NS    a.ns.wellhosted.ch.
;; Received 130 bytes from 2a03:2040:d:121::1#53(a.ns.wellhosted.ch) in 49 ms
&lt;/pre&gt;

&lt;p&gt;Cette fois, le serveur a répondu en deux temps : il a indiqué un enregistrement NS sur le sous-domaine, puis le client (ici la commande &lt;em&gt;dig&lt;/em&gt;) a continué la requête vers les serveurs indiqués dans l'enregistrement NS pour retourner finalement l'adresse IP.&lt;/p&gt;

&lt;p&gt;C'est une délégation NS. Cela signifie que tout le sous-domaine (la zone complète) de ishimaru.pingveno.net n'est pas gérée par &lt;em&gt;gandi.net&lt;/em&gt;, mais par &lt;em&gt;a.ns.wellhosted.ch&lt;/em&gt; . De cette manière, le sous-domaine est totalement indépendant, et peut être utilisé pour tous les usages d'un domaine de niveau supérieur.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;C'est tout, ce court article sert juste à démystifier l'enregistrement NS, qui est très peu souvent utilisé, d'une part par la méconnaissance de la plupart des &quot;webdesigners&quot; se contentant de pointer des sous-domaines en A ou en AAAA, et ensuite parce qu'il faut pouvoir déléguer à un serveur DNS, tous les prestataires ne sont pas équipés pour accueillir un domaine de cette façon.&lt;/p&gt;

&lt;h3&gt;Notes&lt;/h3&gt;

&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; : L'ensemble, ou presque, le serveur DNS ne portant que la zone sur laquelle il a autorité, tout le travail du client DNS consiste justement à interroger les serveurs DNS en cascade, pour arriver à l'enregistrement qui fait autorité. Pas d'exposé là dessus aujourd'hui, mais vous pouvez &lt;a href=&quot;https://fr.wikipedia.org/wiki/Domain_Name_System#Hi%C3%A9rarchie_du_DNS&quot;&gt;lire la doc&lt;/a&gt;.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Utiliser l'Object Storage d'OVH (Openstack Swift) avec Updraft Plus</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2019/02/22/Utiliser-l-Object-Storage-d-OVH-%28Openstack-Swift%29-avec-Updraft-Plus</link>
        <guid isPermaLink="false">urn:md5:b834b91b3bbd441c2572e98d70df4077</guid>
        <pubDate>Tue, 26 Feb 2019 17:48:00 +0100</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>cloud</category>
                  <category>openstack</category>
                  <category>ovh</category>
                  <category>storage</category>
                  <category>swift</category>
                  <category>wordpress</category>
                <description>&lt;p&gt;J'ai expérimenté cette semaine l'&lt;a href=&quot;https://www.ovh.com/fr/public-cloud/storage/object-storage/&quot; hreflang=&quot;fr&quot;&gt;Object Storage d'OVH&lt;/a&gt; avec le module de sauvegarde de Wordpress &lt;a href=&quot;https://updraftplus.com/&quot; hreflang=&quot;en&quot;&gt;UpdraftPlus&lt;/a&gt;, et le moins que l'on puisse dire c'est qu'on n'est pas aidé : pas de documentation de A à Z, les noms de configuration qui souffrent à la traduction, bref.&lt;/p&gt;

&lt;p&gt;Voilà comment faire, simplement et du premier coup.&lt;/p&gt;          &lt;p&gt;Créer un Projet dans le manager OVH&lt;/p&gt;

&lt;p&gt;Aller sur le manager OVH, choisir &quot;Cloud&quot; en haut, accepter les contrats, et créer un projet :&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;media-link&quot; href=&quot;https://uname.pingveno.net/blog/public/captures/ovh-cloud/creer_projet.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;media&quot; src=&quot;https://uname.pingveno.net/blog/public/captures/ovh-cloud/.creer_projet_m.png&quot; style=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dans l'onglet &quot;Stockage&quot;, cliquer sur &quot;Créer un conteneur&quot; :&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;media-link&quot; href=&quot;https://uname.pingveno.net/blog/public/captures/ovh-cloud/creer_conteneur.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;media&quot; src=&quot;https://uname.pingveno.net/blog/public/captures/ovh-cloud/.creer_conteneur_m.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choisir la zone et le stockage, donner un nom au conteneur.&lt;/p&gt;

&lt;p&gt;Attention, le stockage à froid à bas prix, bien que plus économique sur le prix du stockage, facture les données en entrée, contrairement au conteneur &quot;privé&quot;.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;media-link&quot; href=&quot;https://uname.pingveno.net/blog/public/captures/ovh-cloud/creer_container_zone.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;media&quot; src=&quot;https://uname.pingveno.net/blog/public/captures/ovh-cloud/.creer_container_zone_m.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aller ensuite dans l'onglet &quot;Gestion technique&quot;, puis &quot;Openstack Users&quot; et choisir &quot;Ajouter un utilisateur&quot; :&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;media-link&quot; href=&quot;https://uname.pingveno.net/blog/public/captures/ovh-cloud/ovh_cloud_ajouter_utilisateur.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;media&quot; src=&quot;https://uname.pingveno.net/blog/public/captures/ovh-cloud/.ovh_cloud_ajouter_utilisateur_m.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En face du nom d'utilisateur, ouvrez le menu secondaire, puis choisissez &quot;Ouvrir Openstack Horizon&quot; pour tester&amp;nbsp;les identifiants :&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;media-link&quot; href=&quot;https://uname.pingveno.net/blog/public/captures/ovh-cloud/ovh_cloud_user_action.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;media&quot; src=&quot;https://uname.pingveno.net/blog/public/captures/ovh-cloud/ovh_cloud_user_action.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Téléchargez ensuite le fichier de configuration OpenStack et&amp;nbsp;ouvrez-le avec un éditeur de texte.&lt;/p&gt;

&lt;p&gt;Vous êtes prêt à configurer UpdraftPlus. Ouvrez les paramètres d'UpdraftPlus et choisissez &quot;OpenStack (Swift)&quot;&amp;nbsp;:&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;media-link&quot; href=&quot;https://uname.pingveno.net/blog/public/captures/ovh-cloud/parametrage_updraft_openstack.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;media&quot; src=&quot;https://uname.pingveno.net/blog/public/captures/ovh-cloud/.parametrage_updraft_openstack_m.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dans &quot;&lt;strong&gt;URI d’authentification&lt;/strong&gt;&quot;, renseignez le contenu de&amp;nbsp;&lt;strong&gt;OS_AUTH_URL&lt;/strong&gt; :&amp;nbsp;https://auth.cloud.ovh.net/v2.0/&lt;/p&gt;

&lt;p&gt;Dans &quot;&lt;strong&gt;Projet&lt;/strong&gt;&quot;, renseignez le contenu de&amp;nbsp;&lt;strong&gt;OS_TENANT_NAME&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dans &quot;&lt;strong&gt;Région&lt;/strong&gt;&quot;, renseignez la&amp;nbsp;région que vous aviez choisi (SBG5, GRA, etc)&lt;/p&gt;

&lt;p&gt;Dans &quot;&lt;strong&gt;Identifiant&lt;/strong&gt;&quot;, renseignez l'identifiant que vous avez créé dans le manager (attention aux espaces en faisant copier-coller)&lt;/p&gt;

&lt;p&gt;Dans &quot;&lt;strong&gt;Mot de passe&lt;/strong&gt;&quot;, renseignez le mot de passe de l'identifiant que vous avez créé dans le manager (attention aux espaces en faisant copier-coller)&lt;/p&gt;

&lt;p&gt;Dans &quot;&lt;strong&gt;Contenant&lt;/strong&gt;&quot;, renseignez le nom de votre containeur (dans l'exemple, mon_containeur).&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Testez la connexion, si ça marche, la sauvegarde vers Openstack est configurée.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>The war on SPAM: an review of the real world tools</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2017/09/12/The-war-on-SPAM%3A-an-review-of-the-real-world-tools</link>
        <guid isPermaLink="false">urn:md5:61e3fbc7776ac7b0952799741974f844</guid>
        <pubDate>Tue, 12 Sep 2017 02:54:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>blacklist</category>
                  <category>dkim</category>
                  <category>dmarc</category>
                  <category>greylist</category>
                  <category>mail</category>
                  <category>rbl</category>
                  <category>server</category>
                  <category>spam</category>
                  <category>spf</category>
                <description>&lt;p&gt;Anti-spam techniques review: a few hints and tools review from my own experience.&lt;/p&gt;

&lt;p&gt;Spam mesage are very common these days, but filtering them out is not as easy as it seems. The filtering techniques have evolved at the same rate than the spammers' evasive techniques, and the risk of filtering out a legitimate message is greater than ever.&lt;/p&gt;

&lt;p&gt;It is also quite difficult to find good and up-to-date counter-measures list that anyone can implement.&lt;/p&gt;

&lt;p&gt;Here is a summary of the anti-spam strategies I used / am still using. I hope it will help you understanding today's threats, and build your own solutions.&lt;/p&gt;          &lt;h3&gt;Definitions&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;MTA&lt;/strong&gt; : Mail Transport Agent : this is the software that will actually do mail delivery. It is listening on port 25 and answers to SMTP commands. Some common MTAs : Postfix, Exim. &lt;a href=&quot;https://en.wikipedia.org/wiki/Message_transfer_agent&quot;&gt;More about MTA&lt;/a&gt;.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;MX&lt;/strong&gt; : MX records are DNS entries that are identifying the server responsible for mail delivery for the domain. &lt;a href=&quot;https://en.wikipedia.org/wiki/MX_record&quot; hreflang=&quot;en&quot;&gt;More about MX records&lt;/a&gt;.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;RBL&lt;/strong&gt; : Realtime Blackhole List : a list of blacklisted IPs, that should be considered as spam sources. It is called Realtime because they are constantly updated. &lt;a href=&quot;https://en.wikipedia.org/wiki/DNSBL&quot;&gt;More about RBL&lt;/a&gt;.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;RFC&lt;/strong&gt; : Request For Comments, these are proposal for norms, some of them become norms. &lt;a href=&quot;https://en.wikipedia.org/wiki/Request_for_comments&quot;&gt;More about RFC&lt;/a&gt;.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;IPS&lt;/strong&gt; : Intrusion Protection System : these are &quot;smart firewalls&quot; that are blocking malicious requests, often based on behavioral rules. &lt;a href=&quot;https://en.wikipedia.org/wiki/Intrusion_detection_system&quot; hreflang=&quot;en&quot;&gt;More about IPS&lt;/a&gt;.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;The goals&lt;/h3&gt;

&lt;p&gt;My personal goals on SPAM war are pretty short:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;Minimum false positive: having a spam is better than missing an important mail, try keeping the &quot;permanent bashing&quot; as low as possible&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Hit harder on reoffending: coming-back spammers should be slapped harder&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Internet neutrality: try not to encourage big mail farm, and let fair little providers doing their business&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Available techniques&lt;/h3&gt;

&lt;h4&gt;Blacklist / Blackhole Lists&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Blacklists&lt;/strong&gt;, &lt;strong&gt;Blackhole Lists&lt;/strong&gt; (or &lt;strong&gt;RBLs&lt;/strong&gt;) are the most ancient and most common measures for reducing spam. They are still pretty accurate, but:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;It depends A LOT on the &lt;strong&gt;quality of the list&lt;/strong&gt;, trashy lists are very common and they would end up sucking resources for no result, or worse, blocking legitimate emails&lt;/li&gt;
	&lt;li&gt;They are only accurate when &lt;strong&gt;updated often&lt;/strong&gt;. I mean, very often (the R in RBL).&lt;/li&gt;
	&lt;li&gt;You &lt;strong&gt;should not use it directly on the MTA&lt;/strong&gt;, these lists are an &lt;strong&gt;aggressive&lt;/strong&gt; artefact of the past, where spam did not come from mail farms.&lt;/li&gt;
	&lt;li&gt;Very &lt;strong&gt;few are implementing IPv6&lt;/strong&gt;, I agree that IPv6 spam is quite anecdotal, but it will probably change pretty soon (believe me)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Greylist&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Greylisting&lt;/strong&gt; is issuing a temporary &lt;strong&gt;REJECT&lt;/strong&gt; code to force the foreign server to keep the message and send it back later. It aims at increasing the &quot;cost per mail&quot; for spam farms, as they cannot &quot;hit and run&quot; as fast as before.&lt;/p&gt;

&lt;p&gt;The main culprits are that &lt;strong&gt;some providers are not implementing it well&lt;/strong&gt; (hello Facebook) and so it needs an educated whitelist to work properly.&lt;/p&gt;

&lt;p&gt;Some spammers are also re-sending the same mail several times in case of failure, looking like a legitimate mail server, and making &lt;strong&gt;Greylisting&lt;/strong&gt; inefficient.&lt;/p&gt;

&lt;p&gt;It is also hurting the fastness of the mail transmission, as the retry may occur several tens minutes after, &lt;strong&gt;slowing the mail delivery&lt;/strong&gt; with little control on delays.&lt;/p&gt;

&lt;p&gt;Also, some legitimate mail farms (hello OVH) are distributing their retry on several servers, making &lt;strong&gt;Greylisting&lt;/strong&gt; inapplicable without fully whitelisting them.&lt;/p&gt;

&lt;h4&gt;RFC compliance&lt;/h4&gt;

&lt;p&gt;Spammers are often running special softwares for their crafted emails, tightening &lt;strong&gt;RFC compliance&lt;/strong&gt; may be a good way to kick them out.&lt;/p&gt;

&lt;p&gt;It can be as simple as &lt;strong&gt;forcing an HELO on SMTP protocol&lt;/strong&gt;, or more tricky like &lt;strong&gt;checking the mail headers&lt;/strong&gt; or &lt;strong&gt;enforcing a valid reverse&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the majority of cases, it is very efficient, but:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Some home-made servers, especially Synology or Windows servers may be blocked while they are sending legitimate email. These servers are often ran by people who doesn't know or care on how to correctly setup a mail server. These buggy setups are more common than you think, and they are often legitimate senders, who have no clue of what is wrong, and are not willing to fix it (did I mentioned banking companies?).&lt;/li&gt;
	&lt;li&gt;In the vast majority of cases, IPv6-ready servers have no reverse on their IPv6 addresses and/or the IPv6 reverse is wrong.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;SPF and DKIM&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;SPF&lt;/strong&gt; and &lt;strong&gt;DKIM&lt;/strong&gt; are anti-spoofing techniques. They does not guarantee that a mail is legitimate, but if the controls are showing an anomaly, it is very likely to be spam (or worse : scam or social engineering tentative).&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;The &lt;strong&gt;SPF&lt;/strong&gt; technique is based on IP or sending domain whitelist: the sending email domain publishes a list of servers allowed to send email, along with a hint on what is expected if it does not pass (soft or hard reject).&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;DKIM&lt;/strong&gt; is much more complex as the sending mail server has to cryptographically sign every message with a domain-specific key, which is then published in a special domain record.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SPF&lt;/strong&gt; has been proven efficient at its beginnings, but today many spammers are just using stolen email accounts or custom domains that does not publish any &lt;strong&gt;SPF&lt;/strong&gt; records, making it less pertinent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DKIM&lt;/strong&gt; is, like &lt;strong&gt;SPF&lt;/strong&gt;, an anti spoofing technique, and spammers may be likely to sign mails from their custom domain if it becomes a necessity. Like &lt;strong&gt;SPF&lt;/strong&gt;, a signed mail is not necessarily a clean mail. By the way, signature problems are pretty comon, and trashing an offending &lt;strong&gt;DKIM&lt;/strong&gt; may not be the right behavior: Yahoo broke a lot of mailing lists when they enforced their &lt;strong&gt;DMARC&lt;/strong&gt; policy.&lt;/p&gt;

&lt;p&gt;To conclude, &lt;strong&gt;DKIM&lt;/strong&gt; is relevant if you need to certify outgoing mails or if you are enforcing policies inside your company (to block spoofed email targeting your organisation) but it is definitely not an efficient anti-spam measure. And the recipient's servers may decide to simply ignore your painfully-configured DKIM headers.&lt;/p&gt;

&lt;h4&gt;Bayesian filters&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Bayesian filters&lt;/strong&gt; are frequency-based spam detection mechanisms. The idea is to sort out ham and spam for a short period of time, to let it &quot;learn&quot; what spam is made of, for efficient content-based detection. It has the benefit of being organisation-specific, as what is ham and what is spam may vary from one company to another (a company selling drugs may not be willing to filter out every message containing the word &quot;pill&quot;).&lt;/p&gt;

&lt;p&gt;But the learning process has to be taken seriously, and many end-users are just deleting spam instead of marking it for feeding the learning. By the way, the learning process needs IMAP folders to sort mails, and it will not work properly if all users are using POP mailboxes.&lt;/p&gt;

&lt;h3&gt;Spammers techniques&lt;/h3&gt;

&lt;p&gt;Or &quot;the today's weapons of this war&quot; .&lt;/p&gt;

&lt;p&gt;Here is a short review of the spammers techniques I know, and some counter measures.&lt;/p&gt;

&lt;h4&gt;Address guessing&lt;/h4&gt;

&lt;p&gt;Some spammers are taking random web domains from their crawling, and then try to send their mails to commonly used addresses patterns. It can be webmaster@ ; ceo@ or whatever. These are easy to spot in log files, and a well configured MTA can take counter measures to lock out these guesses. Free (French ISP) is actually implementing this: &lt;a href=&quot;http://postmaster.free.fr/index_en.html&quot; hreflang=&quot;en&quot;&gt;postmaster.free.fr/index_en.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unfortunately, some legitimate email are sometimes sent to non existent addresses (typo, user deleted, etc) and legitimate MTA sometimes get blocked if the ban trigger is too low.&lt;/p&gt;

&lt;p&gt;Moreover, nowadays' spammers are distributing their guesses trough zombie machines to stay under triggers, making it hard to spot.&lt;/p&gt;

&lt;h4&gt;Botnets&lt;/h4&gt;

&lt;p&gt;A lot of spammers are using zombies machines to send a high amount of mail in a short amount of time. Commercial ISP are taking the problem seriously, and many are blocking or filtering port 25 on their dynamic ranges, making impossible to have a custom mail server at home, but also preventing infected machines from sending direct-to-SMTP queries.&lt;/p&gt;

&lt;h4&gt;Direct to SMTP connections, ignoring MXes&lt;/h4&gt;

&lt;p&gt;Some spammers are just scanning IP ranges and directly talking to MTA, even if these MTAs are internal and pointed by no MX records. You may think that an authoritarian firewall is the neat solution, but it may be worth collecting these feisty IPs and feed them to an IPS, to protect the network from their guesses on the real MTAs.&lt;/p&gt;

&lt;h4&gt;Fake bounces and backsquatting&lt;/h4&gt;

&lt;p&gt;Sometimes you get an Undelivered Message notice (DSN) for a mail you never sent. This is probably backsquatting.&lt;br /&gt;
Backsquatting is sending email to a buggy address with a valid &quot;from&quot; address. An incorrectly configured mailserver would reply straight away to the from address to notify the failed delivery, instead of rejecting the mail and letting the foreign server doing the dirty job.&lt;/p&gt;

&lt;p&gt;These configuration errors are pretty common, sometimes in defaut configurations or example configurations, but they can be easily avoided (look for documentation about backsquatting for your MTA, and test if your y server is vulnerable).&lt;/p&gt;

&lt;h3&gt;Real life advices&lt;/h3&gt;

&lt;p&gt;I am sorry, I don't have the magic wand to stop all Spam. A good spam fighting solution is always a combination of techniques, SpamAssassin for instance uses scoring from RBL as well as a bayesian filter and SPF checks.&lt;/p&gt;

&lt;p&gt;I think that constant monitoring is important. Not just automated monitoring, but also clever log reading and mind openness on what can be a better solution for each problem. You never know what can happen in a spammer mind, and what works today may not work tomorrow. The Internet of Things is already a game changer.&lt;/p&gt;

&lt;p&gt;I also advise you to be careful. Some decisions on our implementations may really hurt the Internet. Locking whole countries out is not without consequences, and the rise of IPv6 Internet has to be take into consideration from now.&lt;/p&gt;

&lt;p&gt;Things are often not that pretty in mail servers, the temptation is great for a default blocking policy (hello MailInBlack). But as sysadmins, it is our responsability to not abuse and not hurting the smallest actors in the market (mails not coming from big farms). That may be a big word, but in my opinion, the freedom of the Internet also count on our neutrality on mail processing.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>SSL vs TLS vs STARTTLS</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2016/06/13/SSL-vs-TLS-vs-STARTTLS</link>
        <guid isPermaLink="false">urn:md5:6edbd0220a0b8dc911d751eb40a11ddc</guid>
        <pubDate>Mon, 13 Jun 2016 17:03:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>mail</category>
                  <category>serveur</category>
                  <category>ssl</category>
                  <category>starttls</category>
                  <category>tls</category>
                <description>&lt;p&gt;Cet article est une traduction libre de &lt;a href=&quot;https://www.fastmail.com/help/technical/ssltlsstarttls.html&quot;&gt;https://www.fastmail.com/help/technical/ssltlsstarttls.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;J'ai réalisé cette traduction pour fournir à mes clients une explication simple mais complète sur le pourquoi du comment de SSL/TLS/STARTTLS lors de la configuration de leur client mail.&lt;/p&gt;

&lt;p&gt;Attention, &lt;strong&gt;l'article original date de 2012&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;Définitions&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Protocole&lt;/strong&gt; : un protocole de communication est un format de données, un &quot;langage&quot; permettant à deux machine de communiquer entre elles. Les deux machines doivent être en capacité de parler le même protocole pour pouvoir échanger des données. SSL est un protocole de communication sécurisé (&quot;chiffrés&quot;), popularisé par le célèbre &quot;cadenas&quot; visible sur les pages web.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Port&lt;/strong&gt; : un port est un numéro de service sur lequel les logiciels vous pouvoir communiquer entre eux. La plupart des numéros de port sont associés à des protocoles précis.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;          &lt;h3&gt;Introduction&lt;/h3&gt;

&lt;p&gt;Il y a souvent de la confusion autour des différents termes &lt;strong&gt;SSL&lt;/strong&gt;, &lt;strong&gt;TLS&lt;/strong&gt; and &lt;strong&gt;STARTTLS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Transport_Layer_Security&quot;&gt;SSL et TLS&lt;/a&gt; fournissent tous deux un moyen de chiffrer le canal de communication entre deux ordinateurs (par exemple votre ordinateur et votre serveur mail). TLS est le successeur de SSL et les termes SSL et TLS sont interchangeables, à moins que vous ne fassiez référence à une version particulière du protocole.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Starttls&quot;&gt;STARTTLS&lt;/a&gt; est un moyen de prendre une connexion non chiffrée existante, et la &quot;mettre à jour&quot; vers une connexion sécurisée en utilisant SSL/TLS. Notez que même s'il contient TLS dans son nom, STARTTLS ne signifie pas que vous devez obligatoirement utiliser TLS, vous pouvez utiliser SSL.&lt;/p&gt;

&lt;h3&gt;Numéros de version SSL/TLS&lt;/h3&gt;

&lt;p&gt;La numérotation des versions du protocole est inconsistante entre SSL et TLS. Lorsque TLS a remplacé SSL comme protocole préférentiel pour les communications chiffrées, il a commencé avec une nouvelle numérotation de versions, et a également commencé à utiliser des sous-versions. L'ordre des versions des protocoles du plus ancien au plus récent est donc : SSL&amp;nbsp;v2, SSL&amp;nbsp;v3, TLS&amp;nbsp;v1.0, TLS&amp;nbsp;v1.1, TLS&amp;nbsp;v1.2.&lt;/p&gt;

&lt;p&gt;Lorsque vous vous connectez sur un port chiffré avec SSL/TLS, ou que vous utilisez STARTTLS pour convertir la connexion en connexion chiffrée, les deux systèmes vont négocier quel protocole et quelle version utiliser, en se basant ce qui a été configuré et sur ce que chaque système supporte.&lt;/p&gt;

&lt;p&gt;Le support pour SSL/TLS est &quot;virtuellement&quot; universel de nos jours, mais le support des versions est variable. Pratiquement tous les systèmes supportent SSL&amp;nbsp;v3 (à part quelques rares appareils Palm Treo &lt;a href=&quot;https://blog.fastmail.com/2009/11/18/special-ssl-hostname-for-old-clients/&quot;&gt;comme nous avons pu le constater&lt;/a&gt;). La plupart des systèmes supportent TLS&amp;nbsp;v1.0. À la date de Mai 2012, &lt;a href=&quot;https://en.wikipedia.org/wiki/Transport_Layer_Security#Web_browsers&quot;&gt;le support pour TLS&amp;nbsp;v1.1 et TLS&amp;nbsp;v1.2 est beaucoup plus restreint&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Dénomination incorrecte TLS vs STARTTLS&lt;/h2&gt;

&lt;p&gt;Pour compliquer les choses, certains logiciels de mail utilisent &lt;strong&gt;incorrectement&lt;/strong&gt; le terme TLS à la place de STARTTLS. Les plus vieilles versions de Thunderbird en particulier utilisent &quot;TLS&quot; pour dire « &lt;code&gt;utiliser STARTTLS pour chiffrer la connexion dès que possible et abandonner si STARTTLS n'est pas supporté&lt;/code&gt; » et « &lt;code&gt;TLS, si disponible&lt;/code&gt; » signifie « &lt;code&gt;utiliser STARTTLS pour chiffrer la connexion dès que possible si le serveur déclare le supporter, sinon utiliser simplement une connexion non chiffrée&lt;/code&gt; ».&lt;/p&gt;

&lt;h2&gt;Numéros de ports SSL/TLS vs plaintext/STARTTLS&lt;/h2&gt;

&lt;p&gt;Le problème du dessus est particulièrement problématique lorsque vous devez configurer des ports différents pour chaque protocole.&lt;/p&gt;

&lt;p&gt;Pour ajouter de la sécurité à certains protocoles (e.g. IMAP, POP, etc.), il a été décidé d'ajouter nativement une couche de chiffrement SSL/TLS dans le protocole. Cependant, pour identifier que le logiciel doit parler la version nativement chiffrée du protocole au lieu de la version non chiffrée, un port différent a été déclaré pour chaque protocole. Vous avez donc :&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;IMAP utilise le port &lt;code&gt;143&lt;/code&gt;, mais IMAP avec SSL/TLS utilise le port &lt;code&gt;993&lt;/code&gt;.&lt;/li&gt;
	&lt;li&gt;POP utilise le port &lt;code&gt;110&lt;/code&gt;, mais POP avec SSL/TLS utilise le port &lt;code&gt;995&lt;/code&gt;.&lt;/li&gt;
	&lt;li&gt;SMTP utilise le port &lt;code&gt;25&lt;/code&gt;, mais SMTP avec SSL/TLS utilise le port &lt;code&gt;465&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Au bout d'un moment, il a été décidé qu'utiliser deux ports pour chaque protocole était du gaspillage, et qu'à la place il devrait y avoir un seul port sur lequel commencer la communication de manière non chiffrée, puis proposer au système distant de mettre à jour vers la version chiffrée. C'est ce pour quoi STARTTLS a été créé.&lt;/p&gt;

&lt;p&gt;Il y a eu quelques problèmes avec cette proposition. Il y avait déjà des logiciels qui utilisaient les numéros de port alternatifs avec une connexion SSL/TLS native. Les logiciels clients peuvent avoir une durée de vie très longue, donc vous ne pouvez pas juste désactiver les ports chiffrés avant que tous les logiciels ne soient remplacés ou mis à jour.&lt;/p&gt;

&lt;p&gt;Des mécanismes ont été mis en place sur chaque protocole pour dire aux systèmes que le protocole non chiffré supportait STARTTLS, et qu'ils ne doivent pas essayer de se connecter avant de démarrer la négociation STARTTLS. Cela créa deux situations malheureuses :&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Certains logiciels ignoraient simplement l'instruction « &lt;code&gt;login désactivé jusqu'à ce que la connexion soit convertie en SSL avec STARTTLS&lt;/code&gt; » et essayaient de se connecter tout de même, envoyant leur login et mot de passe à travers la connexion non chiffrée. Même si le serveur à ce moment là rejette le login, les informations sont déjà passées en clair sur Internet.&lt;/li&gt;
	&lt;li&gt;D'autres logiciels voyaient l'annonce « &lt;code&gt;login désactivé jusqu'à conversion en SSL&lt;/code&gt; », mais ne mettaient pas à jour leur connexion automatiquement, et renvoyaient des erreurs « &lt;code&gt;mot de passe incorrect&lt;/code&gt; » à l'utilisateur, ce qui provoqua de la confusion sur ce qui était incorrect dans la configuration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ces deux problèmes causèrent finalement d'importantes incompatibilités entre les logiciels existants, et la plupart des administrateurs systèmes continuèrent d'utiliser les connexions exclusivement non sécurisés sur le port d'origine, et les connexions SSL natives sur un port alternatif.&lt;/p&gt;

&lt;p&gt;C'est donc devenu de fait le standard que tout le monde utilise. IMAP SSL/TLS chiffré sur le port&lt;code&gt;993&lt;/code&gt; ou POP SSL/TLS chiffré sur le port &lt;code&gt;995&lt;/code&gt;. Beaucoup de sites (dont FastMail) désactive à présent le port IMAP non sécurisé (port &lt;code&gt;143&lt;/code&gt;) et le port POP non sécurisé (port &lt;code&gt;110&lt;/code&gt;) pour que les utilisateurs utilisent &lt;strong&gt;obligatoirement&lt;/strong&gt; une connexion chiffrée SSL/TLS. En désactivant les ports &lt;code&gt;143&lt;/code&gt; et &lt;code&gt;110&lt;/code&gt;, cela supprime également complètement STARTTLS, même en tant qu'option pour les connexions IMAP/POP.&lt;/p&gt;

&lt;h2&gt;SMTP STARTTLS comme une exception&lt;/h2&gt;

&lt;p&gt;La seule vraie exception à ce qui précède est SMTP. Cependant, c'est pour une raison différente. La plupart des logiciels email utilisent utilisaient le port &lt;code&gt;25&lt;/code&gt; pour soumettre des messages à envoyer au serveur mail. Cependant, SMTP a été créé à l'origine comme un protocole d'échange de messages, et non de soumission. Un autre port (587) a donc été &lt;a href=&quot;https://tools.ietf.org/html/rfc2476&quot;&gt;déclaré pour la soumission de messages&lt;/a&gt;. Bien que le port &lt;code&gt;587&lt;/code&gt; ne nécessite pas explicitement STARTTLS, l'utilisation du port &lt;code&gt;587&lt;/code&gt; est devenu populaire au même moment où l'utilisation de SSL/TLS était devenue un enjeu important de sécurité et de confidentialité.&lt;/p&gt;

&lt;p&gt;Le résultat c'est que dans la plupart des cas, les systèmes qui proposent la soumission par le port &lt;code&gt;587&lt;/code&gt; &lt;strong&gt;nécessitent&lt;/strong&gt; que les logiciels utilisent STARTTLS pour chiffre la connexion, et nécessitent aussi un login et un mot de passe pour s'identifier. Il y a plusieurs avantages à cette approche. En écartant les utilisateurs du port &lt;code&gt;25&lt;/code&gt;, les FAI ont été en mesure de bloquer le port &lt;code&gt;25&lt;/code&gt; pour prévenir les envois automatiques de SPAM causés par l'infection des postes de leurs utilisateurs.&lt;/p&gt;

&lt;p&gt;Actuellement,&amp;nbsp; les choses semblent encore aléatoires, divisées entre les gens qui utilisent SMTP SSL/TLS chiffré sur le port &lt;code&gt;465&lt;/code&gt;, et les gens qui utilisent SMTP avec STARTTLS sur le port &lt;code&gt;587&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;NDLR : SMTPS sur le port &lt;code&gt;465&lt;/code&gt; est aujourd'hui &lt;a href=&quot;https://en.wikipedia.org/wiki/SMTPS&quot;&gt;définitivement obsolète&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>C'est l'histoire d'un spam Partie 1: petit cours d'anatomie</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2016/04/28/C-est-l-histoire-d-un-spam-Partie-1</link>
        <guid isPermaLink="false">urn:md5:06779a5b5e416b7931e49ff3f692ba7f</guid>
        <pubDate>Mon, 02 May 2016 15:48:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>mail</category>
                  <category>postfix</category>
                  <category>serie-mail-postfix-spam</category>
                  <category>spam</category>
                <description>&lt;p&gt;Le SPAM par mail, c'est pénible. C'est du travail à temps plein si on veut s'en débarrasser en gênant le moins les utilisateurs. De la stricte application des RFC aux paramètres secrets de spamassassin, je vais essayer dans cette nouvelle série d'articles essayer de vous en faire mieux comprendre les techniques, et proposer à mon échelle les quelques solutions &quot;qui marchent&quot;, du moins pour moi.&lt;/p&gt;

&lt;p&gt;Voici donc pour cette première partie un cours d'autopsie. Le SPAM que nous décortiquer aujourd'hui est un mail est est resté coincé en &lt;em&gt;queue&lt;/em&gt; sur le serveur mail. Bien que tous les mails en queue ne soient pas du SPAM, il est important de surveiller la taille de cette liste de mails &quot;en transit&quot; ; un grand nombre de mails dans cette liste indiquant souvent un problème d'envoi ou de réception.&lt;/p&gt;

&lt;p&gt;Affichons donc la queue :&lt;/p&gt;

&lt;pre&gt;
# mailq
1430281C33     8589 Thu Apr 28 14:51:58  MAILER-DAEMON
             (connect to serveurspamserveur.net.ae[86.96.xxx.xxx]:25: Connection refused)
                                         spammeur@serveurspamserveur.net.ae
&lt;/pre&gt;

&lt;p&gt;Première constatation : l'adresse source ne correspond pas à une adresse gérée par le serveur, ce n'est donc pas un mail envoyé par un des utilisateurs du serveur. Mais alors comment ça se fait que je route des mails qui ne viennent pas de chez moi, et qui ne vont pas chez moi ? Mon serveur serait configuré en &lt;a href=&quot;https://en.wikipedia.org/wiki/Open_mail_relay&quot;&gt;OpenRelay&lt;/a&gt; (ça serait inquiétant) ?&lt;/p&gt;

&lt;p&gt;Examinons le contenu brut du mail à partir de son ID. La commande postcat permet de le faire pour Postfix, à adapter selon votre MTA.&lt;/p&gt;

&lt;pre&gt;
# postcat -q 1430281C33&lt;/pre&gt;          &lt;p&gt;Ci-dessous la sortie de la commande postcat que j'ai colorisée :&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#696969;&quot;&gt;*** ENVELOPE RECORDS deferred/1/1430281C33 ***&lt;/span&gt;
&lt;span style=&quot;color:#696969;&quot;&gt;message_size:            8589             234               1               0            8589
message_arrival_time: Thu Apr 28 14:51:58 2016
create_time: Thu Apr 28 14:51:58 2016
named_attribute: log_message_origin=local
named_attribute: trace_flags=0
sender:
original_recipient: spammeur@spamserveur.net.ae
recipient: spammeur@spamserveur.net.ae&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;*** MESSAGE CONTENTS deferred/1/1430281C33 ***
Received: by monserveur.com (Postfix)
    id 1430281C33; Thu, 28 Apr 2016 14:51:58 +0200 (CEST)
Date: Thu, 28 Apr 2016 14:51:58 +0200 (CEST)
From: MAILER-DAEMON@monserveur.com (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
To: spammeur@spamserveur.net.ae
Auto-Submitted: auto-replied
MIME-Version: 1.0&lt;/span&gt;
&lt;span style=&quot;color:#FF0000;&quot;&gt;Content-Type: multipart/report; report-type=delivery-status;
    boundary=&quot;B25FA81C32.1461847918/monserveur.com&quot;&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Transfer-Encoding: 8bit
Message-Id: &amp;lt;20160428125158.1430281C33@monserveur.com&amp;gt;&lt;/span&gt;

&lt;strong&gt;This is a MIME-encapsulated message.&lt;/strong&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--B25FA81C32.1461847918/monserveur.com&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Description: Notification
Content-Type: text/plain; charset=us-ascii&lt;/span&gt;

&lt;strong&gt;This is the mail system at host monserveur.com.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system

&amp;lt;monclient@gmail.com&amp;gt;: host
    gmail-smtp-in.l.google.com[2a00:1450:400c:xxxx::xxxx] said: 552-5.7.0 This
    message was blocked because its content presents a potential 552-5.7.0
    security issue. Please visit 552-5.7.0
    https://support.google.com/mail/answer/6590 to review our message 552 5.7.0
    content and attachment content guidelines. cw9si10769736wjb.20 - gsmtp (in
    reply to end of DATA command)&lt;/strong&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--B25FA81C32.1461847918/monserveur.com&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Description: Delivery report
Content-Type: message/delivery-status

Reporting-MTA: dns; monserveur.com
X-Postfix-Queue-ID: B25FA81C32
X-Postfix-Sender: rfc822; spammeur@spamserveur.net.ae
Arrival-Date: Thu, 28 Apr 2016 14:51:57 +0200 (CEST)

Final-Recipient: rfc822; monclient@gmail.com
Original-Recipient: rfc822;monclient@gmail.com
Action: failed
Status: 5.7.0
Remote-MTA: dns; gmail-smtp-in.l.google.com
Diagnostic-Code: smtp; 552-5.7.0 This message was blocked because its content
    presents a potential 552-5.7.0 security issue. Please visit 552-5.7.0
    https://support.google.com/mail/answer/6590 to review our message 552 5.7.0
    content and attachment content guidelines. cw9si10769736wjb.20 - gsmtp&lt;/span&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--B25FA81C32.1461847918/monserveur.com&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Description: Undelivered Message
Content-Type: message/rfc822
Content-Transfer-Encoding: 8bit

Return-Path: &amp;lt;spammeur@spamserveur.net.ae&amp;gt;
Received: from localhost (localhost [127.0.0.1])
    by monserveur.com (Postfix) with ESMTP id B25FA81C32
    for &amp;lt;monclient@gmail.com&amp;gt;; Thu, 28 Apr 2016 14:51:57 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at monserveur.com
Received: from monserveur.com ([127.0.0.1])
    by localhost (monserveur.com [127.0.0.1]) (amavisd-new, port 10024)
    with ESMTP id vn_xZRLJ3EKq for &amp;lt;monclient@gmail.com&amp;gt;;
    Thu, 28 Apr 2016 14:51:51 +0200 (CEST)
Received: by monserveur.com (Postfix, from userid 5000)
    id BE51181C31; Thu, 28 Apr 2016 14:51:51 +0200 (CEST)
X-Sieve: Pigeonhole Sieve 0.4.2
X-Sieve-Redirected-From: contact@monclient.com
Delivered-To: contact@monclient.com
Received: from localhost (localhost [127.0.0.1])
    by monserveur.com (Postfix) with ESMTP id 95E2581C33
    for &amp;lt;contact@monclient.com&amp;gt;; Thu, 28 Apr 2016 14:51:51 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at monserveur.com
Received: from monserveur.com ([127.0.0.1])
    by localhost (monserveur.com [127.0.0.1]) (amavisd-new, port 10024)
    with ESMTP id 8agkFLPzF_vy for &amp;lt;contact@monclient.com&amp;gt;;
    Thu, 28 Apr 2016 14:51:44 +0200 (CEST)
Received: from bba148580.serveurspam.net.ae (bba148580.serveurspam.net.ae [217.165.xxx.xxx])
    by monserveur.com (Postfix) with ESMTP id 774C481C27
    for &amp;lt;contact@monclient.com&amp;gt;; Thu, 28 Apr 2016 14:51:44 +0200 (CEST)
Received: from www.serveurspam.net.ae ([127.0.0.1]) by AMAZONA-F00CA66 with Microsoft SMTPSVC(7.5.7601.17514);
     Thu, 28 Apr 2016 16:51:42 +0400
Date: Thu, 28 Apr 2016 16:51:42 +0400
To: &quot;contact@monclient.com&quot; &amp;lt;contact@monclient.com&amp;gt;
From: xxxx xxxx &amp;lt;spammeur@spamserveur.net.ae&amp;gt;
Subject: [SPAM] FW: Invoice
Message-ID: &amp;lt;be0fa65c2e77bf81d3fd1b0216e8e742@www.serveurspam.net.ae&amp;gt;
X-Priority: 3
X-Mailer: PHPMailer [version 1.73]
MIME-Version: 1.0&lt;/span&gt;
&lt;span style=&quot;color:#FF0000;&quot;&gt;Content-Type: multipart/mixed;
    boundary=&quot;b1_be0fa65c2e77bf81d3fd1b0216e8e742&quot;&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;X-OriginalArrivalTime: 28 Apr 2016 16:51:42.0538 (UTC) FILETIME=[40C0DFC0:01D1A068]&lt;/span&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--b1_be0fa65c2e77bf81d3fd1b0216e8e742&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Type: multipart/alternative;
    boundary=&quot;b2_be0fa65c2e77bf81d3fd1b0216e8e742&quot;&lt;/span&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--b2_be0fa65c2e77bf81d3fd1b0216e8e742&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Type: text/plain; charset = &quot;iso-8859-1&quot;
Content-Transfer-Encoding: 8bit&lt;/span&gt;

&lt;strong&gt;Please find attached invoice #726990

Have a nice day

Rowena Pittman
Executive Director Sales Account Management Training Performance Support&lt;/strong&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--b2_be0fa65c2e77bf81d3fd1b0216e8e742&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Type: text/html; charset = &quot;iso-8859-1&quot;
Content-Transfer-Encoding: 8bit&lt;/span&gt;

&lt;strong&gt;&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p&amp;gt;Please find attached invoice #726990&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Have a nice day&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Rowena Pittman&amp;lt;br&amp;gt;
Executive Director Sales Account Management Training Performance Support&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/strong&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--b2_be0fa65c2e77bf81d3fd1b0216e8e742--
--b1_be0fa65c2e77bf81d3fd1b0216e8e742&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Type: application/zip; name=&quot;B1095_scan-invoice_0B0C3F.zip&quot;
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=&quot;B1095_scan-invoice_0B0C3F.zip&quot;&lt;/span&gt;

&lt;strong&gt;UEsDBBQAAAAIAIRenEiR5N/wYgcAAHQTAAAKAAAAMTk0MGMwOS5qc9VYaW/TMBj+DBL/IUQC
ElYGLacoCNJr7Wh6LKVrixBKHCdxDid17oz9d+ys45IzBN+YtmWLX7/v4+c93Uwnwgha4xSe

...&lt;/strong&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--b1_be0fa65c2e77bf81d3fd1b0216e8e742--&lt;/span&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--B25FA81C32.1461847918/monserveur.com--&lt;/span&gt;
&lt;span style=&quot;color:#696969;&quot;&gt;*** HEADER EXTRACTED deferred/1/1430281C33 ***
named_attribute: encoding=8bit
*** MESSAGE FILE END deferred/1/1430281C33 ***&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Les lignes que j'ai mises en &lt;span style=&quot;color:#696969;&quot;&gt;gris&lt;/span&gt; ne sont pas très intéressantes : il s'agit de l'enveloppe et des informations fournies par le système qui gère la queue, intéressons-nous plutôt au reste.&lt;/p&gt;

&lt;p&gt;Les lignes en &lt;span style=&quot;color:#0000FF;&quot;&gt;bleu&lt;/span&gt; sont les en-têtes, ce sont elles qui retracent à la fois le format du message, mais aussi leur trajet à travers les différents serveurs mails qui l'ont manipulé. Comme une liste de tampons sur un passeport. Ce sont en particulier les lignes commençant par &lt;span style=&quot;color:#0000FF;&quot;&gt;Received&lt;/span&gt;, qui tracent le trajet des mails à travers les échanges entre les serveurs. La première ligne Received correspondant au dernier échange réalisé, et la dernière ligne &lt;span style=&quot;color:#0000FF;&quot;&gt;Received&lt;/span&gt; au premier échange réalisé.&lt;/p&gt;

&lt;p&gt;Dans l'en-tête on retrouve aussi l'ID du message, &lt;strong&gt;1430281C33&lt;/strong&gt;, et son parcours entre les seveurs mail. Chaque serveur par lequel le mail passe va rajouter une ligne, la première ligne correspondant au dernier serveur ayant reçu le message.&lt;/p&gt;

&lt;p&gt;Les lignes en &lt;span style=&quot;color:#FF0000;&quot;&gt;rouge&lt;/span&gt; sont ce que l'on appelle les boundaries (et leurs déclarations). Ce sont des lignes de séparation permettant de dissocier les pièces jointes du reste du message. Ici on en a plusieurs, parce qu'en fait à chaque échange, le mail s'est fait attacher à un autre mail. Ce n'est pas courant, à moins que le mail n'ai été enrichi d'informations supplémentaire après un &quot;rejet&quot; du serveur de destination. Ici, il s'est donc probablement fait &quot;jeter&quot; plusieurs fois !&lt;/p&gt;

&lt;p&gt;Commençons notre analyse par la fin du message. Le mail original contenait visiblement lui aussi une pièce jointe, et à en juger par le texte invitant à ouvrir la pièce jointe, il est fort possible que ça soit un SCAM. Un message vous invitant à ouvrir un faux fichier PDF qui va infecter l'ordinateur. Heureusement donc que ce mail n'est pas arrivé jusqu'à sa destination.&lt;/p&gt;

&lt;p&gt;Remontons un peu, on constate que le mail a été envoyé avec PHPMailer, et qu'il a été marqué en [SPAM] dans le sujet par mon filtre antispam. La première trace de l'arrivée du mail est la suivante :&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Received: from bba148580.serveurspam.net.ae (bba148580.serveurspam.net.ae [217.165.xxx.xxx]) by monserveur.com (Postfix) with ESMTP id 774C481C27 for &amp;lt;contact@monclient.com&amp;gt;; Thu, 28 Apr 2016 14:51:44 +0200 (CEST)
Received: from www.serveurspam.net.ae ([127.0.0.1]) by AMAZONA-F00CA66 with Microsoft SMTPSVC(7.5.7601.17514); Thu, 28 Apr 2016 16:51:42 +0400&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;La ligne au-dessus, c'est la trace du passage à l'antispam et à l'antivirus :&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Received: from localhost (localhost [127.0.0.1]) by monserveur.com (Postfix) with ESMTP id 95E2581C33 for &amp;lt;contact@monclient.com&amp;gt;; Thu, 28 Apr 2016 14:51:51 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at monserveur.com
Received: from monserveur.com ([127.0.0.1]) by localhost (monserveur.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8agkFLPzF_vy for &amp;lt;contact@monclient.com&amp;gt;; Thu, 28 Apr 2016 14:51:44 +0200 (CEST)&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Rien de spécial, l'antivirus et l'antispam sont installés en local et ont fait leur job dès que le message a été reçu. Continuons.&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;X-Sieve: Pigeonhole Sieve 0.4.2
X-Sieve-Redirected-From: contact@monclient.com&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Ça c'est le mécanisme qui gère les alias de mon serveur. &lt;a href=&quot;https://fr.wikipedia.org/wiki/Sieve&quot;&gt;Sieve&lt;/a&gt; va rediriger l'adresse contact@monclient.com vers la bonne adresse de destination, l'adresse contact@monclient.com étant un alias.&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Received: from monserveur.com ([127.0.0.1]) by localhost (monserveur.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vn_xZRLJ3EKq for &amp;lt;monclient@gmail.com&amp;gt;; Thu, 28 Apr 2016 14:51:51 +0200 (CEST)
Received: by monserveur.com (Postfix, from userid 5000) id BE51181C31; Thu, 28 Apr 2016 14:51:51 +0200 (CEST)&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;On transfère tout ça au MTA local pour envoi à la destination finale :&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Received: from localhost (localhost [127.0.0.1]) by monserveur.com (Postfix) with ESMTP id B25FA81C32 for &amp;lt;monclient@gmail.com&amp;gt;; Thu, 28 Apr 2016 14:51:57 +0200 (CEST)&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Fin du premier message, on traverse la boundary pour voir ce qu'il s'est passé ensuite :&lt;/p&gt;

&lt;pre&gt;
&lt;strong&gt;&amp;lt;monclient@gmail.com&amp;gt;: host gmail-smtp-in.l.google.com[2a00:1450:400c:xxxx::xxxx] said: 552-5.7.0 This message was blocked because its content presents a potential 552-5.7.0 security issue.&lt;/strong&gt;&lt;/pre&gt;

&lt;p&gt;Ça c'est moins cool. En gros, gmail a jeté le message, parce que la pièce jointe était sans doute contaminée. Mon antivirus n'a rien vu, il va falloir chercher pourquoi (plus tard).&lt;/p&gt;

&lt;p&gt;On continue de remonter, et au-dessus de la dernière boundary, on a :&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Received: by monserveur.com (Postfix) id 1430281C33; Thu, 28 Apr 2016 14:51:58 +0200 (CEST)&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Ok, gmail m'a renvoyé le message plus ou moins gentiement en m'expliquant qu'il n'en voulait pas, et mon serveur essaie de le transférer au spammeur original qui nous a fermé sa porte. Le mail reste donc en queue jusqu'à son expiration... Voilà pourquoi il traîne dans la queue des mails et qu'il n'a été envoyé ni par moi ni pour moi...&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;J'espère que cette courte plongée dans les en-têtes d'un mail vous a permis de vous familiariser avec le &quot;vrai&quot; contenu d'un mail.&lt;/p&gt;

&lt;p&gt;Ici je ne peux plus faire grand chose avec ce mail à part le supprimer de la queue mail, le spammeur ayant certainement déjà été bloqué par son hébergeur ou changé d'adresse IP pour continuer à envoyer sans se faire prendre par les blacklists.&lt;/p&gt;

&lt;p&gt;À bientôt pour un nouvel article. &lt;img src=&quot;/blog/themes/mathedit_material3/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot;&gt;&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Diminuer le taux de rejet des mails sortants pour un fournisseur de boîtes mail</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2016/02/09/Diminuer-le-taux-de-rejet-des-mails-sortants-pour-un-fournisseur-de-bo%C3%AEtes-mail</link>
        <guid isPermaLink="false">urn:md5:de20367e11d0beb125dad9998acb8bf6</guid>
        <pubDate>Tue, 09 Feb 2016 21:06:00 +0100</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>exim</category>
                  <category>mail</category>
                  <category>postfix</category>
                  <category>serveur</category>
                <description>&lt;p&gt;En théorie, tout le monde peut s’improviser fournisseur d’emails, il suffit d’une machine avec les ports ouverts sur Internet et de quelques connaissances pour configurer le serveur mail (Postfix, Exim…)&lt;/p&gt;

&lt;p&gt;En pratique, les fournisseurs de mails subissent la «&amp;nbsp;concurrence déloyale&amp;nbsp;» de leur camarades, car envoyer un mail c’est bien, faire en sorte qu’il soit reçu c’est mieux. Les «&amp;nbsp;concurrents&amp;nbsp;» ce sont les fournisseurs de service comme Hotmail, Gmail, Yahoo, et bien d’autres. Afin de lutter contre le SPAM, ces sociétés sont de plus en plus strictes sur la source des mails qui sont reçus par leurs services.&lt;/p&gt;

&lt;p&gt;Une des conséquences c’est que les petits opérateurs, comme une start-up qui fournit de l’hébergement, un FAI associatif, ou même un particulier qui veut se réapproprier Internet, se font bloquer assez rapidement avec peu de solutions de recours, le support faisant souvent la sourde oreille.&lt;/p&gt;

&lt;p&gt;Dans cet article, je vais donc explorer quelques pistes pour vous permettre d’abord d’éviter de vous retrouver bloqués, et ensuite contourner le blocage le cas échéant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ce billet est le produit de mes expériences avec l'hébergeur &lt;a href=&quot;http://wellhosted.ch&quot;&gt;wellhosted&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;          &lt;h3&gt;Réputation (et monitoring)&lt;/h3&gt;

&lt;p&gt;Déjà, si vous avez une adresse IP dynamique, oubliez l’envoi de mails. Il est très difficile avec une IP dynamique d’assurer à la fois une réception correcte (même avec un MX pointant sur un DynDNS), et un envoi qui réussisse à tous les coups. D’ailleurs, la plupart des opérateurs proposant des IPs dynamiques bloquent le port 25, rendant l’envoi des mails «&amp;nbsp;entre serveurs&amp;nbsp;» impossible.&lt;/p&gt;

&lt;p&gt;Ensuite, la seconde bonne raison pour avoir une IP fixe, c’est que les contrôlent antispam reposent en grande partie sur la réputation des IPs qui leur envoient des mails. Ce mécanisme s’appelle le &lt;a href=&quot;https://fr.wikipedia.org/wiki/Lutte_anti-spam#RBL&quot;&gt;RBL&lt;/a&gt; pour Realtime Block List. Les serveurs s’abonnent à des listes d'adresses IP connues pour émettre du SPAM, et refusent de recevoir les mails depuis ces IPs. Pas de chance si vous avez hérité d’une IP « qui pue », il vous faudra patiemment demander votre retrait de la liste de blocage au cas par cas.&lt;/p&gt;

&lt;p&gt;Il existe des outils pour tester votre IP sur un grand nombre de RBL&amp;nbsp; : &lt;a href=&quot;http://mxtoolbox.com/blacklists.aspx&quot;&gt;mxtoolbox.com/blacklists.aspx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vous pouvez également mettre en place une surveillance automatique de votre réputation sur plusieurs blocklists, soit &lt;a href=&quot;https://exchange.nagios.org/directory/Plugins/Email-and-Groupware/check_rbl/details&quot;&gt;avec un simple plugin Nagios&lt;/a&gt;, soit avec un outil comme &lt;a href=&quot;http://www.rblmon.com/&quot;&gt;RBLMon&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A noter que certaines listes ne permettent pas de faire «&amp;nbsp;retirer&amp;nbsp;» votre IP de la liste. Pas d’inquiétude pour ces listes, personne ne les utilise. Il existe par contre des fournisseurs de service qui ne publient pas leurs listes, et qui ont un processus contraignant pour se faire débloquer (Microsoft par exemple).&lt;/p&gt;

&lt;p&gt;Une fois que votre IP est fixe et qu'elle est propre, l’étape suivante c’est conserver la réputation de votre IP et être irréprochable sur les mails que vous envoyez, mail nous verrons cela dans la suite.&lt;/p&gt;

&lt;h3&gt;IPv6&lt;/h3&gt;

&lt;p&gt;Même si ce n’est pas indispensable, IPv6 est le futur d'Internet, et de nombreux serveurs mails parlent IPv6. En utilisant IPv6, vous aurez aussi l’avantage que beaucoup de RBL ne sont pas prêtes pour IPv6, et donc votre IP ne sera certainement pas bloquée sur ces listes.&lt;/p&gt;

&lt;p&gt;Revers de la médaille : oubliez l’utilisation d’une IPv6 exclusive, certains fournisseurs de mail utilisent encore exclusivement IPv4, il vous faudra donc une configuration réseau supportant les deux adressages pour être certain de pouvoir livrer vos mails.&lt;/p&gt;

&lt;h3&gt;Reverse, PTR, et Hostname&lt;/h3&gt;

&lt;p&gt;Le « &lt;a href=&quot;https://en.wikipedia.org/wiki/Reverse_DNS_lookup&quot;&gt;Reverse&lt;/a&gt; », parfois nommé « PTR », est une résolution DNS inverse. De la même façon qu'une résolution DNS permet de passer d'un nom de domaine à une adresse IP, le DNS inverse permet de passer d'une adresse IP à un nom de domaine. Ce mécanisme existe aussi bien pour IPv4 que pour IPv6.&lt;/p&gt;

&lt;p&gt;Si votre fournisseur de service (la personne chez qui vous louez les IPs ou les serveurs) ne vous permet pas de changer le Reverse, changez de prestataire immédiatement ! L'envoi d'un mail à partir d'une adresse IP sans Reverse est souvent rédhibitoire pour le serveur mail de destination (pas de reverse, pas de livraison).&lt;/p&gt;

&lt;p&gt;De plus, votre Reverse doit être consistant :&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;L'adresse IP doit résoudre vers un domaine, et ce même domaine doit résoudre vers l'adresse IP.&lt;/li&gt;
	&lt;li&gt;Le serveur mail doit également fournir son nom de domaine principal dans le processus de négociation, et ce nom doit résoudre correctement vers son IP. Réglez donc les &lt;strong&gt;/etc/hostname&lt;/strong&gt; ; &lt;strong&gt;/etc/mailname&lt;/strong&gt; et &lt;strong&gt;myhostname&lt;/strong&gt; (pour Postfix) correctement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Une inconsistance à un quelconque niveau est pire qu'une absence de reverse : le serveur de destination considérera qu'il y a peut-être usurpation de l'IP.&lt;/p&gt;

&lt;p&gt;Encore une fois, n'oubliez pas de régler aussi le reverse IPv6 si vous utilisez IPv6 sur votre serveur.&lt;/p&gt;

&lt;h3&gt;Postmaster, Hostmaster, et RFC&lt;/h3&gt;

&lt;p&gt;Certains serveurs mails sont un peu soupe au lait. Par exemple, il peut arriver que votre réputation descende en flèche juste parce que le propriétaire du serveur n’a pas de moyen automatisé de vous contacter.&lt;/p&gt;

&lt;p&gt;J’explique : dans les &lt;a href=&quot;https://fr.wikipedia.org/wiki/Request_for_comments&quot;&gt;RFC&lt;/a&gt; (Request For Comment, la base des normes et protocoles sur Internet), il est prévu qu’un serveur mail émettant du courrier possède des adresses particulières, à savoir &lt;a href=&quot;mailto:postmaster@ledomaine.com&quot;&gt;postmaster@ledomaine.com&lt;/a&gt; et &lt;a href=&quot;mailto:hostmaster@ledomaine.com&quot;&gt;hostmaster@ledomaine.com&lt;/a&gt; permettant de recevoir les mails envoyés automatiquement par ses pairs.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;postmaster&lt;/strong&gt; recevra principalement les plaintes pour SPAM, notification de traffic inhabituel sur les mails, et autres requêtes relatives aux mails&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;hostmaster&lt;/strong&gt; recevra les mails relatifs à la gestion du nom de domaine lui-même (demandes de transfert, contact légal du propriétaire - même si on préfère souvent écrire aux contacts du whois), ou parfois pour la réservation d’un certificat SSL (vérification de la propriété du nom de domaine avant délivrance automatique du certificat).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;L’absence d’une adresse postmaster@ valide sur votre serveur vous fait donc paraître pour le serveur mail de destination comme un spammeur qui n’a même pas pris la peine d’implémenter correctement le protocole mail.&lt;/p&gt;

&lt;p&gt;A noter qu’un alias de postmaster@&amp;nbsp;vers une adresse de votre choix fonctionne aussi, même si cette adresse est un trou noir. Mais vous ne devriez pas ignorer les notifications automatiques de blocage et de plaintes envoyées à postmaster…&lt;/p&gt;

&lt;p&gt;De la même façon, préférez un logiciel de serveur mail respectueux des standards (Postfix, Exim) au tout-dernier-serveur-mail-a-la-mode, dont les réponses ne sont peut-être pas entièrement conformes aux RFC.&lt;/p&gt;

&lt;h3&gt;Limites&lt;/h3&gt;

&lt;p&gt;Là on touche au grand dilemme du fournisseur de mails en serveur mutualisé : offrir plus de possibilités aux utilisateurs, ou se protéger contre les usages abusifs ?&lt;/p&gt;

&lt;p&gt;Concrètement, imaginons qu’un de vos utilisateurs décide d’envoyer de la publicité aux 500 adresses mail de sa liste de contacts. Les serveurs recevant un tel volume de messages d’un seul coup ne vont peut-être pas apprécier ce trafic non sollicité et encombrant (de la pub ? du SPAM ? Paf, bloqué).&lt;/p&gt;

&lt;p&gt;Pire : imaginez qu’un de vos utilisateurs se fasse pirater sa boîte mail, et devienne un émetteur de SPAM ou de virus à partir de votre serveur mail ? Vous pensez que les serveurs de destinations seront compréhensifs s’ils reçoivent des centaines de mails par seconde provenant de votre serveur mail ? Ils ne chercheront pas à comprendre : paf, bloqué.&lt;/p&gt;

&lt;p&gt;La solution dans un premier temps c’est de limiter le nombre de mails envoyés par votre serveur, par adresse et par jour. Chaque utilisateur ne devrait par exemple envoyer que 300 mails par jour. Au-delà, le compte sera bloqué en attendant que l’on détermine si c’est une utilisation légitime ou non. La limite est bien entendu à calibrer selon les utilisateurs et les services que vous voulez offrir.&lt;/p&gt;

&lt;p&gt;Il existe plusieurs solutions pour implémenter ce comportement, voici la mienne : &lt;a href=&quot;https://github.com/mpellegrin/ratelimit-policyd&quot;&gt;github.com/mpellegrin/ratelimit-policyd&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Diminuer la vitesse d’envoi&lt;/h3&gt;

&lt;p&gt;Ça peut paraître un comble au moment où l’on veut recevoir les informations le plus vite possible, et pourtant c’est souvent nécessaire pour l’envoi de mails. Afin d’éviter d’envoyer trop vite un grand volume de mail d’un coup, il peut être nécessaire de mettre en place une limite de mails sortants par seconde et par domaine de destination. Ainsi, le serveur mail de destination ne sera pas inondé sous le poids des mails à traiter, et sera plus coopératif pour les recevoir (en résumé : il ne vous bloquera pas pour usage abusif de sa bande passante).&lt;/p&gt;

&lt;p&gt;La mitigation du taux d’envoi peut être faite au moyen de simples paramètres pour le serveur mail &lt;a href=&quot;http://steam.io/2013/04/01/postfix-rate-limiting/&quot;&gt;steam.io/2013/04/01/postfix-rate-limiting/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;DKIM et SPF&lt;/h3&gt;

&lt;p&gt;Avoir un enregistrement &lt;a href=&quot;https://fr.wikipedia.org/wiki/Sender_Policy_Framework&quot;&gt;SPF&lt;/a&gt; valide pour le domaine avec lequel vous envoyez vos mails est pratiquement obligatoire : non seulement cela vous permettra de confirmer que le serveur qui envoie vos mails y est bien autorisé, mais cela vous protégera (un peu) contre les usurpations d'adresses mail. Un exemple de SPF serait :&lt;/p&gt;

&lt;pre&gt;
v=spf1 +a +mx -all&lt;/pre&gt;

&lt;p&gt;Si vous voulez un effet positif maximal, préférez un réglage strict (&quot;-all&quot;) au réglage de debug (&quot;?all&quot;), quitte à élargir votre jeu de règles en insérant toutes vos IPs. Par contre, ne mettez pas un TTL trop haut sur les enregistrements SPF, on ne sait jamais.&lt;/p&gt;

&lt;p&gt;Attention également, pour configurer votre domaine, &lt;a href=&quot;https://mxtoolbox.com/problem/spf/spf-record-deprecated&quot;&gt;le champ de type &quot;SPF&quot; est obsolète&lt;/a&gt;, utilisez un champ de type TXT pour vos enregistrements SPF.&lt;/p&gt;

&lt;p&gt;En complément au mécanisme SPF, parce que le SPF n'est pas toujours suffisant pour assurer au serveur de destination que le mail est légitime, vous pouvez mettre en place le &lt;a href=&quot;https://fr.wikipedia.org/wiki/DomainKeys_Identified_Mail&quot;&gt;DKIM&lt;/a&gt; pour tous vos mails sortants. La configuration est plus complexe, mais elle vaut largement le coup pour vous faire sortir de l'ornière d'une réputation trop faible de votre adresse IP dans les premiers mois.&lt;/p&gt;

&lt;p&gt;Le principe du DKIM c'est d'ajouter une signature aux mails, cette signature étant calculée à partir d'une clef privée. La clef publique est quant à elle publiée dans un enregistrement TXT dans le nom de domaine, permettant au serveur recevant le mail de vérifier la validité de la signature, et donc la légitimité du message envoyé à partir du nom de domaine.&lt;/p&gt;

&lt;h3&gt;Smarthosts&lt;/h3&gt;

&lt;p&gt;Si finalement tout ce dont j'ai parlé plus haut n'a pas fonctionné, et que vous vous êtes fait bloquer sur le réseau d'un des grands fournisseurs de boîtes mail (Google, Microsoft, yahoo...), voici votre dernier recours.&lt;/p&gt;

&lt;p&gt;Outre changer d'adresse IP, ce qui pose souvent d'autres problèmes, votre solution c'est d'utiliser un Smarthost. Le Smarthost, c'est tout simplement un serveur mail qui transfère des mails. C'est ce que l'on appelle aussi un relay mail, qui va renvoyer tous vos mails à la place de votre serveur bloqué.&lt;/p&gt;

&lt;p&gt;Dans l'idéal vous devriez avoir plusieurs smarthosts, pour pouvoir répartir la charge de traitement, et les échanger lorsque l'adresse IP de l'un d'eux se fait bloquer. Ainsi vous ne touchez pas à vos MX, et vous avez un réseau permettant de faire sortir des mails indépendemment de votre réseau de réception.&lt;/p&gt;

&lt;p&gt;Le routage vers le Smarthost se règle très simplement dans Postfix, &lt;a href=&quot;http://postfix.traduc.org/index.php/STANDARD_CONFIGURATION_README.html&quot;&gt;en utilisant la directive &lt;strong&gt;transport_maps&lt;/strong&gt; de Postfix&lt;/a&gt; et en configurant un second serveur mail (le smarthost) en mode Relay.&lt;/p&gt;

&lt;p&gt;Attention cependant au moment de créer votre smarthost à ne pas créer de configuration en &quot;Open Relay&quot;, qui permettrait à n'importe qui d'envoyer des mails à travers le smarthost, la sentence sera immédiate lorsque des spammeurs s'en apercevront. Réglez bien votre &lt;strong&gt;mynetwork&lt;/strong&gt;, et &lt;strong&gt;sender_restrictions&lt;/strong&gt; (&lt;a href=&quot;http://www.postfix.org/SMTPD_ACCESS_README.html#global&quot;&gt;par exemple avec Postfix&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;Pour aller plus loin&lt;/h3&gt;

&lt;p&gt;Voici une liste d'outils assez pratique lorsque l'on configure ou que l'on cherche la cause d'un problème de délivrance sur un serveur mail :&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.mail-tester.com/&quot;&gt;Mail Tester&lt;/a&gt; (indispensable pour vérifier votre configuration)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://mxtoolbox.com&quot;&gt;MXToolbox&lt;/a&gt; (le couteau suisse des tests sur les serveurs mails)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://support.google.com/mail/answer/81126?hl=fr&quot;&gt;Quelques conseils de Google&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quelques liens pour (essayer de) se faire retirer de la Blocklist :&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://postmaster.live.com/snds/index.aspx&quot;&gt;Pour se faire dé-bannir par Microsoft&lt;/a&gt; (sans garanties...)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://support.google.com/mail/contact/bulk_send_new?hl=en&amp;amp;rd=1&quot;&gt;Pour se faire dé-bannir par Google&lt;/a&gt; (sans garanties)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://help.yahoo.com/l/us/yahoo/mail/postmaster/bulkv2.html&quot;&gt;Pour se faire débannir par Yahoo&lt;/a&gt; (sans garanties)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://postmaster.aol.com/whitelist-request&quot;&gt;Pour se faire débannir par AOL&lt;/a&gt; (sans garanties)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les programmes de monitoring de réputation :&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://postmaster.google.com&quot;&gt;Google Postmaster Tools&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://sendersupport.olc.protection.outlook.com/pm/services.aspx&quot;&gt;Services de Microsoft&lt;/a&gt;, dont :
	&lt;ul&gt;
		&lt;li&gt;&lt;a href=&quot;https://sendersupport.olc.protection.outlook.com/snds/&quot;&gt;Outlook.com Smart Network Data Services (SNDS)&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;https://sendersupport.olc.protection.outlook.com/snds/JMRP.aspx&quot;&gt;Junk Mail Report Program (JMRP)&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://help.yahoo.com/kb/postmaster/sign-manage-yahoo-complaint-feedback-loop-program-sln3438.html?guce_referrer=aHR0cHM6Ly9oZWxwLnlhaG9vLmNvbS9rYi9wb3N0bWFzdGVyLz9ndWNlX3JlZmVycmVyPWFIUjBjSE02THk5M2QzY3VjWGRoYm5RdVkyOXRMdyZndWNlX3JlZmVycmVyX3NpZz1BUUFBQUxFa3d6SjZia2U1LWgtOHExaWtkd3prNmJYUFRtdV81bDZHcVlWbHBjcVVNNm5PNDRlRDZFN0F0TmtjdjlUTmxJSHE0RWlJTC0tbjgteGRyNjVueXEyZUdnQmFrYlFhWjdKa0hLbzg5cFlZdVRoS19waFRfZG9qWFkxaFV0NnlUakhYMW5sZEdhY0J2ZTZwNzFmaUdvdTkxS2U2YkRXLXJBdzhjSjJhT1FiQiZfZ3VjX2NvbnNlbnRfc2tpcD0xNTk3MTg3Mzk3&amp;amp;guce_referrer_sig=AQAAADXcyLkhrnEIWxifEsj79itT56DobcqMVN0QwUcHJzVyohNuP5BfaUg_mtqZ60g_-s7a_L2QHy7IwWqA9NHXmzTnBFSmAGIBh67-9hFpKz63Kb3ojU1XzLWuHWKK1YQiwWZiJogj1Ij6bYWhR2o8cu8--JvB2O9XEoIv8oh2w2US&amp;amp;_guc_consent_skip=1597187419&quot;&gt;Yahoo Complaint Feedback Loop (CFL)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
        
              </item>
          <item>
        <title>Remarques et opinions à propos du patriotisme économique en informatique</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2015/10/30/Remarques-et-opinions-%C3%A0-propos-du-patriotisme-%C3%A9conomique-en-informatique</link>
        <guid isPermaLink="false">urn:md5:c45b044985d464e1bf72d8b09ad04181</guid>
        <pubDate>Sun, 01 Nov 2015 15:46:00 +0100</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>anssi</category>
                  <category>cnil</category>
                  <category>humeur</category>
                  <category>informatique</category>
                <description>&lt;p&gt;Le patriotisme économique c&amp;#8217;est le fait de préférer faire travailler une entreprise nationale, quitte à payer un peu plus, plutôt qu&amp;#8217;une entreprise étrangère moins chère.&lt;/p&gt;&lt;p&gt;Cela se justifie en termes politiques&amp;#160;: contribuer à l&amp;#8217;économie de son pays&amp;#160;; mais aussi en termes économiques&amp;#160;: le prestataire national comprend certainement mieux votre besoin qu&amp;#8217;une entreprise du bout du monde, et les échanges sont donc facilités. De plus, vous aurez beaucoup plus de facilités à rencontrer votre prestataire (si ça se passe bien), ou à l&amp;#8217;assigner en justice (si ça se passe mal) s&amp;#8217;il opère sur le même territoire que vous.&lt;/p&gt;&lt;p&gt;Mais où est la limite&amp;#160;? Est-ce que votre prestataire peut sous-traiter à une entreprise étrangère sans trahir votre confiance&amp;#160;? Comment le mode de sous-traitance choisi impacte le projet&amp;#160;? Et surtout, dans le contexte du service en informatique, quelles sont les implications politiques et juridiques vis à vis de l&amp;#8217;emplacement de stockage et de traitement des données&amp;#160;?&lt;/p&gt;&lt;p&gt;De nombreux exemples de sous-traitance abusive ont déjà fait polémique &lt;a href=&quot;http://www.lemonde.fr/politique/article/2015/08/27/le-ps-embarrasse-par-l-emploi-de-travailleurs-detaches-roumains-pour-l-universite-d-ete-de-la-rochelle_4738564_823448.html&quot;&gt;[1]&lt;/a&gt; &lt;a href=&quot;http://france3-regions.francetvinfo.fr/provence-alpes/alpes-de-haute-provence/iter-la-cgt-denonce-l-esclavage-moderne-des-travailleurs-low-cost-648743.html&quot;&gt;[2]&lt;/a&gt; &lt;a href=&quot;http://www.lemondeinformatique.fr/actualites/lire-un-developpeur-salarie-sous-traitait-son-travail-en-chine-52107.html&quot;&gt;[3]&lt;/a&gt;, mais remettons les choses à plat.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&amp;#160;: ce billet est une opinion personnelle concernant un sujet auquel j&amp;#8217;ai été confronté en tant que prestataire, il ne reflète que ma propre opinion.&lt;/p&gt;          &lt;h3&gt;Une économie mondialisée&lt;/h3&gt;&lt;p&gt;Lorsque l&amp;#8217;on parle de prestataire national, de quoi parle-t-on&amp;#160;? S&amp;#8217;agit-il d&amp;#8217;une entreprise côtée en bourse dont le siège social (et donc en théorie les impôts) se trouve dans votre pays&amp;#160;? Ou cela peut être une entreprise étrangère disposant d&amp;#8217;un bureau et d&amp;#8217;employés dans votre pays&amp;#160;?&lt;/p&gt;&lt;p&gt;Et quand bien même l&amp;#8217;entreprise serait nationale, avec aucun bureaux à l&amp;#8217;étranger, est-ce que cette entreprise externalise sa comptabilité&amp;#160;? Est-ce que son mécanisme de recrutement passe par une agence&amp;#160;? Achète-t-il des produits sur son propre territoire&amp;#160;? D&amp;#8217;une manière ou d&amp;#8217;une autre, il n&amp;#8217;y a aucun moyen d&amp;#8217;être certain qu&amp;#8217;une partie du chiffre d&amp;#8217;affaire que vous allez générer en tant que client ne va pas partir à l&amp;#8217;étranger.&lt;/p&gt;&lt;p&gt;La limite se placera donc ici sur l&amp;#8217;éthique et la responsabilité du prestataire&amp;#160;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A-t-il montré son implication dans la vie politique du pays (en interpellant les hommes politiques sur un sujet lié à son activité)&amp;#160;?&lt;/li&gt;&lt;li&gt;Quel est le pourcentage (estimé) de son activité à l&amp;#8217;étranger, et quel est son historique&amp;#160;?&lt;/li&gt;&lt;li&gt;L&amp;#8217;entreprise est-elle dans une perspective de croissance ou de réduction de son activité dans le pays&amp;#160;?&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Le statut du salarié&lt;/h3&gt;&lt;p&gt;Le prestataire peut être une entreprise ou un travailleur indépendant. Dans le cas d&amp;#8217;un indépendant, il est plutôt évident si celui-ci travaille sur le territoire ou pas. Mais dans le cas d&amp;#8217;une enterprise&amp;#160;? Emploi-t-elle un commercial chez vous pour ensuite faire effectuer le travail à l&amp;#8217;étranger&amp;#160;?&lt;/p&gt;&lt;p&gt;Il existe trois moyens de faire travailler des salariés internationaux&amp;#160;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;L&amp;#8217;entreprise nationale sous-traite à une entreprise étrangère ou un travailleur indépendant à l&amp;#8217;étranger. Il s&amp;#8217;agit d&amp;#8217;un contrat de sous-traitance classique.&lt;/li&gt;&lt;li&gt;Le salarié étranger est recruté par l&amp;#8217;entreprise nationale et vient travailler dans l&amp;#8217;entreprise sur le territoire national. Dans ce cas, il est considéré comme un salarié national, il est soumis aux mêmes règles, cotisations sociales, et taxes (mais pas nécessairement le même salaire), et sa venue nécessite l&amp;#8217;obtention d&amp;#8217;un permis de travail.&lt;/li&gt;&lt;li&gt;L&amp;#8217;entreprise emploie des travailleurs détachés&amp;#160;: ce sont des salariés d&amp;#8217;un pays étranger qui viennent effectuer le travail dans un pays d&amp;#8217;accueil le temps d&amp;#8217;une mission, en conservant le statut juridique et social (et les salaires) de leur pays d&amp;#8217;origine. Ce type de travail est très peu fréquent en informatique car il signifie des défraiements supplémentaires et se justifie pour les entreprises ayant besoin d&amp;#8217;une présence physique de l&amp;#8217;employé, comme le BTP ou l&amp;#8217;événementiel.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Alors comment s&amp;#8217;assurer du patriotisme de l&amp;#8217;entreprise au niveau de la gestion de son salariat&amp;#160;?&lt;/p&gt;&lt;ul&gt;&lt;li&gt;L&amp;#8217;entreprise a une adresse dans votre pays&amp;#160;?&lt;/li&gt;&lt;li&gt;Vous pouvez vérifier que ses ingénieurs travaillent bien dans ces bureaux&amp;#160;? Vous leur avez rendu visite pour signer le contrat&amp;#160;?&lt;/li&gt;&lt;li&gt;Le travail ne nécessite pas de pièces ou de savoir-faire particulier venant de l&amp;#8217;étranger&amp;#160;?&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;«&amp;#160;Patriotisme logiciel&amp;#160;»&amp;#160;?&lt;/h3&gt;&lt;p&gt;Le fait que les salariés soient des citoyens de votre pays, c&amp;#8217;est bien. Qu&amp;#8217;ils utilisent des services et des produits nationaux, c&amp;#8217;est mieux. Mais sans aller jusqu&amp;#8217;à ne pas utiliser les logiciels des géants américains (Cisco, IBM, Microsoft, Apple, etc), est-ce que le logiciel que vous avez commandé a bien été conçu et développé sur le territoire national&amp;#160;?&lt;/p&gt;&lt;p&gt;La plupart des logiciels d&amp;#8217;entreprise (Microsoft Office, SAP, Oracle&amp;#8230;) sont des logiciels existants pour lesquels le prestataire a acquis une licence, et dont il se charge de la personnalisation, la mise en service, et la maintenance. Le problème de ces logiciels c&amp;#8217;est qu&amp;#8217;ils ont une facheuse tendance à vous cacher des choses&amp;#160;: ce sont souvent des boîtes noires dans lesquels le prestataire national n&amp;#8217;a que peu de contrôle et peu de marge de manoeuvre. Vous n&amp;#8217;aimez pas quand votre prestataire vous dit qu&amp;#8217;il n&amp;#8217;y peut rien faire et qu&amp;#8217;il faut voir avec l&amp;#8217;éditeur&amp;#160;? Alors ne transférez pas votre confiance à l&amp;#8217;éditeur.&lt;/p&gt;&lt;p&gt;Au-delà du risque lié à la méconnaissance du fonctionnement du logiciel ou de la fragilisation délibérée du logiciel par l&amp;#8217;éditeur pour pouvoir vendre ses patchs et correctifs, ou encore de la dépendance à l&amp;#8217;éditeur du logiciel par l&amp;#8217;utilisation de formats et protocoles de données propriétaires, le risque d&amp;#8217;espionnage industriel est bien réel. Feriez-vous confiance à un logiciel chinois pour équiper vos centrales nucléaires&amp;#160;? &lt;s&gt;À un logiciel coréen pour vos smartphones&lt;/s&gt;&amp;nbsp;(ah non ça c&amp;#8217;est déjà le cas). Acceptez-vous que&amp;#8217;une entreprise d&amp;#8217;amérique du nord ai un accès privilégié au back-office de votre logiciel&amp;#160;?&lt;/p&gt;&lt;p&gt;Pour limiter l&amp;#8217;impact d&amp;#8217;une société externe sur votre logiciel, privilégiez les logiciels libres ou les solutions à base de logiciels libres. Les logiciels libres et ouverts offrent de meilleurs garanties pour votre entreprise parce que justement ils sont ouverts&amp;#160;: un audit interne et externe du logiciel est plus facile, il n&amp;#8217;est pas contrôlé par une seule entreprise, et il offre souvent plus de marge de manoeuvre au prestataire (donc moins de temps facturable pour arriver à faire quelque chose). De plus, la documentation souvent abondante des projets libres et l&amp;#8217;aspect ouvert du programme de base (pas de &amp;#8220;&lt;a href=&quot;https://fr.wikipedia.org/wiki/Pas_de_balle_en_argent&quot;&gt;balles d&amp;#8217;argent&lt;/a&gt;&amp;#8221;) vous permettra de changer plus facilement de prestataire si besoin. Enfin, l&amp;#8217;utilisation d&amp;#8217;un logiciel libre n&amp;#8217;implique pas forcément une obligation de redistribuer votre logiciel gratuitement ou d&amp;#8217;en divulguer les secrets de fabrication (en particulier s&amp;#8217;il s&amp;#8217;agit d&amp;#8217;un logiciel interne qui n&amp;#8217;est pas distribué aux clients).&lt;/p&gt;&lt;h3&gt;Traitements humains et traitements informatiques&lt;/h3&gt;&lt;p&gt;D&amp;#8217;accord les opérateurs sont nationaux, les logiciels sont nationaux, mais où et comment sont traitées les données&amp;#160;? En informatique, le travail humain ne représente qu&amp;#8217;une petite partie du travail qui va être effectué sur les données manipulées par le logiciel. C&amp;#8217;est justement le logiciel qui va effectuer les transformations sur vos données, et donc le travail.&lt;/p&gt;&lt;p&gt;L&amp;#8217;emplacement de stockage et de traitement des données est donc important. Le logiciel pourrait être installé dans les locaux du prestataire, ou alors sur un serveur externe dans un territoire étranger. De même, les données pourraient être stockées sur le territoire national ou dans un centre de données à l&amp;#8217;étranger. À l&amp;#8217;échelle d&amp;#8217;internet, ces détails techniques sont invisibles, et ils font déjà la fortune des fournisseurs de &amp;#8220;cloud&amp;#8221;.&lt;/p&gt;&lt;p&gt;Mais ces décentralisations sont parfois nécessaires, tout simplement parce que le prestataire n&amp;#8217;a pas toujours l&amp;#8217;infrastructure ou l&amp;#8217;expertise lui permettant de fournir un stockage fiable et sécurisé des données. Une couche de chiffrement réalisé par le logiciel au moment de la transmission et du stockage des données permet de limiter les risques liés à une interception ou à un vol physique des données (saisie du disque dur, etc), et peut rendre la chose acceptable.&lt;/p&gt;&lt;h3&gt;Des hommes et des lois&lt;/h3&gt;&lt;p&gt;Le stockage et le traitement dans un pays étranger a également un autre impact, politique cette fois-ci.&lt;/p&gt;&lt;p&gt;Selon le gouvernement en place et les mesures prises pour protéger la vie privée ou se prémunir du terrorisme (deux visions souvent antagonistes), il peut exister des lois obligeant le propriétaire du centre de données à fournir des &amp;#8220;tuyaux&amp;#8221; vers les &amp;#8220;grandes oreilles&amp;#8221; du gouvernement. De même, il peut exister une obligation de rétention des fichiers logs et meta données même après résilisation du contrat.&lt;/p&gt;&lt;p&gt;Il peut aussi exister une restriction sur le type de contenus stockés (contenus à caractère politique ou pornographique), et une obligation d&amp;#8217;accepter un contrôle des autorités sans décision de justice. Il pourrait aussi être demandé de fournir le mot de passe de déchiffrement pour accéder à ces contenus, et en cas de refus une saisie des disques durs pourrait être réalisée.&lt;/p&gt;&lt;p&gt;Cela représente donc aussi un risque supplémentaire vis à vis de l&amp;#8217;espionnage industriel &lt;a href=&quot;http://www.lemonde.fr/international/article/2010/12/04/wikileaks-l-espionnage-de-google-par-pekin-serait-100-politique_1448873_3210.html&quot;&gt;[4]&lt;/a&gt;, du blocage et/ou du contrôle des infrastructures &lt;a href=&quot;https://fr.wikipedia.org/wiki/Censure_d'Internet_en_R%C3%A9publique_populaire_de_Chine&quot;&gt;[5]&lt;/a&gt;, ou de la perte des données (saisie abusive du disque dur).&lt;/p&gt;&lt;h3&gt;Qu&amp;#8217;en disent les institutions publiques&amp;#160;?&lt;/h3&gt;&lt;p&gt;Dans le doute, il est bon de se renseigner auprès des institutions gouvernementales, pour éviter de prendre des décisions sous le coup de l&amp;#8217;émotion. La CNIL française a par exemple émis &lt;a href=&quot;http://www.cnil.fr/fileadmin/images/la_cnil/actualite/Recommandations_pour_les_entreprises_qui_envisagent_de_souscrire_a_des_services_de_Cloud.pdf&quot;&gt;un ensemble de recommandations&lt;/a&gt; pour les entreprises souhaitant utiliser des services &amp;#8220;cloud&amp;#8221; (stockage ou traitement externalisé). On peut le synthétiser par&amp;#160;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Identifier quelles sont les données à stocker dans le cloud (sensibles ou non).&lt;/li&gt;&lt;li&gt;Définir ses exigences de sécurité technique et juridique (contraintes légales et techniques à la mise en oeuvre).&lt;/li&gt;&lt;li&gt;Conduire une analyse de risques (perte de contrôle, dépendence technologique, faille dans la sécurité des données, réquisitions judiciaires&amp;#8230;).&lt;/li&gt;&lt;li&gt;Bien choisir l&amp;#8217;offre correspondant à son besoin (cloud public vs cloud privé).&lt;/li&gt;&lt;li&gt;Bien choisir son prestataire (celui qui offre les garanties suffisantes), avec une liste des éléments devant figurer au contrat.&lt;/li&gt;&lt;li&gt;Former ses employés à ce nouveau mode de gestion des données.&lt;/li&gt;&lt;li&gt;Faire de la veille et de l&amp;#8217;audit sur le service fourni.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;De même, l&amp;#8217;ANSSI (française aussi) a émis &lt;a href=&quot;http://www.ssi.gouv.fr/uploads/IMG/pdf/cloud_referentiel_exigences_anssi.pdf&quot;&gt;un référentiel de ses exigences&lt;/a&gt; concernant la mise en oeuvre d&amp;#8217;un service &amp;#8220;cloud&amp;#8221;.&lt;/p&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;&lt;p&gt;En conclusion, je pense qu&amp;#8217;il ne faut pas vouloir être plus royaliste que le roi.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Oui, en informatique de nombreux services sont décentralisés, et il est difficile de contrôler qui aura accès à vos données au cours de leur saisie, leur traitement, et leur stockage.&lt;/li&gt;&lt;li&gt;Si cela vous pose problème, vous pouvez signer une charte ou une clause de confidentialité avec le prestataire, et chiffrer extensivement vos données pour les sécuriser.&lt;/li&gt;&lt;li&gt;Dans le cas de risque d&amp;#8217;espionnage industriel, n&amp;#8217;oubliez pas de &lt;a href=&quot;http://www.ssi.gouv.fr/entreprise/precautions-elementaires/5-reflexes-a-avoir-lors-de-la-reception-dun-courriel/&quot;&gt;former vos équipes&lt;/a&gt;, ça serait dommage de barricader la porte et de laisser la fenêtre ouverte.&lt;/li&gt;&lt;li&gt;Si les informations sont vitales et confidentielles, utilisez les mécanismes de double authentification et de cloisonnement des responsabilités (&lt;a href=&quot;http://www.ssi.gouv.fr/administration/bonnes-pratiques/&quot;&gt;voir les recommandations de l&amp;#8217;ANSSI&lt;/a&gt;), ou demandez à votre prestataire de se faire certifier.&lt;/li&gt;&lt;li&gt;Et si vous travaillez dans un domaine relevant du secret défense&amp;#8230; Qu&amp;#8217;est-ce que vous espérez apprendre ici&amp;#160;?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Mais,&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Oui, les prestataires nationaux travaillant avec des logiciels libres offrent de meilleures garanties de sécurité, condentialité, et pérénnité des données.&lt;/li&gt;&lt;li&gt;Oui, les prestataires nationaux comprennent mieux votre besoin, ils sont meilleurs en support et en assistance client, ils sont meilleurs pour vous renseigner sur les conséquences juridiques liés à votre application (rétention de données, rétention de fichiers log, obligation de chiffrement, etc).&lt;/li&gt;&lt;li&gt;Les données internes sensibles devraient rester en interne&amp;#160;: stockées et traitées sur un serveur situé dans vos locaux derrière un pare-feu, avec votre politique de sécurité, d&amp;#8217;alarmes, et de contrôle physique des accès. N&amp;#8217;oubliez pas de donner un badge d&amp;#8217;accès au prestataire si besoin, et de réaliser des audits.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;</description>
        
              </item>
          <item>
        <title>De la difficulté d'écrire un logiciel</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2014/07/19/De-la-difficult%C3%A9-d-%C3%A9crire-un-logiciel</link>
        <guid isPermaLink="false">urn:md5:c0d5091f6b3b52be8435a1ebd58e1123</guid>
        <pubDate>Sat, 19 Jul 2014 12:31:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>conception</category>
                  <category>informatique</category>
                <description>&lt;div style=&quot;float: right; margin: 0 0 1em 1em; border: solid thin #000; padding: 0.5em; text-align: center;&quot;&gt;&lt;a title=&quot;tumblr_inline_moa8ewcU231rmvx68.jpg&quot; href=&quot;https://uname.pingveno.net/blog/public/posts_thumb/tumblr_inline_moa8ewcU231rmvx68.jpg&quot;&gt;&lt;img alt=&quot;Oui, oui, c'est joli... Mais sinon vous avez un vrai métier à côté ?&quot; src=&quot;https://uname.pingveno.net/blog/public/posts_thumb/tumblr_inline_moa8ewcU231rmvx68.jpg&quot; height=&quot;300&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p&gt;Source de l&amp;#8217;image&amp;#160;: &lt;a href=&quot;http://monmacon.tumblr.com/&quot;&gt;monmacon.tumblr.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Écrire un logiciel, construire une voiture, dessiner un pont, construire une maison, tracer une route, finalement ces métier relèvent de la compétence d&amp;#8217;un ingénieur. Alors pourquoi en informatique on arrive à des retards records, qui vont jusqu&amp;#8217;à l&amp;#8217;abandon pur et simple du projet par le client, dans certains cas&amp;#160;?&lt;/p&gt;
&lt;p&gt;Parce que justement, ingénieur &lt;strong&gt;en informatique&lt;/strong&gt;, c&amp;#8217;est pas un métier comme les autres. Explications.&lt;/p&gt;
&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Nota Bene&lt;/strong&gt;&lt;/ins&gt;&amp;#160;: dans cet article, les allégories et paraboles douteuses seront mises &lt;em&gt;en italique&lt;/em&gt;.&lt;/p&gt;          &lt;h3&gt;Le travail de l&amp;#8217;architecte&lt;/h3&gt;
&lt;p&gt;Le fond du problème c&amp;#8217;est qu&amp;#8217;écrire un logiciel est un exercice aussi compliqué que rédiger une démonstration mathématique. C&amp;#8217;est vrai pour tout logiciel, qu&amp;#8217;il s&amp;#8217;agisse d&amp;#8217;une interface Web avec des boutons colorés de partout, ou d&amp;#8217;un contrôleur robotique avec interpolation de mouvements.&lt;/p&gt;
&lt;p&gt;Écrire un logiciel logiciel c&amp;#8217;est d&amp;#8217;abord formaliser un problème, le décrire totalement, en apprivoiser tous les contours pour en voir la forme. Quand on a l&amp;#8217;aspect général, on peut commencer à construire la structure qui servira de base pour tisser le reste du programme. La phase de compréhension du problème est cruciale&amp;#160;: mieux elle est faite, plus les choses seront faciles. Il ne doit pas rester un seul point de doute, au risque de remettre en cause la structure. &lt;em&gt;C&amp;#8217;est très difficile de changer une table basse en armoire, &lt;strong&gt;pourtant à la base c&amp;#8217;est la même chose&amp;#160;: c&amp;#8217;est des planches de bois, non&amp;#160;?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Une maison &amp;#8220;vivante&amp;#8221;&lt;/h3&gt;
&lt;p&gt;La base du logiciel, c&amp;#8217;est le code source. Du moins, pour ce qui est de le faire exécuter sur un ordinateur. Mais un logiciel c&amp;#8217;est pas juste du code, c&amp;#8217;est surtout des idées, des principes, des mécanismes, des flux, des signaux, des &amp;#8220;choses qui bougent&amp;#8221; à l&amp;#8217;intérieur au moment de l&amp;#8217;exécution. Le code n&amp;#8217;est que le support, la matrice sur laquelle vont naviguer les informations. Le travail de l&amp;#8217;informaticien c&amp;#8217;est de réaliser cette matrice, mais surtout de la rendre utilisable et compréhensible pour d&amp;#8217;autres. La question qu&amp;#8217;on se pose quand on &lt;strong&gt;écrit&lt;/strong&gt; un logiciel c&amp;#8217;est &amp;#8220;&lt;strong&gt;comment&lt;/strong&gt;&amp;#8221;, celle quand on &lt;strong&gt;lit&lt;/strong&gt; un logiciel c&amp;#8217;est &amp;#8220;&lt;strong&gt;pourquoi&lt;/strong&gt;&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Reprendre un logiciel existant pour lequel il n&amp;#8217;y a pas de documentation, c&amp;#8217;est&lt;em&gt; arriver dans une cathédrale, et essayer de retrouver les murs porteurs sans l&amp;#8217;aide de plans. Ensuite il faut arriver à rajouter un étage sans que la toiture s&amp;#8217;effondre, tout ça bien sûr en respectant scrupuleusement la forme originale du bâtiment, les matériaux d&amp;#8217;origine, et les techniques précédemment utilisées.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Une maison modulable&lt;/h3&gt;
&lt;div style=&quot;float: right; margin: 0 0 1em 1em; border: solid thin #000; padding: 0.5em; text-align: center;&quot;&gt;
&lt;a href=&quot;http://uname.pingveno.net/blog/public/posts_thumb/tumblr_inline_mnm2hrMIJl1rmvx68.jpg&quot;&gt;&lt;img alt=&quot;La maison est super, mais il faudrait décaler la fenêtre de 30cm à gauche. - Je dois refaire tout le mur, donc. - Non, gardez le mur, bougez juste la fenêtre. Je m'affole toujours pour rien.&quot; src=&quot;https://uname.pingveno.net/blog/public/posts_thumb/tumblr_inline_mnm2hrMIJl1rmvx68.jpg&quot; height=&quot;300&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;
&lt;p&gt;Source de l&amp;#8217;image&amp;#160;: &lt;a href=&quot;http://monmacon.tumblr.com/&quot;&gt;monmacon.tumblr.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Une autre chose que les gens ne comprennent pas vis à vis des logiciels, c&amp;#8217;est que l&amp;#8217;on ne crée pas un logiciel comme on crée un objet. Un objet a nécessairement une utilité et un périmètre d&amp;#8217;utilisation fixe et définitif lorsqu&amp;#8217;il est terminé. &lt;em&gt;Une salière pourra devenir une sucrière, mais globalement on ne s&amp;#8217;en servira pas d&amp;#8217;arrosoir. &lt;strong&gt;Pourtant dans le fond c&amp;#8217;est pareil, c&amp;#8217;est un réservoir avec grille trouée posée dessus, non&amp;#160;?&lt;/strong&gt;&lt;/em&gt; Un logiciel par contre devra évoluer, s&amp;#8217;adapter aux autres logiciels qui changent autour de lui, ou aux besoins des utilisateurs qui changent avec le temps.&lt;/p&gt;
&lt;p&gt;Cela explique que les logiciels sont composés à 30% de code pour répondre au besoin actuel, et à 70% de code prévu pour les besoins futurs. Tous les outils de développement, les mécanismes de création d&amp;#8217;interfaces, les APIs, toutes ces &amp;#8220;couches&amp;#8221; logicielles contiennent environ 80% de code qui ne sera pas utilisé, mais qui est là pour prévoir l&amp;#8217;utilisation que l&amp;#8217;on pourrait en faire.&lt;/p&gt;
&lt;p&gt;Oui, avec certains outils logiciels (frameworks), on peut écrire très rapidement un logiciel qui répond à un besoin simple et précis, tout est pratiquement déjà fait. Mais s&amp;#8217;il est construit trop vite, il sera alors difficile de de faire évoluer, le réparer, assurer sa maintenance, ou même arriver à le réécrire entièrement en conservant les données qui y ont déjà été saisies. C&amp;#8217;est pour ça que les programmes complexes &amp;#8220;rament&amp;#8221;, ils sont construits avec des couches et des couches de fragments qui ont été rajoutés à parti d&amp;#8217;une idée simple, sans avoir eu la réflexion global sur le &lt;strong&gt;pourquoi&lt;/strong&gt; et le &lt;strong&gt;comment&lt;/strong&gt;&lt;em&gt;.&lt;/em&gt; N&amp;#8217;oubliez pas que les logiciels que vous achetez sont souvent vendus &amp;#8220;en l&amp;#8217;état&amp;#8221;.&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;De leur côté, les clients veulent juste &amp;#8220;que ça marche&amp;#8221;,&lt;em&gt; mais un bâtiment que l&amp;#8217;on voit terminé dès la première phase de conception, c&amp;#8217;est une maquette, on ne peut pas s&amp;#8217;en servir comme habitation. Pourquoi quand il s&amp;#8217;agit d&amp;#8217;informatique les clients ont pris l&amp;#8217;habitude d&amp;#8217;habiter dans des maisons en cartons&amp;#160;? Pourquoi crier quand la maison s&amp;#8217;effondre à la première pluie, plutôt que de se demander pourquoi on n&amp;#8217;a pas écouté l&amp;#8217;architecte qui vous a dit qu&amp;#8217;habiter dans du carton ça allait vous poser des problèmes&amp;#160;?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;C&amp;#8217;est vrai il existe le phénomène inverse. &lt;em&gt;Certains clients habitent dans des maisons en béton armé, fruit de plusieurs d&amp;#8217;années d&amp;#8217;études et de construction, et ne comprennent pas pourquoi il est si difficile d&amp;#8217;ajouter une nouvelle pièce, surtout quand leur voisin qui a une maison en bois a terminé ses travaux d&amp;#8217;extension en un temps record.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Quand t&amp;#8217;as pas de Ferrari, t&amp;#8217;as une Logan&lt;/h3&gt;
&lt;p&gt;Une autre chose que les clients ne comprennent pas, c&amp;#8217;est que créer un système logiciel entier à partir de rien est un millier de fois plus compliqué que d&amp;#8217;assembler des briques existantes. Le problème vient alors de la connaissance des briques, qui fait souvent défaut, et qui ramène au cas précédent&amp;#160;: on fait trop vite avec des outils que l&amp;#8217;on ne maîtrise pas.&lt;/p&gt;
&lt;p&gt;Dans la majorité des cas, les informaticiens qui sortent des écoles ont surtout appris à écrire du code. À partir de ce constat, il serait illusoire de vouloir leur faire réécrire des concepts qui fonctionnent déjà très bien dans des briques de base, au risque de leur faire inventer la roue carrée.&lt;/p&gt;
&lt;p&gt;Si vous avez les moyen de vous payer des ingénieurs-enseignants-chercheurs en informatique, alors oui vous pouvez construire votre Ferrari logicielle sur mesure. Sinon, embauchez simplement des ingénieurs en informatique, ils vous feront une &lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.wikipedia.org/wiki/Dacia_Logan#R.C3.A9utilisation_des_pi.C3.A8ces_de_la_gamme_Renault&quot;&gt;Logan logicielle&lt;/a&gt;, en utilisant les outils inventés par les ingénieurs-enseignant-chercheurs (moteur, autoradio, carrosserie). Utilisez des solutions génériques, ne demandez pas à vos ingénieurs d&amp;#8217;inventer le moteur à eau.&lt;/p&gt;
&lt;h3&gt;Vous travaillez sur et avec de l&amp;#8217;humain&lt;/h3&gt;
&lt;div style=&quot;float: right; margin: 0 0 1em 1em; border: solid thin #000; padding: 0.5em; text-align: center;&quot;&gt;
&lt;a title=&quot;&quot; href=&quot;https://uname.pingveno.net/blog/public/posts_thumb/tumblr_inline_mntjzbQyNq1rmvx68.jpg&quot;&gt;&lt;img alt=&quot;Bof, la maison ne me plaît pas trop, arrêtez les travaux là. - Je vous facture ce que j'ai déjà fait ? - Voyons, je ne vais tout de même pas payer un travail inachevé ? - Ma cupidité me perdra.&quot; src=&quot;https://uname.pingveno.net/blog/public/posts_thumb/tumblr_inline_mntjzbQyNq1rmvx68.jpg&quot; height=&quot;300&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;
&lt;p&gt;Source de l&amp;#8217;image&amp;#160;: &lt;a href=&quot;http://monmacon.tumblr.com/&quot;&gt;monmacon.tumblr.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
N&amp;#8217;oubliez jamais que derrière votre jolie interface que vous avez imaginée vous-même il y a des êtres humains. Les êtres humains sont par nature faillibles, ils sont sensibles au stress, ainsi qu&amp;#8217;à la fatigue.&lt;/p&gt;
&lt;p&gt;Contrairement à un travail à la chaîne ou un travail de manoeuvre, la conception logicielle requiert une attention continue pendant plusieurs heures, une baisse de l&amp;#8217;attention produira un bug.&lt;/p&gt;
&lt;p&gt;Lorsque l&amp;#8217;on compresse les coûts de développement, on n&amp;#8217;a que deux variables d&amp;#8217;ajustement&amp;#160;: le salaire de l&amp;#8217;ingénieur, et son temps de travail. À partir de ce concept est né l&amp;#8217;unité &lt;strong&gt;jour-homme&lt;/strong&gt;, on donne un prix fixe pour une journée de travail, et le reste c&amp;#8217;est du temps nécessaire à la tâche qui est facturé en multipliant le coût journalier par le nombre de personnes qui travaillent, et par le nombre de jours travaillé.&lt;/p&gt;
&lt;p&gt;Mais de la même manière qu&amp;#8217;&lt;em&gt;on ne peut pas avoir un enfant en un mois, même en demandant à neuf femmes de regrouper leurs efforts&lt;/em&gt;, les coûts de travail ne sont pas linéaires lorsqu&amp;#8217;on travaille en groupe&amp;#160;: deux personnes ne vont pas deux fois plus vite, au mieux elles vont 1,8 fois plus vite. Vendre en jours-homme est une erreur encore lus flagrante en informatique, si on considère que le coût nécessaire pour assembler le travail réalisé par deux personnes sur un même logiciel est parfois supérieur au coût dépensé par les deux personnes.&lt;/p&gt;
&lt;p&gt;Vendre au nombre de jours un logiciel est une erreur&amp;#160;: &lt;strong&gt;en informatique on peut garantir les délais, on peut garantir les fonctionnalités, mais on ne peut pas garantir les deux&lt;/strong&gt;. Toute tentative de mettre un ensemble de fonctionnalités facturées à l&amp;#8217;unité dans un grand budget de plusieurs jour échouera avec une probabilité de retard proportionnel au temps donné pour le projet. Pour peu que le client pressé veuille une livraison partielle et décide que &amp;#8220;telle fonctionnalité n&amp;#8217;est pas prioritaire, faites moi celle-ci à la place&amp;#8221;&amp;#160;: le client vient de faire tomber le château de cartes, il faut réécrire une partie du logiciel. Si on ne réécrit pas tout (on ne le fait jamais), on fragilise la cohérence de l&amp;#8217;ensemble. Si on avait prévu que le client change d&amp;#8217;avis, alors on a dépensé du budget de développement potentiellement en pure perte. Donc on facture plus cher, au cas où.&lt;/p&gt;
&lt;h3&gt;Chaque logiciel est unique&lt;/h3&gt;
&lt;p&gt;Un logiciel est une création originale. À partir de là, deux logiciels ne se ressembleront pas, même si tous les efforts ont été fait pour que cela soit le cas. S&amp;#8217;ils étaient strictement identiques, alors il n&amp;#8217;y en aurait qu&amp;#8217;un seul.&lt;/p&gt;
&lt;p&gt;Un logiciel, contrairement à un pont ou une voiture, c&amp;#8217;est différent non pas seulement dans ce que l&amp;#8217;on voit mais aussi dans toute la technique qui est derrière, et qui est unique pour chaque logiciel. C&amp;#8217;est comme si vous demandiez une création originale, &lt;em&gt;du moteur jusqu&amp;#8217;aux jantes&lt;/em&gt;, et donc vous allez avoir besoin d&amp;#8217;apprendre à l&amp;#8217;utiliser.&lt;/p&gt;
&lt;p&gt;Peut importe quel type de logiciel vous demandez, peut importe que les interfaces aient été décrites à l&amp;#8217;avance, peut importe l&amp;#8217;anticipation que vous en faites&amp;#160;: vous allez avoir besoin d&amp;#8217;apprendre à l&amp;#8217;utiliser. C&amp;#8217;est à la fois stressant pour les utilisateurs à qui on n&amp;#8217;a pas donné le temps de monter en compétences sur le logiciel, et les concepteurs du logiciel à qui on demande après la livraison de &amp;#8220;refaire comme le logiciel faisait avant&amp;#8221;, en bref ré-implémenter une fonction obsolète dans un logiciel neuf.&lt;/p&gt;
&lt;p&gt;Les coûts liés à la conception d&amp;#8217;un nouveau logiciel sont souvent sous-évalués car ils ne prennent justement pas en compte les temps de formation, et de rédaction des documentation, pourtant indispensables pour utiliser efficacement le logiciel.&lt;/p&gt;
&lt;h3&gt;Conclusions&lt;/h3&gt;
&lt;div style=&quot;float: right; margin: 0 0 1em 1em; border: solid thin #000; padding: 0.5em; text-align: center;&quot;&gt;&lt;a title=&quot;tumblr_inline_n6ymq4pWAv1rmvx68.jpg&quot; href=&quot;https://uname.pingveno.net/blog/public/posts_thumb/tumblr_inline_n6ymq4pWAv1rmvx68.jpg&quot;&gt;&lt;img alt=&quot;-Ouille... -Encore à se plaindre celui là ?&quot; src=&quot;https://uname.pingveno.net/blog/public/posts_thumb/tumblr_inline_n6ymq4pWAv1rmvx68.jpg&quot; height=&quot;300&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p&gt;Source de l&amp;#8217;image&amp;#160;: &lt;a href=&quot;http://monmacon.tumblr.com/&quot;&gt;monmacon.tumblr.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;L&amp;#8217;informatique est aussi difficile que l’ingénierie et difficile. Avec un handicap supplémentaire sur le fait que les méthodes et les processus de fabrication des logiciels ne sont pas encore éprouvés au niveau des méthodes de l’ingénierie civile.&lt;/p&gt;
&lt;p&gt;La majorité des clients et des utilisateurs ont une vision tellement déformée de l&amp;#8217;informatique qu&amp;#8217;ils font de mauvais choix, ou exigent des choses impossibles.&lt;/p&gt;
&lt;p&gt;S&amp;#8217;il est difficile de construire un logiciel, il est difficile aussi pour le client de savoir à quoi s&amp;#8217;attendre au milieu des réponses à son appel d&amp;#8217;offre. Le fossé entre les techniciens et les clients ne pourra se faire que par une sensibilisation du client aux impératifs du logiciel. Le mécanisme MOA/MOE peut dans certains cas aider à améliorer cet état de fait, à condition que les différents interlocuteurs s&amp;#8217;écoutent, respectent leurs décisions respectives, et soient composées de gens compétents.&lt;/p&gt;
&lt;p&gt;Dans un logiciel, on ne paie pas juste le type qui va écrire des lignes de code au kilomètre, on paie aussi (et surtout) pour ceux qui vont définir ce que va être le logiciel, qui vont réaliser l&amp;#8217;intégration du logiciel, les tests de qualité, la maintenance, la formation des utilisateurs. Un logiciel est fondamentalement plus un service qu&amp;#8217;un produit.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Profil et résultats de recherche : réflexion sur la possibilité de reverse-engineering du PageRank dans le contexte du marketing ciblé</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2014/01/12/Profil-et-r%C3%A9sultats-de-recherche-%3A-r%C3%A9flexion-sur-la-possibilit%C3%A9-de-reverse-engineering-du-PageRank-dans-le-contexte-du-marketing-cibl%C3%A9</link>
        <guid isPermaLink="false">urn:md5:0267901b2c3b5281356e8ddab196639d</guid>
        <pubDate>Sun, 12 Jan 2014 23:32:00 +0100</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>facebook</category>
                  <category>google</category>
                  <category>marketing</category>
                  <category>profil</category>
                  <category>tracking</category>
                <description>&lt;p&gt;Si vous avez lu &lt;a href=&quot;https://uname.pingveno.net/blog/index.php/post/2013/12/14/Ce-que-vous-ne-savez-pas-sur-les-mesures-d-audience-sur-Internet&quot;&gt;mon billet précédent&lt;/a&gt;, vous savez que la mesure d&amp;#8217;audience utilise les cookies.&lt;/p&gt;
&lt;p&gt;Il y a quelques jours, dans une conversation par mail à propos du référencement, je me suis souvenu de l&amp;#8217;effet du «&amp;#160;&lt;a hreflang=&quot;en&quot; href=&quot;http://en.wikipedia.org/wiki/Filter_bubble&quot;&gt;filter bubble&lt;/a&gt;&amp;#160;» (&lt;a hreflang=&quot;fr&quot; href=&quot;http://dontbubble.us/&quot;&gt;voir aussi&lt;/a&gt;), c&amp;#8217;est à dire que les résultats de recherche sont personnalisés en fonction de votre profil marketing, et &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.primeo.fr/blog/google-universal-analytics/&quot;&gt;le profil est directement construit à partir des outils de mesure d&amp;#8217;audience&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mais alors, comment faire du reverse-engineering sur les réponses des moteurs de recherche, pour comprendre les leviers permettant de positionner son contenu dans le bon profil marketing (&amp;#8220;top keywords&amp;#8221;, etc)&amp;#160;? Pour pouvoir faire ses expérimentations, il faut acheter des profils &amp;#8220;tout prêts&amp;#8221;, ou en construire un.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note après relecture&amp;#160;: En y repensant, je me suis dit qu&amp;#8217;avec cet article j&amp;#8217;étais en train de construire quelque chose de similaire au «&amp;#160;nettoyeur&amp;#160;» de la nouvelle intitulée «&amp;#160;Scroogled&amp;#160;», écrit par Cory Doctorow (voir le lien en fin d&amp;#8217;article).&lt;/em&gt;&lt;/p&gt;          &lt;h3&gt;La construction d&amp;#8217;un profil, comment ça marche&amp;#160;?&lt;/h3&gt;
&lt;p&gt;À la base de tout profil marketing sur Internet, il y a les cookies. Les cookies sont des informations au format texte qui sont stockées sur votre ordinateur lorsque vous visitez un site.&lt;/p&gt;
&lt;p&gt;Les plate-formes marketing utilisent des services gratuit d&amp;#8217;analyse d&amp;#8217;audience (Xiti, Google Analytics&amp;#8230;), de publicités (DoubleClick&amp;#8230;), ou de réseaux sociaux (Facebook, Twitter&amp;#8230;) pour collecter des informations sur la navigation des internautes, et lier un identifiant, stocké dans un cookie, à un profil de consommateur stocké sur leur serveur.&lt;/p&gt;
&lt;h4&gt;Étape 1&amp;#160;: Création de l&amp;#8217;identifiant unique de suivi&lt;/h4&gt;
&lt;p&gt;Lors de la première rencontre entre l&amp;#8217;utilisateur et le système de suivi marketing, un identifiant unique d&amp;#8217;utilisateur est créé, et envoyé dans un cookie pour y être enregistré.&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;cookie_tiers_etape01.png&quot; href=&quot;https://uname.pingveno.net/blog/public/schemas/cookie_tiers_etape01.png&quot;&gt;&lt;img title=&quot;cookie_tiers_etape01.png, janv. 2014&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;cookie_tiers_etape01.png&quot; src=&quot;https://uname.pingveno.net/blog/public/schemas/cookie_tiers_etape01.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Étape 2&amp;#160;: Reconnaissance de l&amp;#8217;utilisateur, enrichissement de la base de données&lt;/h4&gt;
&lt;p&gt;Une fois que le cookie contenant l&amp;#8217;identifiant de suivi est placé dans l&amp;#8217;ordinateur de l&amp;#8217;utilisateur, celui-ci va être envoyé chaque fois que le système de suivi en fera la demande, même en consultant un autre site.&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;cookie_tiers_etape02.png&quot; href=&quot;http://uname.pingveno.net/blog/public/schemas/cookie_tiers_etape02.png&quot;&gt;&lt;img title=&quot;cookie_tiers_etape02.png, janv. 2014&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;cookie_tiers_etape02.png&quot; src=&quot;http://uname.pingveno.net/blog/public/schemas/cookie_tiers_etape02.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Premières difficultés&amp;#8230;&lt;/h3&gt;
&lt;p&gt;Mais il y a plusieurs types de cookies&amp;#160;: il y a les cookies &amp;#8220;simples&amp;#8221; qui peuvent être déclarés aussi bien depuis le Javascript que les entêtes HTTP, et il y a les autres, &lt;strong&gt;tous les autres&lt;/strong&gt;. À savoir&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Les cookies Flash&lt;/li&gt;
&lt;li&gt;Les cookies des applets Java&lt;/li&gt;
&lt;li&gt;Les &amp;#8220;super cookies&amp;#8221; HTML5&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://samy.pl/evercookie/&quot;&gt;Ce que vous n&amp;#8217;avez jamais imaginé&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Construire un profil marketing signifierai pouvoir tracer, aspirer, et réinjecter tous ces cookies d&amp;#8217;un navigateur à l&amp;#8217;autre après la construction du profil.&lt;/p&gt;
&lt;p&gt;Pour mimer totalement le comportement d&amp;#8217;un utilisateur, il faudrait d&amp;#8217;utiliser une &amp;#8220;macro&amp;#8221; qui cliquerait dans une vraie fenêtre de navigateur, et qui exporterai ensuite les fichiers de profil du navigateur (historique, cookies, cache, etc). La complétion du profil ne ferait alors aucun doute, mais celui-ci risque d&amp;#8217;être assez volumineux et peu pratique à manipuler par la suite. De plus, les solutions de clic automatique (&amp;#8220;macros&amp;#8221;) ont leurs limites, quoi que vous fassiez, il vous faudra certainement créer vos profils à la main.&lt;/p&gt;
&lt;p&gt;Autre limite&amp;#160;: une fois le profil construit, commencer à l&amp;#8217;étudier c&amp;#8217;est aussi commencer à l’abîmer. En effet, réaliser des requêtes qui ne collent pas tout à fait au profil va avoir pour effet un recentrage du profil par les régies tout au long des requêtes, pour finalement arriver à un profil différent de celui qu&amp;#8217;on a construit. Les requêtes sont vraiment dans ce cas du &amp;#8220;one shot&amp;#8221;. Comme en physique quantique, on ne pourra pas connaître l&amp;#8217;état du système avant de l&amp;#8217;avoir mesuré, et en le mesurant on l&amp;#8217;aura détruit.&lt;/p&gt;
&lt;h3&gt;Comment construire un profil marketing&amp;#160;?&lt;/h3&gt;
&lt;h4&gt;Les outils&lt;/h4&gt;
&lt;p&gt;Pour pouvoir construire de toute pièce un profil il nous faut&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Un navigateur web que l&amp;#8217;on peut scripter facilement&amp;#160;: Firefox &lt;del&gt;ou Chrome&lt;/del&gt;. Non, oubliez Chrome, son API de script ne permet pas de bloquer des ressources &lt;strong&gt;avant&lt;/strong&gt; le chargement des pages, ce qui rend l&amp;#8217;exécution des filtres de régie non fiables.&lt;/li&gt;
&lt;li&gt;Une connexion internet la plus classique possible&amp;#160;: pas de serveur ou de centre de calcul, une IP classique, localisée dans le pays ciblé pour l&amp;#8217;étude.&lt;/li&gt;
&lt;li&gt;Une idée du profil à construire&amp;#160;: requêtes, durées de connexion, clics à effectuer, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Approche brute&lt;/h4&gt;
&lt;p&gt;L’approche brute consiste à construire un profil en ne mimant que les données de clic de l&amp;#8217;utilisateur. Principalement, elle se distingue de l&amp;#8217;approche connectée par son absence d&amp;#8217;utilisation des réseaux sociaux. Cela inclut aussi un blocage systématique de tous les mécanismes intégrés par ces réseau sociaux, qui traquent les utilisateurs, même lorsqu&amp;#8217;ils ne sont pas membres.&lt;/p&gt;
&lt;p&gt;C&amp;#8217;est donc plus qu&amp;#8217;une approche non-connectée, c&amp;#8217;est pour cela que je &amp;#8216;appelle l&amp;#8217;approche brute. On ne va donc cibler que certaines régies marketing, et seulement celles-ci.&lt;/p&gt;
&lt;p&gt;Il est nécessaire de partir d&amp;#8217;un profil de navigateur vide, puis de configurer le logiciel de clic automatique avec des requêtes et des comportement prédéfinis. Le navigateur sur lequel sera exécuté la macro devra avoir un bloqueur sélectif de contenu installé, pour bloquer les régies tierces, et ne se faire suivre que par les régies que l&amp;#8217;on souhaite. Je déconseille la mise en place d&amp;#8217;un &amp;#8220;&lt;a hreflang=&quot;en&quot; href=&quot;http://donottrack.us/&quot;&gt;Do-not-track&lt;/a&gt;&amp;#8221;, cette seule information pouvant servir à identifier l&amp;#8217;utilisateur sur un profil particulier (&amp;#8220;utilisateur éduqué à internet cherchant à se «&amp;#160;protéger des malwares »&amp;#8221;), et pouvant changer les résultats construits après un partage de données entre régies.&lt;/p&gt;
&lt;p&gt;Le blocage des régies tierces se fera donc via un filtre &lt;a hreflang=&quot;fr&quot; href=&quot;https://addons.mozilla.org/fr/android/addon/adblock-plus/&quot;&gt;AdblockPlus&lt;/a&gt; spécialement créé, ou les projets &lt;a hreflang=&quot;fr&quot; href=&quot;https://addons.mozilla.org/fr/firefox/addon/ghostery/&quot;&gt;Ghostery&lt;/a&gt;/&lt;a hreflang=&quot;fr&quot; href=&quot;https://addons.mozilla.org/fr/firefox/addon/disconnect/&quot;&gt;Disconnect&lt;/a&gt;, correctement configurés eux aussi.&lt;/p&gt;
&lt;h4&gt;Approche &amp;#8220;connectée&amp;#8221;&lt;/h4&gt;
&lt;p&gt;L&amp;#8217;approche connectée fait une utilisation totale de l&amp;#8217;interconnexion des régies. Tout d&amp;#8217;abord on va s&amp;#8217;inscrire sur les réseaux sociaux pour identifier précisément son &amp;#8220;personnage&amp;#8221;, puis laisser les réseaux sociaux connectés lors de la navigation.&lt;/p&gt;
&lt;p&gt;De cette manière, le croisement des informations du profil avec les informations collectées lors des clics de l&amp;#8217;utilisateur pourra se faire, et la simulation du profil sera parfaite.&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;facebook_bubble.png&quot; href=&quot;https://uname.pingveno.net/blog/public/schemas/facebook_bubble.png&quot;&gt;&lt;img title=&quot;facebook_bubble.png, janv. 2014&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;facebook_bubble.png&quot; src=&quot;https://uname.pingveno.net/blog/public/schemas/facebook_bubble.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Limites&lt;/h4&gt;
&lt;p&gt;Il est très difficile de construire un profil cohérent «&amp;#160;à partir de rien&amp;#160;»&amp;#160;: il faut avoir à la base une idée des requêtes à effectuer et du comportement de l&amp;#8217;utilisateur, ce qui biaise l&amp;#8217;étude puisqu&amp;#8217;elle se basera sur un profil construit à partir de nos propres préjugés, et non pas sur la réalité.&lt;/p&gt;
&lt;p&gt;De plus, lors de la création d&amp;#8217;un profil pour l&amp;#8217;approche connectée peut prendre énormément de temps, et n&amp;#8217;est pas toujours possible automatiquement (les réseaux sociaux se protègent contre les robots).&lt;/p&gt;
&lt;h3&gt;Utilisez des profils existants&amp;#160;!&lt;/h3&gt;
&lt;p&gt;Et si la solution la plus simple était tout simplement la meilleure&amp;#160;? Pourquoi s&amp;#8217;embêter à construire des profils quand on peut utiliser ceux que construisent les internautes eux-mêmes&amp;#160;?&lt;/p&gt;
&lt;p&gt;Avec un peu de persuasion, on peut «&amp;#160;emprunter&amp;#160;» les cookies d&amp;#8217;un ami ou d&amp;#8217;un proche, afin de tester ses requêtes directement à partir du profil qu&amp;#8217;il a construit&amp;#160;!&lt;/p&gt;
&lt;h4&gt;Sauvegarde du profil de navigateur&lt;/h4&gt;
&lt;p&gt;Le mode le plus simple pour récupérer à coup sûr tous les cookies d&amp;#8217;un internaute c&amp;#8217;est enregistrer le profil navigateur, qui inclut cookies, cache, mots de passe, favoris, et historique.&lt;/p&gt;
&lt;p&gt;Évidemment, parfois ce n&amp;#8217;est pas possible pour des raisons diplomatiques, mais lorsque c&amp;#8217;est possible, c&amp;#8217;est toujours la le meilleur moyen de s&amp;#8217;assurer une complétude des données de base.&lt;/p&gt;
&lt;p&gt;La procédure pour y parvenir dépend du navigateur de l&amp;#8217;internaute à qui on emprunte ses cookies&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;https://support.google.com/chrome/answer/142059?hl=fr&quot;&gt;Chrome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;https://support.mozilla.org/en-US/kb/back-and-restore-information-firefox-profiles&quot;&gt;Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://my.opera.com/francais/forums/topic.dml?id=807652&quot;&gt;Opera&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Sauvegarde sélective&lt;/h4&gt;
&lt;p&gt;La sauvegarde sélective consiste, comme son nom l&amp;#8217;indique, à sélectionner les cookies traceurs, et à n&amp;#8217;exporter que ceux-ci.&lt;/p&gt;
&lt;p&gt;Cela permet d&amp;#8217;avoir facilement des informations cohérentes, sans avoir à exporter tout le profil, cache et historique compris.&lt;/p&gt;
&lt;h5&gt;Identifier les cookies traceurs&lt;/h5&gt;
&lt;p&gt;L&amp;#8217;identification des cookies traceur peut être un problème en soi. Ce n&amp;#8217;est plus le cas depuis que les projets comme &lt;a hreflang=&quot;fr&quot; href=&quot;https://addons.mozilla.org/fr/firefox/addon/ghostery/&quot;&gt;Ghostery&lt;/a&gt;/&lt;a hreflang=&quot;fr&quot; href=&quot;https://addons.mozilla.org/fr/firefox/addon/disconnect/&quot;&gt;Disconnect&lt;/a&gt; existent&amp;#160;: ces derniers énumèrent dans leur code source l&amp;#8217;ensemble des cookies et webbugs nécessaires au tracking, triés par régie&amp;#160;!&lt;/p&gt;
&lt;h5&gt;Aspirer tous les cookies&lt;/h5&gt;
&lt;p&gt;Aspire les cookies est le point délicat, puisque la procédure dépend de quel navigateur est utilisé. Il pourrait être utile de faire une extension pour navigateur, afin de pouvoir exporter et importer facilement les cookies désirés.&lt;/p&gt;
&lt;h5&gt;Réinjecter les cookies aspirés dans un profil vide&lt;/h5&gt;
&lt;p&gt;Là encore, une extension pourra faire l&amp;#8217;affaire, car la procédure manuelle risque d&amp;#8217;être fastidieuse et varie d&amp;#8217;un navigateur à l&amp;#8217;autre.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Nous avons vu qu&amp;#8217;il était en théorie possible de construire un profil marketing pour faire du reverse engineering sur les résultats personnalisés en fonction du profil d&amp;#8217;un utilisateur.&lt;/p&gt;
&lt;p&gt;Nous avons vu qu&amp;#8217;il était quand même plus simple, de récupérer les cookies d&amp;#8217;un utilisateur donné, à condition qu&amp;#8217;il soit d&amp;#8217;accord.&lt;/p&gt;
&lt;p&gt;Les données de profil nous suivent de plus en plus. Des téléphones aux navigateurs internet, les données collectées sur les utilisateurs n&amp;#8217;ont jamais été aussi nombreuses, jusqu&amp;#8217;à en devenir invasives. Ces données, d&amp;#8217;une précision jamais égalée, commencent petit à petit à devenir ce qui nous définit en ligne, plus que notre nom ou notre pseudo. Et si un jour on pouvait vendre son profil marketing comme on vendrait une fausse carte d&amp;#8217;identité&amp;#160;? Pour aller plus loin, je vous invite à lire la nouvelle &lt;a hreflang=&quot;fr&quot; href=&quot;http://cfeditions.com/scroogled/&quot;&gt;Srooggled&lt;/a&gt; de Cory Doctorow.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Ce que vous ne savez pas sur les mesures d'audience sur Internet</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2013/12/14/Ce-que-vous-ne-savez-pas-sur-les-mesures-d-audience-sur-Internet</link>
        <guid isPermaLink="false">urn:md5:a4c52733a99fbc2a2e65c4bd0cbc7917</guid>
        <pubDate>Sat, 14 Dec 2013 15:38:00 +0100</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>advertising</category>
                  <category>big brother</category>
                  <category>tracking</category>
                <description>&lt;p&gt;Les mesures d&amp;#8217;audiences répondent à une problématique qui est
ancienne. De tous temps, les créateurs de contenu ont cherché à savoir
quelle était la valeur de ce qu&amp;#8217;ils produisaient. Les artistes
comptaient donc le nombre de personnes présentes à leur vernissage pour
déterminer la cote de leurs créations, on mesurait les concerts publics à
l&amp;#8217;applaudimètre, et l&amp;#8217;affluence d&amp;#8217;un magasin au moment des soldes
montrait l&amp;#8217;impact de la marque sur son segment de marché.&lt;/p&gt;
&lt;p&gt;De tous temps on a pu constater des failles au mécanisme de mesure
d&amp;#8217;audience&amp;#160;: les invités qui viennent pour le buffet lors du vernissage,
et non pas pour les œuvres, la faible précision de l&amp;#8217;applaudimètre,
etc.&lt;/p&gt;
&lt;p&gt;Pourtant, ces statistiques sur l&amp;#8217;audience des produits a petit à
petit gagné la confiance des investisseurs, jusqu&amp;#8217;à en devenir une
référence qui ne mesurait plus simplement l&amp;#8217;audience, mais aussi la &lt;strong&gt;pertinence&lt;/strong&gt;.
Un produit qui n&amp;#8217;a pas une audience suffisante est jugé non pertinent,
et est donc écarté du marché. Peu importe s&amp;#8217;il est rentable ou non,
puisqu&amp;#8217;on vous a dit qu&amp;#8217;il n&amp;#8217;était pas pertinent. La sacro-sainte
pertinence s&amp;#8217;est alors couplée avec le concept de croissance, et la
course à la mesure d&amp;#8217;audience s&amp;#8217;est engagée.&lt;/p&gt;
&lt;p&gt;Mais les mesures d&amp;#8217;audiences, comment ça marche&amp;#160;?&lt;/p&gt;          &lt;h3&gt;Approche passive/active
&lt;/h3&gt;
&lt;div style=&quot;float: right; margin: 0 0 1em 1em;&quot;&gt;&lt;a title=&quot;sondages.jpg&quot; href=&quot;https://uname.pingveno.net/blog/public/posts_thumb/sondages.jpg&quot;&gt;&lt;img title=&quot;sondages.jpg, déc. 2013&quot; alt=&quot;sondages.jpg&quot; src=&quot;https://uname.pingveno.net/blog/public/posts_thumb/.sondages_m.jpg&quot; height=&quot;246&quot; width=&quot;276&quot; /&gt;&lt;/a&gt;&lt;p style=&quot;text-align:right;&quot;&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://www.agoravox.fr/actualites/politique/article/sondage-sarkozy-malchanceux-le-79773&quot;&gt;Source de l&amp;#8217;image&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;L&amp;#8217;&lt;em&gt;&lt;strong&gt;approche passive&lt;/strong&gt;&lt;/em&gt; c&amp;#8217;est les sondages&amp;#160;: après l&amp;#8217;exposition on va demander aux gens quelle a été leur œuvre préférée, s&amp;#8217;ils ont apprécié la galerie, ou s&amp;#8217;ils ont des suggestions à faire pour l&amp;#8217;améliorer. Les inconvénients de l&amp;#8217;approche passive, c&amp;#8217;est d&amp;#8217;abord le délai qui s&amp;#8217;écoule entre l&amp;#8217;événement et sa mesure, ensuite c&amp;#8217;est l&amp;#8217;impossibilité d&amp;#8217;avoir un couvrement complet de la population considérée (on ne peut pas demander à tout le monde), et enfin c&amp;#8217;est la forte subjectivité et le manque de précision des réponses.&lt;/p&gt;
&lt;p&gt;L&amp;#8217;&lt;em&gt;&lt;strong&gt;approche active&lt;/strong&gt;&lt;/em&gt; c&amp;#8217;est la collecte à la source&amp;#160;: on va mesurer directement la pertinence d&amp;#8217;un événement, en utilisant des données issues de sources provenant de l&amp;#8217;événement. Pour un magasin, cela peut consister à mesurer le temps passé par chaque personne dans le magasin, le panier moyen, le nombre d&amp;#8217;articles différents au moment du passage en caisse, etc.&lt;/p&gt;
&lt;p&gt;L&amp;#8217;approche qui donne les meilleures données pour les mesures d&amp;#8217;audiences c&amp;#8217;est évidemment l&amp;#8217;&lt;em&gt;approche active&lt;/em&gt;. Non seulement elle fournie souvent des données chiffrées directement exploitables, mais elle a aussi la force de pouvoir couvrir une population plus large, et donc d&amp;#8217;être plus fiable qu&amp;#8217;une &lt;em&gt;approche passive&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;De plus, comme elle est bien souvent indolore, l&amp;#8217;&lt;em&gt;approche active&lt;/em&gt; a aussi l&amp;#8217;avantage de ne pas gêner le client dans son &amp;#8220;expérience d&amp;#8217;achat&amp;#8221;.&lt;/p&gt;
&lt;h3&gt;Dans la vraie vie, et sur Internet&lt;/h3&gt;
&lt;p&gt;La course aux mesures d&amp;#8217;audiences ne va pas au même rythme dans le monde réel et sur Internet.&lt;/p&gt;
&lt;p&gt;Dans le monde réel, l&amp;#8217;approche active fera l&amp;#8217;objet d&amp;#8217;un consentement préalable à la fois de la CNIL et de vous-même (même implicitement). Quant à l&amp;#8217;approche passive, vous êtes forcément au courant puisque c&amp;#8217;est vous qui produisez les données en répondant aux questions.&lt;/p&gt;
&lt;p&gt;Sur Internet, les choses sont différentes, et elles méritent d&amp;#8217;abord de raconter un morceau d&amp;#8217;histoire.&lt;/p&gt;
&lt;h3&gt;Au début, furent les fichiers logs&lt;/h3&gt;
&lt;div style=&quot;float: right; margin: 0 0 1em 1em;&quot; alt=&quot;apache-logs.png&quot;&gt;&lt;a title=&quot;apache-logs.png&quot; href=&quot;https://uname.pingveno.net/blog/public/posts_thumb/apache-logs.png&quot;&gt;&lt;img title=&quot;apache-logs.png, déc. 2013&quot; src=&quot;https://uname.pingveno.net/blog/public/posts_thumb/.apache-logs_m.png&quot; /&gt;&lt;/a&gt;&lt;p style=&quot;text-align:right;&quot;&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://www.guillaumedesbieys.com/petit-retour-dexperience-sur-une-intrusion-dans-wordpress/&quot;&gt;Source de l&amp;#8217;image&lt;br /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;L&amp;#8217;analyse d&amp;#8217;audience, en informatique, vient du &lt;em&gt;Reporting&lt;/em&gt;. Le &lt;em&gt;Reporting&lt;/em&gt; c&amp;#8217;est la surveillance des systèmes. En effet, aux débuts de l&amp;#8217;informatique, lorsque les machines fonctionnaient personne ne se posait de questions, mais lorsqu&amp;#8217;elles tombaient en panne, deux questions se posaient (et se posent toujours )&amp;#160;:
&lt;ul&gt;&lt;li&gt;Pourquoi la machine est cassée&amp;#160;?&lt;/li&gt;
&lt;li&gt;Comment éviter que cela ne se reproduise&amp;#160;?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour répondre à ces questions, les logiciels se sont mis à produire des &amp;#8220;traces&amp;#8221;, ces traces ce sont les &lt;strong&gt;&lt;em&gt;fichiers log&lt;/em&gt;&lt;/strong&gt;. Les &lt;em&gt;fichiers log&lt;/em&gt;, ce sont des fichiers texte contenant des informations techniques. En particulier, pour un serveur web, cela peut être l&amp;#8217;adresse IP qui a initié la connexion, la page consultée, le navigateur de l&amp;#8217;internaute, la taille de la requête, la méthode, etc.&lt;/p&gt;
&lt;p&gt;L&amp;#8217;analyse des &lt;em&gt;fichiers logs&lt;/em&gt; permettait (et permet toujours) de savoir quand le logiciel a un problème, et bien souvent pourquoi.&lt;/p&gt;
&lt;p&gt;Et puis un jour, quelqu&amp;#8217;un a eu l&amp;#8217;idée d&amp;#8217;utiliser les &lt;em&gt;fichiers logs&lt;/em&gt; pour avoir des statistiques sur la performance de son système (combien de temps il est en marche, combien de donnée ont été traitée, etc). C&amp;#8217;est le tournant de l&amp;#8217;histoire.&lt;/p&gt;
&lt;p&gt;À partir de là une autre personne s&amp;#8217;est dit que puisque dans les &lt;em&gt;fichiers logs&lt;/em&gt; il y a la page consultée, la date, et un moyen relativement fiable de déterminer l&amp;#8217;unicité d&amp;#8217;un utilisateur (l&amp;#8217;adresse IP), alors pourquoi ne pas réaliser les mêmes statistiques pour savoir quelles sont les pages qui sont le plus consultées&amp;#160;? Partant d&amp;#8217;un bon sentiment, et souhaitant éviter de produire du contenu inutile, l&amp;#8217;idée a plu à la fois au techniciens et aux commerciaux. Surtout aux commerciaux.&lt;/p&gt;
&lt;p&gt;Vers la fin des années 90, la couverture ADSL du grand public a permis à Internet d&amp;#8217;exploser en audience. Et les &lt;em&gt;fichiers logs&lt;/em&gt; sont devenus insuffisants. En effet, comment savoir avec fiabilité le temps passé par l&amp;#8217;utilisateur sur la page&amp;#160;? Comment gérer le cas des ordinateurs partagés (cybercafés, bibliothèques&amp;#8230;) qui partagent la même IP&amp;#160;? Comment partager des données pour effectuer le suivi des utilisateurs sur plusieurs sites en même temps&amp;#160;?&lt;/p&gt;
&lt;p&gt;Les &lt;em&gt;navigateurs Web&lt;/em&gt; commençant à s&amp;#8217;harmoniser en terme de technologie et de fonctionnalités (en particulier en terme de support du &lt;em&gt;Javascript&lt;/em&gt;), c&amp;#8217;est à ce moment là que les systèmes basé sur les &lt;em&gt;cookies&lt;/em&gt; ont pu tirer leur épingle du jeu.&lt;/p&gt;
&lt;h3&gt;L&amp;#8217;ère des cookies&lt;/h3&gt;
&lt;div style=&quot;float: right; margin: 0 0 1em 1em;&quot; alt=&quot;chocolate-cookies.jpg&quot;&gt;&lt;img title=&quot;chocolate-cookies.jpg, déc. 2013&quot; src=&quot;https://uname.pingveno.net/blog/public/posts_thumb/.chocolate-cookies_m.jpg&quot; /&gt;&lt;p style=&quot;text-align:right;&quot;&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://en.wikipedia.org/wiki/File:Chocolate_Chip_Cookies_-_kimberlykv.jpg&quot;&gt;Source de l&amp;#8217;image&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;Mais avant tout, quelques définitions&amp;#160;:
&lt;ul&gt;&lt;li&gt;Un &lt;strong&gt;&lt;em&gt;navigateur web&lt;/em&gt;&lt;/strong&gt;, c&amp;#8217;est le logiciel qui vous permet &amp;#8220;d&amp;#8217;aller sur internet&amp;#8221;&amp;#160;: c&amp;#8217;est celui que vous utilisez quand vous lisez ces lignes.&lt;/li&gt;
&lt;li&gt;Le &lt;strong&gt;&lt;em&gt;Javascript&lt;/em&gt;&lt;/strong&gt; est un langage de programmation sur le Web, il est exécuté après le chargement de la page par le navigateur, et permet donc une interaction riche avec l&amp;#8217;utilisateur.&lt;/li&gt;
&lt;li&gt;Les &lt;strong&gt;&lt;em&gt;cookies&lt;/em&gt;&lt;/strong&gt; sont des fichiers de données au format texte. Ce sont des données que le navigateur stocke à la demande de programmes &lt;em&gt;Javascript&lt;/em&gt; (ou autres), et qui sont réutilisées par la page que vous consultez ensuite.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les avantages des &lt;em&gt;cookies&lt;/em&gt; sont multiples par rapport aux &lt;em&gt;fichiers log&lt;/em&gt;&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Le cookie est manipulé à la fois par &lt;em&gt;Javacript&lt;/em&gt; et par les langages plus lourds côté serveur, ce qui permet une &lt;strong&gt;portabilité de l&amp;#8217;information&lt;/strong&gt; contenu dans le cookie sur de nombreux langages et &amp;#8220;univers&amp;#8221; de programmation différents.&lt;/li&gt;
&lt;li&gt;Le cookie est &lt;strong&gt;persistant&lt;/strong&gt;&amp;#160;: il ne se réinitialise pas quand on change de page, et on peut donc stocker des données dans la durée, de manière fiable, et avec une relative confiance dans leur contenu.&lt;/li&gt;
&lt;li&gt;Le cookie peut être &lt;strong&gt;partagé&lt;/strong&gt;&amp;#160;! En effet, on peut intégrer un &lt;em&gt;&lt;strong&gt;cookie tiers&lt;/strong&gt;&lt;/em&gt; dans une page, ce qui signifie que la donnée portée par un cookie peut appartenir à un autre site&amp;#160;: le partage de données est possible&amp;#160;!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avec enthousiasme, les commerciaux et les techniciens ont commencé à intégrer des systèmes de suivi d&amp;#8217;audience basés sur les cookies. Après tout, rien de très différent de ce qui existait déjà avec les fichiers logs, juste des statistiques.&lt;/p&gt;
&lt;p&gt;Les statistiques ont pu gagner en pertinence et en volume de données. On pouvait alors savoir précisément d&amp;#8217;où l&amp;#8217;utilisateur venait, quelle était la page sur laquelle il quittait le site, quel était son chemin dans ses décisions d&amp;#8217;achat. De simple statistiques de &amp;#8220;hit&amp;#8221; sur les pages se sont transformées petit à petit en suivi et traçage des comportements de l&amp;#8217;internaute.&lt;/p&gt;
&lt;p&gt;Et c&amp;#8217;est là le problème. Il s&amp;#8217;agit d&amp;#8217;une analyse d&amp;#8217;audience&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Active&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Indolore&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fortement invasive&lt;/strong&gt;&amp;#160;: TOUT ce que vous faites sur la page est susceptible d&amp;#8217;être enregistré&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persistante&lt;/strong&gt;&amp;#160;: le cookie est persistant&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partagée&lt;/strong&gt;&amp;#160;: le cookie peut être partagé&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;En temps réel&lt;/strong&gt;&amp;#160;: l&amp;#8217;analyse peut se faire via un mécanisme de collecte en temps réel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lorsque plusieurs sites se mettent à échanger les informations de suivi, cela constitue un véritable &amp;#8220;réseau de suivi&amp;#8221; qui surveille vos moindres gestes&amp;#8230; Mais pour quoi faire, dans le fond&amp;#160;?&lt;/p&gt;
&lt;h3&gt;Et l&amp;#8217;on exploita les données&amp;#8230;&lt;/h3&gt;
&lt;div style=&quot;float: right; margin: 0 0 1em 1em;&quot;&gt;&lt;a title=&quot;amazon-cloud.png&quot; href=&quot;https://uname.pingveno.net/blog/public/posts_thumb/amazon-cloud.png&quot;&gt;&lt;img title=&quot;amazon-cloud.png, déc. 2013&quot; alt=&quot;amazon-cloud.png&quot; src=&quot;https://uname.pingveno.net/blog/public/posts_thumb/.amazon-cloud_m.png&quot; /&gt;&lt;/a&gt;&lt;p style=&quot;text-align:right;&quot;&gt;&lt;a href=&quot;http://rdn-consulting.com/blog/2009/02/07/exploring-cloud-computing-development/&quot; hreflang=&quot;en&quot;&gt;Source de l&amp;#8217;image&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;Au début les commerciaux ont demandé à collecter le plus de données possible, «&amp;#160;en attendant de savoir comment on allait les utiliser&amp;#160;», et ce n&amp;#8217;est que très récemment, avec le &lt;em&gt;Cloud Computing&lt;/em&gt; et les systèmes de &lt;em&gt;Data Mining&lt;/em&gt; et &lt;em&gt;Big Data&lt;/em&gt; que cela a commencé à prendre tout son sens.
&lt;ul&gt;&lt;li&gt;Les systèmes &lt;strong&gt;&lt;em&gt;Big Data&lt;/em&gt;&lt;/strong&gt;, comme leur nom l&amp;#8217;indique, sont ds systèmes capables de calculer des quantités astronomiques de données, de quoi pouvoir gérer l&amp;#8217;immense volume de données collectés.&lt;/li&gt;
&lt;li&gt;Le &lt;strong&gt;&lt;em&gt;Cloud Computing&lt;/em&gt;&lt;/strong&gt; a permis de se défaire du surcoût lié à l&amp;#8217;exploitation de machines assez puissantes pour traiter des &lt;em&gt;Big Data&lt;/em&gt;&amp;#160;: il suffit de louer des machines surpuissantes en salle serveur pour une heure ou deux, juste le temps qu&amp;#8217;il faut.&lt;/li&gt;
&lt;li&gt;Enfin, le &lt;strong&gt;&lt;em&gt;Data Mining&lt;/em&gt;&lt;/strong&gt;, comme son nom l&amp;#8217;indique, c&amp;#8217;est une discipline qui vise l&amp;#8217;extraction de données pertinentes à l&amp;#8217;intérieur d&amp;#8217;une immense masse de données. Juste ce dont on a besoin pour la suite.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;N&amp;#8217;oublions pas que le but principal des commerciaux, c&amp;#8217;est de vendre. Pour les aider à vendre, ils trouvèrent les statistiques plaisantes. Ils pouvaient savoir quels étaient les produits qui marchaient le mieux, ils s&amp;#8217;amusaient à «&amp;#160;découper le marché en segments&amp;#160;», pour pouvoir cibler tel ou tel profil de consommateur, mais ils manquaient de données. Ils n&amp;#8217;avaient pas la possibilité de cerner un utilisateur dans leur segment dès l&amp;#8217;entrée du magasin, ils ne pouvaient pas vérifier que le produit qu&amp;#8217;ils avaient placé sur un segment était adapté avant la fin de la période commerciale. Ils étaient pratiquement aveugles, et se basaient en grande partie sur leur expérience personnelle.&lt;/p&gt;
&lt;p&gt;Mais les données issues du suivi ont changé la donne. À présent, chaque achat, chaque mouvement, chaque action de l&amp;#8217;utilisateur sur leur boutique en ligne pouvait être suivie, analysée, comprise pour en extraire le profil de l&amp;#8217;utilisateur, ses centres d&amp;#8217;intérêt, et ce qu&amp;#8217;il était susceptible d&amp;#8217;acheter. Mieux&amp;#160;: lorsque l&amp;#8217;utilisateur quittait la boutique puis revenait, on pouvait à présent lui proposer des produits qui lui plairont, en fonction de son parcours précédent dans le magasin. Ou comment avoir la proximité du commerçant de quartier, qui connaît tous ses clients, avec une boutique à plusieurs milliers d&amp;#8217;utilisateurs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La question n&amp;#8217;était à présent plus de savoir quels étaient les produits qui marchaient, mais de savoir les produits qui allaient marcher.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Alors on a commencé à voir fleurir les publicités ciblées. Vous savez, cette publicité qui vous suit partout. Vous consultez sur une marque de chocolat dans votre magasin favori, puis vous quittez le magasin. Vous allez surfer sur Internet, et la publicité pour le chocolat que vous avez regardé apparaît sur le côté. Vous allez regarder une vidéo, et le chocolat revient dans les publicités de la vidéo. Vous consultez la météo du lendemain, et le chocolat vous nargue encore dans son coin, vous murmurant «&amp;#160;tu n&amp;#8217;as pas fini tout à l&amp;#8217;heure, achète moi s&amp;#8217;il te plaît&amp;#160;».&lt;/p&gt;
&lt;p&gt;Et puis, forcément, au bout d&amp;#8217;un moment, les utilisateurs sont devenus méfiants. Ils se sont mis à vider leurs cookies à la fermeture de leur navigateur. Ils se sont mis à activer des bloqueurs de publicités. Ils se sont mis à se défendre, et à demander un contrôle de leurs données. La CNIL a commencé à se réveiller et exiger une information des utilisateurs. Mais le commercial avait plus d&amp;#8217;un tour dans son sac.&lt;/p&gt;
&lt;h3&gt;De l&amp;#8217;invisible au consenti&lt;/h3&gt;
&lt;div style=&quot;float: right; margin: 0 0 1em 1em;&quot;&gt;&lt;a title=&quot;facebook-tracking-howto.png&quot; href=&quot;https://uname.pingveno.net/blog/public/posts_thumb/facebook-tracking-howto.png&quot;&gt;&lt;img title=&quot;facebook-tracking-howto.png, déc. 2013&quot; alt=&quot;facebook-tracking-howto.png&quot; src=&quot;https://uname.pingveno.net/blog/public/posts_thumb/.facebook-tracking-howto_m.png&quot; /&gt;&lt;/a&gt;&lt;p style=&quot;text-align:right;&quot;&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://techcrunch.com/2011/12/07/conversion-tracking/&quot;&gt;Source de l&amp;#8217;image&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;Cela embêtait bien les commerciaux que les utilisateurs se mettent à bloquer leurs mécanismes de traçage. Mais à ce moment là est apparu un nouveau phénomène qui allait tout changer&amp;#160;: les réseaux sociaux.
&lt;p&gt;On cite souvent &lt;em&gt;Facebook&lt;/em&gt; en premier, mais les réseaux sociaux sont plus anciens que ça. &lt;em&gt;Facebook&lt;/em&gt; est par contre le premier à avoir sans scrupules et aux yeux de tous commencé à exploiter les données que les internautes produisaient sur son réseau.&lt;/p&gt;
&lt;p&gt;Le principe est simple&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Vous vous inscrivez sur le réseau social, vous indiquez vos information personnelles. Ces informations ont une certaine valeur, mais assez faible dans le fond&amp;#160;: il&amp;nbsp; y a votre âge, votre catégorie professionnelle, votre sexe, qui sont des informations utiles.&lt;/li&gt;
&lt;li&gt;Vous commencez à réaliser des interactions avec d&amp;#8217;autres utilisateurs du réseau, vous discutez avec certains et pas avec d&amp;#8217;autres, vous créez des affinités.&lt;/li&gt;
&lt;li&gt;Vous cliquez de temps en temps sur une publicité ou sur un lien externe, seulement ceux qui vous intéressent.&lt;/li&gt;
&lt;li&gt;À partir de ce que vous avez cliqué, de ce que les gens avec qui vous avez interagit on cliqué, en fonction de ce qu&amp;#8217;ils sont et de ce qu&amp;#8217;ils font, le réseau peut vous proposer des contenus que vous trouverez pertinents, et que vous êtes susceptible d&amp;#8217;acheter.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C&amp;#8217;est très fort parce que&amp;#160;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La &lt;strong&gt;dimension sociale&lt;/strong&gt; d&amp;#8217;un achat est mesurée&amp;#160;: vous n&amp;#8217;achetez pas seulement parce que vous êtes un consommateur, vous achetez au sein d&amp;#8217;un groupe&amp;#160;: connaître le groupe c&amp;#8217;est connaître vos attentes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vous y consentez&lt;/strong&gt; passivement lors de votre entrée dans le réseau&amp;#160;: vous cochez une petite case qui dit que votre activité peut être enregistrée, et c&amp;#8217;est tout. Le réseau peut à présent exploiter son infrastructure pour proposer à la fois un service agréable à l&amp;#8217;utilisateur (les interactions avec les gens), mais aussi un service commercial aux annonceurs (les interactions avec les produits).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Toujours plus proche de vous&lt;/h3&gt;
&lt;p&gt;On arrête pas le progrès. Après avoir acquis les segments temporels et sociaux, les commerciaux ont commencé à regarder avec intérêt le développement des smartphones. Ils ont même contribué de manière active à leur essor. Pourquoi&amp;#160;? Pour le segment de position.&lt;/p&gt;
&lt;p&gt;Les smartphones sont à présent tous géo-localisables. Après tout, ce n&amp;#8217;est qu&amp;#8217;une donnée de plus à exploiter. En utilisant votre téléphone pour faire une recherche d&amp;#8217;itinéraire, quoi de plus simple pour le site que de vous proposer les commerçants partenaires qui se trouvent sur votre chemin&amp;#160;? Vous avez des amis sur les réseaux sociaux, ils sont proches de vous, et vous vous rendez à un événement marketing&amp;#160;? Invitez les&amp;#160;!&lt;/p&gt;
&lt;p&gt;En intégrant un suivi des internautes jusqu&amp;#8217;à un objet personnel, le plus intime de tous les objets, celui qu&amp;#8217;on ne prête pas et qu&amp;#8217;on garde toujours sur soi, les commerciaux ont à présent réussi à définitivement intégrer l&amp;#8217;aspect individuel du ciblage de la publicité, la position géographique, et la dimension sociale.&lt;/p&gt;
&lt;h3&gt;Quelle est la morale&amp;#160;?&lt;/h3&gt;
&lt;p&gt;Finalement, qu&amp;#8217;est-ce que tout cela nous apprend&amp;#160;?&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;del&gt;Il faut brûler les commerciaux&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;On vit dans un monde de merde&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;Pourquoi je me laisse faire&amp;#160;?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J&amp;#8217;ai souvent l&amp;#8217;impression que les internautes ont arrêté de se battre après leur découverte des cookies. Pensant que c&amp;#8217;était suffisant, et que le reste était lié par cette pièce maîtresse, comme une clef de voûte de la mesure d&amp;#8217;audience.&lt;/p&gt;
&lt;p&gt;C&amp;#8217;est faux, comme nous venons de le voir. C&amp;#8217;est d&amp;#8217;autant plus faux à mesure qu&amp;#8217;arrivent sur le marché les objets connectés, qui interagissent toujours plus avec les réseaux sociaux et les régies publicitaires.&lt;/p&gt;
&lt;p&gt;Alors, comment faire changer les choses&amp;#160;? &lt;strong&gt;Exigez&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Exigez de pouvoir désactiver les fonctionnalités connectées, tout en continuant à utiliser votre matériel normalement. Exigez que les informations que vous fournissez soient correctement utilisées. Exigez de pouvoir utiliser un service même sans donner vos informations. Exigez d&amp;#8217;avoir le contrôle de votre matériel et de vos logiciels. Refusez d&amp;#8217;acheter un produit qui ne correspond pas à votre vision de la vie privée. Refusez d&amp;#8217;installer une application qui accède à vos données si elle n&amp;#8217;en a pas besoin pour faire ce que vous lui demandez.&lt;/p&gt;
&lt;p&gt;Le jour où les consommateurs exigeront les produits qui leur donnent le contrôle, plutôt que des produits avilissants, les commerciaux changeront leur manière de les concevoir pour pouvoir continuer à les vendre.&lt;/p&gt;
&lt;p&gt;Personnellement, chaque jour les internautes me désespèrent encore plus&amp;#8230;&lt;/p&gt;
&lt;h3&gt;Voir aussi&lt;/h3&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://live.wsj.com/video/how-advertisers-use-internet-cookies-to-track-you/92E525EB-9E4A-4399-817D-8C4E6EF68F93.html#!92E525EB-9E4A-4399-817D-8C4E6EF68F93&quot;&gt;How Cookies works&lt;/a&gt;&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Comment avoir un haut ratio avec bittorrent (presque) sans tricher</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2013/07/25/Comment-avoir-un-haut-ratio-avec-bittorrent-%28presque%29-sans-tricher</link>
        <guid isPermaLink="false">urn:md5:575e75aea6a493057d224cf676c3f98a</guid>
        <pubDate>Mon, 14 Oct 2013 18:55:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>bittorrent</category>
                  <category>down</category>
                  <category>leech</category>
                  <category>peer</category>
                  <category>ratio</category>
                  <category>seed</category>
                  <category>tracker</category>
                  <category>up</category>
                <description>&lt;p&gt;Ce billet est sponsorisé par l'organisme national de promotion des usages responsables sur les réseaux a-centrés.&lt;/p&gt;

&lt;p&gt;Non, Bittorrent n'est pas mort, et le peer to peer c'est même l'avenir pour les nouveaux modes de distribution. En attendant que les maisons de disque s'en rendent compte, prenons de l'avance et expliquons 2-3 bricoles.&lt;/p&gt;

&lt;p&gt;Sur la plupart des trackers privés, le ratio est un élément important, voire critique. Sur ces sites de téléchargement, si votre ratio up/down est inférieur à un certain nombre (à priori aux alentours de 1), votre compte est bloqué.&lt;/p&gt;

&lt;p&gt;Mais alors, comment s'assurer un ratio confortable ? Quels&amp;nbsp; sont les secrets de ceux qui réussissent et de ceux qui échouent ? Voici quelques astuces.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Nota Bene : Vous avez besoin d'un navigateur moderne pour afficher les formules dans ce article.&lt;/em&gt;&lt;/p&gt;          &lt;h3&gt;Définitions&lt;/h3&gt;

&lt;p&gt;Le &lt;strong&gt;peer to peer&lt;/strong&gt; est le nom du mécanisme par lequel vous obtenez le fichier : en échangeant des fragments de fichier avec les autres utilisateurs du réseau.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bittorrent&lt;/strong&gt; est un protocole de &lt;em&gt;peer to peer&lt;/em&gt;. Celui-ci fonctionne avec un serveur central, nommé le &lt;em&gt;Tracker&lt;/em&gt;, et un groupe d'utilisateurs que l'on appelle les peers.&lt;/p&gt;

&lt;p&gt;Le &lt;strong&gt;ratio&lt;/strong&gt; est un indicateur qui sert de référence pour définir les &quot;bon&quot; utilisateurs d'un réseau &lt;em&gt;peer to peer&lt;/em&gt; des &quot;mauvais&quot;. La plupart des trackers bannissent les utilisateurs ayant un ratio trop faible.&lt;/p&gt;

&lt;p&gt;Le &lt;strong&gt;tracker&lt;/strong&gt; est le serveur central de l'essaim. Le &lt;em&gt;tracker&lt;/em&gt; contient les signatures des fichiers et la liste des &lt;em&gt;peers&lt;/em&gt; qui en possèdent au moins un fragment du fichier. Ce serveur sert à la mise en relation des peers pour amorcer leurs échanges dans l'&lt;em&gt;essaim&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Un &lt;strong&gt;essaim&lt;/strong&gt; est un ensemble de &lt;em&gt;peers&lt;/em&gt; qui échangent des &lt;em&gt;fragments&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Une &lt;strong&gt;signature de fichier&lt;/strong&gt;, c'est une &lt;em&gt;somme de contrôle&lt;/em&gt; : c'est le résultat d'un opération arithmétique qui produira toujours le même résultat si on lui donne le même fichier en entrée. Si le fichier d'entrée est différent, même à 1 bit de différence, la somme de contrôle sera différente, et donc on pourra conclure que le fichier est corrompu (incomplet ou incorrect). Ce mécanisme sert donc à vérifier l'intégrité du fichier reçu, ou des fragments.&lt;/p&gt;

&lt;p&gt;Un &lt;strong&gt;fragment&lt;/strong&gt; est une portion du fichier à partager, en général tous les fragments ont une taille fixe, et un certain nombre de fragments est donc créé pour chaque fichier à partager, suivant la taille du fichier.&lt;/p&gt;

&lt;h3&gt;Les trackers, les torrents, le ratio.&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Bittorrent&lt;/em&gt; est un mécanisme de &lt;strong&gt;partage&lt;/strong&gt; de fichiers par &lt;em&gt;peer to peer&lt;/em&gt;. Je dis bien de partage, pas de téléchargement, car le mot est important. Le concept c'est que vous téléchargez de fragments de fichiers depuis un ensemble d'utilisateur qui possèdent le fichier complet, et que vous les assemblez pour obtenir à votre tour le fichier complet. Ensuite, vous pouvez fournir des fragments de fichier aux autres utilisateurs qui n'ont pas encore le fichier complet. Ça nécessite qu'il y ai au moins une personne dans l'essaim qui possède le fichier complet, et qu'il le partage suffisamment longtemps pour distribuer tous ses fragments au moins une fois.&lt;/p&gt;

&lt;p&gt;Lorsque vous téléchargez un fichier, vous êtes en position de &lt;em&gt;leecher&lt;/em&gt;, c'est à dire que vous consommez des ressources dans l'&lt;em&gt;essaim&lt;/em&gt;. Cela a pour effet de faire monter votre compteur de &lt;strong&gt;down&lt;/strong&gt; (comme download : téléchargement en anglais).&lt;/p&gt;

&lt;p&gt;Lorsque vous partagez des fragments de fichier, vous êtes ce que l'on appelle un &lt;em&gt;seeder&lt;/em&gt;, c'est à dire que vous fournissez des ressources dans l'&lt;em&gt;essaim&lt;/em&gt;. Cela a pour effet de faire monter votre compteur de &lt;strong&gt;up&lt;/strong&gt; (comme upload : téléversement en anglais).&lt;/p&gt;

&lt;p&gt;Le ratio est tout simplement le résultat du calcul `u/d` où `d` est le total en &lt;em&gt;down&lt;/em&gt; et `u` le total en &lt;em&gt;up&lt;/em&gt;. Ainsi, un ratio supérieur à 1 signifiera que vous avez plus fourni que consommé, et à l'inverse un ratio inférieur à 1 signifiera que vous avez plus consommé que fourni.&lt;/p&gt;

&lt;p&gt;La plupart des &lt;em&gt;trackers&lt;/em&gt; privés nécessitent de conserver un ratio de 1, pour éviter que les fichiers du réseau ne disparaissent au bout de quelques heures, et que les utilisateurs continuent de fournir les &lt;em&gt;fragments&lt;/em&gt; après leur téléchargement, pour faire vivre l'&lt;em&gt;essaim&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Alors, comment s'assurer un ratio supérieur à 1 ? Comment obtenir un ratio de 2 voire plus sans efforts ? Comment éviter de sombrer dans une mauvaise passe ?&lt;/p&gt;

&lt;h3&gt;Le principe&lt;/h3&gt;

&lt;p&gt;Tout le but du jeu va être d'augmenter son ratio sans tricher. Il faut voir ça comme un jeu d'achat / vente ou de bonus/malus. Chaque fois que vous téléchargez (que vous faites monter votre compteur &lt;em&gt;down&lt;/em&gt;) cela représente un &lt;strong&gt;investissement&lt;/strong&gt; ou un achat : vous consommez sur votre compteur et vous allez devoir &quot;rendre&quot; en &quot;&lt;strong&gt;vendant&lt;/strong&gt;&quot; du &lt;em&gt;up&lt;/em&gt; pour conserver votre avance. Vous devrez donc rentabiliser votre mise soit en fournissant à d'autres le torrent que vous venez de télécharger, soit en apportant du capital d'une autre manière. Dans tous les cas, ce que vous avez payé, vous ne l'avez plus.&lt;/p&gt;

&lt;p&gt;Allez, voici la méthode.&lt;/p&gt;

&lt;h3&gt;Votre assurance : l'anticipation&lt;/h3&gt;

&lt;p&gt;La plupart des utilisateurs qui tombent en dessous de 1 sont des utilisateurs qui l'ont quand même un peu cherché. La première des choses à faire quand on investit c'est l'anticipation. En général vous avez lorsque vous arrivez sur un tracker, on vous &quot;offre&quot; une certain quantité en &lt;em&gt;up&lt;/em&gt; (capital de départ) qui va vous permettre de commencer à télécharger. Choisissez bien vos premiers téléchargements, le but va être de faire fructifier cette somme de départ, et d'en obtenir une véritable plus-value.&lt;/p&gt;

&lt;p&gt;Ainsi lorsque vous téléchargez et que votre ratio est faible, ou que vous venez de commencer, surveillez toujours vos compteurs &lt;em&gt;up&lt;/em&gt;/&lt;em&gt;down&lt;/em&gt;, et calculez systématiquement votre nouveau ratio après le téléchargement. Le calcul est facile à faire : `u / (d + P_f)` avec `d` le total &lt;em&gt;down&lt;/em&gt;, `u` le total &lt;em&gt;up&lt;/em&gt; et `P_f` le poids du fichier transféré. Vous verrez ainsi rapidement si vous allez tomber dans le rouge après le téléchargement ou pas.&lt;/p&gt;

&lt;p&gt;Si votre ratio après le téléchargement se rapproche de la ligne rouge et que vous n’êtes pas sûr de faire une plus-value intéressante, abstenez vous, et gardez ce fichier pour plus tard.&lt;/p&gt;

&lt;h3&gt;Les règles pour une plus-value intéressante&lt;/h3&gt;

&lt;p&gt;Il y a deux paramètres qui vont influencer la plus-value que vous ferez sur le torrent : sa &lt;strong&gt;popularité&lt;/strong&gt;, et le &lt;strong&gt;nombre de seeders&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;La popularité d'un torrent est le nombre de &lt;em&gt;leechers&lt;/em&gt; potentiels qui vont vouloir obtenir le torrent (mais qui ne sont pas encore là).&lt;/p&gt;

&lt;p&gt;Le nombre de &lt;em&gt;seeders&lt;/em&gt;, vous l'avez compris, c'est le nombre de &lt;em&gt;peers&lt;/em&gt; qui vont être en mesure de fournir un fichier complet.&lt;/p&gt;

&lt;p&gt;Plus le torrent est populaire, plus il est intéressant. Cela veut dire que une fois le téléchargement terminé, vous allez avoir une quantité conséquente de &lt;em&gt;peers&lt;/em&gt; qui vont vous demander des fragments, et donc que vous allez faire monter très rapidement votre compteur de &lt;em&gt;up&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Par contre, plus le torrent a de &lt;em&gt;seeders&lt;/em&gt;, moins il est intéressant, parce que cela veut dire que vous devrez partager la distribution avec les autres &lt;em&gt;peers&lt;/em&gt;. Pire, dans la réalité nous ne sommes pas tous des &lt;em&gt;peers&lt;/em&gt; égaux, et certains &lt;em&gt;peers&lt;/em&gt; ont des vitesses pour fournir du contenu beaucoup plus importante que la vôtre. Ainsi, plus il y a de &lt;em&gt;peers&lt;/em&gt; sur un torrent, plus il y a de chance qu'il y en ai un qui ai une vitesse pour fournir du contenu très importante, et qu'il vous &quot;vole&quot; les &lt;em&gt;leechers&lt;/em&gt; qui auraient pu vous demander des pièces, parce qu'il arrive à satisfaire la demande du &lt;em&gt;leecher&lt;/em&gt; plus rapidement (la loi de l'offre et la demande).&lt;/p&gt;

&lt;h3&gt;Comment calculer le potentiel du torrent&lt;/h3&gt;

&lt;p&gt;Il y a une astuce simple pour trouver les torrents qui vous assureront une plus-value maximale, nous allons faire un modèle. Un modèle en mathématiques est une représentation simplifiée de la réalité issue d'hypothèses de départ. Les modèles sont utilisés en général à des fins de prédiction (on appelle ça une projection).&lt;/p&gt;

&lt;p&gt;On va supposer que chaque &lt;em&gt;seeder&lt;/em&gt; fourni à la même vitesse la même quantité de contenu. Le fichier est donc fourni en parts égales par tous les leechers. S'il y a 3 leechers par exemple, chacun donnera 1/3 du fichier.&lt;/p&gt;

&lt;p&gt;On va supposer que l'on n'a qu'un &lt;em&gt;leecher&lt;/em&gt; à la fois, et qu'à la fin du téléchargement, chaque &lt;em&gt;leecher&lt;/em&gt; devient &lt;em&gt;seeder&lt;/em&gt; pour une durée illimitée.&lt;/p&gt;

&lt;p&gt;Avec ce modèle, après que vous ayez acquis le fichier (il faut bien le télécharger), votre part de &lt;em&gt;up&lt;/em&gt; potentiel sur le fichier sera `P_f / (S_i + 1)` avec `P_f` le poids du fichier téléchargé, et `S_i` le nombre de &lt;em&gt;seeders&lt;/em&gt; initial. Oui, &quot;+1&quot; parce que à présent vous faites partie de &lt;em&gt;seeders&lt;/em&gt; vous aussi.&lt;/p&gt;

&lt;p&gt;À présent, on peut faire des calculs. Dans ce modèle, le premier &lt;em&gt;leecher&lt;/em&gt; qui viendra après votre téléchargement obtiendra de votre part `P_f / (S_i + 1)`&lt;/p&gt;

&lt;p&gt;Le suivant obtiendra `P_f / (S_i + 2)` puisque le &lt;em&gt;leecher&lt;/em&gt; de tout à l'heure est devenu &lt;em&gt;seeder&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Le suivant `P_f / (S_i + 3)`&lt;/p&gt;

&lt;p&gt;Etc.&lt;/p&gt;

&lt;p&gt;Ainsi vous aurez pu envoyer au total : `P_f / (S_i + 1) + P_f / (S_i + 2) + P_f / (S_i + 3) + ...`&lt;/p&gt;

&lt;p&gt;Si on factorise, on obtient la formule suivante : `P_f * ( 1/(S_i + 1) + 1/(S_i + 2) + 1/(S_i + 3) + ...) = P_f * sum_(k=1)^oo(1/ ( S_i + k ))`&lt;/p&gt;

&lt;p&gt;Vous l'aurez compris, c'est les premiers coups qui comptent. Avec un tel modèle, on peut se rendre rapidement compte de l'intérêt pour vous qu'il y ai très peu de &lt;em&gt;seeder&lt;/em&gt; sur le fichier (passer de 1/2 à 1/3 c'est une perte énorme), et l'intérêt d'avoir un nombre de &lt;em&gt;seeders&lt;/em&gt; initial faible, pour éviter que tout le fichier soit dilué dans l'essaim et pour que vous restiez un fournisseur important.&lt;/p&gt;

&lt;p&gt;Attention, le modèle a ses limites :&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;en pratique il est très rare qu'un &lt;em&gt;leecher&lt;/em&gt; soit seul, en général il y en a plusieurs dans l'essaim, et ces &lt;em&gt;leechers&lt;/em&gt; peuvent eux aussi fournir des fragments au cours de leur téléchargement, augmentant ainsi &quot;artificiellement&quot; le nombre de &lt;em&gt;seeders&lt;/em&gt;, le modèle fournit toujours un résultat plus optimiste que dans la réalité.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Le nombre de &lt;em&gt;leechers&lt;/em&gt; potentiels sur un torrent, c'est toujours vous qui le déterminez, c'est un peu comme prendre un pari : ça marche pas à tous les coups.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Attention : la taille du tuyau&lt;/h3&gt;

&lt;p&gt;Attention également à la capacité de votre bande passante en &lt;em&gt;upload&lt;/em&gt; : on peut être tenté, quand on commence à avoir compris le truc, à miser sur plusieurs torrents en même temps, jusqu'à dépasser sa capacité d'envoi. Dans ce cas, vous avez travaillé en pure perte, n'oubliez pas que votre bande passante en &lt;em&gt;upload&lt;/em&gt; est limitée, misez sur un torrent à la fois, et montez en volume petit à petit, il ne sert à rien de devenir un super-&lt;em&gt;seeder&lt;/em&gt; si vous n'êtes pas capable d'assurer le partage correct des fichiers que vous avez déjà.&lt;/p&gt;

&lt;p&gt;De plus, le mécanisme des torrents a tendance à privilégier les &lt;em&gt;peers&lt;/em&gt; qui ont des partages rapides, essayez de rester de ceux là.&lt;/p&gt;

&lt;h3&gt;Meilleur moyen de s'assurer une plus-value maximale : fournir du contenu &quot;gratuit&quot;&lt;/h3&gt;

&lt;p&gt;Tous les décideurs vous le diront, quand on peut faire payer pour quelque chose qu'on a obtenu gratuitement, c'est intéressant quoi qu'il arrive !&lt;/p&gt;

&lt;p&gt;Sur un &lt;em&gt;tracker peer to peer&lt;/em&gt;, quels sont les contenus que l'ont peut obtenir gratuitement ? C'est ceux que l'on n'a pas &quot;payés&quot; sur ce &lt;em&gt;tracker&lt;/em&gt; !&lt;/p&gt;

&lt;p&gt;Ainsi, vous pouvez récupérer du contenu depuis d'autres sources : créations personnelles, agrégation de contenu, compilations, et les proposer sur le &lt;em&gt;tracker&lt;/em&gt;, vous obtiendrez tout le bénéfice du &lt;em&gt;up&lt;/em&gt; si votre contenu a du succès, et vous n'aurez pas dépensé une seule goutte de &lt;em&gt;down&lt;/em&gt; pour l'obtenir. &lt;img src=&quot;/blog/themes/mathedit_material3/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot;&gt;&lt;/p&gt;

&lt;p&gt;Attention ceci dit, cela nécessite de bien lire les règles de publication du &lt;em&gt;tracker&lt;/em&gt;, de soigner la publication, de ne pas proposer n'importe quoi et d'avoir un peu l'intuition de ce qui va marcher ou non (si vous vous faites &lt;a href=&quot;http://fr.wiktionary.org/wiki/basher&quot; hreflang=&quot;fr&quot;&gt;basher&lt;/a&gt; après votre publication, vous pourriez le vivre assez mal).&lt;/p&gt;

&lt;h3&gt;Jouer sur les tendances&lt;/h3&gt;

&lt;p&gt;Attention, ça c'est un secret bien gardé. Comme dans tout marché, il y a des tendances. Seuls les uploadeurs expérimentés les connaissent, mais c'est une loi universelle en marketing : des produits se vendent mieux à certains périodes qu'à d'autres.&lt;/p&gt;

&lt;p&gt;Alors, Quelles sont les tendances d'un &lt;em&gt;tracker&lt;/em&gt; torrent ?&lt;/p&gt;

&lt;p&gt;Déjà il y a la tendance globale, vous pourriez avoir déjà remarqué que vos &lt;em&gt;uploads&lt;/em&gt; ralentissaient en veille de week-end, ou étaient rapide en fin de semaine et débuts de vacances scolaires.&lt;/p&gt;

&lt;p&gt;Mais la tendance la plus intéressante est toujours celle qui s'obtient de manière locale, c'est à dire celle qui est lié à la combinaison &quot;au bon endroit au bon moment&quot;. Ainsi, les téléchargements de contenus qui viennent d’être publié ailleurs font toujours un bond. Si un contenu fait l'objet d'une publicité quelconque, il obtiendra immédiatement un intérêt particulier qui se fera sentir.&lt;/p&gt;

&lt;p&gt;Tout le but du jeu est d'arriver à deviner ces tendances pour récupérer le fichier avant tout le monde, et faire une plus-value maximale sur tous ceux qui voudront l'obtenir après le coup de buzz.&lt;/p&gt;

&lt;p&gt;Vous pouvez aussi créer la tendance : par exemple poser naïvement sur le forum une question à propos des cinq films (libres de droits) cultes de tous les temps, et être prêt à fournir le contenu aux gens qui auront envie de le télécharger après avoir lu les réponses des autres membres sur le forum (mais il faut avoir déjà une idée de la réponse, et avoir préparé les contenus).&lt;/p&gt;

&lt;h3&gt;Une seule règle d'or : la durée&lt;/h3&gt;

&lt;p&gt;Dans une économie en croissance, vous ne pouvez pas perdre d'argent si vous misez sur le long terme.&lt;/p&gt;

&lt;p&gt;Si le &lt;em&gt;tracker&lt;/em&gt; est sain et qu'il a de nombreux utilisateurs, il y aura forcément un moment où vous récupérerez votre mise, les &lt;em&gt;seeders&lt;/em&gt; originaux vont abandonner le fichier une fois leur plus-value faite, et vous vous retrouverez avec un fichier complet, sur un torrent qui est encore intéressant, et avec peu de &lt;em&gt;seeders&lt;/em&gt;. Il suffit d'attendre.&lt;/p&gt;

&lt;p&gt;Bien sûr ce n'est vrai que pour les fichiers &quot;au long cours&quot;, c'est à dire ceux qui conservent une attractivité après les premiers mois de publication (oubliez les webséries).&lt;/p&gt;

&lt;h3&gt;L’essoufflement du modèle ?&lt;/h3&gt;

&lt;p&gt;Tiens, et si on parlait macro-économie ?&lt;/p&gt;

&lt;p&gt;Supposons encore une fois que le ce mécanisme soit un système monétaire. Les &quot;&lt;em&gt;down&lt;/em&gt;&quot; c'est ce que vous dépensez, les &quot;&lt;em&gt;up&lt;/em&gt;&quot; ce que vous vendez. Avec un ratio de 1, vous êtes donc à 0 sur votre compte, inférieur à 1 vous êtes à découvert, et supérieur à 1 vous avez de l'argent, donc du pouvoir d'achat.&lt;/p&gt;

&lt;p&gt;On l'a vu, tout le monde cherche à obtenir un ratio important. Mais supposons que tout le monde ai un ratio proche de 1, que ce ratio soit la limite avant bannissement du compte, et qu'un nouveau fichier arrive : plus personne ne voudra le télécharger ! Les échanges ralentiront au milieu de l'essaim ! Des fichiers resteront sans &lt;em&gt;leechers&lt;/em&gt; ! Plus aucun membre ne pourra remonter son ratio ! Effondrement ! Crise ! Récession ! Mort du tracker !&lt;/p&gt;

&lt;p&gt;Situation utopique ? Pas tellement, il suffit que la taille des fichiers proposés dépasse la capacité de téléchargement (le &quot;&lt;em&gt;up&lt;/em&gt;&quot;) des &lt;em&gt;peers&lt;/em&gt;, et c'est perdu, le réseau est mort (schéma de crise : plus personne ne consomme).&lt;/p&gt;

&lt;p&gt;Alors, comment les &lt;em&gt;trackers&lt;/em&gt; font pour éviter l'asphyxie ? Il y a quatre techniques :&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;Les nouveau arrivant ont un quota de &quot;&lt;em&gt;up&lt;/em&gt;&quot; qui leur est fourni, ça revient à &quot;remettre de l'argent dans le système&quot;, et leur permettre de consommer, et dépenser leur &quot;&lt;em&gt;up&lt;/em&gt;&quot; chez les autres. Les membres bannis peuvent être autorisés à revenir, et ainsi obtenir à nouveau du &quot;&lt;em&gt;up&lt;/em&gt;&quot;, et le réinjecter dans le système en téléchargeant.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Certains torrents ou certains événements donnent lieu à un &lt;strong&gt;freeleech&lt;/strong&gt;, ça revient à télécharger sans que cela compte dans le &quot;&lt;em&gt;down&lt;/em&gt;&quot;, mais que le &quot;&lt;em&gt;up&lt;/em&gt;&quot; compte. Pareil, cela revient à fournir gratuitement du pouvoir d'achat, remettre de l'argent dans le système, sans contrepartie. C'est équivalent à acheter quelque chose sans le payer, mais que le propriétaire de départ soit quand même payé. Vous pouvez alors le revendre et être payé, sans que la personne à qui vous le vendez ne verse un centime, c'est une sorte de subvention permanente.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Certains événements donnent lieu à des &quot;cadeaux&quot; en &quot;&lt;em&gt;up&lt;/em&gt;&quot; : on donne à tous les membres du pouvoir d'achat, comme par magie, il vont donc le consommer avec frénésie, parce que cela a lieu en général au moment où les gens en ont besoin (noël, vacances, les tendances quoi). Vive la planche à billets.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Il arrive que certains &lt;em&gt;trackers&lt;/em&gt; vous fournissent du &quot;&lt;em&gt;up&lt;/em&gt;&quot; quand vous leur donnez des monnaies sonnantes et trébuchantes. Cela revient à remettre de l'argent dans le circuit en apportant de la richesse par un biais transverse qui n'agit pas en temps normal (ouverture des vannes dans une banque centrale).&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;En conclusion&lt;/h3&gt;

&lt;p&gt;Voilà, j'espère vous avoir montré par quelques principes simples comment briller sur les réseaux peer-to-peer.&lt;/p&gt;

&lt;p&gt;J'ajoute que mes divagations monétaires ont un sens, elles ont pour but de vous aider à prendre conscience du fait que BitTorrent est un système basé sur l'échange et que dans un système basé sur l'échange, il faut d'abord être capable de fournir pour pouvoir recevoir. Rien ne sert de courir, il faut seeder à point.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Le monitoring sous Debian avec Nagios et Munin (Puppet en guest star) : de A à Z - Partie 5 : NSCA</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2013/10/13/Le-monitoring-sous-Debian-avec-Nagios-et-Munin-%28Puppet-en-guest-star%29-%3A-de-A-%C3%A0-Z-Partie-5-%3A-NSCA</link>
        <guid isPermaLink="false">urn:md5:d2d96dc10b8ab7767c5eb69d1a427fdf</guid>
        <pubDate>Sun, 13 Oct 2013 16:04:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>debian</category>
                  <category>guide</category>
                  <category>monitoring</category>
                  <category>munin</category>
                  <category>nagios</category>
                  <category>nsca</category>
                  <category>serie-monitoring-nagios-munin-puppet</category>
                  <category>serveur</category>
                <description>&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://uname.pingveno.net/blog/index.php/tag/serie-monitoring-nagios-munin-puppet&quot; rel=&quot;tag&quot;&gt;Voir l&amp;#8217;ensemble des articles de la série&lt;/a&gt; &amp;#8212; &lt;a href=&quot;https://uname.pingveno.net/blog/index.php/post/2013/08/19/Le-monitoring-sous-Debian-avec-Nagios-et-Munin-%28Puppet-en-guest-star%29-%3A-de-A-%C3%A0-Z-Partie-4-%3A-Munin&quot; rel=&quot;prev&quot;&gt;Voir l&amp;#8217;article précédent&amp;#160;: Munin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cet article est le dernier de la série.&lt;/p&gt;
&lt;p&gt;Dans l&amp;#8217;article précédent, nous avons vu comment configurer Munin pour qu&amp;#8217;il collecte des données et affiche ses graphes. Il nous reste à présent à configurer la communication entre Munin et Nagios, grâce à l&amp;#8217;agent NSCA.&lt;/p&gt;          &lt;h3&gt;Introduction&lt;/h3&gt;
&lt;h4&gt;Tests passifs, tests actifs&lt;/h4&gt;
&lt;p&gt;Nagios distingue deux type de tests à effectuer sur les hôtes, par le biais de ses déclarations de services&amp;#160;: les tests actifs et les tests passifs.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Les &lt;strong&gt;tests actifs&lt;/strong&gt; sont les tests réalisés par Nagios via un de ses plugins&amp;#160;: ça peut être le test d&amp;#8217;un port ou le contrôle de la réponse d&amp;#8217;un service. Ces tests sont synchrones (effectués à intervalle fixe).&lt;/li&gt;
&lt;li&gt;Les &lt;strong&gt;tests passifs&lt;/strong&gt; sont les tests dont les résultats sont reportés à Nagios par d&amp;#8217;autres programmes&amp;#160;: là ça sera NSCA. Ces tests sont asynchrones (effectués &amp;#8220;quand on peut&amp;#8221;, pas forcément régulièrement).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;NSCA&lt;/h4&gt;
&lt;p&gt;NSCA est littéralement «&amp;#160;Nagios Service Check Acceptor&amp;#160;». C&amp;#8217;est un démon qui tourne en arrière plan, et qui va recevoir les résultats des tests passifs, pour le retransmettre à Nagios.&lt;/p&gt;
&lt;p&gt;Pour plus de simplicité, NSCA sera installé sur la même machine que le serveur Maître de Nagios.&lt;/p&gt;
&lt;h4&gt;Munin &amp;lt;=&amp;gt; NSCA&lt;/h4&gt;
&lt;p&gt;Le serveur maître de Munin va communiquer à NSCA les résultats des tests grâce à la commande &lt;code&gt;send_nsca&lt;/code&gt;, utilisant le protocole NSCA.&lt;/p&gt;
&lt;p&gt;Pour encore plus de simplicité, nous allons supposer que le serveur maître de Munin et le serveur NSCA (et donc Nagios aussi) se trouvent sur la même machine (comme ça, pas besoin de chiffrer les communications entre Munin et NSCA).&lt;/p&gt;
&lt;h4&gt;NSCA &amp;lt;=&amp;gt; Nagios&lt;/h4&gt;
&lt;p&gt;NSCA va communiquer avec Nagios via un tube nommé, c&amp;#8217;est à dire un fichier dans lequel il va écrire, et qui va être lu par Nagios à intervalle régulier.&lt;/p&gt;
&lt;p&gt;On peut faire porter ce tube par une socket pour réaliser une installation de NCA et Nagios sur deux machines différentes, mais ce n&amp;#8217;est pas le sujet de cet article.&lt;/p&gt;
&lt;h3&gt;Installation et configuration de NSCA&lt;/h3&gt;
&lt;h4&gt;Installation&lt;/h4&gt;
&lt;p&gt;NSCA se trouve dans les dépôts&amp;#160;: &lt;code&gt;sudo apt-get install nsca&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Configuration&lt;/h4&gt;
&lt;p&gt;La configuration de NSCA se trouve dans &lt;code&gt;/etc/nsca.cfg&lt;/code&gt;. Voici les valeurs à retenir&amp;#160;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;#Ne jouez pas à changer ça&lt;br /&gt;pid_file=/var/run/nsca.pid&lt;br /&gt;&lt;br /&gt;# Notre master Munin se trouve sur la même machine, donc on bind sur 127.0.0.1 et ça suffit&lt;br /&gt;server_address=127.0.0.1&lt;br /&gt;&lt;br /&gt;# Il est important que cet utilisateur puisse écrire dans le tube nommé pour communiquer avec Nagios !&lt;br /&gt;nsca_user=nagios&lt;br /&gt;&lt;br /&gt;# Ce fichier spécial devra aussi être mentionné dans la configuration de Nagios, et le nsca_user doit pouvoir y écrire&lt;br /&gt;command_file=/var/lib/nagios3/rw/nagios.cmd&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Ouvrez le fichier &lt;code&gt;/etc/init.d/nsca&lt;/code&gt; et vérifiez que le &lt;code&gt;PIDFILE&lt;/code&gt; est le même que celui de la configuration&amp;#160;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;PIDFILE=&quot;/var/run/nsca.pid&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3&gt;
Configuration de Munin&lt;/h3&gt;
&lt;p&gt;Ouvrez le fichier &lt;code&gt;/etc/munin/munin.conf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Normalement, vus avez déjà configuré un &amp;#8220;contact&amp;#8221; pour être avertit en cas de défaillance d&amp;#8217;un service contrôlé par Munin. Nous allons à la suite en rajouter un second&amp;#160;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;contact.nagios.command /usr/sbin/send_nsca -H localhost&lt;br /&gt;contact.nagios.always_send ok warning critical&lt;br /&gt;contact.nagios.max_messages 1&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Petite information qui vous fera gagner une journée de travail&amp;#160;: &lt;code&gt;max_messages&lt;/code&gt; doit être à 1 sous Debian 7. Ceci parce que le NSCA des dépôts a été mis&amp;nbsp; jour, et &lt;a hreflang=&quot;en&quot; href=&quot;http://munin-monitoring.org/ticket/1299&quot;&gt;est devenu incompatible avec la version du protocole NSCA implémentée par Munin&lt;/a&gt;. On peut bidouiller NSCA pour corriger ça, mais la solution de contournement la plus simple est de n&amp;#8217;envoyer qu&amp;#8217;un message à la fois à NSCA.&lt;/p&gt;
&lt;p&gt;Ici Munin enverra les résultats &amp;#8220;&lt;code&gt;OK&lt;/code&gt;&amp;#8221;, &amp;#8220;&lt;code&gt;Warning&lt;/code&gt;&amp;#8221; et &amp;#8220;&lt;code&gt;Critical&lt;/code&gt;&amp;#8221; de ses module. Nous allons également faire en sorte qu&amp;#8217;un Munin muet déclenche une erreur &lt;code&gt;UNKNOWN&lt;/code&gt; chez Nagios, pour s&amp;#8217;assurer que le &amp;#8220;&lt;code&gt;OK&lt;/code&gt;&amp;#8221; correspond bien à un test &amp;#8220;&lt;code&gt;OK&lt;/code&gt;&amp;#8221; et non à l&amp;#8217;absence de &amp;#8220;&lt;code&gt;Warning&lt;/code&gt;&amp;#8221; et de &amp;#8220;&lt;code&gt;Critical&lt;/code&gt;&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Ok, on triche un peu. En fait, les tests de Munin sont synchrones. On a donc un mécanisme synchrone (Munin) qui va envoyer de manière synchrone les résultats au mécanisme asynchrone de collecte (NSCA). L&amp;#8217;aspect synchrone va nous permettre de détecter le moment où on aurait dût recevoir un résultat, et alerter si ce n&amp;#8217;a pas été le cas.&lt;/p&gt;
&lt;h3&gt;Configuration de Nagios&lt;/h3&gt;
&lt;h4&gt;Communication avec NSCA&lt;/h4&gt;
&lt;p&gt;Ouvrez le fichier de configuration &lt;code&gt;/etc/nagios3/nagios.cfg&lt;/code&gt; et vérifiez que la ligne suivante est bien présente et dé-commentée&amp;#160;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;command_file=/var/lib/nagios3/rw/nagios.cmd&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Les services&lt;/h4&gt;
&lt;p&gt;Si vous avez déjà redémarré les services après chaque modification de la configuration, vous pourrez voir dans les logs de Nagios les erreurs suivantes&amp;#160;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;[1381670602] Warning:&amp;nbsp; Passive check result was received for service 'some service' on host 'hostname.ext', but the service could not be found!&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La bonne nouvelle c&amp;#8217;est que Nagios reçoit les notifications de NSCA&amp;#160;!&lt;/p&gt;
&lt;p&gt;La mauvaise c&amp;#8217;est qu&amp;#8217;il ne peut pas le lier à un service et à un hôte, parce qu&amp;#8217;ils ne sont tout simplement pas déclarés. Il va nous falloir déclarer un service Nagios pour chaque service Munin que nous lui transmettons, sinon celui-ci ne sera pas capable de le traiter.&lt;/p&gt;
&lt;p&gt;Créez le fichier &lt;code&gt;/etc/nagios3/conf.d/services/munin-services.cfg&lt;/code&gt; et placez à l’intérieur la configuration suivante&amp;#160;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;# generic service template definition&lt;br /&gt;define service{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; generic-munin-service ; The 'name' of this service template&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; use generic-service&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; check_command&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return-unknown!&quot;No Data from passive check&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; active_checks_enabled&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Active service checks are disabled&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; check_freshness&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; freshness_threshold&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 360&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flap_detection_options&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; max_check_attempts&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; register&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;first_notification_delay&amp;nbsp; &amp;nbsp; &amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Delay first notification for false positives (will execute 2 checks : munin sends 1 check every 5 minutes)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;define service {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hostgroup_name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; munin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; service_description&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Disk latency per device :: Average latency for /dev/sda&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; use generic-munin-service&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; notification_interval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 ; set &amp;gt; 0 if you want to be renotified&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;define service {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; service_description&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Disk latency per device :: Average latency for /dev/sdb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; use generic-munin-service&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; notification_interval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 ; set &amp;gt; 0 if you want to be renotified&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;define service {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hostgroup_name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; munin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; service_description&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Disk usage in percent&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; use generic-munin-service&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; notification_interval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 ; set &amp;gt; 0 if you want to be renotified&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;define service {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hostgroup_name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; munin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; service_description&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inode usage in percent&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; use generic-munin-service&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; notification_interval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 ; set &amp;gt; 0 if you want to be renotified&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;define service {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hostgroup_name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; munin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; service_description&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; File table usage&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; use generic-munin-service&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; notification_interval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 ; set &amp;gt; 0 if you want to be renotified&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;define service {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hostgroup_name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; munin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; service_description&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; eth0 errors&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; use generic-munin-service&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; notification_interval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 ; set &amp;gt; 0 if you want to be renotified&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;define service {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hostgroup_name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; munin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; service_description&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exim Mailqueue&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; use generic-munin-service&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; notification_interval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 ; set &amp;gt; 0 if you want to be renotified&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Ce fichier est bien évidemment à compléter selon les plugins et les checks que vous avez activé dans Munin. Le &lt;code&gt;service_description&lt;/code&gt; est le nom complet du service dans Munin.&lt;/p&gt;
&lt;p&gt;La configuration du template générique nous assure qu&amp;#8217;une erreur &amp;#8220;&lt;code&gt;UNKNOWN : No data from passive check&lt;/code&gt;&amp;#8221; sera retournée en cas d&amp;#8217;absence de résultat après le délai du &amp;#8220;&lt;code&gt;freshness_threshold&lt;/code&gt;&amp;#8221;, avec 2 essais avant d&amp;#8217;alerter du problème.&lt;/p&gt;
&lt;h4&gt;Les groupes d&amp;#8217;hôtes&lt;/h4&gt;
&lt;p&gt;Les plus attentifs d&amp;#8217;entre-vous ont remarqué la présence d&amp;#8217;un hostgroup dans la configuration, mais nous ne l&amp;#8217;avons pas encore déclaré. Allons-y, rajoutez dans le fichier &lt;code&gt;/etc/nagios3/conf.d/groups.cfg&lt;/code&gt;&amp;#160;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;# Hostgroup for Munin&lt;br /&gt;define hostgroup {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hostgroup_name&amp;nbsp; munin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; alias&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Munin reporting clients&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Les hôtes&lt;/h4&gt;
&lt;p&gt;Maintenant qu&amp;#8217;on a le &lt;code&gt;hostgroup&lt;/code&gt;, il ne reste plus qu&amp;#8217;à modifier vos fichiers &lt;code&gt;/etc/nagios3/conf.d/hosts/*.cfg&lt;/code&gt; pour rajouter le &lt;code&gt;hostgroup&lt;/code&gt; sur les hôtes sur lesquels &lt;code&gt;munin-node&lt;/code&gt; est installé.&lt;/p&gt;
&lt;h3&gt;Débuggage&lt;/h3&gt;
&lt;p&gt;En principe, après avoir redémarré tous les services, vous devriez recevoir assez vite les notifications de NSCA et voir passer vos indicateurs du gris vers le vert dans Nagios.&lt;/p&gt;
&lt;p&gt;Si ce n&amp;#8217;est pas le cas et que ces derniers passent au orange, c&amp;#8217;est qu&amp;#8217;il y a un problème de communication entre Nagios et Munin. Mon problème principal a été le non démarrage de NSCA au démarrage de la machine, pour de histoires de PID que le script de démarrage n&amp;#8217;arrivait à écrire ou à supprimer.&lt;/p&gt;
&lt;p&gt;Il arrive aussi que le tube nommé soit inaccessible en écriture à l’utilisateur qui lance NSCA, vérifiez bien que l&amp;#8217;utilisateur &lt;code&gt;nagios&lt;/code&gt; est celui qui fait tourner à la fois Nagios et NSCA.&lt;/p&gt;
&lt;p&gt;Enfin, pour vérifier que le problème ne vient pas d&amp;#8217;une mauvaise configuration de Nagios, faites un envoi de données &amp;#8220;manuellement&amp;#8221; avec la commande &lt;code&gt;send_nsca&lt;/code&gt;&amp;#160;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;echo -e &quot;monhote.ext\tNom complet du service Munin\t1\t0\n\n&quot; | /usr/sbin/send_nsca -H localhost&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3&gt;Pour conclure&lt;/h3&gt;
&lt;p&gt;En conclusion, nous avons terminé notre installation de Munin, Nagios, et NSCA&amp;#160;! Munin communique à présent ses alertes à Nagios, et Nagios est capable d&amp;#8217;alerter si ces alertes ne sont pas remontées. Le reste est dans les billets précédents&amp;#160;! &lt;img src=&quot;/blog/themes/mathedit_material3/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot;&gt;&lt;/p&gt;
&lt;p&gt;N&amp;#8217;hésitez pas à me faire part dans les commentaires des problèmes que vous pourriez rencontrer en déroulant cette suite d&amp;#8217;articles, ou à me corriger si vous constatez des erreurs dans la série d&amp;#8217;article. &lt;img src=&quot;/blog/themes/mathedit_material3/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://uname.pingveno.net/blog/index.php/tag/serie-monitoring-nagios-munin-puppet&quot; rel=&quot;tag&quot;&gt;Voir l&amp;#8217;ensemble des articles de la série&lt;/a&gt;.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Configure Munin graphs with Nginx, FastCGI, and Debian 7</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2013/08/25/Configure-Munin-graphs-with-Nginx-and-Debian-7</link>
        <guid isPermaLink="false">urn:md5:d14a00a2d515953f6b51a757207912d8</guid>
        <pubDate>Sun, 25 Aug 2013 11:40:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>debian</category>
                  <category>fastcgi</category>
                  <category>munin</category>
                  <category>nginx</category>
                  <category>server</category>
                  <category>wheezy</category>
                <description>&lt;p&gt;Setting up Munin with Nginx can be a little harsh. Here is the ready-to-go solution for Debian Wheezy.&lt;/p&gt;          &lt;p&gt;I will make the assumption that you have already configured Munin and Munin-node. I also assume that you didn&amp;#8217;t change the CGI and CRON params in the Munin default configuration provided by the Debian package.&lt;/p&gt;

&lt;h3&gt;Abstract&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;In the default configuration, the HTML files for Munin graphes are generated by Cron, and are stored in &lt;code&gt;/var/cache/munin/www/&lt;/code&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;To display Munin graphs, you have to call the &lt;code&gt;munin-cgi-graph&lt;/code&gt; program located in &lt;code&gt;/usr/lib/munin/cgi/&lt;/code&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;To display Munin extra HTML, you have to call the &lt;code&gt;munin-cgi-html&lt;/code&gt; program located in &lt;code&gt;/usr/lib/munin/cgi/&lt;/code&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;The configuration I use is an adapted version of Apache configuration delivered with the Debian package at &lt;code&gt;/etc/munin/apache2.conf&lt;/code&gt;.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Unlike Apache, Nginx does not spawn CGI processes, you will have to make a startup script to create the appropriate sockets.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;The spawned sockets run with the munin user, you will have to chown some logfiles and change logrotate configuration.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Installation&lt;/h3&gt;

&lt;p&gt;Let&amp;#8217;s start with a basic Ningx installation&amp;#160;: &lt;code&gt;apt-get install nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, add &lt;code&gt;fcgiwrap&lt;/code&gt;, the Ningx CGI wrapper&amp;#160;: &lt;code&gt;apt-get install fcgiwrap&lt;/code&gt;. Note that in the dependencies, you have &lt;code&gt;spawn-fcgi&lt;/code&gt;. we will use it to create the CGI sockets.&lt;/p&gt;

&lt;h3&gt;The CGI sockets&lt;/h3&gt;

&lt;p&gt;To spawn the &lt;code&gt;munin-cgi-graph&lt;/code&gt; and &lt;code&gt;munin-cgi-html&lt;/code&gt; processes, create a startup script at &lt;code&gt;/etc/init.d/munin-fastcgi&lt;/code&gt;&amp;#160;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;#! /bin/sh&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; munin-fastcgi&lt;br /&gt;
# Required-Start:&amp;nbsp;&amp;nbsp;&amp;nbsp; $remote_fs $network&lt;br /&gt;
# Required-Stop:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $remote_fs $network&lt;br /&gt;
# Default-Start:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 3 4 5&lt;br /&gt;
# Default-Stop:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 1 6&lt;br /&gt;
# Short-Description: starts munin-fastcgi&lt;br /&gt;
# Description:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Spawn Munin FCGI sockets for Web access&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# munin-fastcgi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Startup script for Munin CGI services&lt;br /&gt;
#&lt;br /&gt;
# chkconfig: - 84 15&lt;br /&gt;
# description: Loading Munin CGI services using spawn-cgi&lt;br /&gt;
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTML files and CGI.&lt;br /&gt;
#&lt;br /&gt;
# Author:&amp;nbsp; Ryan Norbauer &amp;lt;ryan.norbauer@gmail.com&amp;gt;&lt;br /&gt;
# Modified:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Geoffrey Grosenbach http://topfunky.com&lt;br /&gt;
# Modified:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; David Krmpotic http://davidhq.com&lt;br /&gt;
# Modified:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Kun Xi http://kunxi.org&lt;br /&gt;
# Modified:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://drumcoder.co.uk/&lt;br /&gt;
# Modified:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://uname.pingveno.net/&lt;br /&gt;
&lt;br /&gt;
DAEMON=/usr/bin/spawn-fcgi&lt;br /&gt;
FCGI_GRAPH_SOCK=/var/run/munin/fastcgi-munin-graph.sock&lt;br /&gt;
FCGI_HTML_SOCK=/var/run/munin/fastcgi-munin-html.sock&lt;br /&gt;
WWW_USER=www-data&lt;br /&gt;
FCGI_USER=munin&lt;br /&gt;
FCGI_GROUP=munin&lt;br /&gt;
FCGI_SPAWN_GRAPH=/usr/lib/munin/cgi/munin-cgi-graph&lt;br /&gt;
FCGI_SPAWN_HTML=/usr/lib/munin/cgi/munin-cgi-html&lt;br /&gt;
PIDFILE_GRAPH=/var/run/munin/fastcgi-munin-graph.pid&lt;br /&gt;
PIDFILE_HTML=/var/run/munin/fastcgi-munin-html.pid&lt;br /&gt;
DESC=&quot;Munin FCGI for Graph an HTML&quot;&lt;br /&gt;
&lt;br /&gt;
# Gracefully exit if the package has been removed.&lt;br /&gt;
test -x $DAEMON || exit 0&lt;br /&gt;
test -x $FCGI_SPAWN_GRAPH || exit 0&lt;br /&gt;
test -x $FCGI_SPAWN_HTML || exit 0&lt;br /&gt;
&lt;br /&gt;
start() {&lt;br /&gt;
&amp;nbsp; $DAEMON -s $FCGI_GRAPH_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_GRAPH $FCGI_SPAWN_GRAPH 2&amp;gt; /dev/null || echo &quot;Graph Already running&quot;&lt;br /&gt;
&amp;nbsp; $DAEMON -s $FCGI_HTML_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_HTML $FCGI_SPAWN_HTML 2&amp;gt; /dev/null || echo &quot;HTML Already running&quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
stop() {&lt;br /&gt;
&amp;nbsp; kill -QUIT `cat $PIDFILE_GRAPH` || echo &quot;Graph not running&quot;&lt;br /&gt;
&amp;nbsp; kill -QUIT `cat $PIDFILE_HTML` || echo &quot;HTML Not running&quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
restart() {&lt;br /&gt;
&amp;nbsp; kill -HUP `cat $PIDFILE_GRAPH` || echo &quot;Can't reload Graph&quot;&lt;br /&gt;
&amp;nbsp; kill -HUP `cat $PIDFILE_HTML` || echo &quot;Can't reload HTML&quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case &quot;$1&quot; in&lt;br /&gt;
&amp;nbsp; start)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;Starting $DESC: &quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; start&lt;br /&gt;
&amp;nbsp; ;;&lt;br /&gt;
&amp;nbsp; stop)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;Stopping $DESC: &quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; stop&lt;br /&gt;
&amp;nbsp; ;;&lt;br /&gt;
&amp;nbsp; restart|reload)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;Restarting $DESC: &quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; stop&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; # One second might not be time enough for a daemon to stop,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; # if this happens, d_start will fail (and dpkg will break if&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; # the package is being upgraded). Change the timeout if needed&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; # be, or change d_stop to have start-stop-daemon use --retry.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Notice that using --retry slows down the shutdown process somewhat.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; sleep 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; start&lt;br /&gt;
&amp;nbsp; ;;&lt;br /&gt;
&amp;nbsp; *)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;Usage: $SCRIPTNAME {start|stop|restart|reload}&quot; &amp;gt;&amp;amp;2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; exit 3&lt;br /&gt;
&amp;nbsp; ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
exit $?&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Don&amp;#8217;t forget to set it executable&amp;#160;: &lt;code&gt;chmod +x /etc/init.d/munin-fastcgi&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Finally, add your startup script to runlevels&amp;#160;: &lt;code&gt;update-rc.d munin-fastcgi defaults&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And start it&amp;#160;: &lt;code&gt;service munin-fastcgi start&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;Fix for log files&lt;/h3&gt;

&lt;p&gt;The log files are owned by &lt;code&gt;www-data&lt;/code&gt; user. In our configuration, the CGI process is run by &lt;code&gt;munin&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Change the owner of logfiles&amp;#160;: &lt;code&gt;chown munin /var/log/munin/munin-cgi-graph.log &amp;amp;&amp;amp; chown munin /var/log/munin/munin-cgi-html.log&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Change the logrotate configuration&amp;#160;: &lt;code&gt;open /etc/logrotate.d/munin&lt;/code&gt; and change &lt;code&gt;create 640 www-data adm&lt;/code&gt; to &lt;code&gt;create 640 munin adm&lt;/code&gt; for the two logfiles.&lt;/p&gt;

&lt;h3&gt;Nginx VirtualHost configuration&lt;/h3&gt;

&lt;p&gt;Create the following /etc/nginx/sites-available/munin&amp;#160;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;server {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #listen&amp;nbsp;&amp;nbsp; 80; ## listen for ipv4; this line is default and implied&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #listen&amp;nbsp;&amp;nbsp; [::]:80 default_server ipv6only=on; ## listen for ipv6&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Make site accessible from http://localhost/&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server_name localhost;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Here, the whole vhost has auth requirements.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # You can duplicate it to the graph and html locations if you have&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # something else that doesn't need auth.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; auth_basic&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;Private access&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; auth_basic_user_file&amp;nbsp; /etc/munin/munin_htpasswd;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; location /munin/ {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alias /var/cache/munin/www/;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # not authenticated =&amp;gt; no rewrite (back to auth)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($remote_user ~ ^$) { break; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # is on the right subtree ?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set $ok &quot;no&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # admin can see it all&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($remote_user = 'admin') { set $ok &quot;yes&quot;; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # only allow given path&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($uri ~ /munin/([^/]*)) { set $path $1; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($path = $remote_user) { set $ok &quot;yes&quot;; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # not allowed here ? redirect them where they should land&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($ok != &quot;yes&quot;) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # redirect to where they should be&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rewrite / /munin/$remote_user/ redirect;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; location ^~ /munin-cgi/munin-cgi-graph/ {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # not authenticated =&amp;gt; no rewrite (back to auth)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($remote_user ~ ^$) { break; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # is on the right subtree ?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set $ok &quot;no&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # admin can see it all&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($remote_user = 'admin') { set $ok &quot;yes&quot;; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # only allow given path&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($uri ~ /munin-cgi/munin-cgi-graph/([^/]*)) { set $path $1; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($path = $remote_user) { set $ok &quot;yes&quot;; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # not allowed here ? redirect them where they should land&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($ok != &quot;yes&quot;) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # redirect to where they should be&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rewrite / /munin-cgi/munin-cgi-graph/$remote_user/ redirect;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fastcgi_param PATH_INFO $fastcgi_path_info;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fastcgi_pass unix:/var/run/munin/fastcgi-munin-graph.sock;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; include fastcgi_params;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; location&amp;nbsp; ^~ /munin-cgi/munin-cgi-html/ {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # not authenticated =&amp;gt; no rewrite (back to auth)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($remote_user ~ ^$) { break; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # is on the right subtree ?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set $ok &quot;no&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # admin can see it all&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($remote_user = 'admin') { set $ok &quot;yes&quot;; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # only allow given path&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($uri ~ /munin-cgi/munin-cgi-html/([^/]*)) { set $path $1; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($path = $remote_user) { set $ok &quot;yes&quot;; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # not allowed here ? redirect them where they should land&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($ok != &quot;yes&quot;) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # redirect to where they should be&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rewrite / /munin-cgi/munin-cgi-html/$remote_user/ redirect;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fastcgi_split_path_info ^(/munin-cgi/munin-cgi-html)(.*);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fastcgi_param PATH_INFO $fastcgi_path_info;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fastcgi_pass unix:/var/run/munin/fastcgi-munin-html.sock;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; include fastcgi_params;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; location /munin/static/ {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alias /etc/munin/static/;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Don&amp;#8217;t forget to enable your VirtualHost&amp;#160;: &lt;code&gt;ln -s /etc/nginx/sites-available/munin /etc/nginx/sites-enabled/munin&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And to restart Nginx&amp;#160;: &lt;code&gt;service nginx restart&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;Htaccess creation&lt;/h3&gt;

&lt;p&gt;To protect our stats, the VirtualHost includes HTTP authentication. But you have to create the htpasswd file in &lt;code&gt;/etc/munin/munin_htpasswd&lt;/code&gt;. To do so, you can install Apache Utils.&lt;/p&gt;

&lt;p&gt;Install Apache utils&amp;#160;: &lt;code&gt;apt-get install apache2-utils&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create the htpasswd&amp;#160;: &lt;code&gt;touch /etc/munin/munin_htpasswd &amp;amp;&amp;amp; chown root:www-data /etc/munin/munin_htpasswd &amp;amp;&amp;amp; chmod 640 /etc/munin/munin_htpasswd&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And add your admin password&amp;#160;: &lt;code&gt;htpasswd /etc/munin/munin_htpasswd&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Your Munin installation will be available at &lt;a href=&quot;http://localhost/munin/&quot;&gt;http://localhost/munin/&lt;/a&gt; with your admin password.&lt;/p&gt;

&lt;p&gt;I hope I saved you from a headhache. &lt;img src=&quot;/blog/themes/mathedit_material3/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot;&gt;&lt;/p&gt;

&lt;h4&gt;Sources&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;http://munin.readthedocs.org/en/latest/example/webserver/nginx.html&quot;&gt;http://munin.readthedocs.org/en/latest/example/webserver/nginx.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://drumcoder.co.uk/blog/2010/aug/04/debian-initd-script-fcgi/&quot;&gt;http://drumcoder.co.uk/blog/2010/aug/04/debian-initd-script-fcgi/&lt;/a&gt;&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Personne ne comprend l'informatique - Partie 4 : Programmes et compilation</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2013/08/20/Personne-ne-comprend-l-informatique-Partie-4-%3A-Programmes-et-compilation</link>
        <guid isPermaLink="false">urn:md5:081155931b8282d7e2e5909c342701ca</guid>
        <pubDate>Fri, 23 Aug 2013 18:40:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>compilation</category>
                  <category>informatique</category>
                  <category>serie-cours-informatique</category>
                <description>&lt;p&gt;&lt;a href=&quot;http://uname.pingveno.net/blog/index.php/tag/serie-cours-informatique&quot;&gt;Voir l&amp;#8217;ensemble des articles sur ce sujet&amp;#160;: Personne ne comprend l&amp;#8217;informatique&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://uname.pingveno.net/blog/index.php/post/2013/08/21/Personne-ne-comprend-l-informatique-Partie-0-%3A-Lexique&quot;&gt;Voir le lexique&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Dans le fond, comment ça s&amp;#8217;écrit un programme&amp;#160;?&lt;/p&gt;          &lt;h3&gt;Programmes et algorithmes&lt;/h3&gt;
&lt;p&gt;Nous l&amp;#8217;avons vu, un programme est une suite d&amp;#8217;instructions écrites dans le but de réaliser un traitement.&lt;/p&gt;
&lt;p&gt;Un programme a des points d&amp;#8217;entrée et de sortie de l&amp;#8217;information, et les instructions sont rédigées dans un certain ordre avec certaines conditions pour pour voir effectuer le traitement. Ces instructions peuvent être très simples ou alors très complexes.&lt;/p&gt;
&lt;p&gt;Pour écrire un programme, on utilise un moyen de description que l&amp;#8217;on appelle l&amp;#8217;algorithme. Un algorithme c&amp;#8217;est une suite d&amp;#8217;instructions reliées entre elles avec des conditions, décrivant le comportement du programme dans toutes les situations, et l&amp;#8217;ensemble des sorties possibles pour toutes les entrées possibles. Ça implique forcément que &lt;strong&gt;le nombre d&amp;#8217;entrées différentes que peut traiter un programme est un nombre fini&lt;/strong&gt;. Il faut que tous les cas d&amp;#8217;entrée soient décris dans le programme comme soit des cas d&amp;#8217;échec (sortie &amp;#8220;poubelle&amp;#8221;), soit des cas qui renvoient de l&amp;#8217;information transformée sur les sorties.&lt;/p&gt;
&lt;p&gt;Écrire un algorithme est similaire à la rédaction d&amp;#8217;une solution à un problème mathématique. Une fois qu&amp;#8217;on a la solution pour transformer les données, il faut la décrire, en reprenant les données de départ, et en les transformant pour obtenir les données d&amp;#8217;arrivée.&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;algorigramme-01.png&quot; href=&quot;https://uname.pingveno.net/blog/public/cours-informatique/algorigramme-01.png&quot;&gt;&lt;img title=&quot;algorigramme-01.png, août 2013&quot; style=&quot;margin: 0 auto; display: block; border: solid thin black;&quot; alt=&quot;algorigramme-01.png&quot; src=&quot;https://uname.pingveno.net/blog/public/cours-informatique/.algorigramme-01_m.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;center&gt;Un algorithme simple avec deux entrées numériques et une sortie.&lt;/center&gt;
&lt;p&gt;L&amp;#8217;image ci-dessus est un algorigramme, c&amp;#8217;est un schéma décrivant un algorithme simple, comme il pourrait s&amp;#8217;exécuter sur un ordinateur. Ce programme ne fait pas grand chose d&amp;#8217;utile, et il est très simple, mais c&amp;#8217;est un exemple.&lt;/p&gt;
&lt;h3&gt;Langages et compilation&lt;/h3&gt;
&lt;p&gt;Comment transformer un algorithme en instructions compréhensibles par un ordinateur&amp;#160;? Il faut savoir que le processeur d&amp;#8217;un ordinateur ne sait exécuter que des opérations simples (lire de la mémoire, réaliser des calculs avec la mémoire, etc). Ces instructions sont des codes binaires qui sont envoyés au processeur. Bon, sauf que les informaticiens n&amp;#8217;écrivent pas directement de codes binaires pour le processeur.&lt;/p&gt;
&lt;p&gt;Pour écrire un programme, les informaticiens utilisent ce que l&amp;#8217;on appelle un langage. Un langage informatique est un ensemble de mots (écrits avec des vraies lettres) que l&amp;#8217;on assemble pour décrire l&amp;#8217;algorithme. Voici un petit exemple de notre algorithme dans un langage informatique qui pourrait exister&amp;#160;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;DÉBUT&lt;br /&gt;Si entree1 = 0 alors sortie1 = 0, FIN&lt;br /&gt;Si entree1 &amp;lt; 0 alors val1= entree1 - 2&lt;br /&gt;Si entree1 &amp;gt; 0 alors val1 = entree1 + 2&lt;br /&gt;val2 = entree2 + 3&lt;br /&gt;val3 = val1 + val2&lt;br /&gt;sortie1 = val3&lt;br /&gt;FIN&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Bien évidemment, un processeur ne comprend pas le français, donc il ne comprend pas ce que veut dire &amp;#8220;Si entree1 = 0&amp;#8221;. Pour transformer ce texte en programme, il faut réaliser une traduction que l&amp;#8217;on appelle la compilation.&lt;/p&gt;
&lt;p&gt;La compilation est le processus par lequel un texte écrit dans un langage informatique devient un programme exécutable par un ordinateur. Chaque &amp;#8220;phrase&amp;#8221; est traduite en code compréhensible par le processeur, et le programme peut se lancer. Ce processus peut paraître simple, mais il y là aussi des aspects fondamentaux et formels pour que ce processus puisse avoir lieu (syntaxe, optimisations, etc).&lt;/p&gt;
&lt;p&gt;C&amp;#8217;est grâce à de tels outils que l&amp;#8217;on arrive à écrire sans trop d&amp;#8217;efforts des programmes efficaces dans la majorité des cas.&lt;/p&gt;
&lt;h3&gt;En conclusion&lt;/h3&gt;
&lt;p&gt;Nous avons vu que les programmes se modélisent sous forme d&amp;#8217;algorithme et s&amp;#8217;écrivent ensuite dans un langage compréhensible pour être ensuite traduits pour être exécutés par l&amp;#8217;ordinateur.&lt;/p&gt;
&lt;p&gt;La partie suivante &amp;#8230; Je n&amp;#8217;ai pas encore décidé quoi mettre dedans, et pourtant il y a encore plein de choses à dire&amp;#160;!&lt;/p&gt;
&lt;p&gt;Restez attentifs (&lt;a hreflang=&quot;fr&quot; href=&quot;https://uname.pingveno.net/blog/index.php/feed/rss2&quot;&gt;abonnez-vous au blog&lt;/a&gt;), ou &lt;a hreflang=&quot;fr&quot; href=&quot;https://uname.pingveno.net/blog/index.php/contact&quot;&gt;proposez moi de nouveaux sujets&lt;/a&gt;, les articles suivants n&amp;#8217;en seront que plus intéressants. &lt;img src=&quot;/blog/themes/mathedit_material3/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://uname.pingveno.net/blog/index.php/tag/serie-cours-informatique&quot;&gt;Voir l&amp;#8217;ensemble des articles sur ce sujet&amp;#160;: Personne ne comprend l&amp;#8217;informatique&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://uname.pingveno.net/blog/index.php/post/2013/08/21/Personne-ne-comprend-l-informatique-Partie-0-%3A-Lexique&quot;&gt;Voir le lexique&lt;/a&gt;.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Personne ne comprend l'informatique - Partie 3 : Système d'exploitation et programmes</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2013/08/20/Personne-ne-comprend-l-informatique-Partie-3-%3A-Syst%C3%A8me-d-exploitation-et-programmes</link>
        <guid isPermaLink="false">urn:md5:a5d4483a047c00d5ed96b34c35dc2834</guid>
        <pubDate>Thu, 22 Aug 2013 16:30:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>informatique</category>
                  <category>serie-cours-informatique</category>
                <description>&lt;p&gt;&lt;a href=&quot;http://uname.pingveno.net/blog/index.php/tag/serie-cours-informatique&quot;&gt;Voir l&amp;#8217;ensemble des articles sur ce sujet&amp;#160;: Personne ne comprend l&amp;#8217;informatique&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://uname.pingveno.net/blog/index.php/post/2013/08/21/Personne-ne-comprend-l-informatique-Partie-0-%3A-Lexique&quot;&gt;Voir le lexique&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Donnée, traitement de l’information, tout ça c&amp;#8217;est bien joli, mais concrètement, comment ça se passe&amp;#160;?&lt;/p&gt;
&lt;p&gt;Comment un ordinateur démarre&amp;#160;? Pourquoi il met du temps à s&amp;#8217;allumer&amp;#160;?&lt;/p&gt;          &lt;h3&gt;Introduction&lt;/h3&gt;
&lt;p&gt;On fait souvent la différence entre deux disciplines dans l&amp;#8217;informatique&amp;#160;: les logiciels (software) et le matériel (hardware). En informatique, on parle indépendamment de logiciel ou de programme, ce sont des synonymes.&lt;/p&gt;
&lt;p&gt;Le matériel est tout ce que vous pouvez acheter sous forme d&amp;#8217;objets physiques pour votre ordinateur (l&amp;#8217;ordinateur en lui même, des clefs USB, un disque dur&amp;#8230;), et le logiciel c&amp;#8217;est tout ce que vous allez installer sur votre ordinateur.&lt;/p&gt;
&lt;p&gt;Fondamentalement, un logiciel ne se &amp;#8220;touche&amp;#8221; pas (bon sauf s&amp;#8217;il est écrit sur un CD), mais pourtant vous manipulez certainement chaque jour des logiciels sans le savoir. Votre téléphone portable lui même, en vous présentant une interface pour saisir des numéros comporte un petit logiciel.&lt;/p&gt;
&lt;p&gt;Il faut savoir que comme avec les anges, il y a une hiérarchie dans les logiciels. Déjà, tous les logiciels ne sont pas dédiés à la même tâche, mai surtout certains logiciels dépendent fortement d&amp;#8217;autres logiciels pour pouvoir fonctionner. Il n&amp;#8217;y en a qu&amp;#8217;un qui n&amp;#8217;a besoin de rien d&amp;#8217;autre qu&amp;#8217;un ordinateur&amp;#160;: c&amp;#8217;est le programme d&amp;#8217;amorçage qui va démarrer votre ordinateur.&lt;/p&gt;
&lt;h3&gt;L&amp;#8217;amorce&lt;/h3&gt;
&lt;p&gt;Le programme d&amp;#8217;amorce est exécuté par la &lt;a hreflang=&quot;fr&quot; href=&quot;http://fr.wikipedia.org/wiki/Carte_m%C3%A8re&quot;&gt;carte mère&lt;/a&gt;. Pour rappel, la carte mère est le composant qui s&amp;#8217;occupe des entrées et sorties d&amp;#8217;informations dans l&amp;#8217;ordinateur.&lt;/p&gt;
&lt;p&gt;Quand vous appuyez sur le bouton pour démarrer votre ordinateur, la carte mère est alimentée, et un petit logiciel indispensable va alors se charger. Ce programme c&amp;#8217;est l&amp;#8217;amorce.&lt;/p&gt;
&lt;p&gt;Au démarrage, l&amp;#8217;amorce va&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Faire l&amp;#8217;inventaire des périphériques (composants) présents sur la carte mère, et faire des &amp;#8220;bips&amp;#8221; s&amp;#8217;il manque quelque chose qui pourrait être d&amp;#8217;important (genre de la RAM).&lt;/li&gt;
&lt;li&gt;Une fois que l&amp;#8217;amorce est certaine que l&amp;#8217;ordinateur peut démarrer, elle va se mettre à la recherche du programme qui va effectivement démarrer l&amp;#8217;ordinateur (le système d&amp;#8217;exploitation).&lt;/li&gt;
&lt;li&gt;Celui-ci se trouve en général le disque dur. une fois trouvé, elle va le charger en mémoire, demander au processeur de lire cette mémoire, puis jeter l&amp;#8217;éponge. La suite c&amp;#8217;est plus son problème.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Le système d&amp;#8217;exploitation&lt;/h3&gt;
&lt;p&gt;Le système d&amp;#8217;exploitation est le premier programme complexe à être exécuté sur votre ordinateur. Son rôle est de servir de couffin aux autres programmes&amp;#160;: le système d&amp;#8217;exploitation s&amp;#8217;installe en mémoire et prépare tout ce qu&amp;#8217;il faut pour que les programmes qui s&amp;#8217;exécuteront ensuite se sentent chez eux.&lt;/p&gt;
&lt;p&gt;Ça peut passer par la mise à disposition de petits utilitaires résidant en mémoire aidant les programmes à exécuter des actions avec les composants (on appelle ça des &amp;#8220;pilotes&amp;#8221;&amp;#160;: accéder au disque dur, recevoir des frappes clavier, utiliser l&amp;#8217;imprimante&amp;#8230;), ou carrément la création de &amp;#8220;services&amp;#8221; dédié au opérations complexes (dessiner une fenêtre à l&amp;#8217;écran, etc).&lt;/p&gt;
&lt;p&gt;Forcément, mettre tout ça en place prend du temps. La plupart des informations nécessaires pour la mise en place de cet environnement se trouve sur le disque dur. Voilà pourquoi votre ordinateur a besoin d&amp;#8217;un certain temps pour pouvoir être utilisable, à la différence de votre aspirateur où il suffit de le brancher.&lt;/p&gt;
&lt;h3&gt;Les programmes&lt;/h3&gt;
&lt;p&gt;Les programmes sont tous les logiciels qui se lancent après le système d’exploitation, et qui sont d&amp;#8217;ailleurs lancés par le système d&amp;#8217;exploitation.&lt;/p&gt;
&lt;p&gt;En fait, 98% du temps, vous utilisez des programmes&amp;#160;: pour aller sur internet, écrire du texte, retoucher une photo, ce sont des programmes qui réalisent ces choses là.&lt;/p&gt;
&lt;p&gt;Les programmes sont faciles à écrire, parce que le système d&amp;#8217;exploitation s&amp;#8217;est chargé de tout le travail pénible (comment écrire octet par octet sur le disque, comment parler avec l&amp;#8217;imprimante, comment afficher une fenêtre à l&amp;#8217;écran). Les créateurs de programmes peuvent donc se concentrer sur quelque chose qui plaît aux commerciaux&amp;#160;: ajouter de la valeur à votre travail.&lt;/p&gt;
&lt;p&gt;Il faut voir les programmes comme des outil qui va prendre de
l&amp;#8217;information, le traiter, et vous fournir de l&amp;#8217;information transformée.
Un logiciel de traitement de texte va utiliser vos frappes sur les
touches pour écrire du texte à l&amp;#8217;écran, et vous permettre de l&amp;#8217;imprimer.
Un navigateur web va vous permettre d&amp;#8217;accéder aux informations contenus
sur Internet. Un logiciel de retouche photo va travailler à partir des
informations contenus dans le fichier que vous modifiez, et de vos
instructions avec la souris.&lt;/p&gt;
&lt;p&gt;Chaque fois que vous utilisez un programme, quelqu&amp;#8217;un a conçu les points d&amp;#8217;entrée de l&amp;#8217;information (clavier, souris, fichier&amp;#8230;), et les méthodes de la transformer (retoucher la photo, écrire un texte), mais aussi les points de sortie de l&amp;#8217;information&amp;#160;: écran, imprimante, etc.&lt;/p&gt;
&lt;h3&gt;En conclusion&lt;/h3&gt;
&lt;p&gt;&lt;a title=&quot;computer-start.png&quot; href=&quot;https://uname.pingveno.net/blog/public/cours-informatique/computer-start.png&quot;&gt;&lt;img title=&quot;computer-start.png, août 2013&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;computer-start.png&quot; src=&quot;https://uname.pingveno.net/blog/public/cours-informatique/computer-start.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nous avons vu que les programmes se sont pas tous égaux dans un ordinateur. un programme en particulier est au dessus des autres, c&amp;#8217;est le système d&amp;#8217;exploitation.&lt;/p&gt;
&lt;p&gt;Les outils que vous utilisez quand vous utilisez un ordinateur sont des logiciels, ils dépendent du système d&amp;#8217;exploitation pour fonctionner, et la seule chose qu&amp;#8217;ils savent faire c&amp;#8217;est transformer de l&amp;#8217;information.&lt;/p&gt;
&lt;p&gt;Mais un programme ça ne vient pas tout seul, quelqu&amp;#8217;un a rédigé les instructions lui permettant de traiter l&amp;#8217;information d&amp;#8217;une certain façon, et il a également défini les points d&amp;#8217;entrée et de sortie de cette information.&lt;/p&gt;
&lt;p&gt;Dans la partie suivante, nous verrons concrètement comment les informaticiens rédigent des programmes, et pourquoi il ne faut pas en avoir peur (ni des programmes ni des informaticiens).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://uname.pingveno.net/blog/index.php/post/2013/08/20/Personne-ne-comprend-l-informatique-Partie-4-%3A-Programmes-et-compilation&quot;&gt;Lire la suite&amp;#160;: Partie 4&amp;#160;: Programmes et compilation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://uname.pingveno.net/blog/index.php/tag/serie-cours-informatique&quot;&gt;Voir l&amp;#8217;ensemble des articles sur ce sujet&amp;#160;: Personne ne comprend l&amp;#8217;informatique&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://uname.pingveno.net/blog/index.php/post/2013/08/21/Personne-ne-comprend-l-informatique-Partie-0-%3A-Lexique&quot;&gt;Voir le lexique&lt;/a&gt;.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Personne ne comprend l'informatique - Partie 2 : Signal, encodage, donnée, information</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2013/08/20/Personne-ne-comprend-l-informatique-Partie-2-%3A-Signal%2C-encodage%2C-donn%C3%A9e%2C-information</link>
        <guid isPermaLink="false">urn:md5:6d236595d395692e8de17fa8fd61a8e2</guid>
        <pubDate>Wed, 21 Aug 2013 18:12:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>informatique</category>
                  <category>serie-cours-informatique</category>
                <description>&lt;p&gt;&lt;a href=&quot;http://uname.pingveno.net/blog/index.php/tag/serie-cours-informatique&quot;&gt;Voir l&amp;#8217;ensemble des articles sur ce sujet&amp;#160;: Personne ne comprend l&amp;#8217;informatique&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://uname.pingveno.net/blog/index.php/post/2013/08/21/Personne-ne-comprend-l-informatique-Partie-0-%3A-Lexique&quot;&gt;Voir le lexique&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On a vu que l&amp;#8217;informatique c&amp;#8217;était la science du traitement de l&amp;#8217;information. Bon, mais c&amp;#8217;est quoi une information&amp;#160;?&lt;/p&gt;          &lt;h3&gt;Signal&lt;/h3&gt;
&lt;p&gt;Tous les ordinateurs interagissent avec leur environnement (incluant
d&amp;#8217;autres ordinateurs) en utilisant des signaux électriques. Les
composants de l&amp;#8217;ordinateur s&amp;#8217;envoient eux-même entre eux des signaux électriques, tous ces signaux constituent la base des ordinateurs pour
communiquer (si on compare à un langage, ce sont comme des sons).&lt;/p&gt;
&lt;p&gt;Un signal est un changement de tension sur un fil électrique. Ce changement peut provenir d&amp;#8217;un capteur, ou d&amp;#8217;une réaction du système lui même (signal en sortie), toujours est-il qu&amp;#8217;il y a eu un changement d&amp;#8217;état.&lt;/p&gt;
&lt;p&gt;Le signal qui sort ou qui rentre d&amp;#8217;un ordinateur est particulier&amp;#160;: on dit qu&amp;#8217;il est binaire. Cela veut dire que le signal n&amp;#8217;a que deux valeurs possibles&amp;#160;: une que l&amp;#8217;on va appeler &amp;#8220;vraie&amp;#8221; ou &amp;#8220;1&amp;#8221;, et l&amp;#8217;autre que l&amp;#8217;on va appeler &amp;#8220;faux&amp;#8221;, ou &amp;#8220;0&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Cette limitation vient du mécanisme de traitement des ordinateurs. En effet les transistors (similaires aux &lt;a href=&quot;https://uname.pingveno.net/blog/index.php/post/2013/08/20/Personne-ne-comprend-l-informatique-Partie-1-%3A-Informatique-et-ordinateurs&quot;&gt;relais dont nous avons parlé précédemment&lt;/a&gt;) présents dans le processeur ne sont capables de n&amp;#8217;exprimer que deux états&amp;#160;: ouvert (&amp;#8220;faux&amp;#8221;&amp;#160;: le courant ne passe pas) ou fermé (&amp;#8220;vrai&amp;#8221;&amp;#160;: le courant passe).&lt;/p&gt;
&lt;p&gt;À partir de là, comment représenter des choses comme les lettres tapées sur un clavier, ou les couleurs de l&amp;#8217;écran&amp;#160;? Le secret est&amp;#160;: encodage.&lt;/p&gt;
&lt;h3&gt;Donnée&lt;/h3&gt;
&lt;p&gt;L&amp;#8217;encodage est le processus par lequel un signal va se transformer en donnée.&lt;/p&gt;
&lt;p&gt;Une donnée est un événement informatique représenté sous une certaine forme. La frappe d&amp;#8217;un utilisateur sur le clavier va provoquer un ensemble de signaux électriques vers l&amp;#8217;ordinateur, mais la frappe sur une certaine touche provoquera toujours toujours la même série de signaux électriques, on appelle ça un code.&lt;/p&gt;
&lt;p&gt;Pour faire une analogie, c&amp;#8217;est similaire au code morse. Le code morse est composé de &amp;#8220;mots&amp;#8221; ternaires (trois états&amp;#160;: long, court, silence) codant des lettres. Par exemple la lettre &lt;code&gt;A&lt;/code&gt; s&amp;#8217;écrit&amp;#160;: &lt;code&gt;court&lt;/code&gt;, &lt;code&gt;silence&lt;/code&gt;, &lt;code&gt;long&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ainsi un &lt;strong&gt;événement&lt;/strong&gt; se produisant sur le clavier (frappe de touche) va se traduire par une suite de signaux électriques, toujours la même suite pour une même touche. La transformation de l&amp;#8217;événement en suite de signaux est appelé l&amp;#8217;&lt;strong&gt;encodage&lt;/strong&gt;, et le produit en est la &lt;strong&gt;donnée&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Information&lt;/h3&gt;
&lt;p&gt;La donnée en elle-même n&amp;#8217;apporte rien. C&amp;#8217;est un code, un simple événement qui s&amp;#8217;est produit à un moment donnée. L’apport de sens à cette donnée la transforme en &lt;strong&gt;information&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Reprenons la frappe sur une touche de clavier. Le code qui est produit en lui même ne veut pas dire grand chose (pas plus que &amp;#8220;&lt;code&gt;court&lt;/code&gt;, &lt;code&gt;silence&lt;/code&gt;, &lt;code&gt;long&lt;/code&gt;&amp;#8221;). Mais lors de l&amp;#8217;élaboration de l&amp;#8217;ordinateur, on a décidé par convention que cette suite de signaux voudrait dire que l&amp;#8217;utilisateur a frappé une certaine touche.&lt;/p&gt;
&lt;p&gt;On peut donc convertir l&amp;#8217;événement en lettre affichée à l&amp;#8217;écran, et inversement. &lt;strong&gt;On a interprété la donnée comme une lettre frappée par l&amp;#8217;utilisateur, on en a fait une information&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;De la notion d&amp;#8217;information viendra également la notion de &lt;strong&gt;protocole&lt;/strong&gt;, où une suite de données sert à &lt;strong&gt;transmettre&lt;/strong&gt; une information plus complexe qu&amp;#8217;une simple lettre.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Nous avons vu comment une information est construite dans un ordinateur.&lt;/p&gt;
&lt;p&gt;L&amp;#8217;information est un concept théorique qui sert à dessiner tout plein de schémas, mais surtout à comprendre et modéliser les interactions dans un système. Votre ordinateur ne sait qu&amp;#8217;exécuter les modèles issus de ces schémas, et transformer de l&amp;#8217;information à partir de ces modèles.&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;reseau-petri.jpg&quot; href=&quot;https://uname.pingveno.net/blog/public/cours-informatique/reseau-petri.jpg&quot;&gt;&lt;img title=&quot;reseau-petri.jpg, août 2013&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;reseau-petri.jpg&quot; src=&quot;https://uname.pingveno.net/blog/public/cours-informatique/.reseau-petri_m.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;center&gt;Le genre de schémas que les informaticiens aiment bien faire, avec des flèches partout. &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.metz.supelec.fr/metz/personnel/frezza/MLP/TD5.html&quot;&gt;Source de l&amp;#8217;image&lt;/a&gt;.&lt;/center&gt;
&lt;p&gt;Comment fait-il&amp;#160;? Comment un ordinateur gère-t-il la gigantesque quantité d&amp;#8217;information que vous lui transmettez à chaque seconde&amp;#160;? Comment une image de plusieurs milliers d&amp;#8217;octets (autrement dit, de &amp;#8220;mots&amp;#8221;) peut être transformée par l’ordinateur juste en cliquant avec votre souris sur votre écran&amp;#160;? Un clic de souris n&amp;#8217;est certainement pas suffisant&amp;#160;!&lt;/p&gt;
&lt;p&gt;La partie suivante va éclaircir cette question en vous expliquant comment est structuré un ordinateur au niveau logique. La partie suivante va également tenter d&amp;#8217;apporter un peu plus d&amp;#8217;enthousiasme (selon mes calculs, la majorité d&amp;#8217;entre vous trouve mes articles chiants).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://uname.pingveno.net/blog/index.php/post/2013/08/20/Personne-ne-comprend-l-informatique-Partie-3-%3A-Syst%C3%A8me-d-exploitation-et-programmes&quot;&gt;Lire la suite&amp;#160;: Partie 3&amp;#160;: Système d&amp;#8217;exploitation et programmes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://uname.pingveno.net/blog/index.php/tag/serie-cours-informatique&quot;&gt;Voir l&amp;#8217;ensemble des articles sur ce sujet&amp;#160;: Personne ne comprend l&amp;#8217;informatique&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://uname.pingveno.net/blog/index.php/post/2013/08/21/Personne-ne-comprend-l-informatique-Partie-0-%3A-Lexique&quot;&gt;Voir le lexique&lt;/a&gt;.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Personne ne comprend l'informatique - Partie 0 : Lexique</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2013/08/21/Personne-ne-comprend-l-informatique-Partie-0-%3A-Lexique</link>
        <guid isPermaLink="false">urn:md5:4a882d154f5b05eb40983f8b18317b63</guid>
        <pubDate>Wed, 21 Aug 2013 15:32:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>informatique</category>
                  <category>lexique</category>
                  <category>serie-cours-informatique</category>
                <description>&lt;p&gt;&lt;a href=&quot;https://uname.pingveno.net/blog/index.php/tag/serie-cours-informatique&quot;&gt;Voir l&amp;#8217;ensemble des articles sur ce sujet&amp;#160;: Personne ne comprend l&amp;#8217;informatique&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Parce que vous en aurez forcément besoin un jour&amp;#160;: voici le lexique.&lt;/p&gt;          &lt;h3&gt;A&lt;/h3&gt;


&lt;h3&gt;B&lt;/h3&gt;


&lt;h3&gt;C&lt;/h3&gt;


&lt;h3&gt;D&lt;/h3&gt;


&lt;h3&gt;E&lt;/h3&gt;


&lt;h3&gt;F&lt;/h3&gt;


&lt;h3&gt;G&lt;/h3&gt;


&lt;h3&gt;H&lt;/h3&gt;


&lt;h3&gt;I&lt;/h3&gt;


&lt;h3&gt;J&lt;/h3&gt;


&lt;h3&gt;K&lt;/h3&gt;


&lt;h3&gt;L&lt;/h3&gt;


&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Logiciel&lt;/strong&gt;&lt;/ins&gt;&amp;#160;: un logiciel (ou programme) est une suite d&amp;#8217;instructions logiques permettant de transformer l&amp;#8217;information.&lt;/p&gt;


&lt;h3&gt;M&lt;/h3&gt;


&lt;h3&gt;N&lt;/h3&gt;


&lt;h3&gt;O&lt;/h3&gt;


&lt;h3&gt;P&lt;/h3&gt;


&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Processeur&lt;/strong&gt;&lt;/ins&gt;&amp;#160;: dans un ordinateur, le processeur est le composant qui va exécuter la transformation de l&amp;#8217;information à partir des instructions fournies par les programmes.&lt;/p&gt;


&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Programme&lt;/strong&gt;&lt;/ins&gt;&amp;#160;: voir Logiciel.&lt;/p&gt;


&lt;h3&gt;Q&lt;/h3&gt;


&lt;h3&gt;R&lt;/h3&gt;


&lt;h3&gt;S&lt;/h3&gt;


&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Système d&amp;#8217;exploitation&lt;/strong&gt;&lt;/ins&gt;&amp;#160;: le système d&amp;#8217;exploitation est le premier programme exécuté au démarrage de l&amp;#8217;ordinateur. Il met en place tout ce dont les autres programmes ont besoin pour fonctionner.&lt;/p&gt;


&lt;h3&gt;T&lt;/h3&gt;


&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Traitement&lt;/strong&gt;&lt;/ins&gt;&amp;#160;: on appelle traitement la transformation de l&amp;#8217;information par un logiciel.&lt;/p&gt;


&lt;h3&gt;U&lt;/h3&gt;


&lt;h3&gt;V&lt;/h3&gt;


&lt;h3&gt;W&lt;/h3&gt;


&lt;h3&gt;X&lt;/h3&gt;


&lt;h3&gt;Y&lt;/h3&gt;


&lt;h3&gt;Z&lt;/h3&gt;


&lt;p&gt;&lt;a href=&quot;https://uname.pingveno.net/blog/index.php/tag/serie-cours-informatique&quot;&gt;Voir l&amp;#8217;ensemble des articles sur ce sujet&amp;#160;: Personne ne comprend l&amp;#8217;informatique&lt;/a&gt;&lt;/p&gt;</description>
        
              </item>
      </channel>
</rss>
