Merge branch 'release/0.1' into develop
[from now] 2012/04/10 18:49:38

diff --git a/Gemfile b/Gemfile
index 5540549..3256d1a 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,7 +1,7 @@
 source :rubygems

 gem 'sinatra'
-gem 'haml'
+gem 'slim'
 gem 'data_mapper'
 gem 'dm-sqlite-adapter'
 gem 'rack'
diff --git a/app.rb b/app.rb
index 60b2435..1205beb 100644
--- a/app.rb
+++ b/app.rb
@@ -1,6 +1,6 @@
 require 'bundler/setup'
 require 'sinatra/base'
-require 'haml'
+require 'slim'
 require './config'
 require './model'
[from now] 2012/04/10 19:43:22

diff --git a/.gitignore b/.gitignore
index 4b08b16..c0f751f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,5 +2,6 @@
 .bundle/
 bundle/
 config.yaml
-share/
+share/bundle
 *.swp
+share/config/config.yaml
diff --git a/Gemfile b/Gemfile
index 3256d1a..e1bb549 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,15 +1,14 @@
 source :rubygems

 gem 'sinatra'
+gem 'sinatra-contrib'
 gem 'slim'
 gem 'data_mapper'
 gem 'dm-sqlite-adapter'
 gem 'rack'
-gem 'unicorn'
 gem 'rdiscount'
-gem 'thin'

 group :development do
-    gem 'mocktra'
+  gem 'mocktra'
 end

diff --git a/Gemfile.lock b/Gemfile.lock
index b278a04..15c0313 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -2,9 +2,9 @@ GEM
   remote: http://rubygems.org/
   specs:
     addressable (2.2.7)
+    backports (2.5.1)
     bcrypt-ruby (3.0.1)
     crack (0.3.1)
-    daemons (1.1.8)
     data_mapper (1.2.0)
       dm-aggregates (~> 1.2.0)
       dm-constraints (~> 1.2.0)
@@ -55,39 +55,39 @@ GEM
       data_objects (= 0.10.8)
     eventmachine (0.12.10)
     fastercsv (1.5.4)
-    haml (3.1.4)
-    json (1.6.5)
-    json_pure (1.6.5)
-    kgio (2.7.3)
-    mocktra (1.0.1)
+    json (1.6.6)
+    json_pure (1.6.6)
+    mocktra (1.0.2)
       sinatra (~> 1.3)
       webmock (~> 1.8)
     multi_json (1.0.4)
     rack (1.4.1)
     rack-protection (1.2.0)
       rack
-    raindrops (0.8.0)
+    rack-test (0.6.1)
+      rack (>= 1.0)
     rdiscount (1.6.8)
     sinatra (1.3.2)
       rack (~> 1.3, >= 1.3.6)
       rack-protection (~> 1.2)
       tilt (~> 1.3, >= 1.3.3)
+    sinatra-contrib (1.3.1)
+      backports (>= 2.0)
+      eventmachine
+      rack-protection
+      rack-test
+      sinatra (~> 1.3.0)
+      tilt (~> 1.3)
+    slim (1.2.0)
+      temple (~> 0.4.0)
+      tilt (~> 1.3.3)
     stringex (1.3.2)
-    thin (1.3.1)
-      daemons (>= 1.0.9)
-      eventmachine (>= 0.12.6)
-      rack (>= 1.0.0)
+    temple (0.4.0)
     tilt (1.3.3)
-    unicorn (4.2.0)
-      kgio (~> 2.6)
-      rack
-      raindrops (~> 0.7)
     uuidtools (2.1.2)
-    webmock (1.8.4)
-      addressable (>= 2.2.7)
+    webmock (1.8.6)
       addressable (>= 2.2.7)
       crack (>= 0.1.7)
-      crack (>= 0.1.7)

 PLATFORMS
   ruby
@@ -95,10 +95,9 @@ PLATFORMS
 DEPENDENCIES
   data_mapper
   dm-sqlite-adapter
-  haml
   mocktra
   rack
   rdiscount
   sinatra
-  thin
-  unicorn
+  sinatra-contrib
+  slim
diff --git a/Rakefile b/Rakefile
index ca34618..38899d0 100644
--- a/Rakefile
+++ b/Rakefile
@@ -3,25 +3,25 @@ require './config'
 require './model'

 namespace :bundle do
-    task :install do
-        sh "bundle install --path ./bundle"
-    end
+  task :install do
+    sh "bundle install --path ./bundle"
+  end
 end

 namespace :db do
-    task :migrate do
-        DataMapper.auto_migrate!
-    end
-
-    task :upgrade do
-        DataMapper.auto_upgrade!
-    end
+  task :migrate do
+    DataMapper.auto_migrate!
+  end
+
+  task :upgrade do
+    DataMapper.auto_upgrade!
+  end
 end

 task :install do
-
+
 end

 task :start do
-    sh "bundle exec thin start -l share/log/server.log"
+  sh "bundle exec thin start -l share/log/server.log"
 end
diff --git a/app.rb b/app.rb
index 1205beb..f37e6c6 100644
--- a/app.rb
+++ b/app.rb
@@ -1,5 +1,6 @@
 require 'bundler/setup'
 require 'sinatra/base'
+require 'sinatra/reloader'
 require 'slim'
 require './config'
 require './model'
@@ -8,30 +9,33 @@ require './model'
 # ==========

 class Nanto < Sinatra::Base
-    set :haml, :escape_html => true
+  set :slim, :escape_html => true
+
+  configure :development do
+    register Sinatra::Reloader
+  end

-    before do
-        @disqus = false
-        @posts = []
-        @title = "rubelum's blog"  # あとまわし
-    end
+  before do
+    @posts = []
+    @title = "rubelum's blog"  # あとまわし
+  end

-    get '/' do
-        @posts = Post.all(:limit => 1, :order => [:created_at.desc])
-        last = @posts[@posts.size - 1] # 配列ではないのでlast使用不可
-        @next = last && last.next
-        haml :posts
-    end
-
-    get '/about' do
-        haml :about
-    end
+  get '/' do
+    @posts = Post.all(:limit => 1, :order => [:created_at.desc])
+    last = @posts[@posts.size - 1] # 配列ではないのでlast使用不可
+    @next = last && last.next
+    slim :posts
+  end

-    get '/post/:permalink' do
-        post = Post.first(:permalink => params[:permalink])
-        redirect '/' unless post
-        @next = post && post.next
-        @posts = [post]
-        haml :posts
-    end
+  get '/about' do
+    slim :about
+  end
+
+  get '/post/:permalink' do
+    post = Post.first(:permalink => params[:permalink])
+    redirect '/' unless post
+    @next = post && post.next
+    @posts = [post]
+    slim :posts
+  end
 end
diff --git a/config.rb b/config.rb
index 2a9dd7e..b39af8d 100644
--- a/config.rb
+++ b/config.rb
@@ -4,8 +4,8 @@ Encoding.default_internal = Encoding::UTF_8
 Encoding.default_external = Encoding::UTF_8

 $config = {}
-def read_config yaml_file
-    YAML.load_file(yaml_file)
+def read_config(yaml_file)
+  YAML.load_file yaml_file
 end

-$config.merge read_config("./share/config/config.yaml")
+$config = read_config("./share/config/config.yaml")
diff --git a/model.rb b/model.rb
index d123dfc..dc5857e 100644
--- a/model.rb
+++ b/model.rb
@@ -12,55 +12,55 @@ DataMapper::Logger.new("./share/log/dm.log", :debug)
 DataMapper.setup(:default, "sqlite:./share/database/blog.db")

 class Post
-    include DataMapper::Resource
-
-    property :id, Serial
-    property :permalink, String, :length => 100,
-                                 :index => true,
-                                 :unique => true
-    property :title, String, :length => 150
-    property :body, Text, :required => true
-    property :created_at, DateTime, :required => true,
-                                    :index => true
-    property :updated_at, DateTime, :index => true
+  include DataMapper::Resource

-    def date
-        self.created_at.strftime('%Y/%m/%d')
-    end
+  property :id, Serial
+  property :permalink, String, :length => 100,
+                               :index => true,
+                               :unique => true
+  property :title, String, :length => 150
+  property :body, Text, :required => true
+  property :created_at, DateTime, :required => true,
+                                  :index => true
+  property :updated_at, DateTime, :index => true

-    def time
-        self.created_at.strftime('%H:%M:%S')
-    end
+  def date
+    self.created_at.strftime('%Y/%m/%d')
+  end

-    def html
-        RDiscount.new(self.body).to_html
-    end
+  def time
+    self.created_at.strftime('%H:%M:%S')
+  end

-    before :create, :trans_permalink
-    before :update, :trans_permalink
+  def html
+    RDiscount.new(self.body).to_html
+  end

-    def url
-        "/post/#{permalink}"
-    end
-
-    def next
-        return nil unless Post.all.count > 1
-        Post.first(:order => [:created_at.desc],
-                   :created_at.lt => self.created_at)
-    end
+  before :create, :trans_permalink
+  before :update, :trans_permalink

-    def previous
-        return nil unless Post.all.count > 1
-        Post.first(:order => [:created_at.asc],
-                   :created_at.gt => self.created_at)
-    end
+  def url
+    "/post/#{permalink}"
+  end

-    private
+  def next
+    return nil unless Post.all.count > 1
+    Post.first :order => [:created_at.desc],
+               :created_at.lt => self.created_at
+  end

-    def trans_permalink
-        return nil if self.permalink =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}/
-        self.permalink = self.created_at.strftime("%Y-%m-%d-#{self.permalink}")
-    end
+  def previous
+    return nil unless Post.all.count > 1
+    Post.first :order => [:created_at.asc],
+               :created_at.gt => self.created_at
+  end
+
+  private
+
+  def trans_permalink
+    return nil if self.permalink =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}/
+    self.permalink = self.created_at.strftime("%Y-%m-%d-#{self.permalink}")
+  end
 end

 DataMapper.finalize
diff --git a/public/css/style.css b/public/css/style.css
index d56d855..69813da 100644
--- a/public/css/style.css
+++ b/public/css/style.css
@@ -1,10 +1,11 @@
 body {
-    background-color: #EEE;
-	font-family: meiryo, 'Hiragino Mincho Pro', tahoma;
+  background-color: #EEE;
+  font-family: "ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic Pro",Meiryo,"メイリオ","ＭＳ Ｐゴシック",Verdana,Geneva,Arial,Helvetica;
+  /*font-family: meiryo, 'Hiragino Mincho Pro', tahoma;*/
 }

 h1,h2,h3,h4,h5,h6 {
-	font-family: 'Maven Pro';
+  font-family: 'Maven Pro';
 }

 a:link { color: #d27; }
@@ -13,83 +14,83 @@ a:hover { color: #f5a; }

 /* Layout */
 #wrapper {
-	margin: 0 auto;
-	width: 90%;
+  margin: 0 auto;
+  width: 90%;
 }

 /* Effect */
 .box {
-	padding: 20px;
-	background-color: #FFF;
-    border-radius: 6px;		/* CSS3草案 */
-	-webkit-border-radius: 6px;	/* Safari,Google Chrome用 */
-	-moz-border-radius: 6px;	/* Firefox用 */
-	-webkit-box-shadow: 3px 3px 5px 0px #777; /* Safari, Chrome用 */
-	-moz-box-shadow: 3px 3px 5px 0px #777; /* Firefox用 */
-	box-shadow: 3px 3px 5px 0px #777; /* CSS3 */
+  padding: 20px;
+  background-color: #FFF;
+  border-radius: 6px;		/* CSS3草案 */
+  -webkit-border-radius: 6px;	/* Safari,Google Chrome用 */
+  -moz-border-radius: 6px;	/* Firefox用 */
+  -webkit-box-shadow: 3px 3px 5px 0px #777; /* Safari, Chrome用 */
+  -moz-box-shadow: 3px 3px 5px 0px #777; /* Firefox用 */
+  box-shadow: 3px 3px 5px 0px #777; /* CSS3 */
 }

 /* Page Header */
 #wrapper > header {
-	padding-left: 20px;
-    height: 100px;
+  padding-left: 20px;
+  height: 100px;
 }
 #wrapper > header * { margin: 0; padding: 0; }
 #wrapper > header h1 {
-    position: absolute;
-    top: 40px;
+  position: absolute;
+  top: 40px;
 }
 #wrapper > header h1 a {
-	color: #000;
-	text-decoration: none;
+  color: #000;
+  text-decoration: none;
 }
 #wrapper > header nav {
-	float: right;
-    position: absolute;
-    top: 66px;
-    right: 6%;
+  float: right;
+  position: absolute;
+  top: 66px;
+  right: 6%;
 }
 #wrapper > header nav ul {
-	list-style-type: none;
+  list-style-type: none;
 }
 #wrapper > header nav ul li {
-	float: left;
-	margin: 0 0 0 5px;
-	padding: 0;
+  float: left;
+  margin: 0 0 0 5px;
+  padding: 0;
 }
 .main {
-	clear: both;
+  clear: both;
 }

 /* Article Header */
 article {
-    margin-bottom: 30px;
+  margin-bottom: 30px;
 }
 article h1 {
-	margin-top: 10px;
+  margin-top: 10px;
 }
 article h1 a {
-	color: #000;
-	text-decoration: none;
+  color: #000;
+  text-decoration: none;
 }
 article .date {
-    margin: 0;
-    color: #333;
+  margin: 0;
+  color: #333;
 }

 /* Footer */
 #wrapper > footer {
-	text-align: center;
+  text-align: center;
 }

 img.profile {
-    border: 1px solid #BBB;
-    width: 48px;
-    height: 48px;
-    border-radius: 6px;
-	-webkit-border-radius: 6px;
-	-moz-border-radius: 6px;
-	-webkit-box-shadow: 2px 2px 2px 0px #777; /* Safari, Chrome用 */
-	-moz-box-shadow: 2px 2px 2px 0px #777; /* Firefox用 */
-	box-shadow: 2px 2px 2px 0px #777; /* CSS3 */
+  border: 1px solid #BBB;
+  width: 48px;
+  height: 48px;
+  border-radius: 6px;
+  -webkit-border-radius: 6px;
+  -moz-border-radius: 6px;
+  -webkit-box-shadow: 2px 2px 2px 0px #777; /* Safari, Chrome用 */
+  -moz-box-shadow: 2px 2px 2px 0px #777; /* Firefox用 */
+  box-shadow: 2px 2px 2px 0px #777; /* CSS3 */
 }
diff --git a/share/config/config.yaml b/share/config/config.yaml
new file mode 100644
index 0000000..e69de29
diff --git a/share/config/sample-config.yaml b/share/config/sample-config.yaml
new file mode 100644
index 0000000..e69de29
diff --git a/test.rb b/test.rb
index 78de9a4..676213a 100644
--- a/test.rb
+++ b/test.rb
@@ -1,8 +1,7 @@
-
 # encoding : utf-8
 require 'bundler/setup'
 require 'sinatra/base'
-require 'haml'
+require 'slim'
 require 'rdiscount'
 require './config'
 require './model'
diff --git a/views/about.haml b/views/about.haml
deleted file mode 100644
index b626e78..0000000
--- a/views/about.haml
+++ /dev/null
@@ -1,19 +0,0 @@
-%h2 Profile
-%dl
-  %dt Name
-  %dd rubellum
-  %dt Location
-  %dd Chiba, Japan
-%h2 Links
-%ul
-  %li
-    %a(href="https://twitter.com/rubellum") Twitter
-  %li
-    %a(href="https://github.com/rubellum") GitHub
-  %li
-    %a(href="http://rubellum.tumblr.com") Tumblr
-%h2 Thanks!
-%dl
-  %dt
-    %a(href="http://icondock.com/") icondock
-  %dd Social Icons.
diff --git a/views/about.slim b/views/about.slim
new file mode 100644
index 0000000..1ab83aa
--- /dev/null
+++ b/views/about.slim
@@ -0,0 +1,19 @@
+h2 Profile
+dl
+  dt Name
+  dd rubellum
+  dt Location
+  dd Chiba, Japan
+h2 Links
+ul
+  li
+    a(href="https://twitter.com/rubellum") Twitter
+  li
+    a(href="https://github.com/rubellum") GitHub
+  li
+    a(href="http://rubellum.tumblr.com") Tumblr
+h2 Thanks!
+dl
+  dt
+    a(href="http://icondock.com/") icondock
+  dd Social Icons.
diff --git a/views/disqus.slim b/views/disqus.slim
new file mode 100644
index 0000000..230db85
--- /dev/null
+++ b/views/disqus.slim
@@ -0,0 +1,11 @@
+<div id="disqus_thread"></div>
+<script type="text/javascript">
+  var disqus_shortname = '#{@disqus_name}';
+  (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>
diff --git a/views/layout.haml b/views/layout.haml
deleted file mode 100644
index 7b61465..0000000
--- a/views/layout.haml
+++ /dev/null
@@ -1,30 +0,0 @@
-!!!
-%html
-  %head
-    %meta{:charset => "utf-8"}
-    %script(type="text/javascript" src="/js/prettify.js")
-    %link(rel="stylesheet" href="http://fonts.googleapis.com/css?family=Maven+Pro:400,700")
-    %link(rel="stylesheet" href="/css/sunburst.css")
-    %link(rel="stylesheet" href="/css/style.css")
-    %title= @title
-  %body
-    #wrapper
-      %header
-        %h1
-          %a(href="/")= @title
-        %nav
-          %ul
-            %li
-              %a(href="https://twitter.com/rubellum")
-                %img.social(src="/img/twitter.png" alt="twitter")
-            %li
-              %a(href="https://github.com/rubellum")
-                %img.social(src="/img/github.png" alt="github")
-      .main.box
-        != yield
-      %footer
-        %p
-          %a(href="/about")
-            %img.profile(src="/img/profile_small.png" alt="profile")
-        %p
-          &copy;2012 rubellum  Powered by <a href="https://github.com/rubellum/Nanto">Nanto</a>
diff --git a/views/layout.slim b/views/layout.slim
new file mode 100644
index 0000000..a360b7b
--- /dev/null
+++ b/views/layout.slim
@@ -0,0 +1,32 @@
+doctype html
+html
+  head
+    meta charset="utf-8"
+    script type="text/javascript" src="/js/prettify.js"
+    link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Maven+Pro:400,700"
+    link rel="stylesheet" href="/css/sunburst.css"
+    link rel="stylesheet" href="/css/style.css"
+    title= @title
+  body
+    div#wrapper
+      header
+        h1
+          a href="/" = @title
+        nav
+          ul
+            li
+              a href="https://twitter.com/rubellum"
+                img.social src="/img/twitter.png" alt="twitter"
+            li
+              a href="https://github.com/rubellum"
+                img.social src="/img/github.png" alt="github"
+      div.main.box
+        == yield
+      footer
+        p
+          a href="/about"
+            img.profile src="/img/profile_small.png" alt="profile"
+        div
+          span
+            | &copy;2012 rubellum  Powered by
+            a href="https://github.com/rubellum/Nanto" Nanto
diff --git a/views/posts.haml b/views/posts.haml
deleted file mode 100644
index ec4b61a..0000000
--- a/views/posts.haml
+++ /dev/null
@@ -1,26 +0,0 @@
-- @posts.each do |post|
-  %article
-    %header
-      %aside
-        %p.date= post.date
-      %h1
-        %a(href="/post/#{post.permalink}")= post.title
-    #content
-      != post.html
-- if @next
-  %a(href="#{@next.url}")= ">> #{@next.title}"
-- if @previous
-  %a(href="#{@previous.url}")= @previous.title
-- if @disqus && @posts.count == 1
-  :plain
-    <div id="disqus_thread"></div>
-    <script type="text/javascript">
-      var disqus_shortname = 'rubellum-blog';
-      (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>
diff --git a/views/posts.slim b/views/posts.slim
new file mode 100644
index 0000000..2818db3
--- /dev/null
+++ b/views/posts.slim
@@ -0,0 +1,14 @@
+- @posts.each do |post|
+  article
+    header
+      aside
+        p.date = post.date
+      h1
+        a href="/post/#{post.permalink}" = post.title
+    div#content == post.html
+- if @next
+  a href="#{@next.url}" = ">> #{@next.title}"
+- if @previous
+  a href="#{@previous.url}" = @previous.title
+- if @disqus && @posts.count == 1
+  = disqus "rubellum-blog"
[from now] 2012/04/10 19:43:54

diff --git a/share/config/config.yaml b/share/config/config.yaml
deleted file mode 100644
index e69de29..0000000
[from now] 2012/04/10 19:53:33

diff --git a/Gemfile b/Gemfile
index e1bb549..5188584 100644
--- a/Gemfile
+++ b/Gemfile
@@ -7,6 +7,8 @@ gem 'data_mapper'
 gem 'dm-sqlite-adapter'
 gem 'rack'
 gem 'rdiscount'
+gem 'redcarpet'
+gem 'unicorn'

 group :development do
   gem 'mocktra'
diff --git a/Gemfile.lock b/Gemfile.lock
index 15c0313..4e6347e 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -57,6 +57,7 @@ GEM
     fastercsv (1.5.4)
     json (1.6.6)
     json_pure (1.6.6)
+    kgio (2.7.4)
     mocktra (1.0.2)
       sinatra (~> 1.3)
       webmock (~> 1.8)
@@ -66,7 +67,9 @@ GEM
       rack
     rack-test (0.6.1)
       rack (>= 1.0)
+    raindrops (0.8.0)
     rdiscount (1.6.8)
+    redcarpet (2.1.1)
     sinatra (1.3.2)
       rack (~> 1.3, >= 1.3.6)
       rack-protection (~> 1.2)
@@ -84,6 +87,10 @@ GEM
     stringex (1.3.2)
     temple (0.4.0)
     tilt (1.3.3)
+    unicorn (4.2.1)
+      kgio (~> 2.6)
+      rack
+      raindrops (~> 0.7)
     uuidtools (2.1.2)
     webmock (1.8.6)
       addressable (>= 2.2.7)
@@ -98,6 +105,8 @@ DEPENDENCIES
   mocktra
   rack
   rdiscount
+  redcarpet
   sinatra
   sinatra-contrib
   slim
+  unicorn
diff --git a/Rakefile b/Rakefile
index 38899d0..6e34d4b 100644
--- a/Rakefile
+++ b/Rakefile
@@ -4,7 +4,7 @@ require './model'

 namespace :bundle do
   task :install do
-    sh "bundle install --path ./bundle"
+    sh "bundle install --path ./share/bundle"
   end
 end
[from now] 2012/04/10 22:25:28

diff --git a/Rakefile b/Rakefile
index 6e34d4b..96954a9 100644
--- a/Rakefile
+++ b/Rakefile
@@ -22,6 +22,18 @@ task :install do

 end

+task :list do
+  Dir::glob("posts/*.*").each do |f|
+    puts open(f).gets
+  end
+end
+
+task :new do
+  print "name:"
+  name = STDIN.gets.chomp
+  sh "touch posts/#{Time.now.strftime('%Y-%m-%d')}-#{name}.md"
+end
+
 task :start do
   sh "bundle exec thin start -l share/log/server.log"
 end
[from now] 2012/04/10 22:35:30

diff --git a/public/img/favicon.png b/public/img/favicon.png
new file mode 100644
index 0000000..03c8d1e
Binary files /dev/null and b/public/img/favicon.png differ
diff --git a/views/layout.slim b/views/layout.slim
index a360b7b..259bede 100644
--- a/views/layout.slim
+++ b/views/layout.slim
@@ -2,6 +2,7 @@ doctype html
 html
   head
     meta charset="utf-8"
+    link rel="shortcut icon" href="/img/favicon.png"
     script type="text/javascript" src="/js/prettify.js"
     link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Maven+Pro:400,700"
     link rel="stylesheet" href="/css/sunburst.css"
Merge branch 'release/0.2'