├── .gitignore ├── favicon.ico ├── images ├── qu.png ├── wm.png ├── about.gif ├── algol.png ├── api.gif ├── bcm_1.png ├── cape.png ├── cmdt.png ├── digg.gif ├── error.gif ├── feed.png ├── home.gif ├── mail.gif ├── mate.png ├── pac.gif ├── pop.png ├── print.gif ├── pushr.png ├── rails.png ├── rcov.png ├── share.gif ├── snake.png ├── spark.png ├── tag.gif ├── tgs.jpg ├── tools.png ├── vim.png ├── vlad.png ├── Camping.gif ├── amigac.png ├── antirsi.png ├── big_box.gif ├── biznik.png ├── desktop.png ├── github.gif ├── google.png ├── helipad.gif ├── macvim.png ├── massive.png ├── mobile.gif ├── notice.gif ├── rdebug.gif ├── reddit.png ├── riotjs.png ├── search.gif ├── shadow.gif ├── shadow4.gif ├── spinner.gif ├── texture.png ├── theme1.png ├── theme2.png ├── theme3.png ├── theme4.png ├── theme5.png ├── theme6.png ├── theme7.png ├── tweetfu.png ├── twitter.gif ├── ui_cat.gif ├── uicat2.gif ├── uicat3.gif ├── vbrowse.png ├── verify.png ├── vimtmux.png ├── wingman.png ├── yourapp.png ├── 11promos.png ├── box_theme1.png ├── box_theme2.png ├── box_theme3.png ├── box_theme4.png ├── box_theme5.png ├── box_theme6.png ├── burn_baby.png ├── ctrlescape.png ├── delicious.gif ├── deployed.png ├── depwhack.png ├── ebiwrite.gif ├── feed-icon.png ├── good_graph.png ├── gradient2.png ├── happiness.png ├── highrise.png ├── hjkl_mac.png ├── icons │ ├── cph.png │ ├── loom.png │ ├── deadline.png │ ├── ebiwrite.png │ ├── helipad.png │ └── tiktrac.png ├── linkedin.gif ├── login-bg.gif ├── mate-thumb.png ├── monkey_1.png ├── monkey_2.png ├── multitap1.png ├── multitap2.png ├── no_sphinx.gif ├── rcov_thumb.png ├── rsyncdiff.png ├── screenshot.gif ├── shadow_1.gif ├── shadow_2.gif ├── shadow_3.gif ├── shadow_4.gif ├── shadow_5.gif ├── shadow_6.gif ├── slider_end.gif ├── spectrum.png ├── text-mate.png ├── transmit.png ├── unix_plate.png ├── vim-better.png ├── work │ ├── loom.png │ ├── furnish.png │ ├── helipad.png │ ├── tiktrac.png │ ├── deadline.png │ ├── ebiwrite.png │ ├── large │ │ ├── loom.png │ │ ├── deadline.png │ │ ├── ebiwrite.png │ │ ├── furnish.png │ │ ├── helipad.png │ │ ├── tiktrac.png │ │ └── reutersrealestate.png │ ├── logos │ │ └── furnish.gif │ └── reutersrealestate.png ├── android_case.png ├── captcha │ ├── 180.png │ ├── 6118.png │ └── 78452.png ├── captor_blog.png ├── changes_diff.png ├── changes_list.png ├── endtroducing.png ├── font_larger.gif ├── font_smaller.gif ├── fowd2010 │ ├── qix.png │ ├── anna.png │ ├── elliot.png │ ├── sarah.png │ ├── simon.png │ └── strange.png ├── heligoitunes.png ├── ig_delicious.png ├── instruments.png ├── iphone-tech.png ├── not_sharing.gif ├── print_small.gif ├── screenshot2.gif ├── shadow_grey.gif ├── share_small.gif ├── slider_track.gif ├── textile_big.png ├── tokyo-night.jpg ├── with_sphinx.gif ├── yourappicon.png ├── automator_menu.png ├── automator_setup.png ├── box_theme_base.png ├── colour_scheme.png ├── dconstruct │ ├── mann.png │ ├── bridle.png │ ├── coates.png │ ├── david.png │ ├── dawes.png │ ├── death.png │ ├── gruber.png │ ├── hannah.png │ ├── marty.png │ └── warren.png ├── deadline-iphone.gif ├── idisk_overview.png ├── iphone_nav_bar.png ├── sand_traveler.png ├── securetrading.png ├── slider_handle.gif ├── textile_small.png ├── textmate_list.png ├── vim-powerline.png ├── zxspectrum_48k.jpg ├── ctrlescape-thumb.png ├── deadline_mac_blog.png ├── instruments_small.png ├── mac_modifier_keys.png ├── screenshot_thumb.gif ├── screenshot_thumb2.gif ├── crossbrowsertesting.png ├── everything_express.png ├── screenshots │ ├── editing.jpg │ ├── editing.png │ ├── dashboard.jpg │ ├── dashboard.png │ ├── editing_thumb.jpg │ └── dashboard_thumb.jpg ├── select_bundle_item.png ├── spinner_transparent.gif ├── tab_bar_controller.png ├── terminal_cheat_sheet.png ├── textmate_subversion.png ├── constants_are_changing.png ├── navigation_controller.png ├── session_encapsulation.png └── silent-running-poster.png ├── files ├── vim │ └── vim.png ├── UploadtoBackpack.zip └── deploy │ ├── deploy_audit.pdf │ └── deploy_audit.zip ├── include ├── images │ ├── alex.png │ ├── home.png │ ├── mail.png │ ├── tile.png │ ├── email.png │ ├── glboxes.png │ ├── iDisk.png │ ├── shadow.gif │ ├── sound.gif │ ├── title.gif │ ├── title.png │ ├── trash.jpg │ ├── HappyMac.png │ ├── msn_wink.gif │ ├── projects.png │ ├── background.png │ ├── background2.png │ ├── journal │ │ ├── ffx.jpg │ │ ├── fry.jpg │ │ ├── ico.jpg │ │ ├── pa.jpg │ │ ├── tori.jpg │ │ ├── apple.jpg │ │ ├── bebop.jpg │ │ ├── meta1.jpg │ │ ├── meta2.jpg │ │ ├── meta3.jpg │ │ ├── meta4.jpg │ │ ├── meta5.jpg │ │ ├── meta6.jpg │ │ ├── meta7.jpg │ │ ├── ntk-cf.jpg │ │ ├── stairs.jpg │ │ ├── stamps.jpg │ │ ├── cinematic.jpg │ │ ├── crimson.jpg │ │ ├── fatality.jpg │ │ ├── morgaine.jpg │ │ ├── ntk-flyer.jpg │ │ ├── ntk-tech.jpg │ │ ├── pavillion.jpg │ │ ├── station.jpg │ │ ├── lemon_jelly.jpg │ │ ├── ntk-arcade.jpg │ │ ├── ntk-flyer2.jpg │ │ ├── ntk-flyer3.jpg │ │ ├── picture(2).jpg │ │ ├── southlondon.jpg │ │ ├── ntk-inventory.jpg │ │ ├── thumbnails │ │ │ ├── ffx.jpg │ │ │ ├── fry.jpg │ │ │ ├── ico.jpg │ │ │ ├── pa.jpg │ │ │ ├── apple.jpg │ │ │ ├── bebop.jpg │ │ │ ├── meta1.jpg │ │ │ ├── meta2.jpg │ │ │ ├── meta3.jpg │ │ │ ├── meta4.jpg │ │ │ ├── meta5.jpg │ │ │ ├── meta6.jpg │ │ │ ├── meta7.jpg │ │ │ ├── tori.jpg │ │ │ ├── crimson.jpg │ │ │ ├── fatality.jpg │ │ │ ├── morgaine.jpg │ │ │ ├── ntk-cf.jpg │ │ │ ├── ntk-tech.jpg │ │ │ ├── stairs.jpg │ │ │ ├── stamps.jpg │ │ │ ├── station.jpg │ │ │ ├── cinematic.jpg │ │ │ ├── ntk-arcade.jpg │ │ │ ├── ntk-flyer.jpg │ │ │ ├── ntk-flyer2.jpg │ │ │ ├── ntk-flyer3.jpg │ │ │ ├── pavillion.jpg │ │ │ ├── lemon_jelly.jpg │ │ │ ├── ntk-inventory.jpg │ │ │ ├── southlondon.jpg │ │ │ ├── 02-08-03_17-07-00.jpg │ │ │ ├── 03-07-03_20-20-30.jpg │ │ │ ├── 05-10-03_13-37-09.jpg │ │ │ ├── 06-06-03_22-42-29.jpg │ │ │ ├── 06-09-03_13-11-49.jpg │ │ │ ├── 06-09-03_14-40-49.jpg │ │ │ ├── 07-06-03_20-43-36.jpg │ │ │ ├── 09-07-03_13-54-55.jpg │ │ │ ├── 10-07-03_10-34-09.jpg │ │ │ ├── 11-06-03_12-19-46.jpg │ │ │ ├── 11-07-03_18-26-22.jpg │ │ │ ├── 11-09-03_13-38-28.jpg │ │ │ ├── 11-09-03_20-38-19.jpg │ │ │ ├── 13-07-03_19-51-37.jpg │ │ │ ├── 13-10-03_17-12-20.jpg │ │ │ ├── 15-06-03_14-07-45.jpg │ │ │ ├── 15-08-03_13-20-05.jpg │ │ │ ├── 15-12-03_08-41-06.jpg │ │ │ ├── 16-10-03_18-03-09.jpg │ │ │ ├── 16-10-03_18-37-52.jpg │ │ │ ├── 16-12-03_08-05-30.jpg │ │ │ ├── 17-10-03_13-15-38.jpg │ │ │ ├── 17-12-03_16-20-15.jpg │ │ │ ├── 19-07-03_11-37-45.jpg │ │ │ ├── 19-12-03_00-27-24.jpg │ │ │ ├── 19-12-03_14-39-37.jpg │ │ │ ├── 20-12-03_20-48-59.jpg │ │ │ ├── 22-12-03_08-11-10.jpg │ │ │ ├── 23-12-03_12-29-20.jpg │ │ │ ├── 24-08-03_12-34-19.jpg │ │ │ ├── 24-10-03_16-00-49.jpg │ │ │ ├── 27-06-03_20-44-01.jpg │ │ │ ├── 27-07-03_16-40-41.jpg │ │ │ ├── 27-12-03_21-26-54.jpg │ │ │ ├── 27-12-03_22-32-55.jpg │ │ │ ├── 28-07-03_22-18-30.jpg │ │ │ ├── 28-11-03_16-14-20.jpg │ │ │ ├── 29-01-04_08-14-06.jpg │ │ │ ├── 29-12-03_10-44-31.jpg │ │ │ └── 30-08-03_19-29-51.jpg │ │ ├── 02-08-03_17-07-00.jpg │ │ ├── 03-07-03_20-20-30.jpg │ │ ├── 05-10-03_13-37-09.jpg │ │ ├── 06-06-03_22-42-29.jpg │ │ ├── 06-09-03_13-11-49.jpg │ │ ├── 06-09-03_14-40-49.jpg │ │ ├── 07-06-03_20-43-36-1.jpg │ │ ├── 07-06-03_20-43-36.jpg │ │ ├── 09-07-03_13-54-55.jpg │ │ ├── 10-07-03_10-34-09.jpg │ │ ├── 11-06-03_12-19-46-1.jpg │ │ ├── 11-06-03_12-19-46-2.jpg │ │ ├── 11-06-03_12-19-46.jpg │ │ ├── 11-07-03_18-26-22.jpg │ │ ├── 11-09-03_13-38-28.jpg │ │ ├── 11-09-03_20-38-19.jpg │ │ ├── 13-07-03_19-51-37.jpg │ │ ├── 13-10-03_17-12-20.jpg │ │ ├── 15-06-03_14-07-45.jpg │ │ ├── 15-08-03_13-20-05-1.jpg │ │ ├── 15-08-03_13-20-05.jpg │ │ ├── 15-12-03_08-41-06.jpg │ │ ├── 16-10-03_18-03-09.jpg │ │ ├── 16-10-03_18-37-52.jpg │ │ ├── 16-12-03_08-05-30.jpg │ │ ├── 17-10-03_13-15-38.jpg │ │ ├── 17-12-03_16-20-15.jpg │ │ ├── 19-07-03_11-37-45.jpg │ │ ├── 19-12-03_00-27-24.jpg │ │ ├── 19-12-03_14-39-37.jpg │ │ ├── 20-12-03_20-48-59.jpg │ │ ├── 22-12-03_08-11-10.jpg │ │ ├── 23-12-03_12-29-20.jpg │ │ ├── 24-08-03_12-34-19.jpg │ │ ├── 24-10-03_16-00-49.jpg │ │ ├── 27-06-03_20-44-01.jpg │ │ ├── 27-07-03_16-40-41.jpg │ │ ├── 27-12-03_21-26-54.jpg │ │ ├── 27-12-03_22-32-55.jpg │ │ ├── 28-07-03_22-18-30.jpg │ │ ├── 28-11-03_16-14-20.jpg │ │ ├── 29-01-04_08-14-06.jpg │ │ ├── 29-12-03_10-44-31.jpg │ │ └── 30-08-03_19-29-51.jpg │ ├── shadowAlpha.png │ ├── shadow_grey.gif │ ├── tiny_noise.png │ ├── macs │ │ ├── home_emac.png │ │ ├── home_laptop.png │ │ ├── work_desktop.png │ │ ├── work_laptop.png │ │ └── thumbnails │ │ │ ├── home_emac.png │ │ │ ├── home_laptop.png │ │ │ ├── work_laptop.png │ │ │ └── work_desktop.png │ └── noepatents_liberty120.png ├── files │ ├── iwap.tar.gz │ ├── webTunes.tar.gz │ ├── xmms-glboxes.tar.gz │ └── foaf.rdf └── style.css ├── robots.txt ├── terminal_cheat_sheet.pdf ├── Makefile ├── old_index.jade ├── javascripts ├── google-code-prettify │ ├── lang-go.js │ ├── lang-ml.js │ ├── lang-vb.js │ ├── lang-lua.js │ ├── lang-scala.js │ ├── lang-sql.js │ ├── lang-tex.js │ ├── lang-vhdl.js │ ├── lang-wiki.js │ ├── lang-apollo.js │ ├── lang-proto.js │ ├── lang-yaml.js │ ├── lang-hs.js │ ├── lang-lisp.js │ ├── lang-css.js │ ├── lang-n.js │ └── lang-clj.js └── site.js ├── README.md ├── stylesheets ├── home.styl └── small.styl ├── _config.json ├── _posts ├── 2009-03-11-hack-the-tube.textile ├── 2007-01-05-hpricot-google-search-snippet.textile ├── 2008-06-27-rails-tutorial-part-1.textile ├── 2009-02-09-molopix.textile ├── 2008-09-25-building-a-singlesign-on-system-in-rails.textile ├── 2008-09-11-guerrilla-software-marketing-strategies.textile ├── 2008-09-08-analytics-with-capistrano.textile ├── 2004-08-02-internationalisation-with-xslt.textile ├── 2008-09-22-dynamic-rails-error-help.textile ├── 2011-03-25-everything-express.textile ├── 2009-03-06-getting-started-with-iphone-development.textile ├── 2008-01-08-10-essential-ruby-gems.textile ├── 2006-09-06-macfriendly-terminal-cheat-sheet.textile ├── 2009-01-04-smsweb-apps-and-rapid-fluid-support.textile ├── 2010-01-21-dailyjs.textile ├── 2009-01-29-new-project-quite-useful.textile ├── 2006-11-23-easy-zip-compression-in-ruby.textile ├── 2012-04-02-use-vim.md ├── 2009-04-15-secure-trading-rails-plugin.textile ├── 2008-02-04-some-ruby-on-rails-plugin-stats.textile ├── 2009-04-10-beautiful-algorithms.textile ├── 2006-11-10-load-your-vimrc-with-helipad.textile ├── 2008-10-08-captor-a-capistrano-gui.textile ├── 2008-10-03-top-5-uses-for-capistrano.textile ├── 2009-04-02-open-map-technology.textile ├── 2006-07-02-backpack-automator-plugin.textile ├── 2009-04-21-deadline-for-mac-and-github-hooks.textile ├── 2010-10-25-wingman.textile ├── 2008-01-18-start-using-test-driven-development-today.textile ├── 2004-10-19-using-xslt-with-bad-html.textile ├── 2009-10-09-gemcutter.textile ├── 2010-04-27-boring.textile ├── 2006-01-24-knowing-javascript.textile ├── 2007-03-07-rails-quality-control-tip-use-verify-in-controllers.textile ├── 2009-11-12-iphone-tech-talks.textile ├── 2006-11-30-serversent-events-in-opera.textile ├── 2009-03-10-the-rosetta-stone-of-iphone-ui-development.textile ├── 2007-03-06-rails-speed-tip-link-tag-caching.textile ├── 2006-12-23-dashboard-widgets-are-great-with-prototype.textile ├── 2009-03-04-mini-app-tweetfu.textile ├── 2012-01-13-using-powerline-with-mac-os.md ├── 2005-12-21-javascript-function-to-help-with-accesskeys.textile ├── 2009-04-09-lets-make-a-game-snake.textile ├── 2012-04-23-zx-spectrum.md ├── 2006-02-28-what-you-absolutely-must-know-about-textmate.textile ├── 2006-04-21-rsi.textile ├── 2012-01-15-vim-keyboard.md ├── 2009-02-04-googles-a-glutton-for-it.textile ├── 2009-07-31-dystopian-index.textile ├── 2012-09-12-sponsored-content.md ├── 2005-12-15-google-home-module.textile ├── 2005-12-16-google-home-api-security.textile ├── 2009-08-20-happiness.textile ├── 2008-11-13-rails-doesnt-crash-a-lot-love-it-and-create-amazing-things.textile ├── 2005-11-29-singletable-inheritance-and-validates-as-unique.textile ├── 2010-04-06-jschat-ico-updates.textile ├── 2006-04-05-php-5s-anonymous-functions.textile ├── 2009-06-23-iphone-30-development-glitches.textile ├── 2005-12-10-scriptaculous-when-to-use-ajax-and-effects.textile ├── 2009-02-02-crossbrowser-testing-followup.textile ├── 2009-10-26-riot-testing.textile ├── 2008-11-08-deadline.textile ├── 2005-11-18-javascript-mini-bibliography.textile ├── 2012-03-20-the-key-to-android-domination.md └── 2006-05-31-using-apis-dont-forget-about-rss-and-atom-feeds.textile ├── cookies.jade ├── bin └── feed_images.sh ├── tags.jade ├── contact.jade ├── index.html ├── about.jade ├── _includes └── sidebar.jade └── _layouts ├── default.jade └── post.jade /.gitignore: -------------------------------------------------------------------------------- 1 | *.sw? 2 | .DS_Store 3 | _site/ 4 | node_modules/ 5 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/favicon.ico -------------------------------------------------------------------------------- /images/qu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/qu.png -------------------------------------------------------------------------------- /images/wm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/wm.png -------------------------------------------------------------------------------- /images/about.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/about.gif -------------------------------------------------------------------------------- /images/algol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/algol.png -------------------------------------------------------------------------------- /images/api.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/api.gif -------------------------------------------------------------------------------- /images/bcm_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/bcm_1.png -------------------------------------------------------------------------------- /images/cape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/cape.png -------------------------------------------------------------------------------- /images/cmdt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/cmdt.png -------------------------------------------------------------------------------- /images/digg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/digg.gif -------------------------------------------------------------------------------- /images/error.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/error.gif -------------------------------------------------------------------------------- /images/feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/feed.png -------------------------------------------------------------------------------- /images/home.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/home.gif -------------------------------------------------------------------------------- /images/mail.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/mail.gif -------------------------------------------------------------------------------- /images/mate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/mate.png -------------------------------------------------------------------------------- /images/pac.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/pac.gif -------------------------------------------------------------------------------- /images/pop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/pop.png -------------------------------------------------------------------------------- /images/print.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/print.gif -------------------------------------------------------------------------------- /images/pushr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/pushr.png -------------------------------------------------------------------------------- /images/rails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/rails.png -------------------------------------------------------------------------------- /images/rcov.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/rcov.png -------------------------------------------------------------------------------- /images/share.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/share.gif -------------------------------------------------------------------------------- /images/snake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/snake.png -------------------------------------------------------------------------------- /images/spark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/spark.png -------------------------------------------------------------------------------- /images/tag.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/tag.gif -------------------------------------------------------------------------------- /images/tgs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/tgs.jpg -------------------------------------------------------------------------------- /images/tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/tools.png -------------------------------------------------------------------------------- /images/vim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/vim.png -------------------------------------------------------------------------------- /images/vlad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/vlad.png -------------------------------------------------------------------------------- /files/vim/vim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/files/vim/vim.png -------------------------------------------------------------------------------- /images/Camping.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/Camping.gif -------------------------------------------------------------------------------- /images/amigac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/amigac.png -------------------------------------------------------------------------------- /images/antirsi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/antirsi.png -------------------------------------------------------------------------------- /images/big_box.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/big_box.gif -------------------------------------------------------------------------------- /images/biznik.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/biznik.png -------------------------------------------------------------------------------- /images/desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/desktop.png -------------------------------------------------------------------------------- /images/github.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/github.gif -------------------------------------------------------------------------------- /images/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/google.png -------------------------------------------------------------------------------- /images/helipad.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/helipad.gif -------------------------------------------------------------------------------- /images/macvim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/macvim.png -------------------------------------------------------------------------------- /images/massive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/massive.png -------------------------------------------------------------------------------- /images/mobile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/mobile.gif -------------------------------------------------------------------------------- /images/notice.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/notice.gif -------------------------------------------------------------------------------- /images/rdebug.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/rdebug.gif -------------------------------------------------------------------------------- /images/reddit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/reddit.png -------------------------------------------------------------------------------- /images/riotjs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/riotjs.png -------------------------------------------------------------------------------- /images/search.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/search.gif -------------------------------------------------------------------------------- /images/shadow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/shadow.gif -------------------------------------------------------------------------------- /images/shadow4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/shadow4.gif -------------------------------------------------------------------------------- /images/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/spinner.gif -------------------------------------------------------------------------------- /images/texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/texture.png -------------------------------------------------------------------------------- /images/theme1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/theme1.png -------------------------------------------------------------------------------- /images/theme2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/theme2.png -------------------------------------------------------------------------------- /images/theme3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/theme3.png -------------------------------------------------------------------------------- /images/theme4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/theme4.png -------------------------------------------------------------------------------- /images/theme5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/theme5.png -------------------------------------------------------------------------------- /images/theme6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/theme6.png -------------------------------------------------------------------------------- /images/theme7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/theme7.png -------------------------------------------------------------------------------- /images/tweetfu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/tweetfu.png -------------------------------------------------------------------------------- /images/twitter.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/twitter.gif -------------------------------------------------------------------------------- /images/ui_cat.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/ui_cat.gif -------------------------------------------------------------------------------- /images/uicat2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/uicat2.gif -------------------------------------------------------------------------------- /images/uicat3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/uicat3.gif -------------------------------------------------------------------------------- /images/vbrowse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/vbrowse.png -------------------------------------------------------------------------------- /images/verify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/verify.png -------------------------------------------------------------------------------- /images/vimtmux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/vimtmux.png -------------------------------------------------------------------------------- /images/wingman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/wingman.png -------------------------------------------------------------------------------- /images/yourapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/yourapp.png -------------------------------------------------------------------------------- /images/11promos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/11promos.png -------------------------------------------------------------------------------- /images/box_theme1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/box_theme1.png -------------------------------------------------------------------------------- /images/box_theme2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/box_theme2.png -------------------------------------------------------------------------------- /images/box_theme3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/box_theme3.png -------------------------------------------------------------------------------- /images/box_theme4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/box_theme4.png -------------------------------------------------------------------------------- /images/box_theme5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/box_theme5.png -------------------------------------------------------------------------------- /images/box_theme6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/box_theme6.png -------------------------------------------------------------------------------- /images/burn_baby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/burn_baby.png -------------------------------------------------------------------------------- /images/ctrlescape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/ctrlescape.png -------------------------------------------------------------------------------- /images/delicious.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/delicious.gif -------------------------------------------------------------------------------- /images/deployed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/deployed.png -------------------------------------------------------------------------------- /images/depwhack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/depwhack.png -------------------------------------------------------------------------------- /images/ebiwrite.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/ebiwrite.gif -------------------------------------------------------------------------------- /images/feed-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/feed-icon.png -------------------------------------------------------------------------------- /images/good_graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/good_graph.png -------------------------------------------------------------------------------- /images/gradient2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/gradient2.png -------------------------------------------------------------------------------- /images/happiness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/happiness.png -------------------------------------------------------------------------------- /images/highrise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/highrise.png -------------------------------------------------------------------------------- /images/hjkl_mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/hjkl_mac.png -------------------------------------------------------------------------------- /images/icons/cph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/icons/cph.png -------------------------------------------------------------------------------- /images/icons/loom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/icons/loom.png -------------------------------------------------------------------------------- /images/linkedin.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/linkedin.gif -------------------------------------------------------------------------------- /images/login-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/login-bg.gif -------------------------------------------------------------------------------- /images/mate-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/mate-thumb.png -------------------------------------------------------------------------------- /images/monkey_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/monkey_1.png -------------------------------------------------------------------------------- /images/monkey_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/monkey_2.png -------------------------------------------------------------------------------- /images/multitap1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/multitap1.png -------------------------------------------------------------------------------- /images/multitap2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/multitap2.png -------------------------------------------------------------------------------- /images/no_sphinx.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/no_sphinx.gif -------------------------------------------------------------------------------- /images/rcov_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/rcov_thumb.png -------------------------------------------------------------------------------- /images/rsyncdiff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/rsyncdiff.png -------------------------------------------------------------------------------- /images/screenshot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/screenshot.gif -------------------------------------------------------------------------------- /images/shadow_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/shadow_1.gif -------------------------------------------------------------------------------- /images/shadow_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/shadow_2.gif -------------------------------------------------------------------------------- /images/shadow_3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/shadow_3.gif -------------------------------------------------------------------------------- /images/shadow_4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/shadow_4.gif -------------------------------------------------------------------------------- /images/shadow_5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/shadow_5.gif -------------------------------------------------------------------------------- /images/shadow_6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/shadow_6.gif -------------------------------------------------------------------------------- /images/slider_end.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/slider_end.gif -------------------------------------------------------------------------------- /images/spectrum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/spectrum.png -------------------------------------------------------------------------------- /images/text-mate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/text-mate.png -------------------------------------------------------------------------------- /images/transmit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/transmit.png -------------------------------------------------------------------------------- /images/unix_plate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/unix_plate.png -------------------------------------------------------------------------------- /images/vim-better.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/vim-better.png -------------------------------------------------------------------------------- /images/work/loom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/loom.png -------------------------------------------------------------------------------- /images/android_case.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/android_case.png -------------------------------------------------------------------------------- /images/captcha/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/captcha/180.png -------------------------------------------------------------------------------- /images/captcha/6118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/captcha/6118.png -------------------------------------------------------------------------------- /images/captor_blog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/captor_blog.png -------------------------------------------------------------------------------- /images/changes_diff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/changes_diff.png -------------------------------------------------------------------------------- /images/changes_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/changes_list.png -------------------------------------------------------------------------------- /images/endtroducing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/endtroducing.png -------------------------------------------------------------------------------- /images/font_larger.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/font_larger.gif -------------------------------------------------------------------------------- /images/font_smaller.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/font_smaller.gif -------------------------------------------------------------------------------- /images/fowd2010/qix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/fowd2010/qix.png -------------------------------------------------------------------------------- /images/heligoitunes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/heligoitunes.png -------------------------------------------------------------------------------- /images/ig_delicious.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/ig_delicious.png -------------------------------------------------------------------------------- /images/instruments.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/instruments.png -------------------------------------------------------------------------------- /images/iphone-tech.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/iphone-tech.png -------------------------------------------------------------------------------- /images/not_sharing.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/not_sharing.gif -------------------------------------------------------------------------------- /images/print_small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/print_small.gif -------------------------------------------------------------------------------- /images/screenshot2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/screenshot2.gif -------------------------------------------------------------------------------- /images/shadow_grey.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/shadow_grey.gif -------------------------------------------------------------------------------- /images/share_small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/share_small.gif -------------------------------------------------------------------------------- /images/slider_track.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/slider_track.gif -------------------------------------------------------------------------------- /images/textile_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/textile_big.png -------------------------------------------------------------------------------- /images/tokyo-night.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/tokyo-night.jpg -------------------------------------------------------------------------------- /images/with_sphinx.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/with_sphinx.gif -------------------------------------------------------------------------------- /images/work/furnish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/furnish.png -------------------------------------------------------------------------------- /images/work/helipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/helipad.png -------------------------------------------------------------------------------- /images/work/tiktrac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/tiktrac.png -------------------------------------------------------------------------------- /images/yourappicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/yourappicon.png -------------------------------------------------------------------------------- /include/images/alex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/alex.png -------------------------------------------------------------------------------- /include/images/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/home.png -------------------------------------------------------------------------------- /include/images/mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/mail.png -------------------------------------------------------------------------------- /include/images/tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/tile.png -------------------------------------------------------------------------------- /files/UploadtoBackpack.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/files/UploadtoBackpack.zip -------------------------------------------------------------------------------- /images/automator_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/automator_menu.png -------------------------------------------------------------------------------- /images/automator_setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/automator_setup.png -------------------------------------------------------------------------------- /images/box_theme_base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/box_theme_base.png -------------------------------------------------------------------------------- /images/captcha/78452.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/captcha/78452.png -------------------------------------------------------------------------------- /images/colour_scheme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/colour_scheme.png -------------------------------------------------------------------------------- /images/dconstruct/mann.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/dconstruct/mann.png -------------------------------------------------------------------------------- /images/deadline-iphone.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/deadline-iphone.gif -------------------------------------------------------------------------------- /images/fowd2010/anna.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/fowd2010/anna.png -------------------------------------------------------------------------------- /images/fowd2010/elliot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/fowd2010/elliot.png -------------------------------------------------------------------------------- /images/fowd2010/sarah.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/fowd2010/sarah.png -------------------------------------------------------------------------------- /images/fowd2010/simon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/fowd2010/simon.png -------------------------------------------------------------------------------- /images/icons/deadline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/icons/deadline.png -------------------------------------------------------------------------------- /images/icons/ebiwrite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/icons/ebiwrite.png -------------------------------------------------------------------------------- /images/icons/helipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/icons/helipad.png -------------------------------------------------------------------------------- /images/icons/tiktrac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/icons/tiktrac.png -------------------------------------------------------------------------------- /images/idisk_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/idisk_overview.png -------------------------------------------------------------------------------- /images/iphone_nav_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/iphone_nav_bar.png -------------------------------------------------------------------------------- /images/sand_traveler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/sand_traveler.png -------------------------------------------------------------------------------- /images/securetrading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/securetrading.png -------------------------------------------------------------------------------- /images/slider_handle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/slider_handle.gif -------------------------------------------------------------------------------- /images/textile_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/textile_small.png -------------------------------------------------------------------------------- /images/textmate_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/textmate_list.png -------------------------------------------------------------------------------- /images/vim-powerline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/vim-powerline.png -------------------------------------------------------------------------------- /images/work/deadline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/deadline.png -------------------------------------------------------------------------------- /images/work/ebiwrite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/ebiwrite.png -------------------------------------------------------------------------------- /images/work/large/loom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/large/loom.png -------------------------------------------------------------------------------- /images/zxspectrum_48k.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/zxspectrum_48k.jpg -------------------------------------------------------------------------------- /include/files/iwap.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/files/iwap.tar.gz -------------------------------------------------------------------------------- /include/images/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/email.png -------------------------------------------------------------------------------- /include/images/glboxes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/glboxes.png -------------------------------------------------------------------------------- /include/images/iDisk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/iDisk.png -------------------------------------------------------------------------------- /include/images/shadow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/shadow.gif -------------------------------------------------------------------------------- /include/images/sound.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/sound.gif -------------------------------------------------------------------------------- /include/images/title.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/title.gif -------------------------------------------------------------------------------- /include/images/title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/title.png -------------------------------------------------------------------------------- /include/images/trash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/trash.jpg -------------------------------------------------------------------------------- /robots.txt: -------------------------------------------------------------------------------- 1 | # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file -------------------------------------------------------------------------------- /terminal_cheat_sheet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/terminal_cheat_sheet.pdf -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | deploy: 2 | @bin/feed_images.sh 3 | rsync -avz "_site/" web2.helicoid.net:/var/www/alexyoung.org/ 4 | 5 | -------------------------------------------------------------------------------- /images/ctrlescape-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/ctrlescape-thumb.png -------------------------------------------------------------------------------- /images/dconstruct/bridle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/dconstruct/bridle.png -------------------------------------------------------------------------------- /images/dconstruct/coates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/dconstruct/coates.png -------------------------------------------------------------------------------- /images/dconstruct/david.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/dconstruct/david.png -------------------------------------------------------------------------------- /images/dconstruct/dawes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/dconstruct/dawes.png -------------------------------------------------------------------------------- /images/dconstruct/death.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/dconstruct/death.png -------------------------------------------------------------------------------- /images/dconstruct/gruber.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/dconstruct/gruber.png -------------------------------------------------------------------------------- /images/dconstruct/hannah.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/dconstruct/hannah.png -------------------------------------------------------------------------------- /images/dconstruct/marty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/dconstruct/marty.png -------------------------------------------------------------------------------- /images/dconstruct/warren.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/dconstruct/warren.png -------------------------------------------------------------------------------- /images/deadline_mac_blog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/deadline_mac_blog.png -------------------------------------------------------------------------------- /images/fowd2010/strange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/fowd2010/strange.png -------------------------------------------------------------------------------- /images/instruments_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/instruments_small.png -------------------------------------------------------------------------------- /images/mac_modifier_keys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/mac_modifier_keys.png -------------------------------------------------------------------------------- /images/screenshot_thumb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/screenshot_thumb.gif -------------------------------------------------------------------------------- /images/screenshot_thumb2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/screenshot_thumb2.gif -------------------------------------------------------------------------------- /include/images/HappyMac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/HappyMac.png -------------------------------------------------------------------------------- /include/images/msn_wink.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/msn_wink.gif -------------------------------------------------------------------------------- /include/images/projects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/projects.png -------------------------------------------------------------------------------- /files/deploy/deploy_audit.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/files/deploy/deploy_audit.pdf -------------------------------------------------------------------------------- /files/deploy/deploy_audit.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/files/deploy/deploy_audit.zip -------------------------------------------------------------------------------- /images/crossbrowsertesting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/crossbrowsertesting.png -------------------------------------------------------------------------------- /images/everything_express.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/everything_express.png -------------------------------------------------------------------------------- /images/screenshots/editing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/screenshots/editing.jpg -------------------------------------------------------------------------------- /images/screenshots/editing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/screenshots/editing.png -------------------------------------------------------------------------------- /images/select_bundle_item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/select_bundle_item.png -------------------------------------------------------------------------------- /images/spinner_transparent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/spinner_transparent.gif -------------------------------------------------------------------------------- /images/tab_bar_controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/tab_bar_controller.png -------------------------------------------------------------------------------- /images/terminal_cheat_sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/terminal_cheat_sheet.png -------------------------------------------------------------------------------- /images/textmate_subversion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/textmate_subversion.png -------------------------------------------------------------------------------- /images/work/large/deadline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/large/deadline.png -------------------------------------------------------------------------------- /images/work/large/ebiwrite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/large/ebiwrite.png -------------------------------------------------------------------------------- /images/work/large/furnish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/large/furnish.png -------------------------------------------------------------------------------- /images/work/large/helipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/large/helipad.png -------------------------------------------------------------------------------- /images/work/large/tiktrac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/large/tiktrac.png -------------------------------------------------------------------------------- /images/work/logos/furnish.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/logos/furnish.gif -------------------------------------------------------------------------------- /include/files/webTunes.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/files/webTunes.tar.gz -------------------------------------------------------------------------------- /include/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/background.png -------------------------------------------------------------------------------- /include/images/background2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/background2.png -------------------------------------------------------------------------------- /include/images/journal/ffx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/ffx.jpg -------------------------------------------------------------------------------- /include/images/journal/fry.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/fry.jpg -------------------------------------------------------------------------------- /include/images/journal/ico.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/ico.jpg -------------------------------------------------------------------------------- /include/images/journal/pa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/pa.jpg -------------------------------------------------------------------------------- /include/images/journal/tori.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/tori.jpg -------------------------------------------------------------------------------- /include/images/shadowAlpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/shadowAlpha.png -------------------------------------------------------------------------------- /include/images/shadow_grey.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/shadow_grey.gif -------------------------------------------------------------------------------- /include/images/tiny_noise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/tiny_noise.png -------------------------------------------------------------------------------- /images/constants_are_changing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/constants_are_changing.png -------------------------------------------------------------------------------- /images/navigation_controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/navigation_controller.png -------------------------------------------------------------------------------- /images/screenshots/dashboard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/screenshots/dashboard.jpg -------------------------------------------------------------------------------- /images/screenshots/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/screenshots/dashboard.png -------------------------------------------------------------------------------- /images/session_encapsulation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/session_encapsulation.png -------------------------------------------------------------------------------- /images/silent-running-poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/silent-running-poster.png -------------------------------------------------------------------------------- /images/work/reutersrealestate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/reutersrealestate.png -------------------------------------------------------------------------------- /include/files/xmms-glboxes.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/files/xmms-glboxes.tar.gz -------------------------------------------------------------------------------- /include/images/journal/apple.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/apple.jpg -------------------------------------------------------------------------------- /include/images/journal/bebop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/bebop.jpg -------------------------------------------------------------------------------- /include/images/journal/meta1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/meta1.jpg -------------------------------------------------------------------------------- /include/images/journal/meta2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/meta2.jpg -------------------------------------------------------------------------------- /include/images/journal/meta3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/meta3.jpg -------------------------------------------------------------------------------- /include/images/journal/meta4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/meta4.jpg -------------------------------------------------------------------------------- /include/images/journal/meta5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/meta5.jpg -------------------------------------------------------------------------------- /include/images/journal/meta6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/meta6.jpg -------------------------------------------------------------------------------- /include/images/journal/meta7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/meta7.jpg -------------------------------------------------------------------------------- /include/images/journal/ntk-cf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/ntk-cf.jpg -------------------------------------------------------------------------------- /include/images/journal/stairs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/stairs.jpg -------------------------------------------------------------------------------- /include/images/journal/stamps.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/stamps.jpg -------------------------------------------------------------------------------- /include/images/macs/home_emac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/macs/home_emac.png -------------------------------------------------------------------------------- /images/screenshots/editing_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/screenshots/editing_thumb.jpg -------------------------------------------------------------------------------- /include/images/journal/cinematic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/cinematic.jpg -------------------------------------------------------------------------------- /include/images/journal/crimson.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/crimson.jpg -------------------------------------------------------------------------------- /include/images/journal/fatality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/fatality.jpg -------------------------------------------------------------------------------- /include/images/journal/morgaine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/morgaine.jpg -------------------------------------------------------------------------------- /include/images/journal/ntk-flyer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/ntk-flyer.jpg -------------------------------------------------------------------------------- /include/images/journal/ntk-tech.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/ntk-tech.jpg -------------------------------------------------------------------------------- /include/images/journal/pavillion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/pavillion.jpg -------------------------------------------------------------------------------- /include/images/journal/station.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/station.jpg -------------------------------------------------------------------------------- /include/images/macs/home_laptop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/macs/home_laptop.png -------------------------------------------------------------------------------- /include/images/macs/work_desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/macs/work_desktop.png -------------------------------------------------------------------------------- /include/images/macs/work_laptop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/macs/work_laptop.png -------------------------------------------------------------------------------- /images/screenshots/dashboard_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/screenshots/dashboard_thumb.jpg -------------------------------------------------------------------------------- /include/images/journal/lemon_jelly.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/lemon_jelly.jpg -------------------------------------------------------------------------------- /include/images/journal/ntk-arcade.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/ntk-arcade.jpg -------------------------------------------------------------------------------- /include/images/journal/ntk-flyer2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/ntk-flyer2.jpg -------------------------------------------------------------------------------- /include/images/journal/ntk-flyer3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/ntk-flyer3.jpg -------------------------------------------------------------------------------- /include/images/journal/picture(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/picture(2).jpg -------------------------------------------------------------------------------- /include/images/journal/southlondon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/southlondon.jpg -------------------------------------------------------------------------------- /images/work/large/reutersrealestate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/images/work/large/reutersrealestate.png -------------------------------------------------------------------------------- /include/images/journal/ntk-inventory.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/ntk-inventory.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/ffx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/ffx.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/fry.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/fry.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/ico.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/ico.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/pa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/pa.jpg -------------------------------------------------------------------------------- /include/images/noepatents_liberty120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/noepatents_liberty120.png -------------------------------------------------------------------------------- /old_index.jade: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Alex R. Young 4 | paginate: true 5 | --- 6 | 7 | !{paginatedPosts()} 8 | !{paginate} 9 | -------------------------------------------------------------------------------- /include/images/journal/thumbnails/apple.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/apple.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/bebop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/bebop.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/meta1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/meta1.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/meta2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/meta2.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/meta3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/meta3.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/meta4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/meta4.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/meta5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/meta5.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/meta6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/meta6.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/meta7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/meta7.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/tori.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/tori.jpg -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-go.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/javascripts/google-code-prettify/lang-go.js -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-ml.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/javascripts/google-code-prettify/lang-ml.js -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-vb.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/javascripts/google-code-prettify/lang-vb.js -------------------------------------------------------------------------------- /include/images/journal/02-08-03_17-07-00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/02-08-03_17-07-00.jpg -------------------------------------------------------------------------------- /include/images/journal/03-07-03_20-20-30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/03-07-03_20-20-30.jpg -------------------------------------------------------------------------------- /include/images/journal/05-10-03_13-37-09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/05-10-03_13-37-09.jpg -------------------------------------------------------------------------------- /include/images/journal/06-06-03_22-42-29.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/06-06-03_22-42-29.jpg -------------------------------------------------------------------------------- /include/images/journal/06-09-03_13-11-49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/06-09-03_13-11-49.jpg -------------------------------------------------------------------------------- /include/images/journal/06-09-03_14-40-49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/06-09-03_14-40-49.jpg -------------------------------------------------------------------------------- /include/images/journal/07-06-03_20-43-36-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/07-06-03_20-43-36-1.jpg -------------------------------------------------------------------------------- /include/images/journal/07-06-03_20-43-36.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/07-06-03_20-43-36.jpg -------------------------------------------------------------------------------- /include/images/journal/09-07-03_13-54-55.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/09-07-03_13-54-55.jpg -------------------------------------------------------------------------------- /include/images/journal/10-07-03_10-34-09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/10-07-03_10-34-09.jpg -------------------------------------------------------------------------------- /include/images/journal/11-06-03_12-19-46-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/11-06-03_12-19-46-1.jpg -------------------------------------------------------------------------------- /include/images/journal/11-06-03_12-19-46-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/11-06-03_12-19-46-2.jpg -------------------------------------------------------------------------------- /include/images/journal/11-06-03_12-19-46.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/11-06-03_12-19-46.jpg -------------------------------------------------------------------------------- /include/images/journal/11-07-03_18-26-22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/11-07-03_18-26-22.jpg -------------------------------------------------------------------------------- /include/images/journal/11-09-03_13-38-28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/11-09-03_13-38-28.jpg -------------------------------------------------------------------------------- /include/images/journal/11-09-03_20-38-19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/11-09-03_20-38-19.jpg -------------------------------------------------------------------------------- /include/images/journal/13-07-03_19-51-37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/13-07-03_19-51-37.jpg -------------------------------------------------------------------------------- /include/images/journal/13-10-03_17-12-20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/13-10-03_17-12-20.jpg -------------------------------------------------------------------------------- /include/images/journal/15-06-03_14-07-45.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/15-06-03_14-07-45.jpg -------------------------------------------------------------------------------- /include/images/journal/15-08-03_13-20-05-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/15-08-03_13-20-05-1.jpg -------------------------------------------------------------------------------- /include/images/journal/15-08-03_13-20-05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/15-08-03_13-20-05.jpg -------------------------------------------------------------------------------- /include/images/journal/15-12-03_08-41-06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/15-12-03_08-41-06.jpg -------------------------------------------------------------------------------- /include/images/journal/16-10-03_18-03-09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/16-10-03_18-03-09.jpg -------------------------------------------------------------------------------- /include/images/journal/16-10-03_18-37-52.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/16-10-03_18-37-52.jpg -------------------------------------------------------------------------------- /include/images/journal/16-12-03_08-05-30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/16-12-03_08-05-30.jpg -------------------------------------------------------------------------------- /include/images/journal/17-10-03_13-15-38.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/17-10-03_13-15-38.jpg -------------------------------------------------------------------------------- /include/images/journal/17-12-03_16-20-15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/17-12-03_16-20-15.jpg -------------------------------------------------------------------------------- /include/images/journal/19-07-03_11-37-45.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/19-07-03_11-37-45.jpg -------------------------------------------------------------------------------- /include/images/journal/19-12-03_00-27-24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/19-12-03_00-27-24.jpg -------------------------------------------------------------------------------- /include/images/journal/19-12-03_14-39-37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/19-12-03_14-39-37.jpg -------------------------------------------------------------------------------- /include/images/journal/20-12-03_20-48-59.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/20-12-03_20-48-59.jpg -------------------------------------------------------------------------------- /include/images/journal/22-12-03_08-11-10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/22-12-03_08-11-10.jpg -------------------------------------------------------------------------------- /include/images/journal/23-12-03_12-29-20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/23-12-03_12-29-20.jpg -------------------------------------------------------------------------------- /include/images/journal/24-08-03_12-34-19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/24-08-03_12-34-19.jpg -------------------------------------------------------------------------------- /include/images/journal/24-10-03_16-00-49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/24-10-03_16-00-49.jpg -------------------------------------------------------------------------------- /include/images/journal/27-06-03_20-44-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/27-06-03_20-44-01.jpg -------------------------------------------------------------------------------- /include/images/journal/27-07-03_16-40-41.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/27-07-03_16-40-41.jpg -------------------------------------------------------------------------------- /include/images/journal/27-12-03_21-26-54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/27-12-03_21-26-54.jpg -------------------------------------------------------------------------------- /include/images/journal/27-12-03_22-32-55.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/27-12-03_22-32-55.jpg -------------------------------------------------------------------------------- /include/images/journal/28-07-03_22-18-30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/28-07-03_22-18-30.jpg -------------------------------------------------------------------------------- /include/images/journal/28-11-03_16-14-20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/28-11-03_16-14-20.jpg -------------------------------------------------------------------------------- /include/images/journal/29-01-04_08-14-06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/29-01-04_08-14-06.jpg -------------------------------------------------------------------------------- /include/images/journal/29-12-03_10-44-31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/29-12-03_10-44-31.jpg -------------------------------------------------------------------------------- /include/images/journal/30-08-03_19-29-51.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/30-08-03_19-29-51.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/crimson.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/crimson.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/fatality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/fatality.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/morgaine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/morgaine.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/ntk-cf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/ntk-cf.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/ntk-tech.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/ntk-tech.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/stairs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/stairs.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/stamps.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/stamps.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/station.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/station.jpg -------------------------------------------------------------------------------- /include/images/macs/thumbnails/home_emac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/macs/thumbnails/home_emac.png -------------------------------------------------------------------------------- /include/images/macs/thumbnails/home_laptop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/macs/thumbnails/home_laptop.png -------------------------------------------------------------------------------- /include/images/macs/thumbnails/work_laptop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/macs/thumbnails/work_laptop.png -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-lua.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/javascripts/google-code-prettify/lang-lua.js -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-scala.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/javascripts/google-code-prettify/lang-scala.js -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-sql.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/javascripts/google-code-prettify/lang-sql.js -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-tex.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/javascripts/google-code-prettify/lang-tex.js -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-vhdl.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/javascripts/google-code-prettify/lang-vhdl.js -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-wiki.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/javascripts/google-code-prettify/lang-wiki.js -------------------------------------------------------------------------------- /include/images/journal/thumbnails/cinematic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/cinematic.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/ntk-arcade.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/ntk-arcade.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/ntk-flyer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/ntk-flyer.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/ntk-flyer2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/ntk-flyer2.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/ntk-flyer3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/ntk-flyer3.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/pavillion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/pavillion.jpg -------------------------------------------------------------------------------- /include/images/macs/thumbnails/work_desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/macs/thumbnails/work_desktop.png -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-apollo.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/javascripts/google-code-prettify/lang-apollo.js -------------------------------------------------------------------------------- /include/images/journal/thumbnails/lemon_jelly.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/lemon_jelly.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/ntk-inventory.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/ntk-inventory.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/southlondon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/southlondon.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Alex's Blog 2 | 3 | This blog is made with [Pop](http://popjs.com/) (GitHub: [alexyoung / pop](https://github.com/alexyoung/pop), License: _MIT_). 4 | 5 | -------------------------------------------------------------------------------- /include/images/journal/thumbnails/02-08-03_17-07-00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/02-08-03_17-07-00.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/03-07-03_20-20-30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/03-07-03_20-20-30.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/05-10-03_13-37-09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/05-10-03_13-37-09.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/06-06-03_22-42-29.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/06-06-03_22-42-29.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/06-09-03_13-11-49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/06-09-03_13-11-49.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/06-09-03_14-40-49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/06-09-03_14-40-49.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/07-06-03_20-43-36.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/07-06-03_20-43-36.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/09-07-03_13-54-55.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/09-07-03_13-54-55.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/10-07-03_10-34-09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/10-07-03_10-34-09.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/11-06-03_12-19-46.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/11-06-03_12-19-46.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/11-07-03_18-26-22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/11-07-03_18-26-22.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/11-09-03_13-38-28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/11-09-03_13-38-28.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/11-09-03_20-38-19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/11-09-03_20-38-19.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/13-07-03_19-51-37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/13-07-03_19-51-37.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/13-10-03_17-12-20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/13-10-03_17-12-20.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/15-06-03_14-07-45.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/15-06-03_14-07-45.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/15-08-03_13-20-05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/15-08-03_13-20-05.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/15-12-03_08-41-06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/15-12-03_08-41-06.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/16-10-03_18-03-09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/16-10-03_18-03-09.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/16-10-03_18-37-52.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/16-10-03_18-37-52.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/16-12-03_08-05-30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/16-12-03_08-05-30.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/17-10-03_13-15-38.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/17-10-03_13-15-38.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/17-12-03_16-20-15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/17-12-03_16-20-15.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/19-07-03_11-37-45.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/19-07-03_11-37-45.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/19-12-03_00-27-24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/19-12-03_00-27-24.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/19-12-03_14-39-37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/19-12-03_14-39-37.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/20-12-03_20-48-59.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/20-12-03_20-48-59.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/22-12-03_08-11-10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/22-12-03_08-11-10.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/23-12-03_12-29-20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/23-12-03_12-29-20.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/24-08-03_12-34-19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/24-08-03_12-34-19.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/24-10-03_16-00-49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/24-10-03_16-00-49.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/27-06-03_20-44-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/27-06-03_20-44-01.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/27-07-03_16-40-41.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/27-07-03_16-40-41.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/27-12-03_21-26-54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/27-12-03_21-26-54.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/27-12-03_22-32-55.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/27-12-03_22-32-55.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/28-07-03_22-18-30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/28-07-03_22-18-30.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/28-11-03_16-14-20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/28-11-03_16-14-20.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/29-01-04_08-14-06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/29-01-04_08-14-06.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/29-12-03_10-44-31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/29-12-03_10-44-31.jpg -------------------------------------------------------------------------------- /include/images/journal/thumbnails/30-08-03_19-29-51.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexyoung/alexyoung.org/master/include/images/journal/thumbnails/30-08-03_19-29-51.jpg -------------------------------------------------------------------------------- /stylesheets/home.styl: -------------------------------------------------------------------------------- 1 | article 2 | border-radius: 5px 3 | margin-bottom: 10px 4 | transition: background-color 600ms ease-in 5 | -webkit-transition: background-color 600ms linear 6 | -------------------------------------------------------------------------------- /_config.json: -------------------------------------------------------------------------------- 1 | { "url": "http://alexyoung.org" 2 | , "title": "Alex R. Young" 3 | , "permalink": "/:year/:month/:day/:title" 4 | , "perPage": 10 5 | , "exclude": ["\\.swp"] 6 | , "require": ["pop-disqus"] 7 | , "autoGenerate": [{"feed": "feed.xml", "rss": "feed.rss"}] } 8 | -------------------------------------------------------------------------------- /stylesheets/small.styl: -------------------------------------------------------------------------------- 1 | panel-border-colour = #b3b1ac 2 | 3 | nav.panel 4 | position: static 5 | float: left 6 | margin: 0 7 | border-bottom: 1px solid panel-border-colour 8 | 9 | #content 10 | width: 600px 11 | margin-left: 20px 12 | 13 | #container 14 | margin: 0 15 | -------------------------------------------------------------------------------- /javascripts/site.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | prettyPrint(); 3 | 4 | $('.tag-list a.tag').live('click', function(e) { 5 | e.preventDefault(); 6 | $(this).parents('h2').next('.posts').toggle(); 7 | }); 8 | 9 | if (window.location.hash) { 10 | $(window.location.hash).next('.posts').show(); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-proto.js: -------------------------------------------------------------------------------- 1 | PR.registerLangHandler(PR.sourceDecorator({keywords:"bytes,default,double,enum,extend,extensions,false,group,import,max,message,option,optional,package,repeated,required,returns,rpc,service,syntax,to,true",types:/^(bool|(double|s?fixed|[su]?int)(32|64)|float|string)\b/,cStyleComments:!0}),["proto"]); 2 | -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-yaml.js: -------------------------------------------------------------------------------- 1 | var a=null; 2 | PR.registerLangHandler(PR.createSimpleLexer([["pun",/^[:>?|]+/,a,":|>?"],["dec",/^%(?:YAML|TAG)[^\n\r#]+/,a,"%"],["typ",/^&\S+/,a,"&"],["typ",/^!\S*/,a,"!"],["str",/^"(?:[^"\\]|\\.)*(?:"|$)/,a,'"'],["str",/^'(?:[^']|'')*(?:'|$)/,a,"'"],["com",/^#[^\n\r]*/,a,"#"],["pln",/^\s+/,a," \t\r\n"]],[["dec",/^(?:---|\.\.\.)(?:[\n\r]|$)/],["pun",/^-/],["kwd",/^\w+:[\n\r ]/],["pln",/^\w+/]]),["yaml","yml"]); 3 | -------------------------------------------------------------------------------- /_posts/2009-03-11-hack-the-tube.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Hack the Tube" 4 | categories: 5 | - programming 6 | --- 7 | 8 | By Tube I mean the London Underground. I just finished writing this over at Quite Useful: "Hack the Tube":http://quiteuseful.co.uk/post/85487010/hack-the-tube 9 | 10 | The article features Ruby and JavaScript examples of using "Tube Updates":http://tubeupdates.com/ by "Ben Dodson":http://bendodson.com/ to get Tube status updates. 11 | -------------------------------------------------------------------------------- /_posts/2007-01-05-hpricot-google-search-snippet.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Hpricot Google Search Snippet" 4 | categories: 5 | - hpricot 6 | - ruby 7 | - programming 8 | - snippets 9 | --- 10 | 11 | With "hpricot":http://code.whytheluckystiff.net/hpricot/ you can do anything! 12 | 13 | {% highlight ruby %} 14 | puts ((Hpricot(open(URI.escape("http://www.google.com/search?q=#{term}"))))/"a.l").collect { |link| "#{link.innerHTML}: #{link.attributes['href']}" }.join("\n") 15 | {% endhighlight %} 16 | -------------------------------------------------------------------------------- /_posts/2008-06-27-rails-tutorial-part-1.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Rails Tutorial Part 1" 4 | categories: 5 | - writing 6 | - rails 7 | - ruby 8 | --- 9 | 10 | My Rails tutorial (part 1 of 4) has been published in "Linux Format 108":http://www.linuxformat.co.uk/modules.php?op=modload&name=NewArchives&issue=108. It shows you how to build a Rails-powered photo gallery, by using basic techniques and popular plugins. 11 | 12 | Grab it from your favourite newsagent and let me know what you think! 13 | -------------------------------------------------------------------------------- /cookies.jade: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | a#home(href="/") alexyoung.org 6 | 7 | .free 8 | h1 Cookies and Privacy 9 | 10 | p This website uses the following third-party services that create cookies during browsing:

11 | 12 | ul 13 | li 14 | a(href="http://carbonads.net/") Carbon Ads 15 | li 16 | a(href="http://disqus.com") Disqus 17 | 18 | h2 Disabling Cookies 19 | 20 | p 21 | If you do not wish to store cookies from this website, then change your browser's settings to block them. 22 | -------------------------------------------------------------------------------- /bin/feed_images.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cat _site/feed.xml | sed "s/img src='\/images\//img src='http:\/\/alexyoung.org\/images\//g" > _site/feed_1.xml 4 | cat _site/feed_1.xml | sed 's/img src="\/images\//img src="http:\/\/alexyoung.org\/images\//g' > _site/feed.xml 5 | rm _site/feed_1.xml 6 | 7 | cat _site/feed.xml | sed "s/img src='\/images\//img src='http:\/\/alexyoung.org\/images\//g" > _site/feed_1.xml 8 | cat _site/feed_1.xml | sed 's/img src="\/images\//img src="http:\/\/alexyoung.org\/images\//g' > _site/feed.xml 9 | rm _site/feed_1.xml 10 | -------------------------------------------------------------------------------- /_posts/2009-02-09-molopix.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "MoloPix" 4 | categories: 5 | - photography 6 | - iphone 7 | - apps 8 | --- 9 | 10 | "Alan Bradburne":http://alanbradburne.com/, a fellow Rails and iPhone developer who I've worked with, has released his first iPhone app: "MoloPix":http://molopix.com/. It takes multiple photos and combines them into one image, and has an integrated website so you can share them straight from the iPhone. 11 | 12 | I wrote a review for it on "Quite Useful":http://quiteuseful.co.uk/post/76738117/review-molopix. 13 | -------------------------------------------------------------------------------- /_posts/2008-09-25-building-a-singlesign-on-system-in-rails.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Building a Single-Sign-On System in Rails" 4 | categories: 5 | - rails 6 | - programming 7 | --- 8 | 9 | I've just finished writing an article about how I built a single-sign on server in Rails: 10 | 11 | "Building our centralised authentication system":http://blog.helicoid.net/2008/09/25/building-our-centralised-authentication-system 12 | 13 | It was actually an incredibly rewarding experience. I've written up design notes, rationale and provided tips on avoiding problems. 14 | -------------------------------------------------------------------------------- /tags.jade: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | h1 Tags 6 | 7 | p Click a tag to view the associated posts. 8 | 9 | .tag-list 10 | - var tags = allTags(); 11 | - if (tags && tags.length > 0) 12 | - for (var i = 0, tag = tags[0], posts = postsForTag(tag); i < tags.length; i++, tag = tags[i], posts = postsForTag(tag)) 13 | h2(id=tag) 14 | a.tag(href="#") (#{posts.length}) #{tag} 15 | .posts 16 | - for (var j = 0, post = posts[j]; j < posts.length; j++, post = posts[j]) 17 | p 18 | a(href="#{post.url}") #{post.title} 19 | -------------------------------------------------------------------------------- /_posts/2008-09-11-guerrilla-software-marketing-strategies.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Guerrilla Software Marketing Strategies" 4 | categories: 5 | - marketing 6 | --- 7 | 8 | "Guerrilla Software Marketing Strategies":http://biznik.com/articles/guerrilla-software-marketing-strategies is an article I wrote for "Biznik":http://biznik.com about our experiences marketing my web applications. It covers (proven!) free techniques for marketing your software. 9 | 10 | If you find this useful I'm thinking about following it up with an article about what *didn't* work for us. 11 | -------------------------------------------------------------------------------- /contact.jade: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: About 4 | --- 5 | 6 | a#home(href="/") alexyoung.org 7 | 8 | .free 9 | h1 Contact 10 | 11 |

Please wait while the contact form loads, or visit it directly.

12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-hs.js: -------------------------------------------------------------------------------- 1 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t-\r ]+/,null,"\t\n \r "],["str",/^"(?:[^\n\f\r"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["str",/^'(?:[^\n\f\r'\\]|\\[^&])'?/,null,"'"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)/i,null,"0123456789"]],[["com",/^(?:--+[^\n\f\r]*|{-(?:[^-]|-+[^}-])*-})/],["kwd",/^(?:case|class|data|default|deriving|do|else|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|then|type|where|_)(?=[^\d'A-Za-z]|$)/, 2 | null],["pln",/^(?:[A-Z][\w']*\.)*[A-Za-z][\w']*/],["pun",/^[^\d\t-\r "'A-Za-z]+/]]),["hs"]); 3 | -------------------------------------------------------------------------------- /_posts/2008-09-08-analytics-with-capistrano.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Analytics with Capistrano" 4 | categories: 5 | - capistrano 6 | - programming 7 | - ruby 8 | --- 9 | 10 | I just posted this article to my company's blog: "Analytics with Capistrano":http://blog.helicoid.net/2008/09/08/analytics-with-capistrano 11 | 12 | bq. If you want realtime stats on your web site, why not try using Capistrano to collect data and create graphs and tables? It's pretty easy to do this, and the beauty is you don't need to make any modifications to your application. 13 | 14 | 15 | -------------------------------------------------------------------------------- /_posts/2004-08-02-internationalisation-with-xslt.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Internationalisation with XSLT" 4 | categories: 5 | - xslt 6 | - php 7 | - internationalisation 8 | --- 9 | 10 | I've found two approaches to this: 11 | 12 | * "Re: internationalization / localization of XSLT output":http://sources.redhat.com/ml/xsl-list/2000-08/msg01318.html 13 | * "An XSLT style sheet and an XML dictionary approach to internationalization":http://www-106.ibm.com/developerworks/library/wa-xslt/ 14 | 15 | I think the second method looks like the best. I like the idea of using a general XSLT template to add in generic functionality too. 16 | -------------------------------------------------------------------------------- /_posts/2008-09-22-dynamic-rails-error-help.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Dynamic Rails Error Help" 4 | categories: 5 | - rails 6 | - javascript 7 | - programming 8 | --- 9 | 10 | "!http://farm4.static.flickr.com/3121/2877961211_045d355329_o.png!":http://www.flickr.com/photos/helicoid/2877961211/ 11 | 12 | Here's a JavaScript snippet intended for Rails that I just posted over on my company's technical blog. It displays the error message for each field when you click on the field, making it easier to see exactly what went wrong when saving a record. 13 | 14 | Read it here: "Dynamic Rails error help":http://blog.helicoid.net/2008/09/22/dynamic-rails-error-help 15 | -------------------------------------------------------------------------------- /_posts/2011-03-25-everything-express.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Everything Express" 4 | categories: 5 | - talks 6 | - events 7 | --- 8 | 9 | !/images/everything_express.png! 10 | 11 | I did a talk entitled "Everything Express":http://asyncjs.com/express/ at the "Async JavaScript meetup":http://asyncjs.com/ in Brighton. I covered almost everything required to get a real "Express":http://expressjs.com/ web app off the ground and deployed. 12 | 13 | The slides can be downloaded from "bit.ly/everythingexpress":http://bit.ly/everythingexpress. 14 | 15 | The meetup itself has a great bunch of people and is held in a perfect location. If you're a budding JavaScript hacker I recommend it. 16 | 17 | -------------------------------------------------------------------------------- /_posts/2009-03-06-getting-started-with-iphone-development.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Getting Started with iPhone Development" 4 | categories: 5 | - iphone 6 | - programming 7 | --- 8 | 9 | !/images/tools.png! 10 | 11 | I just published "Getting Started with iPhone Development":http://quiteuseful.co.uk/post/84047428/getting-started-with-iphone-development over at "Quite Useful":http://quiteuseful.co.uk. It covers the basics and should help you decide if you really want to take the plunge: 12 | 13 | * Decide if iPhone development is right for you 14 | * Understand what skills are required 15 | * Learn about what Apple requires from you and how apps are deployed to phones for testing and the iTunes Store 16 | -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-lisp.js: -------------------------------------------------------------------------------- 1 | var a=null; 2 | PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,a,"("],["clo",/^\)+/,a,")"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \xa0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,a], 3 | ["lit",/^[+-]?(?:[#0]x[\da-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[de][+-]?\d+)?)/i],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[_a-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/i],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["cl","el","lisp","scm"]); 4 | -------------------------------------------------------------------------------- /_posts/2008-01-08-10-essential-ruby-gems.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "10 Essential Ruby Gems" 4 | categories: 5 | - programming 6 | - ruby 7 | - gems 8 | --- 9 | 10 | Despite leaving it for a while, I'm going to continue my previous article, "A taxonomy of Rails plugins", relatively soon. I've been inspired by the excellent plugins by "errfree":http://errfree.com/ and come up with a few ideas of my own during the heavy workload of 2007. In particular, I'd like to clarify testing Rails plugins. But more of that in the near future. 11 | 12 | For now, have a look at "10 essential ruby gems":http://blog.helicoid.net/2008/01/08/10-essential-ruby-gems/. It's hosted on my company's new blog, where you'll eventually find more articles by me with a greater emphasis on web design. 13 | -------------------------------------------------------------------------------- /_posts/2006-09-06-macfriendly-terminal-cheat-sheet.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Mac-friendly Terminal Cheat Sheet" 4 | categories: 5 | - mac 6 | - cheatsheets 7 | - terminal 8 | - console 9 | --- 10 | 11 | One of my colleagues wanted help with his mac's terminal, so I put together a little cheat sheet containing all the commands and keyboard shortcuts I find essential. I marked the most awesome time-saving commands with stars, and even added a few emergency help tips: 12 | 13 | Mac-friendly terminal cheat sheet 14 | 15 | It's all basic stuff, but if you're new to using the command line (and when I say command line I really mean bash), this should help you kick some ass. 16 | -------------------------------------------------------------------------------- /_posts/2009-01-04-smsweb-apps-and-rapid-fluid-support.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "SMS/Web Apps and Rapid Fluid Support" 4 | categories: 5 | - sms 6 | - fluid 7 | - ssb 8 | --- 9 | 10 | I recently wrote two articles over on my company's blog. The first is about supporting the JavaScript API for "Fluid":http://fluidapp.com in your web app: "Rapid Fluid support":http://blog.helicoid.net/2008/12/26/rapid-fluid-support. The other is on "sending SMS from web apps":http://blog.helicoid.net/2009/01/03/tips-on-sending-sms-from-web-applications. Both of these articles draw from my recent technical challenges at "Helicoid":http://helicoid.net. 11 | 12 | I recently added Fluid and SMS support to "Deadline":http://deadlineapp.com/, into which I've poured most of my recent creative energy. 13 | -------------------------------------------------------------------------------- /_posts/2010-01-21-dailyjs.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "DailyJS" 4 | categories: 5 | - javascript 6 | - programming 7 | --- 8 | 9 | Back in November I started a new JavaScript programming blog called "DailyJS":http://dailyjs.com, with help from "Ric Roberts":http://ricroberts.com/ and "Justin Knowlden":http://gusg.us/. I post almost every day about interesting developments in JavaScript -- techniques, tips and library/tool reviews. 10 | 11 | I recently toiled over a lengthy review of "JavaScript Performance Rocks!":http://dailyjs.com/2010/01/19/javascript-performance-rocks/ by Amy Hoy and Thomas Fuchs -- a book that has taught me a lot despite my years of JavaScript experience. 12 | 13 | DailyJS has quickly gained popularity (unlike every other blog I've ever started), so if you're serious about JavaScript check it out! 14 | -------------------------------------------------------------------------------- /_posts/2009-01-29-new-project-quite-useful.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "New Project: Quite Useful" 4 | categories: 5 | - writing 6 | - blogs 7 | --- 8 | 9 | !/images/qu.png! 10 | 11 | I've started a new project called "Quite Useful":http://quiteuseful.co.uk. The inspiration is "Quite Interesting":http://www.qi.com/ with a twist on productivity. Currently Quite Useful takes the form of a blog, twitter and delicious account. 12 | 13 | I've been posting useful everyday tips and software applications with a group of friends from London. We intend to keep things relevant to UK readers, but international content is of course welcome. One area we'd like to focus on is reviewing and promoting UK-based tech startups. 14 | 15 | If you'd like to take part (by writing) or get your app featured on Quite Useful, "contact me":http://alexyoung.org/contact 16 | -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-css.js: -------------------------------------------------------------------------------- 1 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", 2 | /^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); 3 | -------------------------------------------------------------------------------- /_posts/2006-11-23-easy-zip-compression-in-ruby.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Easy Zip Compression in Ruby" 4 | categories: 5 | - ruby 6 | - programming 7 | --- 8 | 9 | I needed a quick way of exporting data as zlib from a controller in Rails, so I came up with this: 10 | 11 | {% highlight ruby %} 12 | def export 13 | send_data compress_string(Document.find_all.to_xml), :filename => 'backup.xml.gz' 14 | end 15 | 16 | def compress_string(data) 17 | gz = Zlib::GzipWriter.new(StringIO.new('')) 18 | gz.write data 19 | gz.close.string 20 | rescue 21 | gz.close 22 | raise 23 | end 24 | {% endhighlight %} 25 | 26 | Another way would be to use tempfiles with Tempfile -- I wanted to benchmark and profile using files compared to StringIO, but that'll be an exercise for another day. 27 | 28 | This could also work nicely with Minitar. 29 | -------------------------------------------------------------------------------- /_posts/2012-04-02-use-vim.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "usevim: For hjkl Wizards" 3 | layout: post 4 | tags: 5 | - blogs 6 | --- 7 | 8 | [Usevim](http://usevim.com/) is my new blog all about Vim. You can follow it on the usual social networks: 9 | 10 | * Twitter: [@vimnews](http://twitter.com/#!/vimnews) 11 | * Facebook: [vimnews](https://www.facebook.com/vimnews) 12 | * Google+: [usevim](https://plus.google.com/102329700005777172238) 13 | * Feed: [usevim](http://feeds.feedburner.com/usevim) 14 | 15 | I've been collecting interesting Vim-related links for years, and I've wanted to launch a Vim blog for a long time. 16 | 17 | The format is similar to [DailyJS](http://dailyjs.com/) -- weekly plugin roundups and lots of original content. I'm currently publishing every Monday, Wednesday, and Friday. 18 | 19 | If you've got Vim plugins or tips to share, or would like to write a guest post, [get in touch](http://usevim.com/contact.html). 20 | -------------------------------------------------------------------------------- /_posts/2009-04-15-secure-trading-rails-plugin.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Secure Trading Rails Plugin" 4 | categories: 5 | - programming 6 | - money 7 | --- 8 | 9 | !/images/securetrading.png! 10 | 11 | I use "Secure Trading":http://www.securetrading.com/ for "Helicoid's":http://helicoid.net payment processing. I wrote a payment processor plugin for our apps about two years ago, and it's been in production since then. A few people have asked me to open source the code, so here it is: "securetrading-rails":http://github.com/alexyoung/securetrading-rails/tree/master. 12 | 13 | I'd like to integrate it with "ActiveMerchant":http://www.activemerchant.org/ because I like their API, but I haven't had time so far. 14 | 15 | Out of all the payment processing companies I've dealt with, which is a lot, Secure Trading have been the most reliable with the best customer service. Their XML API is relatively straightforward too. 16 | -------------------------------------------------------------------------------- /_posts/2008-02-04-some-ruby-on-rails-plugin-stats.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Some Ruby on Rails Plugin Stats" 4 | categories: 5 | - ruby 6 | - rails 7 | - programming 8 | - plugins 9 | --- 10 | 11 | There are now almost 1000 entries in the main resource for Ruby on Rails plugins, "Agile Web Development's Plugins Directory":http://agilewebdevelopment.com/plugins. Of these, 596 have repositories listed that are accessible. I wanted to see how many of these plugins came with some form of tests, so I created a spider (using a "web spider library":http://rubyforge.org/projects/spider/) and performed some basic analysis on each repository. 12 | 13 | After reading a few magazines, and watching two entire TV shows, the spider came back with a result: *54% of the plugins have tests*. 14 | 15 | It's amazing to think that there's almost 1000 plugins in one directory, and a good proportion have tests amongst those I could easily analyse. 16 | -------------------------------------------------------------------------------- /_posts/2009-04-10-beautiful-algorithms.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Beautiful Algorithms" 4 | categories: 5 | - programming 6 | - ruby 7 | --- 8 | 9 | I'm starting a new series on Quite Useful called "beautiful algorithms":http://quiteuseful.co.uk/post/94808348/beautiful-algorithms. I'm going to talk about the algorithms behind graphical effects, especially those from the demo scene back in the 90s. 10 | 11 | !/images/burn_baby.png! 12 | 13 | I've posted some examples to my GitHub account if you want to check out what I've been researching so far. They use "Ruby Processing":http://wiki.github.com/jashkenas/ruby-processing/, which is a pretty accessible way to try out ideas. 14 | 15 | * "Fire effect":http://github.com/alexyoung/fire-p5r/tree/master 16 | * "Tunnel effect":http://github.com/alexyoung/tunnel-p5r/tree/master 17 | 18 | Please contribute improvements to these and I'll include them. Imagine what the demo scene would have been like if people shared code on GitHub! 19 | -------------------------------------------------------------------------------- /_posts/2006-11-10-load-your-vimrc-with-helipad.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Load Your .vimrc with Helipad" 4 | categories: 5 | - helipad 6 | - vim 7 | --- 8 | 9 | Helipad is a little web notepad I wrote to throw to-do lists, notes, ideas and bits of code at. My idea was to make the perfect partner for my actual physical notepad. 10 | 11 | Like everything I do, it has an API, and that allowed me to do something that I've found amazingly useful: load my vimrc remotely. 12 | 13 | I know there's a million other ways to do this, but I think it illustrates something unexpected and interesting that you can do with web application APIs. And, on the same topic, the AmbientClock uses your Google Calendar to change its colour according to how busy you are. 14 | 15 | I'd love to hear about anyone else using web APIs for fun stuff. Just drop me a line! 16 | -------------------------------------------------------------------------------- /_posts/2008-10-08-captor-a-capistrano-gui.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Captor: A Capistrano GUI" 4 | categories: 5 | - capistrano 6 | - ruby 7 | - programming 8 | --- 9 | 10 | !/images/captor_blog.png! 11 | 12 | Here's an idea I've been playing with today: "Captor":http://github.com/alexyoung/captor/wikis, a GUI for Capistrano management. It's a very rough prototype right now. 13 | 14 | Goals: 15 | 16 | * Make running tasks across multiple projects easier 17 | * Interpret the output from Capistrano graphically so it's easier to understand 18 | * Secondary: Provide a wizard-like interface for creating Capistrano files, with recipe management and configuration 19 | 20 | Caveats: 21 | 22 | * The prototype is messy because I can't get Shoes to load net/ssh (I get openssl errors), so I'm using drb to communicate with cap 23 | * There's no project settings management yet, but that will be easy to add 24 | * The interface isn't cool enough yet 25 | 26 | "Read my notes on the project":http://pad.helicoid.net/document/public/f5181afb 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /_posts/2008-10-03-top-5-uses-for-capistrano.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Top 5 uses for Capistrano" 4 | categories: 5 | - capistrano 6 | - rails 7 | - programming 8 | - sysadmin 9 | --- 10 | 11 | I recently posted my "top 5 uses for Capistrano":http://blog.helicoid.net/2008/10/02/top-5-uses-for-capistrano over at "Helicoid's Blog":http://insider.helicoid.net -- including juicy code snippets! 12 | 13 | I like "Capistrano":http://capify.org/ a lot. It's now doing all kinds of things to ease my workflow, from backing up servers to providing me with detailed signup statistics for each of my web apps. Whilst I'm still the only developer designing and building 4 successful web apps I need all the help I can get, so I've naturally cobbled together a range of software techniques to help. At least, until I can find an army of robots to do the work for me. 14 | 15 | Seriously, as soon as we hit enough subscribers to take on another developer I'll be straight out in London hunting down the finest Ruby developers, with bribes in the form of shares and beers. 16 | -------------------------------------------------------------------------------- /_posts/2009-04-02-open-map-technology.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Open Map Technology" 4 | categories: 5 | - maps 6 | - geolocation 7 | - geocoding 8 | --- 9 | 10 | I've been doing a lot of work with maps lately. Mainly Google Maps. Apparently, Google's ToS isn't as straightforward as I thought, and certain very reasonable situations render usage outside Google's terms. 11 | 12 | I'm not saying I don't like Google Maps though, I've come back to it many times for dozens of projects over the years; it's indispensable. However, there are open alternatives. I researched the open alternatives for a series of "Quite Useful":http://quiteuseful.co.uk posts (my other blog): 13 | 14 | * "Open Map Technology":http://quiteuseful.co.uk/post/91193356/open-map-technology 15 | * "Introduction to OpenStreetMap":http://quiteuseful.co.uk/post/91537132/introduction-to-building-apps-with-openstreetmap 16 | * "Introduction to OpenLayers":http://quiteuseful.co.uk/post/91861336/introduction-to-openlayers 17 | 18 | It's incredible to see what people are with open source technology in this area. 19 | -------------------------------------------------------------------------------- /_posts/2006-07-02-backpack-automator-plugin.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Backpack Automator Plugin" 4 | categories: 5 | - backpack 6 | - automator 7 | --- 8 | 9 | I have a public Backpack page where I upload images to show people. So say I'm chatting to online, I can just cmd-click a file and upload it then paste them a URL to the image. To make this quicker, I created an Automator workflow. 10 | 11 | When I want to share an image, I cmd-click it and select Upload to Backpack: 12 | 13 | Automator Finder menu 14 | 15 | The resulting URL is then added to the clipboard so I can easily paste it. 16 | 17 | If you want to be able to do this, download this workflow: Upload to Backpack 18 | 19 | Then configure it with your account's URL, the page ID where your images are going to go (you can see this in the page's URL), and your username and password: 20 | 21 | Automator setup 22 | 23 | Just "Save As Plugin" once you've set it up. 24 | -------------------------------------------------------------------------------- /_posts/2009-04-21-deadline-for-mac-and-github-hooks.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Deadline for Mac (and GitHub Hooks)" 4 | categories: 5 | - programming 6 | - deadline 7 | --- 8 | 9 | !/images/deadline_mac_blog.png! 10 | 11 | "Deadline":http://deadlineapp.com is a reminder web app I made. It sends out alerts through SMS, email and IM, and now it works with Mac OS too. I spent this weekend building a Mac cocoa app for it that integrates with Growl. You can download it here: "DeadlineGrowl":http://dl.getdropbox.com/u/221414/deadline/DeadlineGrowl.zip 12 | 13 | Deadline also works with GitHub: "Deadline: Notification API and GitHub support":http://blog.helicoid.net/articles/2009/04/18/deadline_notification_api_and_github_support. It uses post-receive hooks to grab commit messages and notify you through your preferred notification method. 14 | 15 | I really like the idea of hook URLs. Deadline has a generic notification API (it's just a GET to a URL) you could use to notify your users about events in your apps. If you're interested in using this, or using Deadline's API for a project, let me know and I'll give you a hand. 16 | -------------------------------------------------------------------------------- /_posts/2010-10-25-wingman.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Wingman: Open Source To-Do List App" 4 | categories: 5 | - programming 6 | - projects 7 | - rails 8 | --- 9 | 10 | !/images/wingman.png! 11 | 12 | I'm a big fan of a certain popular to-do list app for Mac OS. But I've stopped using it because I've made an open source replacement called "Wingman":http://github.com/alexyoung/wingman/. You can download it and install it on your computer or server. Alternatively, try it out on "wingman.heroku.com":http://wingman.heroku.com/. I can't promise you won't lose data on the Heroku instance, so treat it as a demo version. 13 | 14 | It's built with OpenID, Rails 3, MongoDB, and jQuery UI. The interface closely follows the Mac app that I've clearly been inspired by, but has Gmail-style keyboard shortcuts. 15 | 16 | I started working on it about 2 months ago. I built the basic version completely in JavaScript while drinking too much over a rainy weekend. It still only really has one page, and saves everything through a Rails app's JSON API. 17 | 18 | It's not finished yet, and there are a lot of glitches, but feel free to fork it and submit patches if you like it enough. 19 | 20 | -------------------------------------------------------------------------------- /_posts/2008-01-18-start-using-test-driven-development-today.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Start Using Test Driven Development Today" 4 | categories: 5 | - programming 6 | - testing 7 | --- 8 | 9 | "Start using Test Driven Development today":http://blog.helicoid.net/2008/01/18/protip-start-using-test-driven-development-today is a post I wrote over on my company's blog. It covers how TDD has improved my work since I started "Helicoid Limited":http://helicoid.net, and how you can start using TDD right now. 10 | 11 | # Learn how to write basic tests in your chosen language – don’t worry about fully learning the test framework, start by copying examples 12 | # When adding a new feature, start by creating tests first. Write code to satisfy these tests 13 | # Refactor old code to work well with automated tests 14 | # Write test data carefully and patiently, using this as a design technique for exploring the quality of your data modelling 15 | # Find a mocking library so you can write encapsulated tests that don’t require external resources 16 | # Find a tool for producing coverage reports in your chosen language 17 | # Investigate automated testing triggered when deploying/releasing code 18 | 19 | -------------------------------------------------------------------------------- /_posts/2004-10-19-using-xslt-with-bad-html.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Using XSLT with Bad HTML" 4 | categories: 5 | - php 6 | - xslt 7 | - programming 8 | --- 9 | 10 | We have a PHP CMS with a lot of poorly written HTML in the client-contributed content. This kept causing my XSL template system to output XML errors. I got around this problem by: 11 | 12 | # wrapping content in CDATA tags 13 | # Checking if the content is valid XML with xml_parse() in PHP, if not I add a CDATA tag and try again. 14 | # Strip out bad characters that may have crept in from Word 15 | # Process the XSL and XML using xsl:value-of tags with disable-output-escaping="yes" 16 | 17 | Using CDATA tags around unpredictable HTML helps prevent problems with the XML parser. Without the final step, the resulting HTML contains the original HTML with HTML entities. 18 | 19 | In PHP, mb_convert_encoding($string, 'ASCII') has proven very useful for handling text users paste from applications like Word. PHP has to be compiled with --enable-mbstring for this function to work. It prevents strings with different encodings encodings to your XSL from confusing the XML parser (where the encoding is defined). 20 | -------------------------------------------------------------------------------- /_posts/2009-10-09-gemcutter.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Gemcutter" 4 | categories: 5 | - ruby 6 | - gems 7 | - gemcutter 8 | --- 9 | 10 | I've put all my gems on "gemcutter":http://gemcutter.org/. They were on "GitHub":http://github.com but seeing as "GitHub has dropped building gems":http://github.com/blog/515-gem-building-is-defunct I thought it'd be useful to move them. 11 | 12 | h3. Using gemcutter 13 | 14 | The site makes it look easy, because it is: 15 | 16 | {% highlight sh %} 17 | gem install gemcutter 18 | gem tumble 19 | {% endhighlight %} 20 | 21 | Now you'll be able to install gems from gemcutter. 22 | 23 | h3. Publishing your own gems 24 | 25 | This is easy too. Write a gemspec file and then build a gem, and push it to gemcutter: 26 | 27 | {% highlight sh %} 28 | gem build yourgem.gemspec 29 | gem push yourgem.gem 30 | {% endhighlight %} 31 | 32 | *Note*: It might take a few minutes before the gem is available from gemcutter. 33 | 34 | h3. Automation 35 | 36 | "Jeweler":http://github.com/technicalpickles/jeweler can be used to automate this process -- it can use your git and GitHub settings to automatically generate a new project (including GitHub hosting, test directories/helpers). 37 | 38 | -------------------------------------------------------------------------------- /_posts/2010-04-27-boring.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "My Desktop is Boring" 4 | categories: 5 | - work 6 | - productivity 7 | --- 8 | 9 | !/images/desktop.png! 10 | 11 | I revealed desktop earlier and was surprised to find a utilitarian utopia: 12 | 13 | * There are no icons on the desktop 14 | * The background image is simply grey 15 | * There's no Dock 16 | 17 | Concerned that obsessive-compulsive minimalism had kicked in, I tried to figure out why my office computer had ended up like this. 18 | 19 | Certain projects of mine benefit from IM, but I can't work productively with Adium or Skype's icon blinking intermittently. Rather than quit and load all the time, I hid the Dock. 20 | 21 | I take a lot of screenshots of my products, and I also make videos to demo work to clients, which resulted in the grey desktop. Accidentally capturing the content of my desktop background got annoying. 22 | 23 | I don't really work with many documents, and scrappy bits that I need to share get dragged to "Dropbox":https://www.dropbox.com/ rather than the desktop. 24 | 25 | "DateLine":http://www.machinecodex.com/dateline/ sits at the bottom of the screen so I can quickly work out appointments without needing to open iCal. 26 | 27 | -------------------------------------------------------------------------------- /_posts/2006-01-24-knowing-javascript.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Knowing JavaScript" 4 | categories: 5 | - programming 6 | - javascript 7 | - lies 8 | --- 9 | 10 | At my company, we've been interviewing people for a web developer position, with particular emphasis on programming. Something I've noticed is a lot of developers say: "I know JavaScript." So a simple question I devised for testing this was, "how would you debug JavaScript?" You'd be surprised how many people don't know the answer to this. 11 | 12 | So, if you're a php/perl/python/ruby/asp/etc programmer who "knows" JavaScript, here's a few tools to help with debugging. These are Firefox extensions. 13 | 14 | * View Rendered Source Chart - I can't live without this, it allows you to view the html that gets generated by your JavaScript 15 | * Hypertext DOM Browser 16 | * Venkman - Usually used when all else fails 17 | * FireBug - This one is new, I haven't used it much yet 18 | 19 | -------------------------------------------------------------------------------- /_posts/2007-03-07-rails-quality-control-tip-use-verify-in-controllers.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Rails Quality Control Tip: Use Verify in Controllers" 4 | categories: 5 | - ruby 6 | - rails 7 | - tips 8 | - programming 9 | --- 10 | 11 | Verify used in my code 12 | 13 | Have you found that any of your Rails projects get hits to controller methods that expect parameters? A neat way of handling this is the ActionController::Verification module. 14 | 15 | By adding calls to verify in your controller, you can elegantly catch all kinds of unexpected but reasonable uses of your system: from mistyped URLs and browser history auto-complete to web crawlers blindly following links. This way, you can redirect people somewhere logical instead of flashing them with an error message. 16 | 17 | You can even insert a message into the flash: 18 | 19 | {% highlight ruby %} 20 | verify :params => "user", 21 | :only => :update_password, 22 | :add_flash => { "alert" => "Updating your password was not possible without the required information" }, 23 | :redirect_to => :config_url 24 | {% endhighlight %} 25 | -------------------------------------------------------------------------------- /_posts/2009-11-12-iphone-tech-talks.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "iPhone Tech Talks: A Great Success" 4 | categories: 5 | - koolaid 6 | - programming 7 | - iphone 8 | --- 9 | 10 | !/images/iphone-tech.png! 11 | 12 | I was at the London iPhone Tech Talks yesterday. It was a free event put on by Apple with talks by Apple's engineers. More importantly, it was at a "great venue":http://www.congresscentre.co.uk/ with free food and drink all day, and free beer and wine afterwards. Also, the wifi worked! 13 | 14 | I have two of my own apps on the store right now, with a freelance project about to appear as well. One app in particular is giving me some grief -- I'm using Apple's push API to send out reminders, but it's not being 100% reliable. Fortunately there was a talk about push, and I was able to talk to the speaker afterwards about my issues -- by following his advice I've already fixed my app. 15 | 16 | There was also a good talk on iPhone fundamentals which included some coverage of NSOperation. I've been looking for a simple way of backgrounding API requests in my apps, so this talk helped a lot. 17 | 18 | Despite the talks being pretty basic I've been working with the iPhone API since the start, and Cocoa for longer, and I learned a lot. Getting advice on how to fix real apps from Apple engineers was hugely useful for me. 19 | -------------------------------------------------------------------------------- /_posts/2006-11-30-serversent-events-in-opera.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Server-Sent Events in Opera" 4 | categories: 5 | - browsers 6 | - standards 7 | - ajax 8 | - javascript 9 | --- 10 | 11 | Apparently, Opera 9 supports Server-Sent Events which you can read about in the WHATWG Web Applications 1.0 specification. Their demo application is a little chat program, which is a very obvious example of the technology. 12 | 13 | There's many times when I've wanted to add this to my applications: in Bugtagger I have to ask the service if a new message from a customer has been posted to a bug, every n seconds. It would be far more efficient for the serve to send a message using this technology. 14 | 15 | And, since Opera's so popular on embedded and mobile platforms, if this makes its way to mobile phones you're going to see some seriously interesting mobile web activity. 16 | 17 | Chat and messaging are one thing, but couple this with feeds from news sites, calendars and other web services and any mobile device suddenly becomes a persistent tether to the web. Receiving a message on a phone is very natural, but browsing to services can be very awkward for things that are naturally real-time. 18 | -------------------------------------------------------------------------------- /_posts/2009-03-10-the-rosetta-stone-of-iphone-ui-development.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "The Rosetta Stone of iPhone UI Development" 4 | categories: 5 | - programming 6 | - iphone 7 | --- 8 | 9 | I've been working on "Deadline":http://deadlineapp.com iPhone, and I got stuck trying to figure out how to create grouped form-like UI elements. Apple's applications use them a lot, so I thought I'd be able to create them in Interface Builder. 10 | 11 | Here's what I wanted: 12 | 13 | !/images/deadline-iphone.gif! 14 | 15 | I figured out I needed to use a UITableView with UITableViewStyleGrouped, with a view controller set to be the delegate and dataSource for the table view. I seemed to do a lot of table view programming in Helipad iPhone, so I was familiar with the concepts but still struggled. 16 | 17 | After searching Apple's documentation I found the "UICatalog":http://developer.apple.com/iphone/samples/index.action#UICatalog example. This is the Rosetta Stone of iPhone development: it contains working code that explains how most of their apps interfaces work. 18 | 19 | !/images/ui_cat.gif! !/images/uicat2.gif! !/images/uicat3.gif! 20 | 21 | I seriously can't believe I've been doing iPhone development this long without this example. It's taken a lot of the drudgery out of non-IB interface work. 22 | 23 | -------------------------------------------------------------------------------- /_posts/2007-03-06-rails-speed-tip-link-tag-caching.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Rails Speed Tip: link_tag Caching" 4 | categories: 5 | - rails 6 | - programming 7 | - tips 8 | --- 9 | 10 | Have you ever tried concatenating your JavaScript and CSS files for performance improvements? The idea is that latency is a bigger issue than file size when loading web pages, so stuffing all your JavaScript into a monolithic file for deployment should improve performance. 11 | 12 | I wrote a rake task to do this for some of my applications (such as tiktrac). This is slightly more cumbersome than a feature I spied in the ActionPack changelog: 13 | 14 |
15 | Added caching option to AssetTagHelper#stylesheet_link_tag and 16 | AssetTagHelper#javascript_include_tag [DHH]. Examples: 17 | 18 | {% highlight ruby %} 19 | stylesheet_link_tag :all, :cache => true # when ActionController::Base.perform_caching is false => 20 | stylesheet_link_tag :all, :cache => true # when ActionController::Base.perform_caching is true => 21 | {% endhighlight %} 22 | 23 | ...when caching is on, all.css is the concatenation of style1.css, styleB.css, 24 | and styleX2.css. Same deal for JavaScripts. 25 |
26 | 27 | Read more in the asset_tag_helper.rb source. 28 | -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-n.js: -------------------------------------------------------------------------------- 1 | var a=null; 2 | PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:'(?:[^\n\r'\\]|\\.)*'|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,a,'"'],["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,a,"#"],["pln",/^\s+/,a," \r\n\t\xa0"]],[["str",/^@"(?:[^"]|"")*(?:"|$)/,a],["str",/^<#[^#>]*(?:#>|$)/,a],["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,a],["com",/^\/\/[^\n\r]*/,a],["com",/^\/\*[\S\s]*?(?:\*\/|$)/, 3 | a],["kwd",/^(?:abstract|and|as|base|catch|class|def|delegate|enum|event|extern|false|finally|fun|implements|interface|internal|is|macro|match|matches|module|mutable|namespace|new|null|out|override|params|partial|private|protected|public|ref|sealed|static|struct|syntax|this|throw|true|try|type|typeof|using|variant|virtual|volatile|when|where|with|assert|assert2|async|break|checked|continue|do|else|ensures|for|foreach|if|late|lock|new|nolate|otherwise|regexp|repeat|requires|return|surroundwith|unchecked|unless|using|while|yield)\b/, 4 | a],["typ",/^(?:array|bool|byte|char|decimal|double|float|int|list|long|object|sbyte|short|string|ulong|uint|ufloat|ulong|ushort|void)\b/,a],["lit",/^@[$_a-z][\w$@]*/i,a],["typ",/^@[A-Z]+[a-z][\w$@]*/,a],["pln",/^'?[$_a-z][\w$@]*/i,a],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,a,"0123456789"],["pun",/^.[^\s\w"-$'./@`]*/,a]]),["n","nemerle"]); 5 | -------------------------------------------------------------------------------- /_posts/2006-12-23-dashboard-widgets-are-great-with-prototype.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Dashboard Widgets are Great with Prototype" 4 | categories: 5 | - prototype 6 | - javascript 7 | - programming 8 | --- 9 | 10 | One of my commercial projects this year was to build an online ticket sales system for a large bar and venue company in London. The run up to Christmas was the big live test of the system, so they needed statistics on ticket sales. 11 | 12 | Just for fun, I decided to make a Dashboard widget that used curl to fetch the current data from a script on their server. But you know what made this task 100% less painful? My old friend Prototype.js. 13 | 14 | Using Prototype allowed me to build the widget in literally minutes, since it was a simple case of displaying the result of a system call run with PeriodicalExecuter. Most of the time was spent looking up how to enable system commands in the documentation: AllowSystem must be added to your plist file, which takes a boolean value. I haven't yet noticed PeriodicalExecuter doing anything strange when the widget isn't visible, and it didn't have any CPU-draining side-effects. 15 | 16 | By the way, I've written 14163 lines of code in the last year, across 9 projects that I work on outside of my day job. I can't easily produce a count for my day job code. So, I hope no one will mind if I disappear for a week and sleep? 17 | 18 | 19 | -------------------------------------------------------------------------------- /_posts/2009-03-04-mini-app-tweetfu.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Mini App: TweetFu" 4 | categories: 5 | - projects 6 | - miniapps 7 | --- 8 | 9 | Around Christmas I was watching TV with the family and messing around with my netbook. It's got Linux and Ruby on it, so I can actually work on that tiny thing. I came up with a script called lovehate.rb: it downloads matches of love and hate on "search.twitter.com":http://search.twitter.com, then calculates the frequency for each term and presents a "winner". 10 | 11 | For some reason this script fascinated me: _love_ almost always won, and I really wanted to find out what trends affected this. I made the script more generic and used it to compare other terms; eventually "TweetFu.com":http://tweetfu.com was born. 12 | 13 | !/images/tweetfu.png! 14 | 15 | "TweetFu":http://tweetfu.com allows you to compare to terms to see which occurs the most often on Twitter. It then reruns the comparison every hour or so, producing an RSS feed and chart -- the amount it reruns tests is based on demand, to keep Twitter's API traffic low. It's a lot like Google Trends, but currently only allows two terms to be compared. 16 | 17 | I'm still using it to track "Love vs. Hate":http://tweetfu.com/fights/1-Love-Hate, but people have created some amusing fights with it. Also being English, I like to watch "Coffee vs. Tea":http://tweetfu.com/fights/47-Coffee-Tea, it's nice to see tea beating coffee now and then! 18 | -------------------------------------------------------------------------------- /javascripts/google-code-prettify/lang-clj.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) 2011 Google Inc. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | var a=null; 17 | PR.registerLangHandler(PR.createSimpleLexer([["opn",/^[([{]+/,a,"([{"],["clo",/^[)\]}]+/,a,")]}"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \xa0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:def|if|do|let|quote|var|fn|loop|recur|throw|try|monitor-enter|monitor-exit|defmacro|defn|defn-|macroexpand|macroexpand-1|for|doseq|dosync|dotimes|and|or|when|not|assert|doto|proxy|defstruct|first|rest|cons|defprotocol|deftype|defrecord|reify|defmulti|defmethod|meta|with-meta|ns|in-ns|create-ns|import|intern|refer|alias|namespace|resolve|ref|deref|refset|new|set!|memfn|to-array|into-array|aset|gen-class|reduce|map|filter|find|nil?|empty?|hash-map|hash-set|vec|vector|seq|flatten|reverse|assoc|dissoc|list|list?|disj|get|union|difference|intersection|extend|extend-type|extend-protocol|prn)\b/,a], 18 | ["typ",/^:[\dA-Za-z-]+/]]),["clj"]); 19 | -------------------------------------------------------------------------------- /_posts/2012-01-13-using-powerline-with-mac-os.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Using Powerline with Mac OS 4 | tags: 5 | - vim 6 | - programming 7 | --- 8 | 9 | ![Powerline, Mac OS Style](/images/vim-powerline.png) 10 | 11 | [vim-powerline](https://github.com/Lokaltog/vim-powerline) by Kim Silkebækken is a great plugin, but it's a little bit tricky to get it looking right in Mac OS. I've tested it in both Snow Leopard and Lion and figured out how to get it working nicely. 12 | 13 | Snow Leopard's Terminal application doesn't support 256 colours, so I started using [iTerm2](http://www.iterm2.com/) instead. With a little bit of configuration it's functionality equivalent to Terminal, and offers tonnes of extras. Lion's Terminal is fine. Both need to report `xterm-256color`, so ensure this is set up in the Preferences pane. 14 | To get the cool UTF-8 fonts you'll need patched fonts. Nick Quaranto posted some suitable fonts here: [vim-powerline patched fonts](https://gist.github.com/1595572). I like "Menlo" myself. 15 | 16 | Next, read the Powerline documentation. When the author says `set nocompatible` and `set laststatus=2` are required he means it, so add those to `~/.vimrc`. I also had to add `set t_Co=256` and `let g:Powerline_symbols = 'unicode'` (Kim notes that setting it to `fancy` will work as well, and make better use of the patched fonts). 17 | 18 | Changing `Powerline_symbols` requires the cache to be cleared, so `rm /tmp/Powerline.cache`. 19 | 20 | Now your vim should look like Kim's screenshots in the Powerline repository. 21 | -------------------------------------------------------------------------------- /_posts/2005-12-21-javascript-function-to-help-with-accesskeys.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "JavaScript Function to Help with Accesskeys" 4 | categories: 5 | - javascript 6 | - code 7 | - snippets 8 | - programming 9 | --- 10 | 11 | There's a few little touches I like on sites I frequent: sensible tabindexes for forms, accesskeys and so on. Once I learn the accesskeys, I can fly around the main sections of a site. I apply these things to the sites I build, and the other day I realised adding accesskeys and supporting markup was no fun at all. 12 | 13 | I wrote this JavaScript function to search for all your accesskeys and add some friendly markup. It even detects if the user is running Windows or Mac OS, to tell them to use 'alt' or 'ctrl': 14 | 15 | {% highlight javascript %} 16 | function underline_accesskeys() { 17 | var links = document.getElementsByTagName('a'); 18 | if (navigator.platform.match(/win/i)) { 19 | key = 'alt'; 20 | } 21 | else if (navigator.platform.match(/mac/i)) { 22 | key = 'ctrl'; 23 | } 24 | else { 25 | key = 'ctrl or alt'; 26 | } 27 | 28 | for (var i=0; i< links.length; i++) { 29 | if (links[i].accessKey.length > 0) { 30 | re = new RegExp(links[i].accessKey, 'i'); 31 | match = links[i].innerHTML.match(re); 32 | links[i].innerHTML = links[i].innerHTML.replace(re, '' + match + ''); 33 | } 34 | } 35 | } 36 | {% endhighlight %} 37 | -------------------------------------------------------------------------------- /_posts/2009-04-09-lets-make-a-game-snake.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Let's Make a Game: Snake" 4 | categories: 5 | - shoes 6 | - ruby 7 | - programming 8 | --- 9 | 10 | I just finished wrapping up a 5 part tutorial on building Snake in Ruby and Shoes. It looks like this: 11 | 12 | !/images/snake.png! 13 | 14 | * "Part 1":http://quiteuseful.co.uk/post/92210521/lets-make-a-game - Covers installation of Shoes and explains how the snake moves and how to control it with the keyboard 15 | * "Part 2":http://quiteuseful.co.uk/post/92503237/lets-make-a-game-2-food - Basic collision detection, eating food to make the snake longer 16 | * "Part 3":http://quiteuseful.co.uk/post/93418725/lets-make-a-game-3-rules - Collision detection for bricks and the snake, stopping the main animation when the snake crashes 17 | * "Part 4":http://quiteuseful.co.uk/post/93775108/lets-make-a-game-4-scores-and-death - Handling scores, game over screen and restarting the game. This part also shows how to draw a border around the level, and explains how to use Git to get my code 18 | * "Part 5":http://quiteuseful.co.uk/post/94127465/lets-make-a-game-5-sounds - Sounds and ideas for better sound support 19 | 20 | Building games with Ruby and Shoes is a lot of fun because you can throw away the boring stuff and focus on the game's rules and algorithms. The cross-platform (Mac, Linux, Windows) nature of Shoes also keeps your work accessible. 21 | 22 | My Snake game is on GitHub: "snake-shoes":http://github.com/alexyoung/snake-shoes/tree/master -- please fork it and do something cool! 23 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Alex Young 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |

Alex R. Young

12 |

Programmer and writer in London

13 |
14 |
15 |

Currently employed by Apple. Author of Node.js in Practice and Node.js in Action, available from Manning Publications Co.

16 | 22 |
23 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /_posts/2012-04-23-zx-spectrum.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Saint Spectrum Day" 3 | layout: post 4 | tags: 5 | - programming 6 | - culture 7 | --- 8 | 9 | ![ZX Spectrum 48K](/images/spectrum.png) 10 | 11 | *Image from: [wallpapers for World of Spectrum](http://www.type-invaders.com/sinclair/wallpapers/)* 12 | 13 | I've been working as a programmer for 11 years now, and it's partly due to the ZX Spectrum 48K that my dad got me at some point in the 80s. I wanted to learn to program it, and the fact it booted straight into BASIC encouraged a lot of experimentation. 14 | 15 | Computers don't work like that anymore, but [some people want them to](http://www.raspberrypi.org/). 16 | 17 | People find it surprising that there was an influential British computer, but the truth is there were many computers that had limited releases in their native territories; some of them used fascinating Russian [Zilog Z80](http://en.wikipedia.org/wiki/Zilog_Z80) clones and were compatible with Sinclair's machine. 18 | 19 | Looking back, it's easy to think that the 80s saw a more diverse era in terms of home computer hardware. However, if you consider that the Z80 was actually an improved implementation of Intel's 8080, and was used in everything from the Game Boy to the Amstrad CPC, then it's debatable whether things have really changed in terms of hardware diversity. 20 | 21 | The biggest change in computing since the era of the Spectrum is societal -- we decided to start connecting our computers together on a global scale, and putting connected devices in our pockets. Now computers really are a canvas for unrestricted creativity. 22 | -------------------------------------------------------------------------------- /_posts/2006-02-28-what-you-absolutely-must-know-about-textmate.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "What you Absolutely Must Know About TextMate" 4 | categories: 5 | - textmate 6 | - editors 7 | - programming 8 | --- 9 | 10 | TextMate is one of the best text editors for Mac OS X. There's a few features that you might have missed if you're a new user, which I'll briefly illustrate with screenshots. 11 | 12 |

mate .

13 | 14 | In the Terminal, type 'mate .' to create a project out of the current directory. This is so handy and fast: 15 | 16 | "!/images/mate-thumb.png!":/images/mate.png 17 | 18 |

cmd-t

19 | 20 | Press cmd-t to search through the files in the current project, select the file and press return to open it in a new tab. 21 | 22 | 23 | 24 |

ctrl-escape

25 | 26 | Press ctrl-escape to call up the bundle menu. This basically lets you process text, you can do handy things like quickly insert language control and flow constructs, or validate the syntax of the language you're using. 27 | 28 | "!/images/ctrlescape-thumb.png!":/images/ctrlescape.png 29 | 30 | Since keyboard navigation in TextMate is so efficient, if you're a fan of Quicksilver you're likely to enjoy using it. And if you're used to Eclipse (which I use as my editor in Windows), you'll start wishing someone wrote plugins to emulate some of these features... There is, of course, the resource search (you can type *controller* to get a list of controllers in a ruby project), but this isn't quite as friendly as the TextMate cmd-t magic. 31 | -------------------------------------------------------------------------------- /_posts/2006-04-21-rsi.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "RSI" 4 | categories: 5 | - rsi 6 | - ergonomics 7 | --- 8 | 9 | I've been working a lot recently. And when I say a lot, I mean thousands of lines of Rails code across three projects, and thousands of lines of php across many projects. I started to get concerned about RSI. I've had vague work-related pain in my wrists in the past, and I think a big contributor to this was the fact that I once broke both my wrists. I'd elaborate on this, but it's just way too embarrassing for me to slap that on my blog! 10 | 11 | Back to RSI. I've found these two apps really helped: 12 | 13 | h3. Windows: Workrave 14 | 15 | Workrave tells you when to take micro breaks, longer breaks, and what kinds of exercises to take. Seriously! The breaks were enough to help me, though. 16 | 17 | h3. Mac: AntiRSI 18 | 19 | Anti RSI screenshot 20 | 21 | This is a slick little app that allows you to configure micro breaks and longer breaks, a bit like Workrave, but simplified. There's no advice on exercises, just 'get out of the office for God's sake!' 22 | 23 | As I said, these applications have had a marked effect on any work-related wrist pains. I've got a lot of friends and colleagues to try them out, and they're were comfortable letting a piece of software be their master. Now, with that in mind, I think I'll slightly edit the messages they see in Workrave, you never know what a subversive piece of software might get them to do! 24 | -------------------------------------------------------------------------------- /_posts/2012-01-15-vim-keyboard.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: A vim-friendly Mac Keyboard 4 | author: alex 5 | tags: 6 | - vim 7 | - mac 8 | --- 9 | 10 | I suspect the ultimate vim keyboard is the [Happy Hacking Professional 2](http://elitekeyboards.com/products.php?sub=pfu_keyboards,hhkbpro2&pid=pdkb400b). The `Control` key placement is good for vim, tmux, and screen, and the removal of uncessary arrow and function keys appeals to me. However, it's $300, so I wondered if it's possible to hack the keyboard I already own into being a little bit more vim-friendly. 11 | 12 | ### Swapping Modifier Keys 13 | 14 | On a standard Apple keyboard the position of `Control` sucks. Fortunately, Apple gives us the ability to swap modifier keys around with no hacking at all. 15 | 16 | Under System Preferences, Keyboard, Modifier Keys..., the `Control` and `Caps Lock` keys can be switched: 17 | 18 | ![Mac keyboard settings](/images/mac_modifier_keys.png) 19 | 20 | It only took me a few days to get used to this, and it works well for those of us who type `Control` a million times more often than `Caps Lock`. 21 | 22 | ### Use hjkl Instead of Arrows 23 | 24 | ![hjkl hacking](/images/hjkl_mac.png) 25 | 26 | [KeyRemap4Macbook](http://pqrs.org/macosx/keyremap4macbook/index.html) allows any key to be remapped, and key repeats to be accelerated. Of interest to us is the 'Vi mode' setting list, and 'Ubiquitous Vim Bindings'. I selected 'Fn+hjkl to Left/Down/Up/Right' so I can use `hjkl` to move the cursor in any application. 27 | 28 | KeyRemap4Macbook requires a reboot after installation, but once it's running the settings can be changed and experimented with at any time. 29 | 30 | -------------------------------------------------------------------------------- /_posts/2009-02-04-googles-a-glutton-for-it.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Google's a Glutton for It" 4 | categories: 5 | - google 6 | - privacy 7 | --- 8 | 9 | There was a time when journalists finally realised what cookies were, and Google got heavily covered in the press for using them to track what you were searching for. Google said they use the data anonymously, and so the argument moved on to the lifespan of the cookies. 10 | 11 | Recently Google stated inviting users to enter profile data. You can see this if you're logged in, "google.com/ig":http://google.com/ig users will have no doubt seen it by now. This can be as detailed as you want: full contact details, date of birth, place you were born, employment details and a photo. 12 | 13 | I'm not entirely sure what the point of filling this out is, Google don't make it 100% clear. They say, "the more information you provide, the easier it will be for friends to find you". Previously Google only stored your login details, now they've furnished these with a complete profile. That's enough to make privacy concerns greater than ever. 14 | 15 | They haven't stopped there though! Now they want you to let them know exactly where you are and what you're doing, with the "latitude":http://google.com/latitude service. It can work through your browser and mobile phone (in selected locations). 16 | 17 | I don't intend to criticise or tinfoil hat about Google's addiction to data. I just want to point out that it seems amusing that a company so publicly berated for creating potential privacy nightmares has rolled out a service to record *exactly where you are and what you're doing*. There's a delicious irony to it. 18 | -------------------------------------------------------------------------------- /_posts/2009-07-31-dystopian-index.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "A Rails Plugin for Tokyo Dystopia" 4 | categories: 5 | - ruby 6 | - rails 7 | - plugins 8 | - tokyocabinet 9 | --- 10 | 11 | "Dystopian Index":https://github.com/alexyoung/dystopian_index is a Rails plugin for "Tokyo Dystopia":http://tokyocabinet.sourceforge.net/dystopiadoc/. I'm using it with small projects that don't really need a more sophisticated indexing solution like Sphinx or Solr. There's no daemon, so setup is less of a headache. 12 | 13 | It uses Dystopia to build disk-based indexes. At the moment it stores one index per ActiveRecord model, but I might change this to an index per field later. 14 | 15 | I've made it support sorting by date, just because clients always ask for it. To achieve this, dates are stored in the first 12 characters of each index record. The plugin uses these to sort in Ruby. I've been working on benchmarks to figure out the fastest way to handle this. 16 | 17 | h3. Critical Section 18 | 19 | Because this is on disk, Dystopia raises an error if you try to access it concurrently. "Tokyo Tyrant":http://tokyocabinet.sourceforge.net/tyrantdoc/ can be used as a remote storage service for Tokyo Cabinet, so a solution using this might make more sense. I've wrapped calls to the index database with a block like this: 20 | 21 | {% highlight ruby %} 22 | with_dystopian_db do |db| 23 | db.clear 24 | end 25 | {% endhighlight %} 26 | 27 | This means it will always close the database in an ensure. Since most Rails projects use multiple Ruby processes, this should delay and try again on failure, but it doesn't for now (patch it if you want it). 28 | 29 | -------------------------------------------------------------------------------- /_posts/2012-09-12-sponsored-content.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "DailyJS: Sponsored Content" 3 | layout: post 4 | tags: 5 | - dailyjs 6 | - writing 7 | --- 8 | 9 | > "Money is only a tool. It will take you wherever you wish, but it will not replace you as the driver." -- Ayn Rand 10 | 11 | I'm trying out an experiment on DailyJS called [Sponsored Content](http://dailyjs.com/sponsored-content.html) where people offering commercial products can pay to get an article written and featured alongside the usual content we publish. That almost sounds like payola, so it's going to take care and tact to manage it. 12 | 13 | My goals are fairly straightforward: 14 | 15 | * Clearly distinguish between commercial products and services, and the usual (generally) open source things we cover 16 | * Use the money to pay people to write for the site 17 | * Generate money to free up my time so I can create more sites like DailyJS 18 | 19 | Let's say you make an API or service that's relevant to JavaScript developers -- perhaps an error notification service, or supercharged CDN. By paying me to write about your service, you'll get a tutorial _and_ prominent placement on the site. I see it more as a combination of genuinely useful content and advertising than simply yet more ads blasted into eyeballs. 20 | 21 | The author of the first commercial product that we featured was extremely happy with the results: [RoyalSlider: Tutorial and Code Review](http://dailyjs.com/2012/09/04/royal-slider/). It's partly a tutorial but also a code review, in which I pull the code apart to verify the quality. It turned out to hold muster, so I was more than happy to feature it on the site under the Sponsored Content Programme. 22 | -------------------------------------------------------------------------------- /_posts/2005-12-15-google-home-module.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Google Home Module" 4 | categories: 5 | - google 6 | - programming 7 | - api 8 | --- 9 | 10 | It didn't take me long, and I knew I wouldn't be able to go for a few hours without writing a basic plugin for Google Home. 11 | 12 | I always wanted to have a del.icio.us search box in a panel with my latest bookmarks, so I wrote this: 13 | 14 | 15 | 16 | Once you've added it to your homepage, you can enter your delicious username, and it displays your latest links using raw JSON: 17 | 18 | {% highlight javascript %} 19 | _IG_FetchContent('http://del.icio.us/feeds/json/' + prefs.getString('username') + '?raw', function (responseText) { 20 | posts = eval('(' + responseText + ')') 21 | for (var i=0, post; post = posts[i]; i++) { 22 | // ... display code here ... 23 | } 24 | } 25 | {% endhighlight %} 26 | 27 | All I'm doing is calling _IG_FetchContent(), which the API documents, and then building an unordered list of my links. 28 | 29 | A search box is displayed by just using a HTML form. 30 | 31 | The reason I did this is that I want to extend it in the future so I can do a live search of delicious from Google Home without leaving the page. I assume this will be quite complex, although I'm hoping I can recycle scriptaculous for the most part. 32 | 33 | Now I've whet my appetite, however, I'm sure I'll be able to integrate all manner of applications into Google Home. 34 | 35 | The delicious module 36 | 37 | -------------------------------------------------------------------------------- /about.jade: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: About 4 | --- 5 | 6 | a#home(href="/") alexyoung.org 7 | 8 | .free 9 | h1 About 10 | 11 | p I'm a software engineer based in London, England. I graduated in 2001 and have been working with web technology professionally since then. 12 | p I founded Helicoid as a limited company in 2006. I've built 5 commercial Ruby on Rails web applications for Helicoid. Each web app I build has a mobile interface, API, and some even have iPhone and Mac clients. 13 | 14 | h3 Writing 15 | 16 | p I've written for: Net Magazine, Linux.com, Think Vitamin, and Furthernoise.org. 17 | 18 | h3 Other Projects 19 | 20 | ul 21 | li JsChat is a real time chat protocol with both console and web clients 22 | li Ico is an open source JavaScript graph library 23 | li TweetFu tracks trends on Twitter 24 | li My GitHub page has more open source projects I've created 25 | 26 | h3 Freelance 27 | 28 | p If you'd like consultation on a strong Ruby on Rails project, please drop me a line using my contact form. 29 | 30 | h3 If You Know Me... 31 | 32 | p If you're an old friend and you're wondering why my site talks a lot about rails, ruby and git — don't worry, it's just technical stuff. You can get in touch with my contact form and things will become clearer once we've caught up. 33 | 34 | -------------------------------------------------------------------------------- /_posts/2005-12-16-google-home-api-security.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Google Home API Security" 4 | categories: 5 | - google 6 | - api 7 | - programming 8 | --- 9 | 10 | If you wanted to develop a Google Home module that accesses a service using a password, you might notice a few flaws: 11 | 12 | # There isn't a password type available, so any user preferences that require a password will display the password in plain text. 13 | # If you still want to store passwords in user preferences, be aware that every single time Google Home loads, it will fetch the module with the password in plain text in the GET request. 14 | 15 | It would be nice if Google introduced a 'password' type, to compliment the existing types for preferences. This would at least allow you to have a starred password field in the user preferences. 16 | 17 | Many services, such as xmlrpc used by weblogs like Wordpress, send passwords in the clear anyway. But as it stands, if a friend or colleague had a Google Home module that integrated with a third party service that required a password, I could use their browser and: 18 | 19 | * Click edit and view the password in the password field, or: 20 | * Use the browser to open the module in a new window or tab, and observe the password in the URL, since all user preferences are submitted by GET requests to the module's source XML file. 21 | 22 | Additionally, you're not going to be able to use XMLHttpRequest() with Google Home because... XMLHttpRequest() doesn't allow you to talk to different servers, for obvious security reasons. You can, however, use _IG_FetchContent(url, func) to perform GET requests, and get the content back (func takes a single parameter that contains the resulting content.) 23 | -------------------------------------------------------------------------------- /_posts/2009-08-20-happiness.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "What Makes You Happy?" 4 | categories: 5 | - life 6 | - productivity 7 | --- 8 | 9 | "Track Your Happiness":https://www.trackyourhappiness.org/ is an entertaining experiment. It's a site that periodically sends out links to surveys. The surveys are designed to gather information on your general well-being and happiness. The surveys work fine on iPhones too, so I was able to fill them out wherever I was. 10 | 11 | !/images/happiness.png! 12 | 13 | It focuses on a few main areas: 14 | 15 | * Activity 16 | * Focus 17 | * Productivity 18 | * Social interactions 19 | * Sleep time and sleep quality 20 | 21 | Before taking the tests I had these preconceptions: 22 | 23 | * Sleep doesn't bother me 24 | * Productivity and focus are proportional to happiness 25 | * I like working alone 26 | * I prefer reading and playing to working or watching TV 27 | 28 | After taking two or three weeks of tests I finally completed the "course" of surveys. The results were contrary to my assumptions: 29 | 30 | * Sleep is strongly tied to my happiness 31 | * Productivity does not relate to my happiness 32 | * I prefer working with at least one person 33 | * Reading and watching TV make me more happy than any other activity 34 | * I'm happier outside 35 | 36 | All of these facts surprised me. When I was a child I'd play outside all the time, but I still had weekend hacking sessions on the ZX Spectrum. Also, as an entrepreneur and freelancer, I thought productivity made me happy. It turns out that my workaholic nature has been compromising my overall well-being. 37 | 38 | Try signing up and sticking with Track Your Happiness throughout the course of surveys. They can be annoying and repetitive, but you might be surprised by what you discover. 39 | -------------------------------------------------------------------------------- /include/files/foaf.rdf: -------------------------------------------------------------------------------- 1 | 5 | 6 | Alex Young 7 | Mr 8 | Alex 9 | Young 10 | alex 11 | 569cf9bb4519e188367d8ee66fa3d1552d320353 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Ellis Rowland Watkins 20 | 440b8b76fde22495492e1ff01a8a8516fd648abd 21 | 22 | 23 | 24 | 25 | 26 | Simon Starr 27 | b613196c3c43f642be88d35fec27e30b88bf0b96 28 | 29 | 30 | 31 | 32 | 33 | Kevin Ford 34 | 09594bd4a86a7d6d31f4c96771599ac08c4012bc 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /_posts/2008-11-13-rails-doesnt-crash-a-lot-love-it-and-create-amazing-things.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Rails Doesn't Crash a Lot" 4 | categories: 5 | - programming 6 | - rails 7 | - sysadmin 8 | --- 9 | 10 | DHH wrote this: "Myth #2: Rails is expected to crash 400 times/day":http://www.loudthinking.com/posts/31-myth-2-rails-is-expected-to-crash-400-timesday - a response to a myth about Rails processes regularly needing restarts. 11 | 12 | I'm a big Rails hacker, it's 90% of what I've done for years. I've designed and developed these apps: "Tiktrac":http://tiktrac.com, "Ebiwrite":http://ebiwrite.com, "Helipad":http://pad.helicoid.net, "Deadline":http://deadlineapp.com, "Loom":http://loomapp.com and "Reuters Real Estate":http://reutersrealestate.com, this blog, not to mention work for smaller clients I haven't included here. They're real live applications with constant development, performance and error monitoring. 13 | 14 | In the time I've been running these applications I've never had Rails crash several times a day. In fact, I can't remember Rails crashing at all except when it's my fault. Early on I had a cheap Dreamhost account and ran my personal blog on there, and found it crashed due to Dreamhost zapping processes when a server was under load. Now I've got dedicated servers (and obviously Reuters do), and we have Rails processes that run from deploy to deploy -- this can be weeks or even months depending on the project. 15 | 16 | So don't put off using Rails for your next project, it's not a big scary beast to deploy and manage. It won't sap all your server's RAM. If you're using Apache get "Passenger":http://www.modrails.com/, it makes managing Rails projects as easy as anything else. If you want to use another Ruby framework or library, Passenger, fcgi and similar projects make it possible and easier than ever. 17 | -------------------------------------------------------------------------------- /_posts/2005-11-29-singletable-inheritance-and-validates-as-unique.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Single-table Inheritance and validates_as_unique" 4 | categories: 5 | - snippets 6 | - code 7 | - programming 8 | - rails 9 | --- 10 | 11 | I had a User class, which then had a Moderator class. I was using the "type" field in my database to denote whether a user was a User or a Moderator. However, my validations weren't working as I expected: 12 | 13 | {% highlight ruby %} 14 | validates_as_unique :name, :email 15 | {% endhighlight %} 16 | 17 | Users could have the same email address as Moderators. Obviously sometimes this kind of scoping makes sense for STI classes, but it doesn't here. I ended up writing this: 18 | 19 | {% highlight ruby %} 20 | module ActiveRecord 21 | module Validations 22 | module ClassMethods 23 | # Intended for use with STI tables, helps ignore the type field 24 | def validates_overall_uniqueness_of(*attr_names) 25 | configuration = { :message => "must be unique" } 26 | configuration.update(attr_names.pop) if attr_names.last.is_a?(Hash) 27 | 28 | validates_each(attr_names, configuration) do |record, attr_name, value| 29 | records = self.find(:all, :conditions=> ["#{attr_name} = ?", value]) 30 | record.errors.add(attr_name, configuration[:message]) if records.size > 0 and records[0].id != record.id 31 | end 32 | end 33 | end 34 | end 35 | end 36 | {% endhighlight %} 37 | 38 | This hastily named validation keyword allows you to specify fields you want to be considered unique across the entire table, whether they be Users, Moderators, Admins or MagicalPixies. Now I just use: 39 | 40 | {% highlight ruby %} 41 | validates_overall_uniqueness_of :name, :email 42 | {% endhighlight %} 43 | 44 | and my Users can't assume the identity of Moderators and piss everyone off! 45 | -------------------------------------------------------------------------------- /_posts/2010-04-06-jschat-ico-updates.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "JsChat and Ico Updates" 4 | categories: 5 | - jschat 6 | - ico 7 | - opensource 8 | --- 9 | 10 | I've updated both "JsChat":http://jschat.org and "Ico":http://github.com/alexyoung/ico with major changes recently, as a result of some healthy Easter weekend open source hacking. 11 | 12 | h3. JsChat: Mongo, Twitter Auth 13 | 14 | JsChat can now be configured to work with Mongo and Twitter authentication: 15 | 16 | * The web interface now has tabs 17 | * The server now has a config file in /etc/jschat/config.json 18 | * The config file can be used to set up Twitter auth and Mongo 19 | * Logging in with Twitter will save the user's session (including tabs) until _Quit_ is pressed or /quit is entered 20 | 21 | Read more on "blog.jschat.org":http://blog.jschat.org: "Twitter Auth, Mongo Logging and Tabs":http://blog.jschat.org/post/486260335/twitter-auth-mongo-logging-and-tabs 22 | 23 | h3. Ico 24 | 25 | I've removed the Prototype dependency from Ico, so it only depends on the core "Raphael":http://raphaeljs.com/ library. I used jslint to help tidy up the code as well. 26 | 27 | I'm using "SVG paths":http://www.w3.org/TR/SVG/paths.html#PathData for drawing Ico's graphs. They're quite easy to build because they're simple strings: 28 | 29 | {% highlight javascript %} 30 | // Move to 0,0, draw a line to 10,10 31 | 'M0,0 L10,10' 32 | {% endhighlight %} 33 | 34 | Raphael's calls can be chained, so the resulting code is concise: 35 | 36 | {% highlight javascript %} 37 | // Move to 0,0, draw a line to 10,10, then apply a stroke 38 | paper.path('M0,0 L10,10').attr({ 'stroke': colour }); 39 | {% endhighlight %} 40 | 41 | The old API is still available through a plugin called raphael.path.methods.js, but despite initially being put off by SVG paths I now prefer them. 42 | 43 | -------------------------------------------------------------------------------- /_posts/2006-04-05-php-5s-anonymous-functions.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "PHP 5's Anonymous Functions" 4 | categories: 5 | - php 6 | - programming 7 | --- 8 | 9 | I don't see much use of anonymous functions in php, yet when I write python or ruby, I use constructs like this quite often. You can do it in php though, with create_function. It's nothing that fancy, it just lets you create a function whenever you feel like it. This can be placed wherever you need a callback in php. 10 | 11 | Callbacks in php must be a function name. You can't refer to methods in the current class, or hack it by making a function that returns an object: function()->probably_a_singleton->hello(). This is where create_function() comes in. 12 | 13 | Here's an example: 14 | 15 | {% highlight php %} 16 | $where_sql[] = " $field IN (" . implode(',', array_map(create_function('$str', 'return registry()->db->quoteSmart($str);'), $data['in'])) . ') '; 17 | {% endhighlight %} 18 | 19 | This is part of a query builder I'm writing for a project. It lets you pass arrays to build queries, and also something like this: 20 | 21 | {% highlight php %} 22 | array('in' => array('data' => array(1, 2, 3))) 23 | {% endhighlight %} 24 | 25 | This maps to the SQL fragment "IN (1, 2, 3)", and also escapes the operands to make sure the query is relatively secure. I had to call our singleton'd database object through create_function to do this: 26 | 27 | {% highlight php %} 28 | create_function('$str', 'return registry()->db->quoteSmart($str);'), $data['in']) 29 | {% endhighlight %} 30 | 31 | array_map calls this with each field you pass and escapes them. 32 | 33 | So all in all, remember create_function. It can save some legwork, and it might help you do things how you would in other languages if you're coming to php from somewhere else. 34 | -------------------------------------------------------------------------------- /_posts/2009-06-23-iphone-30-development-glitches.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "iPhone 3.0 Development Glitches" 4 | categories: 5 | - programming 6 | - iphone 7 | --- 8 | 9 | I had a few glitches in the "Helipad":http://helipadapp.com/ iPhone app when 3.0 rolled around. I've put the solution here to help those of you searching for the error message. 10 | 11 | Helipad syncs to our web app and displays a syncing progress screen. I open this view in a new view controller like this: 12 | 13 | {% highlight objc %} 14 | SyncController *sync = [[SyncController alloc] initWithNibName:@"SyncController" 15 | bundle:nil]; 16 | [self presentModalViewController:sync animated:YES]; 17 | {% endhighlight %} 18 | 19 | The parent view displays a UIWebView, and the controller runs the sync process on another thread so the display can be updated with feedback. The problem was that updating UIWebView crashed the app: 20 | 21 |
22 | bool _WebTryThreadLock(bool): Tried to obtain the web lock from a thread 23 | other than the main thread or the web thread. This may be a result of calling 24 | to UIKit from a secondary thread. 25 |
26 | 27 | I can only assume that this was caused as part of the improvements to UIWebView's performance. The crash actually occurred when the sync process called dismissModalViewControllerAnimated:. To resolve this, I called it on the main thread like this: 28 | 29 | {% highlight objc %} 30 | [self performSelectorOnMainThread:@selector(dismissSyncView) 31 | withObject:nil 32 | waitUntilDone:YES]; 33 | {% endhighlight %} 34 | 35 | My method, dismissSyncView, looks like this: 36 | 37 | {% highlight objc %} 38 | - (void)dismissSyncView { 39 | [self dismissModalViewControllerAnimated:YES]; 40 | // Other custom code goes here 41 | } 42 | {% endhighlight %} 43 | 44 | -------------------------------------------------------------------------------- /_posts/2005-12-10-scriptaculous-when-to-use-ajax-and-effects.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "script.aculo.us: When to Use Ajax and Effects" 4 | categories: 5 | - tips 6 | - programming 7 | - code 8 | - javascript 9 | --- 10 | 11 | A few applications I've been developing recently have either had things from script.aculo.us applied for fun, to add effects our client would like, or they've been designed with Ajax and visual effects from the start. 12 | 13 | A very beta application I'm working on is Multitap.net. Since it's my project, and I don't have clients to answer to, I've done whatever the hell I want with it. I had these things in mind when creating it: 14 | 15 | # I'd use Ajax to allow users to post comments on things, to cut down on page loads. The site features screenshots from videogames as the main content, so I didn't want to be loading a lot of images all the time. 16 | # I'd use some of the transitional effects from script.aculo.us to make it obvious when new things have been added, and when hidden things appear. Visual queues can be very helpful, especially when posting comments. 17 | # Being able to hide things such as settings and edit panes would keep the pages simple on the surface, and keep the focus on the content. 18 | 19 | I have a group of friends who have been testing it and making suggestions. I found they liked the visual effects, basically for the reasons I described just there, but also because it makes the site seem quite unique. 20 | 21 | One of them mentioned that it would be nice to have a login box on all pages, instead of having to leave a page if you forgot to login. Sticking with my idea of keeping pages simple, I used a popup login box like Odeo uses. They liked this, and said "more Web 2.0!" as a little joke on the side... :) 22 | 23 | 24 | -------------------------------------------------------------------------------- /_includes/sidebar.jade: -------------------------------------------------------------------------------- 1 | ul#sidebar 2 | li 3 | #carbonads-container 4 | .carbonad 5 | #carbon 6 | script(type="text/javascript") 7 | var z = document.createElement("script"); 8 | z.type = "text/javascript"; 9 | z.async = true; 10 | z.src = "http://engine.carbonads.com/z/12099/carbon_2_1_0_VERT"; 11 | var s = document.getElementsByTagName("script")[0]; 12 | s.parentNode.insertBefore(z, s); 13 | li 14 | a(href="http://feeds.feedburner.com/webdevelopernotes") 15 | img(src="http://feeds.feedburner.com/~fc/webdevelopernotes?bg=99CCFF&fg=444444&anim=0", height="26", width="88", style="border:0", alt="") 16 | li.link 17 | a(href="/about.html") 18 | img(src="https://s2.googleusercontent.com/s2/favicons?domain=alexyoung.org") 19 | span About 20 | li.link 21 | a(href="http://github.com/alexyoung/") 22 | img(src="https://s2.googleusercontent.com/s2/favicons?domain=github.com", alt="GitHub/alexyoung") 23 | span GitHub 24 | li.link 25 | a(href="http://www.linkedin.com/in/alexyoung") 26 | img(src="https://s2.googleusercontent.com/s2/favicons?domain=linkedin.com", alt="View Alex Young's profile on LinkedIn") 27 | span LinkedIn 28 | li.link 29 | a(href="http://twitter.com/alex_young") 30 | img(src="https://s2.googleusercontent.com/s2/favicons?domain=twitter.com", alt="Follow me on Twitter") 31 | span Twitter 32 | li.link 33 | a(href="http://dailyjs.com") 34 | img(src="https://s2.googleusercontent.com/s2/favicons?domain=dailyjs.com") 35 | span DailyJS 36 | li.link 37 | a(href="http://usevim.com") 38 | img(src="https://s2.googleusercontent.com/s2/favicons?domain=usevim.com") 39 | span usevim 40 | li 41 | form(action="http://www.google.com/search", method="get") 42 | p 43 | input(name="sitesearch", type="hidden", value="alexyoung.org") 44 | input(class="text", name="q", type="text", size="12") 45 | br 46 | input(class="button", type="submit", value="Google") 47 | -------------------------------------------------------------------------------- /_posts/2009-02-02-crossbrowser-testing-followup.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Cross-Browser Testing: Follow-up" 4 | categories: 5 | - browsers 6 | - design 7 | - testing 8 | --- 9 | 10 | This is a followup to my previous post, "What cross-browser testing could look like":http://alexyoung.org/articles/show/66/what_crossbrowser_testing_could_look_like. After talking to a few friends about the idea, we realised one way of running remote Windows instances would be through "Amazon EC2":http://aws.amazon.com/windows/. 11 | 12 | The weaknesses of this approach are: 13 | 14 | * Installing all the different browsers 15 | * Trying to get multiple versions of IE set up 16 | * Where's Mac OS? 17 | 18 | However, it is a definite possibility or at least a nod towards one. Ken from CrossBrowserTesting.com got in touch to show off his service. They've got videos of it so you can see it in action without signing up. It's basically a Java VNC client accessing a set of servers. It'd be interesting to know how they plan to control malicious use of the operating system instances. Also I don't think you can test local stuff, so you'd need to mirror your work. 19 | 20 | Here's what it looks like in use: 21 | 22 | !/images/crossbrowsertesting.png! 23 | 24 | As you can see there's some weird stuff with the mouse. This is because my latency to the server is quite high, this also makes keyboard and mouse input very slow. This will probably be resolved if their service takes off and they roll out international servers. There's a toolbar at the top that allows you to logout or take screenshots of the session, which works very well. 25 | 26 | CrossBrowserTesting.com is very reasonably priced and cuts out a lot of the hassles I've mentioned previously. The latency issues will put many people off initially, but I think these are solvable problems given cash. The only thing that really concerns me is security: you're able to run programs other than the specified browser, and knowing Windows someone could probably turn the whole thing into a botnet. 27 | 28 | People definitely are innovating in this space, and I hope CrossBrowserTesting.com takes off. 29 | -------------------------------------------------------------------------------- /include/style.css: -------------------------------------------------------------------------------- 1 | body 2 | { 3 | font: 11px verdana, serif; 4 | background-color: black; 5 | color: #eee; 6 | background-image: url('/include/images/background.png'); 7 | background-repeat: repeat-x; 8 | background-position: bottom; 9 | background-attachment: fixed; 10 | } 11 | 12 | a 13 | { 14 | color: #eee; 15 | text-decoration: underline; 16 | } 17 | 18 | a:hover 19 | { 20 | text-decoration: none; 21 | } 22 | 23 | h1, h2, h3, p 24 | { 25 | margin: 0; 26 | padding: 0; 27 | } 28 | 29 | h1, h2, p 30 | { 31 | margin-bottom: 10px; 32 | } 33 | 34 | h1 35 | { 36 | font-size: 14px; 37 | } 38 | 39 | h2 40 | { 41 | font-size: 12px; 42 | } 43 | 44 | div#Thumbnails, div#RHS 45 | { 46 | clear : right; 47 | float : left; 48 | } 49 | 50 | div#Thumbnails 51 | { 52 | width: 62%; 53 | } 54 | 55 | div#Content 56 | { 57 | } 58 | 59 | div#RHS 60 | { 61 | margin: 0; 62 | padding: 0; 63 | width: 37%; 64 | text-align: right; 65 | } 66 | 67 | div.Column 68 | { 69 | clear : right; 70 | float : left; 71 | width: 50%; 72 | } 73 | 74 | div.Row 75 | { 76 | clear: both; 77 | padding: 3px 10px; 78 | } 79 | 80 | .Panel 81 | { 82 | margin-bottom: 30px; 83 | } 84 | 85 | .Right 86 | { 87 | text-align: right; 88 | } 89 | 90 | #Logo 91 | { 92 | clear: both; 93 | margin-bottom: 10px; 94 | } 95 | 96 | #Logo .Left 97 | { 98 | clear : right; 99 | float : left; 100 | padding-top: 6px; 101 | width: 49%; 102 | } 103 | 104 | .Logo 105 | { 106 | margin-bottom: 20px; 107 | } 108 | 109 | .Border 110 | { 111 | border-bottom: black 2px solid; 112 | border-left: #cdd1d8 1px solid; 113 | border-right: black 2px solid; 114 | border-top: #cdd1d8 2px solid; 115 | } 116 | 117 | img.Border 118 | { 119 | border: black 1px solid; 120 | } 121 | 122 | .Small 123 | { 124 | width: 300px; 125 | } 126 | 127 | a img 128 | { 129 | border: none; 130 | margin: 0; 131 | padding: 0; 132 | } 133 | 134 | .aboutme 135 | { 136 | list-style-type: disc; 137 | margin: 0 0 10px 0; 138 | } -------------------------------------------------------------------------------- /_posts/2009-10-26-riot-testing.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Riot: Ruby Unit Testing" 4 | categories: 5 | - programming 6 | - testing 7 | - ruby 8 | - riot 9 | --- 10 | 11 | "Riot":http://github.com/thumblemonks/riot is a Ruby unit testing framework. It results in terse and expressive unit tests. It strikes the perfect balance between shoulda and rspec-like test frameworks. It's also very fast. 12 | 13 | Riot isn't based on Test::Unit (unlike Shoulda). It flattens your tests into contexts with sets of assertions. It has a setup block that runs before the assertions in a context. 14 | 15 | There's a movement within the Ruby community to write tests with one assertion per test block. Riot fundamentally works this way because assertions are the test block, so cheating isn't possible. This makes for incredibly focused unit tests. 16 | 17 | Riot is still under active development by its author, "Justin Knowlden":http://github.com/thumblemonks/riot/blob/master/README.markdown, but it's completely usable right now. I was so impressed by it that I've created a JavaScript port called "riotjs":http://github.com/alexyoung/riotjs -- I'll cover this in another post soon. 18 | 19 | h3. Redundancy 20 | 21 | Used as the author intended, Riot removes redundancy even when compared to Shoulda. 22 | 23 | Test::Unit: 24 | 25 | {% highlight ruby %} 26 | class UserTest < Test::Unit::TestCase 27 | def setup 28 | @user = User.new 29 | end 30 | 31 | def test_email_address_is_nil 32 | assert_nil @user.email 33 | end 34 | end 35 | {% endhighlight %} 36 | 37 | Shoulda: 38 | 39 | {% highlight ruby %} 40 | class UserTest < Test::Unit::TestCase 41 | def setup 42 | @user = User.new 43 | end 44 | 45 | should "have nil email" { assert_nil @user.email } 46 | end 47 | {% endhighlight %} 48 | 49 | Riot: 50 | 51 | {% highlight ruby %} 52 | context "a new user" do 53 | setup { User.new } 54 | asserts("email address") { topic.email }.nil 55 | end 56 | {% endhighlight %} 57 | 58 | h3. FAQ and More 59 | 60 | Riot's author has anticipated the typical set of Ruby test tool questions in the "README":http://github.com/thumblemonks/riot/blob/master/README.markdown. 61 | 62 | -------------------------------------------------------------------------------- /_posts/2008-11-08-deadline.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Deadline" 4 | categories: 5 | - projects 6 | - apps 7 | --- 8 | 9 | Here's a personal project I've been working on for a while: "Deadline":http://deadlineapp.com/ 10 | 11 | !http://deadlineapp.com/images/home/screenshots/interface.png! 12 | 13 | I find calendars hard to use but I like writing, so I wanted to create a calendar that uses natural language parsing to make sense of text. You can search for words or dates, so typing "next week" shows you all your events for next week. 14 | 15 | When I designed the interface I threw away all the typical web app stuff. There's barely any navigation, no footer, no extra links for "account", etc. When you hover the logo minimal navigation appears, and editing is all inline. I really wanted to make something that looked graphical, almost like an album cover: big helvetica fonts, bold colours, with an emphasis on your data over application chrome. 16 | 17 | It works with Jabber/Gtalk: it sends reminders and also allows you to delete, delay and hide events through your IM client. 18 | 19 | It also accepts and sends email. That means if your mobile phone supports email or MMS you can get and set reminders anywhere. There's also a mobile interface too just like the rest of Helicoid's projects. 20 | 21 | If it can't understand the date and time you've typed in, it'll prompt you to enter one with a form like this: 22 | 23 | !http://deadlineapp.com/images/home/screenshots/manual.png! 24 | 25 | It's the second app to use "Helicoid":http://helicoid.net's auth server, which means if you have a "Helipad":http://pad.helicoid.net it's single sign-on! 26 | 27 | Since it uses natural language parsing it can only cope with English. I could technically support more languages, but I'm going to wait and see if the idea makes sense to other people first. I love using it and I've come to rely on it, especially through the IM interface. 28 | 29 | Anyway, check it out! Accounts are free and sign up is quick. If you'd like to know about the technical stuff, or upcoming API details, post a comment and I'll get back to you. 30 | 31 | There's also more details here: "Deadline beta":http://pad.helicoid.net/document/public/93f5a1ce 32 | -------------------------------------------------------------------------------- /_posts/2005-11-18-javascript-mini-bibliography.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Javascript Mini Bibliography" 4 | categories: 5 | - javascript 6 | - snippets 7 | - code 8 | - programming 9 | --- 10 | 11 | I often annoys me when people don't make it clear what they're referencing in an article. Sometimes people don't give any references at all, and when they do they use links on words that shouldn't be links (the click here syndrome). 12 | 13 | So I wrote this JavaScript to help out. It adds a section at the bottom of each of your Wordpress posts containing all the links you referred to in a post: 14 | 15 | {% highlight javascript %} 16 | /* From Prototype */ 17 | document.getElementsByClassName = function(className) { 18 | var children = document.getElementsByTagName('*') || document.all; 19 | var elements = new Array(); 20 | 21 | for (var i = 0; i < children.length; i++) { 22 | var child = children[i]; 23 | var classNames = child.className.split(' '); 24 | for (var j = 0; j < classNames.length; j++) { 25 | if (classNames[j] == className) { 26 | elements.push(child); 27 | break; 28 | } 29 | } 30 | } 31 | 32 | return elements; 33 | } 34 | 35 | function post_links() { 36 | var posts = document.getElementsByClassName('storycontent'); 37 | for (i = 0; i < posts.length; i++) { 38 | found_links = false; 39 | for (n = 0; n < posts[i].childNodes.length; n++) { 40 | for (p = 0; p < posts[i].childNodes[n].childNodes.length; p++) { 41 | if (posts[i].childNodes[n].childNodes[p].nodeName == 'A') { 42 | if (!found_links) { 43 | header = document.createElement('H4'); 44 | header.innerHTML = 'Links in this post:'; 45 | posts[i].appendChild(header); 46 | found_links = true; 47 | } 48 | link = document.createElement("A"); 49 | link.href = posts[i].childNodes[n].childNodes[p].href; 50 | link.innerHTML = posts[i].childNodes[n].childNodes[p].innerHTML; 51 | posts[i].appendChild(link); 52 | posts[i].appendChild(document.createElement('BR')); 53 | } 54 | } 55 | } 56 | } 57 | } 58 | 59 | post_links(); 60 | {% endhighlight %} 61 | -------------------------------------------------------------------------------- /_posts/2012-03-20-the-key-to-android-domination.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "The Key to Android Domination" 4 | tags: 5 | - android 6 | - programming 7 | --- 8 | 9 | Where's Google's Android IDE? They have good Eclipse support which goes some way to competing with Apple's Xcode, but the experience of developing with Xcode is far more focused and arguably better. 10 | 11 | I don't actually think developing a native Windows, Linux, and Mac OS IDE really fits with Google's approach -- they'd rather give developers the platform then get out of the way by allowing us to use our own tools. However, there's one huge pain point in iOS development that Google could attack to win over developers: the difficulty of getting _your_ code running on _your_ device. 12 | 13 | ### The Developer's Experience 14 | 15 | After downloading several gigabytes, then setting up the necessary certificates, a developer can finally run their first _Hello World_ application on an iOS device. This represents a weakness in Apple's approach that could be exploited. 16 | 17 | How? Well, given that it's unlikely that Google will release a cross-platform IDE themselves, how about creating a web-based IDE? That might sound like a nightmare to Vim hackers like me, but hear me out. Imagine if Google had a developer site that ran something as high quality as [Cloud9 IDE](http://c9.io/) (which has Vim shortcuts), with a _built-in Android simulator_. 18 | 19 | Within minutes developers could run a simple application in the simulator, without even owning a device. No gigabyte downloads, no confusing certificates. Google's web-based market can trigger downloads on Android devices, so how about linking devices with the IDE so apps can be sent directly to a device to run it? A new Android developer with little experience could have a real app that they've made running on a device in minutes. 20 | 21 | This also makes a huge amount of sense given ChromeOS and Chromebooks. 22 | 23 | ### Remove the Barriers 24 | 25 | That's what Apple and Google's goal for developers should be: to let people run code with as few barriers as possible. I think a robust web-based IDE would play a huge part in this, and the first to deploy it will get a huge win in terms of developer support. 26 | -------------------------------------------------------------------------------- /_posts/2006-05-31-using-apis-dont-forget-about-rss-and-atom-feeds.textile: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Using APIs: Don't Forget About RSS and Atom Feeds" 4 | categories: 5 | - programming 6 | - api 7 | - rss 8 | - atom 9 | --- 10 | 11 | Screenshot from Basecamp Mobile 12 | 13 | Sometimes you need to display collated data on a page. For example, Basecamp has a useful dashboard which displays all the latest activity across all your projects. I've been working on an application that provides Basecamp access to mobile devices, and I realised that reproducing this dashboard would be far too API-intensive to be usable. 14 | 15 | It can take anything from 20-1000ms to complete a request using the API, depending on the number of hops the request goes through over the network and how fast the application at the other end responds. So if you want to gather the data Basecamp displays on its dashboard, you'd need to: 16 | 17 | # Collect all the projects 18 | # For each project, collect all the message summaries 19 | # For each project, collect all the late milestones 20 | 21 | Let's say you've got 10 projects in your Basecamp account. This could easily result in 21 requests to the API. On a good day this is going to take 5 seconds to complete. These numbers aren't made up, they're rounded off from what I experienced when using the API. Someone who's helping me test Basecamp Mobile has 40 projects, and my application was just giving up before it could even load his data. 22 | 23 | So how did I overcome this? Well, Basecamp produces another summary of the data I required, in an even more friendly way: an RSS feed. I used the existing methods for accessing the API to make a request using the user's authentication details and fetch the RSS feed for their projects. This is far faster than any strategy I could think of when using the API, and turning XML into data my application could use was as simple as using the API. 24 | 25 | I learnt an important lesson here. When writing applications that use web-based APIs, make best use of their existing data feeds. They can be fast and less resource intensive than lots of API calls! 26 | -------------------------------------------------------------------------------- /_layouts/default.jade: -------------------------------------------------------------------------------- 1 | !!! 5 2 | html(lang="en") 3 | head 4 | title #{site.config.title} 5 | meta(charset="utf-8") 6 | link(href="/stylesheets/screen.css", media="screen", rel="stylesheet", type="text/css") 7 | link(href="/stylesheets/home.css", media="screen", rel="stylesheet", type="text/css") 8 | link(href="/stylesheets/small.css", media="only screen and (max-device-width: 480px)", rel="stylesheet", type="text/css") 9 | link(href="/javascripts/google-code-prettify/prettify.css", media="screen", rel="stylesheet", type="text/css") 10 | link(rel="alternate", type="application/rss+xml", title="RSS 2.0", href="/feed.rss") 11 | link(rel="alternate", type="application/atom+xml", title="Atom Feed", href="/feed.xml") 12 | script(type="text/javascript", src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js") 13 | script(type="text/javascript", src="/javascripts/site.js") 14 | script(type="text/javascript", src="/javascripts/google-code-prettify/prettify.js") 15 | script(type="text/javascript") 16 | var _sf_startpt=(new Date()).getTime() 17 | body 18 | #container 19 | nav.panel 20 | !{include('sidebar')} 21 | section#content 22 | !{content} 23 | footer 24 | p.copyright © Alex R. Young | Contact | Generated with Pop | Cookies and Privacy 25 | script(type="text/javascript") 26 | var _sf_async_config = { uid: 39178, domain: 'alexyoung.org' }; 27 | (function() { 28 | function loadChartbeat() { 29 | window._sf_endpt = (new Date()).getTime(); 30 | var e = document.createElement('script'); 31 | e.setAttribute('language', 'javascript'); 32 | e.setAttribute('type', 'text/javascript'); 33 | e.setAttribute('src', 34 | (("https:" == document.location.protocol) ? "https://a248.e.akamai.net/chartbeat.download.akamai.com/102508/" : "http://static.chartbeat.com/") + 35 | "js/chartbeat.js"); 36 | document.body.appendChild(e); 37 | }; 38 | var oldonload = window.onload; 39 | window.onload = (typeof window.onload != 'function') ? 40 | loadChartbeat : function() { oldonload(); loadChartbeat(); }; 41 | })(); 42 | -------------------------------------------------------------------------------- /_layouts/post.jade: -------------------------------------------------------------------------------- 1 | !!! 5 2 | html(lang="en") 3 | head 4 | title #{post.title} 5 | meta(charset="utf-8") 6 | link(href="/stylesheets/screen.css", media="screen", rel="stylesheet", type="text/css") 7 | link(href="/javascripts/google-code-prettify/prettify.css", media="screen", rel="stylesheet", type="text/css") 8 | link(href="/stylesheets/small.css", media="only screen and (max-device-width: 480px)", rel="stylesheet", type="text/css") 9 | link(rel="alternate", type="application/rss+xml", title="RSS 2.0", href="/feed.rss") 10 | link(rel="alternate", type="application/atom+xml", title="Atom Feed", href="/feed.xml") 11 | script(type="text/javascript", src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js") 12 | script(type="text/javascript", src="/javascripts/google-code-prettify/prettify.js") 13 | script(type="text/javascript", src="/javascripts/site.js") 14 | script(type="text/javascript") 15 | var _sf_startpt=(new Date()).getTime() 16 | body 17 | #container 18 | nav.panel 19 | !{include('sidebar')} 20 | section#content 21 | header#header 22 | hgroup 23 | a#home(href="/") ← Home 24 | !{hNews(post)} 25 | !{disqus(post, 'alexyoung')} 26 | footer 27 | p.copyright © Alex R. Young | Contact | Generated with Pop | Cookies and Privacy 28 | script(type="text/javascript") 29 | var _sf_async_config = { uid: 39178, domain: 'alexyoung.org' }; 30 | (function() { 31 | function loadChartbeat() { 32 | window._sf_endpt = (new Date()).getTime(); 33 | var e = document.createElement('script'); 34 | e.setAttribute('language', 'javascript'); 35 | e.setAttribute('type', 'text/javascript'); 36 | e.setAttribute('src', 37 | (("https:" == document.location.protocol) ? "https://a248.e.akamai.net/chartbeat.download.akamai.com/102508/" : "http://static.chartbeat.com/") + 38 | "js/chartbeat.js"); 39 | document.body.appendChild(e); 40 | }; 41 | var oldonload = window.onload; 42 | window.onload = (typeof window.onload != 'function') ? 43 | loadChartbeat : function() { oldonload(); loadChartbeat(); }; 44 | })(); 45 | --------------------------------------------------------------------------------