---
layout: base
title: Home
projects:
    highlights:
        - name:        mwparserfromhell
          langs:       Python + C
          started:     May 2012
          description: An easy-to-use and outrageously powerful Python parser for <a href="//mediawiki.org/">MediaWiki</a> wikicode
        - name:        earwigbot
          langs:       Python
          started:     April 2009
          description: A modular 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>, with <a href="//github.com/earwig/earwigbot-plugins">a separate repository for plugins</a>
        - name:        crater
          langs:       C + Assembly
          started:     March 2015
          description: An emulator for the <a href="https://en.wikipedia.org/wiki/Sega_Game_Gear">Sega Game Gear</a>, with an included <a href="https://en.wikipedia.org/wiki/Zilog_Z80">Z80</a> assembler/disassembler
        - name:        copyvios
          langs:       Python + Web
          started:     July 2009
          description: A <a href="//tools.wmflabs.org/copyvios">copyright violation detector</a> for Wikipedia articles running on <a href="//tools.wmflabs.org/">Wikimedia Labs</a>
        - name:        bitshift
          langs:       Python + SQL + Web
          started:     March 2014
          description: A <a href="http://bitshift.benkurtovic.com/">semantic search engine</a> for source code
    others:
        - name:        calefaction
          langs:       Python + Web
          started:     December 2016
          description: A corporation manager and dashboard for <a href="https://www.eveonline.com/">EVE Online</a>
        - name:        kgrader
          langs:       Ruby
          started:     March 2016
          description: A code autograder for student homework submissions
        - name:        gravity
          repo:        EnacheB/Gravity
          langs:       C++
          started:     November 2015
          description: A multiplayer top-down orbital space shooter
        - name:        tfdclerk
          langs:       JavaScript
          started:     August 2015
          incomplete:  yes
          description: An English Wikipedia <a href="https://en.wikipedia.org/wiki/Wikipedia:User_scripts">user script</a> to automate common <a href="https://en.wikipedia.org/wiki/Wikipedia:Templates_for_discussion">templates for discussion</a> operations, including closures and relisting
        - name:        oriadnos
          repo:        VjiaoBlack/Oriadnos
          langs:       C
          started:     May 2014
          description: 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
        - name:        mal-decimal-scores
          langs:       JS
          started:     May 2014
          description: A Chrome extension that gives you finer control over <a href="http://myanimelist.net">MyAnimeList.net</a> scores
        - name:        BAJA
          repo:        stuycs-softdev-fall-2013/proj3-6-BAJA
          langs:       Python + Web
          started:     Jan 2014
          description: A <a href="http://softdev-server.stuycs.org:6680/">hacking game</a> featuring multiple simulated websites, tied together by messages sent to the player from a mysterious individual using a fake email client
        - name:        omnithinker
          repo:        stuycs-softdev-fall-2013/proj2-pd6-04-omnithinker
          langs:       Python + Web
          started:     Nov 2013
          description: An <a href="http://softdev-server.stuycs.org:6004/">online brainstorming tool</a> that displays relevant information from the web in a sidebar
        - name:        databanks
          repo:        VjiaoBlack/databanks
          langs:       C
          started:     Nov 2013
          description: A simple database with a terminal-based interface for notekeeping
        - name:        terminvaders
          repo:        VjiaoBlack/terminvaders
          langs:       C
          started:     Oct 2013
          description: A terminal-based multiplayer arcade game with a client&ndash;server model inspired by <a href="//en.wikipedia.org/wiki/Space_Invaders">Space Invaders</a>
        - name:        starlorn
          repo:        Hypersonic/Starlorn
          langs:       Java
          started:     May 2013
          description: A <a href="//en.wikipedia.org/wiki/Shoot_'em_up">shoot 'em up</a> game with a sweet upgrade system and randomized levels
        - name:        goldfish
          langs:       Java
          started:     Jan 2013
          description: A simple <a href="//en.wikipedia.org/wiki/Conway's_Game_of_Life">Game of Life</a> implementation in Java
        - name:        cellar-strider
          repo:        Hypersonic/Cellar-Strider
          langs:       Python
          started:     June 2012
          description: A pseudo-<a href="//en.wikipedia.org/wiki/Roguelike">roguelike</a> game with a YAML-based level system
        - name:        func-smash
          langs:       Python
          started:     April 2012
          description: A library that tries to generate random Python functions using Markov chains
        - name:        lobo
          langs:       NetLogo
          started:     Dec 2011
          description: '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'
        - name:        git-repo-updater
          langs:       Python
          started:     June 2011
          description: A console script that allows you to easily pull to multiple git repositories at once
        - name:        earwig.github.io
          langs:       Web
          started:     June 2011
          description: The site you're viewing right now in source code form
        - name:        music-quizzer
          langs:       Python
          started:     May 2011
          description: 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
---

<p id="bio">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&ndash;Champaign</a>. I'm interested in operating systems, networking, and security, and I've done a fair bit of work with databases and parsers. Want to chat? Contact me at <a href="mailto:ben.kurtovic@gmail.com">ben.kurtovic@gmail.com</a>.</p>
<div id="links">
    <div>GitHub<br /><a href="//github.com/earwig">earwig</a></div
    ><div>Freenode<br /><a href="http://webchat.freenode.net/?channels=%23%23earwig">Earwig</a></div
    ><div>Wikipedia<br /><a href="//en.wikipedia.org/wiki/User:The_Earwig">The Earwig</a></div
    ><div>Twitter<br /><a href="//twitter.com/benkurtovic">@benkurtovic</a></div
    ><div>LinkedIn<br /><a href="//linkedin.com/in/benkurtovic">benkurtovic</a></div
    ><div>PGP Key<br /><a href="http://pgp.mit.edu:11371/pks/lookup?search=0x8A19649AE8DBB515&amp;fingerprint=on&amp;op=index">E8DBB515</a></div>
</div>
<table id="work">
    <tr>
        <td>
            <h2>Projects</h2>
            <p>A look at what I've been up to for the past few years:</p>
            <h3>Highlights</h3>
            <ul class="work-list">
                {% for project in page.projects["highlights"] %}
                    <li>
                        <a class="underlined" href="//github.com/{% if project.repo %}{{ project.repo }}{% else %}earwig/{{ project.name }}{% endif %}">{{ project.name }}</a> <span class="subtitle"><i>({{ project.langs }} // started {{ project.started }}{% if project.incomplete %}<span class="incomplete"> // in development</span>{% endif %})</i></span><br />
                        <span class="subtitle">{{ project.description }}</span>
                    </li>
                {% endfor %}
            </ul>
            <h3>Other work</h3>
            <ul class="work-list">
                {% for project in page.projects["others"] %}
                    <li>
                        <a class="underlined" href="//github.com/{% if project.repo %}{{ project.repo }}{% else %}earwig/{{ project.name }}{% endif %}">{{ project.name }}</a> <span class="subtitle"><i>({{ project.langs }} // started {{ project.started }}{% if project.incomplete %}<span class="incomplete"> // in development</span>{% endif %})</i></span><br />
                        <span class="subtitle">{{ project.description }}</span>
                    </li>
                {% endfor %}
            </ul>
        </td>
        <td>
            <h2>Posts</h2>
            <div id="tags">
                Tags:
                {% comment %} Based on code from Christian Specht at http://stackoverflow.com/a/24744306/2712951 {% endcomment %}
                {% capture tags %}{% for tag in site.tags %}{{ tag[1].size | plus: 10000 }}{{ tag[1].first.date | date: "%Y%m%d" }}#{{ tag[0] }}#{{ tag[1].size }}{% unless forloop.last %}|{% endunless %}{% endfor %}{% endcapture %}
                {% assign sorted = tags | split: "|" | sort | reverse %}
                {% for tag in sorted %}
                    {% assign items = tag | split: "#" %}
                    <span data-tag="{{ items[1] }}" class="tag">{{ items[1] | replace: " ", "&nbsp;" }}&nbsp;<span class="subtitle">({{ items[2] }})</span></span>
                {% endfor %}
            </div>
            <ul id="post-list" class="work-list">
                {% for post in site.posts %}
                    <li data-tags="{{ post.tags | join: "|" }}">{{ post.date | date: "%b %-d, %Y" }}: <a class="underlined" href="{{ post.url }}">{{ post.title }}</a><br /><span class="subtitle">{{ post.description }}<br />{{ post.tags | join: ", " }} &middot; {% if post.draft %}<span class="draft">Draft</span>{% else %}<a href="{{ post.url }}#disqus_thread" data-disqus-identifier="{{ post.id }}"></a>{% endif %}</span></li>
                {% endfor %}
                <li id="null-post" data-tags="" style="display: none;"><i>No posts with these tags</i></li>
            </ul>
        </td>
    </tr>
</table>
<script>
    var disqus_shortname = 'earwig';
    var disqus_title = '{{ page.title }}';
    var disqus_url = '{{ site.url }}{{ 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>
