├── .rbenv-version ├── .rvmrc ├── .gitattributes ├── source ├── CNAME ├── _includes │ ├── footer.html │ ├── header.html │ ├── post │ │ ├── disqus_thread.html │ │ ├── author.html │ │ ├── categories.html │ │ ├── sharing.html │ │ └── date.html │ ├── custom │ │ ├── header.html │ │ ├── head.html │ │ ├── footer.html │ │ ├── navigation.html │ │ ├── after_footer.html │ │ ├── asides │ │ │ └── about.html │ │ └── category_feed.xml │ ├── after_footer.html │ ├── fancybox.html │ ├── asides │ │ ├── twitter.html │ │ ├── recent_posts.html │ │ ├── googleplus.html │ │ ├── delicious.html │ │ ├── pinboard.html │ │ └── github.html │ ├── google_plus_one.html │ ├── facebook_like.html │ ├── twitter_sharing.html │ ├── aside.html │ ├── archive_post.html │ ├── google_analytics.html │ ├── banner.html │ ├── navigation.html │ ├── disqus.html │ ├── article.html │ ├── social.html │ └── head.html ├── favicon.png ├── assets │ ├── sean.jpg │ ├── colin-git.jpg │ ├── products.jpg │ ├── jwplayer │ │ ├── player.swf │ │ └── glow │ │ │ ├── dock │ │ │ └── button.png │ │ │ ├── playlist │ │ │ ├── item.png │ │ │ ├── itemOver.png │ │ │ ├── sliderCapTop.png │ │ │ ├── sliderRail.png │ │ │ ├── sliderThumb.png │ │ │ └── sliderCapBottom.png │ │ │ ├── display │ │ │ ├── muteIcon.png │ │ │ ├── playIcon.png │ │ │ ├── background.png │ │ │ └── bufferIcon.png │ │ │ ├── controlbar │ │ │ ├── divider.png │ │ │ ├── background.png │ │ │ ├── muteButton.png │ │ │ ├── playButton.png │ │ │ ├── blankButton.png │ │ │ ├── pauseButton.png │ │ │ ├── unmuteButton.png │ │ │ ├── muteButtonOver.png │ │ │ ├── pauseButtonOver.png │ │ │ ├── playButtonOver.png │ │ │ ├── timeSliderRail.png │ │ │ ├── fullscreenButton.png │ │ │ ├── timeSliderBuffer.png │ │ │ ├── timeSliderCapLeft.png │ │ │ ├── unmuteButtonOver.png │ │ │ ├── fullscreenButtonOver.png │ │ │ ├── normalscreenButton.png │ │ │ ├── timeSliderCapRight.png │ │ │ ├── timeSliderProgress.png │ │ │ └── normalscreenButtonOver.png │ │ │ └── sharing │ │ │ ├── embedIcon.png │ │ │ ├── shareIcon.png │ │ │ ├── embedScreen.png │ │ │ └── shareScreen.png │ ├── Swift.playground.zip │ ├── layout-animation.gif │ ├── Sean-Dougherty-Resume.pdf │ └── Swift.playground │ │ ├── timeline.xctimeline │ │ └── contents.xcplayground ├── images │ ├── email.png │ ├── hover.png │ ├── noise.png │ ├── rss.png │ ├── totop.png │ ├── active.png │ ├── code_bg.png │ ├── loading.gif │ ├── search.png │ ├── html5css3.png │ ├── injections.jpg │ ├── line-tile.png │ ├── bg-gradient.png │ ├── bird_32_gray.png │ ├── retina_dust.png │ ├── search-dark.png │ ├── search-white.png │ ├── social │ │ ├── Skype.png │ │ ├── Facebook.png │ │ ├── Github.png │ │ ├── GithubH.png │ │ ├── LastFM.png │ │ ├── LastFMH.png │ │ ├── LinkedIn.png │ │ ├── Picasa.png │ │ ├── PicasaH.png │ │ ├── SkypeH.png │ │ ├── Twitter.png │ │ ├── TwitterH.png │ │ ├── Youtube.png │ │ ├── YoutubeH.png │ │ ├── FacebookH.png │ │ └── LinkedInH.png │ ├── dotted-border.png │ ├── fancybox │ │ ├── blank.gif │ │ ├── fancybox_loading.gif │ │ └── fancybox_sprite.png │ ├── loading_pacman.gif │ └── bird_32_gray_fail.png ├── font │ ├── Slackey.woff │ ├── Fjalla-one.woff │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.svgz │ ├── fontawesome-webfont.woff │ ├── yanonekaffeesatz-regular-webfont.eot │ ├── yanonekaffeesatz-regular-webfont.ttf │ └── yanonekaffeesatz-regular-webfont.woff ├── robots.txt ├── blog │ ├── archives │ │ └── index.html │ └── index.html ├── _layouts │ ├── category_index.html │ ├── info.html │ ├── default.html │ ├── page.html │ └── post.html ├── search.html ├── _posts │ ├── 2016-06-22-open-sourcing-ellos-ios-app.markdown │ ├── 2014-12-30-space-exploration.markdown │ └── 2016-10-10-fixing-a-commit-to-the-wrong-branch.markdown ├── javascripts │ ├── ajaxify.js │ ├── github.js │ ├── fabric.js │ ├── pinboard.js │ ├── jquery-tapir.js │ └── libs │ │ └── jXHR.js ├── atom.xml └── index.markdown ├── .slugignore ├── sass ├── _plugins.scss ├── partials │ ├── _sidebar.scss │ ├── sidebar │ │ ├── _delicious.scss │ │ ├── _pinboard.scss │ │ └── _googleplus.scss │ ├── _sharing.scss │ ├── _header.scss │ ├── _footer.scss │ └── _archive.scss ├── _base.scss ├── custom │ ├── _color.scss │ ├── _fonts.scss │ ├── _layout.scss │ └── _colors.scss ├── parts │ ├── _comment.scss │ ├── _footer.scss │ ├── _index.scss │ ├── _twitter.scss │ ├── _post.scss │ └── _archive.scss ├── _parts.scss ├── base │ ├── _color.scss │ ├── _font.scss │ ├── _utilities.scss │ └── _solarized.scss ├── plugins │ └── _plugins.scss ├── _partials.scss └── screen.scss ├── .themes └── classic │ ├── source │ ├── _includes │ │ ├── footer.html │ │ ├── header.html │ │ ├── custom │ │ │ ├── asides │ │ │ │ └── about.html │ │ │ ├── after_footer.html │ │ │ ├── navigation.html │ │ │ ├── header.html │ │ │ ├── footer.html │ │ │ ├── head.html │ │ │ └── category_feed.xml │ │ ├── post │ │ │ ├── disqus_thread.html │ │ │ ├── author.html │ │ │ ├── categories.html │ │ │ ├── sharing.html │ │ │ └── date.html │ │ ├── after_footer.html │ │ ├── asides │ │ │ ├── recent_posts.html │ │ │ ├── googleplus.html │ │ │ ├── delicious.html │ │ │ ├── pinboard.html │ │ │ └── github.html │ │ ├── google_plus_one.html │ │ ├── facebook_like.html │ │ ├── archive_post.html │ │ ├── twitter_sharing.html │ │ ├── google_analytics.html │ │ ├── navigation.html │ │ ├── disqus.html │ │ ├── article.html │ │ └── head.html │ ├── favicon.png │ ├── images │ │ ├── rss.png │ │ ├── email.png │ │ ├── noise.png │ │ ├── search.png │ │ ├── code_bg.png │ │ ├── line-tile.png │ │ ├── bird_32_gray.png │ │ ├── dotted-border.png │ │ └── bird_32_gray_fail.png │ ├── robots.txt │ ├── assets │ │ └── jwplayer │ │ │ ├── player.swf │ │ │ └── glow │ │ │ ├── dock │ │ │ └── button.png │ │ │ ├── playlist │ │ │ ├── item.png │ │ │ ├── itemOver.png │ │ │ ├── sliderRail.png │ │ │ ├── sliderThumb.png │ │ │ ├── sliderCapTop.png │ │ │ └── sliderCapBottom.png │ │ │ ├── display │ │ │ ├── muteIcon.png │ │ │ ├── playIcon.png │ │ │ ├── background.png │ │ │ └── bufferIcon.png │ │ │ ├── sharing │ │ │ ├── embedIcon.png │ │ │ ├── shareIcon.png │ │ │ ├── embedScreen.png │ │ │ └── shareScreen.png │ │ │ └── controlbar │ │ │ ├── divider.png │ │ │ ├── background.png │ │ │ ├── blankButton.png │ │ │ ├── muteButton.png │ │ │ ├── pauseButton.png │ │ │ ├── playButton.png │ │ │ ├── muteButtonOver.png │ │ │ ├── playButtonOver.png │ │ │ ├── timeSliderRail.png │ │ │ ├── unmuteButton.png │ │ │ ├── fullscreenButton.png │ │ │ ├── pauseButtonOver.png │ │ │ ├── timeSliderBuffer.png │ │ │ ├── unmuteButtonOver.png │ │ │ ├── normalscreenButton.png │ │ │ ├── timeSliderCapLeft.png │ │ │ ├── timeSliderCapRight.png │ │ │ ├── timeSliderProgress.png │ │ │ ├── fullscreenButtonOver.png │ │ │ └── normalscreenButtonOver.png │ ├── blog │ │ └── archives │ │ │ └── index.html │ ├── _layouts │ │ ├── category_index.html │ │ ├── default.html │ │ ├── page.html │ │ └── post.html │ ├── index.html │ ├── atom.xml │ └── javascripts │ │ ├── github.js │ │ ├── pinboard.js │ │ └── libs │ │ └── jXHR.js │ ├── sass │ ├── partials │ │ ├── _sidebar.scss │ │ ├── sidebar │ │ │ ├── _delicious.scss │ │ │ ├── _pinboard.scss │ │ │ └── _googleplus.scss │ │ ├── _sharing.scss │ │ ├── _header.scss │ │ ├── _footer.scss │ │ └── _archive.scss │ ├── _base.scss │ ├── custom │ │ ├── _styles.scss │ │ ├── _fonts.scss │ │ ├── _layout.scss │ │ └── _colors.scss │ ├── _partials.scss │ ├── plugins │ │ └── _plugins.scss │ ├── screen.scss │ └── base │ │ ├── _utilities.scss │ │ └── _solarized.scss │ └── .editorconfig ├── favicon.png ├── images ├── rss.png ├── code_bg.png ├── email.png ├── noise.png ├── search.png ├── line-tile.png ├── bird_32_gray.png ├── dotted-border.png └── bird_32_gray_fail.png ├── robots.txt ├── assets └── jwplayer │ ├── player.swf │ └── glow │ ├── dock │ └── button.png │ ├── playlist │ ├── item.png │ ├── itemOver.png │ ├── sliderRail.png │ ├── sliderThumb.png │ ├── sliderCapTop.png │ └── sliderCapBottom.png │ ├── controlbar │ ├── divider.png │ ├── background.png │ ├── blankButton.png │ ├── muteButton.png │ ├── pauseButton.png │ ├── playButton.png │ ├── unmuteButton.png │ ├── muteButtonOver.png │ ├── playButtonOver.png │ ├── timeSliderRail.png │ ├── fullscreenButton.png │ ├── pauseButtonOver.png │ ├── timeSliderBuffer.png │ ├── timeSliderCapLeft.png │ ├── unmuteButtonOver.png │ ├── normalscreenButton.png │ ├── timeSliderCapRight.png │ ├── timeSliderProgress.png │ ├── fullscreenButtonOver.png │ └── normalscreenButtonOver.png │ ├── display │ ├── background.png │ ├── bufferIcon.png │ ├── muteIcon.png │ └── playIcon.png │ └── sharing │ ├── embedIcon.png │ ├── shareIcon.png │ ├── embedScreen.png │ └── shareScreen.png ├── .travis.yml ├── .powrc ├── .gitignore ├── README.markdown ├── config.rb ├── .editorconfig ├── Gemfile ├── plugins ├── haml.rb ├── titlecase.rb ├── raw.rb ├── config_tag.rb ├── backtick_code_block.rb ├── jsfiddle.rb ├── pygments_code.rb ├── preview_unpublished.rb ├── video_tag.rb ├── include_array.rb ├── pullquote.rb ├── image_tag.rb ├── render_partial.rb ├── include_code.rb └── blockquote.rb ├── sitemap.xml ├── config.ru ├── javascripts ├── github.js ├── pinboard.js └── libs │ └── jXHR.js ├── CHANGELOG.markdown └── Gemfile.lock /.rbenv-version: -------------------------------------------------------------------------------- 1 | 2.2.2 2 | -------------------------------------------------------------------------------- /.rvmrc: -------------------------------------------------------------------------------- 1 | rvm use 1.9.3 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /source/CNAME: -------------------------------------------------------------------------------- 1 | seancdougherty.com -------------------------------------------------------------------------------- /.slugignore: -------------------------------------------------------------------------------- 1 | plugins 2 | sass 3 | source 4 | -------------------------------------------------------------------------------- /sass/_plugins.scss: -------------------------------------------------------------------------------- 1 | @import "plugins/fancybox"; -------------------------------------------------------------------------------- /source/_includes/footer.html: -------------------------------------------------------------------------------- 1 | {% include custom/footer.html %} 2 | -------------------------------------------------------------------------------- /source/_includes/header.html: -------------------------------------------------------------------------------- 1 | {% include custom/header.html %} 2 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/footer.html: -------------------------------------------------------------------------------- 1 | {% include custom/footer.html %} 2 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/header.html: -------------------------------------------------------------------------------- 1 | {% include custom/header.html %} 2 | -------------------------------------------------------------------------------- /favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/favicon.png -------------------------------------------------------------------------------- /images/rss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/images/rss.png -------------------------------------------------------------------------------- /images/code_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/images/code_bg.png -------------------------------------------------------------------------------- /images/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/images/email.png -------------------------------------------------------------------------------- /images/noise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/images/noise.png -------------------------------------------------------------------------------- /images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/images/search.png -------------------------------------------------------------------------------- /robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | 4 | Sitemap: http://seancdougherty.com/sitemap.xml -------------------------------------------------------------------------------- /source/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/favicon.png -------------------------------------------------------------------------------- /images/line-tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/images/line-tile.png -------------------------------------------------------------------------------- /images/bird_32_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/images/bird_32_gray.png -------------------------------------------------------------------------------- /source/assets/sean.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/sean.jpg -------------------------------------------------------------------------------- /source/images/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/email.png -------------------------------------------------------------------------------- /source/images/hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/hover.png -------------------------------------------------------------------------------- /source/images/noise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/noise.png -------------------------------------------------------------------------------- /source/images/rss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/rss.png -------------------------------------------------------------------------------- /source/images/totop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/totop.png -------------------------------------------------------------------------------- /images/dotted-border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/images/dotted-border.png -------------------------------------------------------------------------------- /source/font/Slackey.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/font/Slackey.woff -------------------------------------------------------------------------------- /source/images/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/active.png -------------------------------------------------------------------------------- /source/images/code_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/code_bg.png -------------------------------------------------------------------------------- /source/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/loading.gif -------------------------------------------------------------------------------- /source/images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/search.png -------------------------------------------------------------------------------- /assets/jwplayer/player.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/player.swf -------------------------------------------------------------------------------- /images/bird_32_gray_fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/images/bird_32_gray_fail.png -------------------------------------------------------------------------------- /source/assets/colin-git.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/colin-git.jpg -------------------------------------------------------------------------------- /source/assets/products.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/products.jpg -------------------------------------------------------------------------------- /source/font/Fjalla-one.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/font/Fjalla-one.woff -------------------------------------------------------------------------------- /source/images/html5css3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/html5css3.png -------------------------------------------------------------------------------- /source/images/injections.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/injections.jpg -------------------------------------------------------------------------------- /source/images/line-tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/line-tile.png -------------------------------------------------------------------------------- /source/images/bg-gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/bg-gradient.png -------------------------------------------------------------------------------- /source/images/bird_32_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/bird_32_gray.png -------------------------------------------------------------------------------- /source/images/retina_dust.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/retina_dust.png -------------------------------------------------------------------------------- /source/images/search-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/search-dark.png -------------------------------------------------------------------------------- /source/images/search-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/search-white.png -------------------------------------------------------------------------------- /source/images/social/Skype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/Skype.png -------------------------------------------------------------------------------- /source/robots.txt: -------------------------------------------------------------------------------- 1 | --- 2 | layout: nil 3 | --- 4 | User-agent: * 5 | Disallow: 6 | 7 | Sitemap: {{ site.url }}/sitemap.xml -------------------------------------------------------------------------------- /source/assets/jwplayer/player.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/player.swf -------------------------------------------------------------------------------- /source/images/dotted-border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/dotted-border.png -------------------------------------------------------------------------------- /source/images/fancybox/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/fancybox/blank.gif -------------------------------------------------------------------------------- /source/images/loading_pacman.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/loading_pacman.gif -------------------------------------------------------------------------------- /source/images/social/Facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/Facebook.png -------------------------------------------------------------------------------- /source/images/social/Github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/Github.png -------------------------------------------------------------------------------- /source/images/social/GithubH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/GithubH.png -------------------------------------------------------------------------------- /source/images/social/LastFM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/LastFM.png -------------------------------------------------------------------------------- /source/images/social/LastFMH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/LastFMH.png -------------------------------------------------------------------------------- /source/images/social/LinkedIn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/LinkedIn.png -------------------------------------------------------------------------------- /source/images/social/Picasa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/Picasa.png -------------------------------------------------------------------------------- /source/images/social/PicasaH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/PicasaH.png -------------------------------------------------------------------------------- /source/images/social/SkypeH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/SkypeH.png -------------------------------------------------------------------------------- /source/images/social/Twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/Twitter.png -------------------------------------------------------------------------------- /source/images/social/TwitterH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/TwitterH.png -------------------------------------------------------------------------------- /source/images/social/Youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/Youtube.png -------------------------------------------------------------------------------- /source/images/social/YoutubeH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/YoutubeH.png -------------------------------------------------------------------------------- /.themes/classic/source/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/favicon.png -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 3 | - 1.9.3 4 | - 1.9.2 5 | script: bundle exec rake install; bundle exec rake generate 6 | -------------------------------------------------------------------------------- /source/assets/Swift.playground.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/Swift.playground.zip -------------------------------------------------------------------------------- /source/assets/layout-animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/layout-animation.gif -------------------------------------------------------------------------------- /source/font/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/font/fontawesome-webfont.eot -------------------------------------------------------------------------------- /source/font/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/font/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /source/images/bird_32_gray_fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/bird_32_gray_fail.png -------------------------------------------------------------------------------- /source/images/social/FacebookH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/FacebookH.png -------------------------------------------------------------------------------- /source/images/social/LinkedInH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/social/LinkedInH.png -------------------------------------------------------------------------------- /.powrc: -------------------------------------------------------------------------------- 1 | if [ -f "$rvm_path/scripts/rvm" ] && [ -f ".rvmrc" ] ; then 2 | source "$rvm_path/scripts/rvm" 3 | source ".rvmrc" 4 | fi 5 | -------------------------------------------------------------------------------- /.themes/classic/source/images/rss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/images/rss.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/dock/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/dock/button.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/playlist/item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/playlist/item.png -------------------------------------------------------------------------------- /source/font/fontawesome-webfont.svgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/font/fontawesome-webfont.svgz -------------------------------------------------------------------------------- /source/font/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/font/fontawesome-webfont.woff -------------------------------------------------------------------------------- /.themes/classic/source/images/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/images/email.png -------------------------------------------------------------------------------- /.themes/classic/source/images/noise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/images/noise.png -------------------------------------------------------------------------------- /.themes/classic/source/images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/images/search.png -------------------------------------------------------------------------------- /.themes/classic/source/robots.txt: -------------------------------------------------------------------------------- 1 | --- 2 | layout: nil 3 | --- 4 | User-agent: * 5 | Disallow: 6 | 7 | Sitemap: {{ site.url }}/sitemap.xml -------------------------------------------------------------------------------- /source/assets/Sean-Dougherty-Resume.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/Sean-Dougherty-Resume.pdf -------------------------------------------------------------------------------- /.themes/classic/source/images/code_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/images/code_bg.png -------------------------------------------------------------------------------- /.themes/classic/source/images/line-tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/images/line-tile.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/divider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/divider.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/display/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/display/background.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/display/bufferIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/display/bufferIcon.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/display/muteIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/display/muteIcon.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/display/playIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/display/playIcon.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/playlist/itemOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/playlist/itemOver.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/sharing/embedIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/sharing/embedIcon.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/sharing/shareIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/sharing/shareIcon.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/dock/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/dock/button.png -------------------------------------------------------------------------------- /source/images/fancybox/fancybox_loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/fancybox/fancybox_loading.gif -------------------------------------------------------------------------------- /source/images/fancybox/fancybox_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/images/fancybox/fancybox_sprite.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/playlist/sliderRail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/playlist/sliderRail.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/playlist/sliderThumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/playlist/sliderThumb.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/sharing/embedScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/sharing/embedScreen.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/sharing/shareScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/sharing/shareScreen.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/playlist/item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/playlist/item.png -------------------------------------------------------------------------------- /.themes/classic/source/_includes/custom/asides/about.html: -------------------------------------------------------------------------------- 1 |
2 |

About Me

3 |

A little something about messss.

4 |
5 | -------------------------------------------------------------------------------- /.themes/classic/source/images/bird_32_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/images/bird_32_gray.png -------------------------------------------------------------------------------- /.themes/classic/source/images/dotted-border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/images/dotted-border.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/background.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/blankButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/blankButton.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/muteButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/muteButton.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/pauseButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/pauseButton.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/playButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/playButton.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/unmuteButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/unmuteButton.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/playlist/sliderCapTop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/playlist/sliderCapTop.png -------------------------------------------------------------------------------- /sass/partials/_sidebar.scss: -------------------------------------------------------------------------------- 1 | @import "sidebar/base"; 2 | @import "sidebar/googleplus"; 3 | @import "sidebar/pinboard"; 4 | @import "sidebar/delicious"; 5 | -------------------------------------------------------------------------------- /sass/partials/sidebar/_delicious.scss: -------------------------------------------------------------------------------- 1 | .delicious-posts { 2 | a.delicious-link { margin-bottom: .5em; display: block; } 3 | p { font-size: 1em; } 4 | } 5 | -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/display/muteIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/display/muteIcon.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/display/playIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/display/playIcon.png -------------------------------------------------------------------------------- /source/font/yanonekaffeesatz-regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/font/yanonekaffeesatz-regular-webfont.eot -------------------------------------------------------------------------------- /source/font/yanonekaffeesatz-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/font/yanonekaffeesatz-regular-webfont.ttf -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/player.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/player.swf -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/muteButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/muteButtonOver.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/playButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/playButtonOver.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/timeSliderRail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/timeSliderRail.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/playlist/sliderCapBottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/playlist/sliderCapBottom.png -------------------------------------------------------------------------------- /sass/_base.scss: -------------------------------------------------------------------------------- 1 | @import "base/utilities"; 2 | @import "base/solarized"; 3 | @import "base/theme"; 4 | @import "base/typography"; 5 | @import "base/layout"; 6 | -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/divider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/divider.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/display/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/display/background.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/display/bufferIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/display/bufferIcon.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/playlist/itemOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/playlist/itemOver.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/sharing/embedIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/sharing/embedIcon.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/sharing/shareIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/sharing/shareIcon.png -------------------------------------------------------------------------------- /source/font/yanonekaffeesatz-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/font/yanonekaffeesatz-regular-webfont.woff -------------------------------------------------------------------------------- /.themes/classic/source/images/bird_32_gray_fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/images/bird_32_gray_fail.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/fullscreenButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/fullscreenButton.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/pauseButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/pauseButtonOver.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/timeSliderBuffer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/timeSliderBuffer.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/timeSliderCapLeft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/unmuteButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/unmuteButtonOver.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/background.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/muteButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/muteButton.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/playButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/playButton.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/playlist/sliderCapTop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/playlist/sliderCapTop.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/playlist/sliderRail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/playlist/sliderRail.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/playlist/sliderThumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/playlist/sliderThumb.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/sharing/embedScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/sharing/embedScreen.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/sharing/shareScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/sharing/shareScreen.png -------------------------------------------------------------------------------- /.themes/classic/sass/partials/_sidebar.scss: -------------------------------------------------------------------------------- 1 | @import "sidebar/base"; 2 | @import "sidebar/googleplus"; 3 | @import "sidebar/pinboard"; 4 | @import "sidebar/delicious"; 5 | -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/normalscreenButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/normalscreenButton.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/timeSliderCapRight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/timeSliderCapRight.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/timeSliderProgress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/timeSliderProgress.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/blankButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/blankButton.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/pauseButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/pauseButton.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/unmuteButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/unmuteButton.png -------------------------------------------------------------------------------- /.themes/classic/sass/_base.scss: -------------------------------------------------------------------------------- 1 | @import "base/utilities"; 2 | @import "base/solarized"; 3 | @import "base/theme"; 4 | @import "base/typography"; 5 | @import "base/layout"; 6 | -------------------------------------------------------------------------------- /.themes/classic/sass/partials/sidebar/_delicious.scss: -------------------------------------------------------------------------------- 1 | .delicious-posts { 2 | a.delicious-link { margin-bottom: .5em; display: block; } 3 | p { font-size: 1em; } 4 | } 5 | -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/fullscreenButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png -------------------------------------------------------------------------------- /assets/jwplayer/glow/controlbar/normalscreenButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png -------------------------------------------------------------------------------- /source/_includes/post/disqus_thread.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/muteButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/muteButtonOver.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/pauseButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/playButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/playButtonOver.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/timeSliderRail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/timeSliderRail.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/playlist/sliderCapBottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/playlist/sliderCapBottom.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/dock/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/dock/button.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/fullscreenButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/fullscreenButton.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png -------------------------------------------------------------------------------- /.themes/classic/sass/custom/_styles.scss: -------------------------------------------------------------------------------- 1 | // This File is imported last, and will override other styles in the cascade 2 | // Add styles here to make changes without digging in too much 3 | -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/playlist/item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/playlist/item.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/normalscreenButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/normalscreenButton.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/timeSliderProgress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/timeSliderProgress.png -------------------------------------------------------------------------------- /.themes/classic/source/_includes/post/disqus_thread.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/display/muteIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/display/muteIcon.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/display/playIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/display/playIcon.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/playlist/itemOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/playlist/itemOver.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/sharing/embedIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/sharing/embedIcon.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/sharing/shareIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/sharing/shareIcon.png -------------------------------------------------------------------------------- /source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/divider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/divider.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/display/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/display/background.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/display/bufferIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/display/bufferIcon.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/playlist/sliderRail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/playlist/sliderRail.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/playlist/sliderThumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/playlist/sliderThumb.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/sharing/embedScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/sharing/embedScreen.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/sharing/shareScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/sharing/shareScreen.png -------------------------------------------------------------------------------- /source/assets/Swift.playground/timeline.xctimeline: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/background.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/blankButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/blankButton.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/muteButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/muteButton.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButton.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/playButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/playButton.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapTop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapTop.png -------------------------------------------------------------------------------- /sass/partials/_sharing.scss: -------------------------------------------------------------------------------- 1 | .sharing { 2 | p.meta + & { 3 | padding: { top: 1em; left: 0; } 4 | background: $img-border top left repeat-x; 5 | } 6 | } 7 | 8 | #fb-root { display: none; } 9 | -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/muteButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/muteButtonOver.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/playButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/playButtonOver.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderRail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderRail.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButton.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapBottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapBottom.png -------------------------------------------------------------------------------- /source/_includes/custom/header.html: -------------------------------------------------------------------------------- 1 |
2 |

{{ site.title }}

3 | {% if site.subtitle %} 4 |

{{ site.subtitle }}

5 | {% endif %} 6 |
7 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/custom/after_footer.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Add content to be output at the bottom of each page. (You might use this for analytics scripts, for example) 3 | {% endcomment %} 4 | -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButton.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png -------------------------------------------------------------------------------- /.themes/classic/source/_includes/custom/navigation.html: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButton.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderProgress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderProgress.png -------------------------------------------------------------------------------- /.themes/classic/sass/partials/_sharing.scss: -------------------------------------------------------------------------------- 1 | .sharing { 2 | p.meta + & { 3 | padding: { top: 1em; left: 0; } 4 | background: $img-border top left repeat-x; 5 | } 6 | } 7 | 8 | #fb-root { display: none; } 9 | -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png -------------------------------------------------------------------------------- /sass/custom/_color.scss: -------------------------------------------------------------------------------- 1 | // $color-background: #eee; 2 | // $color-main: #258fb8; 3 | // $color-gray01: #666; 4 | // $color-gray02: #999; 5 | // $color-gray03: #ccc; 6 | // $color-gray04: #ddd; 7 | // $color-gray05: #fff; -------------------------------------------------------------------------------- /sass/parts/_comment.scss: -------------------------------------------------------------------------------- 1 | #comment{ 2 | padding: 30px 0; 3 | @include border-shadow(); 4 | h2.title{ 5 | font-size: 25px; 6 | font-weight: 300; 7 | line-height: 35px; 8 | margin-bottom: 20px; 9 | } 10 | } -------------------------------------------------------------------------------- /source/_includes/after_footer.html: -------------------------------------------------------------------------------- 1 | {% include disqus.html %} 2 | {% include facebook_like.html %} 3 | {% include google_plus_one.html %} 4 | {% include twitter_sharing.html %} 5 | {% include custom/after_footer.html %} 6 | -------------------------------------------------------------------------------- /source/_includes/fancybox.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/custom/header.html: -------------------------------------------------------------------------------- 1 |
2 |

{{ site.title }}

3 | {% if site.subtitle %} 4 |

{{ site.subtitle }}

5 | {% endif %} 6 |
7 | -------------------------------------------------------------------------------- /.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam/seancdougherty.com/master/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .bundle 2 | .DS_Store 3 | .sass-cache 4 | .gist-cache 5 | .pygments-cache 6 | _deploy 7 | public 8 | sass.old 9 | source.old 10 | source/_stash 11 | source/stylesheets/screen.css 12 | vendor 13 | node_modules 14 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/custom/footer.html: -------------------------------------------------------------------------------- 1 |

2 | Copyright © {{ site.time | date: "%Y" }} - {{ site.author }} - 3 | Powered by Octopress 4 |

5 | -------------------------------------------------------------------------------- /sass/parts/_footer.scss: -------------------------------------------------------------------------------- 1 | footer{ 2 | padding: 20px 0; 3 | text-align: center; 4 | font-size: 0.6em; 5 | color: #666; 6 | } 7 | footer a{ 8 | color: #123; 9 | } 10 | footer a:hover{ 11 | color: #456; 12 | } 13 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/after_footer.html: -------------------------------------------------------------------------------- 1 | {% include disqus.html %} 2 | {% include facebook_like.html %} 3 | {% include google_plus_one.html %} 4 | {% include twitter_sharing.html %} 5 | {% include custom/after_footer.html %} 6 | -------------------------------------------------------------------------------- /sass/_parts.scss: -------------------------------------------------------------------------------- 1 | @import "parts/header"; 2 | @import "parts/index"; 3 | @import "parts/article"; 4 | @import "parts/post"; 5 | @import "parts/archive"; 6 | @import "parts/comment"; 7 | @import "parts/footer"; 8 | @import "parts/syntax"; 9 | @import "parts/twitter"; -------------------------------------------------------------------------------- /sass/base/_color.scss: -------------------------------------------------------------------------------- 1 | $color-background: #eee !default; 2 | $color-main: #258fb8 !default; 3 | $color-gray01: #666 !default; 4 | $color-gray02: #999 !default; 5 | $color-gray03: #ccc !default; 6 | $color-gray04: #ddd !default; 7 | $color-gray05: #fff !default; 8 | -------------------------------------------------------------------------------- /sass/plugins/_plugins.scss: -------------------------------------------------------------------------------- 1 | /* 2 | Add plugin stylesheets to this directory and they will be automatically 3 | Imported. Load order is alphabetical and styles can be overriden in 4 | custom/_style.scss which is loaded after all plugin stylesheets. 5 | */ 6 | 7 | -------------------------------------------------------------------------------- /sass/_partials.scss: -------------------------------------------------------------------------------- 1 | @import "partials/header"; 2 | @import "partials/navigation"; 3 | @import "partials/blog"; 4 | @import "partials/sharing"; 5 | @import "partials/syntax"; 6 | @import "partials/archive"; 7 | @import "partials/sidebar"; 8 | @import "partials/footer"; 9 | -------------------------------------------------------------------------------- /sass/screen.scss: -------------------------------------------------------------------------------- 1 | @import "compass"; 2 | @include global-reset; 3 | 4 | @import "custom/colors"; 5 | @import "custom/fonts"; 6 | @import "custom/layout"; 7 | @import "base"; 8 | @import "partials"; 9 | @import "plugins/**/*"; 10 | @import "custom/styles"; 11 | -------------------------------------------------------------------------------- /.themes/classic/sass/_partials.scss: -------------------------------------------------------------------------------- 1 | @import "partials/header"; 2 | @import "partials/navigation"; 3 | @import "partials/blog"; 4 | @import "partials/sharing"; 5 | @import "partials/syntax"; 6 | @import "partials/archive"; 7 | @import "partials/sidebar"; 8 | @import "partials/footer"; 9 | -------------------------------------------------------------------------------- /.themes/classic/sass/plugins/_plugins.scss: -------------------------------------------------------------------------------- 1 | /* 2 | Add plugin stylesheets to this directory and they will be automatically 3 | Imported. Load order is alphabetical and styles can be overriden in 4 | custom/_style.scss which is loaded after all plugin stylesheets. 5 | */ 6 | 7 | -------------------------------------------------------------------------------- /.themes/classic/sass/screen.scss: -------------------------------------------------------------------------------- 1 | @import "compass"; 2 | @include global-reset; 3 | @include reset-html5; 4 | 5 | @import "custom/colors"; 6 | @import "custom/fonts"; 7 | @import "custom/layout"; 8 | @import "base"; 9 | @import "partials"; 10 | @import "plugins/**/*"; 11 | @import "custom/styles"; 12 | -------------------------------------------------------------------------------- /source/_includes/custom/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /sass/partials/sidebar/_pinboard.scss: -------------------------------------------------------------------------------- 1 | #pinboard_linkroll { 2 | .pin-title, .pin-description { 3 | display: block; 4 | margin-bottom: .5em; 5 | } 6 | .pin-tag { 7 | @include hover-link; 8 | @extend .aside-alt-link; 9 | &:after { content: ','; } 10 | &:last-child:after { content: ''; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /source/assets/Swift.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /source/_includes/post/author.html: -------------------------------------------------------------------------------- 1 | {% if post.author %} 2 | {% assign author = post.author %} 3 | {% elsif page.author %} 4 | {% assign author = page.author %} 5 | {% else %} 6 | {% assign author = site.author %} 7 | {% endif %} 8 | {% if author %}Posted by {{ author }}{% endif %} 9 | -------------------------------------------------------------------------------- /.themes/classic/sass/partials/sidebar/_pinboard.scss: -------------------------------------------------------------------------------- 1 | #pinboard_linkroll { 2 | .pin-title, .pin-description { 3 | display: block; 4 | margin-bottom: .5em; 5 | } 6 | .pin-tag { 7 | @include hover-link; 8 | @extend .aside-alt-link; 9 | &:after { content: ','; } 10 | &:last-child:after { content: ''; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/post/author.html: -------------------------------------------------------------------------------- 1 | {% if post.author %} 2 | {% assign author = post.author %} 3 | {% elsif page.author %} 4 | {% assign author = page.author %} 5 | {% else %} 6 | {% assign author = site.author %} 7 | {% endif %} 8 | {% if author %}Posted by {{ author }}{% endif %} 9 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/custom/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /source/_includes/custom/footer.html: -------------------------------------------------------------------------------- 1 |

2 | Copyright © {{ site.time | date: "%Y" }} - {{ site.author }}
3 | This site is Open Source, feel free to open an issue or submit a pull request. 4 |

5 | -------------------------------------------------------------------------------- /source/_includes/custom/navigation.html: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /source/_includes/asides/twitter.html: -------------------------------------------------------------------------------- 1 | {% if site.twitter_user %} 2 |
3 |
4 |


My Tweets, on Twitter.

5 | 6 |
7 |
8 | {% endif %} -------------------------------------------------------------------------------- /source/_includes/asides/recent_posts.html: -------------------------------------------------------------------------------- 1 |
2 |

Recent Posts

3 | 10 |
11 | -------------------------------------------------------------------------------- /sass/partials/_header.scss: -------------------------------------------------------------------------------- 1 | body > header { 2 | background: $header-bg; 3 | h1 { 4 | display: inline-block; 5 | margin: 0; 6 | a, a:visited, a:hover { 7 | color: $title_color; 8 | text-decoration: none; 9 | } 10 | } 11 | h2 { 12 | margin: .2em 0 0; 13 | @extend .sans; 14 | font-size: 1em; 15 | color: $subtitle-color; 16 | font-weight: normal; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/asides/recent_posts.html: -------------------------------------------------------------------------------- 1 |
2 |

Recent Posts

3 | 10 |
11 | -------------------------------------------------------------------------------- /.themes/classic/sass/partials/_header.scss: -------------------------------------------------------------------------------- 1 | body > header { 2 | background: $header-bg; 3 | h1 { 4 | display: inline-block; 5 | margin: 0; 6 | a, a:visited, a:hover { 7 | color: $title_color; 8 | text-decoration: none; 9 | } 10 | } 11 | h2 { 12 | margin: .2em 0 0; 13 | @extend .sans; 14 | font-size: 1em; 15 | color: $subtitle-color; 16 | font-weight: normal; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /source/_includes/asides/googleplus.html: -------------------------------------------------------------------------------- 1 | {% if site.googleplus_user %} 2 |
3 |

4 | 5 | 6 | Google+ 7 | 8 |

9 |
10 | {% endif %} 11 | 12 | -------------------------------------------------------------------------------- /README.markdown: -------------------------------------------------------------------------------- 1 | ## https://github.com/steam/steam.github.io is the repo for the website seancdougherty.com 2 | 3 | https://github.com/steam/seancdoughert.com is the octopress project for http://seancdougherty.com 4 | 5 | Write posts and modify content in seancdougherty.com, run the rake deploy task and then copy the files into steam.github.io and push. 6 | 7 | The files will not be created automatically in steam.github.io, you need to copy and push. 8 | -------------------------------------------------------------------------------- /source/_includes/google_plus_one.html: -------------------------------------------------------------------------------- 1 | {% if site.google_plus_one %} 2 | 9 | {% endif %} 10 | -------------------------------------------------------------------------------- /source/_includes/post/categories.html: -------------------------------------------------------------------------------- 1 | {% capture category %}{% if post %}{{ post.categories | category_links | size }}{% else %}{{ page.categories | category_links | size }}{% endif %}{% endcapture %} 2 | {% unless category == '0' %} 3 | 4 | {% if post %} 5 | {{ post.categories | category_links }} 6 | {% else %} 7 | {{ page.categories | category_links }} 8 | {% endif %} 9 | 10 | {% endunless %} 11 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/asides/googleplus.html: -------------------------------------------------------------------------------- 1 | {% if site.googleplus_user %} 2 |
3 |

4 | 5 | 6 | Google+ 7 | 8 |

9 |
10 | {% endif %} 11 | 12 | -------------------------------------------------------------------------------- /source/_includes/asides/delicious.html: -------------------------------------------------------------------------------- 1 | {% if site.delicious_user %} 2 |
3 |

On Delicious

4 |
5 | 6 |

My Delicious Bookmarks »

7 |
8 | {% endif %} -------------------------------------------------------------------------------- /.themes/classic/source/_includes/google_plus_one.html: -------------------------------------------------------------------------------- 1 | {% if site.google_plus_one %} 2 | 9 | {% endif %} 10 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/post/categories.html: -------------------------------------------------------------------------------- 1 | {% capture category %}{% if post %}{{ post.categories | category_links | size }}{% else %}{{ page.categories | category_links | size }}{% endif %}{% endcapture %} 2 | {% unless category == '0' %} 3 | 4 | {% if post %} 5 | {{ post.categories | category_links }} 6 | {% else %} 7 | {{ page.categories | category_links }} 8 | {% endif %} 9 | 10 | {% endunless %} 11 | -------------------------------------------------------------------------------- /config.rb: -------------------------------------------------------------------------------- 1 | require 'sass-globbing' 2 | 3 | # Require any additional compass plugins here. 4 | project_type = :stand_alone 5 | 6 | # Publishing paths 7 | http_path = "/" 8 | http_images_path = "/images" 9 | http_fonts_path = "/fonts" 10 | css_dir = "public/stylesheets" 11 | 12 | # Local development paths 13 | sass_dir = "sass" 14 | images_dir = "source/images" 15 | fonts_dir = "source/fonts" 16 | 17 | line_comments = false 18 | output_style = :compressed 19 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/asides/delicious.html: -------------------------------------------------------------------------------- 1 | {% if site.delicious_user %} 2 |
3 |

On Delicious

4 |
5 | 6 |

My Delicious Bookmarks »

7 |
8 | {% endif %} -------------------------------------------------------------------------------- /source/blog/archives/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Blog Archive 4 | footer: false 5 | --- 6 | 7 |
8 | {% for post in site.posts reverse %} 9 | {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %} 10 | {% unless year == this_year %} 11 | {% assign year = this_year %} 12 |

{{ year }}

13 | {% endunless %} 14 |
15 | {% include archive_post.html %} 16 |
17 | {% endfor %} 18 |
19 | -------------------------------------------------------------------------------- /source/_includes/facebook_like.html: -------------------------------------------------------------------------------- 1 | {% if site.facebook_like %} 2 |
3 | 10 | {% endif %} 11 | -------------------------------------------------------------------------------- /source/_layouts/category_index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | footer: false 4 | --- 5 | 6 |
7 | {% for post in site.categories[page.category] %} 8 | {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %} 9 | {% unless year == this_year %} 10 | {% assign year = this_year %} 11 |

{{ year }}

12 | {% endunless %} 13 |
14 | {% include archive_post.html %} 15 |
16 | {% endfor %} 17 |
18 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | ; This file is for unifying the coding style for different editors and IDEs. 2 | ; More information at http://EditorConfig.org 3 | 4 | root = true 5 | 6 | ; Use 2 spaces for indentation in all Ruby files 7 | 8 | [*.rb] 9 | indent_style = space 10 | indent_size = 2 11 | 12 | [Rakefile] 13 | indent_style = space 14 | indent_size = 2 15 | 16 | [Gemfile*] 17 | indent_style = space 18 | indent_size = 2 19 | 20 | [config.ru] 21 | indent_style = space 22 | indent_size = 2 23 | -------------------------------------------------------------------------------- /.themes/classic/source/blog/archives/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Blog Archive 4 | footer: false 5 | --- 6 | 7 |
8 | {% for post in site.posts reverse %} 9 | {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %} 10 | {% unless year == this_year %} 11 | {% assign year = this_year %} 12 |

{{ year }}

13 | {% endunless %} 14 |
15 | {% include archive_post.html %} 16 |
17 | {% endfor %} 18 |
19 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/facebook_like.html: -------------------------------------------------------------------------------- 1 | {% if site.facebook_like %} 2 |
3 | 10 | {% endif %} 11 | -------------------------------------------------------------------------------- /.themes/classic/source/_layouts/category_index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | footer: false 4 | --- 5 | 6 |
7 | {% for post in site.categories[page.category] %} 8 | {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %} 9 | {% unless year == this_year %} 10 | {% assign year = this_year %} 11 |

{{ year }}

12 | {% endunless %} 13 |
14 | {% include archive_post.html %} 15 |
16 | {% endfor %} 17 |
18 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "http://rubygems.org" 2 | 3 | group :development do 4 | gem 'rake', '~> 0.9' 5 | gem 'jekyll', '~> 0.12' 6 | gem 'rdiscount', '~> 2.0.7' 7 | gem 'pygments.rb', '~> 0.3.4' 8 | gem 'RedCloth', '~> 4.2.9' 9 | gem 'haml', '~> 3.1.7' 10 | gem 'compass', '~> 0.12.2' 11 | gem 'sass-globbing', '~> 1.0.0' 12 | gem 'rubypants', '~> 0.2.0' 13 | gem 'rb-fsevent', '~> 0.9' 14 | gem 'stringex', '~> 1.4.0' 15 | gem 'liquid', '~> 2.3.0' 16 | end 17 | 18 | gem 'sinatra', '~> 1.4.2' 19 | -------------------------------------------------------------------------------- /source/_includes/twitter_sharing.html: -------------------------------------------------------------------------------- 1 | {% if site.twitter_follow_button or site.twitter_tweet_button %} 2 | 11 | {% endif %} 12 | -------------------------------------------------------------------------------- /plugins/haml.rb: -------------------------------------------------------------------------------- 1 | module Jekyll 2 | require 'haml' 3 | class HamlConverter < Converter 4 | safe true 5 | priority :low 6 | 7 | def matches(ext) 8 | ext =~ /haml/i 9 | end 10 | 11 | def output_ext(ext) 12 | ".html" 13 | end 14 | 15 | def convert(content) 16 | begin 17 | engine = Haml::Engine.new(content) 18 | engine.render 19 | rescue StandardError => e 20 | puts "!!! HAML Error: " + e.message 21 | end 22 | end 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/archive_post.html: -------------------------------------------------------------------------------- 1 | {% capture category %}{{ post.categories | size }}{% endcapture %} 2 |

{{post.title}}

3 | 4 | {% if category != '0' %} 5 | 8 | {% endif %} 9 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/twitter_sharing.html: -------------------------------------------------------------------------------- 1 | {% if site.twitter_follow_button or site.twitter_tweet_button %} 2 | 11 | {% endif %} 12 | -------------------------------------------------------------------------------- /sass/custom/_fonts.scss: -------------------------------------------------------------------------------- 1 | // Here you can easily change font faces which are used in your site. 2 | // To give it a try, uncomment some of the lines below rebuild your blog, and see how it works. your sites's. 3 | // If you love to use Web Fonts, you also need to add some lines to source/_includes/custom/head.html 4 | 5 | $sans: "Open Sans", sans-serif; 6 | $serif: "Noto Serif", serif; 7 | //$mono: "Courier", monospace; 8 | $heading-font-family: $sans; 9 | //$header-title-font-family: "Futura", sans-serif; 10 | //$header-subtitle-font-family: "Futura", sans-serif; 11 | -------------------------------------------------------------------------------- /source/_includes/aside.html: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /source/_includes/archive_post.html: -------------------------------------------------------------------------------- 1 | {% capture category %}{{ post.categories | size }}{% endcapture %} 2 |

{% if site.titlecase %}{{ post.title | titlecase }}{% else %}{{ post.title }}{% endif %}

3 | 4 | {% if category != '0' %} 5 | 8 | {% endif %} 9 | -------------------------------------------------------------------------------- /source/_includes/post/sharing.html: -------------------------------------------------------------------------------- 1 |
2 | {% if site.twitter_tweet_button %} 3 | 4 | {% endif %} 5 | {% if site.google_plus_one %} 6 |
7 | {% endif %} 8 | {% if site.facebook_like %} 9 |
10 | {% endif %} 11 |
12 | -------------------------------------------------------------------------------- /.themes/classic/sass/custom/_fonts.scss: -------------------------------------------------------------------------------- 1 | // Here you can easily change font faces which are used in your site. 2 | // To give it a try, uncomment some of the lines below rebuild your blog, and see how it works. your sites's. 3 | // If you love to use Web Fonts, you also need to add some lines to source/_includes/custom/head.html 4 | 5 | //$sans: "Optima", sans-serif; 6 | //$serif: "Baskerville", serif; 7 | //$mono: "Courier", monospace; 8 | //$heading-font-family: "Verdana", sans-serif; 9 | //$header-title-font-family: "Futura", sans-serif; 10 | //$header-subtitle-font-family: "Futura", sans-serif; 11 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/post/sharing.html: -------------------------------------------------------------------------------- 1 |
2 | {% if site.twitter_tweet_button %} 3 | 4 | {% endif %} 5 | {% if site.google_plus_one %} 6 |
7 | {% endif %} 8 | {% if site.facebook_like %} 9 |
10 | {% endif %} 11 |
12 | -------------------------------------------------------------------------------- /sass/partials/sidebar/_googleplus.scss: -------------------------------------------------------------------------------- 1 | .googleplus { 2 | h1 { 3 | -moz-box-shadow: none !important; 4 | -webkit-box-shadow: none !important; 5 | -o-box-shadow: none !important; 6 | box-shadow: none !important; 7 | border-bottom: 0px none !important; 8 | } 9 | a { 10 | text-decoration: none; 11 | white-space: normal !important; 12 | line-height: 32px; 13 | 14 | img { 15 | float: left; 16 | margin-right: 0.5em; 17 | border: 0 none; 18 | } 19 | } 20 | } 21 | 22 | .googleplus-hidden { 23 | position: absolute; 24 | top: -1000em; 25 | left: -1000em; 26 | } 27 | -------------------------------------------------------------------------------- /sass/partials/_footer.scss: -------------------------------------------------------------------------------- 1 | body > footer { 2 | @extend .sans; 3 | font-size: .8em; 4 | color: $footer-color; 5 | text-shadow: lighten($footer-bg, 5) 0 1px; 6 | background-color: $footer-bg; 7 | @include background($footer-bg-front, $footer-bg-back); 8 | border-top: 1px solid $footer-border-top; 9 | position: relative; 10 | padding-top: 1em; 11 | padding-bottom: 1em; 12 | margin-bottom: 3em; 13 | @include border-bottom-radius(.4em); 14 | z-index: 1; 15 | a { 16 | @include link-colors($footer-link-color, $footer-link-color-hover, $visited: $footer-link-color); 17 | } 18 | p:last-child { margin-bottom: 0; } 19 | } 20 | -------------------------------------------------------------------------------- /.themes/classic/sass/partials/sidebar/_googleplus.scss: -------------------------------------------------------------------------------- 1 | .googleplus { 2 | h1 { 3 | -moz-box-shadow: none !important; 4 | -webkit-box-shadow: none !important; 5 | -o-box-shadow: none !important; 6 | box-shadow: none !important; 7 | border-bottom: 0px none !important; 8 | } 9 | a { 10 | text-decoration: none; 11 | white-space: normal !important; 12 | line-height: 32px; 13 | 14 | img { 15 | float: left; 16 | margin-right: 0.5em; 17 | border: 0 none; 18 | } 19 | } 20 | } 21 | 22 | .googleplus-hidden { 23 | position: absolute; 24 | top: -1000em; 25 | left: -1000em; 26 | } 27 | -------------------------------------------------------------------------------- /source/_includes/google_analytics.html: -------------------------------------------------------------------------------- 1 | {% if site.google_analytics_tracking_id %} 2 | 13 | {% endif %} 14 | -------------------------------------------------------------------------------- /source/_layouts/info.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |
7 | {% if page.title %} 8 |
9 |

{% if site.titlecase %}{{ page.title | titlecase }}{% else %}{{ page.title }}{% endif %}

10 |
11 | {% endif %} 12 | {{ content }} 13 | {% unless page.footer == false %} 14 |
15 | {% unless page.sharing == false %} 16 | {% include post/sharing.html %} 17 | {% endunless %} 18 |
19 | {% endunless %} 20 |
21 |
22 | {% unless page.sidebar == false %} 23 | {% include aside.html %} 24 | {% endunless %} 25 | -------------------------------------------------------------------------------- /source/search.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 |

Search Results

5 |
6 |
7 |
8 | 9 | 10 | 13 | 19 | 20 | -------------------------------------------------------------------------------- /.themes/classic/sass/partials/_footer.scss: -------------------------------------------------------------------------------- 1 | body > footer { 2 | @extend .sans; 3 | font-size: .8em; 4 | color: $footer-color; 5 | text-shadow: lighten($footer-bg, 5) 0 1px; 6 | background-color: $footer-bg; 7 | @include background($footer-bg-front, $footer-bg-back); 8 | border-top: 1px solid $footer-border-top; 9 | position: relative; 10 | padding-top: 1em; 11 | padding-bottom: 1em; 12 | margin-bottom: 3em; 13 | @include border-bottom-radius(.4em); 14 | z-index: 1; 15 | a { 16 | @include link-colors($footer-link-color, $footer-link-color-hover, $visited: $footer-link-color); 17 | } 18 | p:last-child { margin-bottom: 0; } 19 | } 20 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/google_analytics.html: -------------------------------------------------------------------------------- 1 | {% if site.google_analytics_tracking_id %} 2 | 13 | {% endif %} 14 | -------------------------------------------------------------------------------- /source/_includes/banner.html: -------------------------------------------------------------------------------- 1 | {% if site.twitter_user and site.twitter_tweet_count > 0 %} 2 | 9 | 10 | 15 | {% endif %} -------------------------------------------------------------------------------- /sass/custom/_layout.scss: -------------------------------------------------------------------------------- 1 | // Here you can easily change your sites's layout. 2 | // To give it a try, uncomment some of the lines below, make changes, rebuild your blog, and see how it works. 3 | 4 | //$header-font-size: 1em; 5 | //$header-padding-top: 1.5em; 6 | //$header-padding-bottom: 1.5em; 7 | 8 | //$max-width: 1350px; 9 | //$indented-lists: true; 10 | 11 | // Padding used for layout margins 12 | //$pad-min: 18px; 13 | //$pad-narrow: 25px; 14 | //$pad-medium: 35px; 15 | //$pad-wide: 55px; 16 | 17 | // Sidebar widths used in media queries 18 | //$sidebar-width-medium: 240px; 19 | //$sidebar-pad-medium: 15px; 20 | //$sidebar-pad-wide: 20px; 21 | //$sidebar-width-wide: 300px; 22 | -------------------------------------------------------------------------------- /.themes/classic/sass/custom/_layout.scss: -------------------------------------------------------------------------------- 1 | // Here you can easily change your sites's layout. 2 | // To give it a try, uncomment some of the lines below, make changes, rebuild your blog, and see how it works. 3 | 4 | //$header-font-size: 1em; 5 | //$header-padding-top: 1.5em; 6 | //$header-padding-bottom: 1.5em; 7 | 8 | //$max-width: 1350px; 9 | //$indented-lists: true; 10 | 11 | // Padding used for layout margins 12 | //$pad-min: 18px; 13 | //$pad-narrow: 25px; 14 | //$pad-medium: 35px; 15 | //$pad-wide: 55px; 16 | 17 | // Sidebar widths used in media queries 18 | //$sidebar-width-medium: 240px; 19 | //$sidebar-pad-medium: 15px; 20 | //$sidebar-pad-wide: 20px; 21 | //$sidebar-width-wide: 300px; 22 | -------------------------------------------------------------------------------- /source/blog/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 | {% assign index = true %} 7 | {% for post in paginator.posts %} 8 | {% assign content = post.content %} 9 |
10 | {% include article.html %} 11 |
12 | {% endfor %} 13 | 22 |
23 | {% include aside.html %} 24 | -------------------------------------------------------------------------------- /source/_includes/custom/after_footer.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Add content to be output at the bottom of each page. (You might use this for analytics scripts, for example) 3 | {% endcomment %} 4 | 25 | -------------------------------------------------------------------------------- /sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | http://seancdougherty.com/blog/2013/05/22/ios-data-security/ 5 | 2013-05-23T11:39:42-06:00 6 | 7 | 8 | http://seancdougherty.com/blog/archives/ 9 | 2013-05-23T11:39:42-06:00 10 | 11 | 12 | http://seancdougherty.com/ 13 | 2013-05-23T11:39:42-06:00 14 | 15 | 16 | http://seancdougherty.com/robots.txt 17 | 2013-05-22T13:39:05-06:00 18 | 19 | -------------------------------------------------------------------------------- /config.ru: -------------------------------------------------------------------------------- 1 | require 'bundler/setup' 2 | require 'sinatra/base' 3 | 4 | # The project root directory 5 | $root = ::File.dirname(__FILE__) 6 | 7 | class SinatraStaticServer < Sinatra::Base 8 | 9 | get(/.+/) do 10 | send_sinatra_file(request.path) {404} 11 | end 12 | 13 | not_found do 14 | send_file(File.join(File.dirname(__FILE__), 'public', '404.html'), {:status => 404}) 15 | end 16 | 17 | def send_sinatra_file(path, &missing_file_block) 18 | file_path = File.join(File.dirname(__FILE__), 'public', path) 19 | file_path = File.join(file_path, 'index.html') unless file_path =~ /\.[a-z]+$/i 20 | File.exist?(file_path) ? send_file(file_path) : missing_file_block.call 21 | end 22 | 23 | end 24 | 25 | run SinatraStaticServer 26 | -------------------------------------------------------------------------------- /source/_layouts/default.html: -------------------------------------------------------------------------------- 1 | {% capture root_url %}{{ site.root | strip_slash }}{% endcapture %} 2 | {% include head.html %} 3 | 4 |
{% include header.html %}
5 | 6 |
7 |
8 | {{ content | expand_urls: root_url }} 9 |
10 |
11 | 12 | {% include after_footer.html %} 13 | 14 | 15 | -------------------------------------------------------------------------------- /.themes/classic/source/_layouts/default.html: -------------------------------------------------------------------------------- 1 | {% capture root_url %}{{ site.root | strip_slash }}{% endcapture %} 2 | {% include head.html %} 3 | 4 |
{% include header.html %}
5 | 6 |
7 |
8 | {{ content | expand_urls: root_url }} 9 |
10 |
11 | 12 | {% include after_footer.html %} 13 | 14 | 15 | -------------------------------------------------------------------------------- /source/_includes/custom/asides/about.html: -------------------------------------------------------------------------------- 1 |
2 |

About Me

3 | 4 |

I am a mobile software engineer living in Denver Colorado. I spend my time writing code, mostly Swift, hanging out with my wife and 3 boys, injuring myself while running and coaching my kids' soccer teams.

5 |

I am currently the Mobile Lead working with the awesome folks at Ello.

6 |
7 |
8 |
9 |


Come say hi at Ello

10 |

11 |
12 |
13 | -------------------------------------------------------------------------------- /sass/base/_font.scss: -------------------------------------------------------------------------------- 1 | $font-default: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, sans-serif; 2 | $font-mono: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; 3 | 4 | $font-icon: FontAwesome; 5 | $font-icon-path: "/font/fontawesome-webfont"; 6 | 7 | @font-face { 8 | font-family: 'FontAwesome'; 9 | src: url('#{$font-icon-path}.eot'); 10 | src: url('#{$font-icon-path}.eot?#iefix') format('embedded-opentype'), 11 | url('#{$font-icon-path}.woff') format('woff'), 12 | url('#{$font-icon-path}.ttf') format('truetype'), 13 | url('#{$font-icon-path}.svgz#FontAwesomeRegular') format('svg'), 14 | url('#{$font-icon-path}.svg#FontAwesomeRegular') format('svg'); 15 | font-weight: normal; 16 | font-style: normal; 17 | } 18 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/navigation.html: -------------------------------------------------------------------------------- 1 | 7 | {% if site.simple_search %} 8 |
9 |
10 | 11 | 12 |
13 |
14 | {% endif %} 15 | {% include custom/navigation.html %} 16 | -------------------------------------------------------------------------------- /sass/parts/_index.scss: -------------------------------------------------------------------------------- 1 | #pagenavi{ 2 | padding: 20px 0; 3 | height: 20px; 4 | line-height: 20px; 5 | position: relative; 6 | @include border-shadow(); 7 | a{ 8 | &:hover{ 9 | text-decoration: underline; 10 | } 11 | } 12 | .prev, .next{ 13 | position: absolute; 14 | } 15 | .prev{ 16 | padding-left: 30px; 17 | left: 0; 18 | &:before{ 19 | content: "\f060"; 20 | font: 1.3em $font-icon; 21 | position: absolute; 22 | left: 0; 23 | } 24 | } 25 | .next{ 26 | padding-right: 30px; 27 | right: 0; 28 | &:before{ 29 | content: "\f061"; 30 | font: 1.3em $font-icon; 31 | position: absolute; 32 | right: 0; 33 | } 34 | } 35 | .center{ 36 | text-align: center; 37 | width: 100%; 38 | display: block; 39 | @media screen and (max-width: 400px){ 40 | display: none; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /source/_includes/navigation.html: -------------------------------------------------------------------------------- 1 | 9 | {% comment %} 10 | {% if site.simple_search %} 11 |
12 |
13 | 14 | 15 |
16 |
17 | {% endif %} 18 | {% endcomment %} 19 | {% include custom/navigation.html %} 20 | -------------------------------------------------------------------------------- /.themes/classic/source/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 | {% assign index = true %} 7 | {% for post in paginator.posts %} 8 | {% assign content = post.content %} 9 |
10 | {% include article.html %} 11 |
12 | {% endfor %} 13 | 22 |
23 | 30 | -------------------------------------------------------------------------------- /source/_includes/asides/pinboard.html: -------------------------------------------------------------------------------- 1 | {% if site.pinboard_user %} 2 |
3 |

My Pinboard

4 | 5 |

My Pinboard Bookmarks »

6 |
7 | 19 | {% endif %} 20 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/asides/pinboard.html: -------------------------------------------------------------------------------- 1 | {% if site.pinboard_user %} 2 |
3 |

My Pinboard

4 | 5 |

My Pinboard Bookmarks »

6 |
7 | 19 | {% endif %} 20 | -------------------------------------------------------------------------------- /.themes/classic/.editorconfig: -------------------------------------------------------------------------------- 1 | ; This file is for unifying the coding style for different editors and IDEs. 2 | ; More information at http://EditorConfig.org 3 | 4 | 5 | ; Use 2 spaces for indentation in SCSS, JavaScript, HTML, and XML 6 | 7 | [*.scss] 8 | indent_style = space 9 | indent_size = 2 10 | 11 | [*.js] 12 | indent_style = space 13 | indent_size = 2 14 | 15 | [*.html] 16 | indent_style = space 17 | indent_size = 2 18 | 19 | [*.xml] 20 | indent_style = space 21 | indent_size = 2 22 | 23 | 24 | ; Use 4 spaces for indentation in Markdown files 25 | 26 | [*.md] 27 | indent_style = space 28 | indent_size = 4 29 | 30 | [*.markdown] 31 | indent_style = space 32 | indent_size = 4 33 | 34 | 35 | ; Override default indentation for some library files 36 | 37 | [jwplayer/glow/glow.xml] 38 | indent_style = tab 39 | 40 | [libs/jXHR.js] 41 | indent_style = tab 42 | 43 | [libs/swfobject-dynamic.js] 44 | indent_style = tab 45 | -------------------------------------------------------------------------------- /source/_posts/2016-06-22-open-sourcing-ellos-ios-app.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Open Sourcing Ello's iOS App" 4 | date: 2016-06-22 22:50 5 | comments: true 6 | categories: iOS 7 | --- 8 | 9 | A couple weeks ago we open sourced [Ello's iOS App](https://github.com/ello/ello-ios). 10 | 11 | > The iOS app constitutes the largest codebase in the Ello ecosystem right now - at 57,391 lines of Swift, it just barely edges out the 55,911 lines of Ruby in our Rails backend, and it’s almost twice as big as the 29,827 lines of JS in our React webapp. 12 | 13 | We've wanted to do this for many months and finally found the time to get the repository into public form. I hope it's as useful of a resource for others as the other great open source projects have been for me. Jay Zeschin and I posted about it on Ello today. You can read the full post here: 14 | [https://ello.co/sean/post/eobkyhj79p8yzol7it_1ew](https://ello.co/sean/post/eobkyhj79p8yzol7it_1ew) -------------------------------------------------------------------------------- /sass/parts/_twitter.scss: -------------------------------------------------------------------------------- 1 | #banner{ 2 | color: $color-gray02; 3 | padding: 30px 0; 4 | line-height: 30px; 5 | text-align: center; 6 | position: relative; 7 | display: none; 8 | @include border-shadow(); 9 | &:hover{ 10 | a{ 11 | color: $color-main; 12 | } 13 | } 14 | a{ 15 | color: $color-gray02; 16 | @include transition(0.3s); 17 | &:hover{ 18 | text-decoration: underline; 19 | } 20 | } 21 | small{ 22 | position: absolute; 23 | right: 0; 24 | bottom: 0; 25 | } 26 | .loading{ 27 | background: image-url('loading_pacman.gif') center no-repeat; 28 | text-indent: -9999px; 29 | } 30 | .container{ 31 | height: 30px; 32 | overflow: hidden; 33 | position: relative; 34 | display: none; 35 | .feed{ 36 | list-style: none; 37 | position: absolute; 38 | top: 0; 39 | width: 100%; 40 | li{ 41 | position: relative; 42 | small{ 43 | position: absolute; 44 | right: 0; 45 | } 46 | } 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /source/_includes/post/date.html: -------------------------------------------------------------------------------- 1 | {% capture date %}{{ page.date }}{{ post.date }}{% endcapture %} 2 | {% capture date_formatted %}{{ page.date_formatted }}{{ post.date_formatted }}{% endcapture %} 3 | {% capture has_date %}{{ date | size }}{% endcapture %} 4 | 5 | {% capture updated %}{{ page.updated }}{{ post.updated }}{% endcapture %} 6 | {% capture updated_formatted %}{{ page.updated_formatted }}{{ post.updated_formatted }}{% endcapture %} 7 | {% capture was_updated %}{{ updated | size }}{% endcapture %} 8 | 9 | {% if has_date != '0' %} 10 | {% capture time %}{% endcapture %} 11 | {% endif %} 12 | 13 | {% if was_updated != '0' %} 14 | {% capture updated %}{% endcapture %} 15 | {% else %}{% assign updated = false %}{% endif %} -------------------------------------------------------------------------------- /sass/parts/_post.scss: -------------------------------------------------------------------------------- 1 | .post{ 2 | h2.title, .entry-content{ 3 | @media screen and (max-width: 800px){ 4 | margin-left: 0; 5 | } 6 | } 7 | .meta{ 8 | line-height: 2; 9 | font-size: 0.7em; 10 | color: $color-gray02; 11 | width: 370px; 12 | @media screen and (max-width: 800px){ 13 | margin-top: 15px; 14 | position: static; 15 | width: auto; 16 | } 17 | a{ 18 | @include link-colors($color-gray02, $color-gray01); 19 | @include transition(0.3s); 20 | } 21 | .date, .tags, .comments{ 22 | padding-left: 30px; 23 | position: relative; 24 | &:before{ 25 | color: $color-gray03; 26 | font: 1.3em $font-icon; 27 | line-height: 1.6em; 28 | position: absolute; 29 | left: 0; 30 | } 31 | @media screen and (max-width: 800px){ 32 | @include inline-block; 33 | margin-right: 30px; 34 | } 35 | } 36 | .date:before{content: "\f073";} 37 | .tags:before{content: "\f02c";} 38 | .comments:before{content: "\f075";} 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/post/date.html: -------------------------------------------------------------------------------- 1 | {% capture date %}{{ page.date }}{{ post.date }}{% endcapture %} 2 | {% capture date_formatted %}{{ page.date_formatted }}{{ post.date_formatted }}{% endcapture %} 3 | {% capture has_date %}{{ date | size }}{% endcapture %} 4 | 5 | {% capture updated %}{{ page.updated }}{{ post.updated }}{% endcapture %} 6 | {% capture updated_formatted %}{{ page.updated_formatted }}{{ post.updated_formatted }}{% endcapture %} 7 | {% capture was_updated %}{{ updated | size }}{% endcapture %} 8 | 9 | {% if has_date != '0' %} 10 | {% capture time %}{% endcapture %} 11 | {% endif %} 12 | 13 | {% if was_updated != '0' %} 14 | {% capture updated %}{% endcapture %} 15 | {% else %}{% assign updated = false %}{% endif %} -------------------------------------------------------------------------------- /source/javascripts/ajaxify.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | 3 | var hash = window.location.hash.substr(1); 4 | var href = $('#nav li#ajax a').each(function(){ 5 | var href = $(this).attr('href'); 6 | if(hash==href.substr(0,href.length-5)){ 7 | var toLoad = hash+'.html #toload'; 8 | $('#toload').load(toLoad) 9 | } 10 | }); 11 | 12 | $('#nav li#ajax a').click(function(){ 13 | 14 | var toLoad = $(this).attr('href')+' #toload'; 15 | $('#toload').fadeTo('fast',0.00001,loadContent); 16 | $('#load').remove(); 17 | $('#wrapper').append('LOADING...'); 18 | $('#load').fadeIn('fast'); 19 | window.location.hash = $(this).attr('href').substr(0,$(this).attr('href').length-5); 20 | function loadContent() { 21 | $('#toload').load(toLoad,showNewContent()) 22 | } 23 | function showNewContent() { 24 | $('#toload').delay(500).fadeTo('normal',1,hideLoader()); 25 | } 26 | function hideLoader() { 27 | $('#load').fadeOut('normal'); 28 | } 29 | return false; 30 | 31 | }); 32 | 33 | }); 34 | -------------------------------------------------------------------------------- /.themes/classic/source/atom.xml: -------------------------------------------------------------------------------- 1 | --- 2 | layout: nil 3 | --- 4 | 5 | 6 | 7 | <![CDATA[{{ site.title }}]]> 8 | 9 | 10 | {{ site.time | date_to_xmlschema }} 11 | {{ site.url }}/ 12 | 13 | 14 | {% if site.email %}{% endif %} 15 | 16 | Octopress 17 | 18 | {% for post in site.posts limit: 20 %} 19 | 20 | <![CDATA[{{ post.title | cdata_escape }}]]> 21 | 22 | {{ post.date | date_to_xmlschema }} 23 | {{ site.url }}{{ post.id }} 24 | 25 | 26 | {% endfor %} 27 | 28 | -------------------------------------------------------------------------------- /source/_includes/asides/github.html: -------------------------------------------------------------------------------- 1 | {% if site.github_user %} 2 |
3 |

GitHub Repos

4 | 7 | {% if site.github_show_profile_link %} 8 | @{{site.github_user}} on GitHub 9 | {% endif %} 10 | 28 | 29 |
30 | {% endif %} 31 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/asides/github.html: -------------------------------------------------------------------------------- 1 | {% if site.github_user %} 2 |
3 |

GitHub Repos

4 | 7 | {% if site.github_show_profile_link %} 8 | @{{site.github_user}} on GitHub 9 | {% endif %} 10 | 28 | 29 |
30 | {% endif %} 31 | -------------------------------------------------------------------------------- /sass/base/_utilities.scss: -------------------------------------------------------------------------------- 1 | @mixin mask-image($img, $repeat: no-repeat){ 2 | @include experimental(mask-image, image-url($img), -webkit, -moz, -o, -ms); 3 | @include experimental(mask-repeat, $repeat, -webkit, -moz, -o, -ms); 4 | width: image-width($img); 5 | height: image-height($img); 6 | } 7 | 8 | @mixin shadow-box($border: #fff .5em solid, $shadow: rgba(#000, .15) 0 1px 4px, $border-radius: .3em) { 9 | @include border-radius($border-radius); 10 | @include box-shadow($shadow); 11 | @include box-sizing(border-box); 12 | border: $border; 13 | } 14 | 15 | @mixin selection($bg, $color: inherit, $text-shadow: none){ 16 | * { 17 | &::-moz-selection { background: $bg; color: $color; text-shadow: $text-shadow; } 18 | &::-webkit-selection { background: $bg; color: $color; text-shadow: $text-shadow; } 19 | &::selection { background: $bg; color: $color; text-shadow: $text-shadow; } 20 | } 21 | } 22 | 23 | @function text-color($color, $dark: dark, $light: light){ 24 | $text-color: ( (red($color)*299) + (green($color)*587) + (blue($color)*114) ) / 1000; 25 | $text-color: if($text-color >= 150, $dark, $light); 26 | @return $text-color; 27 | } 28 | 29 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/custom/category_feed.xml: -------------------------------------------------------------------------------- 1 | --- 2 | layout: nil 3 | --- 4 | 5 | 6 | 7 | <![CDATA[{{ page.title }} | {{ site.title }}]]> 8 | 9 | 10 | {{ site.time | date_to_xmlschema }} 11 | {{ site.url }}/ 12 | 13 | 14 | {% if site.email %}{% endif %} 15 | 16 | Octopress 17 | 18 | {% for post in site.categories[page.category] limit: 5 %} 19 | 20 | <![CDATA[{{ post.title | cdata_escape }}]]> 21 | 22 | {{ post.date | date_to_xmlschema }} 23 | {{ site.url }}{{ post.id }} 24 | 25 | 26 | {% endfor %} 27 | 28 | -------------------------------------------------------------------------------- /source/atom.xml: -------------------------------------------------------------------------------- 1 | --- 2 | layout: nil 3 | --- 4 | 5 | 6 | 7 | <![CDATA[{{ site.title | cdata_escape }}]]> 8 | 9 | 10 | {{ site.time | date_to_xmlschema }} 11 | {{ site.url }}/ 12 | 13 | 14 | {% if site.email %}{% endif %} 15 | 16 | Octopress 17 | 18 | {% for post in site.posts limit: 20 %} 19 | 20 | <![CDATA[{% if site.titlecase %}{{ post.title | titlecase | cdata_escape }}{% else %}{{ post.title | cdata_escape }}{% endif %}]]> 21 | 22 | {{ post.date | date_to_xmlschema }} 23 | {{ site.url }}{{ post.id }} 24 | 25 | 26 | {% endfor %} 27 | 28 | -------------------------------------------------------------------------------- /.themes/classic/sass/base/_utilities.scss: -------------------------------------------------------------------------------- 1 | @mixin mask-image($img, $repeat: no-repeat){ 2 | @include experimental(mask-image, image-url($img), -webkit, -moz, -o, -ms); 3 | @include experimental(mask-repeat, $repeat, -webkit, -moz, -o, -ms); 4 | width: image-width($img); 5 | height: image-height($img); 6 | } 7 | 8 | @mixin shadow-box($border: #fff .5em solid, $shadow: rgba(#000, .15) 0 1px 4px, $border-radius: .3em) { 9 | @include border-radius($border-radius); 10 | @include box-shadow($shadow); 11 | @include box-sizing(border-box); 12 | border: $border; 13 | } 14 | 15 | @mixin selection($bg, $color: inherit, $text-shadow: none){ 16 | * { 17 | &::-moz-selection { background: $bg; color: $color; text-shadow: $text-shadow; } 18 | &::-webkit-selection { background: $bg; color: $color; text-shadow: $text-shadow; } 19 | &::selection { background: $bg; color: $color; text-shadow: $text-shadow; } 20 | } 21 | } 22 | 23 | @function text-color($color, $dark: dark, $light: light){ 24 | $text-color: ( (red($color)*299) + (green($color)*587) + (blue($color)*114) ) / 1000; 25 | $text-color: if($text-color >= 150, $dark, $light); 26 | @return $text-color; 27 | } 28 | 29 | -------------------------------------------------------------------------------- /source/_includes/disqus.html: -------------------------------------------------------------------------------- 1 | {% comment %} Load script if disquss comments are enabled and `page.comments` is either empty (index) or set to true {% endcomment %} 2 | {% if site.disqus_short_name and page.comments != false %} 3 | 21 | {% endif %} 22 | -------------------------------------------------------------------------------- /javascripts/github.js: -------------------------------------------------------------------------------- 1 | var github = (function(){ 2 | function escapeHtml(str) { 3 | return $('
').text(str).html(); 4 | } 5 | function render(target, repos){ 6 | var i = 0, fragment = '', t = $(target)[0]; 7 | 8 | for(i = 0; i < repos.length; i++) { 9 | fragment += '
  • '+repos[i].name+'

    '+escapeHtml(repos[i].description||'')+'

  • '; 10 | } 11 | t.innerHTML = fragment; 12 | } 13 | return { 14 | showRepos: function(options){ 15 | $.ajax({ 16 | url: "https://api.github.com/users/"+options.user+"/repos?sort=pushed&callback=?" 17 | , dataType: 'jsonp' 18 | , error: function (err) { $(options.target + ' li.loading').addClass('error').text("Error loading feed"); } 19 | , success: function(data) { 20 | var repos = []; 21 | if (!data || !data.data) { return; } 22 | for (var i = 0; i < data.data.length; i++) { 23 | if (options.skip_forks && data.data[i].fork) { continue; } 24 | repos.push(data.data[i]); 25 | } 26 | if (options.count) { repos.splice(options.count); } 27 | render(options.target, repos); 28 | } 29 | }); 30 | } 31 | }; 32 | })(); 33 | -------------------------------------------------------------------------------- /source/javascripts/github.js: -------------------------------------------------------------------------------- 1 | var github = (function(){ 2 | function escapeHtml(str) { 3 | return $('
    ').text(str).html(); 4 | } 5 | function render(target, repos){ 6 | var i = 0, fragment = '', t = $(target)[0]; 7 | 8 | for(i = 0; i < repos.length; i++) { 9 | fragment += '
  • '+repos[i].name+'

    '+escapeHtml(repos[i].description||'')+'

  • '; 10 | } 11 | t.innerHTML = fragment; 12 | } 13 | return { 14 | showRepos: function(options){ 15 | $.ajax({ 16 | url: "https://api.github.com/users/"+options.user+"/repos?sort=pushed&callback=?" 17 | , dataType: 'jsonp' 18 | , error: function (err) { $(options.target + ' li.loading').addClass('error').text("Error loading feed"); } 19 | , success: function(data) { 20 | var repos = []; 21 | if (!data || !data.data) { return; } 22 | for (var i = 0; i < data.data.length; i++) { 23 | if (options.skip_forks && data.data[i].fork) { continue; } 24 | repos.push(data.data[i]); 25 | } 26 | if (options.count) { repos.splice(options.count); } 27 | render(options.target, repos); 28 | } 29 | }); 30 | } 31 | }; 32 | })(); 33 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/disqus.html: -------------------------------------------------------------------------------- 1 | {% comment %} Load script if disquss comments are enabled and `page.comments` is either empty (index) or set to true {% endcomment %} 2 | {% if site.disqus_short_name and page.comments != false %} 3 | 21 | {% endif %} 22 | -------------------------------------------------------------------------------- /.themes/classic/source/javascripts/github.js: -------------------------------------------------------------------------------- 1 | var github = (function(){ 2 | function escapeHtml(str) { 3 | return $('
    ').text(str).html(); 4 | } 5 | function render(target, repos){ 6 | var i = 0, fragment = '', t = $(target)[0]; 7 | 8 | for(i = 0; i < repos.length; i++) { 9 | fragment += '
  • '+repos[i].name+'

    '+escapeHtml(repos[i].description||'')+'

  • '; 10 | } 11 | t.innerHTML = fragment; 12 | } 13 | return { 14 | showRepos: function(options){ 15 | $.ajax({ 16 | url: "https://api.github.com/users/"+options.user+"/repos?sort=pushed&callback=?" 17 | , dataType: 'jsonp' 18 | , error: function (err) { $(options.target + ' li.loading').addClass('error').text("Error loading feed"); } 19 | , success: function(data) { 20 | var repos = []; 21 | if (!data || !data.data) { return; } 22 | for (var i = 0; i < data.data.length; i++) { 23 | if (options.skip_forks && data.data[i].fork) { continue; } 24 | repos.push(data.data[i]); 25 | } 26 | if (options.count) { repos.splice(options.count); } 27 | render(options.target, repos); 28 | } 29 | }); 30 | } 31 | }; 32 | })(); 33 | -------------------------------------------------------------------------------- /plugins/titlecase.rb: -------------------------------------------------------------------------------- 1 | class String 2 | def titlecase 3 | small_words = %w(a an and as at but by en for if in of on or the to v v. via vs vs.) 4 | 5 | x = split(" ").map do |word| 6 | # note: word could contain non-word characters! 7 | # downcase all small_words, capitalize the rest 8 | small_words.include?(word.gsub(/\W/, "").downcase) ? word.downcase! : word.smart_capitalize! 9 | word 10 | end 11 | # capitalize first and last words 12 | x.first.to_s.smart_capitalize! 13 | x.last.to_s.smart_capitalize! 14 | # small words are capitalized after colon, period, exclamation mark, question mark 15 | x.join(" ").gsub(/(:|\.|!|\?)\s?(\W*#{small_words.join("|")}\W*)\s/) { "#{$1} #{$2.smart_capitalize} " } 16 | end 17 | 18 | def titlecase! 19 | replace(titlecase) 20 | end 21 | 22 | def smart_capitalize 23 | # ignore any leading crazy characters and capitalize the first real character 24 | if self =~ /^['"\(\[']*([a-z])/ 25 | i = index($1) 26 | x = self[i,self.length] 27 | # word with capitals and periods mid-word are left alone 28 | self[i,1] = self[i,1].upcase unless x =~ /[A-Z]/ or x =~ /\.\w+/ 29 | end 30 | self 31 | end 32 | 33 | def smart_capitalize! 34 | replace(smart_capitalize) 35 | end 36 | end 37 | -------------------------------------------------------------------------------- /source/_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
    6 |
    7 | {% if page.title %} 8 |
    9 |

    {% if site.titlecase %}{{ page.title | titlecase }}{% else %}{{ page.title }}{% endif %}

    10 | {% if page.date %}

    {% include post/date.html %}{{ time }}

    {% endif %} 11 |
    12 | {% endif %} 13 | {{ content }} 14 | {% unless page.footer == false %} 15 |
    16 | {% if page.date or page.author %}

    17 | {% if page.author %}{% include post/author.html %}{% endif %} 18 | {% include post/date.html %}{% if updated %}{{ updated }}{% else %}{{ time }}{% endif %} 19 | {% if page.categories %}{% include post/categories.html %}{% endif %} 20 |

    {% endif %} 21 | {% unless page.sharing == false %} 22 | {% include post/sharing.html %} 23 | {% endunless %} 24 |
    25 | {% endunless %} 26 |
    27 | {% if site.disqus_short_name and page.comments == true %} 28 |
    29 |

    Comments

    30 |
    {% include post/disqus_thread.html %}
    31 |
    32 | {% endif %} 33 |
    34 | {% unless page.sidebar == false %} 35 | {% include aside.html %} 36 | {% endunless %} 37 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/article.html: -------------------------------------------------------------------------------- 1 | {% unless page.no_header %} 2 |
    3 | {% if index %} 4 |

    {% if site.titlecase %}{{ post.title | titlecase }}{% else %}{{ post.title }}{% endif %}

    5 | {% else %} 6 |

    {% if site.titlecase %}{{ page.title | titlecase }}{% else %}{{ page.title }}{% endif %}

    7 | {% endif %} 8 | {% unless page.meta == false %} 9 |

    10 | {% include post/date.html %}{{ time }} 11 | {% if site.disqus_short_name and page.comments != false and post.comments != false and site.disqus_show_comment_count == true %} 12 | | Comments 13 | {% endif %} 14 |

    15 | {% endunless %} 16 |
    17 | {% endunless %} 18 | {% if index %} 19 |
    {{ content | excerpt }}
    20 | {% capture excerpted %}{{ content | has_excerpt }}{% endcapture %} 21 | {% if excerpted == 'true' %} 22 | 25 | {% endif %} 26 | {% else %} 27 |
    {{ content }}
    28 | {% endif %} 29 | -------------------------------------------------------------------------------- /source/_layouts/post.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | single: true 4 | --- 5 | 6 |
    7 |
    8 | {% include article.html %} 9 |
    10 |

    11 | {% include post/author.html %} 12 | {% include post/date.html %}{% if updated %}{{ updated }}{% else %}{{ time }}{% endif %} 13 | {% include post/categories.html %} 14 |

    15 | {% unless page.sharing == false %} 16 | {% include post/sharing.html %} 17 | {% endunless %} 18 |

    19 | {% if page.previous.url %} 20 | « {{page.previous.title}} 21 | {% endif %} 22 | {% if page.next.url %} 23 | {{page.next.title}} » 24 | {% endif %} 25 |

    26 |
    27 |
    28 | {% if site.disqus_short_name and page.comments == true %} 29 |
    30 |

    Comments

    31 |
    {% include post/disqus_thread.html %}
    32 |
    33 | {% endif %} 34 |
    35 | {% unless page.sidebar == false %} 36 | {% include aside.html %} 37 | {% endunless %} 38 | -------------------------------------------------------------------------------- /source/_includes/custom/category_feed.xml: -------------------------------------------------------------------------------- 1 | --- 2 | layout: nil 3 | --- 4 | 5 | 6 | 7 | <![CDATA[{% if site.titlecase %}{{ page.title | titlecase | cdata_escape }}{% else %}{{ page.title | cdata_escape }}{% endif %} | {{ site.title | cdata_escape }}]]> 8 | 9 | 10 | {{ site.time | date_to_xmlschema }} 11 | {{ site.url }}/ 12 | 13 | 14 | {% if site.email %}{% endif %} 15 | 16 | Octopress 17 | 18 | {% for post in site.categories[page.category] limit: 5 %} 19 | 20 | <![CDATA[{% if site.titlecase %}{{ post.title | titlecase | cdata_escape }}{% else %}{{ post.title | cdata_escape }}{% endif %}]]> 21 | 22 | {{ post.date | date_to_xmlschema }} 23 | {{ site.url }}{{ post.id }} 24 | 25 | 26 | {% endfor %} 27 | 28 | -------------------------------------------------------------------------------- /plugins/raw.rb: -------------------------------------------------------------------------------- 1 | # Author: Brandon Mathis 2 | # Description: Provides plugins with a method for wrapping and unwrapping input to prevent Markdown and Textile from parsing it. 3 | # Purpose: This is useful for preventing Markdown and Textile from being too aggressive and incorrectly parsing in-line HTML. 4 | module TemplateWrapper 5 | # Wrap input with a
    6 | def safe_wrap(input) 7 | "
    #{input}
    " 8 | end 9 | # This must be applied after the 10 | def unwrap(input) 11 | input.gsub /
    (.+?)<\/notextile><\/div>/m do 12 | $1 13 | end 14 | end 15 | end 16 | 17 | # Author: phaer, https://github.com/phaer 18 | # Source: https://gist.github.com/1020852 19 | # Description: Raw tag for jekyll. Keeps liquid from parsing text betweeen {% raw %} and {% endraw %} 20 | 21 | module Jekyll 22 | class RawTag < Liquid::Block 23 | def parse(tokens) 24 | @nodelist ||= [] 25 | @nodelist.clear 26 | 27 | while token = tokens.shift 28 | if token =~ FullToken 29 | if block_delimiter == $1 30 | end_tag 31 | return 32 | end 33 | end 34 | @nodelist << token if not token.empty? 35 | end 36 | end 37 | end 38 | end 39 | 40 | Liquid::Template.register_tag('raw', Jekyll::RawTag) 41 | -------------------------------------------------------------------------------- /plugins/config_tag.rb: -------------------------------------------------------------------------------- 1 | require 'json' 2 | 3 | class ConfigTag < Liquid::Tag 4 | def initialize(tag_name, options, tokens) 5 | super 6 | options = options.split(' ').map {|i| i.strip } 7 | @key = options.slice!(0) 8 | @tag = nil 9 | @classname = nil 10 | options.each do |option| 11 | @tag = $1 if option =~ /tag:(\S+)/ 12 | @classname = $1 if option =~ /classname:(\S+)/ 13 | end 14 | end 15 | 16 | def render(context) 17 | config_tag(context.registers[:site].config, @key, @tag, @classname) 18 | end 19 | end 20 | 21 | def config_tag(config, key, tag=nil, classname=nil) 22 | options = key.split('.').map { |k| config[k] }.last #reference objects with dot notation 23 | tag ||= 'div' 24 | classname ||= key.sub(/_/, '-').sub(/\./, '-') 25 | output = "<#{tag} class='#{classname}'" 26 | 27 | if options.respond_to? 'keys' 28 | options.each do |k,v| 29 | unless v.nil? 30 | v = v.join ',' if v.respond_to? 'join' 31 | v = v.to_json if v.respond_to? 'keys' 32 | output += " data-#{k.sub'_','-'}='#{v}'" 33 | end 34 | end 35 | elsif options.respond_to? 'join' 36 | output += " data-value='#{config[key].join(',')}'" 37 | else 38 | output += " data-value='#{config[key]}'" 39 | end 40 | output += ">" 41 | end 42 | 43 | Liquid::Template.register_tag('config_tag', ConfigTag) 44 | 45 | -------------------------------------------------------------------------------- /CHANGELOG.markdown: -------------------------------------------------------------------------------- 1 | # Octopress Changelog 2 | 3 | ## 2.0 4 | 5 | - Now based on [mojombo/jekyll](http://github.com/mojombo/jekyll) 6 | - Sports a semantic HTML5 template 7 | - Easy theming with Compass and Sass 8 | - A Mobile friendly responsive (320 and up) layout 9 | - Built in 3rd party support for Twitter, Google Plus One, Disqus Comments, Pinboard, Delicious, and Google Analytics 10 | - Deploy to Github pages or use Rsync 11 | - Built in support for POW and Rack servers 12 | - Beautiful [Solarized](http://ethanschoonover.com/solarized) syntax highlighting 13 | - Super easy setup and configuration 14 | 15 | **New Plugins, Filters, & Generators** 16 | 17 | - **Gist Tag** for easily embedding gists in your posts 18 | - **Pygments Cache** makes subsequent compiling much faster 19 | - **Include Code Tag** lets you embed external code snippets from your file system and adds a download link 20 | - **Pullquote Tag** Generate beautiful semantic pullquotes (no double data) based on Maykel Loomans's [technique](http://miekd.com/articles/pull-quotes-with-html5-and-css/) 21 | - **Blockquote Tag** makes it easy to semantically format blockquotes 22 | - **Category Generator** gives you archive pages for each category 23 | - **Sitemap.xml Generator** for search engines 24 | 25 | ## 1.0 26 | 27 | - **No longer supported.** 28 | - Jekyll Matured, but Henrik's Jekyll fork did not. 29 | - Thanks for all your pull requests, I learned a lot. 30 | -------------------------------------------------------------------------------- /sass/base/_solarized.scss: -------------------------------------------------------------------------------- 1 | $base03: #002b36 !default; //darkest blue 2 | $base02: #073642 !default; //dark blue 3 | $base01: #586e75 !default; //darkest gray 4 | $base00: #657b83 !default; //dark gray 5 | $base0: #839496 !default; //medium gray 6 | $base1: #93a1a1 !default; //medium light gray 7 | $base2: #eee8d5 !default; //cream 8 | $base3: #fdf6e3 !default; //white 9 | $solar-yellow: #b58900 !default; 10 | $solar-orange: #cb4b16 !default; 11 | $solar-red: #dc322f !default; 12 | $solar-magenta: #d33682 !default; 13 | $solar-violet: #6c71c4 !default; 14 | $solar-blue: #268bd2 !default; 15 | $solar-cyan: #2aa198 !default; 16 | $solar-green: #859900 !default; 17 | 18 | $solarized: dark !default; 19 | 20 | @if $solarized == light { 21 | 22 | $_base03: $base03; 23 | $_base02: $base02; 24 | $_base01: $base01; 25 | $_base00: $base00; 26 | $_base0: $base0; 27 | $_base1: $base1; 28 | $_base2: $base2; 29 | $_base3: $base3; 30 | 31 | $base03: $_base3; 32 | $base02: $_base2; 33 | $base01: $_base1; 34 | $base00: $_base0; 35 | $base0: $_base00; 36 | $base1: $_base01; 37 | $base2: $_base02; 38 | $base3: $_base03; 39 | } 40 | 41 | /* non highlighted code colors */ 42 | $pre-bg: $base03 !default; 43 | $pre-border: darken($base02, 5) !default; 44 | $pre-color: $base1 !default; 45 | 46 | 47 | -------------------------------------------------------------------------------- /plugins/backtick_code_block.rb: -------------------------------------------------------------------------------- 1 | require './plugins/pygments_code' 2 | 3 | module BacktickCodeBlock 4 | include HighlightCode 5 | AllOptions = /([^\s]+)\s+(.+?)\s+(https?:\/\/\S+|\/\S+)\s*(.+)?/i 6 | LangCaption = /([^\s]+)\s*(.+)?/i 7 | def render_code_block(input) 8 | @options = nil 9 | @caption = nil 10 | @lang = nil 11 | @url = nil 12 | @title = nil 13 | input.gsub(/^`{3} *([^\n]+)?\n(.+?)\n`{3}/m) do 14 | @options = $1 || '' 15 | str = $2 16 | 17 | if @options =~ AllOptions 18 | @lang = $1 19 | @caption = "
    #{$2}#{$4 || 'link'}
    " 20 | elsif @options =~ LangCaption 21 | @lang = $1 22 | @caption = "
    #{$2}
    " 23 | end 24 | 25 | if str.match(/\A( {4}|\t)/) 26 | str = str.gsub(/^( {4}|\t)/, '') 27 | end 28 | if @lang.nil? || @lang == 'plain' 29 | code = tableize_code(str.gsub('<','<').gsub('>','>')) 30 | "
    #{@caption}#{code}
    " 31 | else 32 | if @lang.include? "-raw" 33 | raw = "``` #{@options.sub('-raw', '')}\n" 34 | raw += str 35 | raw += "\n```\n" 36 | else 37 | code = highlight(str, @lang) 38 | "
    #{@caption}#{code}
    " 39 | end 40 | end 41 | end 42 | end 43 | end 44 | -------------------------------------------------------------------------------- /.themes/classic/sass/base/_solarized.scss: -------------------------------------------------------------------------------- 1 | $base03: #002b36 !default; //darkest blue 2 | $base02: #073642 !default; //dark blue 3 | $base01: #586e75 !default; //darkest gray 4 | $base00: #657b83 !default; //dark gray 5 | $base0: #839496 !default; //medium gray 6 | $base1: #93a1a1 !default; //medium light gray 7 | $base2: #eee8d5 !default; //cream 8 | $base3: #fdf6e3 !default; //white 9 | $solar-yellow: #b58900 !default; 10 | $solar-orange: #cb4b16 !default; 11 | $solar-red: #dc322f !default; 12 | $solar-magenta: #d33682 !default; 13 | $solar-violet: #6c71c4 !default; 14 | $solar-blue: #268bd2 !default; 15 | $solar-cyan: #2aa198 !default; 16 | $solar-green: #859900 !default; 17 | 18 | $solarized: dark !default; 19 | 20 | @if $solarized == light { 21 | 22 | $_base03: $base03; 23 | $_base02: $base02; 24 | $_base01: $base01; 25 | $_base00: $base00; 26 | $_base0: $base0; 27 | $_base1: $base1; 28 | $_base2: $base2; 29 | $_base3: $base3; 30 | 31 | $base03: $_base3; 32 | $base02: $_base2; 33 | $base01: $_base1; 34 | $base00: $_base0; 35 | $base0: $_base00; 36 | $base1: $_base01; 37 | $base2: $_base02; 38 | $base3: $_base03; 39 | } 40 | 41 | /* non highlighted code colors */ 42 | $pre-bg: $base03 !default; 43 | $pre-border: darken($base02, 5) !default; 44 | $pre-color: $base1 !default; 45 | 46 | 47 | -------------------------------------------------------------------------------- /source/_includes/article.html: -------------------------------------------------------------------------------- 1 | {% unless page.no_header %} 2 |
    3 | {% if index %} 4 |

    {% if site.titlecase %}{{ post.title | titlecase }}{% else %}{{ post.title }}{% endif %}

    5 | {% else %} 6 |

    {% if site.titlecase %}{{ page.title | titlecase }}{% else %}{{ page.title }}{% endif %}

    7 | {% endif %} 8 | {% unless page.meta == false %} 9 |

    10 | {% include post/date.html %}{{ time }} 11 | {% if site.disqus_short_name and page.comments != false and post.comments != false and site.disqus_show_comment_count == true %} 12 | | Comments 14 | {% endif %} 15 |

    16 | {% endunless %} 17 |
    18 | {% endunless %} 19 | {% if index %} 20 |
    {{ content | excerpt }}
    21 | {% capture excerpted %}{{ content | has_excerpt }}{% endcapture %} 22 | {% if excerpted == 'true' %} 23 | 26 | {% endif %} 27 | {% else %} 28 |
    {{ content }}
    29 | {% endif %} 30 | -------------------------------------------------------------------------------- /.themes/classic/source/_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
    6 |
    7 | {% if page.title %} 8 |
    9 |

    {% if site.titlecase %}{{ page.title | titlecase }}{% else %}{{ page.title }}{% endif %}

    10 | {% if page.date %}

    {% include post/date.html %}{{ time }}

    {% endif %} 11 |
    12 | {% endif %} 13 | {{ content }} 14 | {% unless page.footer == false %} 15 |
    16 | {% if page.date or page.author %}

    17 | {% if page.author %}{% include post/author.html %}{% endif %} 18 | {% include post/date.html %}{% if updated %}{{ updated }}{% else %}{{ time }}{% endif %} 19 | {% if page.categories %}{% include post/categories.html %}{% endif %} 20 |

    {% endif %} 21 | {% unless page.sharing == false %} 22 | {% include post/sharing.html %} 23 | {% endunless %} 24 |
    25 | {% endunless %} 26 |
    27 | {% if site.disqus_short_name and page.comments == true %} 28 |
    29 |

    Comments

    30 |
    {% include post/disqus_thread.html %}
    31 |
    32 | {% endif %} 33 |
    34 | {% unless page.sidebar == false %} 35 | 42 | {% endunless %} 43 | -------------------------------------------------------------------------------- /.themes/classic/source/_layouts/post.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | single: true 4 | --- 5 | 6 |
    7 |
    8 | {% include article.html %} 9 |
    10 |

    11 | {% include post/author.html %} 12 | {% include post/date.html %}{% if updated %}{{ updated }}{% else %}{{ time }}{% endif %} 13 | {% include post/categories.html %} 14 |

    15 | {% unless page.sharing == false %} 16 | {% include post/sharing.html %} 17 | {% endunless %} 18 |

    19 | {% if page.previous.url %} 20 | « {{page.previous.title}} 21 | {% endif %} 22 | {% if page.next.url %} 23 | {{page.next.title}} » 24 | {% endif %} 25 |

    26 |
    27 |
    28 | {% if site.disqus_short_name and page.comments == true %} 29 |
    30 |

    Comments

    31 |
    {% include post/disqus_thread.html %}
    32 |
    33 | {% endif %} 34 |
    35 | {% unless page.sidebar == false %} 36 | 43 | {% endunless %} 44 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: http://rubygems.org/ 3 | specs: 4 | RedCloth (4.2.9) 5 | chunky_png (1.3.1) 6 | classifier (1.3.4) 7 | fast-stemmer (>= 1.0.0) 8 | compass (0.12.6) 9 | chunky_png (~> 1.2) 10 | fssm (>= 0.2.7) 11 | sass (~> 3.2.19) 12 | directory_watcher (1.5.1) 13 | fast-stemmer (1.0.2) 14 | fssm (0.2.10) 15 | haml (3.1.8) 16 | jekyll (0.12.1) 17 | classifier (~> 1.3) 18 | directory_watcher (~> 1.1) 19 | kramdown (~> 0.14) 20 | liquid (~> 2.3) 21 | maruku (~> 0.5) 22 | pygments.rb (~> 0.3.2) 23 | kramdown (0.14.2) 24 | liquid (2.3.0) 25 | maruku (0.7.1) 26 | posix-spawn (0.3.8) 27 | pygments.rb (0.3.7) 28 | posix-spawn (~> 0.3.6) 29 | yajl-ruby (~> 1.1.0) 30 | rack (1.5.2) 31 | rack-protection (1.5.3) 32 | rack 33 | rake (0.9.6) 34 | rb-fsevent (0.9.4) 35 | rdiscount (2.0.7.3) 36 | rubypants (0.2.0) 37 | sass (3.2.19) 38 | sass-globbing (1.0.0) 39 | sass (>= 3.1) 40 | sinatra (1.4.5) 41 | rack (~> 1.4) 42 | rack-protection (~> 1.4) 43 | tilt (~> 1.3, >= 1.3.4) 44 | stringex (1.4.0) 45 | tilt (1.4.1) 46 | yajl-ruby (1.1.0) 47 | 48 | PLATFORMS 49 | ruby 50 | 51 | DEPENDENCIES 52 | RedCloth (~> 4.2.9) 53 | compass (~> 0.12.2) 54 | haml (~> 3.1.7) 55 | jekyll (~> 0.12) 56 | liquid (~> 2.3.0) 57 | pygments.rb (~> 0.3.4) 58 | rake (~> 0.9) 59 | rb-fsevent (~> 0.9) 60 | rdiscount (~> 2.0.7) 61 | rubypants (~> 0.2.0) 62 | sass-globbing (~> 1.0.0) 63 | sinatra (~> 1.4.2) 64 | stringex (~> 1.4.0) 65 | -------------------------------------------------------------------------------- /sass/parts/_archive.scss: -------------------------------------------------------------------------------- 1 | .archives{ 2 | position: relative; 3 | &:last-of-type{ 4 | &:before{ 5 | content: ""; 6 | position: absolute; 7 | bottom: 0; 8 | width: 200px; 9 | border-top: 1px solid $color-gray04; 10 | } 11 | } 12 | .year{ 13 | line-height: 35px; 14 | width: 200px; 15 | position: absolute; 16 | top: 0; 17 | padding-top: 15px; 18 | border-top: 1px solid #fff; 19 | &:before{ 20 | content: ""; 21 | position: absolute; 22 | top: -2px; 23 | width: 100%; 24 | border-top: 1px solid $color-gray04; 25 | } 26 | @media screen and (max-width: 600px){ 27 | position: relative; 28 | width: 100%; 29 | } 30 | } 31 | article{ 32 | margin-left: 200px; 33 | padding: 10px 0; 34 | @media screen and (max-width: 600px){ 35 | margin-left: 0; 36 | &:first-of-type{ 37 | border-top: none; 38 | padding-top: 30px; 39 | } 40 | } 41 | .title{ 42 | margin-bottom: 0; 43 | font-size: 25px; 44 | } 45 | .meta{ 46 | color: $color-gray02; 47 | font-size: 0.9em; 48 | line-height: 2; 49 | margin-top: 10px; 50 | @media screen and (max-width: 600px){ 51 | display: none; 52 | } 53 | span{ 54 | margin-right: 30px; 55 | @include inline-block; 56 | &:before{ 57 | color: $color-gray03; 58 | font: 1.3em $font-icon; 59 | padding-right: 10px; 60 | } 61 | } 62 | a{ 63 | color: $color-gray02; 64 | @include transition(0.3s); 65 | &:hover{ 66 | color: $color-gray01; 67 | } 68 | } 69 | .date:before{content: "\f073";} 70 | .tags:before{content: "\f02c";} 71 | .comments:before{content: "\f075";} 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /source/_includes/social.html: -------------------------------------------------------------------------------- 1 | 51 | -------------------------------------------------------------------------------- /plugins/jsfiddle.rb: -------------------------------------------------------------------------------- 1 | # Title: jsFiddle tag for Jekyll 2 | # Author: Brian Arnold (@brianarn) 3 | # Description: 4 | # Given a jsFiddle shortcode, outputs the jsFiddle iframe code. 5 | # Using 'default' will preserve defaults as specified by jsFiddle. 6 | # 7 | # Syntax: {% jsfiddle shorttag [tabs] [skin] [height] [width] %} 8 | # 9 | # Examples: 10 | # 11 | # Input: {% jsfiddle ccWP7 %} 12 | # Output: 13 | # 14 | # Input: {% jsfiddle ccWP7 js,html,result %} 15 | # Output: 16 | # 17 | 18 | module Jekyll 19 | class JsFiddle < Liquid::Tag 20 | def initialize(tag_name, markup, tokens) 21 | if /(?\w+)(?:\s+(?[\w,]+))?(?:\s+(?\w+))?(?:\s+(?\w+))?(?:\s+(?\w+))?/ =~ markup 22 | @fiddle = fiddle 23 | @sequence = (sequence unless sequence == 'default') || 'js,resources,html,css,result' 24 | @skin = (skin unless skin == 'default') || 'light' 25 | @width = width || '100%' 26 | @height = height || '300px' 27 | end 28 | end 29 | 30 | def render(context) 31 | if @fiddle 32 | "" 33 | else 34 | "Error processing input, expected syntax: {% jsfiddle shorttag [tabs] [skin] [height] [width] %}" 35 | end 36 | end 37 | end 38 | end 39 | 40 | Liquid::Template.register_tag('jsfiddle', Jekyll::JsFiddle) 41 | -------------------------------------------------------------------------------- /sass/custom/_colors.scss: -------------------------------------------------------------------------------- 1 | // Here you can easily change your sites's color scheme. 2 | // To give it a try, uncomment some of the lines below rebuild your blog, and see how it works. 3 | // If you need a handy color picker try http://hslpicker.com 4 | 5 | $header-bg: #fff; 6 | //$subtitle-color: lighten($header-bg, 58); 7 | $nav-bg: #fff; 8 | $nav-bg-front: none; 9 | $nav-bg-back: #fff; 10 | //$sidebar-bg: desaturate(#eceff5, 8); 11 | //$sidebar-link-color: saturate(#526f9a, 10); 12 | //$sidebar-link-color-hover: darken(#7ab662, 9); 13 | $footer-bg: #fff; 14 | $footer-bg-front: #fff; 15 | $footer-bg-back: #fff; 16 | 17 | /* To use the light Solarized highlighting theme uncomment the following line */ 18 | //$solarized: light; 19 | 20 | /* If you want to tweak the Solarized colors you can do that here */ 21 | //$base03: #002b36; //darkest blue 22 | //$base02: #073642; //dark blue 23 | //$base01: #586e75; //darkest gray 24 | //$base00: #657b83; //dark gray 25 | //$base0: #839496; //medium gray 26 | //$base1: #93a1a1; //medium light gray 27 | //$base2: #eee8d5; //cream 28 | //$base3: #fdf6e3; //white 29 | //$solar-yellow: #b58900; 30 | //$solar-orange: #cb4b16; 31 | //$solar-red: #dc322f; 32 | //$solar-magenta: #d33682; 33 | //$solar-violet: #6c71c4; 34 | //$solar-blue: #268bd2; 35 | //$solar-cyan: #2aa198; 36 | //$solar-green: #859900; 37 | 38 | 39 | /* Non highlighted code colors */ 40 | //$pre-bg: $base03; 41 | //$pre-border: darken($base02, 5); 42 | //$pre-color: $base1; 43 | 44 | $main-bg: #fff; 45 | $page-bg: #fff; 46 | $link-color: #F2059F; 47 | $nav-color: $link-color; 48 | $link-color-visited:darken($nav-color, 25); 49 | $title-color: $link-color; 50 | -------------------------------------------------------------------------------- /.themes/classic/sass/custom/_colors.scss: -------------------------------------------------------------------------------- 1 | // Here you can easily change your sites's color scheme. 2 | // To give it a try, uncomment some of the lines below rebuild your blog, and see how it works. 3 | // If you need a handy color picker try http://hslpicker.com 4 | 5 | //$header-bg: #263347; 6 | //$subtitle-color: lighten($header-bg, 58); 7 | //$nav-bg: desaturate(lighten(#8fc17a, 18), 5); 8 | //$nav-bg-front: image-url('noise.png'); 9 | //$nav-bg-back: linear-gradient(lighten($nav-bg, 8), $nav-bg, darken($nav-bg, 11)); 10 | //$sidebar-bg: desaturate(#eceff5, 8); 11 | //$sidebar-link-color: saturate(#526f9a, 10); 12 | //$sidebar-link-color-hover: darken(#7ab662, 9); 13 | //$footer-bg: #ccc !default; 14 | //$footer-bg-front: image-url('noise.png'); 15 | //$footer-bg-back: linear-gradient(lighten($footer-bg, 8), $footer-bg, darken($footer-bg, 11)); 16 | 17 | 18 | /* To use the light Solarized highlighting theme uncomment the following line */ 19 | //$solarized: light; 20 | 21 | /* If you want to tweak the Solarized colors you can do that here */ 22 | //$base03: #002b36; //darkest blue 23 | //$base02: #073642; //dark blue 24 | //$base01: #586e75; //darkest gray 25 | //$base00: #657b83; //dark gray 26 | //$base0: #839496; //medium gray 27 | //$base1: #93a1a1; //medium light gray 28 | //$base2: #eee8d5; //cream 29 | //$base3: #fdf6e3; //white 30 | //$solar-yellow: #b58900; 31 | //$solar-orange: #cb4b16; 32 | //$solar-red: #dc322f; 33 | //$solar-magenta: #d33682; 34 | //$solar-violet: #6c71c4; 35 | //$solar-blue: #268bd2; 36 | //$solar-cyan: #2aa198; 37 | //$solar-green: #859900; 38 | 39 | 40 | /* Non highlighted code colors */ 41 | //$pre-bg: $base03; 42 | //$pre-border: darken($base02, 5); 43 | //$pre-color: $base1; 44 | -------------------------------------------------------------------------------- /plugins/pygments_code.rb: -------------------------------------------------------------------------------- 1 | require 'pygments' 2 | require 'fileutils' 3 | require 'digest/md5' 4 | 5 | PYGMENTS_CACHE_DIR = File.expand_path('../../.pygments-cache', __FILE__) 6 | FileUtils.mkdir_p(PYGMENTS_CACHE_DIR) 7 | 8 | module HighlightCode 9 | def highlight(str, lang) 10 | lang = 'ruby' if lang == 'ru' 11 | lang = 'objc' if lang == 'm' 12 | lang = 'perl' if lang == 'pl' 13 | lang = 'yaml' if lang == 'yml' 14 | str = pygments(str, lang).match(/
    (.+)<\/pre>/m)[1].to_s.gsub(/ *$/, '') #strip out divs 
    15 | tableize_code(str, lang) 16 | end 17 | 18 | def pygments(code, lang) 19 | if defined?(PYGMENTS_CACHE_DIR) 20 | path = File.join(PYGMENTS_CACHE_DIR, "#{lang}-#{Digest::MD5.hexdigest(code)}.html") 21 | if File.exist?(path) 22 | highlighted_code = File.read(path) 23 | else 24 | begin 25 | highlighted_code = Pygments.highlight(code, :lexer => lang, :formatter => 'html', :options => {:encoding => 'utf-8'}) 26 | rescue MentosError 27 | raise "Pygments can't parse unknown language: #{lang}." 28 | end 29 | File.open(path, 'w') {|f| f.print(highlighted_code) } 30 | end 31 | else 32 | highlighted_code = Pygments.highlight(code, :lexer => lang, :formatter => 'html', :options => {:encoding => 'utf-8'}) 33 | end 34 | highlighted_code 35 | end 36 | def tableize_code (str, lang = '') 37 | table = '
    '
    38 |     code = ''
    39 |     str.lines.each_with_index do |line,index|
    40 |       table += "#{index+1}\n"
    41 |       code  += "#{line}"
    42 |     end
    43 |     table += "
    #{code}
    " 44 | end 45 | end 46 | -------------------------------------------------------------------------------- /plugins/preview_unpublished.rb: -------------------------------------------------------------------------------- 1 | # Monkeypatch for Jekyll 2 | # Introduce distinction between preview/productive site generation 3 | # so posts with YAML attribute `published: false` can be previewed 4 | # on localhost without being published to the productive environment. 5 | 6 | module Jekyll 7 | 8 | class Site 9 | # Read all the files in //_posts and create a new Post 10 | # object with each one. 11 | # 12 | # dir - The String relative path of the directory to read. 13 | # 14 | # Returns nothing. 15 | def read_posts(dir) 16 | base = File.join(self.source, dir, '_posts') 17 | return unless File.exists?(base) 18 | entries = Dir.chdir(base) { filter_entries(Dir['**/*']) } 19 | 20 | # first pass processes, but does not yet render post content 21 | entries.each do |f| 22 | if Post.valid?(f) 23 | post = Post.new(self, self.source, dir, f) 24 | 25 | # Monkeypatch: 26 | # On preview environment (localhost), publish all posts 27 | if ENV.has_key?('OCTOPRESS_ENV') && ENV['OCTOPRESS_ENV'] == 'preview' && post.data.has_key?('published') && post.data['published'] == false 28 | post.published = true 29 | # Set preview mode flag (if necessary), `rake generate` will check for it 30 | # to prevent pushing preview posts to productive environment 31 | File.open(".preview-mode", "w") {} 32 | end 33 | 34 | if post.published && (self.future || post.date <= self.time) 35 | self.posts << post 36 | post.categories.each { |c| self.categories[c] << post } 37 | post.tags.each { |c| self.tags[c] << post } 38 | end 39 | end 40 | end 41 | 42 | self.posts.sort! 43 | 44 | # limit the posts if :limit_posts option is set 45 | self.posts = self.posts[-limit_posts, limit_posts] if limit_posts 46 | end 47 | end 48 | end 49 | -------------------------------------------------------------------------------- /sass/partials/_archive.scss: -------------------------------------------------------------------------------- 1 | #archive { 2 | #content > div { &, > article { padding-top: 0; } } 3 | } 4 | #blog-archives { 5 | article { 6 | padding: 1em 0 1em; 7 | position: relative; 8 | background: $img-border bottom left repeat-x; 9 | &:last-child { 10 | background: none; 11 | } 12 | footer { padding: 0; margin: 0;} 13 | } 14 | h1 { color: $text-color; margin-bottom: .3em; } 15 | h2 { display: none; } 16 | h1 { 17 | font-size: 1.5em; 18 | a { 19 | @include hover-link; 20 | color: inherit; 21 | &:hover { color: $link-color-hover; } 22 | font-weight: normal; 23 | display: inline-block; 24 | } 25 | } 26 | a.category, time { 27 | @extend .sans; 28 | color: $text-color-light; 29 | } 30 | color: $text-color-light; 31 | .entry-content { display: none; } 32 | time { 33 | font-size: .9em; 34 | line-height: 1.2em; 35 | .month, .day { display: inline-block; } 36 | .month { text-transform: uppercase; } 37 | } 38 | p { margin-bottom: 1em; } 39 | &, .entry-content { a { @include link-colors(inherit, $link-color-hover); }} 40 | a:hover { color: $link-color-hover; } 41 | @media only screen and (min-width: 550px) { 42 | article { margin-left: 5em; } 43 | h2 { 44 | margin-bottom: .3em; 45 | font-weight: normal; 46 | display: inline-block; 47 | position: relative; top: -1px; 48 | float: left; 49 | &:first-child { padding-top: .75em; } 50 | } 51 | time { 52 | position: absolute; 53 | text-align: right; 54 | left: 0em; 55 | top: 1.8em; 56 | } 57 | .year { display: none; } 58 | article { 59 | padding:{left: 4.5em; bottom: .7em;} 60 | } 61 | a.category { 62 | line-height: 1.1em; 63 | } 64 | } 65 | } 66 | #content > .category { 67 | article { 68 | margin-left: 0; 69 | padding-left: 6.8em; 70 | } 71 | .year { display: inline; } 72 | } 73 | -------------------------------------------------------------------------------- /.themes/classic/sass/partials/_archive.scss: -------------------------------------------------------------------------------- 1 | #archive { 2 | #content > div { &, > article { padding-top: 0; } } 3 | } 4 | #blog-archives { 5 | article { 6 | padding: 1em 0 1em; 7 | position: relative; 8 | background: $img-border bottom left repeat-x; 9 | &:last-child { 10 | background: none; 11 | } 12 | footer { padding: 0; margin: 0;} 13 | } 14 | h1 { color: $text-color; margin-bottom: .3em; } 15 | h2 { display: none; } 16 | h1 { 17 | font-size: 1.5em; 18 | a { 19 | @include hover-link; 20 | color: inherit; 21 | &:hover { color: $link-color-hover; } 22 | font-weight: normal; 23 | display: inline-block; 24 | } 25 | } 26 | a.category, time { 27 | @extend .sans; 28 | color: $text-color-light; 29 | } 30 | color: $text-color-light; 31 | .entry-content { display: none; } 32 | time { 33 | font-size: .9em; 34 | line-height: 1.2em; 35 | .month, .day { display: inline-block; } 36 | .month { text-transform: uppercase; } 37 | } 38 | p { margin-bottom: 1em; } 39 | &, .entry-content { a { @include link-colors(inherit, $link-color-hover); }} 40 | a:hover { color: $link-color-hover; } 41 | @media only screen and (min-width: 550px) { 42 | article { margin-left: 5em; } 43 | h2 { 44 | margin-bottom: .3em; 45 | font-weight: normal; 46 | display: inline-block; 47 | position: relative; top: -1px; 48 | float: left; 49 | &:first-child { padding-top: .75em; } 50 | } 51 | time { 52 | position: absolute; 53 | text-align: right; 54 | left: 0em; 55 | top: 1.8em; 56 | } 57 | .year { display: none; } 58 | article { 59 | padding:{left: 4.5em; bottom: .7em;} 60 | } 61 | a.category { 62 | line-height: 1.1em; 63 | } 64 | } 65 | } 66 | #content > .category { 67 | article { 68 | margin-left: 0; 69 | padding-left: 6.8em; 70 | } 71 | .year { display: inline; } 72 | } 73 | -------------------------------------------------------------------------------- /plugins/video_tag.rb: -------------------------------------------------------------------------------- 1 | # Title: Simple Video tag for Jekyll 2 | # Author: Brandon Mathis http://brandonmathis.com 3 | # Description: Easily output MPEG4 HTML5 video with a flash backup. 4 | # 5 | # Syntax {% video url/to/video [width height] [url/to/poster] %} 6 | # 7 | # Example: 8 | # {% video http://site.com/video.mp4 720 480 http://site.com/poster-frame.jpg %} 9 | # 10 | # Output: 11 | # 14 | # 15 | 16 | module Jekyll 17 | 18 | class VideoTag < Liquid::Tag 19 | @video = nil 20 | @poster = '' 21 | @height = '' 22 | @width = '' 23 | 24 | def initialize(tag_name, markup, tokens) 25 | if markup =~ /(https?:\S+)(\s+(https?:\S+))?(\s+(https?:\S+))?(\s+(\d+)\s(\d+))?(\s+(https?:\S+))?/i 26 | @video = [$1, $3, $5].compact 27 | @width = $7 28 | @height = $8 29 | @poster = $10 30 | end 31 | super 32 | end 33 | 34 | def render(context) 35 | output = super 36 | type = { 37 | 'mp4' => "type='video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"'", 38 | 'ogv' => "type='video/ogg; codecs=theora, vorbis'", 39 | 'webm' => "type='video/webm; codecs=vp8, vorbis'" 40 | } 41 | if @video.size > 0 42 | video = "" 48 | else 49 | "Error processing input, expected syntax: {% video url/to/video [url/to/video] [url/to/video] [width height] [url/to/poster] %}" 50 | end 51 | end 52 | end 53 | end 54 | 55 | Liquid::Template.register_tag('video', Jekyll::VideoTag) 56 | 57 | -------------------------------------------------------------------------------- /.themes/classic/source/_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {% if page.title %}{{ page.title }} - {% endif %}{{ site.title }} 8 | 9 | 10 | {% capture description %}{% if page.description %}{{ page.description }}{% else %}{{ content | raw_content }}{% endif %}{% endcapture %} 11 | 12 | {% if page.keywords %}{% endif %} 13 | 14 | 15 | 16 | 17 | 18 | 19 | {% capture canonical %}{{ site.url }}{% if site.permalink contains '.html' %}{{ page.url }}{% else %}{{ page.url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %} 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {% include custom/head.html %} 29 | {% include google_analytics.html %} 30 | 31 | -------------------------------------------------------------------------------- /source/javascripts/fabric.js: -------------------------------------------------------------------------------- 1 | (function($){ 2 | // Open external links in new window 3 | var externalLinks = function(){ 4 | var host = location.host; 5 | 6 | $('body').on('click', 'a', function(e){ 7 | var href = this.href, 8 | link = href.replace(/https?:\/\/([^\/]+)(.*)/, '$1'); 9 | 10 | if (link != '' && link != host && !$(this).hasClass('fancybox')){ 11 | window.open(href); 12 | e.preventDefault(); 13 | } 14 | }); 15 | }; 16 | 17 | // Append caption after pictures 18 | var appendCaption = function(){ 19 | $('.entry-content').each(function(i){ 20 | var _i = i; 21 | $(this).find('img').each(function(){ 22 | var alt = this.alt; 23 | 24 | if (alt != ''){ 25 | $(this).after(''+alt+''); 26 | } 27 | 28 | $(this).wrap(''); 29 | }); 30 | }); 31 | }; 32 | 33 | externalLinks(); // Delete or comment this line to disable opening external links in new window 34 | appendCaption(); // Delete or comment this line to disable caption 35 | 36 | var mobilenav = $('#mobile-nav'); 37 | 38 | $('html').click(function(){ 39 | mobilenav.find('.on').each(function(){ 40 | $(this).removeClass('on').next().hide(); 41 | }); 42 | }); 43 | 44 | mobilenav.on('click', '.menu .button', function(){ 45 | if (!$(this).hasClass('on')){ 46 | var width = $(this).width() + 42; 47 | $(this).addClass('on').next().show().css({width: width}); 48 | } else { 49 | $(this).removeClass('on').next().hide(); 50 | } 51 | }).on('click', '.search .button', function(){ 52 | if (!$(this).hasClass('on')){ 53 | var width = mobilenav.width() - 51; 54 | mobilenav.children('.menu').children().eq(0).removeClass('on').next().hide(); 55 | $(this).addClass('on').next().show().css({width: width}).children().children().eq(0).focus(); 56 | } else { 57 | $(this).removeClass('on').next().hide().children().children().eq(0).val(''); 58 | } 59 | }).click(function(e){ 60 | e.stopPropagation(); 61 | }); 62 | })(jQuery); -------------------------------------------------------------------------------- /javascripts/pinboard.js: -------------------------------------------------------------------------------- 1 | function pinboardNS_fetch_script(url) { 2 | //document.writeln(''); 3 | (function(){ 4 | var pinboardLinkroll = document.createElement('script'); 5 | pinboardLinkroll.type = 'text/javascript'; 6 | pinboardLinkroll.async = true; 7 | pinboardLinkroll.src = url; 8 | document.getElementsByTagName('head')[0].appendChild(pinboardLinkroll); 9 | })(); 10 | } 11 | 12 | function pinboardNS_show_bmarks(r) { 13 | var lr = new Pinboard_Linkroll(); 14 | lr.set_items(r); 15 | lr.show_bmarks(); 16 | } 17 | 18 | function Pinboard_Linkroll() { 19 | var items; 20 | 21 | this.set_items = function(i) { 22 | this.items = i; 23 | } 24 | this.show_bmarks = function() { 25 | var lines = []; 26 | for (var i = 0; i < this.items.length; i++) { 27 | var item = this.items[i]; 28 | var str = this.format_item(item); 29 | lines.push(str); 30 | } 31 | document.getElementById(linkroll).innerHTML = lines.join("\n"); 32 | } 33 | this.cook = function(v) { 34 | return v.replace('<', '<').replace('>', '>>'); 35 | } 36 | 37 | this.format_item = function(it) { 38 | var str = "
  • "; 39 | if (!it.d) { return; } 40 | str += "

    " + this.cook(it.d) + ""; 41 | if (it.n) { 42 | str += "" + this.cook(it.n) + "\n"; 43 | } 44 | if (it.t.length > 0) { 45 | for (var i = 0; i < it.t.length; i++) { 46 | var tag = it.t[i]; 47 | str += " " + this.cook(tag).replace(/^\s+|\s+$/g, '') + " "; 48 | } 49 | } 50 | str += "

  • \n"; 51 | return str; 52 | } 53 | } 54 | Pinboard_Linkroll.prototype = new Pinboard_Linkroll(); 55 | pinboardNS_fetch_script("https://feeds.pinboard.in/json/v1/u:"+pinboard_user+"/?cb=pinboardNS_show_bmarks\&count="+pinboard_count); 56 | 57 | -------------------------------------------------------------------------------- /source/javascripts/pinboard.js: -------------------------------------------------------------------------------- 1 | function pinboardNS_fetch_script(url) { 2 | //document.writeln(''); 3 | (function(){ 4 | var pinboardLinkroll = document.createElement('script'); 5 | pinboardLinkroll.type = 'text/javascript'; 6 | pinboardLinkroll.async = true; 7 | pinboardLinkroll.src = url; 8 | document.getElementsByTagName('head')[0].appendChild(pinboardLinkroll); 9 | })(); 10 | } 11 | 12 | function pinboardNS_show_bmarks(r) { 13 | var lr = new Pinboard_Linkroll(); 14 | lr.set_items(r); 15 | lr.show_bmarks(); 16 | } 17 | 18 | function Pinboard_Linkroll() { 19 | var items; 20 | 21 | this.set_items = function(i) { 22 | this.items = i; 23 | } 24 | this.show_bmarks = function() { 25 | var lines = []; 26 | for (var i = 0; i < this.items.length; i++) { 27 | var item = this.items[i]; 28 | var str = this.format_item(item); 29 | lines.push(str); 30 | } 31 | document.getElementById(linkroll).innerHTML = lines.join("\n"); 32 | } 33 | this.cook = function(v) { 34 | return v.replace('<', '<').replace('>', '>>'); 35 | } 36 | 37 | this.format_item = function(it) { 38 | var str = "
  • "; 39 | if (!it.d) { return; } 40 | str += "

    " + this.cook(it.d) + ""; 41 | if (it.n) { 42 | str += "" + this.cook(it.n) + "\n"; 43 | } 44 | if (it.t.length > 0) { 45 | for (var i = 0; i < it.t.length; i++) { 46 | var tag = it.t[i]; 47 | str += " " + this.cook(tag).replace(/^\s+|\s+$/g, '') + " "; 48 | } 49 | } 50 | str += "

  • \n"; 51 | return str; 52 | } 53 | } 54 | Pinboard_Linkroll.prototype = new Pinboard_Linkroll(); 55 | pinboardNS_fetch_script("https://feeds.pinboard.in/json/v1/u:"+pinboard_user+"/?cb=pinboardNS_show_bmarks\&count="+pinboard_count); 56 | 57 | -------------------------------------------------------------------------------- /source/_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {% if page.title %}{% if site.titlecase %}{{ page.title | titlecase }}{% else %}{{ page.title }}{% endif %} - {% endif %}{{ site.title }} 8 | 9 | 10 | {% capture description %}{% if page.description %}{{ page.description }}{% else %}{{ content | raw_content }}{% endif %}{% endcapture %} 11 | 12 | {% if page.keywords %}{% endif %} 13 | 14 | 15 | 16 | 17 | 18 | 19 | {% capture canonical %}{{ site.url }}{% if site.permalink contains '.html' %}{{ page.url }}{% else %}{{ page.url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %} 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {% include custom/head.html %} 29 | {% include google_analytics.html %} 30 | 31 | -------------------------------------------------------------------------------- /.themes/classic/source/javascripts/pinboard.js: -------------------------------------------------------------------------------- 1 | function pinboardNS_fetch_script(url) { 2 | //document.writeln(''); 3 | (function(){ 4 | var pinboardLinkroll = document.createElement('script'); 5 | pinboardLinkroll.type = 'text/javascript'; 6 | pinboardLinkroll.async = true; 7 | pinboardLinkroll.src = url; 8 | document.getElementsByTagName('head')[0].appendChild(pinboardLinkroll); 9 | })(); 10 | } 11 | 12 | function pinboardNS_show_bmarks(r) { 13 | var lr = new Pinboard_Linkroll(); 14 | lr.set_items(r); 15 | lr.show_bmarks(); 16 | } 17 | 18 | function Pinboard_Linkroll() { 19 | var items; 20 | 21 | this.set_items = function(i) { 22 | this.items = i; 23 | } 24 | this.show_bmarks = function() { 25 | var lines = []; 26 | for (var i = 0; i < this.items.length; i++) { 27 | var item = this.items[i]; 28 | var str = this.format_item(item); 29 | lines.push(str); 30 | } 31 | document.getElementById(linkroll).innerHTML = lines.join("\n"); 32 | } 33 | this.cook = function(v) { 34 | return v.replace('<', '<').replace('>', '>>'); 35 | } 36 | 37 | this.format_item = function(it) { 38 | var str = "
  • "; 39 | if (!it.d) { return; } 40 | str += "

    " + this.cook(it.d) + ""; 41 | if (it.n) { 42 | str += "" + this.cook(it.n) + "\n"; 43 | } 44 | if (it.t.length > 0) { 45 | for (var i = 0; i < it.t.length; i++) { 46 | var tag = it.t[i]; 47 | str += " " + this.cook(tag).replace(/^\s+|\s+$/g, '') + " "; 48 | } 49 | } 50 | str += "

  • \n"; 51 | return str; 52 | } 53 | } 54 | Pinboard_Linkroll.prototype = new Pinboard_Linkroll(); 55 | pinboardNS_fetch_script("https://feeds.pinboard.in/json/v1/u:"+pinboard_user+"/?cb=pinboardNS_show_bmarks\&count="+pinboard_count); 56 | 57 | -------------------------------------------------------------------------------- /plugins/include_array.rb: -------------------------------------------------------------------------------- 1 | # Title: Include Array Tag for Jekyll 2 | # Author: Jason Woodward http://www.woodwardjd.com 3 | # Description: Import files on your filesystem as specified in a configuration variable in _config.yml. Mostly cribbed from Jekyll's include tag. 4 | # Syntax: {% include_array variable_name_from_config.yml %} 5 | # 6 | # Example 1: 7 | # {% include_array asides %} 8 | # 9 | # _config.yml snippet: 10 | # asides: [asides/twitter.html, asides/custom/my_picture.html] 11 | # 12 | module Jekyll 13 | 14 | class IncludeArrayTag < Liquid::Tag 15 | Syntax = /(#{Liquid::QuotedFragment}+)/ 16 | def initialize(tag_name, markup, tokens) 17 | if markup =~ Syntax 18 | @array_name = $1 19 | else 20 | raise SyntaxError.new("Error in tag 'include_array' - Valid syntax: include_array [array from _config.yml]") 21 | end 22 | 23 | super 24 | end 25 | 26 | def render(context) 27 | includes_dir = File.join(context.registers[:site].source, '_includes') 28 | 29 | if File.symlink?(includes_dir) 30 | return "Includes directory '#{includes_dir}' cannot be a symlink" 31 | end 32 | 33 | rtn = '' 34 | (context.environments.first['site'][@array_name] || []).each do |file| 35 | if file !~ /^[a-zA-Z0-9_\/\.-]+$/ || file =~ /\.\// || file =~ /\/\./ 36 | rtn = rtn + "Include file '#{file}' contains invalid characters or sequences" 37 | end 38 | 39 | Dir.chdir(includes_dir) do 40 | choices = Dir['**/*'].reject { |x| File.symlink?(x) } 41 | if choices.include?(file) 42 | source = File.read(file) 43 | partial = Liquid::Template.parse(source) 44 | context.stack do 45 | rtn = rtn + partial.render(context) 46 | end 47 | else 48 | rtn = rtn + "Included file '#{file}' not found in _includes directory" 49 | end 50 | end 51 | end 52 | rtn 53 | end 54 | end 55 | 56 | end 57 | 58 | Liquid::Template.register_tag('include_array', Jekyll::IncludeArrayTag) 59 | -------------------------------------------------------------------------------- /plugins/pullquote.rb: -------------------------------------------------------------------------------- 1 | # 2 | # Author: Brandon Mathis 3 | # Based on the semantic pullquote technique by Maykel Loomans at http://miekd.com/articles/pull-quotes-with-html5-and-css/ 4 | # 5 | # Outputs a span with a data-pullquote attribute set from the marked pullquote. Example: 6 | # 7 | # {% pullquote %} 8 | # When writing longform posts, I find it helpful to include pullquotes, which help those scanning a post discern whether or not a post is helpful. 9 | # It is important to note, {" pullquotes are merely visual in presentation and should not appear twice in the text. "} That is why it is prefered 10 | # to use a CSS only technique for styling pullquotes. 11 | # {% endpullquote %} 12 | # ...will output... 13 | #

    14 | # 15 | # When writing longform posts, I find it helpful to include pullquotes, which help those scanning a post discern whether or not a post is helpful. 16 | # It is important to note, pullquotes are merely visual in presentation and should not appear twice in the text. This is why a CSS only approach 17 | # for styling pullquotes is prefered. 18 | # 19 | #

    20 | # 21 | # {% pullquote left %} will create a left-aligned pullquote instead. 22 | # 23 | # Note: this plugin now creates pullquotes with the class of pullquote-right by default 24 | 25 | module Jekyll 26 | 27 | class PullquoteTag < Liquid::Block 28 | def initialize(tag_name, markup, tokens) 29 | @align = (markup =~ /left/i) ? "left" : "right" 30 | super 31 | end 32 | 33 | def render(context) 34 | output = super 35 | if output =~ /\{"\s*(.+?)\s*"\}/m 36 | @quote = RubyPants.new($1).to_html 37 | "#{output.gsub(/\{"\s*|\s*"\}/, '')}" 38 | else 39 | return "Surround your pullquote like this {\" text to be quoted \"}" 40 | end 41 | end 42 | end 43 | end 44 | 45 | Liquid::Template.register_tag('pullquote', Jekyll::PullquoteTag) 46 | -------------------------------------------------------------------------------- /plugins/image_tag.rb: -------------------------------------------------------------------------------- 1 | # Title: Simple Image tag for Jekyll 2 | # Authors: Brandon Mathis http://brandonmathis.com 3 | # Felix Schäfer, Frederic Hemberger 4 | # Description: Easily output images with optional class names, width, height, title and alt attributes 5 | # 6 | # Syntax {% img [class name(s)] [http[s]:/]/path/to/image [width [height]] [title text | "title text" ["alt text"]] %} 7 | # 8 | # Examples: 9 | # {% img /images/ninja.png Ninja Attack! %} 10 | # {% img left half http://site.com/images/ninja.png Ninja Attack! %} 11 | # {% img left half http://site.com/images/ninja.png 150 150 "Ninja Attack!" "Ninja in attack posture" %} 12 | # 13 | # Output: 14 | # 15 | # Ninja Attack! 16 | # Ninja in attack posture 17 | # 18 | 19 | module Jekyll 20 | 21 | class ImageTag < Liquid::Tag 22 | @img = nil 23 | 24 | def initialize(tag_name, markup, tokens) 25 | attributes = ['class', 'src', 'width', 'height', 'title'] 26 | 27 | if markup =~ /(?\S.*\s+)?(?(?:https?:\/\/|\/|\S+\/)\S+)(?:\s+(?\d+))?(?:\s+(?\d+))?(?\s+.+)?/i 28 | @img = attributes.reduce({}) { |img, attr| img[attr] = $~[attr].strip if $~[attr]; img } 29 | if /(?:"|')(?<title>[^"']+)?(?:"|')\s+(?:"|')(?<alt>[^"']+)?(?:"|')/ =~ @img['title'] 30 | @img['title'] = title 31 | @img['alt'] = alt 32 | else 33 | @img['alt'] = @img['title'].gsub!(/"/, '"') if @img['title'] 34 | end 35 | @img['class'].gsub!(/"/, '') if @img['class'] 36 | end 37 | super 38 | end 39 | 40 | def render(context) 41 | if @img 42 | "<img #{@img.collect {|k,v| "#{k}=\"#{v}\"" if v}.join(" ")}>" 43 | else 44 | "Error processing input, expected syntax: {% img [class name(s)] [http[s]:/]/path/to/image [width [height]] [title text | \"title text\" [\"alt text\"]] %}" 45 | end 46 | end 47 | end 48 | end 49 | 50 | Liquid::Template.register_tag('img', Jekyll::ImageTag) 51 | -------------------------------------------------------------------------------- /source/_posts/2014-12-30-space-exploration.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Space Exploration" 4 | date: 2014-12-30 14:26 5 | comments: true 6 | categories: 7 | --- 8 | 9 | The recent launch of Orion got me thinking about space exploration. The nostalgic notion of the whole country excited about putting a man on the moon. I decided to learn more about it and started reading [Apollo](http://www.amazon.com/Apollo-Charles-Murray/dp/0976000806). Coincidentally Carrie gave me an early stocking stuffer, [The Martian](https://www.amazon.com/Martian-Novel-Andy-Weir-ebook/dp/B00EMXBDMA) a fictional story about an astronaut stranded on Mars during an Ares space program mission. I plowed through the book and am now back to reading the much longer, and denser non-fictional history of the Apollo program. The space program is fascinating. Full of big personalities and huge ambition. The scale of the technical challenges they overcame is inspirational to me. The coordination of such an immense project is hard to grasp. 10 | 11 | While my work on iPhone apps is but a fraction of the scale I think there are a lot of lessons that apply. 12 | 13 | * Failure and the process of investigating failure is as much a part of the engineering process as succeeding. Fixing a bug or spending the time to figure out a challenge is very valuable, not a waste of time or effort. 14 | * Discipline is a lost art. My number one goal for the new year is a renewed effort in self discipline and focus. Some aspects of programming are tedious but they are essential to a quality product. 15 | * Along those lines: Technical Journaling could be especially useful for my poor memory. This entry is the first in my attempt to capture and organize my thoughts. I plan to document my problem solving and daily progress. I ordered a Moleskin Evernote edition with the hopes of retaining much more of my daily thinking through the act of physically writing it down. Being able to scan it in addresses my concerns about it not being searchable and backed up. 16 | 17 | I plan to post as much of my journal here as possible. If you'd rather follow along without all the other Ello posts of mine I'll have it on my blog, [seancdougherty.com](http://seancdougherty.com) as well. 18 | 19 | **Sean and Ello to the moon in 2015!** 🚀 -------------------------------------------------------------------------------- /plugins/render_partial.rb: -------------------------------------------------------------------------------- 1 | # Title: Render Partial Tag for Jekyll 2 | # Author: Brandon Mathis http://brandonmathis.com 3 | # Description: Import files on your filesystem into any blog post and render them inline. 4 | # Note: Paths are relative to the source directory, if you import a file with yaml front matter, the yaml will be stripped out. 5 | # 6 | # Syntax {% render_partial path/to/file %} 7 | # 8 | # Example 1: 9 | # {% render_partial about/_bio.markdown %} 10 | # 11 | # This will import source/about/_bio.markdown and render it inline. 12 | # In this example I used an underscore at the beginning of the filename to prevent Jekyll 13 | # from generating an about/bio.html (Jekyll doesn't convert files beginning with underscores) 14 | # 15 | # Example 2: 16 | # {% render_partial ../README.markdown %} 17 | # 18 | # You can use relative pathnames, to include files outside of the source directory. 19 | # This might be useful if you want to have a page for a project's README without having 20 | # to duplicated the contents 21 | # 22 | # 23 | 24 | require 'pathname' 25 | require './plugins/octopress_filters' 26 | 27 | module Jekyll 28 | 29 | class RenderPartialTag < Liquid::Tag 30 | include OctopressFilters 31 | def initialize(tag_name, markup, tokens) 32 | @file = nil 33 | @raw = false 34 | if markup =~ /^(\S+)\s?(\w+)?/ 35 | @file = $1.strip 36 | @raw = $2 == 'raw' 37 | end 38 | super 39 | end 40 | 41 | def render(context) 42 | file_dir = (context.registers[:site].source || 'source') 43 | file_path = Pathname.new(file_dir).expand_path 44 | file = file_path + @file 45 | 46 | unless file.file? 47 | return "File #{file} could not be found" 48 | end 49 | 50 | Dir.chdir(file_path) do 51 | contents = file.read 52 | if contents =~ /\A-{3}.+[^\A]-{3}\n(.+)/m 53 | contents = $1.lstrip 54 | end 55 | contents = pre_filter(contents) 56 | if @raw 57 | contents 58 | else 59 | partial = Liquid::Template.parse(contents) 60 | context.stack do 61 | partial.render(context) 62 | end 63 | end 64 | end 65 | end 66 | end 67 | end 68 | 69 | Liquid::Template.register_tag('render_partial', Jekyll::RenderPartialTag) 70 | -------------------------------------------------------------------------------- /source/javascripts/jquery-tapir.js: -------------------------------------------------------------------------------- 1 | (function($){ 2 | var el; 3 | var settings = {}; 4 | 5 | var methods = { 6 | init: function(options) { 7 | el = this; 8 | 9 | settings = { 10 | token: false, 11 | query_param: 'query' 12 | }; 13 | 14 | if (options) { 15 | $.extend(settings, options); 16 | } 17 | 18 | if (!settings.token || settings.query_param == '') { 19 | return this; 20 | } 21 | 22 | $.getJSON( 23 | 'http://tapirgo.com/api/1/search.json?token=' + settings.token + '&query=' + paramValue(settings.query_param) + '&callback=?', function(data){ 24 | if(settings['complete']) { settings.complete() } 25 | $.each(data, function(key, val) { 26 | document.getElementById('search_results').style.display="block"; 27 | document.getElementById('search_results').style.height="100%"; 28 | document.getElementById('search_results').style.overflow="hidden"; 29 | var str1 = val.content; 30 | var str2 = str1.substr(1, 250); 31 | str2 = str2.substr(0, Math.min(str2.length, str2.lastIndexOf(" "))); 32 | el.append('<div id="content" class="inner"><article class="post"><h2 class="title"><a href="' + val.link + '">' + val.title + '</a></h2><div class="entry-content"><div class="date">Published on: ' + (val.published_on).substr(0,10) + '</div></div><br><p>' + str2 + '...</p><br><a href="' + val.link +'">Read on →</a></article></div>'); 33 | if(key >= (data.length-1)){ 34 | el.append('<div id="content" class="inner"><center><h2 style="border-bottom: 1px solid #ddd;">Result ends</h2></center><br><br></div>'); 35 | } 36 | }); 37 | } 38 | ); 39 | 40 | return this; 41 | } 42 | }; 43 | 44 | // Extract the param value from the URL. 45 | function paramValue(query_param) { 46 | var results = new RegExp('[\\?&]' + query_param + '=([^&#]*)').exec(window.location.href); 47 | return results ? results[1] : false; 48 | } 49 | 50 | $.fn.tapir = function(method) { 51 | if (methods[method]) { 52 | return methods[ method ].apply(this, Array.prototype.slice.call(arguments, 1)); 53 | } else if (typeof method === 'object' || ! method) { 54 | return methods.init.apply(this, arguments); 55 | } else { 56 | $.error('Method ' + method + ' does not exist on jQuery.tapir'); 57 | } 58 | }; 59 | 60 | })( jQuery ); 61 | -------------------------------------------------------------------------------- /plugins/include_code.rb: -------------------------------------------------------------------------------- 1 | # Title: Include Code Tag for Jekyll 2 | # Author: Brandon Mathis http://brandonmathis.com 3 | # Description: Import files on your filesystem into any blog post as embedded code snippets with syntax highlighting and a download link. 4 | # Configuration: You can set default import path in _config.yml (defaults to code_dir: downloads/code) 5 | # 6 | # Syntax {% include_code path/to/file %} 7 | # 8 | # Example 1: 9 | # {% include_code javascripts/test.js %} 10 | # 11 | # This will import test.js from source/downloads/code/javascripts/test.js 12 | # and output the contents in a syntax highlighted code block inside a figure, 13 | # with a figcaption listing the file name and download link 14 | # 15 | # Example 2: 16 | # You can also include an optional title for the <figcaption> 17 | # 18 | # {% include_code Example 2 javascripts/test.js %} 19 | # 20 | # will output a figcaption with the title: Example 2 (test.js) 21 | # 22 | 23 | require './plugins/pygments_code' 24 | require './plugins/raw' 25 | require 'pathname' 26 | 27 | module Jekyll 28 | 29 | class IncludeCodeTag < Liquid::Tag 30 | include HighlightCode 31 | include TemplateWrapper 32 | def initialize(tag_name, markup, tokens) 33 | @title = nil 34 | @file = nil 35 | if markup.strip =~ /\s*lang:(\S+)/i 36 | @filetype = $1 37 | markup = markup.strip.sub(/lang:\S+/i,'') 38 | end 39 | if markup.strip =~ /(.*)?(\s+|^)(\/*\S+)/i 40 | @title = $1 || nil 41 | @file = $3 42 | end 43 | super 44 | end 45 | 46 | def render(context) 47 | code_dir = (context.registers[:site].config['code_dir'].sub(/^\//,'') || 'downloads/code') 48 | code_path = (Pathname.new(context.registers[:site].source) + code_dir).expand_path 49 | file = code_path + @file 50 | 51 | if File.symlink?(code_path) 52 | return "Code directory '#{code_path}' cannot be a symlink" 53 | end 54 | 55 | unless file.file? 56 | return "File #{file} could not be found" 57 | end 58 | 59 | Dir.chdir(code_path) do 60 | code = file.read 61 | @filetype = file.extname.sub('.','') if @filetype.nil? 62 | title = @title ? "#{@title} (#{file.basename})" : file.basename 63 | url = "/#{code_dir}/#{@file}" 64 | source = "<figure class='code'><figcaption><span>#{title}</span> <a href='#{url}'>download</a></figcaption>\n" 65 | source += " #{highlight(code, @filetype)}</figure>" 66 | safe_wrap(source) 67 | end 68 | end 69 | end 70 | 71 | end 72 | 73 | Liquid::Template.register_tag('include_code', Jekyll::IncludeCodeTag) 74 | -------------------------------------------------------------------------------- /plugins/blockquote.rb: -------------------------------------------------------------------------------- 1 | # 2 | # Author: Brandon Mathis 3 | # A full rewrite based on the work of: Josediaz Gonzalez - https://github.com/josegonzalez/josediazgonzalez.com/blob/master/_plugins/blockquote.rb 4 | # 5 | # Outputs a string with a given attribution as a quote 6 | # 7 | # {% blockquote Bobby Willis http://google.com/search?q=pants the search for bobby's pants %} 8 | # Wheeee! 9 | # {% endblockquote %} 10 | # ... 11 | # <blockquote> 12 | # <p>Wheeee!</p> 13 | # <footer> 14 | # <strong>Bobby Willis</strong><cite><a href="http://google.com/search?q=pants">The Search For Bobby's Pants</a> 15 | # </blockquote> 16 | # 17 | require './plugins/titlecase.rb' 18 | 19 | module Jekyll 20 | 21 | class Blockquote < Liquid::Block 22 | FullCiteWithTitle = /(\S.*)\s+(https?:\/\/)(\S+)\s+(.+)/i 23 | FullCite = /(\S.*)\s+(https?:\/\/)(\S+)/i 24 | AuthorTitle = /([^,]+),([^,]+)/ 25 | Author = /(.+)/ 26 | 27 | def initialize(tag_name, markup, tokens) 28 | @by = nil 29 | @source = nil 30 | @title = nil 31 | if markup =~ FullCiteWithTitle 32 | @by = $1 33 | @source = $2 + $3 34 | @title = $4.titlecase.strip 35 | elsif markup =~ FullCite 36 | @by = $1 37 | @source = $2 + $3 38 | elsif markup =~ AuthorTitle 39 | @by = $1 40 | @title = $2.titlecase.strip 41 | elsif markup =~ Author 42 | @by = $1 43 | end 44 | super 45 | end 46 | 47 | def render(context) 48 | quote = paragraphize(super) 49 | author = "<strong>#{@by.strip}</strong>" if @by 50 | if @source 51 | url = @source.match(/https?:\/\/(.+)/)[1].split('/') 52 | parts = [] 53 | url.each do |part| 54 | if (parts + [part]).join('/').length < 32 55 | parts << part 56 | end 57 | end 58 | source = parts.join('/') 59 | source << '/…' unless source == @source 60 | end 61 | if !@source.nil? 62 | cite = " <cite><a href='#{@source}'>#{(@title || source)}</a></cite>" 63 | elsif !@title.nil? 64 | cite = " <cite>#{@title}</cite>" 65 | end 66 | blockquote = if @by.nil? 67 | quote 68 | elsif cite 69 | "#{quote}<footer>#{author + cite}</footer>" 70 | else 71 | "#{quote}<footer>#{author}</footer>" 72 | end 73 | "<blockquote>#{blockquote}</blockquote>" 74 | end 75 | 76 | def paragraphize(input) 77 | "<p>#{input.lstrip.rstrip.gsub(/\n\n/, '</p><p>').gsub(/\n/, '<br/>')}</p>" 78 | end 79 | end 80 | end 81 | 82 | Liquid::Template.register_tag('blockquote', Jekyll::Blockquote) 83 | -------------------------------------------------------------------------------- /javascripts/libs/jXHR.js: -------------------------------------------------------------------------------- 1 | // jXHR.js (JSON-P XHR) 2 | // v0.1 (c) Kyle Simpson 3 | // MIT License 4 | 5 | (function(global){ 6 | var SETTIMEOUT = global.setTimeout, // for better compression 7 | doc = global.document, 8 | callback_counter = 0; 9 | 10 | global.jXHR = function() { 11 | var script_url, 12 | script_loaded, 13 | jsonp_callback, 14 | scriptElem, 15 | publicAPI = null; 16 | 17 | function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } } 18 | 19 | function reset() { 20 | script_loaded = false; 21 | script_url = ""; 22 | removeScript(); 23 | scriptElem = null; 24 | fireReadyStateChange(0); 25 | } 26 | 27 | function ThrowError(msg) { 28 | try { publicAPI.onerror.call(publicAPI,msg,script_url); } catch (err) { throw new Error(msg); } 29 | } 30 | 31 | function handleScriptLoad() { 32 | if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; } 33 | this.onload = this.onreadystatechange = null; // prevent memory leak 34 | script_loaded = true; 35 | if (publicAPI.readyState !== 4) ThrowError("Script failed to load ["+script_url+"]."); 36 | removeScript(); 37 | } 38 | 39 | function fireReadyStateChange(rs,args) { 40 | args = args || []; 41 | publicAPI.readyState = rs; 42 | if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args); 43 | } 44 | 45 | publicAPI = { 46 | onerror:null, 47 | onreadystatechange:null, 48 | readyState:0, 49 | open:function(method,url){ 50 | reset(); 51 | internal_callback = "cb"+(callback_counter++); 52 | (function(icb){ 53 | global.jXHR[icb] = function() { 54 | try { fireReadyStateChange.call(publicAPI,4,arguments); } 55 | catch(err) { 56 | publicAPI.readyState = -1; 57 | ThrowError("Script failed to run ["+script_url+"]."); 58 | } 59 | global.jXHR[icb] = null; 60 | }; 61 | })(internal_callback); 62 | script_url = url.replace(/=\?/,"=jXHR."+internal_callback); 63 | fireReadyStateChange(1); 64 | }, 65 | send:function(){ 66 | SETTIMEOUT(function(){ 67 | scriptElem = doc.createElement("script"); 68 | scriptElem.setAttribute("type","text/javascript"); 69 | scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);}; 70 | scriptElem.setAttribute("src",script_url); 71 | doc.getElementsByTagName("head")[0].appendChild(scriptElem); 72 | },0); 73 | fireReadyStateChange(2); 74 | }, 75 | setRequestHeader:function(){}, // noop 76 | getResponseHeader:function(){return "";}, // basically noop 77 | getAllResponseHeaders:function(){return [];} // ditto 78 | }; 79 | 80 | reset(); 81 | 82 | return publicAPI; 83 | }; 84 | })(window); 85 | 86 | -------------------------------------------------------------------------------- /source/javascripts/libs/jXHR.js: -------------------------------------------------------------------------------- 1 | // jXHR.js (JSON-P XHR) 2 | // v0.1 (c) Kyle Simpson 3 | // MIT License 4 | 5 | (function(global){ 6 | var SETTIMEOUT = global.setTimeout, // for better compression 7 | doc = global.document, 8 | callback_counter = 0; 9 | 10 | global.jXHR = function() { 11 | var script_url, 12 | script_loaded, 13 | jsonp_callback, 14 | scriptElem, 15 | publicAPI = null; 16 | 17 | function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } } 18 | 19 | function reset() { 20 | script_loaded = false; 21 | script_url = ""; 22 | removeScript(); 23 | scriptElem = null; 24 | fireReadyStateChange(0); 25 | } 26 | 27 | function ThrowError(msg) { 28 | try { publicAPI.onerror.call(publicAPI,msg,script_url); } catch (err) { throw new Error(msg); } 29 | } 30 | 31 | function handleScriptLoad() { 32 | if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; } 33 | this.onload = this.onreadystatechange = null; // prevent memory leak 34 | script_loaded = true; 35 | if (publicAPI.readyState !== 4) ThrowError("Script failed to load ["+script_url+"]."); 36 | removeScript(); 37 | } 38 | 39 | function fireReadyStateChange(rs,args) { 40 | args = args || []; 41 | publicAPI.readyState = rs; 42 | if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args); 43 | } 44 | 45 | publicAPI = { 46 | onerror:null, 47 | onreadystatechange:null, 48 | readyState:0, 49 | open:function(method,url){ 50 | reset(); 51 | internal_callback = "cb"+(callback_counter++); 52 | (function(icb){ 53 | global.jXHR[icb] = function() { 54 | try { fireReadyStateChange.call(publicAPI,4,arguments); } 55 | catch(err) { 56 | publicAPI.readyState = -1; 57 | ThrowError("Script failed to run ["+script_url+"]."); 58 | } 59 | global.jXHR[icb] = null; 60 | }; 61 | })(internal_callback); 62 | script_url = url.replace(/=\?/,"=jXHR."+internal_callback); 63 | fireReadyStateChange(1); 64 | }, 65 | send:function(){ 66 | SETTIMEOUT(function(){ 67 | scriptElem = doc.createElement("script"); 68 | scriptElem.setAttribute("type","text/javascript"); 69 | scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);}; 70 | scriptElem.setAttribute("src",script_url); 71 | doc.getElementsByTagName("head")[0].appendChild(scriptElem); 72 | },0); 73 | fireReadyStateChange(2); 74 | }, 75 | setRequestHeader:function(){}, // noop 76 | getResponseHeader:function(){return "";}, // basically noop 77 | getAllResponseHeaders:function(){return [];} // ditto 78 | }; 79 | 80 | reset(); 81 | 82 | return publicAPI; 83 | }; 84 | })(window); 85 | 86 | -------------------------------------------------------------------------------- /.themes/classic/source/javascripts/libs/jXHR.js: -------------------------------------------------------------------------------- 1 | // jXHR.js (JSON-P XHR) 2 | // v0.1 (c) Kyle Simpson 3 | // MIT License 4 | 5 | (function(global){ 6 | var SETTIMEOUT = global.setTimeout, // for better compression 7 | doc = global.document, 8 | callback_counter = 0; 9 | 10 | global.jXHR = function() { 11 | var script_url, 12 | script_loaded, 13 | jsonp_callback, 14 | scriptElem, 15 | publicAPI = null; 16 | 17 | function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } } 18 | 19 | function reset() { 20 | script_loaded = false; 21 | script_url = ""; 22 | removeScript(); 23 | scriptElem = null; 24 | fireReadyStateChange(0); 25 | } 26 | 27 | function ThrowError(msg) { 28 | try { publicAPI.onerror.call(publicAPI,msg,script_url); } catch (err) { throw new Error(msg); } 29 | } 30 | 31 | function handleScriptLoad() { 32 | if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; } 33 | this.onload = this.onreadystatechange = null; // prevent memory leak 34 | script_loaded = true; 35 | if (publicAPI.readyState !== 4) ThrowError("Script failed to load ["+script_url+"]."); 36 | removeScript(); 37 | } 38 | 39 | function fireReadyStateChange(rs,args) { 40 | args = args || []; 41 | publicAPI.readyState = rs; 42 | if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args); 43 | } 44 | 45 | publicAPI = { 46 | onerror:null, 47 | onreadystatechange:null, 48 | readyState:0, 49 | open:function(method,url){ 50 | reset(); 51 | internal_callback = "cb"+(callback_counter++); 52 | (function(icb){ 53 | global.jXHR[icb] = function() { 54 | try { fireReadyStateChange.call(publicAPI,4,arguments); } 55 | catch(err) { 56 | publicAPI.readyState = -1; 57 | ThrowError("Script failed to run ["+script_url+"]."); 58 | } 59 | global.jXHR[icb] = null; 60 | }; 61 | })(internal_callback); 62 | script_url = url.replace(/=\?/,"=jXHR."+internal_callback); 63 | fireReadyStateChange(1); 64 | }, 65 | send:function(){ 66 | SETTIMEOUT(function(){ 67 | scriptElem = doc.createElement("script"); 68 | scriptElem.setAttribute("type","text/javascript"); 69 | scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);}; 70 | scriptElem.setAttribute("src",script_url); 71 | doc.getElementsByTagName("head")[0].appendChild(scriptElem); 72 | },0); 73 | fireReadyStateChange(2); 74 | }, 75 | setRequestHeader:function(){}, // noop 76 | getResponseHeader:function(){return "";}, // basically noop 77 | getAllResponseHeaders:function(){return [];} // ditto 78 | }; 79 | 80 | reset(); 81 | 82 | return publicAPI; 83 | }; 84 | })(window); 85 | 86 | -------------------------------------------------------------------------------- /source/index.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: info 3 | title: "" 4 | date: 2016-05-25 20:53 5 | comments: false 6 | sharing: false 7 | footer: true 8 | --- 9 | 10 | I am a mobile software engineer living in Denver Colorado. I spend my time writing code, mostly Swift, hanging out with my wife and 3 boys, injuring myself while running and coaching my kids' soccer teams. 11 | 12 | ###Current 13 | My current role is Mobile Lead at [Ello](https://ello.co) where I get to work with a group of incredibly talented and passionate friends and colleagues. 14 | 15 | ###Products 16 | Creating software has always been a creative outlet for me. I love learning new languages, technologies and approaches. I love learning from other programmers and teaching other programmers. But ultimately, my love of programming comes from creating something that people enjoy using. An application that people want to use, that solves a problem for them, makes their life easier, helps or entertains them. I'm lucky I get to build products that matter to the people who use them. 17 | 18 | * [Ello](https://ello.co) 19 | * [GoSpotCheck](https://www.gospotcheck.com) 20 | * [CirrusMD](http://cirrusmd.com) 21 | * [Storyvine](http://www.storyvine.com) 22 | * [SNOCRU](http://www.snocru.com) 23 | * Red Robin's [Customizer](https://itunes.apple.com/us/app/red-robin-customizer/id425269915?mt=8) 24 | 25 | [See a full list of products](/products/) 26 | 27 | 28 | ###Work History 29 | Over the last 20 years I have charted a path from my background in fine arts to software engineering. I've worked with dozens of companies on projects using many technologies along the way. My life as a programmer started with plain html in the late 1990s leading to ActionScript in the early 2000s to C#, Ruby, Objective-C and my current love, Swift. Since the early days of Swift development in the fall of 2014 I have been lucky to spend most of my time working in it. 30 | 31 | * **Ello** - Mobile Lead 1/2015 - present 32 | * **Ello** - VP Engineering 10/2015 - 5/2016 33 | * **GoSpotCheck** - Principal Mobile Engineer 5/2014 - 9/2014 34 | * **process255** - Owner 10/2009 - 1/2015 35 | * **Factory Design Labs** - Sr. Diretor of Interactive Services 5/2009 - 10/2009 36 | * **Factory Design Labs** - User Interface Development Director 5/2008 - 5/2009 37 | * **Factory Design Labs** - Lead User Interface Developer 4/2007 - 5/2008 38 | * **Xylem Interactive** - Technical Manager 9/2005 - 4/2007 39 | * **Xylem Interactive** - Web Developer 10/2004 - 9/2005 40 | * **Cramer** - Sr. Designer 3/2003 - 10/2004 41 | * **Kaminsky Strategik Design** - Designer 11/2001 - 3/2003 42 | 43 | [See full work history](/work-history/) 44 | 45 | ###Contact 46 | You can reach me on twitter [@sdougherty](https://twitter.com/sdougherty), ello [@sean](https://ello.co/sean) or by email at seancdougherty@gmail.com and view OSS and work on github [steam](https://github.com/steam). [View my resume as a pdf](/assets/Sean-Dougherty-Resume.pdf). -------------------------------------------------------------------------------- /source/_posts/2016-10-10-fixing-a-commit-to-the-wrong-branch.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Fixing a commit to the wrong branch" 4 | date: 2016-10-10 22:16 5 | comments: true 6 | categories: git 7 | --- 8 | 9 | In my last post [I Suck at Git](http://seancdougherty.com/blog/2016/10/02/i-suck-at-git/) I mentioned that I'd post some other git-gotchas in the future. I love this workflow, courtesy of Colin, my goto for all things git. 10 | 11 | Have you ever made changes to files in an existing git project, committed them, and realized you intended to commit the changes to a different branch? 12 | 13 | ###I have 14 | 15 | Here is the scenario. At Ello, we use a simple branching model. You're probably familar with it. `master` is kept clean, ideally only production ready code sees the light of `master`. When working on bug fixes or features we create topic or feature branches. A typical flow starts with a fresh pull from master. 16 | 17 | ``` 18 | git co master 19 | git pull 20 | ``` 21 | 22 | Followed by creating a feature branch. 23 | 24 | ``` 25 | git co -b sd/feature/make-america-great-again 26 | ``` 27 | 28 | Next, all the code that Makes America Great Again is written, the tests are written, they're submitted as a pull-request, reviewed, updated, and finally submitted for acceptance testing, approved and merged. 29 | 30 | This is the typical flow. It works great. Most of the time. 31 | 32 | But what if someone (finger pointed at myself) gets a little ahead of himself and forgets to create a topic/feature branch? What if they write some *tremendous* code and immediately commit it directly to master? 33 | 34 | ``` 35 | git co master 36 | git pull 37 | ... write some tremendous code 38 | git add ... tremendous code 39 | git commit -m "adds tremendous code" 40 | ... write more amazing code 41 | git add ... amazing code 42 | git commit -m "adds amazing code" 43 | ``` 44 | 45 | After realizing that there are two commits in master that I intended to commit to `sd/feature/make-america-great-again` I need to fix things. It turns out that the fix is pretty simple. There are several approaches to the problem but I really like this one. 46 | 47 | 1. create a new branch 48 | 1. checkout master 49 | 1. `git reset HEAD~` the requisite number of times 50 | 1. move on with your life 51 | 52 | After executing the offending commits. 53 | 54 | ``` 55 | git co -b sd/feature/make-america-great-again 56 | git co master 57 | git reset HEAD~ // undoes the most recent commit, leaving the modified changes on disk 58 | git reset HEAD~ // undoes the next commit, leaving the modified changes on disk 59 | ... do what you want, git stash is a reasonable idea 60 | git co sd/feature/make-america-great-again // now you have the commits on the originally intended branch 61 | ``` 62 | 63 | Crisis overted. Thats pretty much it. You're now in the position you inteded to be in the first place. Working on a feature branch, having commited a couple of changes. No harm, no foul. 64 | --------------------------------------------------------------------------------