#+title: Projects
#&summary
Where all the prominent projects are listed.
#&
#+license: cc0
#+startup: showall
#&fullpage
#&toc

* Projects

These are my projects, new and old.

#++exec
#+BEGIN_SRC python3
  top_projs = (
      'indirectassassin',
      'magicng',
      ('suum', 'SUUM', 'Webcomic drawn in the art style of <em>banal naivism</em>',
       'http://suum.metanohi.name/'),
      'gravnoise',
      'hbcht',
      'mege',
      'dungeoncrawl',
      'pumila',
      'yelljfish',
      'exoskelegram',
      'desurveil',
      'aeltei',
      'alart',
      'shadowloss',
      'alp',
      'electruth',
      'kvigall',
      'forestquest',
      'dililatum',
      'enigma',
      ('films', 'nohifilms', "Niels' films", 'http://films.metanohi.name/'),
      ('nohix', 'nohiX', 'Small web experiments, some of them useful', 'http://nohix.metanohi.name/'),
      ('natur', "Niels' Nature", 'Watch Niels as he spouts nonsense about nature', 'http://nature.metanohi.name/'),
      )
   
  other_projs = (
      'luncheon',
      'textmation',
      'beepfun',
      ('ticso', 'Create dynamic functions in C uglily', 'https://gitorious.org/ticso'),
      'sleinlib',
      'zebralligator',
      'kando',
      'bolg',
      'pebsaq',
      'minmailist',
      ('drget', 'Get media from Danmarks Radio', 'https://gitorious.org/drget'),
      ('folketingetmeninger', 
  'A small Python script to download and show the opinions of the Danish parties',
  'http://projects.metanohi.name/misc/folketingetmeninger.py.gz'),
      'nanonote',
      'totxt',
      ('pdfsplit', 'A small Python script to split PDF files on a page-basis',
       'http://projects.metanohi.name/misc/pdfsplit.tar.gz'),
      'dotbox',
      'vit',
      ('raipaw', 'A pseudo-random IPA word generator.',
       'http://projects.metanohi.name/misc/raipaw.py.gz'),
      ('woiwo', 'Find words in words',
       'http://projects.metanohi.name/misc/woiwo.py.gz'),
      ('resistorpair', 'Calculate which standard resistors to use for a specific resistance',
       'http://projects.metanohi.name/misc/resistorpair.py.gz'),
      'qvikconfig',
      'htmlentitiesdecode',
      ('gadon', 'Creates scary cirle animations reminiscent of heartbeats',
       'http://projects.metanohi.name/misc/gadon.tgz'),
      ('colchs', 'A simple GTK color chooser',
       'http://projects.metanohi.name/misc/colchs.tgz'),
      ('Japanese web apps', 'Javascript/CSS experiments with a theme',
       'http://projects.metanohi.name/jap/'),
      ('wikiaq', 'A quiz system using Wikipedia articles',
       'http://projects.metanohi.name/misc/wikiaq-0.1.tar.gz'),
      ('BiBBoB 0.1.1', "A simple sound wave generator (older versions: \
  <a href='http://projects.metanohi.name/misc/bibbob-0.1.tar.gz'>BiBBoB 0.1</a>)",
       'http://projects.metanohi.name/misc/bibbob-0.1.1.tar.gz'),
      ('data2wav', 'Converts all data to sound (and back again)',
       'http://projects.metanohi.name/misc/data2wav.tgz'),
      ('pitivi-smil', "A workaround to make PiTiVi XPTV files get rendered using \
  Kino. No support for PiTiVi's more advanced features.",
       'http://projects.metanohi.name/misc/pitivi-smil.tgz'),
      ('googolplex', 'A program that attempts to print one googolplex. \
  If saved to a file, this requires 1 googol + 1 bytes.',
       'http://projects.metanohi.name/misc/googolplex.c'),
      ('data2png', 'Save data as a png file, and restore the data from the png file.',
       'http://projects.metanohi.name/misc/data2png.tar.gz'),
      ('stanimate', 'A bash script to aid in the creation of stop motion films.',
       'http://projects.metanohi.name/misc/stanimate.gz'),
      ('mssrnm (mass rename)', 'A bash script to rename a bunch of files into files \
  "001.jpg", "002.jpg", "003.jpg", etc.',
       'http://projects.metanohi.name/misc/mmsrnm.gz'),
      )
  
  old_top_projs = (
      'forbi',
      'naghni',
      'movact',
      'noncrawl',
      'wordwork',
      'simplechat',
      ('words', 'words', 'Words and sentences. Not a blog.', 'http://words.metanohi.name/'),
      ('pictures', 'Pictures', 'Pictures uploaded by me', 'http://pictures.metanohi.name/'),
      ('eonaton', 'Eon Aton', 'An underdeveloped RPG-style JS system and a story', 'http://projects.metanohi.name/eonaton/'),
      'zita',
      'cln',
      ('algo', 'Algo', 'A JavaScript window manager', 'http://projects.metanohi.name/algo/'),
      'an5w',
      ('canvas', 'Experimenting with canvas', 'Old HTML canvas element experiments', 'http://projects.metanohi.name/canvas/'),
      ('bsq', 'Brainy Stickman Quiz', 'Sidescroller/quiz based on the HTML canvas element', 'http://projects.metanohi.name/bsq/'),
      ('snake', 'JavaScript Snake', 'Arrow keys to move, PageUp and PageDown to adjust speed.', 'http://projects.metanohi.name/snake/'),
      ('gt3000', 'GT 3000', 'Retro JS mini racing game.', 'http://projects.metanohi.name/gt3000/'),
      ('sq', "Satan's Quest", 'Retro RPG-style JS minigame. You are Gabruel.', 'http://projects.metanohi.name/sq/'),
      ('evolution', 'Evolution', 'Notice the intelligence.', 'http://projects.metanohi.name/evolution/'),
      ('roptoligs', 'roptoligs', 'RPG project with planned modules and games',
       'http://roptoligs.metanohi.name/'),
      )
  
  other_old_projs = (
      'sadbipws',
      'bito',
      'nalgh',
      ('Graphical web experiments',
       "Some of them'll work, while some of them might crash your browser.",
       'http://projects.metanohi.name/x/'),
      ('cheatbibtex', '''\
  Provides an alternative way of dealing with BiBTeX bibliographies. Use BiBLaTeX
  instead of cheatbibtex (cheatbibtex isn't that great, while BiBLaTeX is quite
  the LaTeX package).''', 'http://projects.metanohi.name/misc/cheatbibtex-0.1.tar.gz'),
      ('dsktp', 'A JS wm like Algo',
       'http://projects.metanohi.name/dsktp/'),
      ('webCLI', 'A CLI lookalike in JavaScript with XML',
       'http://projects.metanohi.name/webcli/'),
      'wontofor',
      ('lapyrint', 'A stupid maze solver. Includes example labyrinths.',
       'http://projects.metanohi.name/misc/lapyrint.tar.gz'),
      ('poemgen', 'A poem generator using Identi.ca blog posts as its source',
       'http://projects.metanohi.name/poemgen/'),
      ('problist', "A newbie's way of programming permutations in Python. Kept here for its funny code and misuse of terms",
       'http://projects.metanohi.name/misc/problist.tar.gz'),
      ('The Life of a Snowman', "Life can be cruel towards snowmen. This is proof.",
       'http://projects.metanohi.name/snowman/'),
      ('Katten Pedro (Pedro the Cat)', "A comic I drew during a vacation in Mallorca.",
       'http://projects.metanohi.name/pedro/'),
      ('Misc.', 'Very old stuff.',
       'http://projects.metanohi.name/misc/'),
      )
  
  #################################
  
  boxtemplate = '''\
  <li>
    <a href='{url}' style='background-image: url(img/{name}.png);'>
  {title}
    </a>
    <dfn>{description}</dfn>
  </li>
  '''
  
  listtemplate = '''\
  <dt><a href='{url}'>{title}</a></dt>
  <dd>{description}</dd>
  '''
  
  def getparts(name, no_name=False):
      if isinstance(name, tuple):
          if no_name:
              title, desc, url = name
          else:
              name, title, desc, url = name
      else:
          orgpath = misc.get_org_path(os.path.join(page.pathdir, name))
          url = './{name}'.format(name=name)
          if orgpath.endswith('index.org'):
              url += '/'
          a = htmlgen.org_to_abstract(orgpath, isfile=True, only_metadata=True)
          title, desc = a.title, a.summary
      if no_name:
          return title, desc, url
      else:
          return name, title, desc, url
  
  def boxprojs(projs):
      print("<ul class='projectboxes'>")
      for name in projs:
          name, title, desc, url = getparts(name)
          print(boxtemplate.format(name=name, url=url, title=title, description=desc))
      print('</ul>')
      
  def listprojs(projs):
      print("<dl>")
      for name in projs:
          title, desc, url = getparts(name, True)
          print(listtemplate.format(url=url, title=title, description=desc))
      print('</dl>')
  
#+END_SRC

** Pretty useful and not very buggy

#++exec
#+BEGIN_SRC python
boxprojs(top_projs)
#+END_SRC

#&clear
*** Less prominent

#++exec
#+BEGIN_SRC python
listprojs(other_projs)
#+END_SRC


#+mark: old
** Less useful (and in a few cases a bit more buggy)
  
#++exec
#+BEGIN_SRC python
boxprojs(old_top_projs)
#+END_SRC

#&clear
*** Less prominent

#++exec
#+BEGIN_SRC python
listprojs(other_old_projs)
#+END_SRC

