give credit to Kaliko for the F2F idea
diff --git a/en/blog/Privacy_and_distant_storage.mdwn b/en/blog/Privacy_and_distant_storage.mdwn
index 5987875..c0cfe45 100644
--- a/en/blog/Privacy_and_distant_storage.mdwn
+++ b/en/blog/Privacy_and_distant_storage.mdwn
@@ -9,10 +9,10 @@ Of course, if your home burns, loosing your files will be the least of your conc
Then I realized that having backups in different geographic places does not necessarily endanger your privacy, it just depends on how you do it. What you need is to encrypt and/or cut the data so that the people who will store it for you will not be able to read or exploit it (just like [[!wikipedia_en Freenet]] does for different reasons).
-So the next question is where to store it ? I can think of three possibilities:
+So the next question is where to store it ? I came to see three possibilities:
-- pay for some storage service (I can't see a reason to do so but…)
-- share storage space with peers (the very nature of the Internet…)
-- share storage space with family or friends (the safest of the three)
+- pay for some storage service, might be necessary if you have a lot of data
+- share storage space with peers, this was my original thought
+- share storage space with family and/or friends, this the safest of the three and credit goes to Kaliko for suggesting it on the [utopians chat room](xmpp:utopians@muc.changaco.net?join)
I believe, like many others, that a good place for such sharing software is in [[!wikipedia_en residential gateway]]s, maybe we'll see it implemented someday in the [Freedom Box](http://wiki.debian.org/FreedomBox) ?
move smileys to underlay
diff --git a/smileys.mdwn b/smileys.mdwn
deleted file mode 100644
index 0251215..0000000
--- a/smileys.mdwn
+++ /dev/null
@@ -1,54 +0,0 @@
-This page is used to control what smileys are supported by the wiki.
-Just write the text of a smiley to display it.
-
-* \\:) [[smileys/smile.png]]
-* \\:-) [[smileys/smile.png]]
-* \\:D [[smileys/biggrin.png]]
-* \\:-D [[smileys/biggrin.png]]
-* \\B) [[smileys/smile2.png]]
-* \\B-) [[smileys/smile2.png]]
-* \\;) [[smileys/smile4.png]]
-* \\;-) [[smileys/smile4.png]]
-* \\:\ [[smileys/ohwell.png]]
-* \\:-\ [[smileys/ohwell.png]]
-* \\:/ [[smileys/ohwell.png]]
-* \\:-/ [[smileys/ohwell.png]]
-* \\:| [[smileys/neutral.png]]
-* \\:-| [[smileys/neutral.png]]
-* \\>:> [[smileys/devil.png]]
-* \\X-( [[smileys/angry.png]]
-* \\<:( [[smileys/frown.png]]
-* \\:( [[smileys/sad.png]]
-* \\:-( [[smileys/sad.png]]
-* \\:-? [[smileys/tongue.png]]
-* \\:-P [[smileys/tongue.png]]
-* \\:o [[smileys/redface.png]]
-* \\|) [[smileys/tired.png]]
-* \\|-) [[smileys/tired.png]]
-* \\{OK} [[smileys/thumbs-up.png]]
-* \\{X} [[smileys/icon-error.png]]
-* \\{i} [[smileys/icon-info.png]]
-* \\(./) [[smileys/checkmark.png]]
-* \\(!) [[smileys/idea.png]]
-* \\[!] [[smileys/attention.png]]
-* \\/!\ [[smileys/alert.png]]
-* \\(?) [[smileys/question.png]]
-* \\{x} [[smileys/star_on.png]]
-* \\{*} [[smileys/star_on.png]]
-* \\{o} [[smileys/star_off.png]]
-* \\{1} [[smileys/prio1.png]]
-* \\{2} [[smileys/prio2.png]]
-* \\{3} [[smileys/prio3.png]]
-
-For example: {x} B) {x}
-
-----
-
-To change the supported smileys, just edit the lists on this page.
-Note that the format is important; each list item should start with the
-text that is turned into the smiley, escaped so that users can see what
-produces it, followed by a [[ikiwiki/WikiLink]] to the image to display.
-
-/!\ Bear in mind that the link to the image needs to be written in a way that
-will work if it's copied to other pages on the wiki. So be sure to include the
-smileys directory in the path to the file.
add F2F and paying storage service possibilities
diff --git a/en/blog/Privacy_and_distant_storage.mdwn b/en/blog/Privacy_and_distant_storage.mdwn
index 61b0633..5987875 100644
--- a/en/blog/Privacy_and_distant_storage.mdwn
+++ b/en/blog/Privacy_and_distant_storage.mdwn
@@ -7,9 +7,12 @@ Some people seem to think that their data is only safe in their own homes. I agr
Of course, if your home burns, loosing your files will be the least of your concerns, but if you know they are safe it is one less thing to worry about.
-Then I thought of [[!wikipedia_en Freenet]] and realized that you can both:
+Then I realized that having backups in different geographic places does not necessarily endanger your privacy, it just depends on how you do it. What you need is to encrypt and/or cut the data so that the people who will store it for you will not be able to read or exploit it (just like [[!wikipedia_en Freenet]] does for different reasons).
-- keep your files home (and access them from anywhere through your [[!wikipedia_en residential gateway]] or other server)
-- back up your data in different geographic places
+So the next question is where to store it ? I can think of three possibilities:
-You just need to encrypt and/or cut the data so that the people who will store it for you will not be able to read or exploit it. «Free» (you host some and in exchange you can store some) distributed backups would be a good example of the real sharing peer-to-peer nature of the Internet. I don't know if people would be interested in this or not but at the very least it would be a good experimentation, maybe we'll see it implemented someday in the [Freedom Box](http://wiki.debian.org/FreedomBox) ?
+- pay for some storage service (I can't see a reason to do so but…)
+- share storage space with peers (the very nature of the Internet…)
+- share storage space with family or friends (the safest of the three)
+
+I believe, like many others, that a good place for such sharing software is in [[!wikipedia_en residential gateway]]s, maybe we'll see it implemented someday in the [Freedom Box](http://wiki.debian.org/FreedomBox) ?
remove double parenthesis smileys
diff --git a/smileys.mdwn b/smileys.mdwn
new file mode 100644
index 0000000..0251215
--- /dev/null
+++ b/smileys.mdwn
@@ -0,0 +1,54 @@
+This page is used to control what smileys are supported by the wiki.
+Just write the text of a smiley to display it.
+
+* \\:) [[smileys/smile.png]]
+* \\:-) [[smileys/smile.png]]
+* \\:D [[smileys/biggrin.png]]
+* \\:-D [[smileys/biggrin.png]]
+* \\B) [[smileys/smile2.png]]
+* \\B-) [[smileys/smile2.png]]
+* \\;) [[smileys/smile4.png]]
+* \\;-) [[smileys/smile4.png]]
+* \\:\ [[smileys/ohwell.png]]
+* \\:-\ [[smileys/ohwell.png]]
+* \\:/ [[smileys/ohwell.png]]
+* \\:-/ [[smileys/ohwell.png]]
+* \\:| [[smileys/neutral.png]]
+* \\:-| [[smileys/neutral.png]]
+* \\>:> [[smileys/devil.png]]
+* \\X-( [[smileys/angry.png]]
+* \\<:( [[smileys/frown.png]]
+* \\:( [[smileys/sad.png]]
+* \\:-( [[smileys/sad.png]]
+* \\:-? [[smileys/tongue.png]]
+* \\:-P [[smileys/tongue.png]]
+* \\:o [[smileys/redface.png]]
+* \\|) [[smileys/tired.png]]
+* \\|-) [[smileys/tired.png]]
+* \\{OK} [[smileys/thumbs-up.png]]
+* \\{X} [[smileys/icon-error.png]]
+* \\{i} [[smileys/icon-info.png]]
+* \\(./) [[smileys/checkmark.png]]
+* \\(!) [[smileys/idea.png]]
+* \\[!] [[smileys/attention.png]]
+* \\/!\ [[smileys/alert.png]]
+* \\(?) [[smileys/question.png]]
+* \\{x} [[smileys/star_on.png]]
+* \\{*} [[smileys/star_on.png]]
+* \\{o} [[smileys/star_off.png]]
+* \\{1} [[smileys/prio1.png]]
+* \\{2} [[smileys/prio2.png]]
+* \\{3} [[smileys/prio3.png]]
+
+For example: {x} B) {x}
+
+----
+
+To change the supported smileys, just edit the lists on this page.
+Note that the format is important; each list item should start with the
+text that is turned into the smiley, escaped so that users can see what
+produces it, followed by a [[ikiwiki/WikiLink]] to the image to display.
+
+/!\ Bear in mind that the link to the image needs to be written in a way that
+will work if it's copied to other pages on the wiki. So be sure to include the
+smileys directory in the path to the file.
removed useless tags
diff --git a/en/tags/foo.mdwn b/en/tags/foo.mdwn
deleted file mode 100644
index d6e14cd..0000000
--- a/en/tags/foo.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-[[!template id=tag tag="foo"]]
diff --git a/en/tags/life.mdwn b/en/tags/life.mdwn
deleted file mode 100644
index 43da7f2..0000000
--- a/en/tags/life.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-[[!template id=tag tag="life"]]
diff --git a/en/tags/tech.mdwn b/en/tags/tech.mdwn
deleted file mode 100644
index 2c9f515..0000000
--- a/en/tags/tech.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-[[!template id=tag tag="tech"]]
try to clarify sidebars titles
diff --git a/en/blog/sidebar.html b/en/blog/sidebar.html
index daecd44..c81ea11 100644
--- a/en/blog/sidebar.html
+++ b/en/blog/sidebar.html
@@ -1,4 +1,4 @@
<div>
-<h1>Tags</h1>
+<h1>Site Tags</h1>
[[!pagestats style="list" show="25" pages="en/tags/*"]]
</div>
diff --git a/fr/blog/sidebar.html b/fr/blog/sidebar.html
index b632464..549531d 100644
--- a/fr/blog/sidebar.html
+++ b/fr/blog/sidebar.html
@@ -1,4 +1,4 @@
<div lang="fr">
-<h1>Étiquettes</h1>
+<h1>Étiquettes du site</h1>
[[!pagestats style="list" show="25" pages="fr/tags/*"]]
</div>
created "internet" and "idea" tags for "Privacy and distant storage"
diff --git a/en/blog/Privacy_and_distant_storage.mdwn b/en/blog/Privacy_and_distant_storage.mdwn
index 80bc73a..61b0633 100644
--- a/en/blog/Privacy_and_distant_storage.mdwn
+++ b/en/blog/Privacy_and_distant_storage.mdwn
@@ -1,3 +1,5 @@
+[[!tag en/tags/internet en/tags/idea]]
+
Some people seem to think that their data is only safe in their own homes. I agree that not keeping a local copy or storing unprotected personal documents on a machine you don't control are bad things. But I was reminded today (while trolling on [Numerama](http://www.numerama.com/), a French tech-related news site) that having them home doesn't make them safe from:
- hardware failures such as hard drive breakdowns (although [smartmontools](http://smartmontools.sourceforge.net/) may be able to alert you before it is too late)
diff --git a/en/tags/idea.mdwn b/en/tags/idea.mdwn
new file mode 100644
index 0000000..aa05383
--- /dev/null
+++ b/en/tags/idea.mdwn
@@ -0,0 +1 @@
+[[!template id=tag tag="idea"]]
diff --git a/en/tags/internet.mdwn b/en/tags/internet.mdwn
new file mode 100644
index 0000000..e56c576
--- /dev/null
+++ b/en/tags/internet.mdwn
@@ -0,0 +1 @@
+[[!template id=tag tag="internet"]]
new english blog post: Privacy and distant storage
diff --git a/en/blog/Privacy_and_distant_storage.mdwn b/en/blog/Privacy_and_distant_storage.mdwn
new file mode 100644
index 0000000..80bc73a
--- /dev/null
+++ b/en/blog/Privacy_and_distant_storage.mdwn
@@ -0,0 +1,13 @@
+Some people seem to think that their data is only safe in their own homes. I agree that not keeping a local copy or storing unprotected personal documents on a machine you don't control are bad things. But I was reminded today (while trolling on [Numerama](http://www.numerama.com/), a French tech-related news site) that having them home doesn't make them safe from:
+
+- hardware failures such as hard drive breakdowns (although [smartmontools](http://smartmontools.sourceforge.net/) may be able to alert you before it is too late)
+- disasters such as fire
+
+Of course, if your home burns, loosing your files will be the least of your concerns, but if you know they are safe it is one less thing to worry about.
+
+Then I thought of [[!wikipedia_en Freenet]] and realized that you can both:
+
+- keep your files home (and access them from anywhere through your [[!wikipedia_en residential gateway]] or other server)
+- back up your data in different geographic places
+
+You just need to encrypt and/or cut the data so that the people who will store it for you will not be able to read or exploit it. «Free» (you host some and in exchange you can store some) distributed backups would be a good example of the real sharing peer-to-peer nature of the Internet. I don't know if people would be interested in this or not but at the very least it would be a good experimentation, maybe we'll see it implemented someday in the [Freedom Box](http://wiki.debian.org/FreedomBox) ?
removed
diff --git a/code/xib/comment_2_44c590c36cd6d6686bf7f27507b95937._comment b/code/xib/comment_2_44c590c36cd6d6686bf7f27507b95937._comment
deleted file mode 100644
index a7912a6..0000000
--- a/code/xib/comment_2_44c590c36cd6d6686bf7f27507b95937._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- ip="213.5.64.20"
- claimedauthor="pirate 4x4"
- url="http://cviewjo.com/webalizer/907/pirate-4x4.html"
- subject="bAHqYKXgwXPXdXS"
- date="2010-08-26T13:27:11Z"
- content="""
-http://internetmarketing-business.info/wordpress/356/free-proxy-server.html free proxy server, iex, http://hotwoire.com/webalizer/482/climbing-gear.html climbing gear, jkoy, http://tigerpartners.net/images/32/free-big-dick-videos.html free big dick videos, 21240, http://shivaminternational.com/New Folder (2)/437/online-wheel-of-fortune.html online wheel of fortune, 744, http://randombinary.com/webalizer/72/rent-case-skip-loaders.html rent case skip loaders, =-((, http://online-bargain-shopping.info/cp/088/amateur-teen-nude.html amateur teen nude, dxgai, http://upgradeyourlifeinaday.com/IXWEBimages/966/majicjack-review.html majicjack review, gdqhs, http://ministrymotors.com/Scripts/170/gmc-terrain-reviews.html gmc terrain reviews, >:-], http://za-projects.com/cp/450/emma-watson-topless.html emma watson topless, zrjl, http://mokshajewellery.com/moksha-bracelets/135/sarah-young-orgy.html sarah young orgy, >:[[,
-"""]]
removed
diff --git a/code/xib/comment_1_6f26664134b6d3df08b01c04aae2e62f._comment b/code/xib/comment_1_6f26664134b6d3df08b01c04aae2e62f._comment
deleted file mode 100644
index 1e3f15a..0000000
--- a/code/xib/comment_1_6f26664134b6d3df08b01c04aae2e62f._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- ip="213.5.64.20"
- claimedauthor="tight brunette pussy"
- url="http://laptop-batteries.in/wp-admin/571/tight-brunette-pussy.html"
- subject="mGHTaKrAzXloltNQW"
- date="2010-08-26T13:05:16Z"
- content="""
-http://ivy-designhouse.com/images/085/big-boops.html big boops, 8[, http://betterberight.com/webalizer/85/tree-houses.html tree houses, %-]]], http://adr-2.com/Download/843/erotic-stories-online.html erotic stories online, 40994, http://napmaseminar.com/cp/37/sara-jean-underwood-chrudat.html sara jean underwood chrudat, 0237, http://randombinary.com/webalizer/72/uk-tv-listings.html uk tv listings, 76534, http://worklaw.net/email_attachments/096/beautiful-young-pussy.html beautiful young pussy, djdwc, http://lakeville-homes-for-sale.com/components/54/miley-cyrus.html miley cyrus, 64516, http://monbster.com/53/irish-boy-names.html irish boy names, %-D, http://affordable-jewelry.info/images/441/dining-chairs.html dining chairs, tnnm, http://utopiapipe.com/ext/672/regal-entertainment-group.html regal entertainment group, wfxmfn, http://acrylic-bongs-manufacturers.com/images/60/baseball-card-values.html baseball card values, 43211,
-"""]]
Added a comment: bAHqYKXgwXPXdXS
diff --git a/code/xib/comment_2_44c590c36cd6d6686bf7f27507b95937._comment b/code/xib/comment_2_44c590c36cd6d6686bf7f27507b95937._comment
new file mode 100644
index 0000000..a7912a6
--- /dev/null
+++ b/code/xib/comment_2_44c590c36cd6d6686bf7f27507b95937._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ ip="213.5.64.20"
+ claimedauthor="pirate 4x4"
+ url="http://cviewjo.com/webalizer/907/pirate-4x4.html"
+ subject="bAHqYKXgwXPXdXS"
+ date="2010-08-26T13:27:11Z"
+ content="""
+http://internetmarketing-business.info/wordpress/356/free-proxy-server.html free proxy server, iex, http://hotwoire.com/webalizer/482/climbing-gear.html climbing gear, jkoy, http://tigerpartners.net/images/32/free-big-dick-videos.html free big dick videos, 21240, http://shivaminternational.com/New Folder (2)/437/online-wheel-of-fortune.html online wheel of fortune, 744, http://randombinary.com/webalizer/72/rent-case-skip-loaders.html rent case skip loaders, =-((, http://online-bargain-shopping.info/cp/088/amateur-teen-nude.html amateur teen nude, dxgai, http://upgradeyourlifeinaday.com/IXWEBimages/966/majicjack-review.html majicjack review, gdqhs, http://ministrymotors.com/Scripts/170/gmc-terrain-reviews.html gmc terrain reviews, >:-], http://za-projects.com/cp/450/emma-watson-topless.html emma watson topless, zrjl, http://mokshajewellery.com/moksha-bracelets/135/sarah-young-orgy.html sarah young orgy, >:[[,
+"""]]
Added a comment: mGHTaKrAzXloltNQW
diff --git a/code/xib/comment_1_6f26664134b6d3df08b01c04aae2e62f._comment b/code/xib/comment_1_6f26664134b6d3df08b01c04aae2e62f._comment
new file mode 100644
index 0000000..1e3f15a
--- /dev/null
+++ b/code/xib/comment_1_6f26664134b6d3df08b01c04aae2e62f._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ ip="213.5.64.20"
+ claimedauthor="tight brunette pussy"
+ url="http://laptop-batteries.in/wp-admin/571/tight-brunette-pussy.html"
+ subject="mGHTaKrAzXloltNQW"
+ date="2010-08-26T13:05:16Z"
+ content="""
+http://ivy-designhouse.com/images/085/big-boops.html big boops, 8[, http://betterberight.com/webalizer/85/tree-houses.html tree houses, %-]]], http://adr-2.com/Download/843/erotic-stories-online.html erotic stories online, 40994, http://napmaseminar.com/cp/37/sara-jean-underwood-chrudat.html sara jean underwood chrudat, 0237, http://randombinary.com/webalizer/72/uk-tv-listings.html uk tv listings, 76534, http://worklaw.net/email_attachments/096/beautiful-young-pussy.html beautiful young pussy, djdwc, http://lakeville-homes-for-sale.com/components/54/miley-cyrus.html miley cyrus, 64516, http://monbster.com/53/irish-boy-names.html irish boy names, %-D, http://affordable-jewelry.info/images/441/dining-chairs.html dining chairs, tnnm, http://utopiapipe.com/ext/672/regal-entertainment-group.html regal entertainment group, wfxmfn, http://acrylic-bongs-manufacturers.com/images/60/baseball-card-values.html baseball card values, 43211,
+"""]]
update code/user_scripts/videos_image_link.user.js
replace console.log() and console.error() by GM_log()
ask user before using eval()
exclude blip.tv
minor fixes
diff --git a/code/user_scripts/videos_image_link.user.js b/code/user_scripts/videos_image_link.user.js
index b905e6e..0a16797 100644
--- a/code/user_scripts/videos_image_link.user.js
+++ b/code/user_scripts/videos_image_link.user.js
@@ -1,14 +1,15 @@
// ==UserScript==
-// @name Videos Image Links
+// @name Videos Image Link
// @description Turns embedded videos (Blip.tv, DailyMotion, Vimeo and YouTube) into images with link to video.
// @license GPL <http://www.gnu.org/licenses/gpl.html>
// @replaces http://userscripts.org/scripts/show/12159
// @replaces http://userscripts.org/scripts/show/12213
// @replaces http://userscripts.org/scripts/show/55308
// @include *
+// @exclude http://*blip.tv/*
// @exclude http://*dailymotion.*
-// @exclude http://*youtube.*
// @exclude http://*vimeo.*
+// @exclude http://*youtube.*
// ==/UserScript==
function getJSON(url, callback, callback_args) {
@@ -22,23 +23,20 @@ function getJSON(url, callback, callback_args) {
// try JSON.parse() if available
if(JSON && JSON.parse) {
try {
- json = JSON.parse(r);
+ var json = JSON.parse(r);
} catch(e) {
- if(console) {
- console.log('JSON.parse() failed, url: '+this.url+'\nexception: '+e+'\ncontent:\n'+r);
- }
+ GM_log('JSON.parse() failed, url: '+this.url+'\nexception: '+e+'\ncontent:\n'+r);
}
}
// fall back to eval()
if(!json) {
+ if(!confirm('JSON.parse() failed on <'+this.url+'>. Do you want to use the unsafe eval() function?')) return;
try {
var json = eval(r);
} catch(e) {
- if(console) {
- if(JSON && JSON.parse) console.error('JSON parsing with eval() failed too for: '+this.url);
- else console.error('JSON parsing with eval() failed, url: '+this.url+'\nexception: '+e+'\ncontent:\n'+r);
- }
+ if(JSON && JSON.parse) GM_log('JSON parsing with eval() failed too for: '+this.url);
+ else GM_log('JSON parsing with eval() failed, url: '+this.url+'\nexception: '+e+'\ncontent:\n'+r);
return;
}
}
@@ -46,7 +44,7 @@ function getJSON(url, callback, callback_args) {
this.callback(json, this.callback_args);
},
onerror: function (result) {
- if(console) console.error('download of "'+this.url+'" failed:\nstatus: '+result.status+'\nresponseText:\n'+result.responseText);
+ GM_log('download of "'+this.url+'" failed:\nstatus: '+result.status+'\nresponseText:\n'+result.responseText);
},
callback: callback,
callback_args: callback_args
added metadata of videos_image_link.user.js in user_scripts.mdwn
diff --git a/code/user_scripts.mdwn b/code/user_scripts.mdwn
index b1cb306..803eecf 100644
--- a/code/user_scripts.mdwn
+++ b/code/user_scripts.mdwn
@@ -1,3 +1,9 @@
This page lists user scripts I wrote for web browser extensions like [greasemonkey](https://addons.mozilla.org/en-US/firefox/addon/748/) :
-* [[videos_image_link.user.js]] turns embedded videos (Blip.tv, DailyMotion, Vimeo and YouTube) into images with link to video
+* [[videos_image_link.user.js]] :
+ * Description : Turns embedded videos (Blip.tv, DailyMotion, Vimeo and YouTube) into images with link to video.
+ * License : GPL
+ * Replaces :
+ * [YouTubeImageLink](http://userscripts.org/scripts/show/12159)
+ * [YouTubeImageLink Edited](http://userscripts.org/scripts/show/12213)
+ * [Dailymotion Image Link](http://userscripts.org/scripts/show/55308)
add code/user_scripts/videos_image_link.user.js
diff --git a/code.mdwn b/code.mdwn
index 7c6c603..ac099a8 100644
--- a/code.mdwn
+++ b/code.mdwn
@@ -7,4 +7,5 @@ This page lists code I wrote :
* [[mp32ogg-bash]] : a bash script to convert mp3 files into ogg vorbis files
* [[nllibfind]]: a python script to help you find libraries explicitly installed that you don't really need
* [[nosudo]] : a very simple bash script that fakes sudo using su
+* [[user scripts]] for web browser extensions like [greasemonkey](https://addons.mozilla.org/en-US/firefox/addon/748/)
* [[xib]] : an XMPP ↔ IRC bridge bot written in python ( I don't maintain it anymore )
diff --git a/code/user_scripts.mdwn b/code/user_scripts.mdwn
new file mode 100644
index 0000000..b1cb306
--- /dev/null
+++ b/code/user_scripts.mdwn
@@ -0,0 +1,3 @@
+This page lists user scripts I wrote for web browser extensions like [greasemonkey](https://addons.mozilla.org/en-US/firefox/addon/748/) :
+
+* [[videos_image_link.user.js]] turns embedded videos (Blip.tv, DailyMotion, Vimeo and YouTube) into images with link to video
diff --git a/code/user_scripts/videos_image_link.user.js b/code/user_scripts/videos_image_link.user.js
new file mode 100644
index 0000000..b905e6e
--- /dev/null
+++ b/code/user_scripts/videos_image_link.user.js
@@ -0,0 +1,125 @@
+// ==UserScript==
+// @name Videos Image Links
+// @description Turns embedded videos (Blip.tv, DailyMotion, Vimeo and YouTube) into images with link to video.
+// @license GPL <http://www.gnu.org/licenses/gpl.html>
+// @replaces http://userscripts.org/scripts/show/12159
+// @replaces http://userscripts.org/scripts/show/12213
+// @replaces http://userscripts.org/scripts/show/55308
+// @include *
+// @exclude http://*dailymotion.*
+// @exclude http://*youtube.*
+// @exclude http://*vimeo.*
+// ==/UserScript==
+
+function getJSON(url, callback, callback_args) {
+ GM_xmlhttpRequest({
+ method: 'GET',
+ url: url,
+ onload: function (result) {
+ var r = result.responseText.trim();
+ if(r[0] == '{') r = '['+r+']';
+
+ // try JSON.parse() if available
+ if(JSON && JSON.parse) {
+ try {
+ json = JSON.parse(r);
+ } catch(e) {
+ if(console) {
+ console.log('JSON.parse() failed, url: '+this.url+'\nexception: '+e+'\ncontent:\n'+r);
+ }
+ }
+ }
+
+ // fall back to eval()
+ if(!json) {
+ try {
+ var json = eval(r);
+ } catch(e) {
+ if(console) {
+ if(JSON && JSON.parse) console.error('JSON parsing with eval() failed too for: '+this.url);
+ else console.error('JSON parsing with eval() failed, url: '+this.url+'\nexception: '+e+'\ncontent:\n'+r);
+ }
+ return;
+ }
+ }
+
+ this.callback(json, this.callback_args);
+ },
+ onerror: function (result) {
+ if(console) console.error('download of "'+this.url+'" failed:\nstatus: '+result.status+'\nresponseText:\n'+result.responseText);
+ },
+ callback: callback,
+ callback_args: callback_args
+ });
+}
+
+function replace(element, site_name, url, thumbnailURL) {
+ // replace an <object> or <embed> by a thumbnail in a link
+ div = document.createElement('div');
+ div.innerHTML =
+ '<strong>' + site_name + ' Video</strong><br />' +
+ '<a href="' + url + '" class="videoimagelink">' +
+ '<img src="' + thumbnailURL + '"></a>';
+ element.parentNode.replaceChild(div, element);
+}
+
+function test(element, str) {
+ // search for a known URL in str and replace element with an image link
+
+ // Blip.tv (requires JSON)
+ if(m = str.match(/http:\/\/blip.tv\/play\/([^\/&"']+)/)) {
+ var url = 'http://blip.tv/players/episode/'+m[1];
+ getJSON(
+ url+'?skin=json&version=2&no_wrap=1',
+ function (json, args) {
+ args.push(json[0].thumbnailUrl);
+ replace.apply(null, args);
+ },
+ [element, 'Blip.tv', url]
+ );
+ }
+
+ // Dailymotion
+ else if(m = str.match(/http:\/\/.*dailymotion\..*\/swf\/([^\/&"']+)/)) {
+ var id = m[1];
+ replace(element, 'Dailymotion', 'http://openvideo.dailymotion.com/video/'+id, 'http://dailymotion.com/thumbnail/160x120/video/'+id);
+ }
+
+ // Vimeo (requires JSON)
+ else if(m = str.match(/http:\/\/.*vimeo\..*swf\?.*clip_id=([^\/&"']+)/)) {
+ var id = m[1];
+ var video_url = 'http://vimeo.com/'+id;
+ getJSON(
+ 'http://vimeo.com/api/v2/video/'+id+'.json',
+ function (json, args) {
+ args.push(json[0].thumbnail_large);
+ replace.apply(null, args);
+ },
+ [element, 'Vimeo', video_url]
+ );
+ }
+
+ // Youtube
+ else if(m = str.match(/http:\/\/.*youtube\..*\/v\/([^\/&"]+)/)) {
+ var id = m[1];
+ replace(element, 'Youtube', 'http://youtube.com/watch?v='+id, 'http://img.youtube.com/vi/'+id+'/0.jpg');
+ }
+}
+
+// iterate through <object> and <embed> elements
+// we need arrays for safe iteration, i.e. make sure we don't miss some
+// which can happen because some are replaced asynchronously and HTMLCollection is dynamic
+
+var objects = Array.prototype.slice.call(document.getElementsByTagName('object'));
+for(var i = 0; i < objects.length; i++) {
+ var obj = objects[i];
+ test(obj, obj.innerHTML);
+}
+var embeds = Array.prototype.slice.call(document.getElementsByTagName('embed'));
+for(var i = 0; i < embeds.length; i++) {
+ var embed = embeds[i];
+ if(embed.parentNode.tagName == 'OBJECT') {
+ continue;
+ }
+ test(embed, embed.src);
+}
Revert "remove nllibfind.py"
This reverts commit e8de77624074f4b7406c183b033de6e334095187.
diff --git a/code.mdwn b/code.mdwn
index 048c8c1..7c6c603 100644
--- a/code.mdwn
+++ b/code.mdwn
@@ -5,5 +5,6 @@ This page lists code I wrote :
* [[chtml]] : JavaScript that creates real elements from HTML code contained in comments of the form `<!--(CHTML) ... -->`
* [[s2p2]] : a bash script to pre-process styles and scripts
* [[mp32ogg-bash]] : a bash script to convert mp3 files into ogg vorbis files
+* [[nllibfind]]: a python script to help you find libraries explicitly installed that you don't really need
* [[nosudo]] : a very simple bash script that fakes sudo using su
* [[xib]] : an XMPP ↔ IRC bridge bot written in python ( I don't maintain it anymore )
diff --git a/code/nllibfind.mdwn b/code/nllibfind.mdwn
index 5d3c90a..812f583 100644
--- a/code/nllibfind.mdwn
+++ b/code/nllibfind.mdwn
@@ -1 +1,22 @@
-nllibfind.py can be easily replaced by an alias like this : `alias nllibfind='package-query -Qit $(pacman -Qqs " lib")'` which you can put in `/etc/profile` for example.
+[[!tag code/by-lang/python]]
+
+## Introduction
+
+<abbr title="NeedLess Library Finder">nllibfind</abbr> is a python script to help you find libraries explicitly installed that you don't really need. It is licensed under GPLv3.
+
+Current version : 0.2
+
+## Dependencies
+
+* python
+* package-query
+
+## Downloads
+[[!template id="autoindex"]]
+
+## Changelog
+
+* 0.2
+ * lighter output format
+ * use of `re` module for better and case-insensitive searching
+* 0.1 : Initial release
diff --git a/code/nllibfind/nllibfind.py b/code/nllibfind/nllibfind.py
new file mode 100755
index 0000000..9ddf1a7
--- /dev/null
+++ b/code/nllibfind/nllibfind.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+"""This script helps you find libraries explicitly installed that you don't really need."""
+
+import re
+from subprocess import Popen, PIPE
+
+lib_re = re.compile(r'[ \A]lib', re.I)
+
+(stdout, stderr) = Popen(['package-query', '-Qitf', '%n %v (%g)\n\t%d\n'], stdout=PIPE).communicate()
+
+packages = stdout.split('\n\n')
+
+for pkg in packages:
+ name = pkg[:pkg.find(' ')]
+ description = pkg[pkg.find('\n\t')+2:]
+ if name.find('lib') != -1 or lib_re.search(pkg) is not None:
+ print pkg
remove nllibfind.py
diff --git a/code.mdwn b/code.mdwn
index 7c6c603..048c8c1 100644
--- a/code.mdwn
+++ b/code.mdwn
@@ -5,6 +5,5 @@ This page lists code I wrote :
* [[chtml]] : JavaScript that creates real elements from HTML code contained in comments of the form `<!--(CHTML) ... -->`
* [[s2p2]] : a bash script to pre-process styles and scripts
* [[mp32ogg-bash]] : a bash script to convert mp3 files into ogg vorbis files
-* [[nllibfind]]: a python script to help you find libraries explicitly installed that you don't really need
* [[nosudo]] : a very simple bash script that fakes sudo using su
* [[xib]] : an XMPP ↔ IRC bridge bot written in python ( I don't maintain it anymore )
diff --git a/code/nllibfind.mdwn b/code/nllibfind.mdwn
index 812f583..5d3c90a 100644
--- a/code/nllibfind.mdwn
+++ b/code/nllibfind.mdwn
@@ -1,22 +1 @@
-[[!tag code/by-lang/python]]
-
-## Introduction
-
-<abbr title="NeedLess Library Finder">nllibfind</abbr> is a python script to help you find libraries explicitly installed that you don't really need. It is licensed under GPLv3.
-
-Current version : 0.2
-
-## Dependencies
-
-* python
-* package-query
-
-## Downloads
-[[!template id="autoindex"]]
-
-## Changelog
-
-* 0.2
- * lighter output format
- * use of `re` module for better and case-insensitive searching
-* 0.1 : Initial release
+nllibfind.py can be easily replaced by an alias like this : `alias nllibfind='package-query -Qit $(pacman -Qqs " lib")'` which you can put in `/etc/profile` for example.
diff --git a/code/nllibfind/nllibfind.py b/code/nllibfind/nllibfind.py
deleted file mode 100755
index 9ddf1a7..0000000
--- a/code/nllibfind/nllibfind.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-"""This script helps you find libraries explicitly installed that you don't really need."""
-
-import re
-from subprocess import Popen, PIPE
-
-lib_re = re.compile(r'[ \A]lib', re.I)
-
-(stdout, stderr) = Popen(['package-query', '-Qitf', '%n %v (%g)\n\t%d\n'], stdout=PIPE).communicate()
-
-packages = stdout.split('\n\n')
-
-for pkg in packages:
- name = pkg[:pkg.find(' ')]
- description = pkg[pkg.find('\n\t')+2:]
- if name.find('lib') != -1 or lib_re.search(pkg) is not None:
- print pkg
nllibfind 0.2
diff --git a/code/nllibfind.mdwn b/code/nllibfind.mdwn
index df65ddb..812f583 100644
--- a/code/nllibfind.mdwn
+++ b/code/nllibfind.mdwn
@@ -4,7 +4,7 @@
<abbr title="NeedLess Library Finder">nllibfind</abbr> is a python script to help you find libraries explicitly installed that you don't really need. It is licensed under GPLv3.
-Current version : 0.1
+Current version : 0.2
## Dependencies
@@ -16,4 +16,7 @@ Current version : 0.1
## Changelog
+* 0.2
+ * lighter output format
+ * use of `re` module for better and case-insensitive searching
* 0.1 : Initial release
diff --git a/code/nllibfind/nllibfind.py b/code/nllibfind/nllibfind.py
index bf20059..9ddf1a7 100755
--- a/code/nllibfind/nllibfind.py
+++ b/code/nllibfind/nllibfind.py
@@ -17,12 +17,17 @@
"""This script helps you find libraries explicitly installed that you don't really need."""
+import re
from subprocess import Popen, PIPE
-(stdout, stderr) = Popen(['package-query', '-Qitf', '%r/%n %v [%l] (%g)\n\t%d\n'], stdout=PIPE).communicate()
+lib_re = re.compile(r'[ \A]lib', re.I)
+
+(stdout, stderr) = Popen(['package-query', '-Qitf', '%n %v (%g)\n\t%d\n'], stdout=PIPE).communicate()
packages = stdout.split('\n\n')
for pkg in packages:
- if pkg.find('lib') != -1:
+ name = pkg[:pkg.find(' ')]
+ description = pkg[pkg.find('\n\t')+2:]
+ if name.find('lib') != -1 or lib_re.search(pkg) is not None:
print pkg
oops, forgot to list nllibfind in code.mdwn
diff --git a/code.mdwn b/code.mdwn
index 048c8c1..7c6c603 100644
--- a/code.mdwn
+++ b/code.mdwn
@@ -5,5 +5,6 @@ This page lists code I wrote :
* [[chtml]] : JavaScript that creates real elements from HTML code contained in comments of the form `<!--(CHTML) ... -->`
* [[s2p2]] : a bash script to pre-process styles and scripts
* [[mp32ogg-bash]] : a bash script to convert mp3 files into ogg vorbis files
+* [[nllibfind]]: a python script to help you find libraries explicitly installed that you don't really need
* [[nosudo]] : a very simple bash script that fakes sudo using su
* [[xib]] : an XMPP ↔ IRC bridge bot written in python ( I don't maintain it anymore )
new python script: nllibfind
diff --git a/code/nllibfind.mdwn b/code/nllibfind.mdwn
new file mode 100644
index 0000000..df65ddb
--- /dev/null
+++ b/code/nllibfind.mdwn
@@ -0,0 +1,19 @@
+[[!tag code/by-lang/python]]
+
+## Introduction
+
+<abbr title="NeedLess Library Finder">nllibfind</abbr> is a python script to help you find libraries explicitly installed that you don't really need. It is licensed under GPLv3.
+
+Current version : 0.1
+
+## Dependencies
+
+* python
+* package-query
+
+## Downloads
+[[!template id="autoindex"]]
+
+## Changelog
+
+* 0.1 : Initial release
diff --git a/code/nllibfind/nllibfind.py b/code/nllibfind/nllibfind.py
new file mode 100755
index 0000000..bf20059
--- /dev/null
+++ b/code/nllibfind/nllibfind.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+"""This script helps you find libraries explicitly installed that you don't really need."""
+
+from subprocess import Popen, PIPE
+
+(stdout, stderr) = Popen(['package-query', '-Qitf', '%r/%n %v [%l] (%g)\n\t%d\n'], stdout=PIPE).communicate()
+
+packages = stdout.split('\n\n')
+
+for pkg in packages:
+ if pkg.find('lib') != -1:
+ print pkg
shorter way to target directories in zsh, thanks Link Mauve
diff --git a/en/blog/tabs_vs_spaces.mdwn b/en/blog/tabs_vs_spaces.mdwn
index 610bc2d..8479e72 100644
--- a/en/blog/tabs_vs_spaces.mdwn
+++ b/en/blog/tabs_vs_spaces.mdwn
@@ -23,7 +23,7 @@ The two first points are all about freedom, maybe you don't like proportional fo
As to the third point, people usually reject it by saying that it doesn't matter nowadays because of disks capacity, network speed and compression. Still, I wanted to make a *quick and dirty* measure of the impact of the 4 spaces policy on python 2.6 on my system as of June 2010 ( done in zsh ) :
# cd /usr/lib/python2.6
- # for f in **/*; do [ -d "$f" ] && mkdir -p "../python2.6.spaces/$f" "../python2.6.tabs/$f"; done;
+ # for f in **/*(/); do mkdir -p "../python2.6.spaces/$f" "../python2.6.tabs/$f"; done;
# for f in **/*.py; do cp "$f" "../python2.6.spaces/$f"; cp "$f" "../python2.6.tabs/$f"; done;
# du -h --max-depth=0 python2.6.*
43M python2.6.spaces
en/blog/tabs_vs_spaces.mdwn
diff --git a/en/blog/tabs_vs_spaces.mdwn b/en/blog/tabs_vs_spaces.mdwn
new file mode 100644
index 0000000..610bc2d
--- /dev/null
+++ b/en/blog/tabs_vs_spaces.mdwn
@@ -0,0 +1,54 @@
+In this post I try to summarize the different points of view on the tabs versus spaces war.
+
+## Decomposition of the problem
+
+Firstly, you need to understand the difference between the **tab key** and the **tab character**. What you text editor does when you press the tab key is a matter of configuration and has nothing to do with the problem discussed here.
+
+Secondly, we need to distinguish **indentation** and **alignment**, this is explained in [TABs vs Spaces. The end of the debate.](http://www.iovene.com/61) and shows why the historical rendering of tabs is not fit for alignment.
+
+## The solutions
+
+### Use only spaces
+
+This is the solution proposed by many and is notably exposed in [Tabs versus Spaces: An Eternal Holy War.](http://www.jwz.org/doc/tabs-vs-spaces.html)
+
+The obvious solution when dynamic doesn't work is to fall back to static. Using only spaces does indeed work for both indentation and aligning and you can configure most text editors to make it as easy as using tabs. So, what's wrong with it ? Here's a list :
+
+- you can't use proportional fonts
+- you can't easily change the indentation width
+- your files are larger
+
+The two first points are all about freedom, maybe you don't like proportional fonts to code, but some people do.
+
+As to the third point, people usually reject it by saying that it doesn't matter nowadays because of disks capacity, network speed and compression. Still, I wanted to make a *quick and dirty* measure of the impact of the 4 spaces policy on python 2.6 on my system as of June 2010 ( done in zsh ) :
+
+ # cd /usr/lib/python2.6
+ # for f in **/*; do [ -d "$f" ] && mkdir -p "../python2.6.spaces/$f" "../python2.6.tabs/$f"; done;
+ # for f in **/*.py; do cp "$f" "../python2.6.spaces/$f"; cp "$f" "../python2.6.tabs/$f"; done;
+ # du -h --max-depth=0 python2.6.*
+ 43M python2.6.spaces
+ 43M python2.6.tabs
+
+ # cd ../python2.6.tabs
+ # sed 's/^\(\t*\) /\1\t/' -i **/*.py
+ # du -h --max-depth=0 ../python2.6.tabs
+ 41M ../python2.6.tabs
+ # sed 's/^\(\t*\) /\1\t/' -i **/*.py
+ # du -h --max-depth=0 ../python2.6.tabs
+ 39M ../python2.6.tabs
+
+ ... I did it two more times but the rounded number stayed 39M
+
+The result is that using 4 spaces instead of tabs makes files about 10% bigger. If you get a different result or tested something else than python 2.6 I invite you to post a comment.
+
+### Use spaces for alignment
+
+Since the problem with tabs is alignment, some people argue that you can use whatever you want for indentation as long as you use spaces for alignment. If you choose to use tabs, the indentation width is no longer an issue and most of the space waste goes away, but you still can't use proportional fonts.
+
+### Elastic tabstops
+
+This solution solves all the issues listed here and makes alignment easier. How ? By redefining the way the tab character is displayed. It's all explained in [Elastic tabstops - a better way to indent and align code](http://nickgravgaard.com/elastictabstops/). The downside is that text editors' code has to be modified.
+
+## My opinion
+
+I use tabs for indentation, I avoid alignment and I wish elastic tabstops were more widely known, implemented and used.
réponse à la fermeture automatique des commentaires
diff --git "a/fr/blog/R\303\251ponse_\303\240_Daniel_Glazman.mdwn" "b/fr/blog/R\303\251ponse_\303\240_Daniel_Glazman.mdwn"
index baeb379..5fe093c 100644
--- "a/fr/blog/R\303\251ponse_\303\240_Daniel_Glazman.mdwn"
+++ "b/fr/blog/R\303\251ponse_\303\240_Daniel_Glazman.mdwn"
@@ -9,7 +9,7 @@ Voir entre autres : [Free Distribution](http://hcsoftware.sourceforge.net/jaso
J'avoue que c'était plutôt *trollesque*, j'aurais pu commencer par une question plus neutre sur le pourquoi du modèle économique choisi.
-C'est là que commencent les choses intéressantes. Tout d'abord, les commentaires étaient modérés à priori ce qui compliquait le débat en introduisant de longs délais, on a continué malgré tout, jusqu'à ce que M. Nitot ferme les commentaires, sans donner d'explication.
+C'est là que commencent les choses intéressantes. Tout d'abord, les commentaires étaient modérés à priori ce qui compliquait le débat en introduisant de longs délais, on a continué malgré tout, jusqu'à ce que M. Nitot ferme les commentaires, sans donner d'explication. <a href="#note1" id="note1_c1" title="Aller à la note 1">1</a>
Puis quelqu'un qui est abonné au blog de M. Glazman m'envoie un message sur Jabber pour me signaler que celui-ci a publié un billet pour continuer le débat : [Usual suspects - <Glazblog/>](http://www.glazman.org/weblog/dotclear/index.php?post/2010/04/07/Usual-suspects).
@@ -22,3 +22,8 @@ Tout d'abord je tiens à faire remarquer que j'ai passé pas mal de temps à ré
>je ne vois pas en quoi le modèle économique de la vente d'extensions propriétaires serait sûr. Par exemple si la communauté développe les mêmes en libre que ferez-vous ? La course aux fonctionnalités ?
Enfin, et c'est la motivation première de ce billet, je tiens à dénoncer cette pratique de la fermeture des commentaires totalement contraire à la liberté d'expression, il y a des façons plus civilisées de clore un débat, qu'il soit *trollesque* ou non.
+
+<a id="note1" href="#note1_c1">↑</a> **Édit :** on me rétorque que les commentaires sont fermés automatiquement aux bouts de 3 jours sur le Standblog. À cela je réponds deux choses :
+
+- je ne vois aucune mention de ça sur ledit blog, il me semble que la moindre des choses serait de le signaler
+- je suis autant en désaccord avec cette pratique qu'avec la fermeture manuelle
minor fixes
diff --git "a/fr/blog/R\303\251ponse_\303\240_Daniel_Glazman.mdwn" "b/fr/blog/R\303\251ponse_\303\240_Daniel_Glazman.mdwn"
index 97b4bab..baeb379 100644
--- "a/fr/blog/R\303\251ponse_\303\240_Daniel_Glazman.mdwn"
+++ "b/fr/blog/R\303\251ponse_\303\240_Daniel_Glazman.mdwn"
@@ -7,9 +7,9 @@ Commençons par poser le décor, l'histoire commence avec une [interview de Dani
>Encore et toujours en train d'essayer de vendre des copies, quand allez-vous comprendre que ce n'est pas un modèle viable ?<br />
Voir entre autres : [Free Distribution](http://hcsoftware.sourceforge.net/jason-rohrer/freeDistribution.html).
-J'avoue que c'était plutôt trollesque, j'aurais pu commencer par une question plus neutre sur le pourquoi du modèle économique choisi.
+J'avoue que c'était plutôt *trollesque*, j'aurais pu commencer par une question plus neutre sur le pourquoi du modèle économique choisi.
-C'est là que commencent les choses intéressantes. Tout d'abord, les commentaires étaient modérés *à priori* ce qui compliquait le débat en introduisant de longs délais, on a continué malgré tout, jusqu'à ce que M. Nitot ferme les commentaires, sans donner d'explication.
+C'est là que commencent les choses intéressantes. Tout d'abord, les commentaires étaient modérés à priori ce qui compliquait le débat en introduisant de longs délais, on a continué malgré tout, jusqu'à ce que M. Nitot ferme les commentaires, sans donner d'explication.
Puis quelqu'un qui est abonné au blog de M. Glazman m'envoie un message sur Jabber pour me signaler que celui-ci a publié un billet pour continuer le débat : [Usual suspects - <Glazblog/>](http://www.glazman.org/weblog/dotclear/index.php?post/2010/04/07/Usual-suspects).
@@ -21,4 +21,4 @@ Tout d'abord je tiens à faire remarquer que j'ai passé pas mal de temps à ré
>je ne vois pas en quoi le modèle économique de la vente d'extensions propriétaires serait sûr. Par exemple si la communauté développe les mêmes en libre que ferez-vous ? La course aux fonctionnalités ?
-Enfin, et c'est la motivation première de ce billet, je tiens à dénoncer cette pratique de la fermeture des commentaires totalement contraire à la liberté d'expression, il y a des façons plus civilisées de clore un débat.
+Enfin, et c'est la motivation première de ce billet, je tiens à dénoncer cette pratique de la fermeture des commentaires totalement contraire à la liberté d'expression, il y a des façons plus civilisées de clore un débat, qu'il soit *trollesque* ou non.
add favicon
diff --git a/images/favicon.png b/images/favicon.png
new file mode 100644
index 0000000..b13d263
Binary files /dev/null and b/images/favicon.png differ