<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Touhami&#x27;s Space</title>
      <link>https://touha.me</link>
      <description>Touhami&#x27;s blog about Sport, computers, rock&#x27;n&#x27;roll.</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://touha.me/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Mon, 22 Jun 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Taming giant SFCC catalogs with sfcc-sandbox-reducer</title>
          <pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/sfcc-sandbox-reducer/</link>
          <guid>https://touha.me/blog/sfcc-sandbox-reducer/</guid>
          <description xml:base="https://touha.me/blog/sfcc-sandbox-reducer/">&lt;p&gt;If you&#x27;ve ever worked on a Salesforce Commerce Cloud project, you&#x27;ve probably hit this wall: you export the production catalog to set up a dev sandbox, and you&#x27;re staring at a 500 MB (sometimes 1 GB+) XML file. Loading that into a sandbox takes forever, often breaks things, and makes working locally a misery.&lt;&#x2F;p&gt;
&lt;p&gt;I built &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.npmjs.com&#x2F;package&#x2F;sfcc-sandbox-reducer&quot;&gt;&lt;code&gt;sfcc-sandbox-reducer&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; to fix that.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-problem&quot;&gt;The problem&lt;&#x2F;h2&gt;
&lt;p&gt;SFCC stores its product catalog, pricebooks, and inventory lists as XML. Production catalogs for mid-to-large retailers routinely hit hundreds of megabytes. Sandboxes, especially developer ones, aren&#x27;t meant to ingest that volume. The result is slow imports, instability, and thousands of discontinued or unpriceable products cluttering your dev data when you didn&#x27;t need them in the first place.&lt;&#x2F;p&gt;
&lt;p&gt;What you actually want is a representative slice of real data: a few thousand products with prices and inventory, actually visible on the storefront.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;recommended-sandbox-refresh-workflow&quot;&gt;Recommended sandbox refresh workflow&lt;&#x2F;h2&gt;
&lt;p&gt;Use this order every time you refresh a sandbox:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Start with a full export from a PIG instance such as development, staging, or production.&lt;&#x2F;li&gt;
&lt;li&gt;Run &lt;code&gt;sfcc-sandbox-reducer&lt;&#x2F;code&gt; on that export to generate reduced catalogs, pricebooks, and inventory files.&lt;&#x2F;li&gt;
&lt;li&gt;Before importing reduced files, clean the target sandbox and remove existing product catalogs, pricebooks, and inventory lists.&lt;&#x2F;li&gt;
&lt;li&gt;Import reduced files into the clean sandbox.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;If you skip the cleanup step, SFCC merges data. Old records stay in place, and your sandbox keeps stale or oversized catalog data.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-the-tool-does&quot;&gt;What the tool does&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;sfcc-sandbox-reducer&lt;&#x2F;code&gt; is a Node.js CLI with two main commands.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sfcc-reduce&quot;&gt;sfcc-reduce&lt;&#x2F;h3&gt;
&lt;p&gt;This is the core command. It takes your full SFCC XML exports and produces trimmed-down versions.&lt;&#x2F;p&gt;
&lt;p&gt;It parses catalog files as a stream, never loading the full file into memory. A 500 MB catalog stays at a flat memory footprint regardless of size.&lt;&#x2F;p&gt;
&lt;p&gt;The tricky part is SFCC&#x27;s product hierarchy: master products contain variation groups, which contain variants. You can&#x27;t just drop arbitrary records without orphaning others. The reducer builds the full dependency graph first, then removes groups that don&#x27;t meet the criteria rather than picking individual products.&lt;&#x2F;p&gt;
&lt;p&gt;A product group is kept if at least one variation group appears in a navigation catalog, at least one variant has both a price record and an inventory record, and the products are marked online for the sites you&#x27;ve specified.&lt;&#x2F;p&gt;
&lt;p&gt;If you set &lt;code&gt;max_products&lt;&#x2F;code&gt;, the tool doesn&#x27;t just take the first N. It reduces proportionally across categories so the sandbox still has a realistic spread.&lt;&#x2F;p&gt;
&lt;p&gt;The analysis pass is cached, so subsequent runs skip re-parsing entirely. That matters a lot when you&#x27;re tweaking filter config and running repeatedly.&lt;&#x2F;p&gt;
&lt;p&gt;A typical run on a 1.25 GB catalog set:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;[PHASE 1] Collecting product IDs...
  -&amp;gt; 50000 online products (masters + variants)
  -&amp;gt; 2000 product groups kept, 500 removed

[PHASE 2] Reducing files...
  Master catalogs: 5000 kept, 45000 removed

Size Reduction:
  Original size:  1.25 GB
  Reduced size:   625.00 MB
  Saved:          625.00 MB (50.0%)

[DONE] Total processing time: 58.01s
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;sfcc-download-images&quot;&gt;sfcc-download-images&lt;&#x2F;h3&gt;
&lt;p&gt;Once you have reduced catalogs, you usually also need matching product images. This command connects to your sandbox WebDAV, lets you browse the navigation catalog interactively, pick a category, and downloads all images for products in that category hierarchy.&lt;&#x2F;p&gt;
&lt;p&gt;Downloads run in parallel with configurable concurrency and skip already-downloaded files, so interrupted runs can be resumed.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;setting-up-in-your-project&quot;&gt;Setting up in your project&lt;&#x2F;h2&gt;
&lt;p&gt;Quick setup flow:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Install the CLI globally:&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;npm install -g sfcc-sandbox-reducer
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you want a project-pinned version instead, install locally and add scripts:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;npm install --save-dev sfcc-sandbox-reducer
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
  &amp;quot;scripts&amp;quot;: {
    &amp;quot;reduce&amp;quot;: &amp;quot;sfcc-sandbox-reducer reduce&amp;quot;,
    &amp;quot;download-images&amp;quot;: &amp;quot;sfcc-sandbox-reducer download-images&amp;quot;
  }
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Run the init wizard in your project root:&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sfcc-sandbox-reducer init
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This creates &lt;code&gt;reducer-config.json&lt;&#x2F;code&gt; and &lt;code&gt;dw.json&lt;&#x2F;code&gt;. Add both to &lt;code&gt;.gitignore&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Fill &lt;code&gt;dw.json&lt;&#x2F;code&gt; with your WebDAV credentials:&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
  &amp;quot;username&amp;quot;: &amp;quot;your-webdav-username&amp;quot;,
  &amp;quot;password&amp;quot;: &amp;quot;your-webdav-password&amp;quot;
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Update &lt;code&gt;reducer-config.json&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;input.*&lt;&#x2F;code&gt; accepts glob patterns. For example, &lt;code&gt;.&#x2F;input&#x2F;catalogs&#x2F;BRAND_*_navigation&#x2F;catalog.xml&lt;&#x2F;code&gt; matches all navigation catalogs.&lt;&#x2F;li&gt;
&lt;li&gt;Set &lt;code&gt;sites_to_check&lt;&#x2F;code&gt; to the site IDs you test in sandbox.&lt;&#x2F;li&gt;
&lt;li&gt;Set &lt;code&gt;max_products&lt;&#x2F;code&gt; to cap output size. For most teams, 5,000 to 10,000 products is enough for development.&lt;&#x2F;li&gt;
&lt;li&gt;Use &lt;code&gt;always_keep&lt;&#x2F;code&gt; and &lt;code&gt;always_remove&lt;&#x2F;code&gt; for product IDs tied to tests, homepage slots, or other fixed scenarios.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;Put SFCC exports from your PIG export under &lt;code&gt;input&#x2F;&lt;&#x2F;code&gt;:&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code&gt;input&#x2F;
  catalogs&#x2F;
    BRAND_master&#x2F;
      catalog.xml
    BRAND_FR_navigation&#x2F;
      catalog.xml
  pricebooks&#x2F;
    pricebook-fr.xml
  inventory-lists&#x2F;
    inventory-fr.xml
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;Run reducer:&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;sfcc-sandbox-reducer reduce
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;First pass can take a few minutes on large datasets. Analysis is cached in &lt;code&gt;.reducer-cache&#x2F;&lt;&#x2F;code&gt;, so next runs are faster. Output files go to &lt;code&gt;output&#x2F;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;In Business Manager, clean the target sandbox before import.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Remove existing product catalogs, pricebooks, and inventory lists first, then import reduced files from &lt;code&gt;output&#x2F;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;If you import without cleanup, SFCC merges with old data and the sandbox still contains stale or oversized catalogs.&lt;&#x2F;p&gt;
&lt;p&gt;Use &lt;code&gt;--dry-run&lt;&#x2F;code&gt; if you want to inspect what would be kept before writing files.&lt;&#x2F;p&gt;
&lt;p&gt;For full command usage, all options, and complete documentation, see the npm package page: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.npmjs.com&#x2F;package&#x2F;sfcc-sandbox-reducer&quot;&gt;sfcc-sandbox-reducer&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-i-built-this&quot;&gt;Why I built this&lt;&#x2F;h2&gt;
&lt;p&gt;On a project with a 1.2 GB master catalog, importing the full export into a sandbox took over an hour and frequently timed out. We needed a repeatable way to generate a slim but realistic dataset.&lt;&#x2F;p&gt;
&lt;p&gt;Three things made it non-trivial. Files this size break DOM parsers outright, so the tool uses SAX-style streaming to process records one at a time. You also can&#x27;t filter products in isolation: building the master&#x2F;variant&#x2F;variation-group graph upfront is what prevents corrupt output. And a product kept in the master catalog needs to be kept (or removed) from pricebooks and inventory lists too, so all files are reduced in one coordinated pass.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;source-and-license&quot;&gt;Source and license&lt;&#x2F;h2&gt;
&lt;p&gt;Code is on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Dragnucs&#x2F;sfcc-sandbox-reducer&quot;&gt;GitHub&lt;&#x2F;a&gt; under AGPL-3.0.&lt;&#x2F;p&gt;
&lt;p&gt;Full usage docs and latest README live on npm: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.npmjs.com&#x2F;package&#x2F;sfcc-sandbox-reducer&quot;&gt;sfcc-sandbox-reducer&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;npx sfcc-sandbox-reducer --help
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
      <item>
          <title>Cvthèque</title>
          <pubDate>Mon, 24 Oct 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/projets/cvtheque/</link>
          <guid>https://touha.me/projets/cvtheque/</guid>
          <description xml:base="https://touha.me/projets/cvtheque/">&lt;h1 id=&quot;cvtheque&quot;&gt;Cvthèque&lt;&#x2F;h1&gt;
&lt;p&gt;Platform pour la gestion des offres d&#x27;emplois et candidatures. Le but principal étant de faciliter la recherche dans les CV ; une cvthèque.&lt;&#x2F;p&gt;
&lt;p&gt;Projet réalisé pour JESA utilisant Symfony2, HTML5, CSS3, JSON pour les données et le framework front-end Twitter Bootstrap.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;joinjesa.jacobs-esa.com&#x2F;&quot;&gt;&lt;strong&gt;Voir la démonstration&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Dragnucs Easy Upload</title>
          <pubDate>Mon, 24 Oct 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/projets/dragnucseasyupload/</link>
          <guid>https://touha.me/projets/dragnucseasyupload/</guid>
          <description xml:base="https://touha.me/projets/dragnucseasyupload/">&lt;h1 id=&quot;dragnucseasyupload&quot;&gt;DragnucsEasyUpload&lt;&#x2F;h1&gt;
&lt;p&gt;Une plateforme de partage de fichiers simplifiée. L&#x27;upload est protégé par un mot de passe défini dans la configuration du site.&lt;&#x2F;p&gt;
&lt;p&gt;Projet réalisé en PHP, HTML5, CSS3, JSON et le framework front-end Twitter Bootstrap.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;dragnucs.legtux.org&#x2F;ista&#x2F;&quot;&gt;&lt;strong&gt;Voir la démonstration&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>ISOVote</title>
          <pubDate>Mon, 24 Oct 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/projets/isovote/</link>
          <guid>https://touha.me/projets/isovote/</guid>
          <description xml:base="https://touha.me/projets/isovote/">&lt;h1 id=&quot;isovote&quot;&gt;ISOVote&lt;&#x2F;h1&gt;
&lt;p&gt;Une plateforme de vote en ligne influencée par un jury de quatre membres. Les candidats s&#x27;inscrivent par eux-mêmes et sont requis d&#x27;uploader une photo. Initialement, le projet vise à choisir les meilleures photos.&lt;&#x2F;p&gt;
&lt;p&gt;Projet réalisé en utilisant PHP, HTML, CSS et MySQL.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;dragnucs.legtux.org&#x2F;isovote&#x2F;&quot;&gt;&lt;strong&gt;Voir la démonstration&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Randomizer</title>
          <pubDate>Mon, 24 Oct 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/projets/randomizer/</link>
          <guid>https://touha.me/projets/randomizer/</guid>
          <description xml:base="https://touha.me/projets/randomizer/">&lt;h1 id=&quot;randomizer&quot;&gt;Randomizer&lt;&#x2F;h1&gt;
&lt;p&gt;Un mini-site qui affiche des citations définies dans l&#x27;administration de façon aléatoire.&lt;&#x2F;p&gt;
&lt;p&gt;Projet réalisé pour un client en utilisant le PHP, HTML5, CSS3, JSON pour les données et le framework front-end Twitter Bootstrap.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;fuckingsocialmediatips.com&#x2F;&quot;&gt;&lt;strong&gt;Voir la démonstration&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>The Jungle Of Dragons</title>
          <pubDate>Mon, 24 Oct 2016 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/projets/tjod/</link>
          <guid>https://touha.me/projets/tjod/</guid>
          <description xml:base="https://touha.me/projets/tjod/">&lt;h1 id=&quot;the-jungle-of-dragons&quot;&gt;The Jungle of Dragons&lt;&#x2F;h1&gt;
&lt;p&gt;Un jeu de plateau 2D. Ce jeu chinois, Dou Shou Qi, est similaire au jeu de la dame et met en jeu des animaux.&lt;&#x2F;p&gt;
&lt;p&gt;Ce jeu est écrit en C en utilisant la bibliothèque graphique SDL.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;dragnucs.legtux.org&#x2F;tjod&#x2F;&quot;&gt;&lt;strong&gt;Voir la page dédiée&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>The meta-federated social network</title>
          <pubDate>Sat, 03 Oct 2015 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/meta-federated-social-network/</link>
          <guid>https://touha.me/blog/meta-federated-social-network/</guid>
          <description xml:base="https://touha.me/blog/meta-federated-social-network/">&lt;p&gt;Today&#x27;s social networks are all introvert in a way or an other at varying
degrees. Some are fully centralized where interaction is done only with users
from the same network and server. Some are decentralized and interactions occur
between users on the same network spread on different servers. Some others go
even further and let interactions occur between users from different networks
and servers. This is the &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Federation_%28information_technology%29&quot;&gt;federation&lt;&#x2F;a&gt;. Networks falling in the last
category are few and a real federation is not there yet.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-fediverse-is-not-federated&quot;&gt;The fediverse is not federated&lt;&#x2F;h2&gt;
&lt;p&gt;Networks should settle on a common protocol in order to understand each
other. Years have passed and no unified protocol have been defined yet.&lt;&#x2F;p&gt;
&lt;p&gt;A huge hindrance to federation on one hand is jailing networks like Facebook,
Twitter or G+ that are completely centralized and introverts by design. On
the other hand federated networks provide the poorest and outdated documentation
possible making it difficult for other developers to bypass the lack of a
standard protocol.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;The current state&lt;&#x2F;strong&gt; of things is that if a network talks to another, the
communication is poor. For example, a user from &lt;a href=&quot;https:&#x2F;&#x2F;gnu.io&#x2F;social&quot;&gt;GNU Social&lt;&#x2F;a&gt; can
subscribe to a user from &lt;a href=&quot;https:&#x2F;&#x2F;diasporafoundation.org&#x2F;&quot;&gt;diaspora*&lt;&#x2F;a&gt; but not the inverse.&lt;&#x2F;p&gt;
&lt;p&gt;You cannot subscribe to a user living in a jail network.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;my-proposition&quot;&gt;My proposition&lt;&#x2F;h2&gt;
&lt;p&gt;I propose to create a network that is polyglot. A network that &lt;em&gt;thinks&lt;&#x2F;em&gt; in its
own way and &lt;em&gt;expresses&lt;&#x2F;em&gt; itself in the language of the one it communicates
with. Lets name this social network &lt;strong&gt;The Polyglot&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;A polyglot account would provide access to as many networks as network-languages
it can speak. E.g. A polyglot account gives an account on GNU Social,
diaspora*, &lt;a href=&quot;https:&#x2F;&#x2F;redmatrix.me&#x2F;&quot;&gt;Redmatrix&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;pump.io&#x2F;&quot;&gt;pump.io&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;friendica.com&#x2F;&quot;&gt;friendica&lt;&#x2F;a&gt;,
and XMPP all in the same place under one user identifier.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;How to achieve this&lt;&#x2F;strong&gt; is rather simple. The polyglot needs to know the basics
of all the network-languages it wants to talk to:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Get a user&#x27;s profile including his avatar, header, bio, location, email and URL&lt;&#x2F;li&gt;
&lt;li&gt;Get a user&#x27;s publications (notices, dents, updates, statuses, tweets, etc.)&lt;&#x2F;li&gt;
&lt;li&gt;Post a publication&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;These basics can be extended by basics level 2:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Post a reply&lt;&#x2F;li&gt;
&lt;li&gt;Get replies to a notice&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;strong&gt;On a more technical side&lt;&#x2F;strong&gt; this polyglot should know all the important API
end-points. The polyglot should be developed in &lt;strong&gt;Object Oriented Programming&lt;&#x2F;strong&gt;
and makes extensive use of &lt;strong&gt;Inheritance&lt;&#x2F;strong&gt; and &lt;strong&gt;abstraction&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This network is better written in a framework like &lt;a href=&quot;https:&#x2F;&#x2F;symfony.com&#x2F;&quot;&gt;Symfony2&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Lets say we have an abstract base class &lt;code&gt;Polyglot&lt;&#x2F;code&gt; defining all the vital and
necessary operations. If we need our polyglot to speak a new network-language,
we just create a new class defining how those basic operations work on that
new network.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;eventual-problems&quot;&gt;Eventual problems we might face&lt;&#x2F;h2&gt;
&lt;p&gt;We might have a problem if two networks use the same API end point while using
different data structures and format.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;A real solution&lt;&#x2F;em&gt; is prefixing APIs with the name of the protocol. Instead of
having &lt;code&gt;example.com&#x2F;api&#x2F;&lt;&#x2F;code&gt; as the base, we would have &lt;code&gt;example.com&#x2F;ostatus&lt;&#x2F;code&gt; and
&lt;code&gt;example.com&#x2F;diaspora&lt;&#x2F;code&gt; as bases.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Only a polyglot can decide what language (protocol) is the most practical and
efficient. This proposition is practical and feasible. Clients
like &lt;a href=&quot;http:&#x2F;&#x2F;andstatus.org&#x2F;&quot;&gt;Andstatus&lt;&#x2F;a&gt; can operate on many networks, but they don&#x27;t do so
under one and same identity.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;update&quot;&gt;Update&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;friendica.com&#x2F;&quot;&gt;Friendica&lt;&#x2F;a&gt; apparently does most of what I describe and
is the most federated. It can interact with GNU Social, diaspora*, redmatrix and
itself. Why isn&#x27;t it as widespread as others?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>&quot;2 Click Social Media Buttons&quot; ou le partage social éthique et pratique</title>
          <pubDate>Mon, 02 Dec 2013 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/2-click-social-media-buttons/</link>
          <guid>https://touha.me/blog/2-click-social-media-buttons/</guid>
          <description xml:base="https://touha.me/blog/2-click-social-media-buttons/">&lt;p&gt;Je viens tout juste de découvrir une pratique formidable qui fait d&#x27;une
pierre deux coups. Il s&#x27;agit d&#x27;un plugins jQuery qui permet à la fois de réduire
le temps d&#x27;affichage de vos pages, mais aussi de protéger la vie privée de vos
visiteurs.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;2 Klicks fuer mehr Datenschutz&lt;&#x2F;strong&gt;, de son nom d&#x27;origine, affiche par défaut de
simples images grisées représentant les boutons traditionnels de partage social,
supprimant ainsi tout appel à un script JS ou API externe. Si le visiteur
désire s&#x27;en servir, il n&#x27;a qu&#x27;à cliquer dessus pour les activer. Conséquence
directe, vos pages s&#x27;affichent rapidement et vous gardez les boutons sociaux
dessus. Éthiquement, vous empêchez les réseaux sociaux de collecter des
informations sur vos visiteurs à leur insu.&lt;&#x2F;p&gt;
&lt;p&gt;Si vous utilisez WordPress, je vous recommande cette
extension &lt;a href=&quot;http:&#x2F;&#x2F;wordpress.org&#x2F;plugins&#x2F;2-click-socialmedia-buttons&#x2F;&quot;&gt;2 Click Social Media Buttons&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;http:&#x2F;&#x2F;dragnucs.legtux.org&#x2F;dragnucs&#x2F;rbentez&#x2F;ta9rba9tss&#x2F;2013&#x2F;12&#x2F;social-share-privacy.png&quot; alt=&quot;Social Share Privacy - 2 Klicks fuer mehr Datenschutz&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Il existe plusieurs adaptations de « jquery.socialshareprivacy.js » pour
WordPress, mais elles sont toutes obsolètes et n&#x27;ont pas reçu de mises à jour
depuis 2 ans. Sauf &lt;strong&gt;2 Click Social Media Buttons&lt;&#x2F;strong&gt;, qui vient d&#x27;être mis à jour
il y a un mois seulement. Il est très bien fait et est flexible et
personnalisable.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>[Python] Utiliser GtkSourceView avec un fichier Glade</title>
          <pubDate>Mon, 08 Jul 2013 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/python-gtksourceview/</link>
          <guid>https://touha.me/blog/python-gtksourceview/</guid>
          <description xml:base="https://touha.me/blog/python-gtksourceview/">&lt;p&gt;Il y a trop peu de documentation sur l&#x27;utilisation de &lt;strong&gt;GtkSourceView3&lt;&#x2F;strong&gt; et
encore moins avec &lt;strong&gt;Glade&lt;&#x2F;strong&gt;. Voici un petit tutoriel simpliste pour démarrer.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installation&quot;&gt;Installation du paquet de développement GtkSourceView&lt;&#x2F;h2&gt;
&lt;p&gt;Fedora :&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;# yum install gtksourceview3-devel
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Debian :&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;# apt-get install libgtksourceview-3.0-dev
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ceci ajoute le catalogue (support) de GtkSourceView dans Glade.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;touha.me&#x2F;images&#x2F;glade-gtksourceview&#x2F;glade-gtksourceview.png&quot; alt=&quot;Catalogue GtkSourceView dans Glade&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemple&quot;&gt;Exemple d&#x27;utilisation&lt;&#x2F;h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from gi.repository import Gtk, GtkSource, GObject

class MyApp(object):
    def __init__(self):
        self.builder = Gtk.Builder()
        GObject.type_register(GtkSource.View)
        self.builder.add_from_file(&quot;ui.glade&quot;)

if __name__ == &#x27;__main__&#x27;:
    gui = MyApp()
    Gtk.main()
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;remarque&quot;&gt;Remarque&lt;&#x2F;h4&gt;
&lt;p&gt;Il est important d&#x27;enregistrer le type &lt;code&gt;GtkSource.View&lt;&#x2F;code&gt; comme dans la 6ème
ligne. Sinon, ça ne marchera pas.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Créer votre propre widget WordPress</title>
          <pubDate>Sat, 23 Feb 2013 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/creer-widget-wordpress/</link>
          <guid>https://touha.me/blog/creer-widget-wordpress/</guid>
          <description xml:base="https://touha.me/blog/creer-widget-wordpress/">&lt;h2 id=&quot;squelette&quot;&gt;Le squelette de tous widget WordPress&lt;&#x2F;h2&gt;
&lt;p&gt;Il faut placer ce code dans un fichier dans le répertoire &lt;code&gt;wp-content&#x2F;plugins&#x2F;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Remarques :&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Le nom du fichier n&#x27;importe que peu.&lt;&#x2F;li&gt;
&lt;li&gt;Même si ce n&#x27;est qu&#x27;un widget, ça reste un plugin. Il faut d&#x27;abord l&#x27;activer
dans le panneau de liste des plugins avant de pouvoir l&#x27;ajouter dans une sidebar.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;p&amp;gt;
    &amp;lt;label for=&quot;&amp;lt;?php echo $this-&amp;gt;get_field_id(&#x27;title&#x27;); ?&amp;gt;&quot;&amp;gt;:&amp;lt;&#x2F;label&amp;gt;
    &amp;lt;input value=&quot;&amp;lt;?php echo $title; ?&amp;gt;&quot; type=&quot;text&quot; class=&quot;widefat&quot;
           name=&quot;&amp;lt;?php echo $this-&amp;gt;get_field_name(&#x27;title&#x27;); ?&amp;gt;&quot;
           id=&quot;&amp;lt;?php echo $this-&amp;gt;get_field_id(&#x27;title&#x27;); ?&amp;gt;&quot;&amp;gt;&amp;lt;&#x2F;input&amp;gt;
&amp;lt;&#x2F;p&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;form&quot;&gt;Fonction &lt;code&gt;form()&lt;&#x2F;code&gt; — À ne PAS renommer.&lt;&#x2F;h4&gt;
&lt;p&gt;C&#x27;est le formulaire qui vous permet de paramétrer le widget depuis le panneau
d&#x27;administration. Vous pouvez avoir autant de types d&#x27;entrée que vous voulez.&lt;&#x2F;p&gt;
&lt;p&gt;Notez que le titre du widget affiché dans la sidebar est lui aussi un paramètre.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;update&quot;&gt;Fonction &lt;code&gt;update()&lt;&#x2F;code&gt; — À ne PAS renommer.&lt;&#x2F;h4&gt;
&lt;p&gt;Elle permet de mettre à jour et d&#x27;enregistrer les paramètres de votre widget.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;constructeur&quot;&gt;Fonction &lt;code&gt;my_widget_widget()&lt;&#x2F;code&gt; — À renommer.&lt;&#x2F;h4&gt;
&lt;p&gt;C&#x27;est le constructeur du widget. Il hérite de la classe &lt;code&gt;WP_Widget&lt;&#x2F;code&gt; qui
s&#x27;occupe de presque tout pour nous.&lt;&#x2F;p&gt;
&lt;p&gt;Vous renommez le nom de cette fonction ainsi que le nom de la classe du widget,
toujours en gardant le suffixe &lt;code&gt;_widget&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;widget&quot;&gt;Fonction &lt;code&gt;widget()&lt;&#x2F;code&gt; — À ne PAS renommer.&lt;&#x2F;h4&gt;
&lt;p&gt;Elle comporte la logique du widget ainsi que son template. C&#x27;est là que vous
allez le plus travailler sur votre widget.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;add-action&quot;&gt;&lt;code&gt;add_action()&lt;&#x2F;code&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Il faut modifier le paramètre de cette fonction avec le nom de la fonction
constructrice de votre widget. Si vous ne le faites pas, tout votre WordPress
sera cassé.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;exemple&quot;&gt;Un exemple de widget fonctionnel&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;http:&#x2F;&#x2F;dragnucs.legtux.org&#x2F;dragnucs&#x2F;rbentez&#x2F;ta9rba9tss&#x2F;2013&#x2F;02&#x2F;my-networks.png&quot; alt=&quot;My networks&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Voici son code :&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
&#x2F;*
Plugin Name: My Networks Widget
*&#x2F;

class my_networks_widget extends WP_Widget {
    function my_networks_widget() {
        parent::WP_Widget(false, $name = &#x27;My Networks&#x27;);
    }

    function widget($args, $instance) {
        extract($args);
        $title    = apply_filters(&#x27;widget_title&#x27;, $instance[&#x27;title&#x27;]);
        $twitter  = $instance[&#x27;twitter&#x27;];
        $facebook = $instance[&#x27;facebook&#x27;];
        echo $before_widget;
        if ($title) echo $before_title . $title . $after_title;
        ?&amp;gt;
        &amp;lt;div&amp;gt;
            &amp;lt;a href=&quot;http:&#x2F;&#x2F;www.facebook.com&#x2F;&amp;lt;?php echo $instance[&#x27;facebook&#x27;]; ?&amp;gt;&quot; target=&quot;_blank&quot;&amp;gt;
                Facebook
            &amp;lt;&#x2F;a&amp;gt;
        &amp;lt;&#x2F;div&amp;gt;
        &amp;lt;?php
        echo $after_widget;
    }

    function update($new_instance, $old_instance) {
        $instance = $old_instance;
        $instance[&#x27;title&#x27;]    = strip_tags($new_instance[&#x27;title&#x27;]);
        $instance[&#x27;twitter&#x27;]  = strip_tags($new_instance[&#x27;twitter&#x27;]);
        $instance[&#x27;facebook&#x27;] = strip_tags($new_instance[&#x27;facebook&#x27;]);
        return $instance;
    }

    function form($instance) {
        $title    = esc_attr($instance[&#x27;title&#x27;]);
        $twitter  = esc_attr($instance[&#x27;twitter&#x27;]);
        $facebook = esc_attr($instance[&#x27;facebook&#x27;]);
        ?&amp;gt;
        &amp;lt;p&amp;gt;
            &amp;lt;label for=&quot;&amp;lt;?php echo $this-&amp;gt;get_field_id(&#x27;title&#x27;); ?&amp;gt;&quot;&amp;gt;Title:&amp;lt;&#x2F;label&amp;gt;
            &amp;lt;input value=&quot;&amp;lt;?php echo $title; ?&amp;gt;&quot; type=&quot;text&quot; class=&quot;widefat&quot;
                   name=&quot;&amp;lt;?php echo $this-&amp;gt;get_field_name(&#x27;title&#x27;); ?&amp;gt;&quot;
                   id=&quot;&amp;lt;?php echo $this-&amp;gt;get_field_id(&#x27;title&#x27;); ?&amp;gt;&quot;&amp;gt;
        &amp;lt;&#x2F;p&amp;gt;
        &amp;lt;?php
    }
}

add_action(&#x27;widgets_init&#x27;, create_function(&#x27;&#x27;, &#x27;return register_widget(&quot;my_networks_widget&quot;);&#x27;));
?&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
      <item>
          <title>Linux : Résoudre le problème &quot;Système de fichier en lecture seule&quot; [read-only file system]</title>
          <pubDate>Wed, 02 Jan 2013 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/linux-fichier-lecture-seule/</link>
          <guid>https://touha.me/blog/linux-fichier-lecture-seule/</guid>
          <description xml:base="https://touha.me/blog/linux-fichier-lecture-seule/">&lt;p&gt;J&#x27;ai remarqué que des fois, quand je connecte mon smartphone ou autre clé de
stockage, celle-ci se met assez rapidement en lecture seule.&lt;&#x2F;p&gt;
&lt;p&gt;Quand je tente de remettre les fichiers en écriture avec &lt;code&gt;chmod&lt;&#x2F;code&gt; ou même &lt;code&gt;chown&lt;&#x2F;code&gt;,
j&#x27;ai l&#x27;erreur :&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;chown: changing ownership of ...: Read-only file system
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ceci empêche de mettre des fichiers sur son téléphone ou sa clé USB, et c&#x27;est
vraiment gênant.&lt;&#x2F;p&gt;
&lt;p&gt;La solution est de remonter le système de fichier avec remount en mode
lecture-écriture :&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;# mount -o rw,remount &#x2F;media&#x2F;disk
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Pour remettre le système de fichier en lecture seul :&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;# mount -o ro,remount &#x2F;media&#x2F;disk
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;catalin-festila.blogspot.com&#x2F;2013&#x2F;01&#x2F;linux-fedora-and-android-make-read-only.html&quot;&gt;Source [en]&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>GTK+3 et style CSS</title>
          <pubDate>Sat, 08 Dec 2012 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/gtk3-style-css/</link>
          <guid>https://touha.me/blog/gtk3-style-css/</guid>
          <description xml:base="https://touha.me/blog/gtk3-style-css/">&lt;p&gt;GTK+3 donne la possibilité de donner du style aux applications et aux widgets
via une description CSS-like très naturelle. Les designers familiers au CSS
pourront donc créer facilement de fabuleuses interfaces.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;theorie&quot;&gt;De la théorie&lt;&#x2F;h2&gt;
&lt;p&gt;Pour utiliser ce CSS, on va devoir se servir de l&#x27;objet
&lt;strong&gt;Gtk.CssProvider&lt;&#x2F;strong&gt;. On indique à ce CssProvider notre feuille de style qu&#x27;on
charge soit depuis un fichier .css soit d&#x27;une variable string. Il ne reste plus
qu&#x27;à appliquer ce CSS.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;css-application&quot;&gt;Appliquer le CSS sur l&#x27;ensemble de l&#x27;application&lt;&#x2F;h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from gi.repository import Gtk, Gdk

css = Gtk.CssProvider()
css.load_from_data(&#x27;&#x27;&#x27;
GtkEntry {
    color: #900185;
}&#x27;&#x27;&#x27;)

Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),
       css, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;css-widget&quot;&gt;Appliquer le CSS sur un seul widget&lt;&#x2F;h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;entry = Gtk.Entry()
css = Gtk.CssProvider()
css.load_from_data(&#x27;&#x27;&#x27;
GtkEntry {
    color: #900185;
}
&#x27;&#x27;&#x27;)
entry.get_style_context().add_provider(css, 600)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;selecteurs&quot;&gt;Sélecteurs&lt;&#x2F;h2&gt;
&lt;p&gt;On peut utiliser les sélecteurs CSS de la même façon :&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;&#x2F;* Donne du style aux labels qui descendent d&#x27;une fenêtre *&#x2F;
GtkWindow GtkLabel { background-color: #898989 }
&#x2F;* Style par classe *&#x2F;
.myClass { background-color: blue }
&#x2F;* Style par nom de widget *&#x2F;
#myWidget { background-color: red }
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
      <item>
          <title>Reprise de la Méthode Lafay</title>
          <pubDate>Sat, 06 Oct 2012 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/reprise-methode-lafay/</link>
          <guid>https://touha.me/blog/reprise-methode-lafay/</guid>
          <description xml:base="https://touha.me/blog/reprise-methode-lafay/">&lt;p&gt;Vous savez peut-être déjà que je suis un sportif, que je pratique
la &lt;a href=&quot;http:&#x2F;&#x2F;methode.lafay.free.fr&quot;&gt;méthode Lafay&lt;&#x2F;a&gt; et que, malgré les apparences,
je suis hyper actif.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;j-ai-maigri&quot;&gt;J&#x27;ai maigri&lt;&#x2F;h3&gt;
&lt;p&gt;Je suis descendu de 80Kg à 72Kg soit &lt;strong&gt;-8Kg&lt;&#x2F;strong&gt; et de 36cm de tour de bras à 32cm
soit &lt;strong&gt;-4cm&lt;&#x2F;strong&gt;. Sans parler des jambes. Je fais 1m 80.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;j-ai-refait-le-teste&quot;&gt;J&#x27;ai refait le teste&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code&gt;Tractions : 41
Dips      : 16
Pompes    : 13
Tractions : 20
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;mon-plan&quot;&gt;Mon plan&lt;&#x2F;h3&gt;
&lt;p&gt;Mon plan n&#x27;est pas vraiment un plan mais un mode de vie. J&#x27;ai certains objectifs
dans la vie que je remplirai coûte que coûte. Parmi eux, être bien bâti.&lt;&#x2F;p&gt;
&lt;p&gt;Je compte commencer l&#x27;entrainement le 7 Octobre 2012.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>[PHP] Récupérer le nombre de &quot;j&#x27;aime&quot; d&#x27;une page Facebook</title>
          <pubDate>Mon, 01 Oct 2012 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/facebook-graph-likes/</link>
          <guid>https://touha.me/blog/facebook-graph-likes/</guid>
          <description xml:base="https://touha.me/blog/facebook-graph-likes/">&lt;p&gt;Facebook propose aux développeurs une API pratique pour pouvoir interagir avec
Facebook de façon simple et efficace. C&#x27;est l&#x27;&lt;a href=&quot;https:&#x2F;&#x2F;developers.facebook.com&#x2F;docs&#x2F;reference&#x2F;api&#x2F;&quot;&gt;OpenGraph&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Voici une fonction PHP qui permet de récupérer le nombre de &quot;j&#x27;aime&quot; d&#x27;une page en utilisant l&#x27;OpenGraph :&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
function get_facebook_likes($page_name) {
    $json = file_get_contents(&#x27;http:&#x2F;&#x2F;graph.facebook.com&#x2F;&#x27;.$page_name);
    $resultat = json_decode($json, true);

    return $resultat[&quot;likes&quot;];
}

echo get_facebook_likes(&quot;dragnucs&quot;);
?&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;L&#x27;OpenGraph fonctionne de la sorte : On fait une requête HTTP des plus simples
avec l&#x27;URL de base, &lt;a href=&quot;http:&#x2F;&#x2F;graph.facebook.com&#x2F;&quot;&gt;&lt;em&gt;http:&#x2F;&#x2F;graph.facebook.com&#x2F;&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, suivie d&#x27;un ID qui peut
être soit numérique soit un &quot;pseudo&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Pour récupérer et décoder la réponse :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;file_get_contents&lt;&#x2F;code&gt;: Récupère le contenu d&#x27;un fichier (ici la réponse de l&#x27;OpenGraph).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;json_decode&lt;&#x2F;code&gt;: Décode la réponse de l&#x27;API décrite en format JSON.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;La variable &lt;code&gt;$resultat&lt;&#x2F;code&gt; contient un tableau d&#x27;informations. Il faut
simplement chercher la case &quot;likes&quot; (&lt;code&gt;$resultat[&#x27;likes&#x27;]&lt;&#x2F;code&gt;) pour avoir le
nombre de j&#x27;aime de la page.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Toolbar GTK+ 3</title>
          <pubDate>Tue, 25 Sep 2012 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/toolbar-gtk3/</link>
          <guid>https://touha.me/blog/toolbar-gtk3/</guid>
          <description xml:base="https://touha.me/blog/toolbar-gtk3/">&lt;p&gt;Si vous créez des toolbars avec GTK+ 3 elle ne suivra pas le style des autres
applications et ne s&#x27;affichera pas avec le fond cool peu plus sombre que le
reste de la fenêtre.&lt;&#x2F;p&gt;
&lt;p&gt;La solution consiste à indiquer au programme la toolbar principale et GTK+ 3
s&#x27;occupera de tout.&lt;&#x2F;p&gt;
&lt;p&gt;Vous pouvez ajouter ces lignes dans la description de la toolbar directement
dans le fichier .glade dans le noeud &lt;code&gt;&amp;lt;object class=&quot;GtkToolbar&quot;&#x2F;&amp;gt;&lt;&#x2F;code&gt; :&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;class name=&quot;primary-toolbar&quot;&#x2F;&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;&#x2F;strong&gt; : Il est désormais possible d&#x27;indiquer la classe &lt;strong&gt;primary-toolbar&lt;&#x2F;strong&gt;
depuis Glade.&lt;&#x2F;p&gt;
&lt;p&gt;Il y a aussi la classe &quot;inline-toolbar&quot; qui est utile si vous
voulez mettre votre toolbar au milieu de la fenêtre.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;python&quot;&gt;Python&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Exemple :&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from gi.repository import Gtk

class CoolToolbar:
    def __init__(self):
        self.win = Gtk.Builder()
        self.win.add_from_file(&quot;toolbar.glade&quot;)
        self.toolbar = self.win.get_object(&quot;toolbar&quot;)
        self.toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)
        self.win.connect_signals(self)

    def quit(self, widget):
        Gtk.main_quit()

if __name__ == &quot;__main__&quot;:
    CoolToolbar()
    Gtk.main()
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;cpp&quot;&gt;C++&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;m_toolbar-&amp;gt;get_style_context()-&amp;gt;add_class(GTK_STYLE_CLASS_PRIMARY_TOOLBAR);&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;gtkmm.h&amp;gt;
int main (int argc, char *argv[])
{
    Glib::RefPtr&amp;lt;Gtk::Application&amp;gt; app = Gtk::Application::create(argc, argv, &quot;org.gtkmm.toolbar&quot;);
    Gtk::Window main;
    Gtk::Toolbar* m_toolbar;
    Glib::RefPtr&amp;lt;Gtk::Builder&amp;gt; builder = Gtk::Builder::create_from_file(&quot;toolbar.glade&quot;);
    builder-&amp;gt;get_widget(&quot;toolbar&quot;, m_toolbar);
    m_toolbar-&amp;gt;get_style_context()-&amp;gt;add_class(GTK_STYLE_CLASS_PRIMARY_TOOLBAR);
    return app-&amp;gt;run(main);
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
      <item>
          <title>Gagner de l&#x27;espace disque sans supprimer ses données</title>
          <pubDate>Sun, 16 Sep 2012 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/gain-espace-disque/</link>
          <guid>https://touha.me/blog/gain-espace-disque/</guid>
          <description xml:base="https://touha.me/blog/gain-espace-disque/">&lt;p&gt;Je vais vous présenter quelques outils et méthodes qui vont vous permettre de
gagner de l&#x27;espace disque sans faire de sacrifice, aucun !&lt;&#x2F;p&gt;
&lt;p&gt;En bref, ces techniques sont :&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Suppression des paquetages orphelins&lt;&#x2F;li&gt;
&lt;li&gt;Compression des vidéos et fichiers audios&lt;&#x2F;li&gt;
&lt;li&gt;Réduction des images&lt;&#x2F;li&gt;
&lt;li&gt;Archivage des fichiers rarement utilisés&lt;&#x2F;li&gt;
&lt;li&gt;Suppression des fichiers en double&lt;&#x2F;li&gt;
&lt;li&gt;Suppression des répertoires vides&lt;&#x2F;li&gt;
&lt;li&gt;Suppression des fichiers de configurations inutiles&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;deborphan-package-cleanup&quot;&gt;Deborphan &amp;amp; package-cleanup — Se déparrasser des paquets orphelins&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;package-cleanup&lt;&#x2F;strong&gt; est pour Red Hat&#x2F;Centos&#x2F;Fedora. &lt;strong&gt;deborphan&lt;&#x2F;strong&gt; est pour Debian&#x2F;Ubuntu etc.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;package-cleanup&quot;&gt;package-cleanup&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code&gt;# yum remove `package-cleanup --leaves`
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;deborphan&quot;&gt;deborphan&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code&gt;$ sudo apt-get remove --purge `deborphan`
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;fslint&quot;&gt;FSlint — Suppression des fichiers en double&lt;&#x2F;h2&gt;
&lt;p&gt;FSlint permet d&#x27;analyser un ou plusieurs répertoires pour trouver les fichiers en double, les répertoires vides, les fichiers contenant des &lt;strong&gt;trailing spaces&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;touha.me&#x2F;images&#x2F;gain-espace-disque&#x2F;fslint.png&quot; alt=&quot;FSlint&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Duplicates :&lt;&#x2F;strong&gt; Trouver et supprimer les fichiers en double.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Temp files :&lt;&#x2F;strong&gt; Supprimer les fichiers temporaires.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Bad symlinks :&lt;&#x2F;strong&gt; Supprimer les raccourcis brisés.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Empty directory :&lt;&#x2F;strong&gt; Supprimer les répertoires vides.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;installation&quot;&gt;Installation&lt;&#x2F;h4&gt;
&lt;pre&gt;&lt;code&gt;$ sudo yum install fslint
$ sudo apt-get install fslint
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;soundconverter&quot;&gt;SoundConverter — Compresser les fichiers audio&lt;&#x2F;h2&gt;
&lt;p&gt;C&#x27;est un outil de conversion de fichiers audio en masse.&lt;&#x2F;p&gt;
&lt;p&gt;J&#x27;ai choisi de convertir mes 200GiB de MP3, FLAC et autres tous en OGG
192kbps. J&#x27;ai choisi ce format car il permet d&#x27;avoir des fichiers à la fois plus
performants et plus légers que son concurrent propriétaire MP3.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;touha.me&#x2F;images&#x2F;gain-espace-disque&#x2F;soundconverter.png&quot; alt=&quot;SoundConverter&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;touha.me&#x2F;images&#x2F;gain-espace-disque&#x2F;soundconverter-parametres.png&quot; alt=&quot;Les paramètres recommandés&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ceci m&#x27;a permis de réduire la taille de ma bibliothèque à plus de 40%, soit un peu plus de 80 GiB dans mon cas (208 GiB au départ).&lt;&#x2F;p&gt;
&lt;h4 id=&quot;installation-1&quot;&gt;Installation&lt;&#x2F;h4&gt;
&lt;pre&gt;&lt;code&gt;# yum install soundconverter
$ sudo apt-get install soundconverter
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;ffmpeg&quot;&gt;FFMPEG — Compresser les vidéos&lt;&#x2F;h2&gt;
&lt;p&gt;FFMPEG est un outil de traitement vidéo et audio très puissant. Voici des paramètres
qui m&#x27;ont permis de réduire mes vidéos de 4GiB à 1.5GiB sans réellement perdre en qualité :&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;ffmpeg -i video.mkv -vcodec libxvid -q:v 5 -s 640x272 -r 23.976 -g 240 \
-bf 2 -acodec libmp3lame -ab 160k -ar 48000 -async 48000 -ac 2 out.avi
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;imagemagick-mogrify&quot;&gt;ImageMagick: Mogrify — Réduire la taille de vos images&lt;&#x2F;h2&gt;
&lt;p&gt;Mogrify est un outil en ligne de commande faisant partie de la
suite &lt;a href=&quot;http:&#x2F;&#x2F;www.imagemagick.org&#x2F;script&#x2F;index.php&quot;&gt;ImageMagick&lt;&#x2F;a&gt;. Il permet de faire des opérations en masse sur
des images.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;mogrify -resize 700x700 *
mogrify -resize 700x700 *.jpg
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;handbrake&quot;&gt;HandBrake — Extraction des DVDrip ISO&lt;&#x2F;h2&gt;
&lt;p&gt;HandBrake est un outil basé sur &lt;strong&gt;ffmpeg&lt;&#x2F;strong&gt; et &lt;strong&gt;mplayer&lt;&#x2F;strong&gt; qui permet de
transcoder des DVD, Blu-Ray, et fichiers ISO. Je suis passé de deux Rips de 18 GiB à 5 GiB avec HandBrake.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;archivage-lzma&quot;&gt;Archivage des fichiers en LZMA&lt;&#x2F;h2&gt;
&lt;p&gt;LZMA ou 7z est un puissant algorithme de compression qui permet de réduire la taille des fichiers jusqu&#x27;à 75% et plus dans certains cas.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;touha.me&#x2F;images&#x2F;gain-espace-disque&#x2F;lzma.png&quot; alt=&quot;LZMA&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bonus&quot;&gt;Bonus&lt;&#x2F;h2&gt;
&lt;p&gt;C&#x27;est seulement dans cette partie que vous allez réellement supprimer des fichiers. On peut trouver :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Les fichiers de cache&lt;&#x2F;li&gt;
&lt;li&gt;Les fichiers de configuration inutiles&lt;&#x2F;li&gt;
&lt;li&gt;Les fichiers de configuration de logiciels supprimés&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Servez vous de &lt;strong&gt;Baobab&lt;&#x2F;strong&gt; pour analyser vos répertoires et repérer les gros fichiers.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;touha.me&#x2F;images&#x2F;gain-espace-disque&#x2F;Baobab.png&quot; alt=&quot;Baobab - Analyseur de l&#x27;usage de l&#x27;espace disque.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Bypasser les filtres anti-spam : L&#x27;homographie</title>
          <pubDate>Mon, 30 Jul 2012 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/anti-spam-bypass/</link>
          <guid>https://touha.me/blog/anti-spam-bypass/</guid>
          <description xml:base="https://touha.me/blog/anti-spam-bypass/">&lt;p&gt;Ceci est un article purement éducatif. Il n&#x27;a pour objectif que vous prévenir et
vous mettre dans la capacité de reconnaitre un spam.&lt;&#x2F;p&gt;
&lt;p&gt;La technique que je vais vous dévoiler permet au spammeur de bypaser les filtres
anti-spam. Les homographes sont des lettres qui ressemblent fortement mais n&#x27;ont pas
le même Unicode. Comme, par exemple, le &quot;0&quot; &lt;em&gt;zéro&lt;&#x2F;em&gt; et le &quot;O&quot; &lt;em&gt;oh&lt;&#x2F;em&gt; majuscule. Le
&quot;1&quot; &lt;em&gt;un&lt;&#x2F;em&gt;, le &quot;I&quot; &lt;em&gt;i&lt;&#x2F;em&gt; majuscule et le &quot;l&quot; &lt;em&gt;elle&lt;&#x2F;em&gt; minuscule.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;comment-marche-un-filtre-anti-spam&quot;&gt;Comment marche un filtre anti-spam&lt;&#x2F;h2&gt;
&lt;p&gt;Pour déterminer si un message est un spam ou non,
le filtre lui attribue un score en fonction du quel il tranche si c&#x27;est du
spam. Cette analyse se base sur trois points :&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;La provenance du message&lt;&#x2F;strong&gt; : Les filtres vérifie si le message provient d&#x27;un réseau de confiance.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;L&#x27;outil utilisé pour envoyer le message&lt;&#x2F;strong&gt; : Les filtres cherchent des indices dans l&#x27;entête du message.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Le contenu du message&lt;&#x2F;strong&gt; : C&#x27;est ce qui nous intéresse le plus. Ici le filtre cherche dans le contenu du message des phrases comme &quot;CLICK HERE&quot; ou les fameux &quot;FREE! BUY NOW&quot; mais aussi :
&lt;ul&gt;
&lt;li&gt;Si le message parle trop d&#x27;argent&lt;&#x2F;li&gt;
&lt;li&gt;Décrit une sorte de découverte&lt;&#x2F;li&gt;
&lt;li&gt;Ressemble à de la pub&lt;&#x2F;li&gt;
&lt;li&gt;Contient un truc super urgent&lt;&#x2F;li&gt;
&lt;li&gt;Garantit satisfait ou remboursé&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;comment-les-spammeurs-bypass-les-filtres&quot;&gt;Comment les spammeurs bypass les filtres anti-spam&lt;&#x2F;h2&gt;
&lt;p&gt;Il existe des symboles en grec et en cyrillique qui ressemblent à certains
caractères latins mais qui n&#x27;ont pas les mêmes Unicode. Par exemple &quot;CLICK HERE&quot; en
latin est détectable, mais &quot;СLIС НЕRЕ&quot;, qui contient des caractères cyrilliques
ne l&#x27;est absolument pas.&lt;&#x2F;p&gt;
&lt;p&gt;J&#x27;ai trouvé sur internet un script nommé &lt;strong&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.darkmaster.tk&#x2F;index.php&#x2F;tools&#x2F;10-homographit&quot;&gt;Homographit&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; qui
permet de simplifier cette tache en transformant la majorité des lettres latines
par des cyrilliques.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teste-efficacite&quot;&gt;Teste d&#x27;efficacité de la technique par homographie&lt;&#x2F;h2&gt;
&lt;p&gt;Pour tester l&#x27;efficacité de la technique par homographie, on va utiliser le
site &lt;a href=&quot;http:&#x2F;&#x2F;emailspamtest.com&quot;&gt;emailspamtest.com&lt;&#x2F;a&gt; qui se base sur les règles
de &lt;a href=&quot;http:&#x2F;&#x2F;spamassassin.apache.org&#x2F;&quot;&gt;Spam Assassin&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;touha.me&#x2F;images&#x2F;anti-spam-bypass&#x2F;score1.png&quot; alt=&quot;Le score du message spam non homographié&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ce message reçoit le score de 21.2, qui est un spam selon Spam Assassin car
supérieur à 5.&lt;&#x2F;p&gt;
&lt;p&gt;Si on le transforme avec homographit, le score redescend à 2.5. Il n&#x27;est donc
plus considéré comme étant spam.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;touha.me&#x2F;images&#x2F;anti-spam-bypass&#x2F;score2.png&quot; alt=&quot;Le score du message spam homographié&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Maintenant que vous savez comment fonctionnent les filtres anti-spam et
comment ils peuvent facilement être bypassed, vous pouvez jouer le rôle
de filtre par vous même.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Mon expérience réussie avec Backtrack 4 R2</title>
          <pubDate>Thu, 24 Mar 2011 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://touha.me/blog/backtrack-4-r2/</link>
          <guid>https://touha.me/blog/backtrack-4-r2/</guid>
          <description xml:base="https://touha.me/blog/backtrack-4-r2/">&lt;p&gt;Il n&#x27;y a pas très long temps, j&#x27;ai télécharger et installer la distribution
backtrack R2.&lt;&#x2F;p&gt;
&lt;p&gt;Pour résumer, c&#x27;est une distribution linux basé sur Debian (*buntu comme ils
disent sur leur site) utilisant l&#x27;environement KDE 3.x. La distribution est
principalement axé sur la sécurité, testes des vulnérabilités et intrusions.&lt;&#x2F;p&gt;
&lt;p&gt;J&#x27;ai installer cette distribution pour tester la sécurité de mon réseau wifi. La
première chose que j&#x27;ai constater c&#x27;est que la distribution reconnais tous mon
matériel sauf un, la carte wifi (ethernet marche bien), j&#x27;ai un HP 620. donc
pour tester ma sécurité wifi, j&#x27;ai apporter un autres ordinateur, un samsung
R510. sur ce dernier tout à été reconnu même la carte wifi.&lt;&#x2F;p&gt;
&lt;p&gt;Pour commencer, je vérifie dabord la prise en charge de la carte reseau. et là,
magie, complétement reconnue.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;# airmon-ng
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;J&#x27;ai remarquer un bel outils graphique pour utiliser la suite aircrack-ng plus
facilement. Je me décide donc de suite à m&#x27;en servire. Cet outil s&#x27;appel Gerix
WifiCracker. Il y a un autre, GrimWepa, mais il est moins bon.&lt;&#x2F;p&gt;
&lt;p&gt;Après deux heurs et demi de bidouage et d&#x27;attente j&#x27;ai réussie a cracker ma clé
WEP de 26 caractères. Pour ce faire il m&#x27;a fallut 666 Mib de données collecté
soit +80000 IVs. La duré du crack proprement dit à duré aproximativement 30min.&lt;&#x2F;p&gt;
&lt;p&gt;Et voici sans trop tarder le résumer et résultat en images :&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;touha.me&#x2F;images&#x2F;backtrack-4-r2&#x2F;10032011088.jpg&quot; alt=&quot;Aircrack&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Sur cette image vous pouvez voire le nombre IVs, le temps de crack ainsi que la
clé, et aussi les attaque que j&#x27;ai réalisé, sans oublier l&#x27;ordinateur avec
lequel j&#x27;ais procédé.&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
