-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
688 lines (329 loc) · 21.8 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
<!DOCTYPE html>
<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
<head>
<meta charset="utf-8">
<title>mind.dump()</title>
<meta name="author" content="Florent Bruneau">
<meta name="description" content="After more than four years of inactivity on my personal blog
(I’ve been busy blogging professionally
in the meantime), I’ve decided to …">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="canonical" href="http://blog.mymind.fr">
<link href="/favicon.png" rel="icon">
<link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
<link href="/atom.xml" rel="alternate" title="mind.dump()" type="application/atom+xml">
<script src="/javascripts/modernizr-2.0.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="./javascripts/libs/jquery.min.js"%3E%3C/script%3E'))</script>
<script src="/javascripts/octopress.js" type="text/javascript"></script>
<!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
<link href="http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
<link href="http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
</head>
<body >
<header role="banner"><hgroup>
<h1><a href="/">mind.dump()</a></h1>
<h2>Random thoughts...</h2>
</hgroup>
</header>
<nav role="navigation"><ul class="subscription" data-subscription="rss">
<li><a href="https://twitter.com/FlorentBruneau" rel="follow-twitter" title="Follow on Twitter">Twitter</a></li>
<li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
</ul>
<ul class="main-navigation">
<li><a href="/">Blog</a></li>
<li><a href="/blog/archives">Archives</a></li>
</ul>
</nav>
<div id="main">
<div id="content">
<div class="blog-index">
<article>
<header>
<h1 class="entry-title"><a href="/blog/2013/12/29/from-dotclear-to-octopress/">From Dotclear to Octopress</a></h1>
<p class="meta">
<time datetime="2013-12-29T22:07:24+01:00" pubdate data-updated="true">Dec 29<span>th</span>, 2013</time>
| <a href="/blog/2013/12/29/from-dotclear-to-octopress/#disqus_thread"
data-disqus-identifier="http://blog.mymind.fr/blog/2013/12/29/from-dotclear-to-octopress/">Comments</a>
</p>
</header>
<div class="entry-content"><p>After more than four years of inactivity on my personal blog
(I’ve been busy <a href="https://techtalk.intersec.com">blogging professionally</a>
in the meantime), I’ve decided to migrate my old blog to
<a href="http://octopress.org">Octopress</a>.</p>
<p>Several reasons for this. The first one is mostly that I don’t believe
<a href="http://dotclear.org">Dotclear</a> has a future anymore. At the time I chose
Dotclear over Wordpress, it was in very active development, going from 1.x
to 2.x with regular release and a very active community: it was a
promising software that could have fought side by side with wordpress.
Morevoer, it was a french software.</p>
<p>However, Dotclear is probably to much of a carbon copy of wordpress: same
technology (PHP), same admin architecture, … to make the difference.
Wordpress is backed by a dedicated compagny, and Dotclear which is made as a
hobby project just can’t catch up. As a consequence, there is no technical
reason to use dotclear over wordpress anymore: the later has a much more
active development pace, a wide ecosystem and a very active community…
Dotclear has been completely forgotten: only its own community care about
it. Tools such as Disqus don’t provide any integrated solution for dotclear,
leaving users to hack the code of their theme if they wish to integrate
that kind of service. Even tools that aims at providing migration utility
to other blogging platform don’t list Dotclear as a source platform.</p>
<p>The second reason is that I find it completely overkill to run some PHP
to serve a near-static content. My blog has not been update for 4 years, but
every time someone reads a page, it goes through some PHP. PHP may be (have
been) great for dynamic sites, but not for delivering content: it consumes
resources and may contain security hole. The sole dynamic part of the site
that is user-facing is the comment system… however nowadays services like
Disqus, Google or Facebook can be integrated in your site for this in just
a few lines of HTML/javascript (and by selling your soul to the devil):
you may have an interactive site with only static pages.</p>
<p>So, its done, my site has been migrated to a new static platform and is
hosted by github (which wasn’t mandatory but frees me from a bit of system
administration). I couldn’t find any packaged tool to perform the migration
so I wrote one <a href="https://gist.github.com/Fruneau/8174826">small script</a> by
myself. If the script is of interest for you here is how to proceed:</p>
<ul>
<li>export the database and the media library of your blog from Dotclear maintenance
page</li>
<li>unpack the media library in the <code>source/assets</code> directory of Octopress</li>
<li>run the Python script on the database export (which should be named
<code>python dotclear-octopress.py <date>-<blogname>-<backup>.txt</code> (the scripts
runs in Python and requires <code>pip install phpserialize</code>)</li>
<li>the script should have generated a new directory that contains a series of
<code>.csv</code> file and a subdirectory called <code>_posts</code> that contains the markdown
pages for your old blog posts.</li>
<li>copy the content of <code>_posts</code> to <code>source/_posts</code> of Octopress.</li>
</ul>
<p>At this point, the result is not perfect (but I’m sure the script can be improved),
you’ll still have to go through your posts and check that they were properly
<em>markdownified</em> (Dotclear source text is in a Dotclear-specific wiki syntax,
the script tries to do the conversion, but it is not 100% accurate and will
miss some corner cases).</p>
<p>The script also dump a file <code>rss.xml</code> that contains the extended RSS format that
can be used to import discussions on <a href="http://disqus.com">Disqus</a>.</p>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2009/04/07/yet-another-policy-daemon-for-postfix2/">Yet Another Policy Daemon for Postfix</a></h1>
<p class="meta">
<time datetime="2009-04-07T00:04:00+02:00" pubdate data-updated="true">Apr 7<span>th</span>, 2009</time>
| <a href="/blog/2009/04/07/yet-another-policy-daemon-for-postfix2/#disqus_thread"
data-disqus-identifier="http://blog.mymind.fr/blog/2009/04/07/yet-another-policy-daemon-for-postfix2/">Comments</a>
</p>
</header>
<div class="entry-content"><p><a href="http://blog.madism.org/index.php/2007/08/29/136-postfix-and-srs">MadCoder announced it months ago</a>, he has been working on the pfixtools. The second tool of the <a href="http://www.postfix.com">postfix</a>-related toolsuite is named <strong>postlicyd</strong>.</p>
<p>postlicyd is a versatile <a href="http://www.postfix.org/SMTPD_POLICY_README.html">policy daemon</a> written in C. It does greylisting (far faster than postgrey), it performs R(H)BL access (both locally directly from rbldns zone files and remotely by using DNS), … So, it can be used as a replacement for <a href="http://packages.qa.debian.org/w/whitelister.html">whitelister</a> and <a href="http://postgrey.schweikert.ch/">postgrey</a> with a significant improvement of the performances.</p>
<p>On the same server (with the same email trafic), postlicyd is more than 20 times faster than postgrey:</p>
<ul>
<li>Process load: postgrey ~20% CPU, postlicyd less than 1% CPU</li>
<li>Data base cleanup for 1M entries: postgrey 20 minutes, postlicyd 40 seconds</li>
</ul>
<p>Moreover, it is aware of the ‘session’ feature of the POLICY protocol. Thus, you can write complex configurations and define policies that do not depend on a single SMTP command (like RCPT) but on the whole SMTP transaction…</p>
<p>More informations: [<a href="http://pfixtools.mymind.fr">http://pfixtools.mymind.fr</a>]</p>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2008/06/04/polytechniqueorg-lance-son-blog/">Polytechnique.org Lance Son Blog</a></h1>
<p class="meta">
<time datetime="2008-06-04T01:33:00+02:00" pubdate data-updated="true">Jun 4<span>th</span>, 2008</time>
| <a href="/blog/2008/06/04/polytechniqueorg-lance-son-blog/#disqus_thread"
data-disqus-identifier="http://blog.mymind.fr/blog/2008/06/04/polytechniqueorg-lance-son-blog/">Comments</a>
</p>
</header>
<div class="entry-content"><p>Voilà… cela fait assez longtemps que nous recevons des demandes d’utilisateurs pour la mise en place de blog via Polytechnique.org. Afin de préparer la mise en place de ce service, Polytechnique.org lance son blog. Cela permettra à la fois :</p>
<ul>
<li>de tester l’outil d’intégration de l’authentification de Polytechnique.org dans Dotclear.</li>
<li>d’offrir une nouvelle plateforme souple et conviviale pour informer nos utilisateurs.</li>
</ul>
<p>Je ne vais pas m’étendre davantage vu que ce ne serait que recopier <a href="http://blog.polytechnique.org/post/2008/06/01/Creation-du-blog-de-lequipe-Polytechniqueorg">le post d’Aymeric</a></p>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2008/05/19/vieux-trucs/">Vieux Trucs</a></h1>
<p class="meta">
<time datetime="2008-05-19T00:50:00+02:00" pubdate data-updated="true">May 19<span>th</span>, 2008</time>
| <a href="/blog/2008/05/19/vieux-trucs/#disqus_thread"
data-disqus-identifier="http://blog.mymind.fr/blog/2008/05/19/vieux-trucs/">Comments</a>
</p>
</header>
<div class="entry-content"><p>Un peu de nostalgie. Je suis retombé sur de vieux programmes que j’avais fait pour ma calculatrice (TI-92) quand j’étais en 1<sup>ère</sup>/Terminale. A mon époque (pas si lointaine… j’ai passé mon bac en 2001), ces outils couvraient le programme de Terminal S (spécialité maths) avec :</p>
</div>
<footer>
<a rel="full-article" href="/blog/2008/05/19/vieux-trucs/">Continue →</a>
</footer>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2008/03/02/encodage-et-terminal/">Encodage Et Terminal</a></h1>
<p class="meta">
<time datetime="2008-03-02T12:57:00+01:00" pubdate data-updated="true">Mar 2<span>nd</span>, 2008</time>
| <a href="/blog/2008/03/02/encodage-et-terminal/#disqus_thread"
data-disqus-identifier="http://blog.mymind.fr/blog/2008/03/02/encodage-et-terminal/">Comments</a>
</p>
</header>
<div class="entry-content"><p>Beaucoup de personnes avec qui je discute sur IRC ont des problèmes avec l’encodage de leur terminal, de leur shell, de leur irssi, ou de tout autre logiciel en “ligne de commande”. Comme j’en ai un peu marre d’expliquer la même chose toutes les semaines, voici une petite mise au point sur les réglages à faire pour travailler efficacement en ligne de commande.</p>
</div>
<footer>
<a rel="full-article" href="/blog/2008/03/02/encodage-et-terminal/">Continue →</a>
</footer>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2007/11/01/afficher-des-discussions/">Afficher Des Discussions</a></h1>
<p class="meta">
<time datetime="2007-11-01T18:24:00+01:00" pubdate data-updated="true">Nov 1<span>st</span>, 2007</time>
| <a href="/blog/2007/11/01/afficher-des-discussions/#disqus_thread"
data-disqus-identifier="http://blog.mymind.fr/blog/2007/11/01/afficher-des-discussions/">Comments</a>
</p>
</header>
<div class="entry-content"><p>Lorsqu’un logiciel a pour vocation d’afficher des discussions, on attend de sa part qu’il nous permette de voir simplement qui répond à qui, dans quel contexte… Ce n’est pas toujours ce qui est le mieux fait. Par exemple, les programmes de fora en ligne à la mode (phpBB par exemple) affiche les discussion comme une succession de rectangles juxtaposés et seul le contenu du message permet de voir qu’il en cite un autre. D’autres logiciels comme Mail.app ont ce défaut et parfois la fâcheuse manie de ne pas vouloir corriger ce problème.</p>
<p>L’affichage de l’arborescence dans <a href="http://opensource.polytechnique.org/banana">Banana</a> est une des fonctionnalités clés… et elle va beaucoup changer dans la prochaine version.</p>
</div>
<footer>
<a rel="full-article" href="/blog/2007/11/01/afficher-des-discussions/">Continue →</a>
</footer>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2007/10/08/15-000/">15 000</a></h1>
<p class="meta">
<time datetime="2007-10-08T00:32:00+02:00" pubdate data-updated="true">Oct 8<span>th</span>, 2007</time>
| <a href="/blog/2007/10/08/15-000/#disqus_thread"
data-disqus-identifier="http://blog.mymind.fr/blog/2007/10/08/15-000/">Comments</a>
</p>
</header>
<div class="entry-content"><p>Ca y est… 15 000 inscrits à <a href="https://www.polytechnique.org">Polytechnique.org</a>.</p>
<p><img src="http://blog.mymind.fr/assets/screenshots/15.000.png" alt="15.000 inscrits" /></p>
<p>Si l’ascension continue, nous devrions atteindre les 16 000 l’année prochaine.</p>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2007/08/31/compter-les-fichiers/">Compter Les Fichiers</a></h1>
<p class="meta">
<time datetime="2007-08-31T01:12:00+02:00" pubdate data-updated="true">Aug 31<span>st</span>, 2007</time>
| <a href="/blog/2007/08/31/compter-les-fichiers/#disqus_thread"
data-disqus-identifier="http://blog.mymind.fr/blog/2007/08/31/compter-les-fichiers/">Comments</a>
</p>
</header>
<div class="entry-content"><p>C’est un peu la suite de mon post “Outils pratiques” où je donnais deux scripts permettant de rendre les commandes SVN plus conviviales. Encore une fois, je réinvente sans doute la roue (des outils équivalents doivent déjà exister… sans doute en mieux), mais je pense que chercher ce genre d’outils sur internet m’aurait pris plus de temps que ce qu’il m’a fallu pour le développer.</p>
<p>En ce moment je manipule des fichiers, beaucoup de fichiers (et même, beaucoup de gros fichiers), que j’ouvre, rouvre, et ferme et puis referme. Et à force d’ouvrir, on oublie parfois de refermer, et là, c’est comme une fuite de mémoire, sauf que le nombre limite de fichiers ouverts est beaucoup plus rapidement atteinte que la limite de mémoire… dans la configuration de base sur un linux, un programme n’a le droit qu’à 1024 descripteurs de fichiers. D’où mon problème : comment traquer les “file-handle leaks” ?</p>
</div>
<footer>
<a rel="full-article" href="/blog/2007/08/31/compter-les-fichiers/">Continue →</a>
</footer>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2007/08/17/templates-en-c/">Templates en C</a></h1>
<p class="meta">
<time datetime="2007-08-17T00:53:00+02:00" pubdate data-updated="true">Aug 17<span>th</span>, 2007</time>
| <a href="/blog/2007/08/17/templates-en-c/#disqus_thread"
data-disqus-identifier="http://blog.mymind.fr/blog/2007/08/17/templates-en-c/">Comments</a>
</p>
</header>
<div class="entry-content"><p>En C++, il existe un mécanisme extrêmement pratique pour généré du code générique : les templates. Une fonction templatée est une fonction dont le code comporte un trou qui sera remplacé à la compilation par le nom d’un type, ou une valeur… Par exemple :</p>
<pre><code>template <class T>
T read(const char *buffer)
{
T val;
memcpy(&val, buffer, sizeof(T));
return val;
}
</code></pre>
<p>Cette fonction lit un objet de type T sur un buffer. L’intérêt de cette fonction est très compréhensible : quel que soit le type qu’on fournit à la fonction, elle va fonctionner, en adaptant la taille à lire au type. C’est donc beaucoup plus rapide que d’écrire une fonction pour chaque type… et l’utilisation est également très simple :</p>
<pre><code>read<int>(const char* buffer) // lit un entier sur le buffer
read<double>(const char* buffer) // lit un double sur le buffer
read<MaClass>(const char* buffer) // lit un objet de type "MaClass"
</code></pre>
<p>Mais cette syntaxe n’est qu’un sucre syntaxique, car en fait, on peut également faire des templates en C…</p>
</div>
<footer>
<a rel="full-article" href="/blog/2007/08/17/templates-en-c/">Continue →</a>
</footer>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2007/08/15/comprendre-du-code/">Comprendre Du Code</a></h1>
<p class="meta">
<time datetime="2007-08-15T03:28:00+02:00" pubdate data-updated="true">Aug 15<span>th</span>, 2007</time>
| <a href="/blog/2007/08/15/comprendre-du-code/#disqus_thread"
data-disqus-identifier="http://blog.mymind.fr/blog/2007/08/15/comprendre-du-code/">Comments</a>
</p>
</header>
<div class="entry-content"><p>J’ai tenté cet après-midi une petite expérience sur IRC. J’ai posté 3 lignes de code en demandant “que font ces trois lignes”. Après quelques minutes (sans doute trop peu), j’ai donné la solution car personne n’avait vraiment trouvé. En effet, même si on réussi facilement à lire le code et à reconstituer la suite d’opération qu’il génère, il est très difficile de vraiment comprendre ce qu’il fait, d’imaginer son application dans un contexte et d’en déduire son usage.</p>
<p>Juste pour continuer à m’amuser, et pour amuser ceux qui se perdraient ici, voici le code en question.</p>
</div>
<footer>
<a rel="full-article" href="/blog/2007/08/15/comprendre-du-code/">Continue →</a>
</footer>
</article>
<div class="pagination">
<a class="prev" href="/blog/page/2/">← Older</a>
<a href="/blog/archives">Blog Archives</a>
</div>
</div>
<aside class="sidebar">
<section>
<h1>Recent Posts</h1>
<ul id="recent_posts">
<li class="post">
<a href="/blog/2013/12/29/from-dotclear-to-octopress/">From Dotclear to Octopress</a>
</li>
<li class="post">
<a href="/blog/2009/04/07/yet-another-policy-daemon-for-postfix2/">Yet Another Policy Daemon for Postfix</a>
</li>
<li class="post">
<a href="/blog/2008/06/04/polytechniqueorg-lance-son-blog/">Polytechnique.org Lance Son Blog</a>
</li>
<li class="post">
<a href="/blog/2008/05/19/vieux-trucs/">Vieux Trucs</a>
</li>
<li class="post">
<a href="/blog/2008/03/02/encodage-et-terminal/">Encodage Et Terminal</a>
</li>
</ul>
</section>
</aside>
</div>
</div>
<footer role="contentinfo"><p>
Copyright © 2014 - Florent Bruneau -
<span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
</p>
</footer>
<script type="text/javascript">
var disqus_shortname = 'blogmymind';
var disqus_script = 'count.js';
(function () {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/' + disqus_script;
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
}());
</script>
<script type="text/javascript">
(function() {
var script = document.createElement('script'); script.type = 'text/javascript'; script.async = true;
script.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(script, s);
})();
</script>
<script type="text/javascript">
(function(){
var twitterWidgets = document.createElement('script');
twitterWidgets.type = 'text/javascript';
twitterWidgets.async = true;
twitterWidgets.src = '//platform.twitter.com/widgets.js';
document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
})();
</script>
</body>
</html>