From 8394ea89b1de8184f02748c224a6a5a102cea11f Mon Sep 17 00:00:00 2001 From: Colin McMillen Date: Thu, 1 Jul 2021 10:15:35 -0400 Subject: [PATCH] automated update from build.py --- atom.xml | 91 ++++++++++++++++++++++++++++-- media/20190401-sigbovik-tweet.png | Bin 0 -> 29697 bytes sigbovik/index.html | 5 +- 3 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 media/20190401-sigbovik-tweet.png diff --git a/atom.xml b/atom.xml index cdc4eb7..3e430fd 100644 --- a/atom.xml +++ b/atom.xml @@ -15,27 +15,106 @@ 93% of Paint Splatters are Valid Perl Programs https://www.mcmillen.dev/sigbovik/ - + + 93% of Paint Splatters are Valid Perl Programs +

Posted 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.

+

Screenshot of a Twitter conversation. Adrienne Porter Felt says: "I don't want to teach my kid to code. I want him to splash in muddy puddles and smear paint on the walls and read novels under the covers way too late at night. I grew up too soon and wish I'd had more time to be a kid. Why do schools teach vocational skills so young these days?" Jake Archibald replies: "but is it possible to smear paint on the wall without creating valid 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:

+

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

+ ]]> +
2019-04-01T12:00:00-04:00 - 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? (...) My first paper in 10 years?! https://www.mcmillen.dev/blog/20190403-update.html - + + My first paper in 10 years?! +

Posted 2019-04-03.

+

It’s been nearly two months since my last day at Google, so I guess I should finally make use of this newsletter :)

+

I wrote a paper which was published on April 1st as part of SIGBOVIK 2019: “93% of Paint Splatters are Valid Perl Programs”. In this paper, I answer a long-standing open problem in the programming languages community: is it possible to smear paint on the wall without creating valid Perl?

+

(Long-standing since February 13, 2019, when a Twitter conversation between Adrienne Porter Felt & Jake Archibald posed the question.)

+

To answer this question, I downloaded 100 images of paint splatters from Pinterest, ran the open-source Tesseract OCR engine to turn each into a text string, and then sent that text to the Perl interpreter to see whether that text successfully parsed as Perl. It turns out that 93 of the 100 paint splatters do parse as valid Perl, but since 7% do not, I conclude that it is possible to smear paint on a wall without creating valid Perl.

+

You might suspect there is some chicanery going on with this result. You’d be correct, but… honestly there’s not that much chicanery going on. You’ll have to read the paper for details… and for my attempts at academic humor. :)

+

There’s also some supporting material on this website, including a gallery of all 100 images and their associated valid Perl code. Here’s a screenshot of some of them. (Did you know that the string lerzfijglpFiji-j evaluates to the number 0 in Perl?)

+

screenshot of 17 paint splatters, and the Perl programs they represent

+

As it turns out, the publication date of my paper was exactly 10-years-minus-a-day since my Ph.D. thesis defense. I’d planned on travelling back to Carnegie Mellon to give this talk live at SIGBOVIK 2019, but unfortunately came down with a nasty cold-and-cough so I had to cancel my trip. :( Perhaps I can give a belated talk at next year’s conference.

+

For more light-hearted and vaguely CS-shaped research papers, check out the rest of the SIGBOVIK 2019 proceedings. I particularly enjoyed “Elo World, a framework for benchmarking weak chess engines” by tom7 (“The computer players include some traditional chess engines, but also many algorithms chosen for their simplicity, as well as some designed to be competitively bad”.)

+

Some other random things that I’ve been up to in the last month-and-a-half:

+
    +
  • +

    ohnosay, which is like “cowsay” but for comics in the style of webcomicname. [GitHub] This was a good excuse to get a Linux development environment set up on a persistent Google Cloud instance & to learn how to GitHub. Since then, I also realized that the World Outside Google uses Python 3, so I’ve started learning that :)

    +

    a three panel comic displayed on a linux terminal: "i will write a silly program" "hm, what did i do with my ssh credentials?" "oh no"

    +
  • +
  • +

    Gardening! Last August I randomly planted some peppermint in a railing container on my balcony, and it went gangbusters. This spring I’ve actually planned out a whole porch-garden (like Stardew Valley but real life). Last year’s mint has started growing again, and I’ve added spearmint and mojito mint. I’ve also got two types of peas, two mixes of salad greens, and spinach planted. Later I’ll be planting carrots, basil, and rosemary. The peas just started sprouting a couple days ago, which is exciting!

    +

    a container showing an assortment of "asian salad" greens

    +
  • +
  • +

    Gloomhaven! This is a cooperative legacy-style board game – a fun dungeon-crawler that doesn’t need a DM, so everyone gets to play. Our group is still only a few scenarios in, but we’re enjoying it so far. SO MANY HEX TILES. I’m also getting ready to paint our party’s miniatures, which is another (potential) new hobby of mine; more to come in a future newsletter, I suspect :)

    +
  • +
  • +

    Video games: just started Sekiro: Shadows Die Twice on PS4. Recently completed (and really enjoyed) New Super Mario Bros. U Deluxe for Nintendo Switch (though Nintendo seems to be trying to give Google a run for their money on ridiculous product names). I’ve also been playing Total War: Warhammer 2 regularly, and Splatoon 2 from time to time. I tried getting into XCOM 2 & enjoyed it, but I’m not sure I’m interested enough to finish the campaign. I keep going back to Total War when I want something in the tactical / strategy genre.

    +
  • +
  • +

    Guitar: starting to learn fingerstyle, with the goal of eventually becoming good enough to play Dream of the Shore Bordering Another World from Chrono Cross.

    +
  • +
  • +

    Computer stuff: upgraded my PC’s video card (it was many years old) and upgraded to an all-SSD setup. It turns out that 2TB SSDs aren’t that expensive any more.

    +
  • +
  • +

    Getting healthcare without an employer is a disaster — even in Massachusetts, which reportedly has one of the best systems in the US. Still working on straightening out my paperwork. Apparently they refuse to believe in my proof of health-insurance termination, even though it’s lettermarked by Google and everything.

    +
  • +
+

Thanks for reading! Hopefully the next update will come sooner than 2 months and thus be a bit shorter than this one ended up being :)

+

~ Colin

+ ]]> +
2019-04-03T12:00:00-04:00 - It’s been nearly two months since my last day at Google, so I guess I should finally make use of this newsletter :) I wrote a paper which was published on April 1st as part of SIGBOVIK 2019: “93% of Paint Splatters are Valid Perl Programs”. In this paper, I answer a long-standing open problem in the programming languages community: is it possible to smear paint on the wall without creating valid Perl? (...)
A new year & a sneaky new project https://www.mcmillen.dev/blog/20200209-sneak.html - + + A new year & a sneaky new project +

Posted 2020-02-09.

+

I can’t believe it’s here so quickly, but: today marks a year since my last day at Google. That seemed like a good occasion to dust off this newsletter & let you know what I’ve been up to: making a videogame!

+

I’m working on a stealth-based 2D platformer where you don’t have to kill anyone unless you want to. It’ll be possible to get through every level by sneaking and misdirection, but it’ll require you to be careful and tactical to do so… and of course if that doesn’t work out, you can always draw your swords and go in fighting! So far I’ve given it “Sneak” as a codename, but that’s definitely a placeholder until I can flesh out more of the world.

+

So far Sneak runs on PC & Xbox, but I hope to add Switch and PS4 support within the next couple months. I’m using a C# framework called MonoGame, which provides low-level graphics & audio support across all these platforms. In order to write games for Switch or PS4, you need to apply to Nintendo & Sony to get access to their platform-specific SDKs. So my first real milestone will be coming up with a compelling Game Design Doc & gameplay videos so that they can (hopefully) be convinced that I’m worth taking seriously. Wish me luck!

+

Sony won’t even talk to anyone unless they’re a Real Business (& Nintendo kinda wants you to be too), so as of… yesterday, I’m officially the founder of SemiColin Games LLC (and, for now at least, the only member…)

+

If you want to follow along, I have an extremely-placeholder website up at semicolin.games where you can sign up for Yet Another Newsletter if you like, and a Twitter account @SemiColinGames that would appreciate a follow. I’ll probably set up a devblog with an RSS feed too eventually, but that’s not quite ready yet. When it is, I’ll send a quick update here.

+

I only got started in December & a lot of my work so far has been on building infrastructure (and learning how to start a business), so I don’t have any Extremely Compelling Gameplay Videos yet. Here’s a short animated GIF for now. The bloopers on Twitter might be more fun though. :)

+

Animation
+(Art definitely not final!)

+

Thanks for following along with me on this adventure! Hopefully my next update will come more quickly, and be less wordy! I’ve wanted to make videogames since I was Literally A Kid, so I’m quite excited to finally be doing that full-time, and to hopefully share something good with all of you. When I’m at a stage where I want alpha testers, I’ll definitely be asking here first.

+

Thanks for your support!
+~ Colin (& SemiColin Games)

+ ]]> +
2020-02-09T12:00:00-04:00 - I can’t believe it’s here so quickly, but: today marks a year since my last day at Google. That seemed like a good occasion to dust off this newsletter & let you know what I’ve been up to: making a videogame! I’m working on a stealth-based 2D platformer where you don’t have to kill anyone unless you want to. It’ll be possible to get through every level by sneaking and misdirection, but it’ll require you to be careful and tactical to do so… and of course if that doesn’t work out, you can always draw your swords and go in fighting! So far I’ve given it “Sneak” as a codename, but that’s definitely a placeholder until I can flesh out more of the world. (...)
diff --git a/media/20190401-sigbovik-tweet.png b/media/20190401-sigbovik-tweet.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6a765a86665fe6ca3fc96377ddb205b97333ba GIT binary patch literal 29697 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 literal 0 HcmV?d00001 diff --git a/sigbovik/index.html b/sigbovik/index.html index 596b800..c81cfed 100644 --- a/sigbovik/index.html +++ b/sigbovik/index.html @@ -34,10 +34,7 @@

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.

- - - - +

Screenshot of a Twitter conversation. Adrienne Porter Felt says: "I don't want to teach my kid to code. I want him to splash in muddy puddles and smear paint on the walls and read novels under the covers way too late at night. I grew up too soon and wish I'd had more time to be a kid. Why do schools teach vocational skills so young these days?" Jake Archibald replies: "but is it possible to smear paint on the wall without creating valid 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