% https://dacvs.neocities.org/home.html
% This document is made in the style of David Smith.
% Please feel free to copy and modify it, but I ask
% that you (a) retain this header in the source file,
% and (b) tell people when appropriate that you borrowed from me.
% Best wishes,
% David Smith

% For information on PostScript, see:
%   (1) The PostScript Language Tutorial and Cookbook
%   (2) The PostScript Language Reference

/year-now   2018 def
/year-beg   1992 def % year you began your career (bottom of spine)
/year-bot   1990 def % year at the very bottom of the page
/font-small 10.0 def
/font-med   22.3 def
/font-large 9 72 mul year-now year-beg sub div def
/x-left     -240 def
/x-right      75 def
/eps           2 def
/early { 0.9 sub 12 div add } def % year (integral) month -- year (rational)
/mid   { 0.5 sub 12 div add } def
/late  { 0.1 sub 12 div add } def
/ad { year-bot sub font-large mul } def % year -- y
8.5 72 mul 2 div 0 translate % put y-axis in middle of page

% The output document (a resume) is designed so that each event has
% (1) descriptive text and (2) line art connecting the text to a timeline.
% Text should be printed on top of line art.
% (The other way, line art over text, looks worse.)
% The order of commands in a PostScript file is important.
% Later drawings are made on top of earlier ones.
% In my design, the line art of an event may cross the text of another
% event (or its own). In order to keep the output looking good, we wish
% to draw each event's line art before all the text it crosses.
% As life goes on (and our resume grows), we edit the content of the
% PostScript file, adding events (school or work) as they occur.
% Editing should be easy and carefree.
% Line art should be generated automatically (under the text).
% Suppose we have a function that takes as input an event's text.
% When the function is called, it draws the line art and prints the text.
% If it were to do both right away, it might draw the line art of an event
% over the text of an event from earlier in the PostScript file.
% My solution is to postpone all printing of event text until all line art is drawn.
% As each event is processed, line art is drawn right away.
% But the strings and their locations and fonts are pushed onto the stack.
% After the last event is processed, the strings are popped and printed.

/s 0 def % number of string groups on the stack

0.5 setgray
/Helvetica-Bold findfont font-large scalefont setfont
/x-pos { (0) stringwidth pop neg } def      % -- x-pos
/y-pos { ad font-large 0.1 mul add } def    % y -- y-pos
/show-ones { 10 mod 1 string cvs show } def % y --
year-beg 1 year-now { dup x-pos exch y-pos moveto 10 idiv show-ones } for % tens
year-beg 1 year-now { dup 0     exch y-pos moveto         show-ones } for % ones

/Bfont /Helvetica-Bold    findfont font-med   scalefont def
/bfont /Helvetica-Bold    findfont font-small scalefont def
/ifont /Helvetica-Oblique findfont font-small scalefont def
/nfont /Helvetica         findfont font-small scalefont def
/myfonts [Bfont bfont ifont nfont] def
/incs { /s s 1 add def } def                   % --
/crlf { /y y font-small 1.35 mul sub def } def % --
/B { x y crlf incs 0 } def                     % str -- strgroup
/b { x y crlf incs 1 } def                     % str -- strgroup
/i { x y crlf incs 2 } def                     % str -- strgroup
/n { x y crlf incs 3 } def                     % str -- strgroup
bfont setfont % used to determine string right ends during line art drawing

%/bullet { (-) x y incs 1 } def                 % -- strgroup
/bullet { % --
  gsave 0 setgray
  newpath x y font-small 0.35 mul add font-small 0.15 mul 0 360 arc closepath fill
} def

/degree { % y --
  gsave 0.5 setgray 0.5 setlinewidth
  newpath 0.7 font-large mul exch 2.4 0 360 arc closepath stroke
} def

/bracket { % x0 y0 dx dy done --
  /done exch def % 1 if done, else 0 (done -> end-tick on bracket)
  /dy exch def   % >0
  /dx exch def   % <0 if left, >0 if right
  gsave 0.9 setlinewidth 0 setgray
  newpath moveto
  dx dx abs rlineto
  0 dy dx abs 2 mul sub rlineto
  dx neg done mul dx abs rlineto stroke
} def

/tie { % x0 y0 x1 y1 --
  gsave 1.2 setlinewidth 0.7 setgray newpath moveto lineto stroke grestore
} def

/bided { % str y-lo y-hi done sgn (-1 left, +1 right) -- str 
  /sgn  exch def
  /done exch def
  /y-hi exch def
  /y-lo exch def
  /x-spine font-large sgn mul 0.9 mul def

  dup stringwidth pop 0.5 -0.5 sgn mul add mul % word offset
  x add eps -1.5 mul sgn mul add % x0
  y font-small 0.4 mul add       % y0
  x-spine eps sgn mul add        % x1
  y-lo y-hi add 0.5 mul          % y1

  x-spine       % x0
  y-lo          % y0
  eps sgn mul   % dx
  y-hi y-lo sub % dy
  done bracket
} def

/worked   { 1 -1 bided } def
/work     { 0 -1 bided } def
/schooled { 1  1 bided } def
/school   { 0  1 bided } def
/from {} def /to {} def

%%%%%%%%%%%%%%%%% BEGIN DATA %%%%%%%%%%%%%%%%%%%%%%%

/x x-right def
/y year-now ad def

(David A. Smith) B
%(http://www.ugcs.caltech.edu/~dav) n
%(dav@ugcs.caltech.edu) n
(https://dacvs.neocities.org/) n
(dsmith@alumni.caltech.edu) n
%(dsmith@mathpost.asu.edu) n
(406-203-8553) n
crlf crlf

(Instructor) from 2016 9 mid ad to 2016 12 mid ad schooled b
(California State University, East Bay) i
bullet (  Taught Math 2150, an introduction) n
(to Discrete Mathematics for students) n
(of Computer Science) n

(Visiting Assistant Professor) from 2012 8 early ad to 2013 4 late ad schooled b
(Grand Valley State University) i
bullet (  Taught linear algebra, differential) n
(equations, and calculus) n
bullet (  Developed weekly computational) n
(exercises for calculus students) n

2010 12 late ad degree
(Ph.D. Mathematics) from 2004 8 early ad to 2010 8 late ad schooled b
(Teaching & Research Assistant) b
(Arizona State University) i
bullet (  Dissertation: The first-fit algorithm) n
(uses many colors on some interval) n
(graphs) n
bullet (  Used GLPK, Matlab, Maple, Sage,) n
(Python, Tk, Haskell, and C) n
bullet (  Taught Discrete Mathematical Struc-) n
(tures to computer science students) n
bullet (  Supervised an undergraduate honors) n
(project involving Java programming) n

2001 12 late ad degree
(M.S. Mathematics) from 2000 8 early ad to 2002 5 late ad schooled b
(Lecturer, Teaching Associate) b
(California State University, Long Beach) i
bullet (  Graduate Dean's List of Scholars) n
(and Artists) n % gpa 4.0
bullet (  Taught Calculus 2 and 3 to) n
(computer science students) n

1996 6 mid ad degree
(B.S. Mathematics) from 1992 9 mid ad to 1996 6 mid ad schooled b
(California Institute of Technology) i % gpa 3.3
bullet (  Studied manipulation in voting with) n
(computer programs in C) n
bullet (  Assisted in developing a novel) n
(application of optical fibers for) n
(the Mars 94 Oxidant Experiment) n

/x x-left def
/y year-now 1 add ad def

(Programmer) from 2017 5 early ad to 2018 4 mid ad work b
bullet (  I write system software) n
(and mathematical applications in Forth) n
% bullet (  Wrote and implemented numerical) n
% (algorithms using methods from) n
% (computational geometry in Forth) n

(Data Scientist) from 2014 7 mid ad to 2016 1 late ad worked b
(Quid Inc., San Francisco CA) i

bullet (  Wrote fast C-code variations on known) n
(methods of partitioning the vertex set of) n
(a weighted similarity graph) n
bullet (  Created Python tools with NetworkX and) n
(heuristic algorithms to compare partitions;) n
(and with SciPy to compare search result lists) n
bullet (  Visualized both kinds of comparison with) n
(PostScript plots made automatically) n
bullet (  Developed a method to infer associations) n
(between vertex labels in graphs) n
(described in US patent 9710544) n
bullet (  Wrote technical evaluations of free and) n
(commercial natural language proc. software) n

(Software Engineer) from 2013 10 early ad to 2014 2 mid ad worked b
(Newfield Wireless, Berkeley CA) i
bullet (  Wrote C++ server software) n

(Programmer) from 2011 8 early ad to 2012 3 late ad worked b
(Semel Institute for Neuroscience at UCLA) i
bullet (  Processed large genomic data sets) n
(on the Hoffman2 cluster using Bash,) n
(Awk, and Unix-style tools) n
bullet (  Implemented graph algorithms in Python) n % and Sage

(Lead Software Engineer) from 2003 2 early ad to 2003 12 late ad worked b
(Mitretek Systems, Falls Church VA) i
bullet (  Wrote public key infrastructure software) n
(in C++ for federal agencies) n
%bullet (  Added to a PKI middleware component) n
%(using OpenSSL and the DigitalNet) n
%(Certificate Management Library) n
bullet (  Built an LDAP spider for X.509 cross-) n
(certificate webs using the Boost Graph Lib.) n

(Software Engineer) from 1999 1 mid ad to 2000 3 late ad worked b
(Leverage Information Systems, SF CA) i
bullet (  Wrote Java server software for) n
(high-volume web sites with) n
(Linux, Apache, and MySQL) n
bullet (  Contributed to the open-source) n
(Locomotive Application Server) n

(Software Designer) from 1997 2 early ad to 1999 1 mid ad worked b
(Tandem Computers, Cupertino CA) i
bullet (  Developed an intraweb document) n
(management application in Perl and C) n

% (Junior Localization Engineer) from 1996 11 early ad to 1997 1 late ad worked b
% (SimulTrans, L.L.C., Mountain View CA) n

%%%%%%%%%%%%%%%%% END DATA %%%%%%%%%%%%%%%%%%%%%%%

0 setgray
1 1 s { pop myfonts exch get setfont moveto show } for