Commits

Alessio Caiazza committed 076f3da

migrating to o-blog

  • Participants
  • Parent commits d70fe8f

Comments (0)

Files changed (180)

+out/*
 _site/*
 _theme_packages/*
 

File 200px-Org-mode-unicorn.svg.png

Added
New image

File 404.html

-Sorry this page does not exist =(

File README.md

-# Jekyll-Bootstrap
-
-The quickest way to start and publish your Jekyll powered blog. 100% compatible with GitHub pages
-
-## Usage
-
-For all usage and documentation please see: <http://jekyllbootstrap.com>
-
-## Version
-
-0.2.13 - stable and versioned using [semantic versioning](http://semver.org/).
-
-## Contributing 
-
-This repository tracks 2 projects:
-
-- **Jekyll-Bootstrap Framework.**  
-  The framework for which users should clone and build their blog on top of is available in the master branch.
-  
-  To contribute to the framework please make sure to checkout your branch based on `jb-development`!!
-  This is very important as it allows me to accept your pull request without having to publish a public version release.
-  
-  Small, atomic Features, bugs, etc.   
-  Use the `jb-development` branch but note it will likely change fast as pull requests are accepted.   
-  Please rebase as often as possible when working.   
-  Work on small, atomic features/bugs to avoid upstream commits affecting/breaking your development work.
-  
-  For Big Features or major API extensions/edits:   
-  This is the one case where I'll accept pull-requests based off the master branch.
-  This allows you to work in isolation but it means I'll have to manually merge your work into the next public release.
-  Translation : it might take a bit longer so please be patient! (but sincerely thank you).
- 
-- **Jekyll-Bootstrap Documentation Website.**    
-  The documentation website at <http://jekyllbootstrap.com> is maintained in the gh-pages branch.
-  Please fork and contribute documentation additions to this branch only.
-
-The master and gh-pages branch do not share the same ancestry. Please treat them as completely separate git repositories!
-
-
-## License
-
-[Creative Commons](http://creativecommons.org/licenses/by-nc-sa/3.0/)

File Rakefile

-require "rubygems"
-require 'rake'
-require 'yaml'
-require 'time'
-
-SOURCE = "."
-CONFIG = {
-  'version' => "0.2.13",
-  'themes' => File.join(SOURCE, "_includes", "themes"),
-  'layouts' => File.join(SOURCE, "_layouts"),
-  'posts' => File.join(SOURCE, "_posts"),
-  'post_ext' => "md",
-  'theme_package_version' => "0.1.0"
-}
-
-# Path configuration helper
-module JB
-  class Path
-    SOURCE = "."
-    Paths = {
-      :layouts => "_layouts",
-      :themes => "_includes/themes",
-      :theme_assets => "assets/themes",
-      :theme_packages => "_theme_packages",
-      :posts => "_posts"
-    }
-    
-    def self.base
-      SOURCE
-    end
-
-    # build a path relative to configured path settings.
-    def self.build(path, opts = {})
-      opts[:root] ||= SOURCE
-      path = "#{opts[:root]}/#{Paths[path.to_sym]}/#{opts[:node]}".split("/")
-      path.compact!
-      File.__send__ :join, path
-    end
-  
-  end #Path
-end #JB
-
-# Usage: rake post title="A Title" [date="2012-02-09"]
-desc "Begin a new post in #{CONFIG['posts']}"
-task :post do
-  abort("rake aborted: '#{CONFIG['posts']}' directory not found.") unless FileTest.directory?(CONFIG['posts'])
-  title = ENV["title"] || "new-post"
-  slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
-  begin
-    date = (ENV['date'] ? Time.parse(ENV['date']) : Time.now).strftime('%Y-%m-%d')
-  rescue Exception => e
-    puts "Error - date format must be YYYY-MM-DD, please check you typed it correctly!"
-    exit -1
-  end
-  filename = File.join(CONFIG['posts'], "#{date}-#{slug}.#{CONFIG['post_ext']}")
-  if File.exist?(filename)
-    abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
-  end
-  
-  puts "Creating new post: #{filename}"
-  open(filename, 'w') do |post|
-    post.puts "---"
-    post.puts "layout: post"
-    post.puts "title: \"#{title.gsub(/-/,' ')}\""
-    post.puts 'description: ""'
-    post.puts "category: "
-    post.puts "tags: []"
-    post.puts "---"
-    post.puts "{% include JB/setup %}"
-  end
-end # task :post
-
-# Usage: rake page name="about.html"
-# You can also specify a sub-directory path.
-# If you don't specify a file extention we create an index.html at the path specified
-desc "Create a new page."
-task :page do
-  name = ENV["name"] || "new-page.md"
-  filename = File.join(SOURCE, "#{name}")
-  filename = File.join(filename, "index.html") if File.extname(filename) == ""
-  title = File.basename(filename, File.extname(filename)).gsub(/[\W\_]/, " ").gsub(/\b\w/){$&.upcase}
-  if File.exist?(filename)
-    abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
-  end
-  
-  mkdir_p File.dirname(filename)
-  puts "Creating new page: #{filename}"
-  open(filename, 'w') do |post|
-    post.puts "---"
-    post.puts "layout: page"
-    post.puts "title: \"#{title}\""
-    post.puts 'description: ""'
-    post.puts "---"
-    post.puts "{% include JB/setup %}"
-  end
-end # task :page
-
-desc "Launch preview environment"
-task :preview do
-  system "jekyll --auto --server"
-end # task :preview
-
-# Public: Alias - Maintains backwards compatability for theme switching.
-task :switch_theme => "theme:switch"
-
-namespace :theme do
-  
-  # Public: Switch from one theme to another for your blog.
-  #
-  # name - String, Required. name of the theme you want to switch to.
-  #        The the theme must be installed into your JB framework.
-  #
-  # Examples
-  #
-  #   rake theme:switch name="the-program"
-  #
-  # Returns Success/failure messages.
-  desc "Switch between Jekyll-bootstrap themes."
-  task :switch do
-    theme_name = ENV["name"].to_s
-    theme_path = File.join(CONFIG['themes'], theme_name)
-    settings_file = File.join(theme_path, "settings.yml")
-    non_layout_files = ["settings.yml"]
-
-    abort("rake aborted: name cannot be blank") if theme_name.empty?
-    abort("rake aborted: '#{theme_path}' directory not found.") unless FileTest.directory?(theme_path)
-    abort("rake aborted: '#{CONFIG['layouts']}' directory not found.") unless FileTest.directory?(CONFIG['layouts'])
-
-    Dir.glob("#{theme_path}/*") do |filename|
-      next if non_layout_files.include?(File.basename(filename).downcase)
-      puts "Generating '#{theme_name}' layout: #{File.basename(filename)}"
-
-      open(File.join(CONFIG['layouts'], File.basename(filename)), 'w') do |page|
-        if File.basename(filename, ".html").downcase == "default"
-          page.puts "---"
-          page.puts File.read(settings_file) if File.exist?(settings_file)
-          page.puts "---"
-        else
-          page.puts "---"
-          page.puts "layout: default"
-          page.puts "---"
-        end 
-        page.puts "{% include JB/setup %}"
-        page.puts "{% include themes/#{theme_name}/#{File.basename(filename)} %}" 
-      end
-    end
-    
-    puts "=> Theme successfully switched!"
-    puts "=> Reload your web-page to check it out =)"
-  end # task :switch
-  
-  # Public: Install a theme using the theme packager.
-  # Version 0.1.0 simple 1:1 file matching.
-  #
-  # git  - String, Optional path to the git repository of the theme to be installed.
-  # name - String, Optional name of the theme you want to install.
-  #        Passing name requires that the theme package already exist.
-  #
-  # Examples
-  #
-  #   rake theme:install git="https://github.com/jekyllbootstrap/theme-twitter.git"
-  #   rake theme:install name="cool-theme"
-  #
-  # Returns Success/failure messages.
-  desc "Install theme"
-  task :install do
-    if ENV["git"]
-      manifest = theme_from_git_url(ENV["git"])
-      name = manifest["name"]
-    else
-      name = ENV["name"].to_s.downcase
-    end
-
-    packaged_theme_path = JB::Path.build(:theme_packages, :node => name)
-    
-    abort("rake aborted!
-      => ERROR: 'name' cannot be blank") if name.empty?
-    abort("rake aborted! 
-      => ERROR: '#{packaged_theme_path}' directory not found.
-      => Installable themes can be added via git. You can find some here: http://github.com/jekyllbootstrap
-      => To download+install run: `rake theme:install git='[PUBLIC-CLONE-URL]'`
-      => example : rake theme:install git='git@github.com:jekyllbootstrap/theme-the-program.git'
-    ") unless FileTest.directory?(packaged_theme_path)
-    
-    manifest = verify_manifest(packaged_theme_path)
-    
-    # Get relative paths to packaged theme files
-    # Exclude directories as they'll be recursively created. Exclude meta-data files.
-    packaged_theme_files = []
-    FileUtils.cd(packaged_theme_path) {
-      Dir.glob("**/*.*") { |f| 
-        next if ( FileTest.directory?(f) || f =~ /^(manifest|readme|packager)/i )
-        packaged_theme_files << f 
-      }
-    }
-    
-    # Mirror each file into the framework making sure to prompt if already exists.
-    packaged_theme_files.each do |filename|
-      file_install_path = File.join(JB::Path.base, filename)
-      if File.exist? file_install_path
-        next if ask("#{file_install_path} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
-      else
-        mkdir_p File.dirname(file_install_path)
-        cp_r File.join(packaged_theme_path, filename), file_install_path
-      end
-    end
-    
-    puts "=> #{name} theme has been installed!"
-    puts "=> ---"
-    if ask("=> Want to switch themes now?", ['y', 'n']) == 'y'
-      system("rake switch_theme name='#{name}'")
-    end
-  end
-
-  # Public: Package a theme using the theme packager.
-  # The theme must be structured using valid JB API.
-  # In other words packaging is essentially the reverse of installing.
-  #
-  # name - String, Required name of the theme you want to package.
-  #        
-  # Examples
-  #
-  #   rake theme:package name="twitter"
-  #
-  # Returns Success/failure messages.
-  desc "Package theme"
-  task :package do
-    name = ENV["name"].to_s.downcase
-    theme_path = JB::Path.build(:themes, :node => name)
-    asset_path = JB::Path.build(:theme_assets, :node => name)
-
-    abort("rake aborted: name cannot be blank") if name.empty?
-    abort("rake aborted: '#{theme_path}' directory not found.") unless FileTest.directory?(theme_path)
-    abort("rake aborted: '#{asset_path}' directory not found.") unless FileTest.directory?(asset_path)
-    
-    ## Mirror theme's template directory (_includes)
-    packaged_theme_path = JB::Path.build(:themes, :root => JB::Path.build(:theme_packages, :node => name))
-    mkdir_p packaged_theme_path
-    cp_r theme_path, packaged_theme_path
-    
-    ## Mirror theme's asset directory
-    packaged_theme_assets_path = JB::Path.build(:theme_assets, :root => JB::Path.build(:theme_packages, :node => name))
-    mkdir_p packaged_theme_assets_path
-    cp_r asset_path, packaged_theme_assets_path
-
-    ## Log packager version
-    packager = {"packager" => {"version" => CONFIG["theme_package_version"].to_s } }
-    open(JB::Path.build(:theme_packages, :node => "#{name}/packager.yml"), "w") do |page|
-      page.puts packager.to_yaml
-    end
-    
-    puts "=> '#{name}' theme is packaged and available at: #{JB::Path.build(:theme_packages, :node => name)}"
-  end
-  
-end # end namespace :theme
-
-# Internal: Download and process a theme from a git url.
-# Notice we don't know the name of the theme until we look it up in the manifest.
-# So we'll have to change the folder name once we get the name.
-#
-# url - String, Required url to git repository.
-#        
-# Returns theme manifest hash
-def theme_from_git_url(url)
-  tmp_path = JB::Path.build(:theme_packages, :node => "_tmp")
-  abort("rake aborted: system call to git clone failed") if !system("git clone #{url} #{tmp_path}")
-  manifest = verify_manifest(tmp_path)
-  new_path = JB::Path.build(:theme_packages, :node => manifest["name"])
-  if File.exist?(new_path) && ask("=> #{new_path} theme package already exists. Override?", ['y', 'n']) == 'n'
-    remove_dir(tmp_path)
-    abort("rake aborted: '#{manifest["name"]}' already exists as theme package.")
-  end
-
-  remove_dir(new_path) if File.exist?(new_path)
-  mv(tmp_path, new_path)
-  manifest
-end
-
-# Internal: Process theme package manifest file.
-#
-# theme_path - String, Required. File path to theme package.
-#        
-# Returns theme manifest hash
-def verify_manifest(theme_path)
-  manifest_path = File.join(theme_path, "manifest.yml")
-  manifest_file = File.open( manifest_path )
-  abort("rake aborted: repo must contain valid manifest.yml") unless File.exist? manifest_file
-  manifest = YAML.load( manifest_file )
-  manifest_file.close
-  manifest
-end
-
-def ask(message, valid_options)
-  if valid_options
-    answer = get_stdin("#{message} #{valid_options.to_s.gsub(/"/, '').gsub(/, /,'/')} ") while !valid_options.include?(answer)
-  else
-    answer = get_stdin(message)
-  end
-  answer
-end
-
-def get_stdin(message)
-  print message
-  STDIN.gets.chomp
-end
-
-#Load custom rake scripts
-Dir['_rake/*.rake'].each { |r| load r }

File _includes/JB/analytics

-{% if site.safe and site.JB.analytics.provider and page.JB.analytics != false %}
-
-{% case site.JB.analytics.provider %}
-{% when "google" %}
-  {% include JB/analytics-providers/google %}
-{% when "getclicky" %}
-  {% include JB/analytics-providers/getclicky %}
-{% when "mixpanel" %}
-  {% include JB/analytics-providers/mixpanel %}
-{% when "custom" %}
-  {% include custom/analytics %}
-{% endcase %}
-
-{% endif %}

File _includes/JB/analytics-providers/getclicky

-<script type="text/javascript">
-var clicky_site_ids = clicky_site_ids || [];
-clicky_site_ids.push({{ site.JB.analytics.getclicky.site_id }});
-(function() {
-  var s = document.createElement('script');
-  s.type = 'text/javascript';
-  s.async = true;
-  s.src = '//static.getclicky.com/js';
-  ( document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0] ).appendChild( s );
-})();
-</script>
-<noscript><p><img alt="Clicky" width="1" height="1" src="//in.getclicky.com/{{ site.JB.analytics.getclicky.site_id }}ns.gif" /></p></noscript>

File _includes/JB/analytics-providers/google

-<script type="text/javascript">
-  var _gaq = _gaq || [];
-  _gaq.push(['_setAccount', '{{ site.JB.analytics.google.tracking_id }}']);
-  _gaq.push(['_trackPageview']);
-
-  (function() {
-    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
-    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
-    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
-  })();
-</script>

File _includes/JB/analytics-providers/mixpanel

-<script type="text/javascript">
-    var mpq = [];
-    mpq.push(["init", "{{ site.JB.analytics.mixpanel.token}}"]);
-    (function(){var b,a,e,d,c;b=document.createElement("script");b.type="text/javascript";
-    b.async=true;b.src=(document.location.protocol==="https:"?"https:":"http:")+
-    "//api.mixpanel.com/site_media/js/api/mixpanel.js";a=document.getElementsByTagName("script")[0];
-    a.parentNode.insertBefore(b,a);e=function(f){return function(){mpq.push(
-    [f].concat(Array.prototype.slice.call(arguments,0)))}};d=["init","track","track_links",
-    "track_forms","register","register_once","identify","name_tag","set_config"];for(c=0;c<
-    d.length;c++){mpq[d[c]]=e(d[c])}})();
-</script>

File _includes/JB/categories_list

-{% comment %}<!--
-The categories_list include is a listing helper for categories.
-Usage:
-  1) assign the 'categories_list' variable to a valid array of tags.
-  2) include JB/categories_list
-  example:
-    <ul>
-  	  {% assign categories_list = site.categories %}  
-  	  {% include JB/categories_list %}
-  	</ul>
-  
-  Notes: 
-    Categories can be either a Hash of Category objects (hashes) or an Array of category-names (strings).
-    The encapsulating 'if' statement checks whether categories_list is a Hash or Array.
-    site.categories is a Hash while page.categories is an array.
-    
-  This helper can be seen in use at: ../_layouts/default.html
--->{% endcomment %}
-
-{% if site.JB.categories_list.provider == "custom" %}
-  {% include custom/categories_list %}
-{% else %}
-  {% if categories_list.first[0] == null %}
-    {% for category in categories_list %} 
-    	<li><a href="{{ BASE_PATH }}{{ site.JB.categories_path }}#{{ category }}-ref">
-    		{{ category | join: "/" }} <span>{{ site.categories[category].size }}</span>
-    	</a></li>
-    {% endfor %}
-  {% else %}
-    {% for category in categories_list %} 
-    	<li><a href="{{ BASE_PATH }}{{ site.JB.categories_path }}#{{ category[0] }}-ref">
-    		{{ category[0] | join: "/" }} <span>{{ category[1].size }}</span>
-    	</a></li>
-    {% endfor %}
-  {% endif %}
-{% endif %}
-{% assign categories_list = nil %}

File _includes/JB/comments

-{% if site.JB.comments.provider and page.comments != false %}
-
-{% case site.JB.comments.provider %}
-{% when "disqus" %}
-  {% include JB/comments-providers/disqus %}
-{% when "livefyre" %}
-  {% include JB/comments-providers/livefyre %}
-{% when "intensedebate" %}
-  {% include JB/comments-providers/intensedebate %}
-{% when "facebook" %}
-  {% include JB/comments-providers/facebook %}
-{% when "custom" %}
-  {% include custom/comments %}
-{% endcase %}
-
-{% endif %}

File _includes/JB/comments-providers/disqus

-<div id="disqus_thread"></div>
-<script type="text/javascript">
-    {% if site.safe == false %}var disqus_developer = 1;{% endif %}
-    var disqus_shortname = '{{ site.JB.comments.disqus.short_name }}'; // required: replace example with your forum shortname
-    {% if page.wordpress_id %}var disqus_identifier = '{{page.wordpress_id}} {{site.production_url}}/?p={{page.wordpress_id}}';{% endif %}
-    /* * * DON'T EDIT BELOW THIS LINE * * */
-    (function() {
-        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
-        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
-        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
-    })();
-</script>
-<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
-<a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>

File _includes/JB/comments-providers/facebook

-<div id="fb-root"></div>
-<script>(function(d, s, id) {
-  var js, fjs = d.getElementsByTagName(s)[0];
-  if (d.getElementById(id)) return;
-  js = d.createElement(s); js.id = id;
-  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId={{ site.JB.comments.facebook.appid }}";
-  fjs.parentNode.insertBefore(js, fjs);
-}(document, 'script', 'facebook-jssdk'));</script>
-<div class="fb-comments" data-href="{{ site.production_url }}" data-num-posts="{{ site.JB.comments.facebook.num_posts }}" data-width="{{ site.JB.comments.facebook.width }}" data-colorscheme="{{ site.JB.comments.facebook.colorscheme }}"></div>

File _includes/JB/comments-providers/intensedebate

-<script>
-var idcomments_acct = '{{ site.JB.comments.intensedebate.account }}';
-var idcomments_post_id;
-var idcomments_post_url;
-</script>
-<script type="text/javascript" src="http://www.intensedebate.com/js/genericLinkWrapperV2.js"></script>

File _includes/JB/comments-providers/livefyre

-<script type='text/javascript' src='http://zor.livefyre.com/wjs/v1.0/javascripts/livefyre_init.js'></script>
-<script type='text/javascript'>
-    var fyre = LF({
-        site_id: {{ site.JB.comments.livefyre.site_id }}
-    });
-</script>

File _includes/JB/liquid_raw

-{% comment%}<!--
-The liquid_raw helper is a way to display raw liquid code, as opposed to parsing it.
-Normally you'd use Liquid's built in 'raw' tag. 
-The problem is GitHub Jekyll does not support the current Liquid release.
-GitHub Jekyll supports the deprecated 'literal' tag.
-Using one will break the other if you plan to deploy to GitHub pages.
-  see: https://github.com/mojombo/jekyll/issues/425
-
-Since I don't want to mess with Liquid versions, I'll just rewrite the way I 
-intend to give liquid examples. It's not an elegant by any means:
-
-Usage: 
-  1) Define a 'text' variable with the block of liquid code you intend to display.
-  2) Pass the text variable to include JB/liquid_raw
-
-  example:
-  {% capture text %}|.% for tag in tags_list %.|
-    <li><a href="|.{ site.var.tags_path }.||.{ tag[0] }.|-ref">|.{ tag[0] }.| <span>|.{tag[1].size}.|</span></a></li>
-  |.% endfor %.|
-
-  |.% assign tags_list = null %.|{% endcapture %}    
-  {% include JB/liquid_raw %}
-  
-  As seen here, you must use "|." and ".|" as opening and closing brackets.
--->{% endcomment%}
-
-{% if site.JB.liquid_raw.provider == "custom" %}
-  {% include custom/liquid_raw %}
-{% else %}
-  <pre><code>{{text | replace:"|.", "&#123;" | replace:".|", "&#125;" | replace:">", "&gt;" | replace:"<", "&lt;" }}</code></pre>
-{% endif %}
-{% assign text = nil %}

File _includes/JB/pages_list

-{% comment %}<!--
-The pages_list include is a listing helper.
-Usage:
-  1) assign the 'pages_list' variable to a valid array of pages or posts.
-  2) include JB/pages_list
-  example:
-    <ul>
-  	  {% assign pages_list = site.pages %}  
-  	  {% include JB/pages_list %}
-  	</ul>
-  	
-  Grouping: (optional): 
-  	assign the 'group' variable to constrain the list to only pages/posts
-  	in the given group. Note you must define the group manually in the page/post
-  	meta-data to use this feature.
-  	Grouping is mainly helpful for non-post pages.
-  	If you want to group posts, it's easier/better to tag them, then pass the tagged posts array.
-  	i.e. site.tags.cool_tag (this returns an array of posts tagged: cool_tag)
-  	
-  This helper can be seen in use at: ../_layouts/default.html
--->{% endcomment %}
-
-{% if site.JB.pages_list.provider == "custom" %}
-  {% include custom/pages_list %}
-{% else %}
-  {% for node in pages_list %}
-    {% if node.title != null %}
-      {% if group == null or group == node.group %}
-      	{% if page.url == node.url %}
-      	<li class="active"><a href="{{ BASE_PATH }}{{node.url}}" class="active">{{node.title}}</a></li>
-      	{% else %}
-      	<li><a href="{{ BASE_PATH }}{{node.url}}">{{node.title}}</a></li>
-      	{% endif %}
-      {% endif %}
-    {% endif %}
-  {% endfor %}
-{% endif %}
-{% assign pages_list = nil %}
-{% assign group = nil %}

File _includes/JB/posts_collate

-{% comment %}<!--
-Collate_posts helper. Collated posts by year and month.
-Usage:
-  1) assign the 'posts_collate' variable to a valid array of posts.
-  2) include JB/posts_collate
-  example:
-    {% assign posts_collate = site.posts %}
-    {% include JB/posts_collate %}
-
-  Ordering:
-    Posts are displayed in reverse chronological order.
-    For normal chronological order:
-      1) Change the for loop to this:
-        => 'for post in site.posts reversed'
-      2) Next make sure to change 'post.previous.date' to:
-        => 'post.next.date'
-        
--->{% endcomment %}
-
-{% if site.JB.posts_collate.provider == "custom" %}
-  {% include custom/posts_collate %}
-{% else %}
-  {% for post in posts_collate  %}
-    {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
-    {% capture this_month %}{{ post.date | date: "%B" }}{% endcapture %}
-    {% capture next_year %}{{ post.previous.date | date: "%Y" }}{% endcapture %}
-    {% capture next_month %}{{ post.previous.date | date: "%B" }}{% endcapture %}
-  
-    {% if forloop.first %}
-      <h2>{{this_year}}</h2>
-      <h3>{{this_month}}</h3>
-      <ul>
-    {% endif %}
-  
-    <li><span>{{ post.date | date: "%B %e, %Y" }}</span> &raquo; <a href="{{ BASE_PATH }}{{ post.url }}">{{ post.title }}</a></li>
-  
-    {% if forloop.last %}
-      </ul>
-    {% else %}
-      {% if this_year != next_year %}
-        </ul>
-        <h2>{{next_year}}</h2>
-        <h3>{{next_month}}</h3>
-        <ul>
-      {% else %}    
-        {% if this_month != next_month %}
-          </ul>
-          <h3>{{next_month}}</h3>
-          <ul>
-        {% endif %}
-      {% endif %}
-    {% endif %}
-  {% endfor %}
-{% endif %}
-{% assign posts_collate = nil %}

File _includes/JB/setup

-{% capture jbcache %}
-  <!--
-  - Dynamically set liquid variables for working with URLs/paths
-  -->
-  {% if site.JB.setup.provider == "custom" %}
-    {% include custom/setup %}
-  {% else %}
-    {% if site.safe and site.JB.BASE_PATH and site.JB.BASE_PATH != '' %}
-      {% assign BASE_PATH = site.JB.BASE_PATH %}
-      {% assign HOME_PATH = site.JB.BASE_PATH %}
-    {% else %}
-      {% assign BASE_PATH = nil %}
-      {% assign HOME_PATH = "/" %}
-    {% endif %}
-
-    {% if site.JB.ASSET_PATH %}
-      {% assign ASSET_PATH = site.JB.ASSET_PATH %}
-    {% else %}
-      {% capture ASSET_PATH %}{{ BASE_PATH }}/assets/themes/{{ page.theme.name }}{% endcapture %}
-    {% endif %}  
-  {% endif %}
-{% endcapture %}{% assign jbcache = nil %}

File _includes/JB/sharing

-{% if site.safe and site.JB.sharing.provider and page.JB.sharing != false %}
-
-{% case site.JB.sharing.provider %}
-{% when "custom" %}
-  {% include custom/sharing %}
-{% endcase %}
-
-{% endif %}

File _includes/JB/tags_list

-{% comment %}<!--
-The tags_list include is a listing helper for tags.
-Usage:
-  1) assign the 'tags_list' variable to a valid array of tags.
-  2) include JB/tags_list
-  example:
-    <ul>
-  	  {% assign tags_list = site.tags %}  
-  	  {% include JB/tags_list %}
-  	</ul>
-  
-  Notes: 
-    Tags can be either a Hash of tag objects (hashes) or an Array of tag-names (strings).
-    The encapsulating 'if' statement checks whether tags_list is a Hash or Array.
-    site.tags is a Hash while page.tags is an array.
-    
-  This helper can be seen in use at: ../_layouts/default.html
--->{% endcomment %}
-
-{% if site.JB.tags_list.provider == "custom" %}
-  {% include custom/tags_list %}
-{% else %}
-  {% if tags_list.first[0] == null %}
-    {% for tag in tags_list %} 
-    	<li><a href="{{ BASE_PATH }}{{ site.JB.tags_path }}#{{ tag }}-ref">{{ tag }} <span>{{ site.tags[tag].size }}</span></a></li>
-    {% endfor %}
-  {% else %}
-    {% for tag in tags_list %} 
-    	<li><a href="{{ BASE_PATH }}{{ site.JB.tags_path }}#{{ tag[0] }}-ref">{{ tag[0] }} <span>{{ tag[1].size }}</span></a></li>
-    {% endfor %}
-  {% endif %}
-{% endif %}
-{% assign tags_list = nil %}

File _includes/themes/tom/commentable_page.html

-{% include themes/tom/page.html %}
-{% include JB/comments %}

File _includes/themes/tom/default.html

-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
-<head>
-   <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-   <title>{{ page.title }}</title>
-   <meta name="author" content="{{ site.author.name }}" />
-   <link href="http://feeds.feedburner.com/username" rel="alternate" title="your title" type="application/atom+xml" />
-
-   <!-- syntax highlighting CSS -->
-   <link rel="stylesheet" href="{{ ASSET_PATH }}/css/syntax.css" type="text/css" />
-
-   <!-- Homepage CSS -->
-   <link rel="stylesheet" href="{{ ASSET_PATH }}/css/screen.css" type="text/css" media="screen, projection" />
-
-   <!-- Typekit -->
-   <script type="text/javascript" src="http://use.typekit.com/jpd0pfm.js"></script>
-   <script type="text/javascript">try{Typekit.load();}catch(e){}</script>
-</head>
-<body>
-
-  <div class="site">
-    <div class="title">
-      <a href="{{ HOME_PATH }}">{{ site.title }}</a>
-      <a class="extra" href="/archive.html">Archive</a>
-      <a class="extra" href="/pages.html">Pages</a>
-      <a class="extra" href="/categories.html">Categories</a>
-      <a class="extra" href="/tags.html">Tags</a>
-    </div>
-  
-    {{ content }}
-  
-    <div class="footer">
-      <div class="contact">
-        <p>
-          {{ site.author.name }}<br />
-          {{ site.tagline }}<br />
-        </p>
-      </div>
-      <div class="contact">
-          <p>
-            <a id="link_5" href="http://bitbucket.org/nolith" rel="me"><img
-          src="/assets/images/servicesicon/bitbucket.png" alt="Bitbucket"
-          title="Bitbucket"></a> 
-          <a id="link_1" href="http://twitter.com/nolith"
-          rel="me"><img src="/assets/images/servicesicon/twitter.png"
-          alt="Twitter" title="Twitter"></a> 
-          <a id="link_6"
-          href="http://www.linkedin.com/in/nolith" rel="me"><img
-          src="/assets/images/servicesicon/linkedin.png" alt="LinkedIn"
-          title="LinkedIn"></a> 
-          <a id="link_2"
-          href="http://delicious.com/nolith" rel="me"><img
-          src="/assets/images/servicesicon/delicious.png" alt="Delicious"
-          title="Delicious"></a> 
-          <a id="link_9"
-          href="http://disqus.com/people/nolith" rel="me"><img
-          src="/assets/images/servicesicon/disqus.png" alt="Disqus"
-          title="Disqus"></a> 
-          <a id="link_14"
-          href="http://flickr.com/photos/49538678@N00" rel="me"><img
-          src="/assets/images/servicesicon/flickr.png" alt="Flickr"
-          title="Flickr"></a>
-          </p>
-      </div>
-      <div class="rss">
-        <a href="http://feeds.feedburner.com/{{ site.author.feedburner }}">
-          <img src="/images/rss.png" alt="Subscribe to RSS Feed" />
-        </a>
-      </div>
-    </div>
-  </div>
-  <a href="http://bitbucket.org/nolith/abisso.org"><img style="position: absolute; top: 0; right: 0; border: 0;" src="/assets/images/fork_me_bitbucket.png" alt="Fork me on Bitbucket" /></a>
-
-  {% include JB/analytics %}
-</body>
-</html>

File _includes/themes/tom/page.html

-<div id="post">
-{{ content }}
-</div>

File _includes/themes/tom/post.html

-<div id="post">
-  <h1>{{ page.title }}</h1>
-  <p class="meta">
-    {{ page.date | date_to_long_string }} 
-    {% if page.location %}{{ page.location }}{% endif %}
-  </p>
-  {% if page.picture %}
-  <img id="post-logo" src="{{ page.picture }}" />
-  {% endif %}
-  {{ content }}
-</div>
-
-<div id="related">
-  <h2>Related Posts</h2>
-  <ul class="posts">
-    {% for post in site.related_posts limit:3 %}
-      <li><span>{{ post.date | date_to_string }}</span> &raquo; <a href="{{ post.url }}">{{ post.title }}</a></li>
-    {% endfor %}
-  </ul>
-</div>
-
-{% include JB/comments %}

File _includes/themes/tom/settings.yml

-theme :
-  name : tom

File _includes/themes/twitter/default.html

-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>{{ page.title }}</title>
-    {% if page.description %}<meta name="description" content="{{ page.description }}">{% endif %}
-    <meta name="author" content="{{ site.author.name }}">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="{{ ASSET_PATH }}/bootstrap/css/bootstrap.min.css" rel="stylesheet">
-    <link href="{{ ASSET_PATH }}/css/style.css?body=1" rel="stylesheet" type="text/css" media="all">
-
-    <!-- Le fav and touch icons -->
-  <!-- Update these with your own images
-    <link rel="shortcut icon" href="images/favicon.ico">
-    <link rel="apple-touch-icon" href="images/apple-touch-icon.png">
-    <link rel="apple-touch-icon" sizes="72x72" href="images/apple-touch-icon-72x72.png">
-    <link rel="apple-touch-icon" sizes="114x114" href="images/apple-touch-icon-114x114.png">
-  -->
-  </head>
-
-  <body>
-
-    <div class="navbar">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="{{ HOME_PATH }}">{{ site.title }}</a>
-          <ul class="nav">
-            {% assign pages_list = site.pages %}
-            {% assign group = 'navigation' %}
-            {% include JB/pages_list %}
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-
-      <div class="content">
-        {{ content }}
-      </div>
-
-      <footer>
-        <p>&copy; {{ site.author.name }} 2012 
-          with help from <a href="http://jekyllbootstrap.com" target="_blank" title="The Definitive Jekyll Blogging Framework">Jekyll Bootstrap</a>
-          and <a href="http://twitter.github.com/bootstrap/" target="_blank">Twitter Bootstrap</a>
-        </p>
-      </footer>
-
-    </div> <!-- /container -->
-
-    {% include JB/analytics %}
-  </body>
-</html>

File _includes/themes/twitter/page.html

-<div class="page-header">
-  <h1>{{ page.title }} {% if page.tagline %} <small>{{ page.tagline }}</small>{% endif %}</h1>
-</div>
-
-<div class="row">
-  <div class="span12">
-    {{ content }}
-  </div>
-</div>

File _includes/themes/twitter/post.html

-<div class="page-header">
-  <h1>{{ page.title }} <small>Supporting tagline</small></h1>
-</div>
-
-<div class="row">
-  <div class="span8">
-    {{ content }}
-    <hr>
-    <div class="pagination">
-      <ul>
-      {% if page.previous %}
-        <li class="prev"><a href="{{ BASE_PATH }}{{ page.previous.url }}" title="{{ page.previous.title }}">&larr; Previous</a></li>
-      {% else %}
-        <li class="prev disabled"><a>&larr; Previous</a></li>
-      {% endif %}
-        <li><a href="{{ BASE_PATH }}{{ site.JB.archive_path }}">Archive</a></li>
-      {% if page.next %}
-        <li class="next"><a href="{{ BASE_PATH }}{{ page.next.url }}" title="{{ page.next.title }}">Next &rarr;</a></li>
-      {% else %}
-        <li class="next disabled"><a>Next &rarr;</a>
-      {% endif %}
-      </ul>
-    </div>
-    <hr>
-    {% include JB/comments %}
-  </div>
-  
-  <div class="span4">
-    <h4>Published</h4>
-    <div class="date"><span>{{ page.date | date_to_long_string }}</span></div>
-
-  {% unless page.tags == empty %}
-    <h4>Tags</h4>
-    <ul class="tag_box">
-    {% assign tags_list = page.tags %}
-    {% include JB/tags_list %}
-    </ul>
-  {% endunless %}  
-  </div>
-</div>

File _includes/themes/twitter/settings.yml

-theme :
-  name : twitter

File _layouts/commentable_page.html

----
-layout: default
----
-{% include JB/setup %}
-{% include themes/tom/commentable_page.html %}

File _layouts/default.html

----
-theme :
-  name : tom
----
-{% include JB/setup %}
-{% include themes/tom/default.html %}

File _layouts/page.html

----
-layout: default
----
-{% include JB/setup %}
-{% include themes/tom/page.html %}

File _layouts/post.html

----
-layout: default
----
-{% include JB/setup %}
-{% include themes/tom/post.html %}

File _plugins/debug.rb

-# A simple way to inspect liquid template variables.
-# Usage:
-#  Can be used anywhere liquid syntax is parsed (templates, includes, posts/pages)
-#  {{ site | debug }}
-#  {{ site.posts | debug }}
-#
-require 'pp'
-module Jekyll
-  # Need to overwrite the inspect method here because the original
-  # uses < > to encapsulate the psuedo post/page objects in which case
-  # the output is taken for HTML tags and hidden from view.
-  #
-  class Post
-    def inspect
-      "#Jekyll:Post @id=#{self.id.inspect}"
-    end
-  end
-  
-  class Page
-    def inspect
-      "#Jekyll:Page @name=#{self.name.inspect}"
-    end
-  end
-  
-end # Jekyll
-  
-module Jekyll
-  module DebugFilter
-    
-    def debug(obj, stdout=false)
-      puts obj.pretty_inspect if stdout
-      "<pre>#{obj.class}\n#{obj.pretty_inspect}</pre>"
-    end
-
-  end # DebugFilter
-end # Jekyll
-
-Liquid::Template.register_filter(Jekyll::DebugFilter)

File _rake/deploy.rake

-desc "Generate statically the site"
-task :generate do
-  require 'jekyll'
-  opt = Jekyll.configuration({})
-  source = opt['source']
-  destination = opt['destination']
-  site = Jekyll::Site.new(opt.merge({'safe' => 'true'}))
-  puts "Building site: #{source} -> #{destination}"
-  begin
-    site.process
-  rescue Jekyll::FatalException => e
-    puts
-    puts "ERROR: YOUR SITE COULD NOT BE BUILT:"
-    puts "------------------------------------"
-    puts e.message
-    exit(1)
-  end
-  puts "Successfully generated site: #{source} -> #{destination}"
-end
-
-desc "Powerfull deploy script"
-task :deploy => :generate do
-  exec "scp -r _site/* nolith@linusse.org:/var/www/nolith/abisso.org/www/" 
-end
+# mode: org
+
+#-DESCRIPTION: Il sapere umano appartiene al mondo
+#+DATE: 2013-02-08 19:33:26
+
+#+STARTUP: logdone
+
+#+TEMPLATE_DIR: templates
+#+URL: http://abisso.org
+
+#+DEFAULT_CATEGORY: Posts
+#+DISQUS: abisso
+#+FILENAME_SANITIZER: ob-sanitize-string
+#+POST_SORTER: ob-sort-posts-by-title
+
+#+POST_BUILD_SHELL: touch pippo.txt
+
+* Posts
+** DONE [importato] PortableNotary First Release     :PortableNotary:release:
+    CLOSED: [2007-06-13 mer]
+I made the first release of PortableNotary.
+It’s still an alpha application, use at your own risk!
+Soon I’ll write some documentation abount keystore management.
+** DONE [importato] PortableNotary something moves...	     :PortableNotary:
+    CLOSED: [2008-01-23 mer]
+I’ve moved source code from Subversion to Mercurial and I’m working on some improvement.
+
+I’ve found a GUI for keytool [[http://yellowcat1.free.fr/keytool_iui.html][here]]
+** DONE CaptureMJPEG come Applet :applet:CAcert:CaptureMJPEG:linkedin:processing:
+    CLOSED: [2009-05-11 lun]
+Recentemente ho trasferito CaptureMJPEG su [[http://bb.alessiocaiazza.info/capturemjpeg/wiki/Home][BitBucket]] e ho controllato
+che fosse compatibile con [[http://processing.org][Processing 1.0]].
+
+Mi sono accorto del fatto che gli applet che utilizzano CaptureMJPEG
+non funzionano, dovendo instaurare una connessione HTTP e non essendo
+firmata l'applet si ottiene che non è possibile collegarsi alla
+videocamera.
+
+Per risolvere il problema basta firmare l'applet esportata, a questo
+proposito ho contattato il team di supporto di [[http://cacert.org][CAcert]] per farmi
+attivare l'opzione per la firma del codice in modo da poter fare altre
+prove.
+
+_Stay tuned_
+** DONE XX Congresso Nazionale AIP-ITCS :aip:amazon:aws:conferenze:fooldns:itsme:linkedin:
+    CLOSED: [2009-05-11 lun]
+
+Il 9 e 10 maggio, sfruttando l'ospitalità di una amico, sono stato al
+decimo Congresso Nazionale AIP-ITCS dal titolo **Web 3.0 Innovazione e
+Collaborazione**.
+
+L'evento è stato interessante e sfrutto queste quattro righe per
+annotare gli interventi che più hanno colpito il mio interesse.
+
+[[http://www.brunozzi.com/][Simone Brunozzi]], Amazon Web Services
+Evangelist for Europe, ha presentato il _Cloud Computing_ di
+[[http://aws.amazon.com/][Amazon]].
+
+[[http://www.linkedin.com/in/mayhem][Alessio L.R. Pennasilico aka mayhem]], Security Evangelist, con
+il suo intervento _Web 3.0, Identità 2.0, Mercato 0.9 Beta_ ha portato
+una discussione sulla differenza tra le tecnologie, le esigenze degli
+utenti e lo stato del mercato.
+
+[[http://www.linkedin.com/in/yvette][Yvette Agostini]], Renewable
+Energies & Information Security Consultant, ha fatto a mio parere
+l'intervento più bello. Lo si potrebbe riassumere con la frase _WEB
+3.0? Ok, ma ricordiamoci che è solo un nome figo per una rispolverata
+a delle vecchie funzionalità. I vecchi problemi di sicurezza rimangono
+e se ne aggiungono di nuovi_.  Un paper interessante citato da Yvette
+parla di [[http://www.cs.utexas.edu/~shmat/shmat_oak09.pdf][De-Anonimizzazione di Social Network]].
+
+[[http://www.lastknight.com][Matteo G.P. Flora]], Fool s.r.l. CEO, ha
+presentato i vari servizi di
+[[http://fooldns.com][FoolDNS]]. Personalmente uso FoolDNS Community
+edition fin dalla closed beta e devo dire che è tutto un altro
+navigare.
+
+Per finire avrei voluto sentire l'intervento di Giandomenico Sica,
+direttore della comunicazione presso [[http://itsme.it][ITSME]], ma per
+problemi di salute non si è presentato all'evento e quindi dovrò
+aspettare un'altra occasione per avere qualche news su ITSME.
+
+
+
+> Itsme operating system will be based on Linux and provided with a
+new graphical user interface, implementing the metaphor of stories and
+venues, exploiting the services of a specifically designed layer
+organizing information.
+
+The itsme operating system will expand the Linux operating system
+beyond its current horizons. It will consist of two main parts: a
+front-end based on the “stories and venues” metaphor and a back-end,
+situated between a standard Linux operating system and the front-end,
+delivering the services needed for supporting user interaction.
+** DONE Social Links plugin with rel="me", Identi.ca, Bitbucket and Github support :bitbucket:github:identica:xfn:about_me:wordpress_plugin:
+    CLOSED: [2009-05-13 mer]
+UPDATE: I've forked Social Links, please refer to [[/index.php/projects/about-me/][About Me]].
+
+
+Today I made a little patch of [[http://blog.maybe5.com/?page_id=94][Social Links Wordpress Plugin]] in order to add
+[[http://identi.ca][identi.ca]], [Bitbucket](http://bitbucket.org) and
+[Github](http://github.com) support and for adding `rel="me"` tag to
+the generated links (see [[http://gmpg.org/xfn/][XFN]]) for more
+details).
+
+I've uploaded the plugin on [[https://bitbucket.org/nolith/about-me][my bitbucket]], so you can see
+[[https://bitbucket.org/nolith/about-me/diff/?diff2=277ec9c01cd6&diff1=ccf8fe183f72][the diff with Social Links 1.0.11]]. If
+you want to install it, go to the [[https://bitbucket.org/nolith/about-me/downloads/][download page]].
+
+** DONE heroku.com il deploy di applicazioni rack-based è un gioco :aws:deploy:heroku:linkedin:rack:ruby:sinatra:tutorial:webapp:
+    CLOSED: [2009-05-18 lun]
+
+Ieri sera ho scoperto un servizio interessante, si chiama [[http://heroku.com][Heroku]] ed è
+un *hosting di applicazioni basate su [[http://rack.rubyforge.org/][rack]]* come ad esempio *[[http://rubyonrails.org][Ruby on
+Rails]]* o *[[http://www.sinatrarb.com][Sinatra]]*.
+
+Fino a qui nulla di nuovo, ma il loro sistema si basa sulla
+*semplicità della procedura di deploy* che come ben sa chi ci ha
+provato, non è proprio al livello di una applicazione php.
+
+Per provare un po' questo sistema ho deciso di creare una mini
+applicazione con sinatra che esegue l'hash MD5 di alcune stringhe.
+Vediamo come funziona.
+
+*** Prerequisiti
+
+
+È necessario installare la gemma heroku; per l'applicazione
+dell'esempio serviranno anche le gemme sinatra e thin.
+
+
+
+    
+#+BEGIN_SRC sh
+$ sudo gem install heroku
+$ sudo gem install sintra 
+$ sudo gem install thin
+#+END_SRC 
+
+
+
+
+Per il deploy serve [[http://git-scm.com/][git]].
+
+
+Fatto questo è necessario registrare un account su [[http://heroku.com][Heroku]].
+
+
+*** L'applicazione
+
+Creiamo il file #hasher.rb# dentro la cartella #hasher#.
+
+
+    
+#+BEGIN_SRC ruby 
+require 'rubygems'
+require 'sinatra'
+require 'digest/md5'
+
+get '/' do
+  erb :home
+end
+
+post '/md5' do
+  unless params[:str].nil?
+    "<code>MD5(#{params[:str]}) -> #{Digest::MD5.hexdigest(params[:str])}</code>"
+  else
+    redirect '/'
+  end
+end
+
+# Accettiamo solo richieste in POST
+get '/md5' do
+  redirect '/'
+end
+
+use_in_file_templates!
+
+__END__
+
+@@ home
+
+<p>
+Questa è una semplice webapp (esagerato!) per spiegare come funziona 
+<a href="http://heroku.com">Heroku</a>.<br></br>
+Puoi trovare l'articolo relativo nel mio 
+<a href="http://bit.ly/nkw0V" rel="me">blog</a>.
+</p>
+
+<form action="/md5" accept-charset="utf-8" method="post">
+  <input type="text" name="str" value="Write here..." id="str"></input>
+  <input type="submit"></input>
+</form>
+#+END_SRC
+    
+    
+Per il deploy con rack è necessario creare anche il file #config.ru#
+
+
+    
+#+BEGIN_SRC ruby
+#rack config file
+require 'hasher'
+run Sinatra::Application
+#+END_SRC 
+
+*** Il deploy
+Ora giunge il momento di mandare online la nostra applicazione
+
+
+    
+#+BEGIN_SRC sh    
+#creiamo il repository git nella cartella corrente
+$ git init
+Initialized empty Git repository in /Users/nolith/Documents/Projects/hasher/.git/
+
+#aggiungiamo tutti i file nella cartella al controllo di versione
+$ git add .
+
+#eseguiamo il commit dei file
+$ git commit -m 'Import iniziale: hash md5'
+[master (root-commit)]: created 21b62e4: "Import iniziale: hash md5"
+ 2 files changed, 41 insertions(+), 0 deletions(-)
+ create mode 100644 config.ru
+ create mode 100644 hasher.rb
+
+#creiamo una nuova applicazione su heroku
+# sarà possibile rinominarla in seguito
+$ heroku create
+Enter your Heroku credentials.
+Email: utente@server.it
+Password:
+Uploading ssh public key
+Created http://growing-summer-43.heroku.com/ | git@heroku.com:growing-summer-43.git
+Git remote heroku added
+
+#eseguiamo l'upload dell'applicazione
+$ git push heroku master
+Warning: Permanently added the RSA host key for IP address '75.101.145.87' to the list of known hosts.
+Counting objects: 4, done.
+Compressing objects: 100% (4/4), done.
+Writing objects: 100% (4/4), 784 bytes, done.
+Total 4 (delta 0), reused 0 (delta 0)
+
+-----> Heroku receiving push
+-----> Rack app detected
+       Compiled slug size is 004K
+-----> Launching..... done
+       App deployed to Heroku
+
+To git@heroku.com:growing-summer-43.git
+ * [new branch]      master -> master
+
+#Proviamo la nostra applicazione
+$ heroku open
+#+END_SRC    
+
+**** Alcune note
+
+
+
+La prima volta che si utilizza un comando di heroku vengono richieste
+le credenziali di accesso e viene fatto l'upload di una chiave
+pubblica ssh ([[http://linubuntu.blogspot.com/2007/02/ssh-autenticazione-tramite-chiave.html][Come creare una coppia di chiavi per ssh]]).
+
+*Finito! Siamo online!*
+
+*** Conclusioni
+
+
+Quanto mostrato si può fare anche per una applicazione Rails, in
+questo caso non servirà il file ~config.ru~.  
+
+Attualmente il deploy di
+una applicazione basata su rack non è dei più semplici, anche se devo
+dire che [[http://modrails.org][mod\_rails]] ha notevolmente migliorato le cose.  Dobbiamo però
+considerare anche il fattore economico, per piccole applicazioni di
+test heroku è gratuito, per applicazoni che necessitano di risorse
+consistenti direi che la scelta di basarsi su [[http://aws.amazon.com][AWS]] è un vantaggio non
+da poco, i benefici offerti dalla struttura di Amazon sono impossibili
+da ottenere ad un costo contenuto per uno sviluppatore indipendete o
+una PMI.
+
+** DONE About Me sul codex di wordpress :about_me:linkedin:projects:wordpress_codex:wordpress_plugin:
+    CLOSED: [2009-05-20 mer]
+Oggi hanno accettato *About Me* sul [[http://codex.wordpress.org][codex di wordpress]].
+
+Questa è la [[http://wordpress.org/extend/plugins/about-me][pagina ufficiale di About Me]] sul codex.
+
+Il sistema di deploy basato su svn è molto comodo, ma usando mercurial per lo sviluppo devo fare qualche passaggio in più.
+** DONE New GPG key			    :gpg:linkedin:nolith:openpgp:pgp:
+    CLOSED: [2009-05-31 dom]
+
+Today I changed my gpg key, [[http://alessiocaiazza.info/key-transition-2009-05-31.txt][here]] you can find a declaration and [[http://alessiocaiazza.info/nolith.gpg][here the new key]].
+
+#+BEGIN_SRC
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA512,SHA1
+
+Sun, 31 May 2009 
+
+For a number of reasons, i've recently set up a new OpenPGP key, and
+will be transitioning away from my old one.
+
+The old key will continue to be valid for some time, but i prefer all
+future correspondence to come to the new one.  I would also like this
+new key to be re-integrated into the web of trust.  This message is
+signed by both keys to certify the transition.
+
+the old key was:
+
+pub   1024D/9F04ED5E 2004-01-15 [expires: 2010-02-21]
+      Key fingerprint = B79A 36D6 A269 F302 3D49 8678 34F2 527D 9F04 ED5E
+
+And the new key is:
+
+pub   4096R/440C5437 2009-05-31
+      Key fingerprint = 87C3 BF5F 034A 6801 338A 7963 4C1E 7C65 440C 5437
+
+To fetch the full key (including a photo uid, which is commonly
+stripped by public keyservers), you can get it with:
+
+  wget -q -O- http://alessiocaiazza.info/nolith.gpg | gpg --import -
+
+Or, to fetch my new key from a public key server, you can simply do:
+
+  gpg --keyserver http-keys.gnupg.net --recv-key 440C5437
+
+If you already know my old key, you can now verify that the new key is
+signed by the old one:
+
+  gpg --check-sigs 440C5437
+
+If you don't already know my old key, or you just want to be double
+extra paranoid, you can check the fingerprint against the one above:
+
+  gpg --fingerprint 440C5437
+
+If you are satisfied that you've got the right key, and the UIDs match
+what you expect, I'd appreciate it if you would sign my key:
+
+  gpg --sign-key 440C5437
+
+Lastly, if you could upload these signatures, i would appreciate it.
+You can either send me an e-mail with the new signatures (if you have
+a functional MTA on your system):
+
+  gpg --armor --export 440C5437 | mail -s 'OpenPGP Signatures' nolith@abisso.org
+
+Or you can just upload the signatures to a public keyserver directly:
+
+  gpg --keyserver http-keys.gnupg.net --send-key 440C5437
+
+Please let me know if there is any trouble, and sorry for the
+inconvenience.
+
+Regards,
+
+	--nolith
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+iQIcBAEBCgAGBQJKIrouAAoJEEwefGVEDFQ3G0kP/2VVV6nOZyGq37S3vYtd7Aiy
+koYGhYmZiKycA56PM+EDW46iGGRGFS1eBRn+aB0yDKIxi4r0NJ4g+j8K1ADfULNk
+LG1W8eH0KVPtxR8PzW2wkSfMmwz0P4dR/ZGvtCLKvUBNeZvc72PH7O3IcoAlbK9T
+scTPGkIvDJPfdYBPSJp7yUdPPFOzUKzGWehin8Jep+78QFWH5+9aAkRzlxJaC/OY
+Q9E/3Oz9fB/xuwtWqRnYHv9zadGpPFqorskhkqilBidsmBaGm+kxg7Y9TRGPw3Jd
+zLk+Cg3UFO1+qPTSS70axJ74AAwwiBvh5jX699mbXNabhTCU/cKi9Q3GdJayYP5b
+9/TneMXfNpsjYaETGQ+ue1MsZW0UX9fFQ5t8ZxGFWA7sIQ2+wsuZlW1v+vWWdeFn
+WMW8/tpuDNZ3/1ggmqkZZvXfNxpO8rfUhhpc1uUvwLSRp+Ao0owHDVeOLXVu2tvq
+6oAdfT92fveA38xbBgej0PctWOcEe6cRST9fhilXGR/vnqa/WECmw6+kiY52DyLR
+8yIY/YJL0YLKVxYwSwuEbMDYat0xkimugSEPWDiTwxMmf0lUxeN/d2ko5NdAyTku
+uEW5TE1HSBqpexBqaQ1wRctYc0v3s9Nf2AVIITf76YDyNjTSFlPZuryNIKLHsD6Y
+IaschVs1gJnzPSzTA1VviEYEARECAAYFAkoiui4ACgkQNPJSfZ8E7V5KSwCfcnYw
+AEey1qw63XrFQ8aNbTFqQJUAniK6mB/r5zvPBJw0doUinBYQZsTf
+=2/N1
+-----END PGP SIGNATURE-----
+#+END_SRC
+
+** DONE Firmare gli archivi jar :CAcert:CaptureMJPEG:jarsignes:java:linkedin:processing:
+    CLOSED: [2009-06-02 mar]
+Un po' di tempo fa mi ero imbattuto nel problema di utilizzare online
+un'applet generata con [[http://processing.org][Processing]] che utilizzasse [[http://capturemjpeg.lilik.it][CaptureMJPEG]].
+
+Ero giunto alla conclusione che fosse necessario firmare l'applet e
+qualche giorno dopo mi sono procurato tramite
+[[http://cacert.org][CAcert]] una chiava utilizzabile per la firma del
+codice.
+
+Quello che segue è un rapido riepilogo dei passi necessari per la firma dei jar.
+
+
+*** Individuazione della chiave
+
+#+BEGIN_SRC
+    kaiman:applet nolith$ keytool -list -storetype pkcs12 \
+    -keystore keystore.p12
+    Immettere la password del keystore:  **********************
+    
+    Tipo keystore: pkcs12
+    Provider keystore: SunJSSE
+    
+    Il keystore contiene 1 entry
+    
+    id di alessio caiazza a root ca, 2-giu-2009, keyEntry,
+    Impronta digitale certificato (MD5): 81:57:63:80:D9:71:61:CD:6D:1E:CA:1D:28:0C:19:F8
+#+END_SRC    
+
+
+
+
+*** Firma
+    
+#+BEGIN_SRC    
+    kaiman:applet nolith$ jarsigner -storetype pkcs12 \
+    -keystore keystore.p12 micc_histo.jar \
+    "id di alessio caiazza a root ca"
+    Enter Passphrase for keystore: ****************************
+    
+#+END_SRC
+
+
+Per quanto riguarda gli applet esportati con Processing è necessario
+firmare il proprio jar e core.jar (i jar di CaptureMJPEG sono forniti
+già firmati dalla versione 1.0.1)
+
+** DONE [redirector] Sinatra + Heroku => Micro-applicazioni di cui non preoccuparsi :github:heroku:linkeding:ruby:sinatra:
+    CLOSED: [2009-06-03 mer]
+Oggi mi son imbattuto in un problema che ho risolto grazie a sinatra
+ed heroku.
+
+Nei giorni scorsi avevo deciso di usare il domino
+_bb.alessiocaiazza.info_ come mia pagina personale su
+[[http://bitbucket.org][bitbucket]], solo che poi ho comprato il dominio
+_l0g.in_ e avrei preferito usare [[http://code.l0g.in][code.l0g.in]].
+
+Fin qui nulla di male, ma come fare con tutti i link che avevo
+disseminato in giro per il web? Avrebbero puntato ad una pagina di
+errore? No!
+
+Mi è venuto in mente che con sinatra è possibile catturare le url con
+delle regexp...quindi...
+
+#+BEGIN_SRC ruby     
+#
+# redirector
+#
+# (c) 2009 - Alessio Caiazza 
+    
+require 'rubygems'
+require 'sinatra'
+    
+REDIRECT_TO='http://l0g.in'
+    
+get '/' do
+    redirect REDIRECT_TO
+end
+    
+get '/*' do
+    redirect "#{REDIRECT_TO}/#{params[:splat][0]}"
+end
+#+END_SRC
+
+e poi deploy su heroku e custom domain service ..... *fatto!*
+
+Ho colto l'occasione per provare [[http://hg-git.github.com/][hg-git]], quindi ho pubblicato tutto su [[http://github.com/nolith/redirector/][github]].
+** DONE Dr. Nolith					    :ipv6:networking:
+    CLOSED: [2009-10-29 gio]
+Non vi preoccupate, sono vivo :)
+
+Ultimamente sono stato poco presente perché stavo portando avanti il
+mio lavoro di tesi. Adesso che ho finito cercherò di essere più
+presente e di continuare a portare avanti
+[about-me](/projects/about-me).
+
+Per il momento segnalo che sto preparando una [[http://code.l0g.in/intro_ipv6][lezione introduttiva su IPv6]] che si terrà durante il corso di
+"Gestione e Sicurezza di Reti di Telecomunicazioni" dell'Università di Firenze.
+** DONE Il mio disco fa BIP! Seagate ST9500420ASG 7200 rpm :apple:bip:clicking:freeze:hard_disk:noise:OSX:seagate:ST9500420ASG:sudden_motion_sensor:
+    CLOSED: [2010-01-29 ven]
+Capita a tutti di fare l'acquisto sbagliato. Ma un hard disk che fa BIP (o click) mette sempre un po' di terrore.
+
+Stiamo parlando del **favoloso** HD seagate ST9500420ASG da 7200 RPM.
+
+Si tratta in effetti di un disco _nato male_. Leggendo in giro si scopre che tutti i produttori di PC che li hanno equipaggiati sui loro computer hanno avuto gli stessi problemi (Apple, HP, DELL).
+
+Vediamo come risolverli!
+
+Prima di tutto bisogna dire che se avete acquistato un PC con dentro questo disco è già uscito il firmware updater e dovete cercarlo sul sito del produttore, ma se come me vi siete fatti male da soli, scegliendo di comprarlo direttamente dalla seagate...beh avete bisogno di questa guida.
+
+Nota: **Non mi ritengo responsabile di eventuali danni al vostro disco o pc, per me ha funzionato, ma seguite la procedura a vostro rischio e pericolo.**
+
+
+## Il problema
+
+
+Adesso possiamo individuare il problema, se il vostro disco ogni tanto fa il rumorino che si sente nel video allora state leggendo il post giusto.
+
+
+
+
+
+
+Sembra che il problema sia dovuto ad una politica di risparmio energetico troppo aggressiva del firmware originale. (versione 0002SDM1)
+
+
+
+
+Come dicevo le case costruttrici di PC sono state chiamate ad aggiornare i loro FW, ma la seagate non si degna di rilasciare un aggiornamento per chi il disco lo ha comprato da solo. Fortunatamente per noi il FW rilasciato da DELL (versione 0005SDM1) è compatibile anche con il nostro disco, ed il controllo sul seriale, che impedisce ad un disco non DELL di essere aggiornato, è facilmente aggirabile.
+
+
+
+
+
+### Apple e Sudden Motion Sensor
+
+
+
+
+Prima di procedere oltre devo fare una piccola digressione per i possessori di un MAC, questo HD incorpora un sensore di movimento che protegge il disco in caso di movimenti bruschi, sfortunatamente i macbook hanno un loro sensore (SMS) sulla scheda madre che fa lo stesso identico lavoro; questo porta a una situazione di conflitto in cui oltre ad avere il BIP si hanno dei momenti di blocco del disco il cui il sistema operativo va in freeze per 1-2 secondi e poi si sente il disco ripartire, per risolvere questo problema bisogna disabilitare il sensore SMS.
+
+
+
+
+Con Snow Leoprad (10.6) aprire il terminale ed eseguire i seguenti comandi:
+
+
+
+    
+    
+    sudo pmset -a sms 0
+    # ti verrà chiesta la password
+    sudo pmset -g
+    
+
+
+
+Se tutto è andato a buon fine avremo una risposta del genere:
+
+    
+    Active Profiles:
+    Battery Power		-1
+    AC Power		-1*
+    Currently in use:
+     hibernatemode	3
+     halfdim	1
+     lidwake	1
+     acwake		0
+     womp		1
+     sleep		10
+     disksleep	10
+     sms		0
+     hibernatefile	/var/vm/sleepimage
+     ttyskeepawake	1
+     displaysleep	10
+
+
+Controllare che il valore di sms sia 0. Adesso il sensore è disabilitato. Per altre versione di OS X fare riferimento al link in fondo al post.
+
+
+## Aggiornamento del Firmware
+
+
+
+
+Dopo aver verificato di avere effettivamente un disco seagate ST9500420ASG con versione FW 0002SDM1 scarichiamo il SW per l'aggiornamento del firmware dal sito della [DELL](http://support.us.dell.com/support/downloads/download.aspx?c=us&cs=19&l=en&s=dhs&releaseid=R250352&formatcnt=1&libid=0&typeid=-1&dateid=-1&formatid=-1&fileid=366465). Una volta installato troveremo il file _Seagate Utility.iso_ nella cartella _C:\dell\drivers\R250352_. Non dobbiamo fare altro che masterizzarlo su un CD ed riavviare il PC dal lettore di CD. ( Nel caso abbiate un MAC basta riavviare tenendo premuto il tasto alt, vi apparirà una schermata con il vostro disco e un CD con sotto una freccetta, fare click sulla freccetta sotto al dispositivo da cui volete fare il boot. Purtroppo non sono sicuro se serva o meno BootCamp per questo passaggio )
+
+
+
+
+Adesso il vostro PC si avvierà in DOS e proverà ad aggiornare il FW fallendo per via del seriale.
+
+
+
+
+A questo punto vi troverete davanti un prompt del DOS e dovete digitare il seguente comando:
+
+
+
+
+    
+    FHDL -m HOLLIDAY -f 0005SDM1.LOD -i ST9500420ASG -b -v
+
+
+Una volta terminato l'aggiornamento potete riavviare il PC e dire addio al fastidioso clicking.
+
+
+## Link
+
+
+
+
+[Discussione sul forum seagate](http://forums.seagate.com/stx/board/message?board.id=ata_drives&thread.id=16853&view=by_date_ascending&page=1) (inglese)
+
+
+
+
+[FW DELL](http://support.us.dell.com/support/downloads/download.aspx?c=us&cs=19&l=en&s=dhs&releaseid=R250352&formatcnt=1&libid=0&typeid=-1&dateid=-1&formatid=-1&fileid=366465) (inglese)
+
+
+
+
+[Apple disabilitare il sensore di movimento](http://support.apple.com/kb/HT1934) (inglese)
+ 
+** DONE YubiRuby - Yubikey with Ruby	   :rails:ruby:wishes:yubico:yubikey:
+    CLOSED: [2010-02-14 dom]
+Some days ago, willing to learn how to extends ruby with C code, I wrote a wrapper for [yubico-c](http://code.google.com/p/yubico-c/) library.
+
+You can find the sourcecode of my work on [bitbucket](http://bitbucket.org/nolith/yubiruby/) and some installation instruction on [the gemmcutter page](http://gemcutter.org/gems/YubiRuby).
+
+
+
+[![](http://forum.yubico.com/includes/affiliate/images/yubico.jpg)](http://www.yubico.com/o.php?refid=162&rno=1906861421)After installing the gem with
+$ gem install YubiRuby
+you can try it with the following code
+
+
+{% highlight ruby %} 
+require 'rubygems'
+require 'YubiRuby'
+
+key = "6df89690b5f51bd9ac912c5004781e86" #use your AES key
+y = YubiRuby::Yubikey.new(key);
+puts y.key
+otp = gets().strip
+puts y.parse(otp)
+puts "Ouput: #{y}"
+puts "uid: #{y.uid}"
+puts "counter: #{y.counter}"
+puts "capslock: #{y.triggered_by_capslock?}"
+puts "timestamp low/high: #{y.timestamp_low}/#{y.timestamp_high}"
+puts "session: #{y.session}"
+puts "random: #{y.random}"
+puts "crc: #{y.crc}"
+puts "crc residue: #{y.crc_residue}"
+puts "crc residue ok?: #{y.crc?} (#{y.crc_residue} == #{YubiRuby::Yubikey::CRC_OK_RESIDUE})"
+{% endhighlight %}
+
+
+
+I hope to find the time for writing an [authlogic ](http://github.com/binarylogic/authlogic)extension in order to use a yubikey with rails application.
+
+** DONE Mercurial e Redmine: aggiornamento automatico dello stato dei BUG :bug_tracker:mercuria:mercurial_hooks:rails:redmine:
+    CLOSED: [2010-02-22 lun]
+Da qualche giorno sto usando [redmine](http://www.redmine.org) per la gestione dei miei repository [mercurial](http://mercurial.selenic.com).
+
+Una cosa che trovo molto utile è cambiare lo stato dei BUG riportati nel tracker direttamente con il messaggio di commit.
+
+C'è un problema, di default il tracker di redmine non si aggiorna finché qualcuno non visita la pagina del repository...vediamo come risolvere il problema.
+
+Mercurial ci mette a disposizione degli [hook](http://mercurial.selenic.com/wiki/Hook) per eseguire alcuni script in corrispondenza di determinati eventi; possiamo sfruttare l'hook changegroup per aggiornare redmine.
+
+Colleghiamoci in ssh al server su cui si trovano redmine e modifichiamo il file .hg/hgrc del nostro repository.
+
+    
+    
+    # output of /path/to/hg/repos/.hg/hgrc
+    # Mercurial - Redmine issue updater hook
+    # please update /path/to/redmine with your redmine path
+    [hooks]
+    changegroup.redmine = cd /path/to/redmine && ruby script/runner "Repository.fetch_changesets" -e production
+    
+
+
+
+A questo punto non ci resta che eseguire un commit ed un push di prova.
+
+** DONE La notte blu della ricerca	       :ipv6:netteblu10:ricerca:talk:
+    CLOSED: [2010-05-02 dom]
+Sabato 8 e domenica 9 maggio 2010 a Firenze si terrà "La notte blu della ricerca".
+
+Si tratta di un evento organizzato in seno a [La Notte Blu](http://www.notteblu.eu), un'occasione per festeggiare i 27 paesi dell'Unione Europea.
+
+Nell'ambito della categoria _le ore della scienza _troviamo [la notte blu della ricerca](http://nottebludellaricerca.tk/), una non-stop di 27 ore (il numero dei paesi dell'Unione Europea) sulla ricerca a Firenze, in Italia ed in Europa.
+
+Domenica 9 alle ore 14, grazie all'invito di [Tommaso Pecorella](http://lart.det.unifi.it/node/100), terrò assieme a lui un talk su IPv6 e la fine del mondo nel 2012. Il talk cerca un'ironica linea di congiunzione fra le profezie maya ed i calcoli di [Geoff Huston](http://ipv4.potaroo.net) sulla fine degli indirizzi IPv4. Cercheremo di non andare troppo sul tecnico, mantenendo la discussione più sul management e scendendo nei dettagli di IPv6 solo dove necessario.
+
+Per i più impavidi si terrà il concorso [eroe della ricerca](http://sites.google.com/site/nottebludellaricerca/programma/notteblu.pdf?attredirects=0&d=1) che consiste nella raccolta delle firme di tutti i relatori delle 27 ore di conferenza...**buona fortuna!**
+
+** DONE Bundler with Mercurial support 		     :bundler:mercurial:ruby:
+    CLOSED: [2011-02-21 lun]
+Git seems to be the de-facto tool for ruby development. Lots of gems are hosted on github, and bundler may help you to work with cutting-edge release fetched from git repositories.
+
+WOW! That's amazing!_ But what if you didn't like to use git as scm_?
+
+I've nothing against git, but I prefer mercurial so I spent some time to add mercurial capabilities to [bundler](http://gembundler.com/), the best way to manage your application's dependencies.
+
+
+
+
+## How does it work?
+
+
+With bundler you can start gem development with a simple command (more info at [Railscast episode 201](http://railscasts.com/episodes/201-bundler))
+
+    
+    bundle gem gem_name
+
+
+This command will create for you a gem skeleton with some premade rake tasks in a shiny git repository. Wouldn't be wonderful if we can use mercurial instead of git?
+
+Now you can with [this](https://github.com/nolith/bundler/zipball/mercurial_v1.0.10) patched version of bundler 1.0.10 that add the '-H' switch to bundle gem
+
+    
+     bundle help gem
+    Usage:
+      bundle gem GEM
+    
+    Options:
+      -H, [--hg=Use mercurial instead of git]
+      -b, [--bin=Generate a binary for your library.]
+          [--no-color=Disable colorization in output]
+      -V, [--verbose=Enable verbose output mode]       
+    
+    Creates a skeleton for creating a rubygem
+
+
+
+
+## Not enough for you?
+
+
+If this is not enough for you, I've also a patch set for loading gems directly from mercurial repos. This [patched bundler v1.1pre.1](https://github.com/nolith/bundler/zipball/mercurial) will make you happy.
+
+{% highlight ruby %}    
+#Gemfile
+gem 'eusplazio', :hg => 'http://bitbucket.org/nolith/eusplazio', :tag => 'v0.0.2'
+{% endhighlight %}
+
+Happy conding
+
+
+### Install instructions
+
+
+Download the zipped source and extract it; enter the source folder and type rake install
+
+** DONE OSX Lion, ruby and mysql2 - [FATAL] failed to allocate memory :ruby:mysql:OSX:lion:gems:
+    CLOSED: [2012-03-04 dom]
+I've spent a day figuring out how to solve the 
+"\[FATAL\] failed to allocate memory" with mysql2 gems on Lion.
+
+This solution should work if you installed mysql with [Homebrew](http://mxcl.github.com/homebrew/).
+
+First of all, remove mysql-connector-c and mysql2 gem
+
+	$ brew uninstall mysql-connector-c
+	$ gem uninstall mysql2
+
+Find the mysql version
+
+	$ ls /usr/local/Cellar/mysql                
+	5.5.19
+
+Now recompile mysql2 against brewed mysql server (**replace 5.5.19 with your version (twice)**)
+
+	$ gem install mysql2 -- --with-mysql-include=/usr/local/Cellar/mysql/5.5.19/include --with-mysql-lib=/usr/local/Cellar/mysql/5.5.19/lib
+
+Enjoy yourself
+
+** DONE Book review: "Sinatra: Up and Running"	    :ruby:sinatra:books:gems:
+    CLOSED: [2012-08-04 sab]
+:PROPERTIES:
+:CUSTOM_ID: sinatra.html
+:END:
+
+_Italian version [follows](#italian)._
+
+The first time I leafed through this book I wondered if 20 bucks was too much for a book of just over 100 pages.
+
+When I started reading it was clear that this book was worth every single cent.
+
+Clear concepts and well written, too bad for some mistakes in the code examples. Not even a word is wasted explaining how to develop in ruby; surely it is a book for experienced developers.
+
+If you are looking for a step by step guide about web development with sinatra then this is not the book you are looking for. There are no advices on how to organize a project nor any best practice.
+
+_Who is this book for?_
+
+It's a book for experienced developers who want to sharpen their knowledge about how sinatra works and not settle for high-level API.
+You'll learn how to develop and use modular applications, building the theoretical bases for applications reuse; you'll learn how RACK works and how to integrate several web applications developed with different frameworks (Rails, Sinatra and also simple RACK based applications).
+
+Not even a sentence is redundant in this excellent manual, surely it is a reference book to keep on hand.
+
+[O'Reilly Shop](http://shop.oreilly.com/product/0636920019664.do)
+
+
+### <a id="italian">Italian version</a>
+
+
+La prima volta che ho sfogliato questo libro mi sono chiesto se 20$ non fossero troppi per un libretto di poco più di 100 pagine.
+
+Dopo aver iniziato a leggerlo è stato subito chiaro che il libro valeva ogni singolo centesimo.
+
+Concetti chiari e ben scritti, peccato solo per qualche errore negli esempi di codice. Non si spreca neanche una parola per i concetti di ruby; è decisamente un libro per programmatori esperti.
+
+Se state cercando una guida passo passo per lo sviluppo di applicazioni web con sinatra, lasciate perdere, questo non è il libro che fa per voi. Non ci sono consigli su come organizzare un progetto, né alcuna best practice.
+
+_Allora per chi è questo libro?_
+
+Per sviluppatori esperti che vogliono approfondire il funzionamento di sinatra e che non si accontentano delle API di alto livello.
+Vengono trattate le applicazioni modulari, gettando le basi teoriche per il riuso delle applicazioni; viene spiegato molto bene come funziona RACK e come integrare web-app differenti (Rails, Sinatra ma anche semplici applicazioni fatte secondo le API di RACK).
+
+Neanche una frase è superflua in questo ottimo manuale, sicuramente si tratta di un testo di riferimento da tenere a portata di mano.
+
+[O'Reilly Shop](http://shop.oreilly.com/product/0636920019664.do)
+
+* Pages
+** Info
+:PROPERTIES:
+:PAGE: info.html
+:date: '2009-05-06 14:12:34'
+:layout: page
+:slug: info
+:status: publish
+:title: Info
+:wordpress_id: '2'
+:group: pages
+:END:
+
+Servono informazioni?
+Hai provato con [[http://alessiocaiazza.info][questo]]?
+** GPG Signing policy
+:PROPERTIES:
+:PAGE: gpg-signing-policy/index.html
+:END:
+
+This  is the key signing policy for the key 0x440C5437.
+
+#+BEGIN_SRC
+          pub   4096R/440C5437 2009-05-31
+                Key fingerprint = 87C3 BF5F 034A 6801 338A  7963 4C1E 7C65 440C 5437
+          uid                  Alessio Caiazza (nolith) <nolith@abisso.org>
+          uid                  [jpeg image of size 3780]