@@ -1,25 +1,9 @@ | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="utf-8"> | |||
<title>404 - Earwig</title> | |||
<link rel="stylesheet" href="/static/main.css" type="text/css" /> | |||
</head> | |||
<body> | |||
<div id="container"> | |||
<div id="header"> | |||
<h1 id="head"><a class="incognito" href="/">¡punoℲ ʇoᴎ :ᔭ0ᔭ</a></h1> | |||
</div> | |||
<div id="content"> | |||
<div id="post"> | |||
<p>The page you're looking for doesn't exist – and I thought I had designed everything so well! *sniff*</p> | |||
<p>Did I delete it? Did I redesign my site and move everything around aimlessly? WAS IT ABDUCTED BY ALIENS!? Who knows? Not my web server.</p> | |||
<p>Well, you're welcome to <a href="/">look around a bit</a>!</p> | |||
</div> | |||
</div> | |||
<div id="footer"> | |||
<p>Copyright © 2011–2014 Ben Kurtovic • <a href="//github.com/earwig/earwig.github.com">View Source</a> • <a href="http://validator.w3.org/check?uri=referer">Valid HTML5</a></p> | |||
</div> | |||
</div> | |||
</body> | |||
</html> | |||
--- | |||
layout: base | |||
title: 404 | |||
--- | |||
<h1>¡punoℲ ʇoᴎ :ᔭ0ᔭ</h1> | |||
<div id="content"> | |||
<p>The page you're looking for doesn't exist. You're welcome to <a href="/">look around a bit</a> and try to find it.</p> | |||
</div> |
@@ -2,17 +2,27 @@ | |||
<html lang="en"> | |||
<head> | |||
<meta charset="utf-8"> | |||
<title>{{ page.title }} - Ben Kurtovic</title> | |||
<link rel="stylesheet" href="/static/main.css" type="text/css" /> | |||
<link rel="stylesheet" href="/static/syntax.css" type="text/css" /> <!-- shamelessly stolen from https://github.com/mojombo/tpw/blob/master/css/syntax.css --> | |||
<script src="/static/date_format.js" type="text/javascript"></script> | |||
<script type="text/javascript" src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> | |||
{% if page.title == "Home" %} | |||
<title>Ben Kurtovic</title> | |||
{% else %} | |||
<title>{{ page.title }} - Ben Kurtovic</title> | |||
{% endif %} | |||
<link rel="stylesheet" href="/static/main.css" /> | |||
<link rel="stylesheet" href="/static/syntax.css" /> <!-- shamelessly stolen from https://github.com/mojombo/tpw/blob/master/css/syntax.css --> | |||
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css"> | |||
<script src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> | |||
</head> | |||
<body> | |||
<div id="banner" class="banner-{% if page.title == "Home" %}large{% else %}small{% endif %}"> | |||
<a href="/"> | |||
<img src="/static/avatar.png" /> | |||
<h1>Ben Kurtovic</h1> | |||
</a> | |||
</div> | |||
<div id="container"> | |||
{{ content }} | |||
<div id="footer"> | |||
<p>Copyright © 2011–2014 Ben Kurtovic • <a href="//github.com/earwig/earwig.github.io">View Source</a> • <a href="http://validator.w3.org/check?uri=referer">Valid HTML5</a></p> | |||
<p>Copyright © 2011–{{ site.time | date: "%Y" }} Ben Kurtovic • <a href="//github.com/earwig/earwig.github.io">View Source</a> • <a href="http://validator.w3.org/check?uri=referer">Valid HTML5</a></p> | |||
</div> | |||
</div> | |||
</body> | |||
@@ -1,78 +0,0 @@ | |||
layout: base | |||
<div id="header"> | |||
<h1 id="head">Ben Kurtovic</h1> | |||
</div> | |||
<div id="content"> | |||
<table> | |||
<tr> | |||
<td id="left-box"> | |||
<table id="about"> | |||
<tr> | |||
<td id="about-tl" class="about-l dark-l">Email</td> | |||
<td id="about-tr" class="about-r dark-r"><a href="mailto:ben.kurtovic@gmail.com">ben.kurtovic@gmail.com</a><br /><a href="mailto:kurtovc2@illinois.edu">kurtovc2@illinois.edu</a></td> | |||
</tr> | |||
<tr> | |||
<td class="about-l light-l">GitHub</td> | |||
<td class="about-r light-r"><a href="//github.com/earwig">earwig</a></td> | |||
</tr> | |||
<tr> | |||
<td class="about-l dark-l">IRC</td> | |||
<td class="about-r dark-r"><a href="http://webchat.freenode.net/?channels=%23%23earwig">Earwig</a> on <a href="irc://irc.freenode.net">irc.freenode.net</a></td> | |||
</tr> | |||
<tr> | |||
<td class="about-l light-l">Wikipedia</td> | |||
<td class="about-r light-r"><a href="//en.wikipedia.org/wiki/User:The_Earwig">[[User:The Earwig]]</a></td> | |||
</tr> | |||
<tr> | |||
<td class="about-l dark-l">Twitter</td> | |||
<td class="about-r dark-r"><a href="//twitter.com/the_earwig">@the_earwig</a></td> | |||
</tr> | |||
<tr> | |||
<td class="about-l light-l">LinkedIn</td> | |||
<td class="about-r light-r"><a href="//linkedin.com/in/benkurtovic">benkurtovic</a></td> | |||
</tr> | |||
<tr> | |||
<td id="about-bl" class="about-l dark-l">PGP Key</td> | |||
<td id="about-br" class="about-r dark-r"><a href="http://pgp.mit.edu:11371/pks/lookup?search=0x8A19649AE8DBB515&fingerprint=on&op=index">E8DBB515</a></td> | |||
</tr> | |||
</table> | |||
<h2 class="index-header">Projects</h2> | |||
{{ content }} | |||
</td> | |||
<td id="right-box"> | |||
<div id="avatar-box"> | |||
<img id="avatar" src="//secure.gravatar.com/avatar/1b21804852ac50fee9f8e03cfa0da786?s=140" title="Earwig" alt="Earwig" /> | |||
</div> | |||
<p id="about-me-top">I'm a software developer and <a href="//en.wikipedia.org/">Wikipedian</a> currently studying computer science at the <a href="//illinois.edu/">University of Illinois at Urbana–Champaign</a>. I'm the guy behind <a href="//github.com/earwig/mwparserfromhell">mwparserfromhell</a> and <a href="//en.wikipedia.org/wiki/User:EarwigBot">EarwigBot</a>.</p> | |||
<p>On this page, you can find my identities on a few other sites, check out the projects I'm working on, and read some of my strange ramblings in blog form.</p> | |||
<h2 class="index-header">Posts</h2> | |||
<ul id="post-list"> | |||
{% for post in site.posts %} | |||
<li class="post">{{ post.date | date: "%b %d, %Y" }}: <a class="invert" href="{{ post.url }}">{{ post.title }}</a><br /><span class="description">{{ post.description }} (<a href="{{ post.url }}#disqus_thread" data-disqus-identifier="{{ post.id }}"></a>)</span></li> | |||
{% endfor %} | |||
</ul> | |||
<h2 class="index-header"><a class="incognito" href="//twitter.com/the_earwig">Tweets</a></h2> | |||
<div id="follow-button-box"><a href="//twitter.com/the_earwig" class="twitter-follow-button" data-show-count="false" data-dnt="true">Follow @the_earwig</a> | |||
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script></div> | |||
<a class="twitter-timeline" data-dnt="true" href="//twitter.com/the_earwig" data-widget-id="392426863047364608" data-chrome="noheader" data-tweet-limit="5">Tweets by @the_earwig</a> | |||
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script> | |||
</td> | |||
</tr> | |||
</table> | |||
</div> | |||
<script type="text/javascript"> | |||
var disqus_shortname = 'earwig'; | |||
var disqus_title = '{{ page.title }}'; | |||
var disqus_url = 'http://earwig.github.com{{ page.url }}'; | |||
var disqus_developer = 1; | |||
(function () { | |||
var s = document.createElement('script'); s.async = true; | |||
s.type = 'text/javascript'; | |||
s.src = '//' + disqus_shortname + '.disqus.com/count.js'; | |||
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(s); | |||
}()); | |||
</script> |
@@ -2,12 +2,10 @@ | |||
layout: base | |||
--- | |||
<div id="header"> | |||
<h1 id="head"><a class="incognito" href="/">{{ page.title }}</a></h1> | |||
</div> | |||
<h1>{{ page.title }}</h1> | |||
<div id="content"> | |||
<div id="post-info" class="description"> | |||
<span class="color-highlight">Date:</span> {{ page.date | date: "%a, %b %d, %Y" }} | |||
<div id="post-info"> | |||
<span><i class="fa fa-clock-o"></i> Date:</span> {{ page.date | date: "%B %-d, %Y" }} | |||
</div> | |||
<div id="post"> | |||
{{ content }} | |||
@@ -1,175 +1,208 @@ | |||
--- | |||
layout: home | |||
layout: base | |||
title: Home | |||
--- | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/earwig/mwparserfromhell">mwparserfromhell</a> <span class="description"><i>(Python + C // started May 2012)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>MWParserFromHell</i> is an easy-to-use and outrageously powerful Python parser for <a href="//mediawiki.org/">MediaWiki</a> wikicode. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/earwig/earwigbot">earwigbot</a> <span class="description"><i>(Python // started April 2009)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>EarwigBot</i> is a Python robot that edits <a href="//en.wikipedia.org/">Wikipedia</a> and interacts with people over <a href="//en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a>. It has <a href="//github.com/earwig/earwigbot-plugins">a separate repository for plugins</a>. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/earwig/bitshift">bitshift</a> <span class="description"><i>(Python + SQL + Web // started March 2014)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<a href="http://bitshift.it/"><i>Bitshift</i></a> is a semantic search engine for source code. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/earwig/copyvios">copyvios</a> <span class="description"><i>(Python + Web // started July 2009)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<a href="//tools.wmflabs.org/copyvios"><i>Copyvios</i></a> is a copyright violation detector running on <a href="//tools.wmflabs.org/">Wikimedia Labs</a>. | |||
</div> | |||
</div> | |||
<!-- Minor projects follow --> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/earwig/goldfish">goldfish</a> <span class="description"><i>(Java // started Jan 2013)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>GoLdfish</i> is a simple <a href="//en.wikipedia.org/wiki/Conway's_Game_of_Life">Game of Life</a> implementation in Java. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/Hypersonic/Starlorn">starlorn</a> <span class="description"><i>(Java // started May 2013)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>Starlorn</i> is a <a href="//en.wikipedia.org/wiki/Shoot_'em_up">shoot 'em up</a> game with a sweet upgrade system and randomized levels. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/Hypersonic/Cellar-Strider">cellar-strider</a> <span class="description"><i>(Python // started June 2012)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>Cellar-Strider</i> is a pseudo-<a href="//en.wikipedia.org/wiki/Roguelike">roguelike</a> game with a YAML-based level system. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/VjiaoBlack/Oriadnos">oriadnos</a> <span class="description"><i>(C // started May 2014)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>Oriadnos</i> is a 3D maze exploration game written from scratch using matrix manipulation code, <a href="//en.wikipedia.org/wiki/UV_mapping">UV texture mapping</a>, <a href="//en.wikipedia.org/wiki/Z-buffering">z-buffering</a>, and simple lighting. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/VjiaoBlack/terminvaders">terminvaders</a> <span class="description"><i>(C // started Oct 2013)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>Terminvaders</i> is a terminal-based multiplayer arcade game inspired by <a href="//en.wikipedia.org/wiki/Space_Invaders">Space Invaders</a>. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/VjiaoBlack/databanks">databanks</a> <span class="description"><i>(C // started Nov 2013)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>DataBanks</i> is a simple database with a terminal-based interface for notekeeping. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/stuycs-softdev-fall-2013/proj2-pd6-04-omnithinker">omnithinker</a> <span class="description"><i>(Python + Web // started Nov 2013)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i><a href="http://softdev-server.stuycs.org:6004/">OmniThinker</a></i> is an online brainstorming tool that displays relevant information from the web in a sidebar. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/stuycs-softdev-fall-2013/proj3-6-BAJA">BAJA</a> <span class="description"><i>(Python + Web // started Jan 2014)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i><a href="http://softdev-server.stuycs.org:6680/">BAJA</a></i> is a hacking game featuring multiple simulated websites, tied together by messages sent to the player from a mysterious individual using a fake email client. | |||
</div> | |||
</div> | |||
<!-- TO SORT above --> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/earwig/earwig.github.io">earwig.github.io</a> <span class="description"><i>(Web // started June 2011)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>earwig.github.io</i> is the site you're viewing right now in source code form. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/earwig/git-repo-updater">git-repo-updater</a> <span class="description"><i>(Python // started June 2011)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>Gitup</i> is a console script that allows you to easily pull to multiple git repositories at once. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/earwig/music-quizzer">music-quizzer</a> <span class="description"><i>(Python // started May 2011)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>MusicQuizzer</i> is a <a href="//en.wikipedia.org/wiki/Tk_(framework)">Tk</a>-based program that can help you prepare for your music final with randomly-generated listening quizzes. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/earwig/lobo">lobo</a> <span class="description"><i>(NetLogo // started Dec 2011)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>Lobo</i> is Logo Bolo: a re-envisioning of <a href="//en.wikipedia.org/wiki/Bolo_(video_game)">the classic tank game</a> by Stuart Cheshire in NetLogo. | |||
</div> | |||
</div> | |||
<div class="divider"></div> | |||
<div class="project"> | |||
<div class="project-head"> | |||
<a class="invert" href="//github.com/earwig/func-smash">func-smash</a> <span class="description"><i>(Python // started April 2012)</i></span> | |||
</div> | |||
<div class="project-body description"> | |||
<i>FuncSmash</i>, a small for-the-hell-of-it project, tries to generate random Python functions using Markov chains. | |||
</div> | |||
</div> | |||
<table> | |||
<tr> | |||
<td> | |||
<p>I'm a software developer and <a href="//en.wikipedia.org/">Wikipedian</a> currently studying computer science at the <a href="//illinois.edu/">University of Illinois at Urbana–Champaign</a>. My work mostly focuses on text parsing and analysis; I'm also interested in programming language theory and algorithm design.</p> | |||
</td> | |||
<td> | |||
<table> | |||
<tr> | |||
<td>Email</td> | |||
<td><a href="mailto:ben.kurtovic@gmail.com">ben.kurtovic@gmail.com</a><br /><a href="mailto:kurtovc2@illinois.edu">kurtovc2@illinois.edu</a></td> | |||
</tr> | |||
<tr> | |||
<td>GitHub</td> | |||
<td><a href="//github.com/earwig">earwig</a></td> | |||
</tr> | |||
<tr> | |||
<td>IRC</td> | |||
<td><a href="http://webchat.freenode.net/?channels=%23%23earwig">Earwig</a> on <a href="//freenode.net">irc.freenode.net</a></td> | |||
</tr> | |||
<tr> | |||
<td>Wikipedia</td> | |||
<td><a href="//en.wikipedia.org/wiki/User:The_Earwig">[[User:The Earwig]]</a></td> | |||
</tr> | |||
<tr> | |||
<td>Twitter</td> | |||
<td><a href="//twitter.com/the_earwig">@the_earwig</a></td> | |||
</tr> | |||
<tr> | |||
<td>LinkedIn</td> | |||
<td><a href="//linkedin.com/in/benkurtovic">benkurtovic</a></td> | |||
</tr> | |||
<tr> | |||
<td>PGP Key</td> | |||
<td><a href="http://pgp.mit.edu:11371/pks/lookup?search=0x8A19649AE8DBB515&fingerprint=on&op=index">E8DBB515</a></td> | |||
</tr> | |||
</table> | |||
</td> | |||
</tr> | |||
</table> | |||
<table> | |||
<tr> | |||
<td> | |||
<h2>Projects</h2> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/earwig/mwparserfromhell">mwparserfromhell</a> <span class="description"><i>(Python + C // started May 2012)</i></span> | |||
</div> | |||
<div> | |||
<i>MWParserFromHell</i> is an easy-to-use and outrageously powerful Python parser for <a href="//mediawiki.org/">MediaWiki</a> wikicode. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/earwig/earwigbot">earwigbot</a> <span class="description"><i>(Python // started April 2009)</i></span> | |||
</div> | |||
<div> | |||
<i>EarwigBot</i> is a Python robot that edits <a href="//en.wikipedia.org/">Wikipedia</a> and interacts with people over <a href="//en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a>. It has <a href="//github.com/earwig/earwigbot-plugins">a separate repository for plugins</a>. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/earwig/bitshift">bitshift</a> <span class="description"><i>(Python + SQL + Web // started March 2014)</i></span> | |||
</div> | |||
<div> | |||
<a href="http://bitshift.it/"><i>Bitshift</i></a> is a semantic search engine for source code. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/earwig/copyvios">copyvios</a> <span class="description"><i>(Python + Web // started July 2009)</i></span> | |||
</div> | |||
<div> | |||
<a href="//tools.wmflabs.org/copyvios"><i>Copyvios</i></a> is a copyright violation detector running on <a href="//tools.wmflabs.org/">Wikimedia Labs</a>. | |||
</div> | |||
</div> | |||
<h3>Other projects</h2> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/earwig/goldfish">goldfish</a> <span class="description"><i>(Java // started Jan 2013)</i></span> | |||
</div> | |||
<div> | |||
<i>GoLdfish</i> is a simple <a href="//en.wikipedia.org/wiki/Conway's_Game_of_Life">Game of Life</a> implementation in Java. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/Hypersonic/Starlorn">starlorn</a> <span class="description"><i>(Java // started May 2013)</i></span> | |||
</div> | |||
<div> | |||
<i>Starlorn</i> is a <a href="//en.wikipedia.org/wiki/Shoot_'em_up">shoot 'em up</a> game with a sweet upgrade system and randomized levels. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/Hypersonic/Cellar-Strider">cellar-strider</a> <span class="description"><i>(Python // started June 2012)</i></span> | |||
</div> | |||
<div> | |||
<i>Cellar-Strider</i> is a pseudo-<a href="//en.wikipedia.org/wiki/Roguelike">roguelike</a> game with a YAML-based level system. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/VjiaoBlack/Oriadnos">oriadnos</a> <span class="description"><i>(C // started May 2014)</i></span> | |||
</div> | |||
<div> | |||
<i>Oriadnos</i> is a 3D maze exploration game written from scratch using matrix manipulation code, <a href="//en.wikipedia.org/wiki/UV_mapping">UV texture mapping</a>, <a href="//en.wikipedia.org/wiki/Z-buffering">z-buffering</a>, and simple lighting. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/VjiaoBlack/terminvaders">terminvaders</a> <span class="description"><i>(C // started Oct 2013)</i></span> | |||
</div> | |||
<div> | |||
<i>Terminvaders</i> is a terminal-based multiplayer arcade game inspired by <a href="//en.wikipedia.org/wiki/Space_Invaders">Space Invaders</a>. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/VjiaoBlack/databanks">databanks</a> <span class="description"><i>(C // started Nov 2013)</i></span> | |||
</div> | |||
<div> | |||
<i>DataBanks</i> is a simple database with a terminal-based interface for notekeeping. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/stuycs-softdev-fall-2013/proj2-pd6-04-omnithinker">omnithinker</a> <span class="description"><i>(Python + Web // started Nov 2013)</i></span> | |||
</div> | |||
<div> | |||
<i><a href="http://softdev-server.stuycs.org:6004/">OmniThinker</a></i> is an online brainstorming tool that displays relevant information from the web in a sidebar. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/stuycs-softdev-fall-2013/proj3-6-BAJA">BAJA</a> <span class="description"><i>(Python + Web // started Jan 2014)</i></span> | |||
</div> | |||
<div> | |||
<i><a href="http://softdev-server.stuycs.org:6680/">BAJA</a></i> is a hacking game featuring multiple simulated websites, tied together by messages sent to the player from a mysterious individual using a fake email client. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/earwig/earwig.github.io">earwig.github.io</a> <span class="description"><i>(Web // started June 2011)</i></span> | |||
</div> | |||
<div> | |||
<i>earwig.github.io</i> is the site you're viewing right now in source code form. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/earwig/git-repo-updater">git-repo-updater</a> <span class="description"><i>(Python // started June 2011)</i></span> | |||
</div> | |||
<div> | |||
<i>Gitup</i> is a console script that allows you to easily pull to multiple git repositories at once. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/earwig/music-quizzer">music-quizzer</a> <span class="description"><i>(Python // started May 2011)</i></span> | |||
</div> | |||
<div> | |||
<i>MusicQuizzer</i> is a <a href="//en.wikipedia.org/wiki/Tk_(framework)">Tk</a>-based program that can help you prepare for your music final with randomly-generated listening quizzes. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/earwig/lobo">lobo</a> <span class="description"><i>(NetLogo // started Dec 2011)</i></span> | |||
</div> | |||
<div> | |||
<i>Lobo</i> is Logo Bolo: a re-envisioning of <a href="//en.wikipedia.org/wiki/Bolo_(video_game)">the classic tank game</a> by Stuart Cheshire in NetLogo. | |||
</div> | |||
</div> | |||
<div class="project"> | |||
<div> | |||
<a class="underlined" href="//github.com/earwig/func-smash">func-smash</a> <span class="description"><i>(Python // started April 2012)</i></span> | |||
</div> | |||
<div> | |||
<i>FuncSmash</i>, a small for-the-hell-of-it project, tries to generate random Python functions using Markov chains. | |||
</div> | |||
</div> | |||
</td> | |||
<td style="width: 50%; vertical-align: top;"> | |||
<h2>Posts</h2> | |||
<ul id="post-list"> | |||
{% for post in site.posts %} | |||
<li>{{ post.date | date: "%b %-d, %Y" }}: <a class="underlined" href="{{ post.url }}">{{ post.title }}</a><br /><span class="subtitle">{{ post.description }}<br /><!-- Category · --><a href="{{ post.url }}#disqus_thread" data-disqus-identifier="{{ post.id }}"></a></span></li> | |||
{% endfor %} | |||
</ul> | |||
</td> | |||
</tr> | |||
</table> | |||
<script type="text/javascript"> | |||
var disqus_shortname = 'earwig'; | |||
var disqus_title = '{{ page.title }}'; | |||
var disqus_url = 'http://earwig.github.com{{ page.url }}'; | |||
var disqus_developer = 1; | |||
(function () { | |||
var s = document.createElement('script'); s.async = true; | |||
s.type = 'text/javascript'; | |||
s.src = '//' + disqus_shortname + '.disqus.com/count.js'; | |||
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(s); | |||
}()); | |||
</script> |
@@ -1,125 +0,0 @@ | |||
/* | |||
* Date Format 1.2.3 | |||
* (c) 2007-2009 Steven Levithan <stevenlevithan.com> | |||
* MIT license | |||
* | |||
* Includes enhancements by Scott Trenda <scott.trenda.net> | |||
* and Kris Kowal <cixar.com/~kris.kowal/> | |||
* | |||
* Accepts a date, a mask, or a date and a mask. | |||
* Returns a formatted version of the given date. | |||
* The date defaults to the current date/time. | |||
* The mask defaults to dateFormat.masks.default. | |||
*/ | |||
var dateFormat = function () { | |||
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g, | |||
timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, | |||
timezoneClip = /[^-+\dA-Z]/g, | |||
pad = function (val, len) { | |||
val = String(val); | |||
len = len || 2; | |||
while (val.length < len) val = "0" + val; | |||
return val; | |||
}; | |||
// Regexes and supporting functions are cached through closure | |||
return function (date, mask, utc) { | |||
var dF = dateFormat; | |||
// You can't provide utc if you skip other args (use the "UTC:" mask prefix) | |||
if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) { | |||
mask = date; | |||
date = undefined; | |||
} | |||
// Passing date through Date applies Date.parse, if necessary | |||
date = date ? new Date(date) : new Date; | |||
if (isNaN(date)) throw SyntaxError("invalid date"); | |||
mask = String(dF.masks[mask] || mask || dF.masks["default"]); | |||
// Allow setting the utc argument via the mask | |||
if (mask.slice(0, 4) == "UTC:") { | |||
mask = mask.slice(4); | |||
utc = true; | |||
} | |||
var _ = utc ? "getUTC" : "get", | |||
d = date[_ + "Date"](), | |||
D = date[_ + "Day"](), | |||
m = date[_ + "Month"](), | |||
y = date[_ + "FullYear"](), | |||
H = date[_ + "Hours"](), | |||
M = date[_ + "Minutes"](), | |||
s = date[_ + "Seconds"](), | |||
L = date[_ + "Milliseconds"](), | |||
o = utc ? 0 : date.getTimezoneOffset(), | |||
flags = { | |||
d: d, | |||
dd: pad(d), | |||
ddd: dF.i18n.dayNames[D], | |||
dddd: dF.i18n.dayNames[D + 7], | |||
m: m + 1, | |||
mm: pad(m + 1), | |||
mmm: dF.i18n.monthNames[m], | |||
mmmm: dF.i18n.monthNames[m + 12], | |||
yy: String(y).slice(2), | |||
yyyy: y, | |||
h: H % 12 || 12, | |||
hh: pad(H % 12 || 12), | |||
H: H, | |||
HH: pad(H), | |||
M: M, | |||
MM: pad(M), | |||
s: s, | |||
ss: pad(s), | |||
l: pad(L, 3), | |||
L: pad(L > 99 ? Math.round(L / 10) : L), | |||
t: H < 12 ? "a" : "p", | |||
tt: H < 12 ? "am" : "pm", | |||
T: H < 12 ? "A" : "P", | |||
TT: H < 12 ? "AM" : "PM", | |||
Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""), | |||
o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4), | |||
S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10] | |||
}; | |||
return mask.replace(token, function ($0) { | |||
return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1); | |||
}); | |||
}; | |||
}(); | |||
// Some common format strings | |||
dateFormat.masks = { | |||
"default": "ddd mmm dd yyyy HH:MM:ss", | |||
shortDate: "m/d/yy", | |||
mediumDate: "mmm d, yyyy", | |||
longDate: "mmmm d, yyyy", | |||
fullDate: "dddd, mmmm d, yyyy", | |||
shortTime: "h:MM TT", | |||
mediumTime: "h:MM:ss TT", | |||
longTime: "h:MM:ss TT Z", | |||
isoDate: "yyyy-mm-dd", | |||
isoTime: "HH:MM:ss", | |||
isoDateTime: "yyyy-mm-dd'T'HH:MM:ss", | |||
isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'" | |||
}; | |||
// Internationalization strings | |||
dateFormat.i18n = { | |||
dayNames: [ | |||
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", | |||
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" | |||
], | |||
monthNames: [ | |||
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", | |||
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" | |||
] | |||
}; | |||
// For convenience... | |||
Date.prototype.format = function (mask, utc) { | |||
return dateFormat(this, mask, utc); | |||
}; |
@@ -1,236 +1,140 @@ | |||
body { | |||
max-width: 1000px; | |||
margin: auto; | |||
padding: 0 40px 0 40px; | |||
font-family: helvetica, arial, clean, sans-serif; | |||
margin: 0; | |||
background-color: white; | |||
color: black; | |||
font-family: sans-serif; /* TODO */ | |||
font-size: 16px; | |||
color: #000; | |||
background: #E0E0E0 url("/static/background.png") repeat top left; | |||
} | |||
p { | |||
line-height: 1.25em; | |||
} | |||
.color-highlight { | |||
color: #040; | |||
} | |||
a:link { color: #3d7751; text-decoration: none; } | |||
a:visited { color: #3d7751; text-decoration: none; } | |||
a:hover { color: #041; text-decoration: underline; } | |||
a:active { color: #403; text-decoration: underline; } | |||
.highlight, .highlighttable { | |||
background: #f2f2f2; | |||
border: 1px solid #e8e8e8; | |||
border-radius: 10px; | |||
padding-left: 16px; | |||
line-height: 1.35em; | |||
font-size: 14px; | |||
} | |||
.highlighttable { | |||
width: 100%; | |||
} | |||
.highlighttable .highlight { | |||
border: 0; | |||
} | |||
a.underlined:link, a.underlined:visited { text-decoration: underline; } | |||
a.underlined:hover, a.underlined:active { text-decoration: none; } | |||
.linenos { | |||
color: #888; | |||
} | |||
.description { | |||
font-size: 14px; | |||
} | |||
.index-header { | |||
padding-top: 15px; | |||
#banner { | |||
background-color: black; | |||
text-align: center; | |||
} | |||
pre { | |||
white-space: pre-wrap; | |||
#banner a { | |||
color: white; | |||
text-decoration: none; | |||
} | |||
code { | |||
background: #f2f2f2; | |||
border: 1px solid #e8e8e8; | |||
padding: 0 3px; | |||
#banner img { | |||
display: inline; | |||
padding: 2px 0.5em 0 0; | |||
vertical-align: top; | |||
} | |||
pre code { | |||
border: 0; | |||
padding: 0; | |||
#banner h1 { | |||
display: inline; | |||
font-family: sans-serif; /* TODO */ | |||
text-align: center; | |||
} | |||
div.project { | |||
border: 1px solid #DDD; | |||
border-radius: 5px; | |||
.banner-large { | |||
height: 94px; | |||
line-height: 94px; | |||
border-top: 6px solid #3d7751; | |||
} | |||
div.project-head { | |||
padding: 6px 15px 6px 15px; | |||
border-bottom: 1px solid #DDD; | |||
border-radius: 5px 5px 0px 0px; | |||
/* all I want is a simple background gradient without images! */ | |||
background: #E0E0E0; /* fallback (your browser is crap) */ | |||
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#E3E3E3), to(#CACACA)); /* Chrome, Safari 4+ */ | |||
background: -webkit-linear-gradient(top, #E3E3E3, #CACACA); /* Chrome 10+, Safari 5+ */ | |||
background: -moz-linear-gradient(top, #E3E3E3, #CACACA); /* Firefox 3.6+ */ | |||
background: -ms-linear-gradient(top, #E3E3E3, #CACACA); /* IE 10+ (lol) */ | |||
background: -o-linear-gradient(top, #E3E3E3, #CACACA); /* Opera 11.10+ */ | |||
background: linear-gradient(top, #E3E3E3, #CACACA); /* God-tier */ | |||
.banner-large img { | |||
height: 92px; | |||
} | |||
div.project-body { | |||
padding: 6px 15px 9px 15px; | |||
border-radius: 0px 0px 5px 5px; | |||
background: #F4F4F4; | |||
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#F9F9F9), to(#EFEFEF)); | |||
background: -webkit-linear-gradient(top, #F9F9F9, #EFEFEF); | |||
background: -moz-linear-gradient(top, #F9F9F9, #EFEFEF); | |||
background: -ms-linear-gradient(top, #F9F9F9, #EFEFEF); | |||
background: -o-linear-gradient(top, #F9F9F9, #EFEFEF); | |||
background: linear-gradient(top, #F9F9F9, #EFEFEF); */ | |||
.banner-large h1 { | |||
font-size: 2.5em; | |||
} | |||
div.divider { | |||
border-bottom: 1px solid #CCC; | |||
margin-top: 15px; | |||
margin-bottom: 15px; | |||
.banner-small { | |||
height: 66px; | |||
line-height: 66px; | |||
border-top: 4px solid #3d7751; | |||
} | |||
td.about-l { | |||
padding: 4px 12px 4px 12px; | |||
border-left: 1px solid #CCC; | |||
.banner-small img { | |||
height: 64px; | |||
} | |||
td.about-r { | |||
padding: 4px 12px 4px 12px; | |||
border-right: 1px solid #CCC; | |||
.banner-small h1 { | |||
font-size: 2em; | |||
} | |||
li.post { | |||
margin-bottom: 20px; | |||
#container { | |||
margin: 1.5em auto 0; | |||
max-width: 1000px; | |||
padding: 0 40px 0 40px; | |||
} | |||
td.light-l { background-color: #ECECEC; } | |||
td.dark-l { background-color: #DADADA; } | |||
td.light-r { background-color: #F7F7F7; } | |||
td.dark-r { background-color: #E5E5E5; } | |||
p#about-me-top { | |||
margin-top: 0px; | |||
#container p { | |||
line-height: 1.25em; | |||
} | |||
h1#head { | |||
margin-top: 0px; | |||
padding-top: 0px; | |||
margin-bottom: 0px; | |||
padding-bottom: 0px; | |||
text-align: center; | |||
#content p, #content ol, #content li { | |||
line-height: 1.75em; | |||
} | |||
div#container { | |||
margin: 30px auto 30px auto; | |||
border: 1px solid #999; | |||
border-radius: 10px; | |||
background-color: #FFF; | |||
.project { | |||
margin-bottom: 1.25em; | |||
} | |||
div#header { | |||
margin: 30px; | |||
padding: 35px 0px 35px 0px; | |||
border: 1px solid #999; | |||
border-radius: 10px 10px 0px 0px; | |||
/* see div.project-head for details */ | |||
background: #DDEEDD; | |||
background: -webkit-gradient(linear, left top, left bottom, from(#E4F1E4), to(#B1BEB1)); | |||
background: -webkit-linear-gradient(top, #E4F1E4, #B1BEB1); | |||
background: -moz-linear-gradient(top, #E4F1E4, #B1BEB1); | |||
background: -ms-linear-gradient(top, #E4F1E4, #B1BEB1); | |||
background: -o-linear-gradient(top, #E4F1E4, #B1BEB1); | |||
background: linear-gradient(top, #E4F1E4, #B1BEB1); | |||
.project div:nth-child(2) { | |||
font-size: 14px; | |||
} | |||
div#content { | |||
padding: 0 30px; | |||
#post-list li { | |||
margin-bottom: 1.25em; | |||
} | |||
div#footer { | |||
.subtitle { | |||
font-size: 14px; | |||
text-align: center; | |||
padding: 9px 4px 12px 4px; | |||
color: #222; | |||
} | |||
div#post-info { | |||
margin-left: 24px; | |||
} | |||
div#post p, div#post ol, div#post li { | |||
line-height: 1.75em; | |||
#post-info span { | |||
color: #777; | |||
} | |||
div#avatar-box { | |||
float: right; | |||
position: relative; | |||
left: 50px; | |||
margin-left: -40px; | |||
padding: 12px; | |||
background-color: #FFF; | |||
border: 1px solid #999; | |||
border-radius: 5px; | |||
-webkit-transform:rotate(3deg); | |||
-moz-transform:rotate(3deg); | |||
-o-transform:rotate(3deg); | |||
-ms-transform:rotate(3deg); | |||
pre { | |||
white-space: pre-wrap; | |||
} | |||
div#follow-button-box { | |||
float: right; | |||
code { | |||
background: #f2f2f2; | |||
border: 1px solid #e8e8e8; | |||
padding: 0 3px; | |||
} | |||
ul#post-list { | |||
padding-left: 1em; | |||
pre code { | |||
border: 0; | |||
padding: 0; | |||
} | |||
img#avatar { | |||
border-radius: 5px; | |||
.highlight, .highlighttable { | |||
background: #f2f2f2; | |||
border: 1px solid #e8e8e8; | |||
font-size: 14px; | |||
line-height: 1.35em; | |||
padding-left: 16px; | |||
} | |||
table#about { | |||
.highlighttable { | |||
width: 100%; | |||
} | |||
td#left-box { | |||
width: 50%; | |||
vertical-align: top; | |||
.highlighttable .highlight { | |||
border: 0; | |||
} | |||
td#right-box { | |||
padding-left: 25px; | |||
vertical-align: top; | |||
.linenos { | |||
color: #888; | |||
} | |||
td#about-tl { border-top-left-radius: 5px; border-top: 1px solid #AAA; } | |||
td#about-tr { border-top-right-radius: 5px; border-top: 1px solid #AAA; } | |||
td#about-bl { border-bottom-left-radius: 5px; border-bottom: 1px solid #AAA; } | |||
td#about-br { border-bottom-right-radius: 5px; border-bottom: 1px solid #AAA; } | |||
a:link { color: #373; text-decoration: none; } | |||
a:visited { color: #373; text-decoration: none; } | |||
a:hover { color: #040; text-decoration: underline; } | |||
a:active { color: #404; text-decoration: underline; } | |||
a.invert:link { text-decoration: underline; } | |||
a.invert:visited { text-decoration: underline; } | |||
a.invert:hover { text-decoration: none; } | |||
a.invert:active { text-decoration: none; } | |||
a.incognito:link { color: #000; text-decoration: none; } | |||
a.incognito:visited { color: #000; text-decoration: none; } | |||
a.incognito:hover { color: #000; text-decoration: underline; } | |||
a.incognito:active { color: #000; text-decoration: none; } | |||
#footer { | |||
color: #444; | |||
font-size: 85%; | |||
text-align: center; | |||
} |