Here are some things I've done:

  • Zipf-Aware Word Embedding Lookup [github]
  • Zipf's Law tells us that certain words occur in text more frequently than others, which means that word embeddings are not accessed equally often. Designing a word embedding access scheme to take advantage of Zipf's Law---such as by delegating uncommon words to be handled by particular threads but allowing frequent words to be handled by any thread---can achieve better throughput (embeddings accessed per unit time) than a scheme that treats all words equally.

  • Quiz Bowl Answer Frequency List Generator [github]
  • There are thousands of topics that are asked about in quiz bowl, so how should we decide which ones to prioritize in our studying?

    This frequency list generator crawls through packets of quiz bowl questions, extracts the answers, and compiles a list of all the answers arranged by frequency. Now players can see quantitatively which topics are more common than others.

  • Flashcard Viewer [github]
  • As a member of my university's quiz bowl team, I have to learn lots of things. Many people find flashcards to be a helpful study aid for competitions or exams, so I wrote this program to reduce the hassle of hand-writing all those cards. It even tracks the user's statistics on each card so she can see what she needs to brush up on.

    An example run of three flashcards from the art deck.

  • Finite State Machine [github]
  • Regular language membership can be decided by running an input word through the language's corresponding finite state machine (FSM). When an FSM has many states or the input word is long, it can take considerable time to hand-check membership. This program sets up an FSM, feeds it the input word, and displays the current configuration of the FSM for the user to examine. This program also supports non-determinism, which is considerably more difficult to trace by hand for large FSMs.