diff --git a/favicon-512.png b/favicon-512.png new file mode 100644 index 0000000..c6d59e3 Binary files /dev/null and b/favicon-512.png differ diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..e649bcf Binary files /dev/null and b/favicon.ico differ diff --git a/favicon.png b/favicon.png index fb28aa3..b7a8c23 100644 Binary files a/favicon.png and b/favicon.png differ diff --git a/img/git.svg b/img/git.svg new file mode 100644 index 0000000..953cf20 --- /dev/null +++ b/img/git.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/nintendoswitch.svg b/img/nintendoswitch.svg index eec8a50..f688689 100644 --- a/img/nintendoswitch.svg +++ b/img/nintendoswitch.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/img/playstation.svg b/img/playstation.svg index a8e787b..5803c5a 100644 --- a/img/playstation.svg +++ b/img/playstation.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/img/steam.svg b/img/steam.svg index 97cdc16..1d3dcea 100644 --- a/img/steam.svg +++ b/img/steam.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/img/twitch.svg b/img/twitch.svg index e3d9e39..621f555 100644 --- a/img/twitch.svg +++ b/img/twitch.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/img/twitter.svg b/img/twitter.svg index 16fbff2..e952dd1 100644 --- a/img/twitter.svg +++ b/img/twitter.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/index.html b/index.html index 9495dcb..830c231 100644 --- a/index.html +++ b/index.html @@ -1,154 +1,73 @@ - - Colin McMillen - - - - - - - - - + + + - - - - +Colin McMillen - + + + + + + + + + -
-

- Colin McMillen -

-
+ -
-

- ABOUT -

-
-

Lead developer at SemiColin Games, working on a stealth-based 2D platformer.

- -

Previously @ Google, reCAPTCHA, Carnegie Mellon.

-

Boston

-
- -
- -
-

- GAMING -

-
-

- I stream Splatoon, Monster Hunter, Total War, and retro games! -

-

- Switch SW-1906-3662-4308
-

-
- -
- -
-

- AMUSEMENTS -

-
-

- Some silly things I've done. -

-
- -
- -
-

- APRIL 2019 UPDATE -

-
-

- On my SIGBOVIK paper: “93% of Paint Splatters are Valid Perl Programs”, gardening, healthcare, and more. -

-

-
-
- -
-

- RESUME -

-
- -

Google

-

- Staff Software Engineer
- September 2009 — February 2019 -

-

Projects: - Chrome Canvas, - Android Wear handwriting, - Digital Attack Map, - Google Dictionary, - Google Translate, - Google Books, & - reCAPTCHA.

- +
-

reCAPTCHA

-

- Co-Founder & Software Engineer
- June 2007 — September 2009 -

+
+

Welcome!

+

I’m the lead developer at SemiColin Games in Somerville, MA.
+Previously at Google, reCAPTCHA, & Carnegie Mellon.

+ -

Carnegie Mellon University

-

- Ph.D. Computer Science
- September 2003 — May 2009 -

+

@mcmillen @mcmillen

+

Git git.mcmillen.dev

+

For more details, check my resumé & publications.

+

Recent Posts

+

You can sign up for occasional updates via my email newsletter.

+ +

Videogames

+

Currently playing: Persona 5, Monster Hunter Rise, & Slipways.
+Sometimes I stream on Twitch!

+

Twitch FamiColin

+

Steam FamiColin

+

PlayStation robomancer

+

Nintendo Switch SW-1906-3662-4308

+
+ -

University of Minnesota

-

- B.S. Computer Science
- September 1999 — May 2003 -

- - -
+ + - - + diff --git a/language_checklist.html b/language_checklist.html index 8834c7c..ab7edce 100644 --- a/language_checklist.html +++ b/language_checklist.html @@ -1,21 +1,8 @@ - + + - -Programming Language Checklist - +Programming Language Checklist - - diff --git a/papers/Ketter-2004-AAMAS-workshop.pdf b/papers/Ketter-2004-AAMAS-workshop.pdf new file mode 100644 index 0000000..0e4e1b2 Binary files /dev/null and b/papers/Ketter-2004-AAMAS-workshop.pdf differ diff --git a/papers/Ketter-2004-AAMAS.pdf b/papers/Ketter-2004-AAMAS.pdf new file mode 100644 index 0000000..1438452 Binary files /dev/null and b/papers/Ketter-2004-AAMAS.pdf differ diff --git a/publications.html b/publications.html index 973c347..a92da90 100644 --- a/publications.html +++ b/publications.html @@ -1,126 +1,105 @@ - - Colin McMillen - - - - - - + + + - - +Publications | Colin McMillen - - - - -
-

- Colin McMillen -

-
-
-

- Publications -

+ + + + + + + + + -

Ph.D. Thesis

-

Thresholded-Rewards Decision Problems: Acting Effectively in Timed Domains.
-Colin McMillen.
-Technical report CMU-CS-09-112, Carnegie Mellon University, April 2, 2009.

+ -

Journal Articles

+
+
+ -

reCAPTCHA: Human-Based Character Recognition via Web Security Measures.
+

+

Publications

+

Ph.D. Thesis

+

Thresholded-Rewards Decision Problems: Acting Effectively in Timed Domains.
+Colin McMillen.
+Technical report CMU-CS-09-112, Carnegie Mellon University, April 2, 2009.

+

Journal Articles

+

reCAPTCHA: Human-Based Character Recognition via Web Security Measures.
Luis von Ahn, Benjamin Maurer, Colin McMillen, David Abraham, and Manuel Blum.
Science, 12 September 2008: 1465-1468.

- -

A Team of Humanoid Game Commentators.
+

A Team of Humanoid Game Commentators.
Manuela Veloso, Nicholas Armstrong-Crews, Sonia Chernova, Elisabeth Crawford, Colin McMillen, Maayan Roth, and Douglas Vail.
International Journal of Humanoid Robotics, 2008.

- -

Resource Scheduling and Load Balancing in Distributed Robotic Control Systems.
+

Resource Scheduling and Load Balancing in Distributed Robotic Control Systems.
Colin McMillen, Kristen Stubbs, Paul E. Rybski, Sascha A. Stoeter, Maria Gini, and Nikolaos Papanikolopoulos.
Robotics and Autonomous Systems, 2003.

- -

A Robot Team for Surveillance Tasks: Design and Architecture.
+

A Robot Team for Surveillance Tasks: Design and Architecture.
Sascha A. Stoeter, Paul E. Rybski, Kristen N. Stubbs, Colin McMillen, Maria Gini, Dean F. Hougen, and Nikolaos Papanikolopoulos.
Robotics and Autonomous Systems, August 2002.

- -

Refereed Conference Papers

- -

Analysis of Multi-Robot Play Effectiveness and of Distributed Incidental Play Recognition.
+

Refereed Conference Papers

+

Analysis of Multi-Robot Play Effectiveness and of Distributed Incidental Play Recognition.
Colin McMillen and Manuela Veloso.
Proceedings of Distributed Autonomous Robotic Systems (DARS 2008), November 2008.

- -

Unknown Rewards in Finite-Horizon Domains.
+

Unknown Rewards in Finite-Horizon Domains.
Colin McMillen and Manuela Veloso.
Proceedings of the Twenty-Second Conference on Artificial Intelligence (AAAI-08), July 2008.

- -

Thresholded Rewards: Acting Optimally in Timed, Zero-Sum Games.
+

Thresholded Rewards: Acting Optimally in Timed, Zero-Sum Games.
Colin McMillen and Manuela Veloso.
Proceedings of the Twenty-Second Conference on Artificial Intelligence (AAAI-07), July 2007.
-AAAI-07 Outstanding Paper Award - -

A Team of Humanoid Game Commentators.
+AAAI-07 Outstanding Paper Award

+

A Team of Humanoid Game Commentators.
Manuela Veloso, Nicholas Armstrong-Crews, Sonia Chernova, Elisabeth Crawford, Colin McMillen, Maayan Roth, and Douglas Vail.
-Proceedings of the IEEE-RAS International Conference on Humanoid Robots (Humanoids'06), Genova, Italy, December 2006.

- -

Distributed, Play-Based Role Assignment for Robot Teams in Dynamic Environments.
+Proceedings of the IEEE-RAS International Conference on Humanoid Robots (Humanoids‘06), Genova, Italy, December 2006.

+

Distributed, Play-Based Role Assignment for Robot Teams in Dynamic Environments.
Colin McMillen and Manuela Veloso.
Proceedings of DARS 2006, Minneapolis, MN, July 2006.

- -

Distributed, Play-Based Coordination for Robot Teams in Dynamic Environments.
+

Distributed, Play-Based Coordination for Robot Teams in Dynamic Environments.
Colin McMillen and Manuela Veloso.
Proceedings of the RoboCup International Symposium, Bremen, Germany, June 2006.

- -

Levels of Multi-Robot Coordination for Dynamic Environments.
+

Levels of Multi-Robot Coordination for Dynamic Environments.
Colin McMillen, Paul Rybski, and Manuela Veloso.
Multi-Robot Systems: From Swarms to Intelligent Automata, Volume III, 2005.

- -

MinneTAC Sales Strategies for Supply Chain TAC.
+

MinneTAC Sales Strategies for Supply Chain TAC.
Wolfgang Ketter, Elena Kryzhnyaya, Steven Damer, Colin McMillen, Amrudin Agovic, John Collins, and Maria Gini.
Proceedings of the Third International Conference on Autonomous Agents and Multi-Agent Systems, New York, July 2004.

- -

Analysis and Design of Supply-Driven Strategies in TAC-SCM.
+

Analysis and Design of Supply-Driven Strategies in TAC SCM.
Wolfgang Ketter, Elena Kryzhnyaya, Steven Damer, Colin McMillen, Amrudin Agovic, John Collins, and Maria Gini.
AAMAS04: Workshop on Trading Agent Design and Analysis, New York, July 2004.

- -

A Real-Time Collision Warning System for Intersections.
+

A Real-Time Collision Warning System for Intersections.
Kristen Stubbs, Hemanth Arumugam, Osama Masoud, Colin McMillen, Harini Veeraraghavan, Ravi Janardan, and Nikos Papanikolopoulos.
Proceedings of Intelligent Transportation Systems America, Minneapolis, MN, USA, May 2003.

- -

Heterogeneous Implementation of an Adaptive Robotic Sensing Team.
+

Heterogeneous Implementation of an Adaptive Robotic Sensing Team.
Bradley Kratochvil, Ian T. Burt, Andrew Drenner, Derek Goerke, Bennett Jackson, Colin McMillen, Christopher Olson, Nikolaos Papanikolopoulos, Adam Pfeifer, Sascha A. Stoeter, Kristen Stubbs, and David Waletzko.
Proceedings of the IEEE International Conference on Robotics and Automation, Taipei, Taiwan, May 2003.

- -

Design of the UMN Multi-Robot System.
+

Design of the UMN Multi-Robot System.
Andrew Drenner, Ian Burt, Brian Chapeau, Tom Dahlin, Bradley Kratochvil, Colin McMillen, Brad Nelson, Nikolaos Papanikolopoulos, Paul E. Rybski, Kristen Stubbs, David Waletzko, and Kemal Berk Yesin.
Multi-Robot Systems: From Swarms to Intelligent Automata, May 2002.

- -

Mobility Enhancements to the Scout Robot Platform.
+

Mobility Enhancements to the Scout Robot Platform.
Andrew Drenner, Ian Burt, Tom Dahlin, Bradley Kratochvil, Colin McMillen, Brad Nelson, Nikolaos Papanikolopoulos, Paul E. Rybski, Kristen Stubbs, David Waletzko, and Kemal Berk Yesin.
Proceedings of the 2002 IEEE International Conference on Robotics and Automation, Washington D.C., USA, May 2002.

- -

Resource Scheduling and Load Balancing in Distributed Robotic Control Systems.
+

Resource Scheduling and Load Balancing in Distributed Robotic Control Systems.
Colin McMillen, Kristen Stubbs, Paul E. Rybski, Sascha A. Stoeter, Maria Gini, and Nikolaos Papanikolopoulos.
Proceedings of the International Conference on Intelligent Autonomous Systems, Marina del Rey, CA, U.S.A., March 2002.

-
+ + - - + + + + diff --git a/pygments.css b/pygments.css new file mode 100644 index 0000000..d2e9fc7 --- /dev/null +++ b/pygments.css @@ -0,0 +1,70 @@ +.codehilite .hll { background-color: #49483e } +.codehilite { background: #272822; color: #f8f8f2 } +.codehilite .c { color: #75715e } /* Comment */ +.codehilite .err { color: #960050; background-color: #1e0010 } /* Error */ +.codehilite .k { color: #66d9ef } /* Keyword */ +.codehilite .l { color: #ae81ff } /* Literal */ +.codehilite .n { color: #f8f8f2 } /* Name */ +.codehilite .o { color: #f92672 } /* Operator */ +.codehilite .p { color: #f8f8f2 } /* Punctuation */ +.codehilite .ch { color: #75715e } /* Comment.Hashbang */ +.codehilite .cm { color: #75715e } /* Comment.Multiline */ +.codehilite .cp { color: #75715e } /* Comment.Preproc */ +.codehilite .cpf { color: #75715e } /* Comment.PreprocFile */ +.codehilite .c1 { color: #75715e } /* Comment.Single */ +.codehilite .cs { color: #75715e } /* Comment.Special */ +.codehilite .gd { color: #f92672 } /* Generic.Deleted */ +.codehilite .ge { font-style: italic } /* Generic.Emph */ +.codehilite .gi { color: #a6e22e } /* Generic.Inserted */ +.codehilite .gs { font-weight: bold } /* Generic.Strong */ +.codehilite .gu { color: #75715e } /* Generic.Subheading */ +.codehilite .kc { color: #66d9ef } /* Keyword.Constant */ +.codehilite .kd { color: #66d9ef } /* Keyword.Declaration */ +.codehilite .kn { color: #f92672 } /* Keyword.Namespace */ +.codehilite .kp { color: #66d9ef } /* Keyword.Pseudo */ +.codehilite .kr { color: #66d9ef } /* Keyword.Reserved */ +.codehilite .kt { color: #66d9ef } /* Keyword.Type */ +.codehilite .ld { color: #e6db74 } /* Literal.Date */ +.codehilite .m { color: #ae81ff } /* Literal.Number */ +.codehilite .s { color: #e6db74 } /* Literal.String */ +.codehilite .na { color: #a6e22e } /* Name.Attribute */ +.codehilite .nb { color: #f8f8f2 } /* Name.Builtin */ +.codehilite .nc { color: #a6e22e } /* Name.Class */ +.codehilite .no { color: #66d9ef } /* Name.Constant */ +.codehilite .nd { color: #a6e22e } /* Name.Decorator */ +.codehilite .ni { color: #f8f8f2 } /* Name.Entity */ +.codehilite .ne { color: #a6e22e } /* Name.Exception */ +.codehilite .nf { color: #a6e22e } /* Name.Function */ +.codehilite .nl { color: #f8f8f2 } /* Name.Label */ +.codehilite .nn { color: #f8f8f2 } /* Name.Namespace */ +.codehilite .nx { color: #a6e22e } /* Name.Other */ +.codehilite .py { color: #f8f8f2 } /* Name.Property */ +.codehilite .nt { color: #f92672 } /* Name.Tag */ +.codehilite .nv { color: #f8f8f2 } /* Name.Variable */ +.codehilite .ow { color: #f92672 } /* Operator.Word */ +.codehilite .w { color: #f8f8f2 } /* Text.Whitespace */ +.codehilite .mb { color: #ae81ff } /* Literal.Number.Bin */ +.codehilite .mf { color: #ae81ff } /* Literal.Number.Float */ +.codehilite .mh { color: #ae81ff } /* Literal.Number.Hex */ +.codehilite .mi { color: #ae81ff } /* Literal.Number.Integer */ +.codehilite .mo { color: #ae81ff } /* Literal.Number.Oct */ +.codehilite .sa { color: #e6db74 } /* Literal.String.Affix */ +.codehilite .sb { color: #e6db74 } /* Literal.String.Backtick */ +.codehilite .sc { color: #e6db74 } /* Literal.String.Char */ +.codehilite .dl { color: #e6db74 } /* Literal.String.Delimiter */ +.codehilite .sd { color: #e6db74 } /* Literal.String.Doc */ +.codehilite .s2 { color: #e6db74 } /* Literal.String.Double */ +.codehilite .se { color: #ae81ff } /* Literal.String.Escape */ +.codehilite .sh { color: #e6db74 } /* Literal.String.Heredoc */ +.codehilite .si { color: #e6db74 } /* Literal.String.Interpol */ +.codehilite .sx { color: #e6db74 } /* Literal.String.Other */ +.codehilite .sr { color: #e6db74 } /* Literal.String.Regex */ +.codehilite .s1 { color: #e6db74 } /* Literal.String.Single */ +.codehilite .ss { color: #e6db74 } /* Literal.String.Symbol */ +.codehilite .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ +.codehilite .fm { color: #a6e22e } /* Name.Function.Magic */ +.codehilite .vc { color: #f8f8f2 } /* Name.Variable.Class */ +.codehilite .vg { color: #f8f8f2 } /* Name.Variable.Global */ +.codehilite .vi { color: #f8f8f2 } /* Name.Variable.Instance */ +.codehilite .vm { color: #f8f8f2 } /* Name.Variable.Magic */ +.codehilite .il { color: #ae81ff } /* Literal.Number.Integer.Long */ diff --git a/resume.html b/resume.html new file mode 100644 index 0000000..daf5e55 --- /dev/null +++ b/resume.html @@ -0,0 +1,60 @@ + + + + + + + +Resumé | Colin McMillen + + + + + + + + + + + + + +
+
+ + +
+

Resumé

+

SemiColin Games

+

Lead Developer
+February 2019 – Present

+

Google

+

Staff Software Engineer
+September 2009 – February 2019

+

Projects: Chrome Canvas, Android Wear Handwriting, Digital Attack Map, Google Dictionary, Google Translate, Google Books, & reCAPTCHA.

+

reCAPTCHA

+

Co-Founder & Software Engineer
+June 2007 – September 2009

+

Carnegie Mellon University

+

Ph.D. Computer Science
+September 2003 – May 2009

+

University of Minnesota

+

B.S. Computer Science
+September 1999 – May 2003

+
+
+ + +
+ + + diff --git a/sigbovik/index.html b/sigbovik/index.html index c4cb260..998e0cc 100644 --- a/sigbovik/index.html +++ b/sigbovik/index.html @@ -1,87 +1,67 @@ - - SIGBOVIK: 93% of Paint Splatters are Valid Perl Programs — Colin McMillen - - - - - - + + + - - +93% of Paint Splatters are Valid Perl Programs | Colin McMillen - - - - -
-

- Colin McMillen -

-
-
-

- 93% of Paint Splatters are Valid Perl Programs -

-

- Published April 1, 2019 -

-
+ + + + + + + + + -

TLDR: read the paper and view the gallery of pretty Perl programs.

- -

In this paper, we aim to answer a long-standing open problem in the programming languages community: is it possible to smear paint on the wall without creating valid Perl?

+ -

We answer this question in the affirmative: it is possible to smear paint on the wall without creating a valid Perl program. We employ an empirical approach, using optical character recognition (OCR) software, which finds that merely 93% of paint splatters parse as valid Perl. We analyze the properties of paint-splatter Perl programs, and present seven examples of paint splatters which are not valid Perl programs.

+
+
+ +
+

93% of Paint Splatters are Valid Perl Programs

+

Published 2019-04-01.

+

TLDR: read the paper and view the gallery of pretty Perl programs.

+

In this paper, we aim to answer a long-standing open problem in the programming languages community: is it possible to smear paint on the wall without creating valid Perl?

+

We answer this question in the affirmative: it is possible to smear paint on the wall without creating a valid Perl program. We employ an empirical approach, using optical character recognition (OCR) software, which finds that merely 93% of paint splatters parse as valid Perl. We analyze the properties of paint-splatter Perl programs, and present seven examples of paint splatters which are not valid Perl programs.

- - -

Accepted for publication at SIGBOVIK 2019, held April 1st 2019 in Pittsburgh. Winner of a Unwitting Participation Ribbon, "an unwelcome brand we’ve affixed to each paper determined after careful scrutiny to have included a genuine artifact, thereby furthering the admirable causes of open science and fruitful procrastination."

- -

Read it on Google Docs or download a PDF. Or grab the entire SIGBOVIK 2019 proceedings; I'm on page 174.

- -

Supplementary Materials

- -

Here's all the paint splatters on a single page, along with the valid Perl source code corresponding to each. "Not valid" is written in red for those images which did not parse as valid Perl programs. If different OCR settings recognized multiple valid Perl programs, I chose the one that seemed the most "interesting", according to my own aesthetic sense.

- -

Here's a tarball of 100 paint-splatter images that were used as the main dataset for this paper.

- -

(source code not available yet because i am bad at GitHub)

-

Errata

- -

There are a few paint splatter Perl programs that I didn't recognize as "interesting" until after the SIGBOVIK submission deadline. For example, this splatter is recognized by OCR as the string lerzfijglpFiji-j, which evaluates to the number 0 in Perl:

- -

+ +

Accepted for publication at SIGBOVIK 2019, held April 1st 2019 in Pittsburgh. Winner of a Unwitting Participation Ribbon, “an unwelcome brand we’ve affixed to each paper determined after careful scrutiny to have included a genuine artifact, thereby furthering the admirable causes of open science and fruitful procrastination.”

+

Read it on Google Docs or download a PDF. Or grab the entire SIGBOVIK 2019 proceedings; I’m on page 174.

+

Supplementary Materials

+

Here’s all the paint splatters on a single page, along with the valid Perl source code corresponding to each. “Not valid” is written in red for those images which did not parse as valid Perl programs. If different OCR settings recognized multiple valid Perl programs, I chose the one that seemed the most “interesting”, according to my own aesthetic sense.

+

Here’s a tarball of 100 paint-splatter images that were used as the main dataset for this paper.

+

(source code not available yet because i am bad at GitHub)

+

Errata

+

There are a few paint splatter Perl programs that I didn’t recognize as “interesting” until after the SIGBOVIK submission deadline. For example, this splatter is recognized by OCR as the string lerzfijglpFiji-j, which evaluates to the number 0 in Perl:

+

paint splatter

The image below is recognized as the string -*?, which also evaluates to the number 0 in Perl:

- -

- -

Another surprising program is shown below; OCR recognizes this image as the string ;i;c;;#\\?z{;?;;fn':.;, -which evaluates to the string c in Perl:

- -

- -

Finally, this image is recognized as the string ;E,'__', which evaluates to the string E__ in Perl:

- -

- -
-
-

- (c) 2020 Colin McMillen
- [but if you want to use anything, just ask!] -

-

- Designed by Melody!
- If you want a well-designed site of your own, I heartily recommend working with them! -

-
-
- +

paint splatter

+

Another surprising program is shown below; OCR recognizes this image as the string ;i;c;;#\\?z{;?;;fn':.;, which evaluates to the string c in Perl:

+

paint splatter

+

Finally, this image is recognized as the string ;E,'__', which evaluates to the string E__ in Perl:

+

paint splatter

+
+
+ + +
+ + diff --git a/sigbovik/splatters.html b/sigbovik/splatters.html index 08c172f..b1a468a 100644 --- a/sigbovik/splatters.html +++ b/sigbovik/splatters.html @@ -1,5 +1,7 @@ - + + + +
7
+
pg
+
35
+
figigigg
+
al
+
hd
+
Q
+
Nok
+
ME
+
twisg;
+
;L#s
+
3
+
Not valid
+
ee
+
giissfigg;
+
dail
+
i
+
E'TLI
+
twig
+
Not valid
+
Gi
+
giauullif
+
Lif'tf
+
fj
+
4
+
i
+
Fififz
+
-3
+
Hav
+
i
+
Not valid
+
5
+
ai;;;!i
+
gggijgziifiiffif
+
Not valid
+
4
+
fwzzzeJ
+
0
+
k ,
+
ha
+
rwwwvwrli
+
55
+
lerzfijglpFiji-j
+
Not valid
+
ilvh;
+
Ln
+
gigggwgz
+
8
+
I
+
;i;c;;#\\?z{;?;;fn':.;
+
i235
+
girl'd
+
225252
+
3
+
x
+
4
+
S
+
ed
+
Tl
+
2
+
gggigg
+
aid
+
5
+
E
+
I'jit
+
TE
+
Zi
+
ame
+
ng
+
io
+
Hav
+
Not valid
+
J
+
Izg;
+
Bk
+
7
+
hi
+
b
+
Not valid
+
;E,'__'
+
3
+
ged
+
i
+
iigfififi
+
-*?
+
a
+
2
+
ihiltfjki;
+
ahja
+
;
+
$5;ng
+
iigg
+
v
+
Egg
+
gg;
+
Z;
+
po
+
:
+
irfxilegjffi
+
ggggiggQgig
+
tit
diff --git a/sitemap.txt b/sitemap.txt index 621bece..461ea1d 100644 --- a/sitemap.txt +++ b/sitemap.txt @@ -1,6 +1,7 @@ https://www.mcmillen.dev https://www.mcmillen.dev/language_checklist.html https://www.mcmillen.dev/publications.html +https://www.mcmillen.dev/resume.html https://www.mcmillen.dev/sigbovik/ https://www.mcmillen.dev/sigbovik/2019.pdf https://www.mcmillen.dev/sigbovik/splatters.html diff --git a/style.css b/style.css index 60d3a98..8142a1b 100644 --- a/style.css +++ b/style.css @@ -1,58 +1,13 @@ -/* http://meyerweb.com/eric/tools/css/reset/ - v2.0 | 20110126 - License: none (public domain) +/* + consider one of these? + https://meyerweb.com/eric/tools/css/reset/ + https://ageek.dev/normalize-css + https://github.com/h5bp/html5-boilerplate */ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} -body { - line-height: 1; -} -ol, ul { - list-style: none; -} -blockquote, q { - quotes: none; -} -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} -table { - border-collapse: collapse; - border-spacing: 0; -} - -/* Styling Rules go here */ - :root { - --border-radius: 4px; - --border-width: 8px; - --border-width-negative: -8px; - --content-width: 660px; + --content-width: 650px; + --footer-height: 22px; /* Base colors */ --color-black: black; @@ -75,313 +30,90 @@ table { } body { - font-family: "Fira Mono", monaco, monospace; + font-family: 'Quicksand', sans-serif; + font-weight: 500; + font-size: 16px; background: var(--color-navy); color: var(--color-white); - font-weight: 500; - margin: 2em .5em; - font-size: 18px; - -webkit-font-smoothing: antialiased; + margin: 0; } -code { - color: var(--color-light-green); -} - -header { - text-align: center; +#page-container { + position: relative; + min-height: 100vh; } -footer { - opacity: .5; +#content-wrap { + padding-bottom: var(--footer-height); } a { - color: inherit; -} - -h1, h2, h3 { - -webkit-font-smoothing: none; - font-family: "Press Start 2P", "Helvetica Neue", helvetica, arial, sans-serif; - font-weight: normal; -} - -h1 { - margin-bottom: .5em; - text-align: center; - font-size: 24px; color: var(--color-light-orange); - text-shadow: 0 4px 0 rgba(0,0,0,.25); + font-weight: 700; } -header h1 a { +a.undecorated { + color: inherit; text-decoration: none; + font-weight: inherit; } -header h1 a:hover { - text-decoration: underline -} - -h2 { - font-size: 20px; - text-shadow: 0 4px 0 rgba(0,0,0,.25); -} - -h3 { - font-size: 16px; - text-shadow: 0 4px 0 rgba(0,0,0,.25); -} - -p, h1, h2, h3, pre { - padding: .8em .4em; - line-height: 1.25em; - text-shadow: 0 2px 0 rgba(0,0,0,.25); -} - -pre { - font-size: .75em; - overflow: scroll; -} - -hr { - border-style: solid; - border-width: calc(var(--border-width) / 2); -/* border-radius: var(--border-radius); */ - max-width: var(--content-width); - margin: calc(var(--border-width) * 2); - opacity: .35; -} - -blockquote, pre { - position: relative; - z-index: 1; -} - -blockquote:before { - content: ' '; - position: absolute; - top: 0; - left: 0; - z-index: -1; - width: 100%; - height: 100%; - background-color: var(--color-black); - opacity: .35; -} - -pre { - background-color: rgba(0,0,0,.35); -} - -.text-center { - text-align: center; -} - -img, iframe { +img { max-width: 100%; + margin-right: 8px; + vertical-align: middle; } -.highlight { - color: var(--color-yellow); -} - -.highlight-green { +code { + font-family: 'Fira Mono', monospace; color: var(--color-light-green); + font-size: 13px; } -/* Buttons */ -.btn { - display: inline-block; - padding: .75em 1em; - font-family: "Press Start 2P", "Helvetica Neue", helvetica, arial, sans-serif; - font-size: 15px; - text-align: left; - text-decoration: none; - text-shadow: none; - border: none; - background: var(--color-white); - color: var(--color-black); -} - -.btn:hover { - background: var(--color-yellow); -} - -.btn span { - float: right; - padding-left: 1ch; - margin-top: -2px; -} - -span.arrow { - margin-top: -4px; - font-size: 18px; -} - -span.arrow:after { - content: '▶'; +pre { + overflow: auto; + font-family: 'Fira Mono', monospace; + padding: .8em; + font-size: 13px; } -/* Outside of the box layout */ -.content { - max-width: var(--content-width); - margin: 0 auto calc(var(--border-width) * 4) auto; - padding: 0 var(--border-width); +strong { + color: var(--color-yellow); } -/* Box layout */ -.box { - position: relative; - display: flex; - max-width: var(--content-width); - flex-direction: column; - margin: 0 auto calc(var(--border-width) * 4) auto; - padding: 0; - background: transparent; - border: var(--border-width) solid var(--color-gray); - border-radius: var(--border-radius); +div.codehilite { + border-radius: 8px; } -.box p, .box h1, .box h2, .box h3, .box pre { - padding: .8em .8em; +#header { + background: var(--color-red); + font-size: 24px; + font-weight: 700; } -.box-layout-sidebar { - flex-direction: row; +#header img { + vertical-align: baseline; + width: 20px; + height: 20px; } -.box-header { - display: inline-block; +#footer { + background: var(--color-purple); position: absolute; - top: 0; - left: 0; - padding: - calc(1em - var(--border-width)) - 1em - 1em - calc(1em - var(--border-width))!important; - background: var(--color-gray); - font-size: 15px; -} - -.box-content { - margin-top: 2em; -} - -.box-footer { - text-align: right; -} - -.box-footer { - margin-right: var(--border-width-negative); -} - -.box-layout-default .box-footer { - display: inline-flex; - align-self: flex-end; -} - -.box-layout-sidebar .box-footer { - background: var(--color-gray); - color: var(--color-white); - min-width: 240px; -} - -.box-layout-sidebar .box-footer .btn { - display: block; -} - -.box-layout-sidebar .box-footer .btn:first-of-type { - border-top-width: 0px; -} - -.box-layout-fullwidth .box-footer { - display: flex; - flex-wrap: wrap; - align-content: stretch; - margin-left: var(--border-width-negative); - text-align: right; - background: var(--color-gray); -} - -.box-layout-fullwidth .box-footer .btn { - display: inline-flex; - flex-grow: 1; -} - -.box-layout-fullwidth .box-footer .btn span { - padding-left: 1ch; - margin-left: auto; + bottom: 0; + width: 100%; + height: var(--footer-height); } -.box .box-footer .btn { - border-top: var(--border-width) solid var(--color-gray); - border-left: var(--border-width) solid var(--color-gray); +div.content { + max-width: var(--content-width); + margin: auto; + padding-left: 2px; + padding-right: 2px; } -/* Mobile box layout */ - -@media only screen and (max-width: 600px) { - .box-layout-sidebar { - flex-direction: column; - } - .box-layout-default .box-footer { - width: calc(100% + var(--border-width) * 2); - } - .box-layout-sidebar .box-footer .btn:first-of-type { - border-top-width: var(--border-width); - } - .box .box-footer { - display: block; - margin-left: var(--border-width-negative); - } - .box .box-footer .btn { - display: block; - position: relative; - padding-right: 2.5em; +@media (min-width: var(--content-width)) { + div.content { + width: var(--content-width); } - .box .box-footer .btn span { - position: absolute; - top: 0; - padding: .75em 0; - right: 1em; - } -} - -/* Box color variants */ -.box-gray, .box-gray .box-footer .btn { - border-color: var(--color-gray); -} -.box-gray .box-header, .box-gray.box-layout-sidebar .box-footer, -.box-gray.box-layout-fullwidth .box-footer, -.box-gray blockquote:before { - background-color: var(--color-gray); -} -.box-gray .arrow { - color: var(--color-gray); -} - - -.box-red, .box-red .box-footer .btn { - border-color: var(--color-red); -} -.box-red .box-header, .box-red.box-layout-sidebar .box-footer, -.box-red.box-layout-fullwidth .box-footer, -.box-red blockquote:before { - background-color: var(--color-red); -} -.box-red .arrow { - color: var(--color-red); -} - -.box-purple, .box-purple .box-footer .btn { - border-color: var(--color-purple); -} -.box-purple .box-header, .box-purple.box-layout-sidebar .box-footer, -.box-purple.box-layout-fullwidth .box-footer, -.box-purple blockquote:before { - background-color: var(--color-purple); -} -.box-purple .arrow { - color: var(--color-purple); }