Created
April 2, 2016 14:44
-
-
Save e-oz/18546cd50fa02d08623bb847f94e4d3a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From: <Saved by Blink> | |
Subject: Deploying a Rust App to Google App Engine | |
Date: Sun, 2 Apr 2016 14:43:06 -0000 | |
MIME-Version: 1.0 | |
Content-Type: multipart/related; | |
type="text/html"; | |
boundary="----MultipartBoundary--JS6VqEA1CaoIbspHBB61qNgbfVtHBPM813M6vK79n8----" | |
------MultipartBoundary--JS6VqEA1CaoIbspHBB61qNgbfVtHBPM813M6vK79n8---- | |
Content-Type: text/html | |
Content-ID: <[email protected]> | |
Content-Transfer-Encoding: quoted-printable | |
Content-Location: http://blog.jecrooks.com/posts/rust-on-appengine.html | |
<!DOCTYPE html><html><head><meta http-equiv=3D"Content-Type" content=3D"tex= | |
t/html; charset=3DUTF-8"> | |
<title>Deploying a Rust App to Google App Engine</title> | |
=20 | |
<link href=3D"https://fonts.googleapis.com/css?family=3DRoboto" rel=3D"st= | |
ylesheet" type=3D"text/css"> | |
<link href=3D"https://fonts.googleapis.com/css?family=3DAnonymous+Pro" re= | |
l=3D"stylesheet" type=3D"text/css"> | |
<link href=3D"http://blog.jecrooks.com/stylesheets/base.css" rel=3D"style= | |
sheet" type=3D"text/css"> | |
<link rel=3D"stylesheet" href=3D"http://blog.jecrooks.com/stylesheets/cod= | |
e-highlighting/tomorrow-night-eighties.css"> | |
<style type=3D"text/css"></style> | |
=20 | |
</head> | |
<body> | |
<span class=3D"top-matter"> | |
<a href=3D"http://blog.jecrooks.com/" id=3D"title"><h1>jecrooks.com</h1= | |
></a> | |
<ul> | |
<li><a href=3D"http://blog.jecrooks.com/"><h3>blog</h3></a></li> | |
<li><a href=3D"http://blog.jecrooks.com/games/games.html"><h3>games</= | |
h3></a></li> | |
<li><a href=3D"http://blog.jecrooks.com/about.html"><h3>about</h3></a= | |
></li> | |
</ul> | |
</span> | |
<hr> | |
<div id=3D"content"> | |
<div class=3D"post"> | |
<span class=3D"post-header"> | |
<h2>Deploying a Rust App to Google App Engine</h2> | |
<h4>April 1, 2016</h4> | |
</span> | |
<div class=3D"post-body"> | |
<p> | |
I love the <a href=3D"http://rust-lang.org/">Rust Language</a>. | |
The trade-offs Rust has chosen work really well for me. | |
I like static typing, powerful type systems, functional programming= | |
, and control over memory. | |
Those last two, in particular, often seem at odds with one another,= | |
and I really appreciate Rust's particular combination of theory and pragma= | |
tism. | |
I also like Google App Engine, and the general Google cloud ecosyst= | |
em. | |
This wasn't true originally, but the more I've learned, the more I'= | |
ve grown to like it. | |
This blog is served statically from Google Cloud Storage, and I use= | |
GAE to back my consulting web-apps, when I choose the stack, at any rate. | |
While I find many things in technology quite interesting, server ma= | |
intenance is not really one of them, so GAE's managed instances are perfect= | |
for me. | |
For my first real application in Rust, I'm writing the back-end to = | |
a Disqus-like commenting system for this blog, which I want to host on GAE. | |
Which means I want to run Rust apps on GAE, which is precisely what= | |
we'll do. | |
</p> | |
<div id=3D"read-more"></div> | |
<h3>Hello Rust Engine!</h3> | |
<p> | |
In this article, we'll write a simple "Hello World" web application= | |
in Rust using the Iron web framework and deploy it to Google App Engine. | |
The app itself will be trivial: Respond to any request with "Hello = | |
Rust Engine!" | |
In order to deploy to GAE, as opposed to manage-it-yourself Compute= | |
Engine, we have to use App Engine's Custom Runtime option, which means dep= | |
loying Docker images. | |
To complicate things just a little more, I'm doing this from OS X, = | |
which requires a little more dancing around to get things working right. | |
</p> | |
<p> | |
Let's start with getting the Rust application working by itself. | |
If you're reading this, you've probably already got Rust and Cargo = | |
installed, but if not, I suggest using <a href=3D"http://www.rustup.rs/">ru= | |
stup</a> to get everything set-up. | |
With that handled, let's start a new project. | |
</p><pre><code class=3D"hljs java"> | |
$ cargo <span class=3D"hljs-keyword">new</span> hello-rust-engine -= | |
-bin | |
</code></pre> | |
Cargo will set-up a new project in the folder <code>hello-rust-engi= | |
ne</code>, complete with a hello world printing main.rs and Cargo.toml file= | |
. | |
We're going to use the <a href=3D"http://ironframework.io/">Iron fr= | |
amework</a> to build the web-app itself, so we'll need to add that to the d= | |
ependencies of the Cargo.toml file. | |
The file itself should look like: | |
<pre><code class=3D"hljs java"> | |
[<span class=3D"hljs-keyword">package</span>] | |
name =3D <span class=3D"hljs-string">"hello-rust-engine"</span> | |
version =3D <span class=3D"hljs-string">"0.1.0"</span> | |
authors =3D [<span class=3D"hljs-string">"emptylist <crooks1379@= | |
gmail.com>"</span>] | |
[dependencies] | |
iron =3D <span class=3D"hljs-string">"*"</span> | |
</code></pre> | |
The <code>iron =3D "*"</code> should be all you need to add. | |
The app itself is modified from the 'hello world' example on the Ir= | |
on.io homepage, with some additional hack to get the host ip to bind the se= | |
rver so we're serving publicly. | |
Actually, solving this was the point where I realized just how bad = | |
my networking knowledge is. | |
<p></p> | |
<pre><code class=3D"rust hljs"> | |
<span class=3D"hljs-keyword">extern</span> <span class=3D"hljs-keyword"= | |
>crate</span> iron; | |
<span class=3D"hljs-keyword">use</span> iron::prelude::*; | |
<span class=3D"hljs-keyword">use</span> iron::status; | |
<span class=3D"hljs-keyword">use</span> std::process::Command; | |
<span class=3D"hljs-keyword">use</span> std::net::SocketAddrV4; | |
<span class=3D"hljs-keyword">use</span> std::net::Ipv4Addr; | |
<span class=3D"hljs-keyword">use</span> std::<span class=3D"hljs-keywor= | |
d">str</span>; | |
<span class=3D"hljs-function"><span class=3D"hljs-keyword">fn</span> <s= | |
pan class=3D"hljs-title">main</span></span>() { | |
<span class=3D"hljs-keyword">let</span> host_port =3D <span class=3D"= | |
hljs-number">8080</span>; <span class=3D"hljs-comment">//Note: port must be= | |
8080 for GAE</span> | |
<span class=3D"hljs-keyword">let</span> hostname_cmd =3D Command::new= | |
(<span class=3D"hljs-string">"hostname"</span>).arg(<span class=3D"hljs-str= | |
ing">"-I"</span>).output(); | |
<span class=3D"hljs-keyword">let</span> host_addr: SocketAddrV4 =3D <= | |
span class=3D"hljs-keyword">match</span> hostname_cmd { | |
<span class=3D"hljs-literal">Ok</span>(res) =3D> { | |
<span class=3D"hljs-keyword">let</span> addr =3D str::from_utr8(r= | |
es.stdout.as_slice()) | |
.map_err(|err| err.to_string()) | |
.and_then(|ip_str| ip_str.trim() | |
.parse::<Ipv4Addr>() | |
.map_err(|err| err.to_string()) | |
.map(|ip| SocketAddrV4::new(ip, host_port)); | |
<span class=3D"hljs-keyword">match</span> addr { | |
<span class=3D"hljs-literal">Ok</span>(addr) =3D> addr, | |
<span class=3D"hljs-literal">Err</span>(_) =3D> { | |
<span class=3D"hljs-keyword">let</span> ip =3D Ipv4Addr::new(= | |
<span class=3D"hljs-number">127</span>, <span class=3D"hljs-number">0</span= | |
>, <span class=3D"hljs-number">0</span>, <span class=3D"hljs-number">1</spa= | |
n>); | |
SocketAddrV4::new(ip, host_port) | |
} | |
} | |
}, | |
<span class=3D"hljs-literal">Err</span>(_) =3D> { | |
<span class=3D"hljs-keyword">let</span> ip =3D Ipv4Addr::new(<spa= | |
n class=3D"hljs-number">127</span>, <span class=3D"hljs-number">0</span>, <= | |
span class=3D"hljs-number">0</span>, <span class=3D"hljs-number">1</span>); | |
SocketAddrV4::new(ip, host_port) | |
} | |
}; | |
<span class=3D"hljs-built_in">println!</span>(<span class=3D"hljs-str= | |
ing">"Server listening at {}"</span>, host_addr); | |
Iron::new(|_: &<span class=3D"hljs-keyword">mut</span> Request| { | |
<span class=3D"hljs-literal">Ok</span>(Response::with((status::<spa= | |
n class=3D"hljs-literal">Ok</span>, <span class=3D"hljs-string">"Hello Rust= | |
Engine!"</span>))) | |
}).http(host_addr).unwrap(); | |
} | |
</code></pre> | |
<p> | |
Pretty much everything above that's different from the Iron example= | |
is about getting the hostname. | |
On (many?) Linux systems, <code>hostname -I</code> will get the hos= | |
t ip address, which will be the public ip to listen to if the system is a s= | |
erver, and the loopback address if the system is not (i.e. a desktop). | |
Of course, if that command fails, as it will on OS X which I'm work= | |
ing from, I want to grab the loopback address instead so I can test that th= | |
e server running. | |
The upshot of all of this is that Docker is going to assign a 'publ= | |
ic ip' to the container, and we need to grab that ip, not localhost, to ser= | |
ve across the container-host boundary. | |
There is probably a better way of getting that IP address, but the = | |
hostname worked, at least, and using Docker means we control the applicatio= | |
n's deployment context, so it should work well enough. | |
I'm open to better suggestions. | |
Finally, the listening port must be 8080 for deploying to Google Ap= | |
p Engine. | |
</p> | |
<p> | |
The rest of the code is mainly about dealing with errors, and follo= | |
ws pretty directly the strategy in the rust book section <a href=3D"https:/= | |
/doc.rust-lang.org/book/error-handling.html">on error handling</a>. | |
At this point, <code>cargo run</code> should compile and run the se= | |
rver. | |
Most likely, you'll see <code>Server listening at 127.0.0.1:8080</c= | |
ode>, and you should get a plain text page saying "Hello Rust Engine!" at t= | |
hat address. | |
With that, we're finished with the actual Rust portion; next we nee= | |
d to build a docker image and deploy that to GAE. | |
</p> | |
<h3>Docker</h3> | |
<p> | |
The next task is making a <a href=3D"https://www.docker.com/">Docke= | |
r</a> image to deploy to GAE. | |
My knowledge of Docker consists precisely of getting this example r= | |
unning, so keep that in mind for this section. | |
If you already know how Docker works, you can skip <a href=3D"http:= | |
//blog.jecrooks.com/posts/rust-on-appengine.html#rust-docker">the section o= | |
n running the Rust app</a>. | |
Obviously, you'll need to install docker first. | |
Following that, on OS X, you need to start up <code>docker-machine<= | |
/code> first, since Docker requires a Linux kernel to function. | |
If you're on Linux, you can skip this part, but for OS X, you'll wa= | |
nt to run | |
</p> | |
<pre><code class=3D"hljs javascript"> | |
$ docker-machine create --driver virtualbox <span class=3D"hljs-key= | |
word">default</span> | |
$ <span class=3D"hljs-built_in">eval</span> $(docker-machine env <s= | |
pan class=3D"hljs-keyword">default</span>) | |
</code></pre> | |
<p> | |
The first command creates a virtual machine using virtualbox with t= | |
he name default. | |
The second line sets up the docker-machine environment variables. | |
An important note is that the second line needs to be re-run everyt= | |
ime you change Wi-Fi connections. | |
This threw me for a bit where Cargo was unable to access the intern= | |
et to pull and compile my program after I moved between Wi-Fi endpoints. | |
I think it's due to shifting IPs from DHCP; Docker images rely on t= | |
he networking information they're given when they're run, rather than askin= | |
g for it from the host dynamically, so after moving Wi-Fi endpoints, docker= | |
-machine needs to re-export the right environmental variables. | |
</p> | |
<p> | |
Anyway, test that everything is working, | |
</p><pre><code class=3D"hljs bash"> | |
$ docker run <span class=3D"hljs-_">-d</span> -P 8000:80 nginx | |
</code></pre> | |
This will pull down a Docker image with nginx and run it. | |
The <code>-P 8000:80</code> flag will publish port 80 on the contai= | |
ner to port 8000 on the host. | |
However, the container will <em>not</em> be serving on localhost. | |
To get the ip address from docker-machine, run | |
<pre><code class=3D"hljs"> | |
$ docker-machine ip | |
</code></pre> | |
In my case, this yields <code>192.168.99.100</code>, so going to <c= | |
ode>192.168.99.100:8000</code> in the browser will show the Nginx default p= | |
age. | |
With that, we can make a docker image for our Rust application. | |
<p></p> | |
<div id=3D"rust-docker"></div> | |
<h3>Running the Rust Webapp through Docker</h3> | |
<p> | |
At this point we can write a Dockerfile to deploy with. | |
<a href=3D"https://www.jimmycuadra.com/">Jimmy Cuadra</a> has publi= | |
shed a <a href=3D"https://hub.docker.com/r/jimmycuadra/rust/">Docker image<= | |
/a> that sets up a Rust environment with rustc, cargo, and company. | |
We'll use this image as a base to build the image we'll deploy to G= | |
AE. | |
In the <code>hello-rust-engine</code> directory, make a new Dockerf= | |
ile (called Dockerfile) containing | |
</p><pre><code class=3D"hljs bash"> | |
FROM jimmycuadra/rust | |
EXPOSE 8080 | |
COPY Cargo.toml /<span class=3D"hljs-built_in">source</span> | |
COPY src/main.rs /srouce/src/ | |
CMD cargo run | |
</code></pre> | |
This takes the <code>jimmycuadra/rust</code> image as a base, expos= | |
es port 8080 on the container, copies files from the current directory to t= | |
he directory <code>/source</code> and finally executes the cargo run comman= | |
d. | |
By default, the base docker image makes a directory <code>/source</= | |
code> and enters there, which is why we're copying the files there. | |
Since we're just making a proof of principle, we'll use <code>cargo= | |
run</code> to compile and launch the application when the image starts, bu= | |
t in general this is not a good deployment strategy for an actual applicati= | |
on. | |
<p></p> | |
<p> | |
With that, we can build and run the docker image for the app. | |
</p><pre><code class=3D"hljs"> | |
$ docker build -t hello-rust . | |
$ docker run -P hello-rust | |
</code></pre> | |
The first command obviously builds the image, in this case <code>-t= | |
hello-rust</code> names the image hello-rust, and <code>.</code> specifies= | |
that we're building using the current directory as the path root. | |
The second command runs the <code>hello-rust</code> image that we j= | |
ust built, publishing all of the ports that are listed by <code>EXPOSE</cod= | |
e> to host ports selected by Docker. | |
After running, you should see Cargo doing it's thing and compiling = | |
and running the application. | |
Remember that the internal IP that the images publishes is not the = | |
IP to visit in the browser. | |
In my case, the rust application tells me that the server is listen= | |
ing at <code>172.17.0.2:8080</code>, but we actually need the IP address an= | |
d port that Docker is communicating to the host on, which we can get from <= | |
code>docker ps</code> and <code>docker-machine ip</code>: | |
<pre><code class=3D"hljs vim"> | |
$ docker-machine ip | |
$ docker <span class=3D"hljs-keyword">ps</span> | |
</code></pre> | |
The first command will give the ip address to check. | |
Again, for me, this is <code>192.168.99.100</code>. | |
The second will show the running docker processes; we're interested= | |
in the PORTS column, which should have an entry that looks like=20 | |
<pre><code class=3D"hljs elm"> | |
<span class=3D"hljs-number">0.0</span><span class=3D"hljs-number">.= | |
0</span><span class=3D"hljs-number">.0</span>:<span class=3D"hljs-number">3= | |
2769</span>-><span class=3D"hljs-number">8080</span>/tcp | |
</code></pre> | |
This tells us that the docker process is forwarding port 32769 of t= | |
he host machine to port 8080 of the docker container for tcp traffic. | |
The upshot is that, in my case, I want to visit <code>192.168.99.10= | |
0:8080</code> in the browser, or alternatively you can test with cURL. | |
<pre><code class=3D"hljs"> | |
$ curl 192.168.99.100:32769 | |
</code></pre> | |
I get the response back "Hello Rust Engine!" and realize I didn't e= | |
ven bother to finish the response with a newline. | |
Obviously, you'll want to substitute the ip and port your system sh= | |
ows from the docker commands. | |
At this point we're successfully running our trivial web applicatio= | |
n from inside a docker container. | |
Last step: deploy to GAE! | |
<p></p> | |
<p> | |
As an aside: you'll want to stop the docker process running the ima= | |
ge now. | |
To do so, use=20 | |
</p><pre><code class=3D"hljs sql"> | |
$ docker <span class=3D"hljs-keyword">stop</span> $<span class=3D"h= | |
ljs-keyword">name</span> | |
</code></pre> | |
where <code>$name</code> is the name of the process shown in the NA= | |
MES column when running <code>docker ps</code>. | |
They're random and odd - I've got one 'hopeful_dubinsky' as I write= | |
this section. | |
<h3>Deployment</h3> | |
<p> | |
Finally, we're almost there! | |
Our last step is deploying to Google App Engine. | |
If you haven't already, you'll need to <a href=3D"https://cloud.goo= | |
gle.com/appengine/">sign up</a> and install the <a href=3D"https://cloud.go= | |
ogle.com/sdk/">gcloud SDK</a>. | |
Follow the instructions and get everything initialized. | |
You'll also need to set up a project to deploy to through the web c= | |
onsole. | |
My project for this application is "hello-rust-engine", so that's t= | |
he name I'll be using for the rest of the article. | |
Substitute with your project name as appropriate. | |
</p> | |
<p> | |
If you haven't already while following Google's instructions, you'l= | |
l want to run | |
</p><pre><code class=3D"hljs swift"> | |
$ gcloud <span class=3D"hljs-keyword">init</span> | |
</code></pre> | |
The interactive initialization procedure will handle set up. | |
If you didn't set up the 'hello-rust-engine' project as the default= | |
during the init process, do so now with | |
<pre><code class=3D"hljs sql"> | |
$ gcloud config <span class=3D"hljs-keyword">set</span> <span class= | |
=3D"hljs-keyword">project</span> hello-rust-<span class=3D"hljs-keyword">en= | |
gine</span> | |
</code></pre> | |
Okay, that should handle the set up. | |
We need to make an app.yaml file to configure GAE and then we can u= | |
pload. | |
The app.yaml file should be located in the project root (so the hel= | |
lo-rust-engine directory), along with src and the Dockerfile, and should re= | |
ad | |
<pre><code class=3D"hljs http"> | |
<span class=3D"hljs-attribute">runtime</span>: custom | |
<span class=3D"hljs-attribute">vm</span>: true | |
</code></pre> | |
This just specifies that we're using the Custom Runtime/Managed VM = | |
system. | |
There's nothing else we need to do with the YAML file for this demo= | |
, so let's deploy! | |
<pre><code class=3D"hljs"> | |
$ gcloud preview app deploy | |
</code></pre> | |
This should deploy the docker image <code>hello-rust-engine/default= | |
</code> to GAE at the URL specified on your project console, in my case, th= | |
is is <code>https://hello-rust-engine.appspot.com</code>. | |
Deployment will take awhile. | |
Be patient. | |
<p></p> | |
<p> | |
Once it's live, you can test with the browser or via curl | |
</p><pre><code class=3D"hljs vim"> | |
$ curl hello-rust-engine.appspot.<span class=3D"hljs-keyword">com</= | |
span> | |
</code></pre> | |
(But with your project URL, of course!) | |
And you should see | |
<pre><code class=3D"hljs"> | |
Hello Rust Engine! | |
</code></pre> | |
We're done! | |
Rust is running on GAE. | |
Happy hacking! | |
<p></p> | |
</div> | |
</div> | |
</div> | |
<div class=3D"footer"> | |
<small> | |
This <span xmlns:dct=3D"http://purl.org/dc/terms/" href=3D"http://purl.= | |
org/dc/dcmitype/Text" rel=3D"dct:type">work</span> is licensed under a <a r= | |
el=3D"license" href=3D"http://creativecommons.org/licenses/by/4.0/">Creativ= | |
e Commons Attribution 4.0 International License</a>. | |
</small> | |
</div> | |
</body></html> | |
------MultipartBoundary--JS6VqEA1CaoIbspHBB61qNgbfVtHBPM813M6vK79n8---- | |
Content-Type: font/woff2 | |
Content-Transfer-Encoding: base64 | |
Content-Location: https://fonts.gstatic.com/s/roboto/v15/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2 | |
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 | |
------MultipartBoundary--JS6VqEA1CaoIbspHBB61qNgbfVtHBPM813M6vK79n8---- | |
Content-Type: text/css | |
Content-Transfer-Encoding: quoted-printable | |
Content-Location: https://fonts.googleapis.com/css?family=Roboto | |
@charset "utf-8"; | |
@font-face { font-family: Roboto; font-style: normal; font-weight: 400; src= | |
: local("Roboto"), local("Roboto-Regular"), url("https://fonts.gstatic.com/= | |
s/roboto/v15/sTdaA6j0Psb920Vjv-mrzH-_kf6ByYO6CLYdB4HQE-Y.woff2") format("wo= | |
ff2"); unicode-range: U+460-52F, U+20B4, U+2DE0-2DFF, U+A640-A69F; } | |
@font-face { font-family: Roboto; font-style: normal; font-weight: 400; src= | |
: local("Roboto"), local("Roboto-Regular"), url("https://fonts.gstatic.com/= | |
s/roboto/v15/uYECMKoHcO9x1wdmbyHIm3-_kf6ByYO6CLYdB4HQE-Y.woff2") format("wo= | |
ff2"); unicode-range: U+400-45F, U+490-491, U+4B0-4B1, U+2116; } | |
@font-face { font-family: Roboto; font-style: normal; font-weight: 400; src= | |
: local("Roboto"), local("Roboto-Regular"), url("https://fonts.gstatic.com/= | |
s/roboto/v15/tnj4SB6DNbdaQnsM8CFqBX-_kf6ByYO6CLYdB4HQE-Y.woff2") format("wo= | |
ff2"); unicode-range: U+1F00-1FFF; } | |
@font-face { font-family: Roboto; font-style: normal; font-weight: 400; src= | |
: local("Roboto"), local("Roboto-Regular"), url("https://fonts.gstatic.com/= | |
s/roboto/v15/_VYFx-s824kXq_Ul2BHqYH-_kf6ByYO6CLYdB4HQE-Y.woff2") format("wo= | |
ff2"); unicode-range: U+370-3FF; } | |
@font-face { font-family: Roboto; font-style: normal; font-weight: 400; src= | |
: local("Roboto"), local("Roboto-Regular"), url("https://fonts.gstatic.com/= | |
s/roboto/v15/NJ4vxlgWwWbEsv18dAhqnn-_kf6ByYO6CLYdB4HQE-Y.woff2") format("wo= | |
ff2"); unicode-range: U+102-103, U+1EA0-1EF1, U+20AB; } | |
@font-face { font-family: Roboto; font-style: normal; font-weight: 400; src= | |
: local("Roboto"), local("Roboto-Regular"), url("https://fonts.gstatic.com/= | |
s/roboto/v15/Ks_cVxiCiwUWVsFWFA3Bjn-_kf6ByYO6CLYdB4HQE-Y.woff2") format("wo= | |
ff2"); unicode-range: U+100-24F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2= | |
C60-2C7F, U+A720-A7FF; } | |
@font-face { font-family: Roboto; font-style: normal; font-weight: 400; src= | |
: local("Roboto"), local("Roboto-Regular"), url("https://fonts.gstatic.com/= | |
s/roboto/v15/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2") format("wo= | |
ff2"); unicode-range: U+0-FF, U+131, U+152-153, U+2C6, U+2DA, U+2DC, U+2000= | |
-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; } | |
------MultipartBoundary--JS6VqEA1CaoIbspHBB61qNgbfVtHBPM813M6vK79n8---- | |
Content-Type: font/woff2 | |
Content-Transfer-Encoding: base64 | |
Content-Location: https://fonts.gstatic.com/s/anonymouspro/v8/Zhfjj_gat3waL4JSju74E3n3cbdKJftHIk87C9ihfO8.woff2 | |
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 | |
AAA= | |
------MultipartBoundary--JS6VqEA1CaoIbspHBB61qNgbfVtHBPM813M6vK79n8---- | |
Content-Type: text/css | |
Content-Transfer-Encoding: quoted-printable | |
Content-Location: https://fonts.googleapis.com/css?family=Anonymous+Pro | |
@charset "utf-8"; | |
@font-face { font-family: "Anonymous Pro"; font-style: normal; font-weight:= | |
400; src: local("Anonymous Pro"), local("AnonymousPro"), url("https://font= | |
s.gstatic.com/s/anonymouspro/v8/Zhfjj_gat3waL4JSju74E7adWJUEM8B3QOikd-ElbEI= | |
.woff2") format("woff2"); unicode-range: U+400-45F, U+490-491, U+4B0-4B1, U= | |
+2116; } | |
@font-face { font-family: "Anonymous Pro"; font-style: normal; font-weight:= | |
400; src: local("Anonymous Pro"), local("AnonymousPro"), url("https://font= | |
s.gstatic.com/s/anonymouspro/v8/Zhfjj_gat3waL4JSju74E2z7ZuG627hcbv-qfsWAw0c= | |
.woff2") format("woff2"); unicode-range: U+370-3FF; } | |
@font-face { font-family: "Anonymous Pro"; font-style: normal; font-weight:= | |
400; src: local("Anonymous Pro"), local("AnonymousPro"), url("https://font= | |
s.gstatic.com/s/anonymouspro/v8/Zhfjj_gat3waL4JSju74E9ZXQWU7WlSDbWsNPOIoHjQ= | |
.woff2") format("woff2"); unicode-range: U+100-24F, U+1E00-1EFF, U+20A0-20A= | |
B, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; } | |
@font-face { font-family: "Anonymous Pro"; font-style: normal; font-weight:= | |
400; src: local("Anonymous Pro"), local("AnonymousPro"), url("https://font= | |
s.gstatic.com/s/anonymouspro/v8/Zhfjj_gat3waL4JSju74E3n3cbdKJftHIk87C9ihfO8= | |
.woff2") format("woff2"); unicode-range: U+0-FF, U+131, U+152-153, U+2C6, U= | |
+2DA, U+2DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U= | |
+F000; } | |
------MultipartBoundary--JS6VqEA1CaoIbspHBB61qNgbfVtHBPM813M6vK79n8---- | |
Content-Type: text/css | |
Content-Transfer-Encoding: quoted-printable | |
Content-Location: http://blog.jecrooks.com/stylesheets/base.css | |
@charset "utf-8"; | |
body { font-family: Roboto, sans-serif; font-size: 140%; line-height: 1.6; = | |
margin-left: 10%; margin-right: 10%; margin-top: 40px; background-color: rg= | |
b(250, 250, 250); } | |
pre { width: 100%; overflow: auto; font-size: 18px; } | |
code { font-family: "Anonymous Pro", monospace; } | |
a { text-decoration-line: none; } | |
.top-matter { display: block; } | |
.top-matter ul { position: absolute; right: 10%; top: 10px; } | |
.top-matter li { display: inline-block; margin-left: 5px; } | |
.top-matter a { color: black; text-decoration-line: none; } | |
.top-matter a:hover { color: gold; } | |
#title h1 { margin-left: 5px; color: black; } | |
.post-header { line-height: 1; } | |
.post-header a { color: black; } | |
#content { padding-top: 20px; padding-left: 5%; padding-right: 5%; } | |
.footer { font-size: 80%; margin-left: 50%; transform: translateX(-50%); } | |
------MultipartBoundary--JS6VqEA1CaoIbspHBB61qNgbfVtHBPM813M6vK79n8---- | |
Content-Type: text/css | |
Content-Transfer-Encoding: quoted-printable | |
Content-Location: http://blog.jecrooks.com/stylesheets/code-highlighting/tomorrow-night-eighties.css | |
@charset "utf-8"; | |
.hljs-comment, .hljs-quote { color: rgb(153, 153, 153); } | |
.hljs-variable, .hljs-template-variable, .hljs-tag, .hljs-name, .hljs-selec= | |
tor-id, .hljs-selector-class, .hljs-regexp, .hljs-deletion { color: rgb(242= | |
, 119, 122); } | |
.hljs-number, .hljs-built_in, .hljs-builtin-name, .hljs-literal, .hljs-type= | |
, .hljs-params, .hljs-meta, .hljs-link { color: rgb(249, 145, 87); } | |
.hljs-attribute { color: rgb(255, 204, 102); } | |
.hljs-string, .hljs-symbol, .hljs-bullet, .hljs-addition { color: rgb(153, = | |
204, 153); } | |
.hljs-title, .hljs-section { color: rgb(102, 153, 204); } | |
.hljs-keyword, .hljs-selector-tag { color: rgb(204, 153, 204); } | |
.hljs { display: block; overflow-x: auto; color: rgb(204, 204, 204); paddin= | |
g: 0.5em; background: rgb(45, 45, 45); } | |
.hljs-emphasis { font-style: italic; } | |
.hljs-strong { font-weight: bold; } | |
------MultipartBoundary--JS6VqEA1CaoIbspHBB61qNgbfVtHBPM813M6vK79n8------ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment