# -*- org-export-html-auto-postamble:nil -*-
#+TITLE:   Dr. Eric Schulte
#+OPTIONS: toc:t num:nil ^:nil
#+STARTUP: hideblocks
#+HTML_HEAD: <link rel="stylesheet" href="data/stylesheet.css" type="text/css">
#+HTML_HEAD: <script type="text/javascript" src="data/homepage.js">

# font
#+HTML: <link href='http://fonts.googleapis.com/css?family=Ubuntu' rel='stylesheet' type='text/css'/>

# me
#+HTML: <a href="http://eschulte.github.io/gpolygon/?image=http://cs.unm.edu/~eschulte/data/eric-schulte.jpg" title="right click to see evolved approximation"><canvas id="me" width="300" height="300"></div></a>

# contact
#+HTML: <div id="contact"><tt>eschulte-at-grammatech.com</tt></div>

# PGP key
#+HTML: <div id="pgp"><a href="data/eschulte-key.txt" title="PGP Key"><tt>FA8D C2C3 E8A0 A749 34CD  9DCF 3C1B 8581 614C A05D</tt></a></div>

# Add the following to the <body> tag after export.
#   onload="setup();" 

** Research
   :CUSTOM_ID: research

I research methods of automating software development and reverse
engineering tasks.  My work benefits from the understanding of
software as an evolved system.

I am the /Director of Automated Software Engineering/ at GrammaTech,
where I lead the /Program Synthesis/ and /Binary Rewriting/ research
areas.  At GrammaTech I develop techniques automating the analysis,
reverse engineering, maintenance, improvement, and synthesis of
software systems.  These techniques apply variously to software source
code repositories and/or to stripped binary executables.

** Background
   :CUSTOM_ID: background

- As of August 2018 I am Director of Automated Software Engineering at
  GrammaTech.  At GrammaTech I get to work on the automation of
  software engineering tasks including refactoring, bug-injection,
  decompilation, and binary rewriting for hardening and program
- As of July 2014 I have completed my degree at the University of New
  Mexico and accepted a position at GrammaTech.
- From August 2009 through July 2014 I was enrolled as a doctoral
  student at the University of New Mexico as a member of Stephanie
  Forrest's Adaptive Computation Group.
- For the five years previous to graduate school, I was employed by
  Mitre, a Federally Funded Research and Development Center.  During
  that time I was promoted to the position of /Senior AI Engineer/ and
  played a key technical role supporting project Argus(PDF).
- I completed my undergraduate studies at Kenyon College with a
  semester at the Budapest semester in Mathematics.  I graduated with
  a BA in mathematics and a minor in philosophy.

** Software
   :CUSTOM_ID: software

I've written, maintained or significantly contributed to the following
software which includes large open-source projects, projects currently
under active development at GrammaTech, and small utilities (presented
in order of significance and activity).

- SOFTWARE-EVOLUTION-LIBRARY (SEL) is a common lisp library for the
  programmatic modification and evaluation of software.  See the SEL
  Manual for more information.
- Binary Analysis and Reverse Engineering.  See this blog post
  announcing the open-source release of these tools.
  - GTIRB Intermediate Representation for Binary analysis and
    transformation.  Includes a Protobuf specification and a reference
    C++ library.
  - ddisasm A fast and accurate disassembler.  A Datalog engine powers
    this high performance re-assemblable disassembler
  - gtirb-pprinter Pretty printer from GTIRB to assembly code
- Manipulation of C-language (and other) Abstract Syntax Trees:
  - clang-mutate manipulates C-family ASTs with Clang
  - cil-mutate manipulates C Intermediate Language ASTs with CIL
  - llvm-mutate manipulates LLVM IR with an LLVM compiler pass
- CURRY-COMPOSE-READER-MACROS for concise expression of function
  partial application and composition in Common Lisp.  I've also
  implemented something similar for Emacs Lisp in curry-compose.el.
- GRAPH is a Common Lisp library for graphs manipulation and analysis.
- Babel adds /literate programming/ and /reproducible research/
  functionality to Org-mode, a major mode of the Emacs text editor.
- Rinari is a /Ruby on Rails/ minor mode for Emacs.
- Manipulation of ELF files:
  - elf a CLOS based API for Elf file manipulation in Common Lisp
  - rw-elf a simpler C library for ELF file manipulation
- DELTA-DEBUG is a Common Lisp delta debugging implementation.
# - tracer is a simple =ptrace= based utility for tracing the execution
#   of x86 assembly code.
- ONCs is a prototype fully distributed lisp virtual machine.
# - gpolygon is a toy steady state genetic algorithm which matches
#   polygons to images.  It runs entirely in the browser making heavy
#   use of the HTML5 canvas element.

# - Emacs Starter Kit is a structured extensible default configuration
#   for Emacs implemented using literate Org-mode files.
# - el-go is an Emacs mode for playing the game of Go.
# - data-wrapper wraps text data in a portable shell script enable
#   sharing of both data and analysis
# - ixm-collector allows IXM's to report back to central collector
# - ixm-repl allows interaction with a tribe of IXM from within a
#   Clojure repl

** Publications
   :CUSTOM_ID: publications

- Antonio Flores-Montoya, Eric Schulte
  _Datalog Disassembly_
  /arXiv Pre-Print 2019/
  (PDF, Bibtex)

- Eric Schulte, Suan Yong, Dave Melski.
  _Inuring: Live Attacker-guided Repair_
  /Workshop on Forming an Ecosystem Around Software Transformation 2019/ (PDF, Bibtex)

- Vineeth Kashyap, Jason Ruchti, Lucja Kot, Emma Turetsky, Rebecca Swords, David Melski, Eric Schulte
  _Automated Customized Bug-Benchmark Generation_
  /Source Code Analysis and Manipulation (SCAM) 2019 (*distinguished paper*)/
  (PDF, Bibtex, Data set)

- Eric Schulte, Jonathan Dorn, Antonio Flores Montoya, Aaron Ballman, Tom Johnson
  _GTIRB: Intermediate Representation for Binaries_
  /arXiv Pre-Print 2019/
  (PDF, Bibtex)

- Eric Schulte, Contributors
  _Software Evolution Library_
  /Manual 2018/
  (Library Source, Manual HTML, Bibtex)

- Eric Schulte, Jason Ruchti, Matt Noonan, David Ciarletta, Alexey Loginov
  _Evolving Exact Decompilation_
  /Workshop on Binary Analysis Research 2018/
  (PDF, Bibtex, Blog post)

- Deborah Katz, Jason Ruchti, Eric Schulte
  _Using Recurrent Neural Networks for Decompilation_
  /Software Analysis, Evolution and Reengineering (SANER) 2018/
  (PDF, Bibtex)

- Benoit Baudry, Nicolas Harrand, Eric Schulte, Chris Timperley, Shin
  Hwei Tan, Marija Selakovic, Emamurho Ugherughe _A spoonful of DevOps
  helps the GI go down_ /Genetic Improvement Workshop 2018/
  (PDF, Bibtex)

- Joel Lehman, /et. al./
  _The Surprising Creativity of Digital Evolution: A Collection of Anecdotes from the Evolutionary Computation and Artificial Life Research Communities_
  /arXiv 2018/ (PDF, Bibtex)

- Vineeth Kashyap, Rebecca Swords, Eric Schulte, David Melski.
  _MuSynth: Program Synthesis via Code Reuse and Code Manipulation_
  /International Symposium on Search Based Software Engineering 2017/
  (PDF, Bibtex)

- Eric Schulte, Michael McDougal, Dave Melski.
  _Software Transformation: Applications, Tools, Challenges, and Program Representation_
  /Workshop on Forming an Ecosystem Around Software Transformation 2016/ (PDF, Bibtex)

- Eric Schulte, Westley Weimer, Stephanie Forrest.
  _Repairing COTS router firmware without access to source code or test suites: A case study in evolutionary software repair_
  /Workshop on Genetic Improvement 2015 (*best paper*)/ (PDF, Bibtex)

- Eric Schulte.  _Neutral Networks of Real-World Programs and their
  Application to Automated Software Evolution_ /Ph.D. Dissertation,
  University of New Mexico 2014/ (PDF, HTML, Bibtex slides, more)

- Eric Schulte, Jonathan Dorn, Stephen Harding, Stephanie Forrest,
  Westley Weimer.  _Post-compiler Software Optimization for Reducing
  Energy_ /Architectural Support for Programming Languages and
  Operating Systems (ASPLOS) 2014/ (PDF, slides, Bibtex)

- Eric Schulte, Zachary P. Fry, Ethan Fast, Westley Weimer, Stephanie
  Forrest.  _Software Mutational Robustness_ /Genetic Programming and
  Evolvable Machines 2013/ (arXiv, Springer, PDF, Bibtex, followup work by Harrand et al.)

- Eric Schulte, Jonathan DiLorenzo, Westley Weimer, Stephanie
  Forrest. _Automated Repair of Binary and Assembly Programs for
  Cooperating Embedded Devices_ /Architectural Support for Programming
  Languages and Operating Systems (ASPLOS) 2013/ (PDF, Bibtex, slides)

- Eric Schulte, Dan Davison, Tom Dye, Carsten Dominik.
  _A Multi-Language Computing Environment for
   Literate Programming and Reproducible Research_
  /Journal of Statistical Software/
  (JSS site (supplemental materials), PDF, Bibtex)

- Eric Schulte, Dan Davison.  _Active Documents with Org-Mode_
  /Computing in Science & Engineering 2011/ (PDF, Bibtex, source)

- Eric Schulte, David Ackley.  _Physical Evolutionary Computation_
  /University of New Mexico TR-CS-2011-01/ (PDF, Bibtex)

- Eric Schulte, Stephanie Forrest, Westley Weimer.  _Automated Program
  Repair through the Evolution of Assembly Code_ /Automated Software
  Engineering (ASE) Short Paper 2010/ (PDF, Bibtex).
  A summary is presented in the following presentation and poster.

- Paul Lehner, Charles Worrell, Chrissy Vu, Janet Mittel, Stephen
  Snyder, Eric Schulte, Warren Greiff, _An Application of Document
  Filtering in an Operational System_ /Information Processing &
  Management 2010/ (Bibtex)

** Course Notes
   :CUSTOM_ID: course-notes

- Spring 2013
  - =biol517= Basic Graduate Evolution (notes)
- Spring 2011
  - =cs591= Cognitive and Comp Neuroscience (notes)
    - final ego-machine.pdf (code, video)
- Fall 2010
  - =cs547= Neural Networks (notes)
    - final paper cs547.schulte.final-project.pdf
- Comprehensive Exam (notes)
- Spring 2010
  - =cs500= Theory of Computation (notes)
  - =cs550= Programming Languages & Systems (notes)
    - final presentation schulte.non-von-neumann-computation.pdf
    - a concurrent propagator system implemented in Clojure
  - =cs691= Robust Physical Computation Seminar (notes)
  - =cs691= Adaptive Reading Group (notes)
- Fall 2009
  - =cs558= Software Foundations (notes)
  - =cs587= Advanced Operating Systems (notes)
    - final paper bfs-v-cfs_groves-knockel-schulte.pdf
  - =cs591= Robust Physical Computation (notes)
  - =cs691= Adaptive Reading Group (notes)

** Curriculum Vitae
   :CUSTOM_ID: curriculum-vitae

My CV (as of April 2019) is available at eric-schulte-cv.pdf.

** COMMENT publishing

This code is used to publish this page to the cs.unm.edu webserver.
For more information on publishing Org-mode pages see the Publishing
section of the Org-mode manual.

#+begin_src emacs-lisp :results silent
  (setq homepage-dir (file-name-directory (or load-file-name buffer-file-name)))
  (unless (boundp 'org-publish-project-alist)
    (setq org-publish-project-alist nil))
  ;; the main html page
  (add-to-list 'org-publish-project-alist
                  :base-directory ,homepage-dir
                  :base-extension "org"
                  :publishing-directory "/ssh:eschulte@moons.cs.unm.edu:~/public_html/"
                  :index-filename "eric-schulte.org"
                  :html-postamble ; replaces the auto-generated postamble
                  "<div class=\"clear-fix\"></div>
  <div id=\"doc-info\">
    This document is created
    using <a href=\"http://orgmode.org/\">Org-mode</a>
    and <a href=\"http://orgmode.org/worg/org-contrib/babel/\">Org-babel</a>.
    The original plain-text document is available
    at <a href=\"eric-schulte.org\">eric-schulte.org</a>
    (<a href=\"eric-schulte.org.html\" title=\"how this document looks from inside Emacs\">preview</a>).
                  :style "<link rel=\"stylesheet\"href=\"data/stylesheet.css\"type=\"text/css\">"
                  :publishing-function (org-html-publish-to-html org-org-publish-to-org)
                  :plain-source t
                  :htmlized-source t))
  ;; the contents of the data/ directory, css, images, etc...
  (add-to-list 'org-publish-project-alist
                 :base-directory ,(expand-file-name "data" homepage-dir)
                 :base-extension "jpg\\|gif\\|png\\|pdf\\|css\\|bib\\|txt\\|js"
                  :publishing-directory "/ssh:eschulte@moons.cs.unm.edu:~/public_html/data/"
                  :publishing-function org-publish-attachment))
  ;; a single combined project to publish both html and supporting materials
  (add-to-list 'org-publish-project-alist
               '("homepage" :components
                 ("homepage-html" "homepage-data")))