Skip to content
Browse files

V2.0

  • Loading branch information...
1 parent 67c2771 commit c3eadd1654660fd16a4a3ebd74a375d62a9dbd44 @michaeldwan committed
View
1 .gitignore
@@ -0,0 +1 @@
+_site
View
2 _config.yml
@@ -0,0 +1,2 @@
+pygments: true
+permalink: /writings/:title.html
View
28 _layouts/default.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta name="author" content="Michael Dwan" />
+ <title>{{ page.title }}</title>
+ <link rel="stylesheet" href="/css/screen.css" type="text/css" media="screen, projection">
+ <link rel="stylesheet" href="/css/syntax.css" type="text/css" media="screen, projection">
+ <link href='http://fonts.googleapis.com/css?family=Droid+Serif:regular,bold' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Vollkorn' rel='stylesheet' type='text/css'>
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-9028210-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+ </head>
+ <body id="{{ page.body_id }}">
+ {{ content }}
+ </body>
+</html>
View
38 _layouts/post.html
@@ -0,0 +1,38 @@
+---
+layout: default
+body_id: post
+---
+
+<article>
+ <div class="content">
+ <header>
+ <p><a href="/">Michael Dwan</a></p>
+ <h1>{{ page.title }}</h1>
+ <p class="date">{{ page.date | date: "%A, %B %d, %Y" }}</p>
+ </header>
+ <section>
+ {{ content }}
+ </section>
+ </div>
+</article>
+<aside>
+ <div class="content">
+ <div id="disqus_thread"></div>
+ <script type="text/javascript">
+ var disqus_identifier = "{{ page.id }}";
+ var disqus_developer = 1;
+ (function() {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://michaeldwan.disqus.com/embed.js';
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ })();
+ </script>
+ <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript=michaeldwan">comments powered by Disqus.</a></noscript>
+ <a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>
+ </div>
+</aside>
+<footer>
+ <div class="content">
+ <p>Copyright 2010 Michael Dwan</p>
+ </div>
+</footer>
View
11 _posts/2008-01-30-what-could-you-build-in-600-lines-of-code.markdown
@@ -0,0 +1,11 @@
+---
+layout: post
+title: What can you build with 600 lines of code?
+---
+What can you build with 600 lines of code? That is the [question posed by Jeff Atwood](http://www.codinghorror.com/blog/archives/001043.html) over at CodingHorror.com (originally mentioned at [JCooney.net](http://jcooney.net/post/2007/08/15/Could-you-go-live-with-less-than-600-lines-of-code.aspx)). His post highlights how [37Signals](http://37signals.com) built [Ta-Da List](http://tadalist.com), a simple online task list with only 579 lines of Ruby code.
+
+> You read that right, not 60K or 600K but instead a commercial project in &lt; 600 lines of Ruby code.
+
+I would agree that the amount of code may not be the best measure of success, however lines of code is a fairly reliable indication of complexity. The fact that a production ready application can be built with such a _lack of complexity_ speaks volumes to the power and simplicity of [Ruby and Rails](http://rubyonrails.org). The ability to rapidly go from idea to production is the reason Ruby on Rails is a popular choice among web startups and entrepreneurs. Ruby on Rails is designed to abstract the developer from the mundane work and allow them to focus on what actually matters: building a product.
+
+Thanks Jeff for pointing out a real world example of a minimalistic "KISS" approach to building a product.
View
17 _posts/2008-02-06-coding-is-not-a-spectator-sport.markdown
@@ -0,0 +1,17 @@
+---
+layout: post
+title: Coding Is Not a Spectator Sport
+---
+Last year I gave a presentation to the Chicago .NET User Group and internally to [Clarity Consulting](http://claritycon.com) introducing Ruby on Rails for ASP.NET Developers. This presentation was my first time writing code in front of a crowd.
+
+I’ve given dozens of presentations both large and small, however the CNUG presentation was unlike anything I had ever experienced. My flaky laptop prevented a sample website I wrote from running and brought my demonstration to a grinding halt. Trying to track down a problem in front of a hundred people in a silent room is one of the seven layers of hell.
+
+Luckily Brian Eng of [SoftiesOnRails.com](http://softiesonrails.com/2007/9/13/rails-for-asp-net-developers-at-cnug) happened to be in the audience. He gave a tip that helped me get things back on track so I could demo at least a portion of the awesomeness that is Rails.
+
+Following the presentation the CTO of Clarity, Jon Rauschenberger, gave me a fantastic sentiment to keep in mind next time I give a presentation:
+
+> Writing code in front of a crowd generally goes either *really* well, or *really* badly... not much room for in between.
+
+What was the problem in the end? The Windows Vista firewall was preventing webrick from accepting requests. The solution? Head out the next week, pick up a Mac, and never look back.
+
+<p><center><object id="__sse4500448" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=rorfass-100614154518-phpapp01&rel=0&stripped_title=ruby-on-rails-for-aspnet-developers-4500448" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4500448" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=rorfass-100614154518-phpapp01&rel=0&stripped_title=ruby-on-rails-for-aspnet-developers-4500448" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></center></p>
View
7 _posts/2008-02-21-defenition-of-an-entrepreneur.markdown
@@ -0,0 +1,7 @@
+---
+layout: post
+title: Definition of an Entrepreneur
+---
+[Ted Turner](http://en.wikipedia.org/wiki/Ted_Turner) gives us the _real_ definition of an entrepreneur:
+
+> My son is now an "entrepreneur." That's what you're called when you don't have a job.
View
123 _posts/2010-07-03-customize-your-heroku-deployment.markdown
@@ -0,0 +1,123 @@
+---
+layout: post
+title: Customize Your Heroku Deployment
+---
+
+I love [Heroku](http://heroku.com). Their elegant `git push` deployment process is a great way to push code, but that's about it. If you've got extra work to perform, such as packaging and uploading assets to a CDN, you're out of luck.
+
+The solution? Roll our own Rake task that sandwiches `git push` with hooks for additional tasks:
+
+{% highlight bash %}
+ rake deploy:production
+{% endhighlight %}
+
+## The Code
+
+Throw this into `lib/tasks/_heroku/deploy.rake`. I'll explain the `_heroku` directory shortly.
+
+{% highlight ruby %}
+ # List of environments and their heroku git remotes
+ ENVIRONMENTS = {
+ :staging => 'myapp-staging',
+ :production => 'myapp-production'
+ }
+
+ namespace :deploy do
+ ENVIRONMENTS.keys.each do |env|
+ desc "Deploy to #{env}"
+ task env do
+ current_branch = `git branch | grep ^* | awk '{ print $2 }'`.strip
+
+ Rake::Task['deploy:before_deploy'].invoke(env, current_branch)
+ Rake::Task['deploy:update_code'].invoke(env, current_branch)
+ Rake::Task['deploy:after_deploy'].invoke(env, current_branch)
+ end
+ end
+
+ task :before_deploy, :env, :branch do |t, args|
+ puts "Deploying #{args[:branch]} to #{args[:env]}"
+ end
+
+ task :after_deploy, :env, :branch do |t, args|
+ puts "Deployment Complete"
+ end
+
+ task :update_code, :env, :branch do |t, args|
+ FileUtils.cd Rails.root do
+ puts "Updating #{ENVIRONMENTS[args[:env]]} with branch #{args[:branch]}"
+ `git push #{ENVIRONMENTS[args[:env]]} +#{args[:branch]}:master`
+ end
+ end
+ end
+{% endhighlight %}
+
+## Why is this awesome?
+
+### Multiple Environments
+
+The `ENVIRONMENTS` hash is used to dynamically build a deploy task for each environment:
+
+{% highlight bash %}
+ $ rake -T deploy
+ rake deploy:production # Deploy to production
+ rake deploy:staging # Deploy to staging
+{% endhighlight %}
+
+Just update the code so your environment names correspond to the proper git remote on Heroku. If you need more info on setting this up, check out Elijah Miller's [great writeup](http://jqr.github.com/2009/04/25/deploying-multiple-environments-on-heroku).
+
+### Dynamic Branch Deployment
+
+Your current local branch, whatever that may be, will be pushed to Heroku without requiring you to merge into `master`. It works by forcing master on Heroku to point to your branch even if the push is [not a fast-forward](http://rip747.wordpress.com/2009/04/20/git-push-rejected-non-fast-forward/). This is awesome if you frequently test feature or hotfix branches on staging before merging. Check out this great [diagram of a Git branching strategy](http://nvie.com/git-model) for more info.
+
+### Hooks
+
+Three extension hooks are available:
+1. `deploy:before_deploy`
+2. `deploy:update_code`
+3. `deploy:after_deploy`
+
+Since Rake is awesome, tasks with the same name will run in the order they were discovered. Thus, any task in your project with a name `deploy:before_deploy` will get executed in sequence as long as the task is defined **after** our primary deploy task. That's why the deploy task lives in the `_heroku` folder -- it would be loaded before our other rake tasks.
+
+### Example Hooks
+
+Here are a few samples I currently use on a few projects.
+
+This will run an `assets:deploy` task before_deploy which packages assets then uploads to S3:
+{% highlight ruby %}
+ namespace :deploy do
+ task :before_deploy, :env, :branch do |t, args|
+ Rake::Task['assets:deploy'].invoke(args[:env], args[:branch])
+ end
+ end
+{% endhighlight %}
+
+This one that notifies [Hoptoad](http://hoptoadapp.com) after you've successfully deployed:
+{% highlight ruby %}
+ namespace :deploy do
+ task :after_deploy, :env, :branch do |t, args|
+ Rake::Task['hoptoad:deploy'].invoke
+ end
+ end
+{% endhighlight %}
+
+Pushing branches willy-nilly to production could be trouble. This task, which is included in the [full gist](https://gist.github.com/8bdcba5fd08c10afbe54), will prompt you when deploying a non-master branch to production:
+
+{% highlight ruby %}
+ namespace :deploy do
+ task :before_deploy, :env, :branch do |t, args|
+ # Ensure the user wants to deploy a non-master branch to production
+ if args[:env] == :production && args[:branch] != 'master'
+ print "Continue deploying '#{args[:branch]}' to production? (y/n) " and STDOUT.flush
+ char = $stdin.getc
+ if char != ?y && char != ?Y
+ puts "Deploy aborted"
+ exit
+ end
+ end
+ end
+ end
+{% endhighlight %}
+
+## Conclusion
+
+This simple task maintains Heroku's simplicity while adding some of capistrano's extensibility and has served me well on projects both large and small. I'm excited to see what you can do with it -- so grab the [full gist](https://gist.github.com/8bdcba5fd08c10afbe54) and fork away!
View
316 css/screen.css
@@ -0,0 +1,316 @@
+/* =========== */
+/* = Common = */
+/* =========== */
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ vertical-align: baseline;
+ background: transparent;
+ font-size: 100%;
+ font-weight: inherit;
+ font-style: inherit;
+ font-family: inherit;
+}
+
+header, section, footer, aside, nav, article, figure {
+ display: block;
+}
+
+body {
+ font-size: 18px;
+ line-height: 1.5;
+ font-family: 'Droid Serif', Georgia, serif;
+}
+
+h1 {
+ font-family: 'Vollkorn', Georgia, Cambria, "Times New Roman", Times, serif;
+ font-size: 200%;
+}
+
+h2 {
+ font-family: 'Vollkorn', Georgia, Cambria, "Times New Roman", Times, serif;
+ font-size: 160%;
+}
+
+h3 {
+ font-family: 'Vollkorn', Georgia, Cambria, "Times New Roman", Times, serif;
+ font-size: 125%;
+}
+
+p, ul, ol, dl, pre, blockquote, table, form {
+ margin: 20px 0;
+}
+
+ul, ol {
+ padding-left: 60px;
+}
+
+a,
+a:visited {
+ color: #333;
+ text-decoration: none;
+ border-bottom: 1px dotted #333;
+}
+
+a:hover {
+ text-decoration: none;
+ border-bottom: 1px solid #333;
+}
+
+em {
+ font-style: italic;
+}
+
+strong {
+ font-weight: bold;
+}
+
+/* =========== */
+/* = Welcome = */
+/* =========== */
+
+#welcome {
+ background-color: #61AFBB;
+ color: #244448;
+ text-shadow: 0 1px 0 #A1B6BA;
+ font-size: 18px;
+}
+
+#welcome a,
+#welcome a:visited {
+ color: #333;
+ border-color: #333;
+}
+
+#welcome h1 {
+ margin: 50px auto 20px;
+ text-align: center;
+ font-size: 450%;
+ text-shadow: 3px 3px 0 #2E545A;
+ color: #f5f5f5;
+}
+
+#welcome h2 {
+ margin: 50px auto 20px;
+ font-size: 200%;
+ text-shadow: 2px 2px 0 #2E545A;
+ color: #f5f5f5;
+}
+
+#welcome section {
+ text-align: center;
+ width: 675px;
+ margin: 20px auto;
+}
+
+#welcome #about {
+ margin-top: 0;
+ text-align: left;
+ display: table;
+}
+
+#welcome #about #mugshot {
+ display: table-cell;
+ vertical-align: middle;
+ width: 200px;
+}
+
+#welcome #about img {
+ height: 150px;
+ width: 150px;
+ float: left;
+ padding: 5px;
+ background-color: #f5f5f5;
+ -moz-box-shadow: 3px 4px 4px rgba(0, 0, 0, 0.3);
+ -webkit-box-shadow: 3px 4px 4px rgba(0, 0, 0, 0.3);
+}
+
+#welcome #about p {
+ display: table-cell;
+ vertical-align: middle;
+}
+
+#welcome #about em {
+ font-style: normal ;
+ font-family: 'Reenie Beanie';
+ font-size: 170%;
+ border-bottom: 1px dashed #62868E;
+ text-shadow: none;
+ padding: 1px 5px 0;
+}
+
+#welcome #links {
+ margin: 40px auto;
+}
+
+#welcome #writings ul {
+ text-align: left;
+ list-style-type: none;
+ padding: 0;
+}
+
+#welcome li.post p {
+ display: table-cell;
+ width: 150px;
+ text-align: right;
+ vertical-align: middle;
+ padding: 10px;
+ font-size: 16px;
+ color: #407981;
+ text-shadow: 0 1px 0 #99ADB1;
+}
+
+#welcome li.post h3 {
+ display: table-cell;
+ vertical-align: middle;
+ padding: 10px;
+}
+
+#welcome footer {
+ color: #386B72;
+ font-size: 80%;
+ text-align: center;
+ border-top: 4px solid #5498A2;
+ width: 600px;
+ margin: 20px auto;
+ text-shadow: 0 1px 0 #96AAAD;
+}
+
+/* ======== */
+/* = Post = */
+/* ======== */
+
+#post {
+ background-color: #E3B561;
+}
+
+#post .content {
+ width: 850px;
+ margin: 0 auto;
+ -moz-box-shadow: 0 0 7px rgba(0, 0, 0, 0.5);
+ -webkit-box-shadow: 0 0 7px rgba(0, 0, 0, 0.5);
+ padding: 50px;
+}
+
+#post article {
+ background-color: #B3C873;
+}
+
+#post article .content {
+ background-color: #ECF2D9;
+ color: #2A2522;
+ padding: 0;
+ width: 950px;
+}
+
+#post header {
+ text-align: center;
+ padding: 20px 50px 10px;
+}
+
+#post header p {
+ margin: 0;
+}
+
+#post section {
+ padding: 10px 50px 50px;
+}
+
+#post div.highlight {
+ overflow: auto;
+ background-color: #F4F9EC;
+ line-height: 1.2em;
+ margin: 20px 0;
+ border: 1px dashed #9CAE64;
+}
+
+#post code {
+ font-family: consolas, 'lucida console', 'bitstream vera sans mono', 'courier new', monospace;
+ font-size: 15px;
+}
+
+#post blockquote {
+ margin: auto 30px;
+ font-family: proxima-nova-1, proxima-nova-2, 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Verdana, Arial, sans-serif;
+ font-size: 32px;
+ line-height: 40px;
+ color: #2A361F;
+}
+
+#post h1 {
+ font-size: 250%;
+}
+
+#post h2 {
+ border-top: 5px solid rgba(0, 0, 0, 0.1);
+ padding-top: 5px;
+ margin-top: 30px;
+}
+
+#post h3 {
+ margin-top: 18px;
+}
+
+#post aside {
+ border-top: 1px solid #281F0D;
+ background-color: #281F0D;
+ color: #CBC7BB;
+}
+
+#post aside .content {
+ background-color: #3B3127;
+ padding: 50px;
+ width: 850px;
+}
+
+#post aside a {
+ color: #CBC7BB;
+ border-bottom: 1px dotted #CBC7BB;
+}
+
+#post aside a:hover {
+ border-bottom: 1px solid #CBC7BB;
+}
+
+/* ============ */
+/* = Comments = */
+/* ============ */
+
+#disqus_thread h3 {
+ font-size: 225% !important;
+}
+
+#disqus_thread a.dsq-brlink {
+ display: none;
+}
+
+#disqus_thread .dsq-dc-logo {
+ display: none;
+}
+
+#disqus_thread .dsq-options {
+ display: none;
+}
+
+#post footer {
+ border-top: 1px solid #AF8C4B;
+ background-color: #E3B561;
+ color: #65360D;
+}
+
+#post footer .content {
+ background-color: #F2E2B9;
+ text-align: center;
+}
+
View
174 css/syntax.css
@@ -0,0 +1,174 @@
+
+.hll {
+ background-color: #ffffcc; }
+
+.c {
+ color: #b0b0b0;
+ font-style: italic; }
+
+.err {
+ border: 1px solid #FF0000; }
+
+.k {
+ color: #008000;
+ font-weight: bold; }
+
+.o {
+ color: #666666; }
+
+.cm {
+ color: #408080;
+ font-style: italic; }
+
+.cp {
+ color: #BC7A00; }
+
+.c1, .cs {
+ color: #408080;
+ font-style: italic; }
+
+.gd {
+ color: #A00000; }
+
+.ge {
+ font-style: italic; }
+
+.gr {
+ color: #FF0000; }
+
+.gh {
+ color: #000080;
+ font-weight: bold; }
+
+.gi {
+ color: #00A000; }
+
+.go {
+ color: #808080; }
+
+.gp {
+ color: #000080;
+ font-weight: bold; }
+
+.gs {
+ font-weight: bold; }
+
+.gu {
+ color: #800080;
+ font-weight: bold; }
+
+.gt {
+ color: #0040D0; }
+
+.kc, .kd, .kn {
+ color: #008000;
+ font-weight: bold; }
+
+.kp {
+ color: #008000; }
+
+.kr {
+ color: #008000;
+ font-weight: bold; }
+
+.kt {
+ color: #B00040; }
+
+.m {
+ color: #666666; }
+
+.s {
+ color: #BA2121; }
+
+.na {
+ color: #7D9029; }
+
+.nb {
+ color: #008000; }
+
+.nc {
+ color: #0000FF;
+ font-weight: bold; }
+
+.no {
+ color: #880000; }
+
+.nd {
+ color: #AA22FF; }
+
+.ni {
+ color: #999999;
+ font-weight: bold; }
+
+.ne {
+ color: #D2413A;
+ font-weight: bold; }
+
+.nf {
+ color: #0000FF; }
+
+.nl {
+ color: #A0A000; }
+
+.nn {
+ color: #0000FF;
+ font-weight: bold; }
+
+.nt {
+ color: #008000;
+ font-weight: bold; }
+
+.nv {
+ color: #19177C; }
+
+.ow {
+ color: #AA22FF;
+ font-weight: bold; }
+
+.w {
+ color: #bbbbbb; }
+
+.mf, .mh, .mi, .mo {
+ color: #666666; }
+
+.sb, .sc {
+ color: #BA2121; }
+
+.sd {
+ color: #BA2121;
+ font-style: italic; }
+
+.s2 {
+ color: #BA2121; }
+
+.se {
+ color: #BB6622;
+ font-weight: bold; }
+
+.sh {
+ color: #BA2121; }
+
+.si {
+ color: #BB6688;
+ font-weight: bold; }
+
+.sx {
+ color: #008000; }
+
+.sr {
+ color: #BB6688; }
+
+.s1 {
+ color: #BA2121; }
+
+.ss {
+ color: #19177C; }
+
+.bp {
+ color: #008000; }
+
+.vc, .vg, .vi {
+ color: #19177C; }
+
+.il {
+ color: #666666; }
View
BIN images/me.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
104 index.html
@@ -1,66 +1,38 @@
-<html>
- <head>
- <title>Michael Dwan</title>
- <style type="text/css">
- body {
- background-color: #CEB978;
- font-family: 'Lucida Grande';
- }
-
- div#wrapper {
- margin: 100px auto;
- background-color: white;
- padding: 25px;
- text-align: center;
- width: 600px;
- background-color: #615441;
- }
-
- h1 {
- font-size: 400%;
- color: white;
- }
-
- div#links {
- color: white;
- }
-
- div#links a {
- padding: 5px 10px;
- color: white;
- text-decoration: none;
- }
-
- div#links a:hover {
- background-color: #DC782A;
- color: #fff;
- }
- </style>
- </head>
- <body>
- <div id='wrapper'>
- <h1>
- Michael Dwan
- </h1>
- <div id="links">
- <a href="http://www.twitter.com/michaeldwan">Twitter</a>
- |
- <a href="http://www.github.com/michaeldwan">GitHub</a>
- |
- <a href="http://www.facebook.com/michaeldwan">Facebook</a>
- |
- <a href="http://www.linkedin.com/in/michaeldwan">LinkedIn</a>
- </div>
- </div>
- <script type="text/javascript">
- var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
- document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
- </script>
- <script type="text/javascript">
- try {
- var pageTracker = _gat._getTracker("UA-9028210-1");
- pageTracker._trackPageview();
- } catch(err) {}
- </script>
- </body>
-</html>
+---
+body_id: welcome
+layout: default
+title: Michael Dwan
+---
+<link href='http://fonts.googleapis.com/css?family=Reenie+Beanie' rel='stylesheet' type='text/css'>
+<header>
+ <h1>Michael Dwan</h1>
+</header>
+<section id="about">
+ <div id="mugshot">
+ <img src="images/me.jpg"/>
+ </div>
+ <p>
+ Hello. My name is <em>Michael Dwan</em>. I'm a <em>web developer/designer</em> living in <em>Chicago</em>. I love <em>design, startups, &amp; making things work</em>. When not changing the world, I enjoy <em>photography, golf, &amp; hiking</em>.
+ </p>
+</section>
+<section id="links">
+ You can follow me on
+ <a href="http://www.twitter.com/michaeldwan">Twitter</a>,
+ ogle my code at <a href="http://www.github.com/michaeldwan">GitHub</a>,
+ and stalk me on <a href="http://www.facebook.com/michaeldwan">Facebook</a>.
+</section>
+<section id="writings">
+ <h2>Writings</h2>
+ <ul>
+ {% for post in site.posts %}
+ <li class="post">
+ <p>{{ post.date | date: "%b %d, %Y" }}</p>
+ <h3><a href="{{ post.url }}">{{ post.title }}</a></h3>
+ </li>
+ {% endfor %}
+ </ul>
+</section>
+<footer>
+ <p>Copyright 2010 Michael Dwan</p>
+</footer>
+

0 comments on commit c3eadd1

Please sign in to comment.
Something went wrong with that request. Please try again.