mirror of
https://github.com/samsonjs/samhuri.net.git
synced 2026-03-25 09:05:47 +00:00
restructure posts, responsive layout, new style
This commit is contained in:
parent
c83c639b98
commit
b11e6bf5b7
165 changed files with 2443 additions and 2027 deletions
|
|
@ -1 +1 @@
|
|||
exclude = "{$exclude,www,node_modules}"
|
||||
exclude = "{$exclude,www,node_modules,tweets}"
|
||||
|
|
|
|||
|
|
@ -15,14 +15,11 @@ function main() {
|
|||
rm -rf "$TARGET"
|
||||
"$HARP" compile . "$TARGET"
|
||||
|
||||
echo "* mungle html to make it available without the extension"
|
||||
echo "* munge html files to make them available without an extension"
|
||||
munge_html
|
||||
|
||||
echo "* minify js"
|
||||
minify_js
|
||||
|
||||
echo "* minify css"
|
||||
minify_css
|
||||
}
|
||||
|
||||
function compile_rss() {
|
||||
|
|
@ -30,7 +27,7 @@ function compile_rss() {
|
|||
}
|
||||
|
||||
function munge_html() {
|
||||
for FILE in "$TARGET"/*.html "$TARGET"/posts/*.html "$TARGET"/projects/*.html; do
|
||||
for FILE in "$TARGET"/*.html "$TARGET"/posts/*/*/*.html "$TARGET"/projects/*.html; do
|
||||
[[ "${FILE##*/}" = "index.html" ]] && continue
|
||||
|
||||
# make posts available without an .html extension
|
||||
|
|
@ -46,10 +43,4 @@ function minify_js() {
|
|||
done
|
||||
}
|
||||
|
||||
function minify_css() {
|
||||
for FILE in "$TARGET"/css/*.css; do
|
||||
$DIR/minify-css.sh "$FILE" > /tmp/minified.css && mv /tmp/minified.css "$FILE" || echo "* failed to minify $FILE"
|
||||
done
|
||||
}
|
||||
|
||||
main
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
DIR=$(dirname "$0")
|
||||
JAR_FILENAME="$DIR/yuicompressor-2.4.8.jar"
|
||||
|
||||
function minify() {
|
||||
INPUT="$1"
|
||||
java -jar "$JAR_FILENAME" "$INPUT"
|
||||
}
|
||||
|
||||
if [[ "$1" != "" ]]; then
|
||||
minify "$1"
|
||||
else
|
||||
echo "usage: $0 [input file]"
|
||||
exit 1
|
||||
fi
|
||||
21
bin/move.rb
Executable file
21
bin/move.rb
Executable file
|
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
def pad(n)
|
||||
n = n.to_i
|
||||
if n < 10
|
||||
"0#{n}"
|
||||
else
|
||||
"#{n}"
|
||||
end
|
||||
end
|
||||
|
||||
Dir.chdir File.join(File.dirname(__FILE__), '../public/posts')
|
||||
|
||||
Dir['*.html.md'].each do |filename|
|
||||
name = filename.sub('.html.md', '')
|
||||
date, *rest = name.split('-')
|
||||
year, month, _ = date.split('.')
|
||||
slug = rest.join('-')
|
||||
|
||||
File.rename filename, File.join(year, pad(month), slug + '.html.md')
|
||||
end
|
||||
20
bin/redirects.rb
Executable file
20
bin/redirects.rb
Executable file
|
|
@ -0,0 +1,20 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
def pad(n)
|
||||
n = n.to_i
|
||||
if n < 10
|
||||
"0#{n}"
|
||||
else
|
||||
"#{n}"
|
||||
end
|
||||
end
|
||||
|
||||
Dir.chdir File.join(File.dirname(__FILE__), '../public/posts')
|
||||
|
||||
Dir['*.html.md'].each do |filename|
|
||||
name = filename.sub('.html.md', '')
|
||||
date, *rest = name.split('-')
|
||||
year, month, _ = date.split('.')
|
||||
slug = rest.join('-')
|
||||
puts "Redirect 301 /blog/#{name} /posts/#{year}/#{pad(month)}/#{slug}"
|
||||
end
|
||||
39
bin/rss.rb
39
bin/rss.rb
|
|
@ -25,8 +25,9 @@ class Blag
|
|||
self.new(dir).generate!
|
||||
end
|
||||
|
||||
def initialize dir
|
||||
def initialize dir, num_posts = 10
|
||||
@dir = dir
|
||||
@num_posts = num_posts
|
||||
end
|
||||
|
||||
def generate!
|
||||
|
|
@ -66,22 +67,25 @@ class Blag
|
|||
|
||||
def posts
|
||||
@posts ||= begin
|
||||
prefix = @dir + '/posts/'
|
||||
json = File.read File.join(prefix, '_data.json')
|
||||
data = JSON.parse json
|
||||
data.map do |slug, post|
|
||||
filename = find_post prefix, slug
|
||||
content = File.read filename
|
||||
post['slug'] = slug
|
||||
post['type'] = post['link'] ? :link : :post
|
||||
post['title'] += " →" if post['type'] == :link
|
||||
post['relative_url'] = '/posts/' + slug
|
||||
post['url'] = root_url + post['relative_url']
|
||||
post['content'] = content
|
||||
post['body'] = RDiscount.new(post['content'], :smart).to_html
|
||||
post['rfc822'] = Time.at(post['timestamp']).rfc822
|
||||
post
|
||||
end.sort_by { |p| -p['timestamp'] }.first(10)
|
||||
Dir[File.join(@dir, 'posts/20*/*')].map do |dir|
|
||||
json = File.read File.join(dir, '_data.json')
|
||||
data = JSON.parse json
|
||||
prefix = dir.sub(@dir, '')
|
||||
data.map do |slug, post|
|
||||
filename = find_post dir, slug
|
||||
content = File.read filename
|
||||
relative_url = File.join(prefix, slug)
|
||||
post['slug'] = slug
|
||||
post['type'] = post['link'] ? :link : :post
|
||||
post['title'] = "→ #{post['title']}" if post['type'] == :link
|
||||
post['relative_url'] = relative_url
|
||||
post['url'] = root_url + post['relative_url']
|
||||
post['content'] = content
|
||||
post['body'] = RDiscount.new(post['content'], :smart).to_html
|
||||
post['rfc822'] = Time.at(post['timestamp']).rfc822
|
||||
post
|
||||
end
|
||||
end.flatten.sort_by { |p| -p['timestamp'] }.first(@num_posts)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -129,6 +133,7 @@ private
|
|||
def feed_xml
|
||||
xml = Builder::XmlMarkup.new
|
||||
xml.instruct! :xml, version: '1.0'
|
||||
xml.instruct! 'xml-stylesheet', href: root_url + '/css/normalize.css', type: 'text/css'
|
||||
xml.instruct! 'xml-stylesheet', href: root_url + '/css/style.css', type: 'text/css'
|
||||
|
||||
xml.rss version: '2.0' do
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -5,4 +5,4 @@
|
|||
"email": "sami@samhuri.net",
|
||||
"url": "http://samhuri.net"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
109
public/.htaccess
109
public/.htaccess
|
|
@ -20,8 +20,115 @@ ExpiresDefault A259200
|
|||
Header append Cache-Control "private, must-revalidate"
|
||||
</FilesMatch>
|
||||
|
||||
Redirect 301 /json-diff/ http://tlrobinson.net/projects/javascript-fun/jsondiff/
|
||||
|
||||
Redirect 301 /proj/ /projects/
|
||||
Redirect 301 /blog/sjs.rss /feed.xml
|
||||
Redirect 301 /blog/ /posts/
|
||||
|
||||
Redirect 301 /json-diff/ http://tlrobinson.net/projects/javascript-fun/jsondiff/
|
||||
Redirect 301 /blog/2006.02.08-first-post /posts/2006/02/first-post
|
||||
Redirect 301 /blog/2006.02.08-touch-screen-on-steroids /posts/2006/02/touch-screen-on-steroids
|
||||
Redirect 301 /blog/2006.02.15-urban-extreme-gymnastics /posts/2006/02/urban-extreme-gymnastics
|
||||
Redirect 301 /blog/2006.02.18-girlfriend-x /posts/2006/02/girlfriend-x
|
||||
Redirect 301 /blog/2006.02.18-jump-to-viewcontroller-in-textmate /posts/2006/02/jump-to-viewcontroller-in-textmate
|
||||
Redirect 301 /blog/2006.02.18-some-textmate-snippets-for-rails-migrations /posts/2006/02/some-textmate-snippets-for-rails-migrations
|
||||
Redirect 301 /blog/2006.02.20-obligatory-post-about-ruby-on-rails /posts/2006/02/obligatory-post-about-ruby-on-rails
|
||||
Redirect 301 /blog/2006.02.20-textmate-snippets-for-rails-assertions /posts/2006/02/textmate-snippets-for-rails-assertions
|
||||
Redirect 301 /blog/2006.02.21-textmate-insert-text-into-self-down /posts/2006/02/textmate-insert-text-into-self-down
|
||||
Redirect 301 /blog/2006.02.21-textmate-move-selection-to-self-down /posts/2006/02/textmate-move-selection-to-self-down
|
||||
Redirect 301 /blog/2006.02.22-intelligent-migration-snippets-0.1-for-textmate /posts/2006/02/intelligent-migration-snippets-0.1-for-textmate
|
||||
Redirect 301 /blog/2006.02.23-sjs-rails-bundle-0.2-for-textmate /posts/2006/02/sjs-rails-bundle-0.2-for-textmate
|
||||
Redirect 301 /blog/2006.03.03-generate-selfdown-in-your-rails-migrations /posts/2006/03/generate-selfdown-in-your-rails-migrations
|
||||
Redirect 301 /blog/2006.03.03-i-dont-mind-fairplay-either /posts/2006/03/i-dont-mind-fairplay-either
|
||||
Redirect 301 /blog/2006.03.03-spore /posts/2006/03/spore
|
||||
Redirect 301 /blog/2006.04.04-zsh-terminal-goodness-on-os-x /posts/2006/04/zsh-terminal-goodness-on-os-x
|
||||
Redirect 301 /blog/2006.05.07-os-x-and-fitts-law /posts/2006/05/os-x-and-fitts-law
|
||||
Redirect 301 /blog/2006.05.07-wikipediafs-on-linux-in-python /posts/2006/05/wikipediafs-on-linux-in-python
|
||||
Redirect 301 /blog/2006.06.05-ich-bin-auslnder-und-spreche-nicht-gut-deutsch /posts/2006/06/ich-bin-auslnder-und-spreche-nicht-gut-deutsch
|
||||
Redirect 301 /blog/2006.06.09-never-buy-a-german-keyboard /posts/2006/06/never-buy-a-german-keyboard
|
||||
Redirect 301 /blog/2006.06.10-theres-nothing-regular-about-regular-expressions /posts/2006/06/theres-nothing-regular-about-regular-expressions
|
||||
Redirect 301 /blog/2006.06.11-apple-pays-attention-to-detail /posts/2006/06/apple-pays-attention-to-detail
|
||||
Redirect 301 /blog/2006.07.06-working-with-the-zend-framework /posts/2006/07/working-with-the-zend-framework
|
||||
Redirect 301 /blog/2006.07.13-ubuntu-linux-for-linux-users-please /posts/2006/07/ubuntu-linux-for-linux-users-please
|
||||
Redirect 301 /blog/2006.07.17-ruby-and-rails-have-spoiled-me-rotten /posts/2006/07/ruby-and-rails-have-spoiled-me-rotten
|
||||
Redirect 301 /blog/2006.07.19-late-static-binding /posts/2006/07/late-static-binding
|
||||
Redirect 301 /blog/2006.07.21-class-method-instance-method-it-doesnt-matter-to-php /posts/2006/07/class-method-instance-method-it-doesnt-matter-to-php
|
||||
Redirect 301 /blog/2006.08.22-where-are-my-headphones /posts/2006/08/where-are-my-headphones
|
||||
Redirect 301 /blog/2006.09.16-buffalo-buffalo-buffalo-buffalo-buffalo-buffalo-buffalo-buffalo /posts/2006/09/buffalo-buffalo-buffalo-buffalo-buffalo-buffalo-buffalo-buffalo
|
||||
Redirect 301 /blog/2006.09.22-some-features-you-might-have-missed-in-itunes-7 /posts/2006/09/some-features-you-might-have-missed-in-itunes-7
|
||||
Redirect 301 /blog/2006.12.17-coping-with-windows-xp-activiation-on-a-mac /posts/2006/12/coping-with-windows-xp-activiation-on-a-mac
|
||||
Redirect 301 /blog/2007.03.06-full-screen-cover-flow /posts/2007/03/full-screen-cover-flow
|
||||
Redirect 301 /blog/2007.03.08-digg-v4-reply-to-replies-greasemonkey-script /posts/2007/03/digg-v4-reply-to-replies-greasemonkey-script
|
||||
Redirect 301 /blog/2007.03.25-diggscuss-0.9 /posts/2007/03/diggscuss-0.9
|
||||
Redirect 301 /blog/2007.04.04-a-triple-booting-schizophrenic-macbook /posts/2007/04/a-triple-booting-schizophrenic-macbook
|
||||
Redirect 301 /blog/2007.04.11-activerecord-base.find_or_create-and-find_or_initialize /posts/2007/04/activerecord-base.find_or_create-and-find_or_initialize
|
||||
Redirect 301 /blog/2007.04.16-getting-to-know-vista /posts/2007/04/getting-to-know-vista
|
||||
Redirect 301 /blog/2007.04.26-quickly-inserting-millions-of-rows-with-mysql-innodb /posts/2007/04/quickly-inserting-millions-of-rows-with-mysql-innodb
|
||||
Redirect 301 /blog/2007.04.30-funny-how-code-can-be-beautiful /posts/2007/04/funny-how-code-can-be-beautiful
|
||||
Redirect 301 /blog/2007.05.01-typo-and-i-are-friends-again /posts/2007/05/typo-and-i-are-friends-again
|
||||
Redirect 301 /blog/2007.05.03-a-scheme-parser-in-haskell-part-1 /posts/2007/05/a-scheme-parser-in-haskell-part-1
|
||||
Redirect 301 /blog/2007.05.05-a-new-way-to-look-at-networking /posts/2007/05/a-new-way-to-look-at-networking
|
||||
Redirect 301 /blog/2007.05.05-gotta-love-the-ferry-ride /posts/2007/05/gotta-love-the-ferry-ride
|
||||
Redirect 301 /blog/2007.05.09-dtrace-ruby-goodness-for-sun /posts/2007/05/dtrace-ruby-goodness-for-sun
|
||||
Redirect 301 /blog/2007.05.09-i-cant-wait-to-see-what-matt-stone-trey-parker-do-with-this /posts/2007/05/i-cant-wait-to-see-what-matt-stone-trey-parker-do-with-this
|
||||
Redirect 301 /blog/2007.05.10-enumerable-pluck-and-string-to_proc-for-ruby /posts/2007/05/enumerable-pluck-and-string-to_proc-for-ruby
|
||||
Redirect 301 /blog/2007.05.10-rails-plugins-link-dump /posts/2007/05/rails-plugins-link-dump
|
||||
Redirect 301 /blog/2007.05.15-dumping-objects-to-the-browser-in-rails /posts/2007/05/dumping-objects-to-the-browser-in-rails
|
||||
Redirect 301 /blog/2007.05.16-cheating-at-life-in-general /posts/2007/05/cheating-at-life-in-general
|
||||
Redirect 301 /blog/2007.05.18-iphone-humour /posts/2007/05/iphone-humour
|
||||
Redirect 301 /blog/2007.05.22-inspirado /posts/2007/05/inspirado
|
||||
Redirect 301 /blog/2007.05.26-finnish-court-rules-css-ineffective-at-protecting-dvds /posts/2007/05/finnish-court-rules-css-ineffective-at-protecting-dvds
|
||||
Redirect 301 /blog/2007.06.08-301-moved-permanently /posts/2007/06/301-moved-permanently
|
||||
Redirect 301 /blog/2007.06.08-so-long-typo-and-thanks-for-all-the-timeouts /posts/2007/06/so-long-typo-and-thanks-for-all-the-timeouts
|
||||
Redirect 301 /blog/2007.06.14-more-scheming-with-haskell /posts/2007/06/more-scheming-with-haskell
|
||||
Redirect 301 /blog/2007.06.14-testspec-on-rails-declared-awesome-just-one-catch /posts/2007/06/testspec-on-rails-declared-awesome-just-one-catch
|
||||
Redirect 301 /blog/2007.06.15-begging-the-question /posts/2007/06/begging-the-question
|
||||
Redirect 301 /blog/2007.06.18-back-on-gentoo-trying-new-things /posts/2007/06/back-on-gentoo-trying-new-things
|
||||
Redirect 301 /blog/2007.06.20-reinventing-the-wheel /posts/2007/06/reinventing-the-wheel
|
||||
Redirect 301 /blog/2007.06.22-embrace-the-database /posts/2007/06/embrace-the-database
|
||||
Redirect 301 /blog/2007.06.23-emacs-for-textmate-junkies /posts/2007/06/emacs-for-textmate-junkies
|
||||
Redirect 301 /blog/2007.06.24-floating-point-in-elschemo /posts/2007/06/floating-point-in-elschemo
|
||||
Redirect 301 /blog/2007.06.25-emacs-tagify-region-or-insert-tag /posts/2007/06/emacs-tagify-region-or-insert-tag
|
||||
Redirect 301 /blog/2007.06.25-propaganda-makes-me-sick /posts/2007/06/propaganda-makes-me-sick
|
||||
Redirect 301 /blog/2007.06.26-rtfm /posts/2007/06/rtfm
|
||||
Redirect 301 /blog/2007.06.28-recent-ruby-and-rails-regales /posts/2007/06/recent-ruby-and-rails-regales
|
||||
Redirect 301 /blog/2007.06.30-controlling-volume-via-the-keyboard-on-linux /posts/2007/06/controlling-volume-via-the-keyboard-on-linux
|
||||
Redirect 301 /blog/2007.07.03-a-textmate-tip-for-emacs-users /posts/2007/07/a-textmate-tip-for-emacs-users
|
||||
Redirect 301 /blog/2007.07.05-rushcheck-quickcheck-for-ruby /posts/2007/07/rushcheck-quickcheck-for-ruby
|
||||
Redirect 301 /blog/2007.07.06-see-your-regular-expressions-in-emacs /posts/2007/07/see-your-regular-expressions-in-emacs
|
||||
Redirect 301 /blog/2007.07.12-people /posts/2007/07/people
|
||||
Redirect 301 /blog/2007.08.02-elschemo-boolean-logic-and-branching /posts/2007/08/elschemo-boolean-logic-and-branching
|
||||
Redirect 301 /blog/2007.08.09-cheat-from-emacs /posts/2007/08/cheat-from-emacs
|
||||
Redirect 301 /blog/2007.08.09-snap-crunchle-pop /posts/2007/08/snap-crunchle-pop
|
||||
Redirect 301 /blog/2007.08.11-opera-is-pretty-slick /posts/2007/08/opera-is-pretty-slick
|
||||
Redirect 301 /blog/2007.08.19-catch-compiler-errors-at-runtime /posts/2007/08/catch-compiler-errors-at-runtime
|
||||
Redirect 301 /blog/2007.08.21-cheat-productively-in-emacs /posts/2007/08/cheat-productively-in-emacs
|
||||
Redirect 301 /blog/2007.08.26-captivating-little-creatures /posts/2007/08/captivating-little-creatures
|
||||
Redirect 301 /blog/2007.08.30-5-ways-to-avoid-looking-like-a-jerk-on-the-internet /posts/2007/08/5-ways-to-avoid-looking-like-a-jerk-on-the-internet
|
||||
Redirect 301 /blog/2007.09.25-learning-lisp-read-pcl /posts/2007/09/learning-lisp-read-pcl
|
||||
Redirect 301 /blog/2007.09.26-python-and-ruby-brain-dump /posts/2007/09/python-and-ruby-brain-dump
|
||||
Redirect 301 /blog/2007.10.29-gtkpod-in-gutsy-got-you-groaning /posts/2007/10/gtkpod-in-gutsy-got-you-groaning
|
||||
Redirect 301 /blog/2008.01.07-random-pet-peeve-of-the-day /posts/2008/01/random-pet-peeve-of-the-day
|
||||
Redirect 301 /blog/2008.02.19-thoughts-on-arc /posts/2008/02/thoughts-on-arc
|
||||
Redirect 301 /blog/2008.03.03-project-euler-code-repo-in-arc /posts/2008/03/project-euler-code-repo-in-arc
|
||||
Redirect 301 /blog/2009.11.21-using-emacs-to-develop-mojo-apps-for-webos /posts/2009/11/using-emacs-to-develop-mojo-apps-for-webos
|
||||
Redirect 301 /blog/2010.01.17-working-with-c-style-structs-in-ruby /posts/2010/01/working-with-c-style-structs-in-ruby
|
||||
Redirect 301 /blog/2010.01.18-basics-of-the-mach-o-file-format /posts/2010/01/basics-of-the-mach-o-file-format
|
||||
Redirect 301 /blog/2010.01.20-a-preview-of-mach-o-file-generation /posts/2010/01/a-preview-of-mach-o-file-generation
|
||||
Redirect 301 /blog/2010.11.04-37signals-chalk-dissected /posts/2010/11/37signals-chalk-dissected
|
||||
Redirect 301 /blog/2011.11.27-lights /posts/2011/11/lights
|
||||
Redirect 301 /blog/2011.11.27-recovering-old-posts /posts/2011/11/recovering-old-posts
|
||||
Redirect 301 /blog/2011.12.10-static-url-shortener-using-htaccess /posts/2011/12/static-url-shortener-using-htaccess
|
||||
Redirect 301 /blog/2011.12.11-pure-css3-images-hmm-maybe-later /posts/2011/12/pure-css3-images-hmm-maybe-later
|
||||
Redirect 301 /blog/2011.12.15-i-see-http /posts/2011/12/i-see-http
|
||||
Redirect 301 /blog/2011.12.19-my-kind-of-feature-checklist /posts/2011/12/my-kind-of-feature-checklist
|
||||
Redirect 301 /blog/2011.12.22-new-release-of-firefox-for-android-optimized-for-tablets /posts/2011/12/new-release-of-firefox-for-android-optimized-for-tablets
|
||||
Redirect 301 /blog/2011.12.25-the-broken-pixel-theory /posts/2011/12/the-broken-pixel-theory
|
||||
Redirect 301 /blog/2012.01.04-yak-shaving /posts/2012/01/yak-shaving
|
||||
Redirect 301 /blog/2012.01.09-the-40-standup-desk /posts/2012/01/the-40-standup-desk
|
||||
Redirect 301 /blog/2012.01.17-recovering-from-a-computer-science-education /posts/2012/01/recovering-from-a-computer-science-education
|
||||
Redirect 301 /blog/2012.01.17-sopa-lives-and-mpaa-calls-protests-an-abuse-of-power /posts/2012/01/sopa-lives-and-mpaa-calls-protests-an-abuse-of-power
|
||||
Redirect 301 /blog/2012.01.19-fujitsu-has-lost-their-mind /posts/2012/01/fujitsu-has-lost-their-mind
|
||||
Redirect 301 /blog/2013.03.06-zelda-tones-for-ios /posts/2013/03/zelda-tones-for-ios
|
||||
Redirect 301 /blog/2013.09.27-linky /posts/2013/09/linky
|
||||
Redirect 301 /blog/2014.02.03-ember-structure /posts/2014/02/ember-structure
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
"subtitle": "words mean things",
|
||||
"url": "http://samhuri.net",
|
||||
"styles": [
|
||||
"/css/normalize.css",
|
||||
"/css/style.css"
|
||||
],
|
||||
"scripts": [
|
||||
|
|
@ -15,8 +16,11 @@
|
|||
"tags": [
|
||||
"ember.js"
|
||||
],
|
||||
"author": "sjs",
|
||||
"url": "/posts/2014.02.03-ember-structure",
|
||||
"body": "<p>I made a diagram of an Ember app. There’s <a href=\"http://discuss.emberjs.com/t/diagram-of-an-ember-apps-structure/4060\">a discussion about it</a> on the\n<a href=\"http://discuss.emberjs.com/\">Ember Discussion Forum</a>. Here is the source file, created with OmniGraffle: <a href=\"https://www.dropbox.com/s/onnmn1oq096hv5f/Ember%20structure.graffle\">Ember structure.graffle</a></p>\n\n<p><img src=\"/f/ember-structure.png\" alt=\"Structure of an Ember app\" /></p>\n"
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2014/02/ember-structure",
|
||||
"body": "<p>I made a diagram of an Ember app. There’s <a href=\"http://discuss.emberjs.com/t/diagram-of-an-ember-apps-structure/4060\">a discussion about it</a> on the\n<a href=\"http://discuss.emberjs.com/\">Ember Discussion Forum</a>. Here is the source file, created with OmniGraffle: <a href=\"https://www.dropbox.com/s/onnmn1oq096hv5f/Ember%20structure.graffle\">Ember structure.graffle</a></p>\n\n<p><a href=\"/f/ember-structure.png\"><img src=\"/f/ember-structure.png\" alt=\"Structure of an Ember app\" /></a></p>\n"
|
||||
},
|
||||
"archive": {
|
||||
"title": "Archive"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
<% } -%>
|
||||
|
||||
<head>
|
||||
|
||||
<% if (typeof title != 'undefined') { -%>
|
||||
<title><%= title %> - <%= site %></title>
|
||||
<% } else { -%>
|
||||
|
|
@ -32,7 +33,7 @@
|
|||
<% } -%>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<link rel="icon" type="image/gif" href="/images/s.gif">
|
||||
|
||||
|
|
@ -40,6 +41,7 @@
|
|||
<link rel="stylesheet" href="<%= allStyles[i] %>">
|
||||
<% } -%>
|
||||
|
||||
<link rel="author" type="text/plain" href="/humans.txt">
|
||||
<link rel="alternate" type="application/rss+xml" href="/feed.xml" title="<%= site %>">
|
||||
|
||||
<script>
|
||||
|
|
@ -59,22 +61,58 @@
|
|||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<h1><a href="/"><%= site %></a></h1>
|
||||
<h4>by <%= author %></h4>
|
||||
|
||||
<header class="primary">
|
||||
<div class="title">
|
||||
<h1><a href="/"><%= site %></a></h1>
|
||||
<br>
|
||||
<h4>By <%= author %></h4>
|
||||
</div>
|
||||
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="/archive">Archive</a></li>
|
||||
<li><a href="/projects">Projects</a></li>
|
||||
<li><a href="/feed.xml">RSS</a></li>
|
||||
<li><a href="https://twitter.com/_sjs">Twitter</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
</header>
|
||||
|
||||
<nav>
|
||||
<a href="/archive">archive</a>
|
||||
<a href="/projects">projects</a>
|
||||
<a href="/feed.xml">rss feed</a>
|
||||
<a href="https://twitter.com/_sjs">twitter</a>
|
||||
</nav>
|
||||
<% if (typeof link != 'undefined') { -%>
|
||||
<article class="container">
|
||||
<header>
|
||||
<h2><a href="<%= link %>">→ <%= title %></a></h2>
|
||||
<time><%= date %></time>
|
||||
</header>
|
||||
<%- yield %>
|
||||
<p><a class="permalink" href="<%= url %>">∞</a></p>
|
||||
</article>
|
||||
<% } else if (typeof date != 'undefined') { -%>
|
||||
<article class="container">
|
||||
<header>
|
||||
<h2><a href="<%= url %>"><%= title %></a></h2>
|
||||
<time><%= date %></time>
|
||||
</header>
|
||||
<%- yield %>
|
||||
</article>
|
||||
<% } else if (typeof title != 'undefined') { -%>
|
||||
<div class="container">
|
||||
<h2><%= title %></h2>
|
||||
<%- yield %>
|
||||
<div class="clearfix">
|
||||
</div>
|
||||
<% } else { -%>
|
||||
<div class="container">
|
||||
<%- yield %>
|
||||
<div class="clearfix">
|
||||
</div>
|
||||
<% } -%>
|
||||
|
||||
<%- yield %>
|
||||
|
||||
<footer>
|
||||
Copyright © 2006 - <%= new Date().getFullYear() %> <a href="mailto:<%= email %>"><%= author %></a>
|
||||
<footer class="container">
|
||||
© 2006 - <%= new Date().getFullYear() %> <a href="mailto:<%= email %>"><%= author %></a>
|
||||
</footer>
|
||||
|
||||
<% for (var i in allScripts) { -%>
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<article>
|
||||
<header>
|
||||
<h2><a href="{{link}}">{{title}}</a></h2>
|
||||
<time>{{date}}</time>
|
||||
</header>
|
||||
{{{body}}}
|
||||
<p><a class="permalink" href="{{url}}">∞</a></p>
|
||||
</article>
|
||||
|
|
@ -1,10 +1,51 @@
|
|||
<ul id="index">
|
||||
<% for (var slug in public.posts._data) { %>
|
||||
<% var post = public.posts._data[slug] %>
|
||||
<% if (slug == 'index' || slug[0] == '_' || post.hidden) continue %>
|
||||
<% function pad(n) { -%>
|
||||
<% return +n < 10 ? '0' + n : String(n) -%>
|
||||
<% } -%>
|
||||
|
||||
<% var _months = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ') -%>
|
||||
<% function formatDate(t) { -%>
|
||||
<% var d = new Date(t) -%>
|
||||
<% return _months[d.getMonth()] + ' ' + d.getDate() -%>
|
||||
<% } -%>
|
||||
|
||||
<% function sortPosts(dir) { -%>
|
||||
<% var slugs = Object.keys(dir._data) -%>
|
||||
<% var posts = slugs.map(function(slug) { return dir._data[slug] }) -%>
|
||||
<% posts.sort(function(a, b) { -%>
|
||||
<% var t1 = a.timestamp -%>
|
||||
<% var t2 = b.timestamp -%>
|
||||
<% return t1 < t2 ? 1 : (t1 > t2 ? -1 : 0) -%>
|
||||
<% }) -%>
|
||||
<% return posts -%>
|
||||
<% } -%>
|
||||
|
||||
<% function posts(dir, year) { -%>
|
||||
<% if (!dir) return -%>
|
||||
|
||||
<h3><%= year %></h3>
|
||||
|
||||
<% for (var month = 12; month >= 1; month--) { -%>
|
||||
<% var monthDir = dir[pad(month)] -%>
|
||||
<% if (!monthDir) continue -%>
|
||||
<ul class="archive">
|
||||
<% var posts = sortPosts(monthDir) -%>
|
||||
<% for (var i in posts) { -%>
|
||||
<% var post = posts[i] -%>
|
||||
<% if (post.hidden) continue -%>
|
||||
<li>
|
||||
<span class="date"><%= post.date %></span>
|
||||
<a href="<%= post.url %>"><%= post.title %></a>
|
||||
<% if (post.link) { -%>
|
||||
<a href="<%= post.url %>">→ <%= post.title %></a>
|
||||
<% } else { -%>
|
||||
<a href="<%= post.url %>"><%= post.title %></a>
|
||||
<% } -%>
|
||||
<span class="date"><%= formatDate(1000 * post.timestamp) %></span>
|
||||
</li>
|
||||
<% } %>
|
||||
<% } -%>
|
||||
</ul>
|
||||
<% } -%>
|
||||
<% } -%>
|
||||
|
||||
<% var year = new Date().getFullYear(); -%>
|
||||
<% for (; year >= 2006; year--) { -%>
|
||||
<% posts(public.posts[year], year) -%>
|
||||
<% } -%>
|
||||
|
|
|
|||
|
|
@ -1,140 +0,0 @@
|
|||
/* phones and iPad */
|
||||
|
||||
@media only screen and (orientation: portrait) and (min-device-width: 768px) and (max-device-width: 1024px),
|
||||
only screen and (min-device-width: 320px) and (max-device-width: 480px),
|
||||
only screen and (max-device-width: 800px)
|
||||
{
|
||||
ul.nav { padding: 0.5em
|
||||
; width: 60%
|
||||
; max-width: 600px
|
||||
}
|
||||
|
||||
ul.nav li { display: block
|
||||
; font-size: 1.5em
|
||||
; line-height: 1.8em
|
||||
}
|
||||
|
||||
ul.nav li:after { content: '' }
|
||||
}
|
||||
|
||||
/* phones */
|
||||
@media only screen and (min-device-width: 320px) and (max-device-width: 480px),
|
||||
handheld and (max-device-width: 800px)
|
||||
{
|
||||
/* common */
|
||||
|
||||
h1 { font-size: 2em
|
||||
; margin-top: 0.5em
|
||||
}
|
||||
h2 { font-size: 1.3em; line-height: 1.2em }
|
||||
|
||||
.navbar { font-size: 0.9em }
|
||||
.navbar { width: 32% }
|
||||
#breadcrumbs { margin-left: 5px }
|
||||
|
||||
#show-posts { margin-top: 1em
|
||||
; font-size: 0.8em
|
||||
}
|
||||
|
||||
#forkme { display: none }
|
||||
|
||||
ul.nav { width: 80% }
|
||||
|
||||
ul.nav li { font-size: 1.4em
|
||||
; line-height: 1.6em
|
||||
}
|
||||
|
||||
td { font-size: 1em
|
||||
; line-height: 1.1em
|
||||
}
|
||||
|
||||
img { max-width: 100% }
|
||||
|
||||
#index { width: 90%
|
||||
; min-width: 200px
|
||||
; margin: 0.3em auto 1em
|
||||
; padding: 0.5em
|
||||
; font-size: 1em
|
||||
}
|
||||
|
||||
#index li > span.date { display: block
|
||||
; float: none
|
||||
; color: #666
|
||||
; font-size: 0.8em
|
||||
}
|
||||
|
||||
#article h1,
|
||||
article h1 { font-size: 1.6em
|
||||
; line-height: 1.2em
|
||||
; margin-top: 0
|
||||
}
|
||||
|
||||
article h2 { font-size: 1.4em }
|
||||
|
||||
#article,
|
||||
article { min-width: 310px
|
||||
; margin: 0
|
||||
; padding: 0.6em 0.4em
|
||||
; font-size: 0.8em
|
||||
}
|
||||
|
||||
.time,
|
||||
time { font-size: 1.0em }
|
||||
|
||||
pre, .gist { font-size: 0.8em }
|
||||
|
||||
#comment-stuff { padding: 0
|
||||
; margin-top: 2em
|
||||
}
|
||||
|
||||
#comments { width: 100% }
|
||||
|
||||
#comment-form { width: 90%
|
||||
; margin: 0 auto
|
||||
}
|
||||
|
||||
input[type=text],
|
||||
textarea { font-size: 1.2em
|
||||
; width: 95%
|
||||
}
|
||||
|
||||
input[type=submit] { font-size: 1em }
|
||||
|
||||
/* projects */
|
||||
#info { width: 70%
|
||||
; padding: 0 1em
|
||||
}
|
||||
|
||||
#info > div { clear: left
|
||||
; width: 100%
|
||||
; max-width: 100%
|
||||
; padding: 0.5em 0.2em 1em
|
||||
; border-left: none
|
||||
; font-size: 1em
|
||||
}
|
||||
|
||||
#stats { font-size: 1em; margin-bottom: 0.5em }
|
||||
|
||||
footer { margin: 0
|
||||
; padding: 0.5em 0
|
||||
; font-size: 1em
|
||||
; width: 100%
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* landscape */
|
||||
|
||||
@media only screen and (orientation: landscape) and (min-device-width: 768px) and (max-device-width: 1024px),
|
||||
only screen and (orientation: landscape) and (min-device-width: 320px) and (max-device-width: 480px),
|
||||
handheld and (orientation: landscape) and (max-device-width: 800px)
|
||||
{
|
||||
body { font-size: 0.8em }
|
||||
}
|
||||
|
||||
|
||||
/* iPad portrait */
|
||||
@media only screen and (orientation: portrait) and (min-device-width: 768px) and (max-device-width: 1024px)
|
||||
{
|
||||
article > header > h1 { font-size: 1.8em }
|
||||
}
|
||||
423
public/css/normalize.css.less
Normal file
423
public/css/normalize.css.less
Normal file
|
|
@ -0,0 +1,423 @@
|
|||
/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined in IE 8/9.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block; /* 1 */
|
||||
vertical-align: baseline; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9.
|
||||
* Hide the `template` element in IE, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow displayed oddly in IE 9.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari 5.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contain overflow in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address odd `em`-unit font size rendering in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||
* styling of `select`, unless a `border` property is set.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 1. Correct color not being inherited.
|
||||
* Known issue: affects color of disabled elements.
|
||||
* 2. Correct font properties not being inherited.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
color: inherit; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `overflow` set to `hidden` in IE 8/9/10.
|
||||
*/
|
||||
|
||||
button {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Firefox, IE 8+, and Opera
|
||||
* Correct `select` style inheritance in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* It's recommended that you don't attempt to style these elements.
|
||||
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||
*
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||
* `font-size` values of the `input`, it causes the cursor style of the
|
||||
* decrement button to change from `default` to `text`.
|
||||
*/
|
||||
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||
* padding (and `textfield` appearance).
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default vertical scrollbar in IE 8/9.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Don't inherit the `font-weight` (applied by a rule above).
|
||||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||
*/
|
||||
|
||||
optgroup {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
padding: 0;
|
||||
}
|
||||
|
|
@ -1,179 +0,0 @@
|
|||
body { margin: 0
|
||||
; padding: 0
|
||||
}
|
||||
|
||||
h1 { margin: 0
|
||||
; padding: 0.2em
|
||||
; color: #9ab
|
||||
}
|
||||
|
||||
.center { text-align: center
|
||||
; font-size: 1.2em
|
||||
}
|
||||
|
||||
.hidden { display: none }
|
||||
|
||||
#index { width: 80%
|
||||
; min-width: 300px
|
||||
; max-width: 800px
|
||||
; border: solid 1px #999
|
||||
; -moz-border-radius: 10px
|
||||
; -webkit-border-radius: 10px
|
||||
; border-radius: 10px
|
||||
; background-color: #eee
|
||||
; margin: 1em auto
|
||||
; padding: 1em
|
||||
; font-size: 1.2em
|
||||
; line-height: 1.5em
|
||||
; list-style-type: none
|
||||
}
|
||||
|
||||
.date { float: right }
|
||||
|
||||
#article,
|
||||
article { width: 80%
|
||||
; min-width: 400px
|
||||
; max-width: 800px
|
||||
; margin: 0.6em auto
|
||||
; font-size: 1.2em
|
||||
; line-height: 1.4em
|
||||
; color: #222
|
||||
}
|
||||
|
||||
#article h1,
|
||||
article h1 { text-align: left
|
||||
; font-size: 2em
|
||||
; line-height: 1.2em
|
||||
; font-weight: normal
|
||||
; color: #222
|
||||
; margin: 0
|
||||
; padding-left: 0
|
||||
}
|
||||
|
||||
#article h1 a,
|
||||
article h1 a { color: #222
|
||||
; text-decoration: underline
|
||||
; border-bottom: none
|
||||
; text-shadow: #ccc 1px 1px 5px
|
||||
; -webkit-transition: text-shadow 0.4s ease-in
|
||||
}
|
||||
|
||||
#article h1 a:hover,
|
||||
article h1 a:hover { text-shadow: 1px 1px 6px #ffc
|
||||
; color: #000
|
||||
}
|
||||
|
||||
#article h2,
|
||||
article h2 { font-size: 1.8em
|
||||
; font-weight: normal
|
||||
; text-align: left
|
||||
; margin: 1em 0
|
||||
; padding: 0
|
||||
; color: #222
|
||||
}
|
||||
|
||||
#article h3,
|
||||
article h3 { font-size: 1.6em
|
||||
; font-weight: normal
|
||||
}
|
||||
|
||||
.time,
|
||||
time { color: #444
|
||||
; font-size: 1.2em
|
||||
}
|
||||
|
||||
.permalink { font-size: 1em }
|
||||
|
||||
.gist { font-size: 0.8em }
|
||||
|
||||
/* show discussion */
|
||||
#sd-container { margin: 3em 0 }
|
||||
|
||||
input[type=submit],
|
||||
#sd { border: solid 1px #999
|
||||
; border-right-color: #333
|
||||
; border-bottom-color: #333
|
||||
; padding: 0.4em 1em
|
||||
; color: #444
|
||||
; background-color: #ececec
|
||||
; -moz-border-radius: 5px
|
||||
; -webkit-border-radius: 5px
|
||||
; border-radius: 5px
|
||||
; text-decoration: none
|
||||
; margin: 0 2px 2px 0
|
||||
}
|
||||
|
||||
input[type=submit]:active,
|
||||
#sd:active { margin: 2px 0 0 2px
|
||||
; color: #000
|
||||
; background-color: #ffc
|
||||
}
|
||||
|
||||
#comment-stuff { display: none
|
||||
; color: #efefef
|
||||
; margin: 0
|
||||
; padding: 2em 0
|
||||
}
|
||||
|
||||
#comments-spinner { text-align: center }
|
||||
|
||||
#comments { width: 70%
|
||||
; max-width: 600px
|
||||
; margin: 0 auto
|
||||
}
|
||||
|
||||
.comment { color: #555
|
||||
; border-top: solid 2px #ccc
|
||||
; padding-bottom: 2em
|
||||
; margin-bottom: 2em
|
||||
}
|
||||
|
||||
.comment big { font-size: 2em
|
||||
; font-family: Verdana, sans-serif
|
||||
}
|
||||
|
||||
#comment-form { width: 400px
|
||||
; margin: 2em auto 0
|
||||
}
|
||||
|
||||
input[type=text],
|
||||
textarea { font-size: 1.4em
|
||||
; color: #333
|
||||
; width: 100%
|
||||
; padding: 0.2em
|
||||
; border: solid 1px #999
|
||||
; -moz-border-radius: 5px
|
||||
; -webkit-border-radius: 5px
|
||||
; border-radius: 5px
|
||||
; font-family: verdana, sans-serif
|
||||
}
|
||||
|
||||
input:focus[type=text],
|
||||
textarea:focus { border: solid 1px #333 }
|
||||
|
||||
textarea { height: 100px }
|
||||
|
||||
input[type=submit] { font-size: 1.1em
|
||||
; cursor: pointer
|
||||
}
|
||||
|
||||
pre { background-color: #eeeef3
|
||||
; margin: 0.5em 1em 1em
|
||||
; padding: 0.5em
|
||||
; border: dashed 1px #ccc
|
||||
}
|
||||
|
||||
footer { margin: 0 auto
|
||||
; padding: 0.2em 0
|
||||
; border-top: solid 1px #ddd
|
||||
; clear: both
|
||||
; width: 80%
|
||||
}
|
||||
|
||||
footer p { margin: 0.5em }
|
||||
|
||||
footer a { border-bottom: none
|
||||
; color: #25c
|
||||
; font-size: 1.2em
|
||||
; text-decoration: none
|
||||
}
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
td { font-size: 1.5em
|
||||
; line-height: 1.6em
|
||||
}
|
||||
|
||||
td:nth-child(2) { padding: 0 10px }
|
||||
|
||||
.highlight { font-size: 1.2em }
|
||||
|
||||
#stats a { text-decoration: none }
|
||||
|
||||
#info { text-align: center
|
||||
; margin: 1em auto
|
||||
; padding: 1em
|
||||
; border: solid 1px #ccc
|
||||
; width: 90%
|
||||
; max-width: 950px
|
||||
; background-color: #fff
|
||||
; -moz-border-radius: 20px
|
||||
; -webkit-border-radius: 20px
|
||||
; border-radius: 20px
|
||||
}
|
||||
|
||||
h4 { margin: 0.5em 0 0.7em }
|
||||
|
||||
#info > div { text-align: center
|
||||
; font-size: 1.3em
|
||||
; width: 31%
|
||||
; max-width: 400px
|
||||
; float: left
|
||||
; display: inline
|
||||
; padding: 0.5em 0.2em
|
||||
; border-left: dashed 1px #aaa
|
||||
}
|
||||
|
||||
#info > div:first-child { border-left: none }
|
||||
|
||||
#info ul { list-style-type: none
|
||||
; text-align: center
|
||||
; padding: 0
|
||||
; margin: 0
|
||||
}
|
||||
|
||||
#info li { padding: 0.2em 0
|
||||
; margin: 0
|
||||
}
|
||||
|
||||
#info > br.clear { clear: both }
|
||||
|
||||
#contributors-box a { line-height: 1.8em }
|
||||
|
||||
/* from projects/index, might not apply to projects/foo */
|
||||
#gh { text-align: center }
|
||||
#gh img { border: none }
|
||||
span { padding: 5px }
|
||||
#forkme { display: none }
|
||||
#projects li p { margin: 0 }
|
||||
#projects li p.description
|
||||
{ font-size: 0.6em
|
||||
; line-height: 1em
|
||||
; color: #444
|
||||
; margin-bottom: 0.5em
|
||||
}
|
||||
#stats a { text-decoration: none }
|
||||
|
|
@ -1,90 +0,0 @@
|
|||
TODO: include mobile.css here, just one set of styles
|
||||
|
||||
body { background-color: #f7f7f7
|
||||
; color: #222
|
||||
; font-family: 'Helvetica Neue', Verdana, sans-serif
|
||||
}
|
||||
|
||||
h1 { text-align: center
|
||||
; font-size: 2em
|
||||
; font-weight: normal
|
||||
; margin: 0.8em 0 0.4em
|
||||
; padding: 0
|
||||
}
|
||||
|
||||
h2 { text-align: center
|
||||
; font-size: 1.7em
|
||||
; line-height: 1.1em
|
||||
; font-weight: normal
|
||||
; margin: 0.2em 0 1em
|
||||
; padding: 0
|
||||
}
|
||||
|
||||
a { color: #0E539C }
|
||||
|
||||
a.img { border: none }
|
||||
|
||||
.navbar { display: inline-block
|
||||
; width: 33%
|
||||
; font-size: 1.5em
|
||||
; line-height: 1.8em
|
||||
; margin: 0
|
||||
; padding: 0
|
||||
}
|
||||
|
||||
.navbar a { text-shadow: none }
|
||||
|
||||
#breadcrumbs a { color: #222 }
|
||||
#title { text-align: center }
|
||||
#archive { text-align: right }
|
||||
|
||||
#forkme { position: absolute
|
||||
; top: 0
|
||||
; right: 0
|
||||
; border: none
|
||||
}
|
||||
|
||||
ul.nav { text-align: center
|
||||
; max-width: 400px
|
||||
; margin: 0 auto
|
||||
; padding: 1em
|
||||
; border: solid 1px #ccc
|
||||
; background-color: #fff
|
||||
; -moz-border-radius: 20px
|
||||
; -webkit-border-radius: 20px
|
||||
; border-radius: 20px
|
||||
}
|
||||
|
||||
ul.nav li { display: block
|
||||
; font-size: 1.6em
|
||||
; line-height: 1.8em
|
||||
; margin: 0
|
||||
; padding: 0
|
||||
}
|
||||
|
||||
ul.nav li a { padding: 5px
|
||||
; text-decoration: none
|
||||
; border-bottom: solid 1px #fff
|
||||
; text-shadow: #ccc 2px 2px 3px
|
||||
}
|
||||
ul.nav li a:visited { color: #227 }
|
||||
|
||||
ul.nav li a:hover,
|
||||
ul.nav li a:active { text-shadow: #cca 2px 2px 3px
|
||||
; border-bottom: solid 1px #aaa
|
||||
}
|
||||
|
||||
ul.nav li a:active { text-shadow: none }
|
||||
|
||||
footer { text-align: center
|
||||
; font-size: 1.2em
|
||||
; margin: 1em
|
||||
}
|
||||
|
||||
footer a { border-bottom: none }
|
||||
|
||||
#promote-js { margin-top: 3em
|
||||
; text-align: center
|
||||
}
|
||||
|
||||
#promote-js img { border: none }
|
||||
276
public/css/style.css.less
Normal file
276
public/css/style.css.less
Normal file
|
|
@ -0,0 +1,276 @@
|
|||
/**
|
||||
* Basic responsive layout from http://www.adamkaplan.me/grid/
|
||||
*/
|
||||
|
||||
/* Small screen is the default set of styles */
|
||||
@screen-medium: 40rem; /* ~ 640px */
|
||||
@screen-large: 64rem; /* ~ 1024px */
|
||||
|
||||
html { font-size: 100%; }
|
||||
|
||||
@media (min-width: @screen-medium) {
|
||||
html { font-size: 112%; }
|
||||
}
|
||||
|
||||
@media (min-width: @screen-large) {
|
||||
html { font-size: 120%; }
|
||||
}
|
||||
|
||||
*, *:before, *:after {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin: 0 auto;
|
||||
max-width: 48rem;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
@media (min-width: @screen-medium) {
|
||||
.column {
|
||||
float: left;
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
}
|
||||
|
||||
.column.full { width: 100%; }
|
||||
.column.two-thirds { width: 66.7%; }
|
||||
.column.half { width: 50%; }
|
||||
.column.third { width: 33.3%; }
|
||||
.column.fourth { width: 24.95%; }
|
||||
.column.flow-opposite { float: right; }
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Modern clearfix hack
|
||||
* http://nicolasgallagher.com/micro-clearfix-hack/
|
||||
*/
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
content: " ";
|
||||
display: table;
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Super barebones responsive images
|
||||
*/
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Site styles
|
||||
*/
|
||||
|
||||
// colors
|
||||
@background: #f7f7f7;
|
||||
@text: #222;
|
||||
@highlight: #a00;
|
||||
|
||||
// font weight
|
||||
@weight-thin: 300;
|
||||
|
||||
body {
|
||||
background-color: @background;
|
||||
color: @text;
|
||||
font-family: 'Helvetica Neue', 'Verdana', 'Roboto', sans-serif;
|
||||
}
|
||||
|
||||
a {
|
||||
color: lighten(@highlight, 5%);
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: @highlight;
|
||||
}
|
||||
|
||||
header.primary {
|
||||
background-color: darken(@text, 5%);
|
||||
color: @background;
|
||||
padding: 0.4rem 0.8rem;
|
||||
|
||||
.title {
|
||||
float: left;
|
||||
}
|
||||
|
||||
h1, h4 {
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-weight: @weight-thin;
|
||||
}
|
||||
|
||||
h1 {
|
||||
height: 1.3rem;
|
||||
font-size: 1.3rem;
|
||||
|
||||
a, a:visited {
|
||||
color: @background;
|
||||
}
|
||||
}
|
||||
|
||||
h4 {
|
||||
height: 0.8rem;
|
||||
font-size: 0.8rem;
|
||||
color: darken(@background, 10%);
|
||||
}
|
||||
|
||||
nav {
|
||||
|
||||
padding-top: 0.5rem;
|
||||
clear: left;
|
||||
|
||||
@media (min-width: @screen-medium) {
|
||||
float: right;
|
||||
clear: none;
|
||||
|
||||
padding: 0.55rem 0;
|
||||
height: 1rem;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
a, a:visited {
|
||||
color: lighten(@highlight, 15%);
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
@media (min-width: @screen-medium) {
|
||||
font-weight: @weight-thin;
|
||||
}
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
li:after {
|
||||
font-weight: normal;
|
||||
content: ' \2022 ';
|
||||
}
|
||||
|
||||
li:last-child:after {
|
||||
content: '';
|
||||
}
|
||||
|
||||
} /* ul */
|
||||
} /* nav */
|
||||
} /* header.primary */
|
||||
|
||||
footer {
|
||||
border-top: solid 1px lighten(@text, 70%);
|
||||
padding: 1rem 0;
|
||||
text-align: center;
|
||||
|
||||
a, a:visited {
|
||||
color: @text;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Archive
|
||||
*/
|
||||
|
||||
ul.archive {
|
||||
padding-left: 0;
|
||||
margin-left: 5%;
|
||||
margin-bottom: 2rem;
|
||||
list-style-type: none;
|
||||
|
||||
@media (min-width: @screen-medium) {
|
||||
margin-right: 5%;
|
||||
}
|
||||
|
||||
li {
|
||||
margin: 0.8rem 0;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.date {
|
||||
font-size: 80%;
|
||||
padding-left: 0.5rem;
|
||||
color: lighten(@text, 30%);
|
||||
// float: right;
|
||||
} /* .date */
|
||||
|
||||
} /* li */
|
||||
|
||||
} /* ul.archive */
|
||||
|
||||
|
||||
/**
|
||||
* Projects
|
||||
*/
|
||||
|
||||
#octocat {
|
||||
position: fixed;
|
||||
bottom: 1rem;
|
||||
width: 96%;
|
||||
text-align: center;
|
||||
z-index: -1;
|
||||
opacity: 0.1;
|
||||
|
||||
@media (min-width: @screen-medium) {
|
||||
right: 1rem;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.project-listing {
|
||||
margin-bottom: 1rem;
|
||||
|
||||
h4, p {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.project-stats {
|
||||
text-align: center;
|
||||
margin: 2rem 0;
|
||||
|
||||
a {
|
||||
padding: 0 0.3rem;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.project-info {
|
||||
|
||||
h3 {
|
||||
text-align: center;
|
||||
margin-bottom: 0.2rem;
|
||||
|
||||
@media (min-width: @screen-medium) {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
.column {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 0;
|
||||
|
||||
li {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
10
public/humans.txt
Normal file
10
public/humans.txt
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
/* SITE */
|
||||
|
||||
Site name: samhuri.net
|
||||
Site URL: http://samhuri.net
|
||||
Contact: sami@samhuri.net
|
||||
Twitter: @_sjs
|
||||
Location: Victoria, British Columbia, Canada
|
||||
Standards: HTML 5, CSS 3, ES 5
|
||||
Components: Mostly custom - Normalize.css - Compiled with Harp
|
||||
Source: https://github.com/samsonjs/samhuri.net
|
||||
|
|
@ -1,9 +1,20 @@
|
|||
<% var post = public._data.latest %>
|
||||
<% var post = public._data.latest -%>
|
||||
|
||||
<article>
|
||||
<header>
|
||||
<h1><a href="<%= post.url %>"><%= post.title %></a></h1>
|
||||
<time><%= post.date %></time>
|
||||
</header>
|
||||
<%- post.body %>
|
||||
</article>
|
||||
<% if (post.link) { -%>
|
||||
<article>
|
||||
<header>
|
||||
<h2><a href="<%= post.link %>"><%= post.title %></a></h2>
|
||||
<time><%= post.date %></time>
|
||||
</header>
|
||||
<%- post.body %>
|
||||
<p><a class="permalink" href="<%= post.url %>">∞</a></p>
|
||||
</article>
|
||||
<% } else { -%>
|
||||
<article>
|
||||
<header>
|
||||
<h2><a href="<%= post.url %>"><%= post.title %></a></h2>
|
||||
<time><%= post.date %></time>
|
||||
</header>
|
||||
<%- post.body %>
|
||||
</article>
|
||||
<% } -%>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ h1, h3, p, footer { text-align: center }
|
|||
<footer>made by <a href=http://reddit.com/user/sjs>sjs</a></footer>
|
||||
<script>
|
||||
(function() {
|
||||
$user = null, $answer = null;
|
||||
var $user = null, $answer = null;
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
$user = document.getElementById('user');
|
||||
$answer = document.getElementById('answer');
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@
|
|||
// Data is also available via the `data` property.
|
||||
Resource.prototype.fetch = function(cb) {
|
||||
if (this.data) {
|
||||
cb(null, this.data)
|
||||
cb.call(this, null, this.data)
|
||||
}
|
||||
else {
|
||||
var self = this
|
||||
|
|
|
|||
|
|
@ -24,11 +24,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
function textHighlight(id, t) {
|
||||
text(id, t)
|
||||
document.getElementById(id).className = ' highlight'
|
||||
}
|
||||
|
||||
function langsByUsage(langs) {
|
||||
return Object.keys(langs).sort(function(a, b) {
|
||||
return langs[a] < langs[b] ? -1 : 1
|
||||
|
|
@ -57,23 +52,31 @@
|
|||
html('langs', listify(langsByUsage(langs)))
|
||||
}
|
||||
|
||||
function updateN(name, things) {
|
||||
var pluralized = things.length == 1 ? name.replace(/s$/, '') : name
|
||||
textHighlight('n' + name, things.length + ' ' + pluralized)
|
||||
function updateN(name, n) {
|
||||
var pluralized = n == 1 ? name : name + 's'
|
||||
text('n' + name, (n == 0 ? 'no' : n) + ' ' + pluralized)
|
||||
}
|
||||
|
||||
function updateStars(n) {
|
||||
html('nstar', n + ' ✭')
|
||||
}
|
||||
|
||||
var Months = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ')
|
||||
|
||||
var t = data.get('t-' + SJS.projectName)
|
||||
if (!t || +new Date() - t > 3600 * 1000) {
|
||||
console.log('stale ' + String(t))
|
||||
data.set('t-' + SJS.projectName, +new Date())
|
||||
GITR.repo('samsonjs', SJS.projectName)
|
||||
.fetchBranches(function(err, branches) {
|
||||
var repo = GITR.repo('samsonjs', SJS.projectName)
|
||||
repo
|
||||
.fetch(function(err, repo) {
|
||||
if (err) {
|
||||
text('branches', '(oops)')
|
||||
} else {
|
||||
data.set('branches', branches)
|
||||
updateBranches(SJS.projectName, branches)
|
||||
text('updated', '(oops)')
|
||||
return
|
||||
}
|
||||
var d = new Date(repo.updatedAt)
|
||||
var updated = Months[d.getMonth()] + ' ' + d.getDate() + ', ' + d.getFullYear()
|
||||
text('updated', updated)
|
||||
})
|
||||
.fetchLanguages(function(err, langs) {
|
||||
if (err) {
|
||||
|
|
@ -93,27 +96,32 @@
|
|||
})
|
||||
.fetchWatchers(function(err, users) {
|
||||
if (err) {
|
||||
text('nwatchers', '?')
|
||||
text('nstar', '?')
|
||||
} else {
|
||||
data.set('watchers', users)
|
||||
updateN('watchers', users)
|
||||
data.set('stars', users)
|
||||
updateStars(users.length)
|
||||
}
|
||||
})
|
||||
.fetchForks(function(err, repos) {
|
||||
if (err) {
|
||||
text('nforks', '?')
|
||||
text('nfork', '?')
|
||||
} else {
|
||||
data.set('forks', repos)
|
||||
updateN('forks', repos)
|
||||
updateN('fork', repos.length)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
console.log('hit ' + t + ' (' + (+new Date() - t) + ')')
|
||||
updateBranches(SJS.projectName, data.get('branches'))
|
||||
updateLangs(data.get('langs'))
|
||||
updateContributors(data.get('contributors'))
|
||||
updateN('watchers', data.get('watchers'))
|
||||
updateN('forks', data.get('forks'))
|
||||
try {
|
||||
updateBranches(SJS.projectName, data.get('branches'))
|
||||
updateLangs(data.get('langs'))
|
||||
updateContributors(data.get('contributors'))
|
||||
updateStars(data.get('stars').length)
|
||||
updateN('fork', data.get('forks').length)
|
||||
} catch (e) {
|
||||
data.set('t-' + SJS.projectName, null)
|
||||
initProject()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
178
public/posts/2006/02/_data.json
Normal file
178
public/posts/2006/02/_data.json
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
{
|
||||
"first-post": {
|
||||
"title": "First Post!",
|
||||
"date": "February 8, 2006",
|
||||
"timestamp": 1139368860,
|
||||
"tags": [
|
||||
"life"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/02/first-post"
|
||||
},
|
||||
"touch-screen-on-steroids": {
|
||||
"title": "Touch Screen on Steroids",
|
||||
"date": "February 8, 2006",
|
||||
"timestamp": 1139407560,
|
||||
"tags": [
|
||||
"technology",
|
||||
"touch"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/02/touch-screen-on-steroids"
|
||||
},
|
||||
"urban-extreme-gymnastics": {
|
||||
"title": "Urban Extreme Gymnastics?",
|
||||
"date": "February 15, 2006",
|
||||
"timestamp": 1140028860,
|
||||
"tags": [
|
||||
"amusement"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/02/urban-extreme-gymnastics"
|
||||
},
|
||||
"girlfriend-x": {
|
||||
"title": "Girlfriend X",
|
||||
"date": "February 18, 2006",
|
||||
"timestamp": 1140292200,
|
||||
"tags": [
|
||||
"crazy",
|
||||
"funny"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/02/girlfriend-x"
|
||||
},
|
||||
"jump-to-viewcontroller-in-textmate": {
|
||||
"title": "Jump to view/controller in TextMate",
|
||||
"date": "February 18, 2006",
|
||||
"timestamp": 1140303060,
|
||||
"tags": [
|
||||
"hacking",
|
||||
"rails",
|
||||
"textmate",
|
||||
"rails",
|
||||
"textmate"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/02/jump-to-viewcontroller-in-textmate"
|
||||
},
|
||||
"some-textmate-snippets-for-rails-migrations": {
|
||||
"title": "Some TextMate snippets for Rails Migrations",
|
||||
"date": "February 18, 2006",
|
||||
"timestamp": 1140331680,
|
||||
"tags": [
|
||||
"textmate",
|
||||
"rails",
|
||||
"hacking",
|
||||
"rails",
|
||||
"snippets",
|
||||
"textmate"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/02/some-textmate-snippets-for-rails-migrations"
|
||||
},
|
||||
"obligatory-post-about-ruby-on-rails": {
|
||||
"title": "Obligatory Post about Ruby on Rails",
|
||||
"date": "February 20, 2006",
|
||||
"timestamp": 1140424260,
|
||||
"tags": [
|
||||
"rails",
|
||||
"coding",
|
||||
"hacking",
|
||||
"migration",
|
||||
"rails",
|
||||
"testing"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/02/obligatory-post-about-ruby-on-rails",
|
||||
"styles": [
|
||||
"typocode"
|
||||
]
|
||||
},
|
||||
"textmate-snippets-for-rails-assertions": {
|
||||
"title": "TextMate Snippets for Rails Assertions",
|
||||
"date": "February 20, 2006",
|
||||
"timestamp": 1140508320,
|
||||
"tags": [
|
||||
"textmate",
|
||||
"rails",
|
||||
"coding",
|
||||
"rails",
|
||||
"snippets",
|
||||
"testing",
|
||||
"textmate"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/02/textmate-snippets-for-rails-assertions"
|
||||
},
|
||||
"textmate-move-selection-to-self-down": {
|
||||
"title": "TextMate: Move selection to self.down",
|
||||
"date": "February 21, 2006",
|
||||
"timestamp": 1140510360,
|
||||
"tags": [
|
||||
"textmate",
|
||||
"rails",
|
||||
"hacking",
|
||||
"hack",
|
||||
"macro",
|
||||
"rails",
|
||||
"textmate"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/02/textmate-move-selection-to-self-down"
|
||||
},
|
||||
"textmate-insert-text-into-self-down": {
|
||||
"title": "TextMate: Insert text into self.down",
|
||||
"date": "February 21, 2006",
|
||||
"timestamp": 1140562500,
|
||||
"tags": [
|
||||
"textmate",
|
||||
"rails",
|
||||
"hacking",
|
||||
"commands",
|
||||
"macro",
|
||||
"rails",
|
||||
"snippets",
|
||||
"textmate"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/02/textmate-insert-text-into-self-down",
|
||||
"styles": [
|
||||
"typocode"
|
||||
]
|
||||
},
|
||||
"intelligent-migration-snippets-0.1-for-textmate": {
|
||||
"title": "Intelligent Migration Snippets 0.1 for TextMate",
|
||||
"date": "February 22, 2006",
|
||||
"timestamp": 1140607680,
|
||||
"tags": [
|
||||
"mac os x",
|
||||
"textmate",
|
||||
"rails",
|
||||
"hacking",
|
||||
"migrations",
|
||||
"snippets"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/02/intelligent-migration-snippets-0.1-for-textmate"
|
||||
},
|
||||
"sjs-rails-bundle-0.2-for-textmate": {
|
||||
"title": "SJ's Rails Bundle 0.2 for TextMate",
|
||||
"date": "February 23, 2006",
|
||||
"timestamp": 1140743880,
|
||||
"tags": [
|
||||
"textmate",
|
||||
"rails",
|
||||
"coding",
|
||||
"bundle",
|
||||
"macros",
|
||||
"rails",
|
||||
"snippets",
|
||||
"textmate"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/02/sjs-rails-bundle-0.2-for-textmate",
|
||||
"styles": [
|
||||
"typocode"
|
||||
]
|
||||
}
|
||||
}
|
||||
46
public/posts/2006/03/_data.json
Normal file
46
public/posts/2006/03/_data.json
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"generate-selfdown-in-your-rails-migrations": {
|
||||
"title": "Generate self.down in your Rails migrations",
|
||||
"date": "March 3, 2006",
|
||||
"timestamp": 1141450680,
|
||||
"tags": [
|
||||
"rails",
|
||||
"textmate",
|
||||
"migrations",
|
||||
"rails",
|
||||
"textmate"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/03/generate-selfdown-in-your-rails-migrations"
|
||||
},
|
||||
"spore": {
|
||||
"title": "Spore",
|
||||
"date": "March 3, 2006",
|
||||
"timestamp": 1141450980,
|
||||
"tags": [
|
||||
"amusement",
|
||||
"technology",
|
||||
"cool",
|
||||
"fun",
|
||||
"games"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/03/spore"
|
||||
},
|
||||
"i-dont-mind-fairplay-either": {
|
||||
"title": "I don't mind FairPlay either",
|
||||
"date": "March 3, 2006",
|
||||
"timestamp": 1141451760,
|
||||
"tags": [
|
||||
"apple",
|
||||
"mac os x",
|
||||
"life",
|
||||
"drm",
|
||||
"fairplay",
|
||||
"ipod",
|
||||
"itunes"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/03/i-dont-mind-fairplay-either"
|
||||
}
|
||||
}
|
||||
16
public/posts/2006/04/_data.json
Normal file
16
public/posts/2006/04/_data.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"zsh-terminal-goodness-on-os-x": {
|
||||
"title": "zsh terminal goodness on OS X",
|
||||
"date": "April 4, 2006",
|
||||
"timestamp": 1144187820,
|
||||
"tags": [
|
||||
"mac os x",
|
||||
"apple",
|
||||
"osx",
|
||||
"terminal",
|
||||
"zsh"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/04/zsh-terminal-goodness-on-os-x"
|
||||
}
|
||||
}
|
||||
34
public/posts/2006/05/_data.json
Normal file
34
public/posts/2006/05/_data.json
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"os-x-and-fitts-law": {
|
||||
"title": "OS X and Fitt's law",
|
||||
"date": "May 7, 2006",
|
||||
"timestamp": 1147059780,
|
||||
"tags": [
|
||||
"mac os x",
|
||||
"apple",
|
||||
"mac",
|
||||
"os",
|
||||
"usability",
|
||||
"x"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/05/os-x-and-fitts-law"
|
||||
},
|
||||
"wikipediafs-on-linux-in-python": {
|
||||
"title": "WikipediaFS on Linux, in Python",
|
||||
"date": "May 7, 2006",
|
||||
"timestamp": 1147060140,
|
||||
"tags": [
|
||||
"hacking",
|
||||
"python",
|
||||
"linux",
|
||||
"fuse",
|
||||
"linux",
|
||||
"mediawiki",
|
||||
"python",
|
||||
"wikipediafs"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/05/wikipediafs-on-linux-in-python"
|
||||
}
|
||||
}
|
||||
52
public/posts/2006/06/_data.json
Normal file
52
public/posts/2006/06/_data.json
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"ich-bin-auslnder-und-spreche-nicht-gut-deutsch": {
|
||||
"title": "Ich bin Ausländer und spreche nicht gut Deutsch",
|
||||
"date": "June 5, 2006",
|
||||
"timestamp": 1149527460,
|
||||
"tags": [
|
||||
"life",
|
||||
"munich",
|
||||
"seekport",
|
||||
"work"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/06/ich-bin-auslnder-und-spreche-nicht-gut-deutsch"
|
||||
},
|
||||
"never-buy-a-german-keyboard": {
|
||||
"title": "Never buy a German keyboard!",
|
||||
"date": "June 9, 2006",
|
||||
"timestamp": 1149841020,
|
||||
"tags": [
|
||||
"apple",
|
||||
"apple",
|
||||
"german",
|
||||
"keyboard"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/06/never-buy-a-german-keyboard"
|
||||
},
|
||||
"theres-nothing-regular-about-regular-expressions": {
|
||||
"title": "There's nothing regular about regular expressions",
|
||||
"date": "June 10, 2006",
|
||||
"timestamp": 1149928080,
|
||||
"tags": [
|
||||
"technology",
|
||||
"book",
|
||||
"regex"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/06/theres-nothing-regular-about-regular-expressions"
|
||||
},
|
||||
"apple-pays-attention-to-detail": {
|
||||
"title": "Apple pays attention to detail",
|
||||
"date": "June 11, 2006",
|
||||
"timestamp": 1150014600,
|
||||
"tags": [
|
||||
"technology",
|
||||
"mac os x",
|
||||
"apple"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/06/apple-pays-attention-to-detail"
|
||||
}
|
||||
}
|
||||
72
public/posts/2006/07/_data.json
Normal file
72
public/posts/2006/07/_data.json
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
{
|
||||
"working-with-the-zend-framework": {
|
||||
"title": "Working with the Zend Framework",
|
||||
"date": "July 6, 2006",
|
||||
"timestamp": 1152196560,
|
||||
"tags": [
|
||||
"coding",
|
||||
"technology",
|
||||
"php",
|
||||
"framework",
|
||||
"php",
|
||||
"seekport",
|
||||
"zend"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/07/working-with-the-zend-framework"
|
||||
},
|
||||
"ubuntu-linux-for-linux-users-please": {
|
||||
"title": "Ubuntu: Linux for Linux users please",
|
||||
"date": "July 13, 2006",
|
||||
"timestamp": 1152804840,
|
||||
"tags": [
|
||||
"linux",
|
||||
"linux",
|
||||
"ubuntu"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/07/ubuntu-linux-for-linux-users-please"
|
||||
},
|
||||
"ruby-and-rails-have-spoiled-me-rotten": {
|
||||
"title": "Ruby and Rails have spoiled me rotten",
|
||||
"date": "July 17, 2006",
|
||||
"timestamp": 1153140000,
|
||||
"tags": [
|
||||
"rails",
|
||||
"ruby",
|
||||
"php",
|
||||
"coding",
|
||||
"framework",
|
||||
"php",
|
||||
"rails",
|
||||
"ruby",
|
||||
"zend"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/07/ruby-and-rails-have-spoiled-me-rotten"
|
||||
},
|
||||
"late-static-binding": {
|
||||
"title": "Late static binding",
|
||||
"date": "July 19, 2006",
|
||||
"timestamp": 1153329780,
|
||||
"tags": [
|
||||
"php",
|
||||
"coding",
|
||||
"coding",
|
||||
"php"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/07/late-static-binding"
|
||||
},
|
||||
"class-method-instance-method-it-doesnt-matter-to-php": {
|
||||
"title": "Class method? Instance method? It doesn't matter to PHP",
|
||||
"date": "July 21, 2006",
|
||||
"timestamp": 1153493760,
|
||||
"tags": [
|
||||
"php",
|
||||
"coding"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/07/class-method-instance-method-it-doesnt-matter-to-php"
|
||||
}
|
||||
}
|
||||
13
public/posts/2006/08/_data.json
Normal file
13
public/posts/2006/08/_data.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"where-are-my-headphones": {
|
||||
"title": "Where are my headphones?",
|
||||
"date": "August 22, 2006",
|
||||
"timestamp": 1156257060,
|
||||
"tags": [
|
||||
"life",
|
||||
"seekport"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/08/where-are-my-headphones"
|
||||
}
|
||||
}
|
||||
26
public/posts/2006/09/_data.json
Normal file
26
public/posts/2006/09/_data.json
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"buffalo-buffalo-buffalo-buffalo-buffalo-buffalo-buffalo-buffalo": {
|
||||
"title": "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo",
|
||||
"date": "September 16, 2006",
|
||||
"timestamp": 1158469860,
|
||||
"tags": [
|
||||
"amusement",
|
||||
"buffalo"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/09/buffalo-buffalo-buffalo-buffalo-buffalo-buffalo-buffalo-buffalo",
|
||||
"link": "http://en.wikipedia.org/wiki/Buffalo_buffalo_buffalo_buffalo_buffalo_buffalo_buffalo_buffalo"
|
||||
},
|
||||
"some-features-you-might-have-missed-in-itunes-7": {
|
||||
"title": "Some features you might have missed in iTunes 7",
|
||||
"date": "September 22, 2006",
|
||||
"timestamp": 1158969540,
|
||||
"tags": [
|
||||
"apple",
|
||||
"apple",
|
||||
"itunes"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/09/some-features-you-might-have-missed-in-itunes-7"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,3 +1 @@
|
|||
Wouldn't the sentence 'I want to put a hyphen between the words Fish and And and And and Chips in my Fish-And-Chips sign' have been clearer if quotation marks had been placed before Fish, and between Fish and and, and and and And, and And and and, and and and And, and And and and, and and and Chips, as well as after Chips?
|
||||
|
||||
→ <a href="http://en.wikipedia.org/wiki/Buffalo_buffalo_buffalo_buffalo_buffalo_buffalo_buffalo_buffalo">Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo</a>
|
||||
16
public/posts/2006/12/_data.json
Normal file
16
public/posts/2006/12/_data.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"coping-with-windows-xp-activiation-on-a-mac": {
|
||||
"title": "Coping with Windows XP activiation on a Mac",
|
||||
"date": "December 17, 2006",
|
||||
"timestamp": 1166427000,
|
||||
"tags": [
|
||||
"parallels",
|
||||
"windows",
|
||||
"apple",
|
||||
"mac os x",
|
||||
"bootcamp"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2006/12/coping-with-windows-xp-activiation-on-a-mac"
|
||||
}
|
||||
}
|
||||
40
public/posts/2007/03/_data.json
Normal file
40
public/posts/2007/03/_data.json
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"full-screen-cover-flow": {
|
||||
"title": "Full-screen Cover Flow",
|
||||
"date": "March 6, 2007",
|
||||
"timestamp": 1173217860,
|
||||
"tags": [
|
||||
"apple",
|
||||
"coverflow",
|
||||
"itunes"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/03/full-screen-cover-flow"
|
||||
},
|
||||
"digg-v4-reply-to-replies-greasemonkey-script": {
|
||||
"title": "Digg v4: Reply to replies (Greasemonkey script)",
|
||||
"date": "March 8, 2007",
|
||||
"timestamp": 1173424740,
|
||||
"tags": [
|
||||
"coding",
|
||||
"digg",
|
||||
"firefox",
|
||||
"userscript"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/03/digg-v4-reply-to-replies-greasemonkey-script"
|
||||
},
|
||||
"diggscuss-0.9": {
|
||||
"title": "Diggscuss 0.9",
|
||||
"date": "March 25, 2007",
|
||||
"timestamp": 1174834980,
|
||||
"tags": [
|
||||
"coding",
|
||||
"digg",
|
||||
"firefox",
|
||||
"userscript"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/03/diggscuss-0.9"
|
||||
}
|
||||
}
|
||||
58
public/posts/2007/04/_data.json
Normal file
58
public/posts/2007/04/_data.json
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
{
|
||||
"a-triple-booting-schizophrenic-macbook": {
|
||||
"title": "A triple-booting, schizophrenic MacBook",
|
||||
"date": "April 4, 2007",
|
||||
"timestamp": 1175754600,
|
||||
"tags": [
|
||||
"linux",
|
||||
"mac os x",
|
||||
"windows"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/04/a-triple-booting-schizophrenic-macbook"
|
||||
},
|
||||
"activerecord-base.find_or_create-and-find_or_initialize": {
|
||||
"title": "ActiveRecord::Base.find_or_create and find_or_initialize",
|
||||
"date": "April 11, 2007",
|
||||
"timestamp": 1176287040,
|
||||
"tags": [
|
||||
"activerecord",
|
||||
"coding",
|
||||
"rails",
|
||||
"ruby"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/04/activerecord-base.find_or_create-and-find_or_initialize"
|
||||
},
|
||||
"getting-to-know-vista": {
|
||||
"title": "Getting to know Vista",
|
||||
"date": "April 16, 2007",
|
||||
"timestamp": 1176746940,
|
||||
"tags": [
|
||||
"windows"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/04/getting-to-know-vista"
|
||||
},
|
||||
"quickly-inserting-millions-of-rows-with-mysql-innodb": {
|
||||
"title": "Quickly inserting millions of rows with MySQL/InnoDB",
|
||||
"date": "April 26, 2007",
|
||||
"timestamp": 1177596360,
|
||||
"tags": [
|
||||
"linux",
|
||||
"mysql"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/04/quickly-inserting-millions-of-rows-with-mysql-innodb"
|
||||
},
|
||||
"funny-how-code-can-be-beautiful": {
|
||||
"title": "Funny how code can be beautiful",
|
||||
"date": "April 30, 2007",
|
||||
"timestamp": 1177942020,
|
||||
"tags": [
|
||||
"haskell"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/04/funny-how-code-can-be-beautiful"
|
||||
}
|
||||
}
|
||||
146
public/posts/2007/05/_data.json
Normal file
146
public/posts/2007/05/_data.json
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
{
|
||||
"typo-and-i-are-friends-again": {
|
||||
"title": "Typo and I are friends again",
|
||||
"date": "May 1, 2007",
|
||||
"timestamp": 1178081497,
|
||||
"tags": [
|
||||
"typo"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/typo-and-i-are-friends-again"
|
||||
},
|
||||
"a-scheme-parser-in-haskell-part-1": {
|
||||
"title": "A Scheme parser in Haskell: Part 1",
|
||||
"date": "May 3, 2007",
|
||||
"timestamp": 1178178470,
|
||||
"tags": [
|
||||
"coding",
|
||||
"haskell"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/a-scheme-parser-in-haskell-part-1"
|
||||
},
|
||||
"gotta-love-the-ferry-ride": {
|
||||
"title": "Gotta Love the Ferry Ride",
|
||||
"date": "May 5, 2007",
|
||||
"timestamp": 1178364300,
|
||||
"tags": [
|
||||
"life",
|
||||
"photo",
|
||||
"bc",
|
||||
"victoria"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/gotta-love-the-ferry-ride"
|
||||
},
|
||||
"a-new-way-to-look-at-networking": {
|
||||
"title": "A New Way to Look at Networking",
|
||||
"date": "May 5, 2007",
|
||||
"timestamp": 1178406600,
|
||||
"tags": [
|
||||
"technology",
|
||||
"networking"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/a-new-way-to-look-at-networking"
|
||||
},
|
||||
"dtrace-ruby-goodness-for-sun": {
|
||||
"title": "dtrace + Ruby = Goodness for Sun",
|
||||
"date": "May 9, 2007",
|
||||
"timestamp": 1178725500,
|
||||
"tags": [
|
||||
"ruby",
|
||||
"dtrace",
|
||||
"sun"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/dtrace-ruby-goodness-for-sun"
|
||||
},
|
||||
"i-cant-wait-to-see-what-matt-stone-trey-parker-do-with-this": {
|
||||
"title": "I Can't Wait to See What Trey Parker & Matt Stone Do With This",
|
||||
"date": "May 9, 2007",
|
||||
"timestamp": 1178746440,
|
||||
"tags": [
|
||||
"crazy"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/i-cant-wait-to-see-what-matt-stone-trey-parker-do-with-this"
|
||||
},
|
||||
"rails-plugins-link-dump": {
|
||||
"title": "Rails Plugins (link dump)",
|
||||
"date": "May 10, 2007",
|
||||
"timestamp": 1178756520,
|
||||
"tags": [
|
||||
"rails"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/rails-plugins-link-dump"
|
||||
},
|
||||
"enumerable-pluck-and-string-to_proc-for-ruby": {
|
||||
"title": "Enumurable#pluck and String#to_proc for Ruby",
|
||||
"date": "May 10, 2007",
|
||||
"timestamp": 1178838840,
|
||||
"tags": [
|
||||
"ruby",
|
||||
"extensions"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/enumerable-pluck-and-string-to_proc-for-ruby"
|
||||
},
|
||||
"dumping-objects-to-the-browser-in-rails": {
|
||||
"title": "Dumping Objects to the Browser in Rails",
|
||||
"date": "May 15, 2007",
|
||||
"timestamp": 1179261480,
|
||||
"tags": [
|
||||
"rails"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/dumping-objects-to-the-browser-in-rails"
|
||||
},
|
||||
"cheating-at-life-in-general": {
|
||||
"title": "Cheating at Life in General",
|
||||
"date": "May 16, 2007",
|
||||
"timestamp": 1179308760,
|
||||
"tags": [
|
||||
"cheat",
|
||||
"vim",
|
||||
"emacs",
|
||||
"textmate"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/cheating-at-life-in-general"
|
||||
},
|
||||
"iphone-humour": {
|
||||
"title": "iPhone Humour",
|
||||
"date": "May 18, 2007",
|
||||
"timestamp": 1179513240,
|
||||
"tags": [
|
||||
"apple",
|
||||
"funny",
|
||||
"iphone"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/iphone-humour"
|
||||
},
|
||||
"inspirado": {
|
||||
"title": "Inspirado",
|
||||
"date": "May 22, 2007",
|
||||
"timestamp": 1179865380,
|
||||
"tags": [
|
||||
"rails",
|
||||
"inspirado"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/inspirado"
|
||||
},
|
||||
"finnish-court-rules-css-ineffective-at-protecting-dvds": {
|
||||
"title": "Finnish court rules CSS ineffective at protecting DVDs",
|
||||
"date": "May 26, 2007",
|
||||
"timestamp": 1180175040,
|
||||
"tags": [
|
||||
"drm"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/05/finnish-court-rules-css-ineffective-at-protecting-dvds"
|
||||
}
|
||||
}
|
||||
179
public/posts/2007/06/_data.json
Normal file
179
public/posts/2007/06/_data.json
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
{
|
||||
"301-moved-permanently": {
|
||||
"title": "301 moved permanently",
|
||||
"date": "June 8, 2007",
|
||||
"timestamp": 1181350800,
|
||||
"tags": [
|
||||
"life"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/301-moved-permanently"
|
||||
},
|
||||
"so-long-typo-and-thanks-for-all-the-timeouts": {
|
||||
"title": "so long typo (and thanks for all the timeouts)",
|
||||
"date": "June 8, 2007",
|
||||
"timestamp": 1181350860,
|
||||
"tags": [
|
||||
"mephisto",
|
||||
"typo"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/so-long-typo-and-thanks-for-all-the-timeouts"
|
||||
},
|
||||
"more-scheming-with-haskell": {
|
||||
"title": "More Scheming with Haskell",
|
||||
"date": "June 14, 2007",
|
||||
"timestamp": 1181783340,
|
||||
"tags": [
|
||||
"coding",
|
||||
"haskell",
|
||||
"scheme"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/more-scheming-with-haskell"
|
||||
},
|
||||
"testspec-on-rails-declared-awesome-just-one-catch": {
|
||||
"title": "test/spec on rails declared awesome, just one catch",
|
||||
"date": "June 14, 2007",
|
||||
"timestamp": 1181830860,
|
||||
"tags": [
|
||||
"bdd",
|
||||
"rails",
|
||||
"test/spec"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/testspec-on-rails-declared-awesome-just-one-catch"
|
||||
},
|
||||
"begging-the-question": {
|
||||
"title": "Begging the question",
|
||||
"date": "June 15, 2007",
|
||||
"timestamp": 1181933340,
|
||||
"tags": [
|
||||
"english",
|
||||
"life",
|
||||
"pedantry"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/begging-the-question"
|
||||
},
|
||||
"back-on-gentoo-trying-new-things": {
|
||||
"title": "Back on Gentoo, trying new things",
|
||||
"date": "June 18, 2007",
|
||||
"timestamp": 1182215100,
|
||||
"tags": [
|
||||
"emacs",
|
||||
"gentoo",
|
||||
"linux",
|
||||
"vim"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/back-on-gentoo-trying-new-things"
|
||||
},
|
||||
"reinventing-the-wheel": {
|
||||
"title": "Reinventing the wheel",
|
||||
"date": "June 20, 2007",
|
||||
"timestamp": 1182356820,
|
||||
"tags": [
|
||||
"emacs",
|
||||
"snippets"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/reinventing-the-wheel"
|
||||
},
|
||||
"embrace-the-database": {
|
||||
"title": "Embrace the database",
|
||||
"date": "June 22, 2007",
|
||||
"timestamp": 1182507240,
|
||||
"tags": [
|
||||
"activerecord",
|
||||
"rails",
|
||||
"ruby"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/embrace-the-database"
|
||||
},
|
||||
"emacs-for-textmate-junkies": {
|
||||
"title": "Emacs for TextMate junkies",
|
||||
"date": "June 23, 2007",
|
||||
"timestamp": 1182565020,
|
||||
"tags": [
|
||||
"emacs",
|
||||
"textmate"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/emacs-for-textmate-junkies"
|
||||
},
|
||||
"floating-point-in-elschemo": {
|
||||
"title": "Floating point in ElSchemo",
|
||||
"date": "June 24, 2007",
|
||||
"timestamp": 1182711180,
|
||||
"tags": [
|
||||
"elschemo",
|
||||
"haskell",
|
||||
"scheme"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/floating-point-in-elschemo"
|
||||
},
|
||||
"propaganda-makes-me-sick": {
|
||||
"title": "Propaganda makes me sick",
|
||||
"date": "June 25, 2007",
|
||||
"timestamp": 1182768900,
|
||||
"tags": [
|
||||
"propaganda"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/propaganda-makes-me-sick"
|
||||
},
|
||||
"rtfm": {
|
||||
"title": "RTFM!",
|
||||
"date": "June 26, 2007",
|
||||
"timestamp": 1182806340,
|
||||
"tags": [
|
||||
"emacs",
|
||||
"rtfm"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/rtfm"
|
||||
},
|
||||
"emacs-tagify-region-or-insert-tag": {
|
||||
"title": "Emacs: tagify-region-or-insert-tag",
|
||||
"date": "June 25, 2007",
|
||||
"timestamp": 1182809580,
|
||||
"tags": [
|
||||
"emacs",
|
||||
"tagify"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/emacs-tagify-region-or-insert-tag"
|
||||
},
|
||||
"recent-ruby-and-rails-regales": {
|
||||
"title": "Recent Ruby and Rails Regales",
|
||||
"date": "June 28, 2007",
|
||||
"timestamp": 1183058580,
|
||||
"tags": [
|
||||
"rails",
|
||||
"rails on rules",
|
||||
"regular expressions",
|
||||
"ruby",
|
||||
"sake",
|
||||
"secure associations",
|
||||
"regex"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/recent-ruby-and-rails-regales"
|
||||
},
|
||||
"controlling-volume-via-the-keyboard-on-linux": {
|
||||
"title": "Controlling volume via the keyboard on Linux",
|
||||
"date": "June 30, 2007",
|
||||
"timestamp": 1183245180,
|
||||
"tags": [
|
||||
"alsa",
|
||||
"linux",
|
||||
"ruby",
|
||||
"volume"
|
||||
],
|
||||
"author": "Sami Samhuri",
|
||||
"url": "/posts/2007/06/controlling-volume-via-the-keyboard-on-linux"
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue