@@ -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"> | <html lang="en"> | ||||
<head> | <head> | ||||
<meta charset="utf-8"> | <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> | </head> | ||||
<body> | <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"> | <div id="container"> | ||||
{{ content }} | {{ content }} | ||||
<div id="footer"> | <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> | ||||
</div> | </div> | ||||
</body> | </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 | 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="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> | ||||
<div id="post"> | <div id="post"> | ||||
{{ content }} | {{ content }} | ||||
@@ -1,175 +1,208 @@ | |||||
--- | --- | ||||
layout: home | |||||
layout: base | |||||
title: Home | 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 { | 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; | 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; | 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; | 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%; | 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; | |||||
} |