diff --git a/.gems b/.gems new file mode 100644 index 0000000..1564d76 --- /dev/null +++ b/.gems @@ -0,0 +1,3 @@ +rack +rack-contrib +rack-rewrite diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..9753274 --- /dev/null +++ b/Rakefile @@ -0,0 +1,6 @@ +require 'nanoc3/tasks' +require 'rake/clean' + +CLEAN.include('tmp/**/*') +CLOBBER.include('output/Scratch/{en,fr,assets}') + diff --git a/Rules b/Rules new file mode 100644 index 0000000..f5649d6 --- /dev/null +++ b/Rules @@ -0,0 +1,107 @@ +#!/usr/bin/env ruby + +# engendrement des fichiers html + +# page d'Accueil +#route '/' do +# '/index.html' +#end + +# CSS +compile '/css/*' do + filter :no_custom_css + filter :sass + filter :rainpress +end +route '/css/*' do + '/Scratch/assets' + item.identifier.chop + '.css' +end +compile '/img/*' do +end +route '/img/*' do + '/Scratch/assets' + item.identifier.chop + '.png' +end + +compile '/css/raw/*' do +end +route '/css/raw/*' do + '/Scratch' + item.identifier.sub(/raw\//,'').chop + '.css' +end + +# JS +compile '/js/*' do +end +route '/js/*' do + '/Scratch/assets' + item.identifier.chop + '.js' +end + +compile '/html' do + filter :erb + layout 'main' unless item[:layout] == "none" +end +route '/html' do + '/index.html' +end + +compile '/html/*' do + # item[:extension] returns 'html.erb' for multi-dotted filename + ext = item[:extension].nil? ? nil : item[:extension].split('.').last + + filter :ultraviolet # must be before kramdown + filter :graph + filter :description + filter :falacy + + if ext == 'erb' + filter :erb + elsif ext == 'haml' || ext.nil? + filter :haml + elsif ext == 'md' || ext == 'markdown' + filter :erb + filter :kramdown + filter :math_repair # after kramdown + else + raise "Filter is not configured for #{item.identifier} in Rules file." + end + + filter :multicorps # must be before firsthi + filter :firsthi # must be after multicorps + filter :frenchspace + filter :ytypo + # filter :yabbreviations + filter :footnotes + + if item[:kind] == 'article' + layout 'main' + elsif not item[:layout].nil? + layout item[:layout] + else + layout 'main' unless item[:layout] == "none" + end +end + +route '/html/*' do + '/Scratch' + item.identifier.sub('/html','') + 'index.html' +end + +# feed +compile '/xml/*' do + layout 'feed' +end + +route '/xml/en/*' do + '/Scratch/en/blog/feed/feed.xml' +end +route '/xml/fr/*' do + '/Scratch/fr/blog/feed/feed.xml' +end + +compile '/sitemap/*' do + layout 'sitemap' +end +route '/sitemap/*' do + '/Scratch/sitemap.xml' +end + +layout '*', :erb + diff --git a/config.rb b/config.rb new file mode 100644 index 0000000..79c467a --- /dev/null +++ b/config.rb @@ -0,0 +1,10 @@ +http_path = "/" +project_path = "." +sass_dir = "compass" +css_dir = "output/Scratch/assets/css" +images_dir = "output/Scratch/assets/img" + +# wehn using SCSS: +sass_options = { + :syntax => :scss +} diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..ea143f0 --- /dev/null +++ b/config.yaml @@ -0,0 +1,92 @@ +--- +data_sources: +- items_root: / + layouts_root: / + type: filesystem_unified +output_dir: site +ultraviolet_theme: "twilight" +webprefix: "/Scratch" +base_url: "http://yannesposito.com" +author_uri: "http://yannesposito.com" +rss_uri: + fr: "http://feeds.feedburner.com/yannespositocomfr" + en: "http://feeds.feedburner.com/yannespositocomen" + +# les langues +languages: + - fr + - en + +# les formats de date en fonction de la langue +dateFormat: + fr: "%d/%m/%Y" + en: "%m/%d/%Y" + +# le dictionnaire pour les mots communs +translations: + author: + fr: "auteur" + en: "author" + langue: + fr: "langue" + en: "language" + switchTo: + fr: "en Français" + en: "in English" + clickForComment: + fr: "Commentaires" + en: "Comments" + liens: + fr: "liens" + en: "links" + telecharger: + fr: "télécharger" + en: "download" + nojsclickme: + fr: "Javascript semble désactivé ;
cliquez ici" + en: "Javascript seems disabled
click on me" + nextArticles: + fr: "articles suivants" + en: "next entries" + next: + fr: "suivant" + en: "next" + previousArticles: + fr: "articles précédents" + en: "previous entries" + previous: + fr: "précédent" + en: "previous" + comment: + fr: "commentaires" + en: "comments" + onlyin: + fr: "Seulement en" + en: "Only in" + whatsthis: + fr: "Qu'est-ce que c'est ?" + en: "What's this?" + loading: + fr: "Chargement en cours..." + en: "loading..." + entirely_done_with: + en: "Entirely done with" + fr: "Site entièrement réalisé avec" + and: + en: "and" + fr: "et" + created_at: + en: "Created" + fr: "Écrit le " + last_modified: + en: "Modified" + fr: "modifié le " + copyright: + en: "Copyright ©, Yann Esposito" + fr: "Droits de reproduction ©, Yann Esposito" + subscribe: + en: "Subscribe" + fr: "s'abonner" + enableJavascriptToComment: + en: "You must enable javascript to comment." + fr: "Vous devez activer javascript pour commenter." diff --git a/content/html/en/blog.erb b/content/html/en/blog.erb new file mode 100644 index 0000000..42657d5 --- /dev/null +++ b/content/html/en/blog.erb @@ -0,0 +1,94 @@ +----- +kind: blog +title: Blog +menupriority: 2 +noSubMenu: true +----- +<% + number_of_articles=5 + number_of_char_for_resume=800 + language=@item_rep.path.sub(/\/Scratch\//,'').sub(/\/.*$/,'') + last_articles = @items.select do |a| + a.reps[0].path =~ /\/#{language}\// && a[:kind] == 'article' + end + last_articles=last_articles.sort { |x,y| y[:created_at] <=> x[:created_at] }[0..(number_of_articles-1)] + +def dArr + return %{} +end +%> + + + +

+Last <%= number_of_articles %> Articles +

+ + + +<% last_articles.each do |a| %> +

+ <%= calendar_for( a[:created_at], language ) %> + <%= link_to(a[:title]+%{ »}, a) %> +

+ +
+ + <% + puts "%%%" + puts excerptize( a.reps[0].compiled_content, {:length => number_of_char_for_resume}) + puts "%%%" + %> + <%= repair_html ( excerptize( a.reps[0].compiled_content, {:length => number_of_char_for_resume} ) ) %> + +
+
+

+ <%= link_to(%{Read more »}, a) %> +

+
+ +
+<% end %> + +
+
+<%= tagCloud %> +
+
+ +

Archives

+ +<%= generateBlogSubMenu(language) %> + +

+Two words about the content +

+ + +
+ +

+Here you'll can find mostly technical articles. +Some are just reminder of technical tips. +But some are long and technically detailled articles. +

+
+

+ I do my best to traduce each page in french and in english. +It not always easy. English is not my natural language. +I make many errors, orthographic, grammatical, typographical… +

+

+ Thanks not to judge me based on these errors! And don't forget content is more important than presentation! +

+The first impression I'll let you if we meet in real life should be different from the one I let you based on my website. +

+I wish you to find something useful or interesting on this website. +

+ diff --git a/content/html/en/index.erb b/content/html/en/index.erb new file mode 100644 index 0000000..9846b3d --- /dev/null +++ b/content/html/en/index.erb @@ -0,0 +1,52 @@ +--- +title: YPassword +noSubMenu: true +no_entete: true +--- +<% content_for :title do %> + + YPassword + +<% end %> +<% content_for :subtitle do %> + Yogsototh +<% end %> + +
+
+

+ + Blog + » + +

+

+ Computer, Philosophy & Life. +

+
+
+

+ + Softwares + » + +

+

+ Password Manager, + Screensavers & + Scientific Applications. +

+
+
+

+ Contact + » + +

+

+ Don't be shy, I'll be happy to talk to you. +

+ +
+ +
diff --git a/content/html/fr/blog.erb b/content/html/fr/blog.erb new file mode 100644 index 0000000..6d8d24a --- /dev/null +++ b/content/html/fr/blog.erb @@ -0,0 +1,96 @@ +----- +kind: blog +title: Blog +menupriority: 2 +noSubMenu: true +----- +<% + number_of_articles=5 + number_of_char_for_resume=800 + language=@item_rep.path.sub(/\/Scratch\//,'').sub(/\/.*$/,'') + last_articles = @items.select do |a| + a.reps[0].path =~ /\/#{language}\// && a[:kind] == 'article' + end + last_articles=last_articles.sort { |x,y| y[:created_at] <=> x[:created_at] }[0..(number_of_articles-1)] + +def dArr + return %{} +end +%> + + + +

+Les <%= number_of_articles %> derniers articles +

+ +
+ +<% last_articles.each do |a| %> +

+ <%= calendar_for( a[:created_at], language ) %> + <%= link_to(a[:title]+%{ »}, a) %> +

+ +
+ + <% + puts "%%%" + puts excerptize( a.reps[0].compiled_content, {:length => number_of_char_for_resume}) + puts "%%%" + %> + <%= repair_html ( excerptize( a.reps[0].compiled_content, {:length => number_of_char_for_resume} ) ) %> + +
+
+

+ <%= link_to(%{en lire plus »}, a) %> +

+
+ +
+<% end %> + +
+
+<%= tagCloud %> +
+
+ +

Archives

+ +<%= generateBlogSubMenu(language) %> + +

+Un petit mot sur le contenu +

+ + +
+ + +

+Vous trouverez ici des articles qui sont pour la plupart +écrits en anglais et qui sont techniques. +Certain sont justes là pour me souvenir de petits trucs, que +d'autres pourraient trouver utiles. Mais il y a aussi de +long articles techniques qui vont un peu plus dans les détails. +

+


+

+ Je fais de mon mieux pour traduire chaque page en anglais et en français. +Cependant, ce n'est pas toujours évident. +Il m'arrive de faire de nombreuses fautes d'orthographes, des erreurs typographiques et autres. +

+

+ Merci de ne pas me juger sur ces erreurs et de ne pas oublier que le fond est plus important que la forme. +

+L'impression que ce site laisse de moi n'est certainement pas l'impression que je vous laisserais si on se rencontrait. +

+Je vous souhaite de trouver ce que vous cherchez sur ce site. +

diff --git a/content/html/fr/index.erb b/content/html/fr/index.erb new file mode 100644 index 0000000..a0e2e30 --- /dev/null +++ b/content/html/fr/index.erb @@ -0,0 +1,97 @@ +--- +title: Bienvenue +noSubMenu: true +no_entete: true +--- +<% content_for :title do %> + + YPassword + +<% end %> +<% content_for :subtitle do %> + Yogsototh +<% end %> + +
+ +
+

+ + Blog + » + +

+

+ Ordinateurs, philosophie & des choses de la vie. +

+
+
+

+ + Logiciels + » + +

+

+ Des économiseurs d'écran, + un gestionnaire de mots de passe & + des applications scientifiques. +

+
+
+

+ + Contact + » + +

+

+ Au diable la timidité, n'hésitez pas à me contacter, je serai ravi de vous parler. +

+
+
+
+

+ + Curriculum Vitæ + » + +

+

+ Doctorat → Post Doc → Consultant
+ Geek → G33K → G33|< + +

+ +
+
+

+ + Enseignement + » + +

+

+ Informatique:
+ TD, TD & solutions
+ BAC+1 à BAC+5
+ Projet réseau anonyme + » + +

+
+
+

+ + Photos + » + +

+

+ + Cliquez ici pour avoir le mot de passe. + » + +

+
+
diff --git a/content/sitemap/sitemap.html b/content/sitemap/sitemap.html new file mode 100644 index 0000000..dea4904 --- /dev/null +++ b/content/sitemap/sitemap.html @@ -0,0 +1,4 @@ +--- +--- + +used for generating sitemap. diff --git a/content/xml/en/feed.html b/content/xml/en/feed.html new file mode 100644 index 0000000..37660d0 --- /dev/null +++ b/content/xml/en/feed.html @@ -0,0 +1,7 @@ +--- +title: "Yogsototh's last blogs entries" +author_name: "Yann Esposito" +feed_url: "http://feeds.feedburner.com/yannespositocomen" +--- + +used for generating feeds. diff --git a/content/xml/fr/feed.html b/content/xml/fr/feed.html new file mode 100644 index 0000000..3adb964 --- /dev/null +++ b/content/xml/fr/feed.html @@ -0,0 +1,7 @@ +--- +title: "Yogsototh's last blogs entries" +author_name: "Yann Esposito" +feed_url: "http://feeds.feedburner.com/yannespositocomfr" +--- + +Utilisé pour engendrer mes feeds. diff --git a/latest.md b/latest.md new file mode 120000 index 0000000..cccddb7 --- /dev/null +++ b/latest.md @@ -0,0 +1 @@ +./multi/blog/2011-04-20-Now-hosted-on-github.md \ No newline at end of file diff --git a/layouts/article.html b/layouts/article.html new file mode 100644 index 0000000..1b7a722 --- /dev/null +++ b/layouts/article.html @@ -0,0 +1,183 @@ +----- +----- +<% language, languages, blog, article = setItemConf %> + + + + + <% t=tags %> + <% if t.length > 0 %> + + <% end %> + + + + + + <% + languages.each do |lang| + item_for_lang=item_of_language(lang) + if not item_for_lang.nil? %> + <% + end + end %> + + + + + + <%= @item[:title] %> + + + + +
+ +
+ +
+ <%= languages.map do |l| + dest=@item_rep.path.sub(%r{#{@config[:webprefix]}/../}, %{#{config[:webprefix]}/#{l}/}) + if @item_rep.path != dest + %{#{ tradOfKeywordIn(:switchTo,l)}} + else + nil + end + end.join() %> +
+
+
+

+ <%= @item[:title] %> +

+ <% unless @item[:subtitle].nil? %> +

+ <%= @item[:subtitle] %> +

+ <% end %> +
+ +
+ + <% if @item[:content_for_summary] %> +
+ <% @item[:content_for_summary] %> +
+ <% end %> + + <%= generateSubMenu %> + +
+
+
+ <%= yield %> +
+ <% depth = depthOf(@item) %> + <% if depth > 3 or ( depth == 3 and @item.children.length > 0 ) %> + +
+ <% end %> + + + +
+
+

<%= tradOf(:comment) %>

+ + <%= generateIntenseDebateThread %> +
+ +
+
+ <%= generateMenu %> +
+
+
+
+ + +
+
+
+ + +
+
+ <%=tradOf(:copyright) %> +
+
+ <%=tradOf(:created_at)%>: <%= @item[:created_at].strftime(@config[:dateFormat][language.intern]) %> + <%=tradOf(:last_modified)%>: <%= gitmtime.strftime(@config[:dateFormat][language.intern]) %> +
+
+ <%= tradOf(:entirely_done_with) %> + Vim + <%= tradOf(:and) %> + nanoc +
+
+ Validation + [xhtml] + . + [css] + . + [rss] +
+
+
+
+ <%= clicky_analytics %> + + diff --git a/layouts/default.html b/layouts/default.html new file mode 100644 index 0000000..0f1ca26 --- /dev/null +++ b/layouts/default.html @@ -0,0 +1,97 @@ +----- +----- +<% language, languages, blog, article = setItemConf %> + + + + + <%= meta_tags %> + + + + <%= meta_alternate %> + + + + + <%= @item[:title] %> + + + + +
+ <% unless @item[:no_entete] %> +
+
+
<%= choixrss %>
+
<%= choixlang %>
+
+ <%= generateMenu %> +
+
+
+ <% end %> + Presentation drawing +
+

+ <%= @item[:content_for_title].nil? ? @item[:title] : @item[:content_for_title] %> +

+ <% unless @item[:subtitle].nil? and @item[:content_for_subtitle].nil? %> +

+ <%= @item[:content_for_subtitle].nil? ? @item[:subtitle] : @item[:content_for_subtitle] %> +

+ <% end %> +
+ +
+ + <% if @item[:content_for_summary] %> +
+ <% @item[:content_for_summary] %> +
+ <% end %> + + <%= generateSubMenu %> + +
+ +
+
+ <%= yield %> + <% unless @item[:no_entete] %> + + <% end %> +
+
+
+ <%=tradOf(:copyright) %> +
+
+ <%=tradOf(:last_modified)%>: <%= gitmtime.strftime(@config[:dateFormat][language.intern]) %> +
+
+ <%= tradOf(:entirely_done_with) %> + Vim + <%= tradOf(:and) %> + nanoc +
+ +
+
+
+ <%= clicky_analytics %> + + diff --git a/layouts/error.html b/layouts/error.html new file mode 100644 index 0000000..58fdfc2 --- /dev/null +++ b/layouts/error.html @@ -0,0 +1,70 @@ +----- +----- + + + + + + <% t=tags %> + <% if t.length > 0 %> + + <% end %> + + + + + + <%= @item[:title] %> + + +
+ + Presentation drawing + +

+ <%= @item[:title] %> +

+ <% unless @item[:subtitle].nil? %> +
+

+ <%= @item[:subtitle] %> +

+
+ <% end %> + +
+ +
+
+ <%= yield %> +
+
+
+ <%=tradOfKeywordIn(:copyright,"en") %> +
+
+ <%=tradOfKeywordIn(:last_modified,"en")%>: <%= gitmtime.strftime(@config[:dateFormat][:en]) %> +
+
+ <%= tradOfKeywordIn(:entirely_done_with,"en") %> + Vim + <%= tradOfKeywordIn(:and,"en") %> + nanoc +
+ +
+
+
+ <%= clicky_analytics %> + + diff --git a/layouts/feed.html b/layouts/feed.html new file mode 100644 index 0000000..934069f --- /dev/null +++ b/layouts/feed.html @@ -0,0 +1,17 @@ +----- +----- +<% +language=@item_rep.path.sub(%r{#{@config[:webprefix]}/},'').sub(/\/.*$/,'') +number_of_char_for_resume=800 +%><%= +# atom_feed( { +# :articles => articles.select { |a| a.reps[0].path =~ /\/#{language}\// }, +# :content_proc =>lambda { |a| +# repair_html( +# excerptize( +# a.compiled_content(:snapshot => :pre), +# {:length => number_of_char_for_resume} )) +# }, +# :limit => 40 +# }) +%> diff --git a/layouts/main.html b/layouts/main.html new file mode 100644 index 0000000..daf38ae --- /dev/null +++ b/layouts/main.html @@ -0,0 +1,127 @@ +<% language, languages, blog, article = setItemConf %> + + + + + + + + + + + + <%= @item[:title] %> + + + <%= meta_tags %> + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
<%= choixrss %>
+
<%= choixlang %>
+
+
+
+ +
+ +

<%= @item[:content_for_title].nil? ? @item[:title] : @item[:content_for_title] %>

+ <% unless @item[:subtitle].nil? and @item[:content_for_subtitle].nil? %> +

+ <%= @item[:content_for_subtitle].nil? ? @item[:subtitle] : @item[:content_for_subtitle] %> +

+ <% end %> + + +
+
+ <%= yield %> +
+
+ +
+
+ +
+
+
+
+
+ <%=tradOf(:copyright) %> +
+ <%= tradOf(:entirely_done_with) %> + Vim + <%= tradOf(:and) %> + nanoc +
+
+
+ + + + + + + + + + + + + + + + + + + + + + <%= clicky_analytics %> + + diff --git a/layouts/sitemap.html b/layouts/sitemap.html new file mode 100644 index 0000000..d7e1680 --- /dev/null +++ b/layouts/sitemap.html @@ -0,0 +1,3 @@ +----- +----- +<%= xml_sitemap %> diff --git a/lib/analytics.rb b/lib/analytics.rb new file mode 100644 index 0000000..b20efd9 --- /dev/null +++ b/lib/analytics.rb @@ -0,0 +1,31 @@ +# All files in the 'lib' directory will be loaded +# before nanoc starts compiling. + +def genAnalytics + %{ + } +end + +def clicky_analytics + clickyid=66374971 +%{ + + } +end diff --git a/lib/calendar.rb b/lib/calendar.rb new file mode 100644 index 0000000..aae8d58 --- /dev/null +++ b/lib/calendar.rb @@ -0,0 +1,15 @@ +# All files in the 'lib' directory will be loaded +# before nanoc starts compiling. + +def calendar_for( d, language="en" ) + if language == "fr" + monthnames=[nil]+%w(Jan Fév Mar Avr Mai Jui Jul Aoû Sep Oct Nov Déc) + else + monthnames=[nil]+%w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) + end + %{ + #{d.day} + #{monthnames[ d.mon ]} + #{d.year} + } +end diff --git a/lib/css.rb b/lib/css.rb new file mode 100644 index 0000000..0dada13 --- /dev/null +++ b/lib/css.rb @@ -0,0 +1,32 @@ +class NoCustomCSS < Nanoc3::Filter + identifier :no_custom_css + def run(content, params={}) + res="" + content.each do |line| + res <<= line if not res=~/^\s*-(moz|webkit)/ + end + return res + end +end + +class MozillaCSS < Nanoc3::Filter + identifier :mozilla + def run(content, params={}) + res="" + content.each do |line| + res <<= line if not res=~/-webkit/ + end + return res + end +end + +class WebkitCSS < Nanoc3::Filter + identifier :webkit + def run(content, params={}) + res="" + content.each do |line| + res <<= line if not res=~/-moz/ + end + return res + end +end diff --git a/lib/gitmtime.rb b/lib/gitmtime.rb new file mode 100644 index 0000000..49f8cf5 --- /dev/null +++ b/lib/gitmtime.rb @@ -0,0 +1,14 @@ +def gitmtime + filepath=@item.path.sub(@config[:webprefix]+'/','content/html/').sub(/\/$/,'') + ext=%{.#{@item[:extension]}} + filepath<<=ext + if not FileTest.exists?(filepath) + filepath.sub!(ext,%{/index#{ext}}) + end + str=`git log -1 --format='%ci' -- #{filepath}` + if str.nil? or str.empty? + return Time.now + else + return DateTime.parse( str ) + end +end diff --git a/lib/graph.rb b/lib/graph.rb new file mode 100644 index 0000000..8075983 --- /dev/null +++ b/lib/graph.rb @@ -0,0 +1,29 @@ +class Graph < Nanoc3::Filter + identifier :graph + @@tmpfic="/tmp/graphtemp.dot" + def run(content, params={}) + content.gsub(%r{(.+?)}m) do |full| + # FileUtils.rm(@@tmpfic) + title=$2 + str=$3 + filename=title.gsub(/[^a-zA-Z0-9_]/,"_") + File.open(@@tmpfic,'w') do |f| + f.write %[ digraph Source { + fontsize=10; + rankdir="LR"; + graph [truecolor bgcolor="#ffffff00"]; + node [width=0, height=0, fontname="Optima Bold", shape="Mrecord", color="#663300", style="filled" fillcolor="#f9f1dd", fontcolor="#280000"] ; + edge [arrowsize=.5, color="#280000"] ; ] + f.write str + f.write %[}] + end + FileUtils.mkdir_p('output'+@item.path+'graph') + webpath=@item.path + 'graph/' + filename + '.png' + path='output'+webpath + puts "dot -Tpng -o #{path} /tmp/graphtemp.dot" + system("dot -Tpng -o #{path} /tmp/graphtemp.dot") + puts %{#{title}} + %{#{title}} + end + end +end diff --git a/lib/helpers.rb b/lib/helpers.rb new file mode 100644 index 0000000..4e0ded6 --- /dev/null +++ b/lib/helpers.rb @@ -0,0 +1,17 @@ +# All files in the 'lib' directory will be loaded +# before nanoc starts compiling. + +# Utilisation des helper +# +# ecrire +# <% content_for :summary do %> +# Sommaire que je veux ecrire +# <% end %> +# +# Pour remplir à la fois le texte et le sommaire + +include Nanoc3::Helpers::Capturing +include Nanoc3::Helpers::LinkTo +include Nanoc3::Helpers::Blogging +include Nanoc3::Helpers::Text +include Nanoc3::Helpers::XMLSitemap diff --git a/lib/html.rb b/lib/html.rb new file mode 100644 index 0000000..716b14e --- /dev/null +++ b/lib/html.rb @@ -0,0 +1,32 @@ +def meta_tags + t=tags + if t.length>0 + return %{} + end +end + +def meta_alternate + res=[] + @conf.languages.each do |lang| + item_for_lang=item_of_language(lang) + if not item_for_lang.nil? + res <<= %{} + end + end + return res.join("\n") +end + +def choixrss + return %{#{ tradOf(:subscribe) }} +end + +def choixlang + @conf.languages.map do |l| + dest=@item_rep.path.sub(%r{#{@config[:webprefix]}/../}, %{#{@config[:webprefix]}/#{l}/}) + if @item_rep.path != dest + %{#{ tradOfKeywordIn(:switchTo,l)}} + else + nil + end + end.join() +end diff --git a/lib/intenseDebate.rb b/lib/intenseDebate.rb new file mode 100644 index 0000000..7a63779 --- /dev/null +++ b/lib/intenseDebate.rb @@ -0,0 +1,26 @@ + +def getMainpage + if @item.parent.nil? or @item.parent.parent.nil? or @item.parent.parent.parent.nil? + return + end + if @item.parent.parent.parent.parent.nil? + return @item + else + return @item.parent + end +end + +def generateIntenseDebateThread + mainpage=getMainpage + protectedPath=mainpage.path.gsub(/'/,"%27") + protectedTitle=mainpage[:title].gsub(/'/,"%27") + %{ + + + + } +end diff --git a/lib/macros.rb b/lib/macros.rb new file mode 100644 index 0000000..f10ed59 --- /dev/null +++ b/lib/macros.rb @@ -0,0 +1,52 @@ +# usage: +# --- +# ... +# macros: +# test: "passed test" +# --- +# ... +# Here is a %test. +# +class Macros < Nanoc3::Filter + identifier :falacy + attr_accessor :macro + def initialize(arg) + super + @macro={} + @macro[:tlal] = %{tlàl : } + @macro[:tldr] = %{tl;dr: } + if @item.nil? + if not arg.nil? + @macro.merge!( arg ) + end + else + if not @item[:macros].nil? + @macro.merge!( @item[:macros] ) + end + end + end + def macro_value_for(macro_name) + if macro_name.nil? or macro_name=="" or @macro[macro_name.intern].nil? + return %{%#{macro_name}} + end + return @macro[macro_name.intern] + end + def run(content, params={}) + content.gsub(/%(\w*)/) do |m| + if m != '%' + macro_value_for($1) + else + m + end + end + end +end + +def tldr + %{tl;dr: } +end + +def tlal + %{tlàl : } +end + diff --git a/lib/mail.rb b/lib/mail.rb new file mode 100644 index 0000000..7dafdcc --- /dev/null +++ b/lib/mail.rb @@ -0,0 +1,3 @@ +def mail_perso +%{yann.esposito@gmail.com} +end diff --git a/lib/multi.rb b/lib/multi.rb new file mode 100644 index 0000000..e4ea5dc --- /dev/null +++ b/lib/multi.rb @@ -0,0 +1,30 @@ +def tradOf(keyword) + language=@conf.language + tradOfKeywordIn(keyword, language ) +end + +def tradOfKeywordIn(keyword, language) + begin + @config[:translations][keyword][language.intern] + rescue + if @config[:translations].nil? + puts %{ERROR (lib/multi.rb) Please make a 'translations' hash table in config.yaml} + elsif @config[:translations][keyword].nil? + puts %{ERROR (lib/multi.rb) in config.yaml, + in the 'translations' hash, I can't find the keyword #{keyword}} + elsif @config[:translations][keyword][language.intern].nil? + puts %{ERROR (lib/multi.rb) in config.yaml, + in the 'translations' hash, I can't find the translation + in #{language} for the keyword #{keyword}} + else + puts %{ERROR (lib/multi.rb) erreur inconnue} + end + return '[Sorry Translation Error]' + end +end + +def item_of_language(language) + searched_path=@item_rep.path.sub(@conf.language,language) + # puts %{source path = #{@item_rep.path}, searched_path = #{searched_path}} + @items.find { |i| i.reps[0].path == searched_path } +end diff --git a/lib/multiMenu.rb b/lib/multiMenu.rb new file mode 100644 index 0000000..0537a03 --- /dev/null +++ b/lib/multiMenu.rb @@ -0,0 +1,179 @@ +def homepage + @items.find do |i| + i.reps[0].path == %{#{@config[:webprefix]}/#{@conf.language}/} + end +end + +def sortedChildrenByMenuPriority(item) + item.children.reject{|p| p[:isHidden]}. + sort!{|x,y| x[:menupriority] <=> y[:menupriority]} +end + +def generateMenu + home=homepage + if home.nil? + return '' + end + liste=[] + liste<<=link_to_unless_current(home[:title],home.reps[0]) + sortedChildrenByMenuPriority(home).each do |page| + liste <<= link_to_unless_current(page[:title],page.reps[0]) + end + "
  • "+liste.join("
  • \n
  • ")+"
" +end + +def depthOf(item) + res=0 + while item.parent != nil + res+=1 + item=item.parent + end + return res +end + +def getSortedChildren(parent) + if parent[:kind] == "blog" + return parent.children.reject{|p| p[:isHidden]}.sort!{|x,y| x[:created_at] <=> y[:created_at] } + else + return parent.children.reject{|p| p[:isHidden]}.sort!{|x,y| x[:menupriority] <=> y[:menupriority] } + end +end + +def generateBlogSubMenu(language) + year=0 + res="" + liste=getSortedChildren(@item).reverse!.collect! do |p| + if p[:created_at].strftime("%Y") != year + if year != 0 + res<<=%{} + end + year=p[:created_at].strftime("%Y") + res<<=%{

[#{year}]

    } + end + res<<='
  • ' + res<<=calendar_for(p[:created_at],language)+ + link_to_unless_current(p[:title]+ %{»},p) + res<<='
  • ' + end + res<<=%{
} + if ! liste.empty? + '
'+res+'
' + else + return + end +end + +def generateSubMenu() + if @item[:noSubMenu] + return + end + + depth=depthOf(@item) + + if depth == 0 + return + end + + if @item.children.length == 0 and not @item.parent[:kind].to_s == "blog" + page=@item.parent + else + page=@item + end + + if @item[:kind].to_s == "article" + key=:subtitle + else + key=:title + end + + liste=getSortedChildren(page).collect do |p| + if not p[key].nil? + link_to_unless_current(p[key]+' »',p) + else + puts 'ERROR: key='+key + end + end + if ! liste.empty? then + liste = [ link_to_unless_current(page[key]+' »',page) ].concat( liste ) + '
  • '+liste.join('
  • ')+'
' + else + return + end +end +# ======================= + +def blogimage(val,title="no name", divclass=nil) + if depthOf( @item ) == 4 + imgpath=@item.parent.path + else + imgpath=@item.path + end + imgpath=imgpath.sub(%r{#{@config[:webprefix]}/../},@config[:webprefix]+'/img/')+val + if not divclass.nil? + cls=%{ class="#{divclass}"} + end + return %{#{title}} +end + +def leftblogimage(val,title="no name") + return blogimage(val, title, "left") +end + +def lnkto(title,item) + language=@item_rep.path.sub(/#{@config[:webprefix]}\//,'').sub(/\/.*$/,'') + link_to(title, "#{@config[:webprefix]}/#{language}"+item) +end + +def nextFor(page) + depth=depthOf(page) + + case depth + when 0..2 then return nil + when 3 then target=getSortedChildren(page)[0] + else + sorted_children=getSortedChildren(page.parent) + index=sorted_children.index(page) + target=sorted_children[ index + 1] + end + return nil if target.nil? + link_to(tradOf(:next)+%{ »}, target) +end + +# return the previous page of a post containing many +def previousFor(page) + case depthOf(page) + when 0..3 then return nil + when 4 then + sorted_children=getSortedChildren(page.parent) + index=sorted_children.index(page) + if index==0 + target=page.parent + else + target=sorted_children[ index - 1 ] + end + end + return nil if target.nil? + link_to(%{« }+tradOf(:previous), target) +end + +def brother_for_at(page,n) + brothers=getSortedChildren(page.parent) + i=brothers.index(page) + if i.nil? + return nil + end + + if i + n < 0 + return nil + end + brothers[ i + n ] +end + +def article_brother(n) + if depthOf(@item) > 3 + page=@item.parent + else + page=@item + end + brother_for_at(page,n) +end diff --git a/lib/nanoc_item_conf.rb b/lib/nanoc_item_conf.rb new file mode 100644 index 0000000..a99a534 --- /dev/null +++ b/lib/nanoc_item_conf.rb @@ -0,0 +1,40 @@ +class LocalConf + attr_accessor :blog, :article, :languages, :language, :indent + def to_s + instance_variables.map{ |x| + if instance_variable_get(x).class == Array + %{#{x.intern}= [#{instance_variable_get(x).join(', ')}]} + else + %{#{x.intern}= #{instance_variable_get(x)}} + end + } + end +end + +def setItemConf + # -- init variables -- + conf=LocalConf.new + language=@item_rep.path.sub(%r{#{@config[:webprefix]}/},'').sub(/\/.*$/,'') + if language != '' + conf.language=language + else + conf.language='en' + language=conf.language + end + + # the current item is an article + article=( ( not @item[:kind].nil? ) && @item[:kind] == 'article' ) + conf.article=article + + # the current item is a blog entry page + blog=( ( not @item[:kind].nil? ) && @item[:kind] == 'blog' ) + conf.blog=blog + + # all supported languages + languages=@config[:languages] + conf.languages=languages + + self.instance_variable_set(:@conf, conf) + + return language, languages, blog, article +end diff --git a/lib/repair_html.rb b/lib/repair_html.rb new file mode 100644 index 0000000..ab2a71e --- /dev/null +++ b/lib/repair_html.rb @@ -0,0 +1,64 @@ +# All files in the 'lib' directory will be loaded +# before nanoc starts compiling. + +# repair cutted XML code by closing the tags +# work even if the XML is cut into a tag. +# example: +# transform '
toto

hello ' + depth.to_s + puts 'parents='+parents.join('; ') + end + next + end + if m[0] == "" + parents[depth]=m[1] + depth+=1 + if debug + puts '<'+m[0]+m[1]+'> ' + depth.to_s + puts 'parents='+parents.join('; ') + end + else + depth-=1 + if (not debug) and (depth <0) + puts 'ERROR repair_html: ' + puts 'HTML: ' + html + puts '---' + repair_html(html,true) + puts 'END_ERROR' + end + if debug + puts '<'+m[0]+m[1]+'> ' + depth.to_s + end + end + end + res=html.sub(/<[^>]*$/m,'') + depth -= 1 + if (depth < 0) + parents=[] + depth=0 + html.scan( %r{<(/?)(\w*)[^>]*(/?)>} ).each do |m| + if m[2] == "/" + puts 'IGNORE: <'+m[0]+m[1]+m[2]+'> ' + depth.to_s + next + end + if m[0] == "" + parents[depth]=m[1] + depth+=1 + puts '<'+m[0]+m[1]+'> ' + depth.to_s + puts 'parents='+parents.join('; ') + else + depth-=1 + puts '<'+m[0]+m[1]+'> ' + depth.to_s + end + end + end + depth.downto(0).each { |x| res<<= %{} } + res +end diff --git a/lib/syntaxColorize.rb b/lib/syntaxColorize.rb new file mode 100644 index 0000000..79bcad2 --- /dev/null +++ b/lib/syntaxColorize.rb @@ -0,0 +1,68 @@ +module Nanoc3::Helpers + + module SyntaxColorize + + require 'nanoc3/helpers/capturing' + include Nanoc3::Helpers::Capturing + + def syntax_colorize(lang, type=:ultraviolet, &block) + # Capture block + data = capture(&block) + + # Remove whitespace + lines = data.split("\n") + min_indent = lines.inject(nil) do |memo, line| + next memo if line =~ /^\s*$/ + next memo if line !~ /^(\s*)/ + [ memo, $1.size ].compact.min + end + lines.each do |line| + line[0,min_indent] = '' + end + data = lines.join("\n") + + # Process + case type + when :ultraviolet + begin + require 'uv' + if lang =~ /^(zsh|bash|sh|csh|shell)$/ + lang='shell-unix-generic' + end + filtered_data = Uv.parse(data, 'xhtml', lang, false, 'twilight') + rescue LoadError + unless $_WARNED_ABOUT_ULTRAVIOLET + warn "WARNING: Couldn't load uv; please install the ultraviolet gem. This message will not appear again." + end + $_WARNED_ABOUT_ULTRAVIOLET = true + + filtered_data = '

' + h(data) + '
' + end + + # Convert to HTML + filtered_data = filtered_data.strip.sub(%r{/ ?>}, '>') # convert to HTML + + # Add missing in
+        filtered_data.sub!(/^\s*(
)\s*/) { |m| "#{m}" }
+        filtered_data.sub!(/\s*(<\/pre>)\s*$/) { |m| "#{m}" }
+      when :coderay
+        # Find filter
+        klass = Nanoc3::Filter.named(:coderay)
+        filter = klass.new(@item_rep.assigns)
+        
+        # Filter captured data
+        filtered_data = filter.run(data, :language => lang).strip
+      else
+        raise ArgumentError, "invalid type: #{type}"
+      end
+
+      # Append filtered data to buffer
+      buffer = eval('_erbout', block.binding)
+      buffer << '
' if type == :coderay
+      buffer << filtered_data
+      buffer << '
' if type == :coderay + end + + end + +end diff --git a/lib/tag.rb b/lib/tag.rb new file mode 100644 index 0000000..4b3ac5b --- /dev/null +++ b/lib/tag.rb @@ -0,0 +1,112 @@ +# All files in the 'lib' directory will be loaded +# before nanoc starts compiling. + +# module Tags + def tags + if @item[:tags].nil? + return '' + end + @item[:tags].join(', ') + end + + def alltags + language=@item.path + language =~ %r{#{@config[:webprefix]}/([^/]*)/} + language = $1 + @items.select {|p| p.path =~ %r{#{@config[:webprefix]}/#{language}/} and p[:kind].to_s == "article" and p.parent[:kind].to_s == 'blog'} + end + + def tagNumber + tags={} + alltags.each do |p| + if p[:tags].nil? + next + end + p[:tags].each do |t| + if tags[t] + tags[t]+=1 + else + tags[t]=1 + end + end + end + return tags + end + + def tagRefs + tagLinks={} + alltags.each do |p| + if p[:tags].nil? + next + end + p[:tags].each do |t| + if tagLinks[t].nil? + tagLinks[t]=[ p ] + else + tagLinks[t] <<= p + end + end + end + return tagLinks + end + + def tagCloud(maxwords=nil) + tags=tagNumber + if not maxwords.nil? + i=1 + while tags.count > maxwords + tags=tags.reject{ |k,v| v + $(document).ready( function(){$('.list').hide();$('#tagcloud a').removeAttr("href")} ); + function tagSelected(id) { + $('.list').hide(); + $('#'+id).fadeIn(); + $('.tag.selected').removeClass('selected'); + $('#tag_'+id).addClass('selected'); + } +
} + language=@item.path + language =~ %r{#{@config[:webprefix]}/([^/]*)/} + language = $1 + tagLinks.sort{|a,b| a[0].downcase <=> b[0].downcase}.each do |t,l| + protected=t.gsub(/\W/,'_') + tagCloud <<= %{

#{t}

    } + l.sort{|x,y| y[:created_at] <=> x[:created_at]}.each do |p| + tagCloud <<= %{ +
  • + #{calendar_for(p[:created_at], language)} + #{p[:title]} » +
  • \n} + end + tagCloud <<= %{
} + end + tagCloud <<= %{
} + return tagCloud + end +# end diff --git a/lib/ultraviolet.rb b/lib/ultraviolet.rb new file mode 100644 index 0000000..f9412b5 --- /dev/null +++ b/lib/ultraviolet.rb @@ -0,0 +1,40 @@ +class UltraVioletFilter < Nanoc3::Filter + identifier :ultraviolet + + def run(content, params={}) + require 'rubygems' + require 'uv' + code_rule = %r{((.+?))}m + new_content=content.gsub(code_rule) do |full| + @lang, @filename, @code = $2, $4, $5 + if @lang =~ /^(zsh|bash|sh|csh|shell)$/ + @lang='shell-unix-generic' + end + @codeprefix='' + @codesuffix='' + if not @filename.nil? and @filename != "" + create_file_for_code + end + @codeprefix+ + Uv.parse(@code, "xhtml", @lang, false, @config[:ultraviolet_theme])+ + @codesuffix + end + return new_content + end + + private + def create_file_for_code + # Create a plaintext file version for download. + webpath = @item.path + + url = webpath + 'code/' + @filename + @codeprefix=%{
\n} + @codesuffix=%{\n
} + + code_path = "output#{webpath}code" + puts %{\t\tEcriture de #{code_path}/#{@filename}} + FileUtils.mkdir_p code_path + File.open(%{#{code_path}/#{@filename}}, 'w'){|f|f.write(@code)} + end + +end diff --git a/lib/y.rb b/lib/y.rb new file mode 100644 index 0000000..b132549 --- /dev/null +++ b/lib/y.rb @@ -0,0 +1,166 @@ +# All files in the 'lib' directory will be loaded +# before nanoc starts compiling. + +def allExceptCode( f, content ) + regexp=/]*>.*?<\/code>/m + tmp="" + mem=[] + content.scan(regexp).each do |c| + mem <<= c + end + i=0 + content.split(regexp).each do |x| + tmp <<= send(f,x) + if not mem[i].nil? + tmp <<= mem[i] + i+=1 + end + end + tmp +end + +module Nanoc3::Filters + class MathJaxKramdownRepair < Nanoc3::Filter + identifiers :math_repair + + def description(content) + content.gsub(/
(.+?)<\/div>/m) do + return %{$$ #{$1} $$} + end + end + + def run(content, params={}) + allExceptCode( :description , content ) + end + end + + class Description < Nanoc3::Filter + identifiers :description + + def description(content) + content.gsub(/^\s*]*)?>(.+?)<\/desc>/m) do + n=0 + if $1 then + summary=$1 + summary.slice!(0) + else + summary="no description" + end + '
'+$2.gsub(/([^:]+):(.+?)::/m) do + n+=1 + if n % 2 == 0 + sombre=' class="assombris10"' + else + sombre=' class="assombris20"' + end + '' + end+'
'+$1+''+$2+'
' + end + end + + def run(content, params={}) + allExceptCode( :description , content ) + end + end + + class FrenchSpace < Nanoc3::Filter + identifiers :frenchspace + def ameliorate(content) + content.gsub(/ ([:;!?]|&eq;|≠)/) { " "+$1 } + end + def run(content, params={}) + allExceptCode( :ameliorate, content ) + end + end + + class Footnotes < Nanoc3::Filter + identifiers :footnotes + def hr_before_footnote(content) + content.gsub(/
/) { %{
#{$&}} } + end + def run(content, params={}) + allExceptCode( :hr_before_footnote, content ) + end + end + + class FirstHierarchy < Nanoc3::Filter + identifiers :firsthi + def run(content, params={}) + content.gsub(/\A(\s|\n)*]*class="corps"[^>]*>(\s)*(.*?)<\/sc>/m) do + %{}+$1+%{} + end.gsub(/''(.*?)''/m)do + %{}+$1+%{} + end.gsub(/\(c\)/) do + %{©} + end.gsub(/\(r\)/) do + %{®} + end.gsub(/-(>|>)/) do + %{→} + end.gsub(/(<|<)-/) do + %{←} + end + end + def run(content, params={}) + allExceptCode( :ytypofunc, content ) + end + end + + class YAbbreviations < Nanoc3::Filter + identifiers :yabbreviations + def makeabbreviations(text) + { + 'WebDav' => 'Web-based Distributed Authoring and Versionning', + 'cms' => 'Content Management System', + 'xml' => 'eXtended Markup Language', + }.each do |keyword,abbreviation| + text=text.gsub(/\b#{keyword}\b/i) do + %{#{keyword}} + end + end + return text + end + + def run(content, params={}) + allExceptCode(:makeabbreviations, content ) + end + end + + class MultiCorps < Nanoc3::Filter + identifiers :multicorps + def run(content, params={}) + content.gsub(/^.*newcorps.*$/) do + %{\n
\n\n
\n} + end.gsub(/^.*begindiv\((.*)\).*$/) do + %{\n
\n} + end.gsub(/^.*enddiv.*$/) do + %{\n
\n} + end + end + end +end + +def block(title, url, text, position="left") + return %{
+

+ #{title} + » + +

+

+ #{text} +

+
} +end diff --git a/multi/blog.erb b/multi/blog.erb new file mode 100644 index 0000000..c056dbf --- /dev/null +++ b/multi/blog.erb @@ -0,0 +1,121 @@ +----- +kind: blog +title: Blog +menupriority: 2 +noSubMenu: true +----- +<% + number_of_articles=5 + number_of_char_for_resume=800 + language=@item_rep.path.sub(/\/Scratch\//,'').sub(/\/.*$/,'') + last_articles = @items.select do |a| + a.reps[0].path =~ /\/#{language}\// && a[:kind] == 'article' + end + last_articles=last_articles.sort { |x,y| y[:created_at] <=> x[:created_at] }[0..(number_of_articles-1)] + +def dArr + return %{} +end +%> + + + +

+en: Last <%= number_of_articles %> Articles +fr: Les <%= number_of_articles %> derniers articles +

+ +
+ +<% last_articles.each do |a| %> +

+ <%= calendar_for( a[:created_at], language ) %> + <%= link_to(a[:title]+%{ »}, a) %> +

+ +
+ + <% + puts "%%%" + puts excerptize( a.reps[0].compiled_content, {:length => number_of_char_for_resume}) + puts "%%%" + %> + <%= repair_html ( excerptize( a.reps[0].compiled_content, {:length => number_of_char_for_resume} ) ) %> + +
+
+

+fr: <%= link_to(%{en lire plus »}, a) %> +en: <%= link_to(%{Read more »}, a) %> +

+
+ +
+<% end %> + +
+
+<%= tagCloud %> +
+
+ +

Archives

+ +<%= generateBlogSubMenu(language) %> + +en:

+en: Two words about the content +fr:

+fr: Un petit mot sur le contenu +

+ + +
+ +en:

+en: Here you'll can find mostly technical articles. +en: Some are just reminder of technical tips. +en: But some are long and technically detailled articles. +en:

+en:
+en:

+en: I do my best to traduce each page in french and in english. +en: It not always easy. English is not my natural language. +en: I make many errors, orthographic, grammatical, typographical… +en:

+en:

+en: Thanks not to judge me based on these errors! And don't forget content is more important than presentation! +en:

+en: The first impression I'll let you if we meet in real life should be different from the one I let you based on my website. +en:

+en: I wish you to find something useful or interesting on this website. +en:

+ +fr:

+fr: Vous trouverez ici des articles qui sont pour la plupart +fr: écrits en anglais et qui sont techniques. +fr: Certain sont justes là pour me souvenir de petits trucs, que +fr: d'autres pourraient trouver utiles. Mais il y a aussi de +fr: long articles techniques qui vont un peu plus dans les détails. +fr:

+fr:


+fr:

+fr: Je fais de mon mieux pour traduire chaque page en anglais et en français. +fr: Cependant, ce n'est pas toujours évident. +fr: Il m'arrive de faire de nombreuses fautes d'orthographes, des erreurs typographiques et autres. +fr:

+fr:

+fr: Merci de ne pas me juger sur ces erreurs et de ne pas oublier que le fond est plus important que la forme. +fr:

+fr: L'impression que ce site laisse de moi n'est certainement pas l'impression que je vous laisserais si on se rencontrait. +fr:

+fr: Je vous souhaite de trouver ce que vous cherchez sur ce site. +fr:

diff --git a/multi/index.erb b/multi/index.erb new file mode 100644 index 0000000..79bcea6 --- /dev/null +++ b/multi/index.erb @@ -0,0 +1,133 @@ +--- +en: title: YPassword +fr: title: Bienvenue +noSubMenu: true +no_entete: true +--- +<% content_for :title do %> + + YPassword + +<% end %> +<% content_for :subtitle do %> + Yogsototh +<% end %> + +
+en:
+en:

+en: +en: Blog +en: » +en: +en:

+en:

+en: Computer, Philosophy & Life. +en:

+en:
+en:
+en:

+en: +en: Softwares +en: » +en: +en:

+en:

+en: Password Manager, +en: Screensavers & +en: Scientific Applications. +en:

+en:
+en:
+en:

+en: Contact +en: » +en: +en:

+en:

+en: Don't be shy, I'll be happy to talk to you. +en:

+en: +en:
+ +fr:
+fr:

+fr: +fr: Blog +fr: » +fr: +fr:

+fr:

+fr: Ordinateurs, philosophie & des choses de la vie. +fr:

+fr:
+fr:
+fr:

+fr: +fr: Logiciels +fr: » +fr: +fr:

+fr:

+fr: Des économiseurs d'écran, +fr: un gestionnaire de mots de passe & +fr: des applications scientifiques. +fr:

+fr:
+fr:
+fr:

+fr: +fr: Contact +fr: » +fr: +fr:

+fr:

+fr: Au diable la timidité, n'hésitez pas à me contacter, je serai ravi de vous parler. +fr:

+fr:
+fr:
+fr:
+fr:

+fr: +fr: Curriculum Vitæ +fr: » +fr: +fr:

+fr:

+fr: Doctorat → Post Doc → Consultant
+fr: Geek → G33K → G33|< +fr: +fr:

+fr: +fr:
+fr:
+fr:

+fr: +fr: Enseignement +fr: » +fr: +fr:

+fr:

+fr: Informatique:
+fr: TD, TD & solutions
+fr: BAC+1 à BAC+5
+fr: Projet réseau anonyme +fr: » +fr: +fr:

+fr:
+fr: +
diff --git a/site/Scratch/en/blog/feed/feed.xml b/site/Scratch/en/blog/feed/feed.xml new file mode 100644 index 0000000..e69de29 diff --git a/site/Scratch/en/blog/index.html b/site/Scratch/en/blog/index.html new file mode 100644 index 0000000..db53ba9 --- /dev/null +++ b/site/Scratch/en/blog/index.html @@ -0,0 +1,195 @@ + + + + + + + + + + + + + Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +

Blog

+ + + +
+ + + + +
+
+
+
+
+ +

Archives

+ + + +

+Two words about the content +

+ + +
+ +

+Here you'll can find mostly technical articles. +Some are just reminder of technical tips. +But some are long and technically detailled articles. +

+
+

+ I do my best to traduce each page in french and in english. +It not always easy. English is not my natural language. +I make many errors, orthographic, grammatical, typographical… +

+

+ Thanks not to judge me based on these errors! And don't forget content is more important than presentation! +

+The first impression I'll let you if we meet in real life should be different from the one I let you based on my website. +

+I wish you to find something useful or interesting on this website. +

+
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/Scratch/en/index.html b/site/Scratch/en/index.html new file mode 100644 index 0000000..91d2c2e --- /dev/null +++ b/site/Scratch/en/index.html @@ -0,0 +1,186 @@ + + + + + + + + + + + + + YPassword + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +

+ + YPassword + +

+ +

+ + Yogsototh + +

+ + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/Scratch/fr/blog/feed/feed.xml b/site/Scratch/fr/blog/feed/feed.xml new file mode 100644 index 0000000..e69de29 diff --git a/site/Scratch/fr/blog/index.html b/site/Scratch/fr/blog/index.html new file mode 100644 index 0000000..bdd384f --- /dev/null +++ b/site/Scratch/fr/blog/index.html @@ -0,0 +1,198 @@ + + + + + + + + + + + + + Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +

Blog

+ + + +
+ + + + +
+
+
+
+
+ +

Archives

+ + + +

+Un petit mot sur le contenu +

+ + +
+ + +

+Vous trouverez ici des articles qui sont pour la plupart +écrits en anglais et qui sont techniques. +Certain sont justes là pour me souvenir de petits trucs, que +d'autres pourraient trouver utiles. Mais il y a aussi de +long articles techniques qui vont un peu plus dans les détails. +

+


+

+ Je fais de mon mieux pour traduire chaque page en anglais et en français. +Cependant, ce n'est pas toujours évident. +Il m'arrive de faire de nombreuses fautes d'orthographes, des erreurs typographiques et autres. +

+

+ Merci de ne pas me juger sur ces erreurs et de ne pas oublier que le fond est plus important que la forme. +

+L'impression que ce site laisse de moi n'est certainement pas l'impression que je vous laisserais si on se rencontrait. +

+Je vous souhaite de trouver ce que vous cherchez sur ce site. +

+
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/Scratch/fr/index.html b/site/Scratch/fr/index.html new file mode 100644 index 0000000..3318b68 --- /dev/null +++ b/site/Scratch/fr/index.html @@ -0,0 +1,231 @@ + + + + + + + + + + + + + Bienvenue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +

+ + YPassword + +

+ +

+ + Yogsototh + +

+ + + +
+
+ + + +
+ +
+

+ + Blog + » + +

+

+ Ordinateurs, philosophie & des choses de la vie. +

+
+
+

+ + Logiciels + » + +

+

+ Des économiseurs d'écran, + un gestionnaire de mots de passe & + des applications scientifiques. +

+
+
+

+ + Contact + » + +

+

+ Au diable la timidité, n'hésitez pas à me contacter, je serai ravi de vous parler. +

+
+
+
+

+ + Curriculum Vitæ + » + +

+

+ Doctorat → Post Doc → Consultant
+ Geek → G33K → G33|< + +

+ +
+
+

+ + Enseignement + » + +

+

+ Informatique:
+ TD, TD & solutions
+ BAC+1 à BAC+5
+ Projet réseau anonyme + » + +

+
+ +
+
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/Scratch/sitemap.xml b/site/Scratch/sitemap.xml new file mode 100644 index 0000000..208dd2a --- /dev/null +++ b/site/Scratch/sitemap.xml @@ -0,0 +1,12 @@ + + + + http://yannesposito.com/Scratch/en/blog/feed/feed.xml + + + http://yannesposito.com/Scratch/sitemap.xml + + + http://yannesposito.com/Scratch/fr/blog/feed/feed.xml + + diff --git a/site/css/main.css b/site/css/main.css index d3c76ca..5182671 100644 --- a/site/css/main.css +++ b/site/css/main.css @@ -1,16 +1,28 @@ @charset "UTF-8"; -/* line 19, ../src/main.scss */ +/* line 26, ../src/main.scss */ body { background-color: #f6f6f0; font-family: 'Kreon', Palatino, Georgia, arial, serif; } -/* line 23, ../src/main.scss */ +/* line 31, ../src/main.scss */ +a { + color: #7689a6; + border: none; + text-decoration: none; +} + +/* line 36, ../src/main.scss */ +a:hover { + color: #88aadd; +} + +/* line 40, ../src/main.scss */ #metacontainer { border-bottom: 1px solid #888; } -/* line 26, ../src/main.scss */ +/* line 43, ../src/main.scss */ body > header { margin: 0; color: #CCC; @@ -23,7 +35,7 @@ body > header { box-shadow: #333333 0px 1px 5px 0; } -/* line 34, ../src/main.scss */ +/* line 51, ../src/main.scss */ body > footer { border-top: solid 2px rgba(0, 0, 0, 0.1); border-bottom: solid 1px rgba(0, 0, 0, 0.1); @@ -39,17 +51,17 @@ body > footer { box-shadow: #888888 0px 1px 5px 0; } -/* line 45, ../src/main.scss */ +/* line 62, ../src/main.scss */ nav { border-bottom: solid 1px rgba(0, 0, 0, 0.1); } -/* line 48, ../src/main.scss */ +/* line 65, ../src/main.scss */ nav ul { list-style-type: none; } -/* line 51, ../src/main.scss */ +/* line 68, ../src/main.scss */ nav ul li { display: inline-block; height: 50px; @@ -59,11 +71,10 @@ nav ul li { border-right: solid 1px rgba(0, 0, 0, 0.2); } -/* line 59, ../src/main.scss */ +/* line 76, ../src/main.scss */ nav ul li a { color: rgba(255, 255, 255, 0.8); display: block; - text-decoration: none; margin-right: 0px; margin-left: 0px; text-shadow: -1px -1px rgba(0, 0, 0, 0.2), 1px 1px rgba(0, 0, 0, 0.2); @@ -71,23 +82,23 @@ nav ul li a { height: 100%; } -/* line 68, ../src/main.scss */ +/* line 84, ../src/main.scss */ nav ul li a:hover { color: rgba(255, 255, 255, 0.8); background-color: rgba(255, 255, 255, 0.1); } -/* line 72, ../src/main.scss */ +/* line 88, ../src/main.scss */ #main { margin: 0px auto; } -/* line 75, ../src/main.scss */ +/* line 91, ../src/main.scss */ #container { margin: 0px auto; } -/* line 79, ../src/main.scss */ +/* line 95, ../src/main.scss */ h1, h2, h3, h4, h5, h6 { font-family: 'Expletus Sans',Futura,sans-serif; text-shadow: 0px -1px 0px #2233aa, 0px 1px 0px white; diff --git a/site/example.html b/site/example.html deleted file mode 100644 index 7c2143a..0000000 --- a/site/example.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - -
-
-
-
-
- - diff --git a/site/humans.txt b/site/humans.txt index 21a5b67..6ebf77c 100644 --- a/site/humans.txt +++ b/site/humans.txt @@ -3,10 +3,10 @@ /* TEAM */ - : - Site: - Twitter: - Location: + Creator: Yann Esposito + Site: yannesposito.com + Twitter: yogsototh + Location: France /* THANKS */ Names (& URL): diff --git a/site/src/main.scss b/site/src/main.scss index cbb430a..78331d0 100644 --- a/site/src/main.scss +++ b/site/src/main.scss @@ -10,16 +10,33 @@ $default-box-shadow-h-offset : 0px; // 2C5490 -> dark // 7689A6 -> grey +$mainColor: #88AADD; +$lightGrey: #BCD0EE; +$light : #A9C5EE; +$dark : #2C5490; +$darkGrey : #7689A6; + $backgroundColor: #f6f6f0; $higlightColor: #8AD; $higlightColorShadow: #23A; $topColor: #2C5490; $footerColor: #BCD0EE; +$linkColor: $darkGrey; body { background-color: $backgroundColor; font-family: 'Kreon', Palatino, Georgia, arial, serif; } + +a { + color: $linkColor; + border: none; + text-decoration: none; +} +a:hover { + color: $higlightColor; +} + #metacontainer{ border-bottom: 1px solid #888; } @@ -58,7 +75,6 @@ nav ul li { } nav ul li a { color: rgba(255,255,255,0.8); display: block; - text-decoration: none; margin-right: 0px; margin-left: 0px; text-shadow: -1px -1px rgba(0,0,0,0.2), 1px 1px rgba(0,0,0,0.2); diff --git a/site/stylesheets/less.css b/site/stylesheets/less.css deleted file mode 100644 index dedf304..0000000 --- a/site/stylesheets/less.css +++ /dev/null @@ -1,153 +0,0 @@ -/* Less Framework 4 - * http://lessframework.com - * by Joni Korpi - * License: http://creativecommons.org/licenses/MIT/ */ -/* line 7, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/_reset.scss */ -html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, -p, blockquote, pre, a, abbr, address, cite, code, del, dfn, em, -img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, hr, -dl, dt, dd, ol, ul, li, fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, figure, figcaption, hgroup, -menu, footer, header, nav, section, summary, time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; -} - -/* line 14, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/_reset.scss */ -article, aside, canvas, figure, figure img, figcaption, hgroup, -footer, header, nav, section, audio, video { - display: block; -} - -/* line 18, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/_reset.scss */ -a img { - border: 0; -} - -/* line 1, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/typography/_16px.scss */ -.gigantic { - font-size: 110px; - line-height: 120px; - letter-spacing: -2px; -} - -/* line 7, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/typography/_16px.scss */ -.huge, h1 { - font-size: 68px; - line-height: 72px; - letter-spacing: -1px; -} - -/* line 13, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/typography/_16px.scss */ -.large, h2 { - font-size: 42px; - line-height: 48px; -} - -/* line 18, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/typography/_16px.scss */ -.bigger, h3 { - font-size: 26px; - line-height: 36px; -} - -/* line 23, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/typography/_16px.scss */ -.big, h4 { - font-size: 22px; - line-height: 30px; -} - -/* line 28, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/typography/_16px.scss */ -body { - font: 16px/24px Georgia, serif; -} - -/* line 32, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/typography/_16px.scss */ -.small, small { - font-size: 13px; - line-height: 18px; -} - -/* line 18, ../src/partials/_global.scss */ -body { - background: #e8e8e8; - color: #3c3c3c; - -webkit-text-size-adjust: 100%; -} - -/* line 34, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/_framework.scss */ -::selection { - background: rgb(255,255,158); -} - -/* line 35, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/_framework.scss */ -::-moz-selection { - background: rgb(255,255,158); -} - -/* line 36, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/_framework.scss */ -img::selection { - background: transparent; -} - -/* line 37, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/_framework.scss */ -img::-moz-selection { - background: transparent; -} - -/* line 38, ../../../../../../var/lib/gems/1.8/gems/compass-less-plugin-1.0/stylesheets/less/_framework.scss */ -body { - -webkit-tap-highlight-color: rgb(255,255,158); -} - -/* Default Layout: 992px. - * Gutters: 24px. - * Outer margins: 48px. - * Leftover space for scrollbars @1024px: 32px. */ -/* line 6, ../src/partials/_default.scss */ -#container { - width: 896px; - padding: 72px 48px 84px; -} - -/* Tablet Layout: 768px. - * Gutters: 24px. - * Outer margins: 28px. - * Inherits styles from: Default Layout. */ -@media only screen and (min-width: 768px) and (max-width: 991px) { - /* line 7, ../src/partials/_tablet.scss */ - #container { - width: 712px; - padding: 48px 28px 60px; - } -} - -/* Mobile Layout: 320px. - * Gutters: 24px. - * Outer margins: 34px. - * Inherits styles from: Default Layout. */ -@media only screen and (max-width: 767px) { - /* line 7, ../src/partials/_mobile.scss */ - #container { - width: 252px; - padding: 48px 34px 60px; - } -} - -/* Wide Mobile Layout: 480px. - * Gutters: 24px. - * Outer margins: 22px. - * Inherits styles from: Default Layout, Mobile Layout. */ -@media only screen and (min-width: 480px) and (max-width: 767px) { - /* line 7, ../src/partials/_wide-mobile.scss */ - #container { - width: 436px; - padding: 36px 22px 48px; - } -} - -/* Retina media query. - Overrides styles for devices with a - device-pixel-ratio of 2+, such as iPhone 4. */ -@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) {} diff --git a/site/stylesheets/main.css b/site/stylesheets/main.css deleted file mode 100644 index 70bf291..0000000 --- a/site/stylesheets/main.css +++ /dev/null @@ -1,4 +0,0 @@ -/* line 1, ../src/main.scss */ -#container { - margin: 0 auto; -} diff --git a/tasks/auto_tags/all_frequencies.rb b/tasks/auto_tags/all_frequencies.rb new file mode 100755 index 0000000..e6b94a4 --- /dev/null +++ b/tasks/auto_tags/all_frequencies.rb @@ -0,0 +1,57 @@ +#!/usr/bin/env ruby + +class Frequencies + + def initialize + @nbwords=0 + @tag=Hash.new + end + + def nbwords + @nbwords + end + + def is_bad_word(w) + if w.length < 3 + return true + end + if w !~ /\A(\w|\d)*\Z/ + return true + end + return false + end + + def update_density(content) + content.split(/\b/).each do |m| + if is_bad_word(m) + next + end + @nbwords += 1 + if @tag.has_key?(m) + @tag[m]+=1 + else + @tag[m]=1 + end + end + end + + def show_tags + @tag.keys.sort_by do |k| + @tag[k] + end.each do |k| + puts %{#{@tag[k]} #{k}} + end + end +end + +f=Frequencies.new + +ARGV.each do |file| + puts '['+file+']' + fic=File.open(file) + fic.each_line do |l| + f.update_density(l) + end + fic.close +end +f.show_tags diff --git a/tasks/auto_tags/density.rb b/tasks/auto_tags/density.rb new file mode 100755 index 0000000..fa330ff --- /dev/null +++ b/tasks/auto_tags/density.rb @@ -0,0 +1,69 @@ +#!/usr/bin/env ruby + +class Density + def density(content) + tag=Hash.new + nbwords=0 + content.split(/\b/).each do |m| + if m.length < 3 + next + end + if m !~ /\A(\w|\d)*\Z/ + next + end + nbwords += 1 + if tag.has_key?(m) + tag[m]+=1 + else + tag[m]=1 + end + end + nbwords=nbwords.to_f + res=Hash.new + tag.each do |w,v| + if v == 1 + next + end + res[w]=v/nbwords + end + return res + end + + + def initialize + fic=File.open('frequencies.val') + @sum=0 + @all_freq=Hash.new + fic.each_line do |l| + l =~ /([^ ]*) (.*)/ + nb=$1.to_i + @all_freq[$2]=nb + @sum+=nb + end + fic.close + end + + + def show_tags(hash) + hash.keys.sort_by do |k| + -hash[k]/( @all_freq[k] / @sum ) + end[0..10].each do |k| + puts %{#{hash[k]}: #{k}} + end + end + +end + +freq_for={} +d=Density.new +ARGV.each do |file| + puts '['+file+']' + fic=File.open(file) + content="" + fic.each_line do |l| + content <<= l + end + fic.close + freq_for[file]=d.density(content) + d.show_tags(freq_for[file]) +end diff --git a/tasks/auto_tags/frequencies.val b/tasks/auto_tags/frequencies.val new file mode 100644 index 0000000..12e04ee --- /dev/null +++ b/tasks/auto_tags/frequencies.val @@ -0,0 +1,4350 @@ +[content/html/en/about.md] +[content/html/en/about/old.md] +[content/html/en/about/technical_details.md] +[content/html/en/blog/01_nanoc.md] +[content/html/en/blog/02_ackgrep.md] +[content/html/en/blog/03_losthighway/03_losthighway_1.md] +[content/html/en/blog/03_losthighway/03_losthighway_2.md] +[content/html/en/blog/03_losthighway/03_losthighway_3.md] +[content/html/en/blog/03_losthighway/03_losthighway_4.md] +[content/html/en/blog/03_losthighway.md] +[content/html/en/blog/04_drm.md] +[content/html/en/blog/05_git_create_remote_branch.md] +[content/html/en/blog/06_How_I_use_git.md] +[content/html/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard.md] +[content/html/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard.md] +[content/html/en/blog/09_Why_I_didn't_keep_whosamung.us.md] +[content/html/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe.md] +[content/html/en/blog/11_Load_Disqus_Asynchronously.md] +[content/html/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-.md] +[content/html/en/blog/2009-09-jQuery-Tag-Cloud.md] +[content/html/en/blog/2009-09-replace-all-except-some-part.md] +[content/html/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-.md] +[content/html/en/blog/2009-10-30-How-to-handle-evil-IE.md] +[content/html/en/blog/2009-10-Focus-vs-Minimalism.md] +[content/html/en/blog/2009-10-How-to-preload-your-site-with-style.md] +[content/html/en/blog/2009-10-launch-daemon-from-command-line.md] +[content/html/en/blog/2009-10-untaught-git-usage.md] +[content/html/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery.md] +[content/html/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure.md] +[content/html/en/blog/2009-11-12-Git-for-n00b/commandes-avancees.md] +[content/html/en/blog/2009-11-12-Git-for-n00b/comprendre.md] +[content/html/en/blog/2009-11-12-Git-for-n00b/conf-et-install.md] +[content/html/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire.md] +[content/html/en/blog/2009-11-12-Git-for-n00b.md] +[content/html/en/blog/2009-12-06-iphone-call-filter.md] +[content/html/en/blog/2009-12-14-Git-vs--Bzr.md] +[content/html/en/blog/2010-01-04-Change-default-shell-on-Mac-OS-X.md] +[content/html/en/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu.md] +[content/html/en/blog/2010-02-15-All-but-something-regexp.md] +[content/html/en/blog/2010-02-16-All-but-something-regexp--2-.md] +[content/html/en/blog/2010-02-18-split-a-file-by-keyword.md] +[content/html/en/blog/2010-02-23-When-regexp-is-not-the-best-solution.md] +[content/html/en/blog/2010-03-22-Git-Tips.md] +[content/html/en/blog/2010-03-23-Encapsulate-git.md] +[content/html/en/blog.md] +[content/html/en/blog/mvc.md] +[content/html/en/contact.md] +[content/html/en/error/401-authorization_required.md] +[content/html/en/error/403-forbidden.md] +[content/html/en/error/404-not_found.md] +[content/html/en/error/408-request_timed_out.md] +[content/html/en/error/500-internal_server_error.md] +[content/html/en/error/503-service_unavailable.md] +[content/html/en/rss.md] +[content/html/en/validation.md] +[content/html/fr/about.md] +[content/html/fr/about/old.md] +[content/html/fr/about/technical_details.md] +[content/html/fr/blog/01_nanoc.md] +[content/html/fr/blog/02_ackgrep.md] +[content/html/fr/blog/03_losthighway/03_losthighway_1.md] +[content/html/fr/blog/03_losthighway/03_losthighway_2.md] +[content/html/fr/blog/03_losthighway/03_losthighway_3.md] +[content/html/fr/blog/03_losthighway/03_losthighway_4.md] +[content/html/fr/blog/03_losthighway.md] +[content/html/fr/blog/04_drm.md] +[content/html/fr/blog/05_git_create_remote_branch.md] +[content/html/fr/blog/06_How_I_use_git.md] +[content/html/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard.md] +[content/html/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard.md] +[content/html/fr/blog/09_Why_I_didn't_keep_whosamung.us.md] +[content/html/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe.md] +[content/html/fr/blog/11_Load_Disqus_Asynchronously.md] +[content/html/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-.md] +[content/html/fr/blog/2009-09-jQuery-Tag-Cloud.md] +[content/html/fr/blog/2009-09-replace-all-except-some-part.md] +[content/html/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-.md] +[content/html/fr/blog/2009-10-30-How-to-handle-evil-IE.md] +[content/html/fr/blog/2009-10-Focus-vs-Minimalism.md] +[content/html/fr/blog/2009-10-How-to-preload-your-site-with-style.md] +[content/html/fr/blog/2009-10-launch-daemon-from-command-line.md] +[content/html/fr/blog/2009-10-untaught-git-usage.md] +[content/html/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery.md] +[content/html/fr/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure.md] +[content/html/fr/blog/2009-11-12-Git-for-n00b/commandes-avancees.md] +[content/html/fr/blog/2009-11-12-Git-for-n00b/comprendre.md] +[content/html/fr/blog/2009-11-12-Git-for-n00b/conf-et-install.md] +[content/html/fr/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire.md] +[content/html/fr/blog/2009-11-12-Git-for-n00b.md] +[content/html/fr/blog/2009-12-06-iphone-call-filter.md] +[content/html/fr/blog/2009-12-14-Git-vs--Bzr.md] +[content/html/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X.md] +[content/html/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu.md] +[content/html/fr/blog/2010-02-15-All-but-something-regexp.md] +[content/html/fr/blog/2010-02-16-All-but-something-regexp--2-.md] +[content/html/fr/blog/2010-02-18-split-a-file-by-keyword.md] +[content/html/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution.md] +[content/html/fr/blog/2010-03-22-Git-Tips.md] +[content/html/fr/blog/2010-03-23-Encapsulate-git.md] +[content/html/fr/blog.md] +[content/html/fr/blog/mvc.md] +[content/html/fr/contact.md] +[content/html/fr/error/401-authorization_required.md] +[content/html/fr/error/403-forbidden.md] +[content/html/fr/error/404-not_found.md] +[content/html/fr/error/408-request_timed_out.md] +[content/html/fr/error/500-internal_server_error.md] +[content/html/fr/error/503-service_unavailable.md] +[content/html/fr/rss.md] +[content/html/fr/validation.md] +1 nature +1 langage +1 magique +1 daughter +1 violences +1 fancy +1 buter +1 recommande +1 valid +1 autant +1 gods +1 Date +1 amour +1 affreuse +1 Decentralization +1 Catholique +1 restent +1 craser +1 apparaissent +1 Not +1 parcequ +1 Utilisation +1 pourtant +1 launching +1 sachant +1 Changing +1 fastidieuse +1 sad +1 abonne +1 yet +1 Easily +1 images +1 sure +1 invit +1 juger +1 Permet +1 Ils +1 exclure +1 confusing +1 deletion +1 third +1 navigator +1 camL +1 European +1 restantes +1 service +1 probable +1 heavy +1 ues +1 remettent +1 capability +1 manipulate +1 Belle +1 connerie +1 apparaissant +1 oublier +1 learned +1 Higway +1 observe +1 discovery +1 couter +1 parl +1 asynchronous +1 justified +1 Des +1 Lisez +1 users +1 representation +1 Obsol +1 Galactica +1 filtre +1 Personally +1 CamL +1 provided +1 viennent +1 travaillez +1 slow +1 ameliorating +1 English +1 rites +1 appliquer +1 frequently +1 Undo +1 achet +1 poursuivis +1 pulled +1 cembre +1 basique +1 Creating +1 Typically +1 configured +1 souhaitait +1 nant +1 daily +1 Reply +1 refaire +1 Branching +1 anybody +1 pragmatism +1 grammatical +1 PHP +1 fille +1 coups +1 recommence +1 paradigm +1 Two +1 safe +1 recherches +1 blocking +1 purpose +1 mention +1 Kernel +1 dieux +1 administr +1 pire +1 principal +1 Verify +1 garagist +1 terminologies +1 Ind +1 progr +1 Distributed +1 probably +1 clairement +1 Livres +1 hardly +1 rencontrait +1 accord +1 navigateurs +1 imagin +1 TREE +1 inherent +1 came +1 configurer +1 speed +1 renommer +1 conceptions +1 double +1 coming +1 alert +1 Finalement +1 visions +1 regardant +1 aucune +1 names +1 resources +1 court +1 lasse +1 codes +1 Decentralisation +1 resteront +1 acts +1 Books +1 arriv +1 ambig +1 coltiner +1 alway +1 Pictures +1 separate +1 suppl +1 abort +1 favor +1 skills +1 Certain +1 rimentalement +1 readable +1 accepter +1 hosts +1 efforts +1 lancez +1 demment +1 personally +1 rentrer +1 logique +1 resolution +1 dessinent +1 couverte +1 longueur +1 risque +1 questions +1 historiquement +1 particularly +1 named +1 orient +1 cheuse +1 officiel +1 uncorrelated +1 fais +1 sultats +1 lesquels +1 ensure +1 Lovecraftiens +1 accepted +1 tudiant +1 Degree +1 Naked +1 cliquez +1 Explication +1 Enfin +1 diaire +1 souvient +1 employ +1 lisant +1 quatre +1 swapper +1 selon +1 violence +1 weren +1 posait +1 progress +1 random +1 pratiques +1 mien +1 sourcils +1 Mostly +1 premiers +1 regarder +1 kernel +1 actes +1 puissante +1 verifier +1 grav +1 rediriger +1 gap +1 autonomes +1 quelconque +1 ressources +1 valait +1 Utilisateur +1 lisible +1 possibles +1 limited +1 filmer +1 Bouuhh +1 accept +1 dark +1 derri +1 assez +1 ubiquit +1 explanantion +1 commited +1 interpration +1 mourir +1 matiquement +1 fervent +1 argent +1 compr +1 langue +1 biologistes +1 reverting +1 pragamatique +1 creuse +1 grace +1 Mise +1 gestes +1 langages +1 obligation +1 properties +1 Quelle +1 hear +1 trange +1 took +1 chapper +1 married +1 Finally +1 oit +1 appelez +1 avaient +1 revoir +1 trucs +1 ois +1 contributor +1 Speaking +1 abonnement +1 revois +1 Sinc +1 pousser +1 understanding +1 donnerai +1 entrez +1 won +1 tirer +1 wheel +1 recovered +1 Principalement +1 generating +1 Recover +1 meet +1 frustrant +1 passed +1 combler +1 bouton +1 concises +1 penser +1 Famille +1 ellement +1 entres +1 Malgr +1 worked +1 notified +1 crivant +1 conceptuels +1 easiest +1 represents +1 tentateur +1 garde +1 fauts +1 respective +1 caused +1 occurred +1 revisions +1 Cliquez +1 calling +1 connecter +1 theory +1 states +1 buts +1 diaires +1 implies +1 Read +1 casse +1 Laboratoire +1 programm +1 firsts +1 Others +1 courant +1 supposition +1 principaux +1 convivial +1 proof +1 exp +1 CGI +1 ambiguity +1 gory +1 inutilement +1 emerged +1 filtres +1 Peut +1 Naturellement +1 tudiants +1 concept +1 Curien +1 fantastique +1 affichait +1 filtrer +1 Suivez +1 personne +1 fontionne +1 BIEN +1 souplesse +1 laiss +1 tedious +1 mentation +1 soi +1 autonome +1 provenant +1 uploade +1 resemble +1 minor +1 actions +1 representations +1 compare +1 trouvaient +1 leave +1 Quasiment +1 public +1 False +1 rateurs +1 Fuck +1 visait +1 disapear +1 jailbreak +1 cvs +1 tiedous +1 vraisemblable +1 festin +1 indif +1 Temporal +1 limit +1 influent +1 convention +1 hension +1 espoir +1 Faire +1 corrections +1 partez +1 configur +1 globale +1 cheated +1 chait +1 corner +1 school +1 COURSE +1 alternatives +1 Discover +1 synchronisent +1 due +1 petites +1 tells +1 engendrer +1 technique +1 trouverez +1 revision +1 analyse +1 annoying +1 Clone +1 gagner +1 Gallactica +1 synchronis +1 teach +1 functionalities +1 Company +1 gens +1 appellation +1 correspondant +1 prompte +1 valeur +1 parrait +1 transformed +1 blogs +1 switch +1 carquill +1 Lire +1 commencerai +1 utilisaient +1 diter +1 nothing +1 observer +1 signal +1 joue +1 survenir +1 Gestion +1 serai +1 quickly +1 New +1 clients +1 Dieu +1 parle +1 Firstly +1 girl +1 results +1 appellent +1 semblait +1 placer +1 converted +1 Upload +1 experiment +1 difficilement +1 imm +1 Personnellement +1 answer +1 courtes +1 veloppeurs +1 advertising +1 linear +1 possibilit +1 mondes +1 signifiait +1 blaireau +1 conseillerai +1 glue +1 linked +1 disappear +1 gatifs +1 dialog +1 contraire +1 fallen +1 rescousse +1 Was +1 compilations +1 implement +1 recopier +1 naturels +1 Hello +1 engendrement +1 Patchs +1 dirait +1 fixes +1 conceptual +1 faits +1 telles +1 Main +1 modal +1 effects +1 fixer +1 recommencer +1 Curient +1 arr +1 risk +1 validate +1 break +1 becomes +1 incluant +1 avouer +1 Perdu +1 founded +1 Parfois +1 addition +1 mails +1 dition +1 Supposons +1 Explanation +1 condamn +1 menus +1 dowload +1 Evil +1 aid +1 bunch +1 Result +1 cide +1 shorter +1 cuter +1 huge +1 laides +1 parler +1 ches +1 JAMAIS +1 Back +1 moyens +1 ailleurs +1 appr +1 automate +1 repair +1 programme +1 droite +1 rapport +1 achetera +1 soucis +1 nonc +1 vent +1 consisted +1 fur +1 critical +1 suffirait +1 parallel +1 Ajourd +1 meComment +1 CSV +1 mentionn +1 naming +1 Renvoyer +1 broke +1 lightweight +1 homepage +1 Obsolete +1 positive +1 raison +1 mystiques +1 Click +1 step +1 outils +1 approche +1 Booh +1 finder +1 sidant +1 Tree +1 arbre +1 familiaris +1 approach +1 tromp +1 objecter +1 party +1 familier +1 insuffisant +1 ordre +1 ajoutait +1 relire +1 having +1 around +1 visualisation +1 ancienne +1 concurrentesen +1 Heureusement +1 sumons +1 droits +1 Everyday +1 Argument +1 interdire +1 philosophy +1 choices +1 solus +1 deviner +1 venait +1 hum +1 renseignant +1 Applications +1 eyecandy +1 temporelles +1 season +1 monde +1 december +1 Basic +1 Movies +1 ASP +1 environment +1 multilangue +1 students +1 block +1 habitude +1 biais +1 humiliant +1 clean +1 somewhere +1 putting +1 Examples +1 Notre +1 parti +1 cod +1 ugly +1 decent +1 noms +1 frustrating +1 heureux +1 apporteraient +1 alternative +1 Finder +1 mettront +1 installation +1 ajouts +1 manner +1 amours +1 Lancez +1 Tous +1 May +1 terrible +1 actress +1 changements +1 interdite +1 cach +1 buttons +1 existent +1 prefered +1 ameliorated +1 believes +1 perfect +1 cessitant +1 Fortunately +1 quitter +1 BUT +1 quit +1 See +1 intervenir +1 ments +1 disparaisse +1 fixant +1 trouvez +1 apprendre +1 majeur +1 typographiques +1 Files +1 populaire +1 reviendrai +1 depend +1 Launch +1 cute +1 negatives +1 tient +1 magie +1 confus +1 tiens +1 finitivement +1 reflect +1 pondait +1 crits +1 Logics +1 parcourir +1 parameter +1 intermediate +1 operator +1 fonctionnera +1 correspondre +1 attendre +1 ann +1 dieu +1 negotiation +1 policier +1 theoretical +1 NEVER +1 sugg +1 doc +1 dialogue +1 takes +1 bizarres +1 intimidating +1 obsession +1 multilingual +1 Protections +1 enclin +1 rapatrie +1 Pas +1 savent +1 justes +1 quanden +1 idiot +1 doomed +1 okay +1 Such +1 appris +1 dogmatism +1 courses +1 pensais +1 Their +1 cryptique +1 ask +1 cruellement +1 suit +1 pointant +1 crites +1 functionality +1 appears +1 contrairement +1 environnement +1 fetcher +1 money +1 conclude +1 regard +1 identique +1 badness +1 finir +1 voulait +1 faible +1 ressent +1 voulais +1 accepts +1 Shows +1 returns +1 devriez +1 cleaner +1 devez +1 escape +1 venant +1 somehow +1 nobody +1 Clearly +1 subscribed +1 persons +1 Cops +1 pisodes +1 gamine +1 effets +1 overwriting +1 MAIS +1 pwd +1 aggregate +1 upon +1 fetched +1 worst +1 critique +1 traduce +1 Theory +1 Ici +1 demanderez +1 mental +1 puisqu +1 Donc +1 accepte +1 Student +1 patched +1 commen +1 producer +1 Global +1 pattes +1 cache +1 execute +1 modifient +1 affichent +1 regroupement +1 pleurait +1 comportement +1 poupe +1 happens +1 Super +1 scenes +1 Except +1 liore +1 saxon +1 definitively +1 Avantages +1 VCS +1 environ +1 Retourne +1 searches +1 lanc +1 arise +1 remarqu +1 fastidious +1 analyze +1 engendr +1 finira +1 offline +1 usable +1 inventer +1 croyais +1 sembler +1 logic +1 exemples +1 rassembl +1 besoins +1 ressant +1 environnements +1 shared +1 Everything +1 year +1 fondements +1 secondes +1 pourrez +1 sois +1 milieu +1 atomiques +1 pendre +1 deviendra +1 lance +1 attention +1 servaient +1 confused +1 gociation +1 contradicts +1 nul +1 disparaissant +1 rable +1 unnatural +1 Configurez +1 Films +1 Devil +1 faudrait +1 pliquent +1 rieusement +1 enl +1 discut +1 naturellement +1 philosophie +1 foundations +1 menter +1 cocoasamurai +1 lecture +1 expliquant +1 rerai +1 saison +1 expliqu +1 safer +1 vient +1 First +1 oublie +1 mesure +1 majeurs +1 importante +1 remarquez +1 typographical +1 conventions +1 moriser +1 minimaliste +1 principe +1 parall +1 uneasy +1 ciables +1 noirs +1 synchronized +1 differently +1 proceed +1 cherche +1 inclure +1 tellement +1 claiming +1 webpages +1 blond +1 Certainement +1 tat +1 synchronise +1 aires +1 Base +1 visit +1 forme +1 simplest +1 barre +1 sees +1 intimidant +1 intuitif +1 consomme +1 promesses +1 perceive +1 blonde +1 ronge +1 obviously +1 Lunch +1 theese +1 demand +1 biggest +1 voile +1 synchronization +1 rendent +1 tape +1 updated +1 hensibles +1 avait +1 souhaitent +1 functionnalities +1 biologist +1 mechanism +1 coin +1 Diable +1 montre +1 boutons +1 Renommer +1 heurter +1 Conceptuellement +1 claires +1 Subscribe +1 couvris +1 couvrir +1 safety +1 vais +1 regeneration +1 carr +1 Conceptually +1 lever +1 capable +1 discussed +1 Analysons +1 nommage +1 compliqu +1 installed +1 info +1 usefull +1 doute +1 remorse +1 ram +1 falloir +1 fuite +1 percevoir +1 uds +1 termes +1 devoir +1 humiliating +1 Notamment +1 goes +1 mentale +1 alternate +1 acheter +1 Renaming +1 called +1 utiles +1 fautes +1 quivalentes +1 visionnage +1 adore +1 semblent +1 arguments +1 weather +1 choisi +1 atteindre +1 blogspot +1 badly +1 understandable +1 Essaye +1 technically +1 rappelez +1 reiterate +1 externalized +1 comparer +1 branched +1 ponse +1 titles +1 deviennent +1 workflows +1 connaitre +1 recoupements +1 Configuration +1 mrs +1 detailled +1 devrais +1 Copyrighter +1 neuf +1 Sur +1 ter +1 Saint +1 pendante +1 perception +1 appels +1 brouille +1 tel +1 maison +1 explications +1 GRAND +1 faveur +1 induit +1 gle +1 officielle +1 veuille +1 Today +1 orthographes +1 efficiency +1 Grand +1 quelque +1 mainly +1 rattraper +1 CocoaSamurai +1 vocation +1 wide +1 Juste +1 qualit +1 Conflict +1 cents +1 enferm +1 Lovecraft +1 disk +1 perspective +1 MUCH +1 temporaire +1 las +1 fill +1 browsers +1 today +1 Quoi +1 consistait +1 soucier +1 ARBORESCENCE +1 Some +1 catholic +1 manipulated +1 avantage +1 gourmand +1 reconna +1 single +1 justifi +1 Enregistrez +1 University +1 Practically +1 descriptions +1 Our +1 sait +1 interior +1 lourds +1 ancien +1 Parce +1 realize +1 particular +1 programmer +1 armes +1 grande +1 annule +1 parmi +1 loign +1 sion +1 dispatch +1 univ +1 Quang +1 since +1 perdue +1 orique +1 filtrage +1 Typical +1 ALL +1 Sincerely +1 judge +1 Another +1 indiquer +1 principalement +1 imprisonned +1 route +1 dogmatique +1 peint +1 alis +1 recent +1 realities +1 obligatoire +1 UNE +1 consequence +1 sout +1 nes +1 minimalist +1 Hors +1 accessible +1 enseign +1 preferable +1 repositoy +1 triste +1 hensible +1 inclined +1 diate +1 told +1 dentes +1 However +1 tools +1 prendre +1 EASY +1 Ensuit +1 separable +1 diversifi +1 Laboratory +1 Opinion +1 allons +1 talked +1 bandwith +1 pondez +1 travaill +1 Merci +1 graphe +1 lieu +1 reminder +1 jailbreaker +1 adapt +1 partisant +1 administrator +1 hiding +1 Ventant +1 orthographic +1 collaboration +1 servers +1 consid +1 backward +1 leak +1 quivalent +1 changing +1 redo +1 Histoire +1 Anyway +1 rie +1 majorit +1 Help +1 oriques +1 rencie +1 auraient +1 ralement +1 hardest +1 weaker +1 Abstract +1 Europe +1 Afin +1 pis +1 trouble +1 commenc +1 forces +1 aimerai +1 finement +1 tises +1 blacklists +1 entier +1 handling +1 role +1 Commands +1 eyes +1 remind +1 mine +1 mergez +1 vident +1 valent +1 Celle +1 automatique +1 parer +1 servi +1 TOUTE +1 signaler +1 aujourd +1 properities +1 nihilo +1 vice +1 cherchez +1 fallait +1 copiez +1 obscur +1 vois +1 business +1 laisserais +1 fantastic +1 publicit +1 suffisante +1 Hence +1 objets +1 lesquelles +1 devait +1 commits +1 Wrong +1 servant +1 soient +1 inqui +1 Family +1 utilisent +1 crying +1 correction +1 positifs +1 anglophobe +1 invited +1 vertices +1 concentrate +1 reported +1 rement +1 mont +1 bar +1 mons +1 aspect +1 aient +1 niablement +1 aper +1 merged +1 NON +1 interest +1 anglo +1 lin +1 communaut +1 record +1 unbelievable +1 obscure +1 personnelle +1 modales +1 Either +1 mounted +1 laisser +1 lif +1 bloque +1 Pete +1 retard +1 canismes +1 proposait +1 discard +1 suffisantes +1 decentralised +1 pique +1 ros +1 Humble +1 mentaires +1 adaptation +1 colored +1 Work +1 fera +1 compliquer +1 retrouver +1 vingtaine +1 effect +1 cision +1 Commen +1 Eyes +1 Aller +1 tips +1 Advantages +1 titres +1 barrasser +1 serious +1 managed +1 ons +1 fonctionnalit +1 replacerai +1 travers +1 Aujourd +1 days +1 concerns +1 accomplis +1 essentielle +1 comblait +1 Since +1 responsable +1 manquait +1 devaient +1 souhaiterai +2 travaillent +2 commentaires +2 ads +2 parerai +2 egrep +2 unes +2 minutes +2 MAL +2 Dynamic +2 Dec +2 strength +2 bullsh +2 souvenir +2 Patches +2 5000 +2 050000 +2 perd +2 URAN00B +2 complicated +2 travaille +2 Autres +2 technologies +2 Error +2 partially +2 sons +2 recompilation +2 parties +2 rations +2 messageID +2 recompile +2 Add +2 selenic +2 cryptic +2 947432 +2 built +2 User +2 Remark +2 concernant +2 sychronize +2 Nom +2 enfuir +2 interm +2 artefact +2 Hubert +2 wrapper +2 suppression +2 laptop +2 solo +2 search +2 guys +2 Reader +2 nettement +2 erasing +2 organize +2 SYNTAX +2 primary +2 abc +2 OpenSource +2 scr +2 issue +2 needs +2 person +2 computers +2 motivation +2 scp +2 became +2 Sockets +2 multilang +2 on_yellow +2 maintain +2 warn +2 rendu +2 conclure +2 vrai +2 copie +2 terme +2 poque +2 Emplois +2 DTDs +2 aucun +2 visible +2 Secondly +2 connect +2 Timed +2 urgent +2 SVC +2 directe +2 conflictTest +2 18T15 +2 ANSIColor +2 Chaque +2 permettre +2 cessaire +2 timer +2 18T14 +2 git_for_designers +2 deserve +2 Changer +2 820000 +2 subscribe +2 typeset +2 forgot +2 Battlestar +2 points +2 tigris +2 derive +2 retrouve +2 Xcode +2 Copie +2 mauvaise +2 Old +2 408 +2 toggleMenu +2 12T16 +2 continu +2 sentations +2 official +2 xcodeConfig +2 disque +2 petits +2 lib +2 gler +2 simpler +2 Version +2 dernier +2 simples +2 Internal +2 fuller +2 Filtrage +2 404 +2 Drive +2 403 +2 seq +2 instant +2 hates +2 discover +2 msfonts +2 401 +2 Interpr +2 10T16 +2 souhaitais +2 DISPONIBLE +2 gimp +2 voyons +2 970000 +2 ressants +2 seeing +2 nuisent +2 influence +2 adh +2 capacit +2 incr +2 acte +2 revertbeforemerge +2 prepend +2 pacte +2 remonter +2 sumer +2 prudence +2 other_regexp +2 elegant +2 sort +2 guli +2 whosamung +2 library +2 Bakcup +2 dits +2 indices +2 fit +2 deuxi +2 Will +2 Merge +2 sed +2 oneline +2 central_architecture +2 sec +2 Job +2 oridinateurs +2 chargement +2 recherchez +2 correpond +2 UTF +2 SEDiL +2 Smarter +2 020000 +2 eXistenZ +2 coloring +2 16T10 +2 nor +2 lis +2 solutions +2 Surf +2 suivante +2 mystery +2 Content +2 Python +2 060000 +2 avatar +2 play +2 msie +2 professionnel +2 fear +2 sbin +2 items +2 incompr +2 ikog +2 trompe +2 Program +2 chance +2 side +2 commentaire +2 access +2 area +2 ending +2 hour +2 Exemple +2 contained +2 forbidden +2 Opensource +2 versioning +2 propose +2 veuillez +2 Service +2 22T20 +2 senti +2 interesting +2 Life +2 pretending +2 copier +2 messages +2 divs +2 22T22 +2 640000 +2 parameters +2 remote_branch +2 space +2 divergences +2 astuce +2 NOW +2 Games +2 Informaticien +2 popular +2 copies +2 Calculate +2 information +2 online +2 ciser +2 cherry +2 securely +2 Metapost +2 queryLoader +2 envoyez +2 PATH +2 000 +2 posted +2 Brsync +2 associ +2 police +2 pourront +2 screen +2 vaine +2 terror +2 Efficiency +2 permier +2 17T23 +2 personnality +2 protect +2 End +2 explique +2 arriver +2 incarn +2 psychanalytique +2 Other +2 utf +2 secure +2 666 +2 waiting +2 icon +2 vos +2 comprend +2 tourner +2 blame +2 Schoolbook +2 Miscellaneous +2 openssh +2 DOES +2 cliquer +2 Est +2 grow +2 daemons +2 Research +2 Remove +2 atomic +2 Conway +2 conquis +2 bout +2 tomb +2 Receive +2 general +2 either +2 PropertyList +2 cemment +2 uns +2 syntaxique +2 Index +2 invent +2 personnage +2 note +2 Concurrentes +2 miscellanious +2 impact +2 unstage +2 complementary +2 Passionate +2 Baudolino +2 190408 +2 passes +2 generally +2 Further +2 actrice +2 devoted +2 avons +2 sale +2 URL +2 logout +2 tool +2 elements +2 connected +2 tagcloud +2 smallest +2 Pendant +2 rorschach +2 Automatic +2 Disponible +2 Simply +2 paye +2 22T16 +2 Tiger +2 kill +2 concentrer +2 Publish +2 firstname +2 Certainly +2 annoncer +2 b01 +2 apportent +2 noyau +2 documents +2 Encapsuler +2 velopper +2 envoi +2 travail +2 Avatar +2 b02 +2 execution +2 model +2 570000 +2 entp +2 tourn +2 diy +2 Tahoma +2 Exclude +2 ORIG_HEAD +2 modem +2 22T10 +2 Numbers +2 often +2 references +2 CONFLICT +2 Photos +2 testes +2 modifie +2 genre +2 Apr +2 contiendra +2 passwords +2 recevoir +2 compiled +2 130000 +2 cat +2 efficient +2 transmit +2 mani +2 2dc7ffb0f186a407a1814d1a62684342cd54e7d6 +2 coup +2 car +2 entr +2 settings +2 rubycode +2 sonne +2 launchd +2 dynamic_branching +2 cran +2 mis +2 geek +2 atomique +2 Systems +2 liorations +2 trousses +2 Auto +2 Request +2 REALLY +2 constatation +2 Define +2 Site_improvements_ +2 aurai +2 Regarder +2 exception +2 obtained +2 BSync +2 860000 +2 entendu +2 Branches +2 depth +2 gen +2 Passion +2 flush +2 dis +2 fails +2 conna +2 therefore +2 Programming +2 LIF +2 bought +2 devenu +2 collector +2 assets +2 BWEBSITE +2 implie +2 occur +2 principle +2 670000 +2 off +2 blank +2 authorized_keys +2 Send +2 Unaviable +2 incremental +2 connaissance +2 words +2 become +2 Recherche +2 meilleures +2 maximum +2 Suppose +2 Real +2 original_disqus +2 applications +2 classe +2 resse +2 construction +2 6c0000 +2 Working +2 inconscient +2 Toutes +2 peine +2 BSITE +2 Listeners +2 remoteSiteMapRef +2 Pragmatic +2 mystique +2 Example +2 appelle +2 enabled +2 Encore +2 10141032 +2 act +2 BAK +2 amoureux +2 precise +2 solid +2 fff +2 describe +2 signifie +2 Sans +2 236 +2 node +2 Projets +2 precisely +2 THIS +2 account +2 panic +2 local_branch +2 forbid +2 manip +2 straight +2 They +2 END +2 convenient +2 conception +2 greediness +2 product +2 acc +2 convaincant +2 Garbage +2 multicorps +2 requests +2 MacPorts +2 128 +2 081398 +2 param +2 generator +2 conquered +2 filtered +2 undomerge +2 creating +2 went +2 lien +2 couldn +2 contenus +2 shi +2 Etienne +2 Author +2 paraissait +2 programmed +2 Scientist +2 wrong +2 said +2 Objective +2 comprised +2 Initialisation +2 rais +2 totalement +2 trymv +2 proved +2 Chacun +2 Plusieurs +2 scientifiques +2 God +2 JSP +2 ProgramArguments +2 utilisateurs +2 buy +2 dangerous +2 rgba +2 episodes +2 getScript +2 servir +2 Authorization +2 040000 +2 03T14 +2 f03 +2 manquent +2 discovered +2 SHOULD +2 Cacher +2 whom +2 suppose +2 REGEXP +2 pourquois +2 Theorem +2 pornographique +2 Quand +2 ElectricSheep +2 321 +2 absolutely +2 selfupdate +2 Education +2 Rashomon +2 upgraded +2 instar +2 vid +2 Oui +2 rsa +2 intuitive +2 mod +2 ago +2 recompiling +2 SYSTEM +2 pornographic +2 rieur +2 autoload +2 testmode +2 searching +2 scientists +2 impliquer +2 mysteryman +2 well +2 Security +2 enlever +2 sum +2 transfer +2 erreur +2 blocked +2 software +2 fenseurs +2 agent +2 transitions +2 minus +2 sais +2 enregistrer +2 hoth +2 reused +2 achieved +2 ayant +2 inkscape +2 chaine +2 Marseille +2 professional +2 Astek +2 acronym +2 Dipl +2 beau +2 pendantes +2 endroit +2 Counting +2 cid +2 Lucida +2 terminated +2 Mail +2 dirais +2 installez +2 gitk +2 DS_Store +2 Shakespeare +2 Out +2 Escher +2 autosetupmerge +2 red +2 13T13 +2 incrementale +2 safest +2 father +2 Strangely +2 _Iago_ +2 espace +2 Vim +2 bullshi +2 flexion +2 Management +2 electricsheep +2 visits +2 signification +2 shown +2 Ability +2 lesson +2 identifier +2 School +2 out +2 remark +2 Conflicts +2 14T10 +2 Code +2 22em +2 contenir +2 our +2 serait +2 demande +2 pick +2 regex_benchmark_ext +2 confess +2 centralized +2 Satan +2 oui +2 mount +2 misc +2 apps +2 emb +2 jalousy +2 Bach +2 Possibilit +2 choisir +2 display +2 Hypothesis +2 usages +2 local_command +2 cycle +2 30T22 +2 warning +2 longer +2 efficace +2 propri +2 fut +2 Netvibes +2 Perso +2 lazy +2 GUI +2 fatiguer +2 passage +2 e640846 +2 56k +2 HTTPS +2 lior +2 Password +2 compter +2 page2 +2 allais +2 Save +2 ytypo +2 page1 +2 absolument +2 methods +2 efficacement +2 Trephine +2 Contain +2 Debian +2 sight +2 Beware +2 prove +2 sniffed +2 oblige +2 watching +2 run +2 inacceptable +2 Nonetheless +2 helpfull +2 setTimeout +2 installer +2 nanoc3 +2 lastname +2 elif +2 2dc7ffb +2 green +2 garagiste +2 Century +2 regex_benchmark_strip +2 quipe +2 cole +2 remains +2 DTD +2 d3ea395 +2 trivial +2 raisons +2 fran +2 Verdana +2 based +2 Append +2 23T13 +2 Amung +2 conimiseurs +2 english +2 Tell +2 passionate +2 entendez +2 apt +2 4XpnKHJAok8 +2 dltj +2 fond +2 racine +2 loose +2 concurrent +2 renvoie +2 503 +2 diverged +2 choice +2 open +2 independance +2 naturelle +2 logiques +2 Concurentes +2 bypass +2 aurait +2 LaTeX +2 Without +2 Where +2 disponible +2 Great +2 550000 +2 incarnated +2 rappeler +2 23T22 +2 recup +2 Transmit +2 clien +2 Set +2 reduce +2 Name +2 shortest +2 tunnel +2 10px +2 relative +2 git_command +2 Rappeler +2 benefits +2 Lester +2 07T20 +2 meta +2 instances +2 Unpacking +2 pact +2 vite +2 pris +2 troisi +2 unstable +2 ones +2 mission +2 markdown +2 drm +2 soon +2 attends +2 taper +2 coding +2 Rashomon_effect +2 cc0000 +2 rales +2 GREAT +2 notions +2 transformations +2 personnalit +2 mvc1 +2 fastidieux +2 partout +2 Hofstadter +2 thanks +2 card +2 company +2 yann1 +2 liens +2 apport +2 support +2 Ssh +2 finissent +2 years +2 Usages +2 693407 +2 expand_path +2 magic +2 10_Synchronize_Custom_WebSite_with_mobileMe +2 occurences +2 Eraserhead +2 Voyant +2 080000 +2 tunneling +2 older +2 similaire +2 Inkscape +2 cassette +2 localhost +2 concilier +2 charg +2 BSite +2 Programmation +2 sorte +2 Fonts +2 theoretically +2 suivantes +2 psychanalytics +2 basename +2 dodge +2 management +2 branch_hierarchy +2 mvc +2 syntaxe +2 queryloader +2 job +2 eagain +2 venir +2 doivent +2 associating +2 listen +2 dumb +2 importance +2 lent +2 unsafe +2 conditional +2 filters_post +2 mises +2 Winner +2 correct +2 ipt +2 Having +2 ans +2 During +2 macports +2 videmment +2 04T12 +2 null +2 ant +2 Usage +2 12112009 +2 surprise +2 box +2 mercurial +2 Menu +2 concepteurs +2 core +2 entire +2 discussion +2 approximativement +2 Mullholland +2 arborescence +2 Term +2 Initial +2 expect +2 libexec +2 searched +2 2000 +2 AirFrance +2 motel +2 717748 +2 reader +2 couch +2 dashboard +2 hiddenDivs +2 cooperation +2 issues +2 enter +2 StandardErrorPath +2 26T21 +2 06T17 +2 Disabled +2 chop +2 automatiser +2 gayadesign +2 06T16 +2 marvelous +2 Loading +2 clearer +2 validit +2 Rules +2 Avez +2 argument +2 Total +2 06T11 +2 2004 +2 merg +2 contact +2 yeah +2 Distributed_Concurrent_Versions_System +2 dot +2 Comprendre +2 Minimalisme +2 unacceptable +2 cherch +2 theworkinggeek +2 Hide +2 normales +2 cens +2 fonctionnement +2 2007 +2 photo +2 recently +2 encod +2 stat +2 While +2 Watch +2 associtated +2 loop +2 valide +2 Untaught +2 Gimp +2 poser +2 28T10 +2 wish +2 closer +2 meilleurs +2 rapide +2 pourraient +2 importe +2 randomly +2 28T11 +2 maintenance +2 17T14 +2 rifier +2 worse +2 faisant +2 Hypothese +2 house +2 savers +2 proche +2 reasoning +2 Cet +2 network +2 beware +2 diable +2 M45T3R +2 iemessage +2 caract +2 PLIST +2 straightforward +2 generated +2 restricted +2 Designers +2 Nous +2 _fighting_with_Disqus +2 folks +2 Finaly +2 rewrite +2 enought +2 yours +2 Can +2 adopt +2 format +2 share +2 whatisrss +2 Try +2 examples +2 bulls +2 formation +2 range +2 conseille +2 automatic +2 inetdCompatibility +2 inconsciente +2 accompagnant +2 Eco +2 obey +2 Remember +2 autour +2 intended +2 firsthi +2 9001 +2 Discussions +2 Generator +2 finite +2 netvibes +2 starting +2 mystic +2 SHAuthorizationRight +2 03_losthighway_1 +2 trephine +2 0klgLsSxGsU +2 PAS +2 fou +2 PUBLIC +2 french +2 criture +2 finalement +2 jspa +2 BThe +2 raise +2 Fontes +2 chsh +2 ordinateurs +2 dessus +2 added +2 viens +2 choose +2 larr +2 chang +2 vitesse +2 Everybody +2 Notice +2 var +2 unknown +2 currently +3 films +3 Well +3 written +3 jolie +3 problems +3 Fix +3 fermeture +3 memory +3 saw +3 Synchroniser +3 science +3 grer +3 efficiently +3 mort +3 Non +3 Create +3 protocole +3 blah +3 incroyable +3 THE +3 celle +3 Begin +3 appel +3 commis +3 fameux +3 presentation +3 charger +3 away +3 moire +3 personnel +3 restant +3 killed +3 nommer +3 earlier +3 tels +3 safely +3 stop +3 suffisant +3 chacun +3 team +3 enable +3 marche +3 certains +3 Post +3 clair +3 prepare +3 happy +3 scripts +3 bash +3 dant +3 contains +3 meurtre +3 certaine +3 talking +3 cauchemar +3 force +3 Under +3 nightmare +3 certain +3 toute +3 reading +3 community +3 liorer +3 arrive +3 history +3 meilleure +3 avis +3 quel +3 resolved +3 ries +3 mean +3 Like +3 filme +3 reverted +3 aren +3 pens +3 convaincu +3 met +3 sens +3 slight +3 faites +3 himself +3 talk +3 librairie +3 essentiel +3 depuis +3 ils +3 comprendrez +3 centralisation +3 present +3 cider +3 ClearCase +3 Each +3 preferences +3 doctorat +3 separately +3 ici +3 List +3 choue +3 realized +3 ignorer +3 documentation +3 Movie +3 tutoriel +3 Car +3 nombreuses +3 veloppe +3 porno +3 remain +3 Furthermore +3 advantage +3 dcvs +3 languages +3 entrer +3 impl +3 sentation +3 nouveaux +3 operation +3 cessairement +3 immediately +3 imagine +3 Interface +3 commun +3 bonne +3 lot +3 Workflow +3 ger +3 corresponding +3 appear +3 pragmatic +3 loin +3 Mes +3 tutorial +3 coloration +3 lequel +3 entreprise +3 Make +3 inappropri +3 visage +3 associate +3 conflit +3 ability +3 correspondent +3 develop +3 decide +3 juste +3 worry +3 friendly +3 utility +3 facile +3 jours +3 cet +3 conclusion +3 lead +3 obtain +3 cessaires +3 event +3 Grande +3 she +3 permettent +3 Liste +3 terminologie +3 pouvoir +3 contenant +3 Server +3 looking +3 dirai +3 Framework +3 fini +3 kills +3 Thanks +3 cause +3 She +3 nouvelles +3 abonner +3 writing +3 phone +3 locales +3 compte +3 telle +3 Particularly +3 clefs +3 contacter +3 scientific +3 historic +3 vcs +3 Update +3 sinon +3 origine +3 crit +3 Lorsque +3 rifiez +3 REPOSITORY +3 modernes +3 every +3 vie +3 ensemble +3 rapelle +3 decentralisation +3 pragmatique +3 vivre +3 Elle +3 principale +3 fonctionner +3 Cloned +3 provide +3 chosen +3 ment +3 temporary +3 strange +3 prennent +3 ais +3 did +3 poste +3 makes +3 fully +3 detailed +3 username +3 certainly +3 jamais +3 emp +3 sultat +3 independently +3 prend +3 commencer +3 velopp +3 explanations +3 seem +3 comments +3 hellip +3 mise +3 central +3 rest +3 couvre +3 rather +3 propos +3 disable +3 webdavfs +3 story +3 sufficient +3 seconds +3 poss +3 obtenir +3 veloppeur +3 modifi +3 operations +3 hui +3 proc +3 cot +3 helps +3 start +3 world +3 possibilities +3 clear +3 incoh +3 organiser +3 programmation +3 modifiez +3 devient +3 lors +3 reason +3 inh +3 devrait +3 essayer +3 repr +3 multiple +3 Explorer +3 blacklist +3 lire +3 guy +3 DVD +3 making +3 ind +3 clearly +3 prot +3 integrate +3 libert +3 modifier +3 Repository +3 Soit +3 More +3 normal +3 enfin +3 developed +3 eux +3 focus +3 tations +3 laisse +3 connaissent +3 traduire +3 Worlds +3 wait +3 orie +3 plein +3 Master +3 bookmarks +3 launched +3 ussi +3 essayant +3 future +3 Java +3 belles +4 enseignement +4 aggregator +4 Use +4 fadeIn +4 laquelle +4 Script +4 charge +4 destin +4 given +4 zargs +4 doesn +4 Using +4 occurence +4 localement +4 leftblogimage +4 notre +4 particulier +4 delta +4 devraient +4 Mieux +4 trymkdir +4 frenchspace +4 during +4 Warning +4 fine +4 lister +4 within +4 daemon +4 histoire +4 Label +4 widget +4 meilleur +4 utilisant +4 filename +4 wifi +4 tard +4 message +4 statiques +4 john +4 moz +4 doe +4 rarr +4 serveurs +4 essential +4 Simple +4 SockServiceName +4 objects +4 gif +4 Jusqu +4 Style +4 Pourquoi +4 do_all_merges +4 Listen +4 devil +4 dtd +4 behaviour +4 resume +4 DOCTYPE +4 rez0 +4 somebody +4 researched +4 WTF +4 Hope +4 sychronise +4 vont +4 Concurent +4 bloqu +4 demo +4 threads +4 bottom +4 cloud +4 jasonsweb +4 aidant +4 correspond +4 rules +4 rents +4 versus +4 removeClass +4 Generally +4 shadows +4 where +4 XHTML +4 Sous +4 listening +4 YClock +4 invitation +4 LaunchDaemons +4 getElementsByTagName +4 youtube +4 essaye +4 firefox +4 Welcome +4 Sometimes +4 compatible +4 dois +4 plugin +4 YOUR_DISQUS_ID +4 NOT +4 imagination +4 thread +4 pourrait +4 join +4 XCode +4 olddate +4 filesystem +4 _was_x_ +4 trop +4 Revenir +4 11T14 +4 tagRealSize +4 darkimpact +4 expliquer +4 LostHighway +4 folder2 +4 mentionned +4 exist +4 absolute +4 proposent +4 mots +4 Entries +4 dont +4 11_Load_Disqus_Asynchronously +4 important +4 TOR +4 developer +4 stylesheet +4 adapted +4 manipuler +4 logfull +4 scan +4 sente +4 twitter +4 rsyncPublish +4 append +4 agr +4 explanation +4 versionner +4 Disons +4 come +4 crire +4 tree +4 fastest +4 ainsi +4 bas +4 interface +4 convinced +4 coder +4 YPassword +4 completely +4 keygen +4 peux +4 transform +4 addClass +4 Grep +4 berger +4 Wait +4 80000 +4 x271E +4 lnkto +4 cours +4 pose +4 normalement +4 Dagger +4 values +4 Antipolis +4 Linus +4 utilisez +4 cris +4 webdesign +4 previous +4 Many +4 failed +4 security +4 reach +4 Nanoc +4 opacity +4 difference +4 dite +4 qual +4 Volumes +4 Depending +4 habitu +4 John +4 curis +4 giannii +4 navigateur +4 esac +4 Adventure +4 gitx +4 fetch +4 Sync +4 Cronenberg +4 against +4 those +4 item +4 synchronisant +4 pense +4 trick +4 Library +4 please +4 petite +4 verrez +4 HOME +4 15T11 +4 9000 +4 intern +4 functions +4 passer +4 websites +4 derni +4 Once +4 rule +4 rence +4 mac +4 hope +4 cible +4 protections +4 Utiliser +4 degree +4 Cette +4 Doctorat +4 Expression +4 encapsulate +4 begining +4 jasonweb +4 Ruby +4 trying +4 num +4 erreurs +4 per +4 merging +4 Rabbit +4 Sophia +4 quasiment +4 Analytics +4 yourself +4 safari +4 htm +4 incrementalPublish +4 Sheet +4 Perl +4 03d +4 data +4 image +4 antialias +4 hypoth +4 divergent +4 Regular +4 Lorsqu +4 030000 +4 der +4 Georgia +4 life +4 arrow +4 commentScript +4 algorithm +4 locahost +4 fail +4 aime +4 etc +4 passion +4 jalousie +4 remoteMissingBranches +4 23T10 +4 eee +4 required +4 logo +4 logiciels +4 later +4 window +4 utilis +4 feedback +4 discussions +4 displayed +4 yeux +4 listeFic +4 Directory +4 Versioning +4 asynchrone +4 tries +4 fic +4 pouvons +4 difficile +4 webkit +4 swp +4 face +4 affiche +4 utilit +4 Torvald +4 blue +4 Understanding +4 their +4 peuvent +4 refer +4 firewall +4 term +4 bits +4 profile +4 About +4 visual +4 existing +4 array +4 sauf +4 Soggoth +4 localbranches +4 30_Easy +4 SWAP +4 normalized +4 externe +4 3000 +4 isolated +4 seconde +4 maxSize +4 click +4 onClick +4 afficher +4 matching +4 encoding +4 everywhere +4 multiples +4 Technical +4 cool +4 internal +4 WORK +4 pretty +4 contient +4 module +4 swappe +4 development +4 rapidement +4 renommages +4 downcase +4 sprintf +4 Dagon +4 protection +4 chez +4 tais +4 nicer +4 Cascading +4 axbxc +4 premier +4 avais +4 Forbidden +4 assign +4 less +4 differents +4 translate +4 impossible +4 allow +4 BEchec +4 necessarily +4 Bzr +4 Avant +4 rechercher +4 garder +4 ordinateur +4 Doe +4 tagNumber +4 ubuntu +4 note3 +4 Validation +4 MERGE_HEAD +4 similar +4 structure +4 Yes +4 finish +4 note2 +4 impression +4 rebase +4 scratch +4 appendChild +4 Comme +4 closed +4 research +4 disqus_no_style +4 do_something +4 Provence +4 guide +4 Next +4 VersionHash +4 Begins +4 short +4 LINK +4 France +4 decentralized +4 LOSE +4 tagRefs +4 entry +4 _secure_and_portable_password_management_system +4 Mercurial +4 full +4 _was_y_ +4 donn +4 Andy +4 retransform +4 mnt +4 300 +4 Command +4 upload +4 murder +4 Encapsulate +4 local_directory +5 Universit +5 merger +5 equivalent +5 haut +5 self +5 suivant +5 iWeb +5 train +5 variable +5 tip +5 changed +5 mettre +5 fonctionne +5 little +5 explaining +5 Renee +5 take +5 stay +5 achieve +5 Most +5 able +5 behind +5 tuer +5 accomplish +5 suite +5 Mondes +5 ral +5 Even +5 asynchronously +5 sera +5 locaux +5 understood +5 rel +5 shouldn +5 browser +5 Which +5 indisponible +5 compris +5 modern +5 graph +5 exists +5 total +5 suggest +5 Ces +5 backups +5 hypothesis +5 faster +5 concentration +5 features +5 renaming +5 rendre +5 taill +5 petit +5 seront +5 already +5 beginning +5 accomplir +5 language +5 gitignore +5 souhaite +5 sources +5 adoucies +5 outil +5 look +5 suivre +5 directories +5 learn +5 remplacer +5 explained +5 versionned +5 che +5 least +5 maintenant +5 mysterious +5 big +5 esp +5 followed +5 think +5 cela +5 exactement +5 camera +5 besoin +5 lack +5 donner +5 Better +5 curit +5 choix +5 fact +5 Bon +5 voulez +5 happened +5 quelqu +5 terminology +5 still +5 horrible +5 over +5 utile +5 veux +5 isol +5 con +5 Que +5 soudre +5 leur +5 sub +5 Informatique +5 protagonist +5 rend +5 undo +5 correctement +5 ensuite +5 Before +5 cam +5 World +5 souhaitez +5 uses +5 termin +5 scientifique +5 UNIX +5 occuper +5 Parall +5 decided +6 place +6 ajouter +6 do_merge +6 padding +6 rss +6 watched +6 sometimes +6 localRef +6 great +6 myself +6 action +6 nom +6 watch +6 synchroniser +6 created +6 down +6 betterthangrep +6 untaught +6 versionn +6 Standard +6 flagname +6 wikipedia +6 pourra +6 alt +6 uncommit +6 naturally +6 Web +6 verify +6 wiki +6 Tips +6 framework +6 rec_merge +6 finally +6 BEGIN +6 sandard +6 Beatrice +6 id_rsa +6 jquery +6 Synchronisation +6 gives +6 stoneship +6 allmerges +6 Swap +6 analytics +6 program +6 changes +6 vim +6 matched +6 publish +6 locally +6 todisapear +6 bare +6 0em +6 chomp +6 Failed +6 255 +6 everybody +6 screensaver +6 aliased +6 Site +6 patches +6 sites +6 plupart +6 Syst +6 fadeOut +6 modified +6 bullshit +6 Seul +6 Screensaver +6 hash +6 webroot +6 aider +6 atrice +6 nohup +6 day +6 dit +6 essay +6 dedicated +6 reussi +6 Mysterious +6 exclude +6 crois +6 anything +6 lorsque +6 terminal +6 EVIL +6 has_key +6 versionning +6 8em +6 Configure +6 sudo +6 lang +6 init +6 protected +6 iTunes +6 love +6 Comment +6 links +6 Minimalism +6 allExceptCode +6 locale +6 Esposito +6 custom +6 Safari +6 errors +6 del +6 iphone +6 Indisponible +6 diigo +6 separator +6 9050 +6 tue +6 speak +6 Yann +6 pure +6 Man +6 configure +6 preload +6 FILE +6 fontconfig +6 embed +6 her +6 never +6 envie +6 nombreux +6 surf +6 default +6 naturel +6 remotely +6 fin +6 static +6 pub +6 base +6 letter +6 three +6 previouspost +6 tryrm +6 move +6 maximal +6 body +6 technical +6 puis +6 disparu +6 perdu +6 instead +6 patch +6 certaines +6 may +6 Javascript +6 getAttribute +6 debate +6 Sauf +6 seule +6 Dest +6 him +6 application +6 courante +6 ignore_missing +6 moyen +6 stuff +6 personnal +6 noir +6 another +6 intense +6 humble +6 2008 +6 again +6 voil +6 Benchmark +6 suivi +6 concurrentes +7 cheap +7 Patch +7 question +7 arri +7 commiter +7 https +7 associated +7 Load +7 nouvelle +7 protagoniste +7 programming +7 conflits +7 Bien +7 advantages +7 complete +7 wanted +7 voici +7 With +7 fontes +7 set +7 cas +7 Synchronize +7 home +7 download +7 esprit +7 sert +7 thode +7 aide +7 continue +7 got +7 live +7 minimalisme +7 comprendre +7 Blog +7 facilit +7 resolve +7 personnes +7 correctly +7 Softwares +7 lines +7 seulement +7 close +7 Until +7 forget +7 personnels +7 fonts +7 liste +7 jusqu +7 lost +7 Asynchronously +7 call +7 conflicts +7 trois +7 avantages +7 partir +7 Dans +7 global +7 lignes +7 taient +7 design +7 souvent +7 helped +7 track +7 view +7 historique +7 parce +7 require +7 syntax +7 svn +7 pendant +7 techniques +7 elles +8 desc +8 net +8 Parallel +8 hierarchy +8 perdre +8 presque +8 gestion +8 load +8 femme +8 to_s +8 knowing +8 autoHideMenu +8 anglais +8 mkdir +8 benchmark +8 Alors +8 betterexplained +8 Ensuite +8 tagSelected +8 minSize +8 pointer +8 switched +8 intro +8 get_current_branch +8 rien +8 yes +8 Sites +8 Conclusion +8 mouse +8 Cthulhu +8 CMS +8 mieux +8 contenu +8 Unfortunately +8 hover +8 Mon +8 quoi +8 Yogsototh +8 ont +8 flux +8 StringConstant +8 Microsoft +8 ARGV +8 flag +8 eng +8 reste +8 surtout +8 veut +8 were +8 everything +8 patelt +8 tes +8 accounts +8 common +8 control +8 begin +8 Cloud +8 titi +8 cursor +8 tryrename +8 18em +8 acceptfont +8 toutes +8 needed +8 character +8 mode +8 selectfont +8 n00b +8 Change +8 options +8 opinion +8 believed +8 FIC +8 showMenu +8 too +8 bak +8 remoteRef +8 Tag +8 That +8 prefer +8 hideMenu +8 working +8 Shubniggurath +8 savoir +8 navigation +8 man +8 cmd +8 max +8 protocol +8 finished +8 radius +8 Creation +8 abord +8 differences +8 chose +8 none +8 Science +8 jpg +8 mediacircus +8 disabled +8 HTML +8 creation +8 fixed +8 Google +8 WebSite +8 table +8 celui +8 seems +8 Let +8 Root +8 Qui +8 mdash +8 mem +8 host +8 hostname +8 arv +8 tag_ +8 thing +8 json +8 experimental +9 file1 +9 agit +9 compilation +9 nous +9 certainement +9 informatique +9 donc +9 mail +9 nouveau +9 DRM +9 One +9 ceux +9 state +9 password +9 gitconfig +9 branching +9 doit +9 being +9 anti +9 commands +9 tapes +9 keys +9 useful +9 mobileMe +9 modify +9 file2 +9 link +9 seul +9 validation +9 avant +9 systems +9 reference +9 100 +9 mostly +9 long +9 nbsp +9 Who +9 coh +9 someone +9 does +9 plut +9 pertoires +9 Concurrent +9 res +9 wife +9 Cependant +9 almost +9 aller +9 semble +9 rent +9 Ren +9 From +9 ration +9 exactly +9 isn +9 passe +10 04T19 +10 choosen +10 remotes +10 sleep +10 blogimage +10 avez +10 fix +10 Say +10 encadre +10 mystifi +10 publication +10 vue +10 head +10 mistake +10 webdav +10 donne +10 vision +10 cacher +10 moment +10 demystify +10 trycp +10 Therefore +10 remember +10 apr +10 proxy +10 tails +10 2em +10 rand +10 multiSubTitle +10 update +10 propre +10 extension +10 coherent +10 loading +10 socks +10 Rorschach +10 tag_in_id +10 blackpage +10 src +10 toto +10 heads +10 ation +10 mobileMeUser +10 forums +10 envoyer +10 Voil +10 distant +10 trouve +10 demystified +10 Get +10 evil +10 effet +10 whos +10 known_branches +10 read +10 number +10 TAG +10 clientB +10 Alex +10 projets +10 log +10 5em +10 github +10 UTC +10 status +10 amung +10 Contact +10 rente +10 ligne +10 doing +10 google +10 quelques +10 branch_name +10 foo +10 next +10 idea +10 Une +10 permet +10 suffix +10 synchronize +10 tried +10 David +11 cassettes +11 backup +11 say +11 Avec +11 second +11 Because +11 designed +11 lui +11 course +11 moins +11 encore +11 contain +11 fix2 +11 report +11 fix1 +11 keyword +11 Puis +11 nice +11 projects +11 tation +11 output +11 enough +11 recherche +11 difficulties +11 current +11 others +11 value +11 install +11 Branch +11 Decentralized +11 trouver +11 pass +11 changer +11 pratique +11 cannot +11 few +11 let +12 synchronisation +12 much +12 nil +12 entre +12 length +12 Just +12 WebDav +12 rentes +12 before +12 rename +12 animate +12 success +12 background +12 email +12 remove +12 is_hidden +12 explain +12 news +12 via +12 Versions +12 they +12 keep +12 plist +12 hack +12 ydestRep +12 align +12 even +12 difficult +12 enddiv +12 ack +12 png +12 contre +12 works +12 begindiv +12 ces +12 word +12 feature +12 border +12 conf +12 always +12 12T11 +12 myst +12 note1 +12 CVS +12 conflict +12 unique +12 rieux +12 bad +12 interpr +12 dagger +12 error_number +12 understand +12 x27A8 +12 iPhone +12 clientA +12 refs +12 tant +12 error_message +12 extname +12 sshd +12 srcRep +12 minimalism +12 int +12 rences +12 such +13 autre +13 choses +13 standard +13 voit +13 very +13 goal +13 existe +13 tait +13 after +13 under +13 travailler +13 launch +13 simply +13 After +13 easy +13 handle +13 explication +13 When +13 mot +13 RSS +13 son +13 bazaar +13 into +13 url +13 mal +13 homme +14 awk +14 tab +14 lancer +14 informations +14 utilisation +14 has +14 necessary +14 Dick +14 jour +14 amp +14 apple +14 Laurent +14 500 +14 yogsototh +14 Cheap +14 menuButton +14 yrf +14 because +14 utilisateur +14 1em +14 current_branch +14 Lynch +14 put +14 intensedebate +14 layout +14 Maintenant +14 source +14 toujours +14 mobileme +14 bon +14 facilement +14 bzr +14 tagLinks +14 height +14 Debate +14 min +14 Intense +14 Tout +14 gsub +14 means +14 noSubMenu +14 repertoire +15 option +15 Vous +15 post +15 Internet +15 case +15 return +15 folder +15 subversion +15 articles +15 MVC +15 details +15 would +15 write +15 reality +15 replace +15 until +15 trouv +15 things +15 plusieurs +16 tagSize +16 alias +16 port +16 siteName +16 moi +16 YBlog +16 Par +16 date +16 voir +16 manage +16 443 +16 Ainsi +16 between +16 family +16 img +16 aux +16 type +16 times +16 different +16 commandes +16 dict +16 send +16 follow +16 pattern +16 shell +16 xml +16 Linux +16 SVN +16 elle +16 ext +16 grep +16 tell +16 Zoot +16 revenir +17 most +17 workflow +17 generate +17 premi +17 simplement +17 System +17 ready +17 notion +17 exemple +17 position +17 easily +17 help +17 people +17 soit +17 totally +17 his +17 edit +17 map +17 selected +17 natural +18 centralis +18 video +18 sous +18 partie +18 Echec +18 bug +18 filesToUpdate +18 them +18 could +18 fichier_important +18 computer +18 these +18 made +18 test +18 Firefox +18 Computer +18 configuration +18 give +18 2010 +18 suffit +18 sans +18 probl +19 show +19 pouvez +19 find +19 puts +19 tous +19 must +19 perl +19 ses +19 except +19 filter +19 push +19 beaucoup +19 free +19 alit +19 hard +20 chaque +20 bull +20 ndash +20 What +20 used +20 Snow +20 back +20 dev +20 dire +20 src_branch +20 gmail +20 maxessais +20 php +20 votre +20 suis +20 quand +20 other +20 Les +20 now +20 samelineprint +20 Focus +20 tement +21 bien +21 method +21 interpretation +21 without +21 real +21 cup +21 far +21 include +21 Now +21 here +21 problem +22 pipo +22 cette +22 multi +22 pull +22 Ubuntu +22 path +22 own +22 Leopard +22 tagCloud +22 serveur +22 better +22 iDisk +22 change +22 entete +22 10em +22 reset +23 order +23 alors +23 who +23 Voici +23 There +23 error +23 fois +23 black +23 Built +23 last +23 need +23 All +24 its +24 File +24 Why +24 any +24 comment +24 something +24 Mais +24 Constant +24 swap +24 modification +24 def +24 point +24 rsync +24 renommage +24 pourquoi +24 compl +25 pertoire +25 good +25 scm +25 font +25 Apple +25 commande +25 erb +25 vers +26 vraiment +26 How +26 faut +26 size +26 best +26 env +26 line +26 list +26 config +26 following +26 didn +26 repository +26 copy +26 sup +26 architecture +27 root +27 Disqus +27 two +27 deux +27 filters_pre +27 files +28 regular +28 nanoc +28 center +28 fait +28 text +28 twilight +28 utilise +28 using +28 bin +28 part +29 DCVS +29 bluecloth +29 avoir +29 right +29 really +29 directory +30 remote +30 containing +30 pages +30 hide +30 Mac +30 width +30 main +30 usr +30 content +30 For +30 bit +30 add +30 Then +30 clone +30 top +31 like +31 peut +31 just +31 document +31 same +31 Pour +32 rer +32 index +32 color +32 split +32 usage +32 autres +32 origin +32 HEAD +32 result +32 also +32 there +33 believe +33 projet +33 create +33 new +33 mon +33 You +33 aussi +33 solution +33 utiliser +33 non +33 see +33 disqus +33 revert +33 expression +34 comme +34 sont +34 than +34 temps +35 possible +35 example +36 name +36 fichiers +36 CSS +37 web +37 tout +37 mais +38 Page +38 element +38 client +38 Scratch +38 abbr +39 Highway +39 simple +40 know +40 str +40 movie +40 Lost +40 exit +40 yann +40 esposito +40 tre +41 commit +41 what +41 found +41 page +41 get +41 www +42 had +42 film +42 css +42 auto +42 peu +42 blog +43 command +43 user +43 system +44 diff +44 else +44 server +44 faire +44 javascript +45 website +45 style +45 which +45 don +46 newcorps +46 key +46 try +46 why +46 while +47 first +47 work +47 will +47 when +47 checkout +47 how +48 Fred +48 jQuery +48 ssh +48 margin +49 old +49 ruby +50 more +50 target +51 menu +52 site +52 way +53 left +54 org +54 regexp +54 one +55 are +55 And +55 about +55 time +55 was +55 only +56 make +56 pre +56 many +56 match +56 syst +56 tag +57 Here +58 branche +58 html +58 Bazaar +58 mes +58 href +58 master +60 local +61 small +62 par +62 but +62 your +63 versions +63 true +64 The +64 script +65 project +65 This +65 merge +66 modifications +66 false +67 each +67 multiDescription +68 that +68 want +69 plus +71 should +72 fichier +73 description +74 function +76 from +76 But +77 done +77 have +78 tmp +79 dans +81 avec +82 2009 +83 all +84 isHidden +84 can +84 created_at +86 then +87 version +87 branches +88 string +90 some +91 kind +96 menupriority +97 vous +98 tags +102 strong +102 une +107 end +107 multiTitle +108 qui +111 use +114 Custom +114 sur +117 article +118 destRep +128 with +128 file +131 des +132 span +135 com +136 title +139 this +147 for +157 pas +161 pour +163 essai +166 not +168 branch +176 http +192 print +200 que +210 zsh +215 Git +222 and +235 les +237 you +242 est +390 class +464 git +643 code +680 div +774 the diff --git a/tasks/auto_tags/tf.rb b/tasks/auto_tags/tf.rb new file mode 100755 index 0000000..5cab81e --- /dev/null +++ b/tasks/auto_tags/tf.rb @@ -0,0 +1,72 @@ +#!/usr/bin/env ruby + +def tf(content) + tag=Hash.new + nbwords=0 + content.split(/\b/).each do |m| + if m.length<3 + next + end + if m !~ /\A(\w|\d)*\Z/ + next + end + nbwords += 1 + if tag.has_key?(m) + tag[m]+=1 + else + tag[m]=1 + end + end + nbwords=nbwords.to_f + res=Hash.new + tag.each do |w,v| + if v == 1 + next + end + res[w]=v/nbwords + end + return res +end + +def show_tags(hash) + hash.keys.sort_by do |k| + -hash[k] + end[0..10].each do |k| + puts %{#{hash[k]}: #{k}} + end +end + +freq_for={} +allcontent="" +ARGV.each do |file| + puts '['+file+']' + fic=File.open(file) + content="" + fic.each_line do |l| + content <<= l + end + fic.close + freq_for[file]=tf(content) + # show_tags(freq_for[file]) + # puts '===============' + allcontent <<= content +end + +# puts 'ALL FREQ' +all_freq=tf(allcontent) +# show_tags(all_freq) +# puts '===============' + +res_for={} +freq_for.each do |file,hash| + puts %{==== Frequencie for #{file} =====} + res_for[file]=Hash.new + hash.each do |k,v| + if all_freq[k] == 0 + next + end + res_for[file][k] = v/all_freq[k] + # puts %{#{v} / #{all_freq[k]} : #{k}} + end + show_tags(res_for[file]) +end diff --git a/tasks/autopublish b/tasks/autopublish new file mode 100755 index 0000000..8683a25 --- /dev/null +++ b/tasks/autopublish @@ -0,0 +1,22 @@ +#!/usr/bin/env zsh + +source ~/.zshrc + +publishdir="$HOME/Sites/blog" +publisherhost="YiMac.local" + +if [[ $HOST != "YiMac.local" ]]; then + print -- "You're Not on '$publisherhost' host" + exit 1 +fi +if [[ ! -d $publishdir ]]; then + print -- "Directory '$publishdir' not found" + exit 1 +fi + +# actions are: +# go to the directory containing the webroot project +# pull updates from webroot +# regen all website +# publish to mobile me +cd $publishdir && git pull && touch layouts/default.html && ./tasks/recompile && ./tasks/publish diff --git a/tasks/config b/tasks/config new file mode 100644 index 0000000..a0562a7 --- /dev/null +++ b/tasks/config @@ -0,0 +1,29 @@ +#!/usr/bin/env zsh + +# Configuration +mobileMeUser="yann.esposito" +webroot=$HOME/Sites/blog/output +siteName="Scratch" + +export PATH="$PATH:$HOME/Sites/blog/tasks" + +# Récupération des fichiers +if [[ $(hostname) == 'ubuntu' ]]; then + iDisk='/mnt/iDisk' +else + iDisk="/Volumes/$mobileMeUser" +fi + +srcRep="$webroot/$siteName" +destRep="$iDisk/Web/Sites/$siteName" + +[[ ! -d $webroot ]] && { + print -- "$webroot n'existe pas ; vérifiez la conf" >&2; + exit 1 +} + +[[ ! -d $destRep ]] && { + print -- "$destRep n'existe pas, veuillez remonter le FS" >&2; + exit 1 +} + diff --git a/tasks/create-reference-file.sh b/tasks/create-reference-file.sh new file mode 100755 index 0000000..2317273 --- /dev/null +++ b/tasks/create-reference-file.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env zsh + +source $0:h/config + +if (($#<1)); then + baseRep="$srcRep" +else + baseRep="$1" +fi + +for fic in $baseRep/**/*(.); do + print -n -- "${fic#${baseRep}} " + extension="$fic:e" + if [[ $extension = "html" || $extension = "xml" ]]; then + perl -pe 's%/dev/null 2>&1; then +else + git add . + git commit -m "regeneration" +fi + +# update & push gh-pages +log "Update and push gh-pages" +debug git co gh-pages +(( $? == 0 )) || { exit 1 } +debug git pull +(( $? == 0 )) || { exit 1 } +debug \rm -rf *(N) +(( $? == 0 )) || { exit 1 } +debug git co master output +(( $? == 0 )) || { exit 1 } +debug git unstage output +debug mv output/index.html . +(( $? == 0 )) || { exit 1 } +debug mv output/Scratch/* . +(( $? == 0 )) || { exit 1 } +debug \rm -rf output +(( $? == 0 )) || { exit 1 } +debug cp site/404.html 404.html +(( $? == 0 )) || { exit 1 } +debug echo "yannesposito.com" > CNAME +(( $? == 0 )) || { exit 1 } +debug git add . +(( $? == 0 )) || { exit 1 } +debug git commit -m '"updated website"' +(( $? == 0 )) || { exit 1 } +debug git push origin gh-pages:gh-pages +(( $? == 0 )) || { exit 1 } +debug git co $current_branch diff --git a/tasks/hpublish b/tasks/hpublish new file mode 100755 index 0000000..b26b63e --- /dev/null +++ b/tasks/hpublish @@ -0,0 +1,20 @@ +#!/usr/bin/env zsh + +if [[ $HOST = "YiMac.local" ]]; then + cd $HOME/Sites/webroot + git co master + (( $? == 0 )) || { exit 1 } + git pull + (( $? == 0 )) || { exit 1 } + # empty regen depencies cache because of a bug + # \rm -f ./tmp/* + ./tasks/recompile + if git status | grep 'nothing to commit'>/dev/null 2>&1; then + else + git add . + git commit -m "regeneration" + fi + git push heroku master +else + ssh yimac ./Sites/webroot/tasks/hpublish +fi diff --git a/tasks/incPublish b/tasks/incPublish new file mode 100755 index 0000000..64ae9fe --- /dev/null +++ b/tasks/incPublish @@ -0,0 +1,96 @@ +#!/usr/bin/env zsh + +# Script synchronisant le site sur me.com +# normalement, le site est indisponible le moins de temps possible +# le temps de deux renommages de répertoire + +# configuration +mobileMeUser="yann.esposito" +webroot=$HOME/Sites/webroot/output +siteName="Scratch" + +# Get Environment +if [[ $(hostname) == 'ubuntu' ]]; then + iDisk='/mnt/iDisk' +else + iDisk="/Volumes/$mobileMeUser" +fi + +srcRep="$webroot/$siteName" +destRep="$iDisk/Web/Sites/$siteName" + +# print error and exit +function err { print -P -- "$*" >&2; exit 1 ; } + +[[ ! -d $webroot ]] && err "$webroot n'existe pas ; vérifiez la conf" +[[ ! -d $destRep ]] && err "$destRep n'existe pas, veuillez remonter le FS" + +if [[ $1 == '-h' ]]; then + print -- "usage : $0:h [-h|-a|-s|-t]" + print -- " -h affiche l'aide" + exit 0 +fi + +function trymkdir { + target="$1" + print -- mkdir $target + local essai=1 + if ((!testmode)); then + while mkdir $target; do + print -- "Echec: essai n°$essai" + ((essai++)) + done + fi +} + +function trycp { + element="$1" + target="$2" + if [[ ! -d ${target:h} ]]; then + trymkdir ${target:h} + fi + local essai=1 + print -- cp $element $target + if ((!testmode)); then + while cp $element $target; do + print -- "Echec: essai n°$essai" + ((essai++)) + done + fi +} + +function createReferenceFile { + for element in $srcRep/**/*(.); do + print -n "${element#${srcRep}} " + perl -pe 's% $localRefFile + # -- use the diff between them to update + + # get the list of files to update + set -a filesToUpdate + filesToUpdate=( $( diff -y $localRefFile $remoteRefFile | perl -ne 'if (m/([^ ]*) ([0-9a-f])*[ ]*\|/) { print "$1\n"; }elsif (m/([^ ]*) ([0-9a-f]*)[ ]*\s*([^\s]*) /) { print "$1\n"; }' ) ) + + # get + for fic in $filesToUpdate; do + print trycp $srcRep/$fic $destRep/$fic + done +} + +print -- "Root = $webroot" +print -- "Dest = $destRep" + +incrementalPublish diff --git a/tasks/multi.vim b/tasks/multi.vim new file mode 100644 index 0000000..8f2fb6f --- /dev/null +++ b/tasks/multi.vim @@ -0,0 +1,60 @@ +" clear all preceeding definition +syntax clear +" case sensitive language +syntax case match + +" Begining +syntax region multiInline start=/^..: / end=/$/ contains=ALL oneline + +highlight link multiInline Type + +" To add in your Vimrc +" +" multilanguage folders +autocmd BufEnter *.md setlocal foldmethod=expr +" se lance avec execute FrenchView() +fun! FrenchView() + %g/^en: .*$\n^en: /foldclose + %g/^fr: .*$\n^fr: /foldopen + " setlocal foldexpr=getline(v:lnum)=~'^en:\ '?1:0 +endfun +" se lance avec execute EnglishView() +fun! EnglishView() + %g/^fr: .*$\n^fr: /foldclose + %g/^en: .*$\n^en: /foldopen + " setlocal foldexpr=getline(v:lnum)=~'^fr:\ '?1:0 +endfun + +fun! MyFoldLevel(lnum) + if getline(a:lnum)=~'^fr:\ ' + if getline(a:lnum+1)=~'^fr:\ ' + return '1' + else + return '<1' + endif + else + if getline(a:lnum)=~'^en:\ ' + if getline(a:lnum+1)=~'^en:\ ' + return '1' + else + return '<1' + endif + else + return 0 + endif + endif +endfun + +" se lance avec execute MultiView() +fun! MultiView() + setlocal foldexpr=MyFoldLevel(v:lnum) +endfun +:command FR execute FrenchView() +:command EN execute EnglishView() +:command MM execute MultiView() +autocmd BufEnter *.md execute MultiView() + +autocmd BufEnter latest.md set scrollbind +autocmd BufEnter latest.md execute FrenchView() +autocmd BufEnter latest.md vsplit +autocmd BufEnter latest.md execute EnglishView() diff --git a/tasks/new_blog_entry b/tasks/new_blog_entry new file mode 100755 index 0000000..ae76cca --- /dev/null +++ b/tasks/new_blog_entry @@ -0,0 +1,65 @@ +#!/usr/bin/env zsh + +# print usage if no title is given +if (($#<1)); then + print -- "Create a new blog entry setting default parameters such as the date." + print -P -- "%BUsage:%b\t$0:t post_title" + exit 1 +fi + +cd $0:t/.. +root="$PWD" + +title="$*" + +# basefilename is the filename where all spaces +# were replaced by '-' +# and all accentued letter by corresponding ASCII one +basefilename="$( print $title | perl -pe 'chomp(); s#ç#c#g; s#àâ#a#g; s#éèê#e#g; s#ô#o#g; s#û#u#g; s#\W#-#g')" + +# construct the final filename +yearmonthday=$( date "+%Y-%m-%d" ) +linkname="$root/latest.md" +filename="$root/multi/blog/${yearmonthday}-$basefilename.md" +[[ ! -d ${filename:h} ]] && mkdir -p ${filename:h} +dirname="$root/output/Scratch/img/blog/${yearmonthday}-${basefilename}" + +[[ -e $filename ]] && { + print -P -- "%BAttention%b : $filename existe déjà." + print -P -- "%BError try with a new name%b" + exit 3 +} + +# now title and filename are well defined +print " title = $title" +print "filename = $filename" + +now=$( date "+%Y-%m-%dT%H:%M:%S+02:00" ) + +> $filename cat << ENDFORMAT +----- +isHidden: false +menupriority: 1 +kind: article +created_at: $now +fr: title: $title +en: title: $title +author_name: Yann Esposito +author_uri: yannesposito.com +# tags: +----- +<%= blogimage("main.png","Title image") %> + +begindiv(intro) + +en: <%= tldr %> + +fr: <%= tlal %> + +enddiv +ENDFORMAT + +print "imagedir = $dirname" +mkdir $dirname +ln -sf ./multi/${filename#*/multi/} $linkname +vim $linkname diff --git a/tasks/publish b/tasks/publish new file mode 100755 index 0000000..917eb1d --- /dev/null +++ b/tasks/publish @@ -0,0 +1,128 @@ +#!/usr/bin/env zsh + +# Script synchronisant le site sur me.com +# normalement, le site est indisponible le moins de temps possible +# le temps de deux renommages de répertoire + +# get configuration +# mostly directories +source $0:h/config + +# get trycp function (copy until success) +source $0:h/webdav-framework + +if [[ $1 == '-h' ]]; then + print -- "usage : $0:h [-h|-s|-d]" + print -- " -h affiche l'aide" + print -- " -d modification directe (pas de swap)" + print -- " -s swappe simplement les répertoires" +fi + +# publication incrementale +function incrementalPublish { + local ydestRep=$destRep$suffix + localRef="$srcRep/map.yrf" + print -- "Creation du fichier de references" + create-reference-file.sh > $localRef + remoteRef="/tmp/remoteSiteMapRef.$$.yrf" + if [[ ! -e "$ydestRep/map.yrf" ]]; then + # pas de fichier de reference sur la cible + print -- "pas de fichier de reference sur la cible, passage en mode rsync" + rsyncPublish + swap + else + trycp "$ydestRep/map.yrf" "$remoteRef" + typeset -U filesToUpdate + filesToUpdate=( $(diff $localRef $remoteRef | awk '/^[<>]/ {print $2}' ) ) + if ((${#filesToUpdate} == 1)); then + print -- "Seul le fichier ${filesToUpdate} sera téléversé" + elif ((${#filesToUpdate}<10)); then + print -- "${#filesToUpdate} fichiers seront téléversés :" + print -- "${filesToUpdate}" + else + print -- "${#filesToUpdate} fichiers seront téléversés" + fi + # copy all file with some differences + # except the map in case of error + for element in $filesToUpdate; do + if [[ $element == "/map.yrf" ]]; then + continue + fi + if [[ -e $srcRep$element ]]; then + trycp $srcRep$element $ydestRep$element + else + tryrm $ydestRep$element + fi + done + # if all went fine, copy the map file + trycp $srcRep/map.yrf $ydestRep/map.yrf + # remove the temporary file + \rm $remoteRef + # if we have used the tmp directory we swap + if [[ "$suffix" != "" ]]; then + swap + fi + fi +} + +# publication via rsync +function rsyncPublish { + result=1 + essai=1 + while (( $result > 0 )); do + print -- rsync -arv $srcRep/ $destRep.tmp + if ((!testmode)); then + rsync -arv $srcRep/ $destRep.tmp + fi + result=$? + if (( $result > 0 )); then + print -P -- "%BEchec du rsync%b (essai n°$essai)" >&2 + fi + ((essai++)) + done +} + +# swap +function swap { + print -P -- "%B[Directory Swap (tmp <=> target)]%b" + [[ -e $destRep.old ]] && tryrm $destRep.old + + print -- " renommage du repertoire sandard vers le .old" + tryrename $destRep $destRep.old + + print -- " renommage du repertoire tmp (nouveau) vers le standard" + print -P -- "%B[Site Indisponible]%b $(date)" + tryrename $destRep.tmp $destRep + print -P -- "%B[Site Disponible]%b $(date)" + + print -- " renommage du repertoire old vers le tmp" + tryrename $destRep.old $destRep.tmp + + print -P -- " publication terminée" +} + +print -- "Root = $webroot" +print -- "Dest = $destRep" + +if [[ "$1" = "-s" ]]; then + swap +else + if [[ "$1" = "-a" ]]; then + print -Pn "Copie de l'init " + \cp -f ${webroot:t}/index.html ${destRep:h}/index.html + if [[ $? -eq 0 ]]; then + print -P "[%Bdone%b]" + else + print -P "[%BFailed%b]" + exit 1 + fi + fi + + if [[ "$1" = "-d" ]]; then + suffix="" + else + suffix=".tmp" + fi + print -P -- "%BSync%b[${Root:t} => ${destRep:t}$suffix]" + incrementalPublish +fi diff --git a/tasks/recompile b/tasks/recompile new file mode 100755 index 0000000..3b79dae --- /dev/null +++ b/tasks/recompile @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh + +source ~/.zshrc + +languages=( fr en ) +typeset -a exclu + +function join { + char=$1 + shift + res=$1 + shift + for arg in $@; do + res=$res$char$arg + done + print $res +} + +typeset -a priority_list +for fic in multi/**/*(.); do + for language in $languages; do + dest=content/html/$language/${fic#multi/} + exclu=() + if [[ ! -e $dest || $fic -nt $dest ]]; then + print $dest + [[ ! -d ${dest:h} ]] && mkdir ${dest:h} + for l in $languages; do + case $l in + $language) continue ;; + esac + exclu=( $exclu $l ) + done + awk '! /^('$exclu'): / { sub(/^'$language': /,""); print $0 }' < $fic > $dest + priority_list=( $priority_list ${${dest#content/}:r} ) + fi + done +done + +cmd="nanoc co $priority_list" +print -- '===' +print -- $cmd +eval $cmd diff --git a/tasks/reinitWebsite.sh b/tasks/reinitWebsite.sh new file mode 100755 index 0000000..d4f5236 --- /dev/null +++ b/tasks/reinitWebsite.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env zsh + +for rep in output/Scratch/{en,fr,assets}(/N) output/Scratch/sitemap.xml(.N); do + print -- "Suppression de $rep" + git co $rep +done +print -- "Website reinit from HEAD" diff --git a/tasks/resetWebSite.sh b/tasks/resetWebSite.sh new file mode 100755 index 0000000..8b7d3dc --- /dev/null +++ b/tasks/resetWebSite.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env zsh + +for rep in output/Scratch/{en,fr,assets}(/N); do + print -- "Suppression de $rep" + \rm -rf $rep +done +print -- "Le site est complètement nettoyé" diff --git a/tasks/serve.py b/tasks/serve.py new file mode 100755 index 0000000..bfe9970 --- /dev/null +++ b/tasks/serve.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python +import os # pour le chdir +import SimpleHTTPServer +import SocketServer +# minimal web server. +os.chdir(os.environ['HOME']+'/Sites/webroot/output') +PORT = 8000 +Handler = SimpleHTTPServer.SimpleHTTPRequestHandler +httpd = SocketServer.TCPServer(("", PORT), Handler) +print "serving at port", PORT +httpd.serve_forever() diff --git a/tasks/webdav-framework b/tasks/webdav-framework new file mode 100644 index 0000000..4ec7888 --- /dev/null +++ b/tasks/webdav-framework @@ -0,0 +1,108 @@ +#!/usr/bin/env zsh + +function samelineprint { + print -n -P -- "\r$*" +} + +# avec 1 essai par seconde: 300 = 5 minutes +maxessais=300 + +# try to create a directory until success +function trymkdir { + target="$1" + print -- mkdir -p $target + local essai=1 + while ! mkdir -p $target; do + samelineprint "Echec: essai n°$essai" + ((essai++)) + ((essai>maxessais)) && exit 5 + done + print +} + +# try to copy until success +function trycp { + element="$1" + target="$2" + if [[ ! -d ${target:h} ]]; then + trymkdir ${target:h} + fi + local essai=1 + print -- cp $element $target + while ! \cp $element $target; do + samelineprint "Echec: essai n°$essai" + ((essai++)) + ((essai>maxessais)) && exit 5 + done + print +} + +# try to remove until success +function tryrm { + target="$1" + local essai=1 + local options='' + [[ -d $target ]] && options='-rf' + print -- rm $options $target + while ! rm $options $target; do + samelineprint "Echec: essai n°$essai" + ((essai++)) + ((essai>maxessais)) && exit 5 + done + essai=1 + while [[ -e $element ]]; do + samelineprint "rm reussi mais fichier source non disparu n°$essai" + sleep 1 + ((essai++)) + ((essai>maxessais)) && exit 5 + done + print +} + +# try to rename until success +function tryrename { + element="$1" + target="$2" + local essai=1 + while [[ -e $target ]]; do + samelineprint "Echec n°$essai le fichier $target existe déjà" + ((essai++)) + ((essai>maxessais)) && exit 5 + sleep 1 + done + print -- mv $element $target + while ! mv $element $target; do + samelineprint "Echec: essai n°$essai" + ((essai++)) + ((essai>maxessais)) && exit 4 + done + essai=1 + while [[ -e $element ]]; do + samelineprint "mv reussi mais fichier source non disparu n°$essai" + sleep 1 + ((essai++)) + ((essai>maxessais)) && exit 5 + done + print +} + +# try to move until success +function trymv { + element="$1" + target="$2" + local essai=1 + print -- mv $element $target + while ! mv $element $target; do + samelineprint "Echec: essai n°$essai" + ((essai++)) + ((essai>maxessais)) && exit 5 + done + essai=1 + while [[ -e $element ]]; do + samelineprint "mv reussi mais fichier source non disparu n°$essai" + sleep 1 + ((essai++)) + ((essai>maxessais)) && exit 5 + done + print +}