commit 59570c8e75b2928782e01447db77fe7472f725c8 Author: Aaron Gutierrez Date: Sun Jul 22 15:39:43 2018 -0700 Initial commit diff --git a/15418/index.html b/15418/index.html new file mode 100644 index 0000000..21520dc --- /dev/null +++ b/15418/index.html @@ -0,0 +1,366 @@ + + + ISPC++ - 15418 Final Project + + + + +
+

ISPC++

+

15418 Final Project

+

Aaron Gutierrez
amgutier@andrew
Carnegie Mellon University

+
+ +
+

Final Write Up

+ +

Summary

+

ISPC++ adds support for numeric polymorphic functions to the Intel SPMD + Program Compiler. Programmers can write a single function definition and use + the same function on any appropriate numeric type.

+ +

Background

+

ISPC++ is a fork of the + Intel SPMD Program Compiler + (ISPC). ISPC aims to make writing programs that take advantage + of SIMD vector instructions easy for a C or C++ programmer. Because of the + target application, most functions perform computations on numeric data. + Based off of the C language, an ISPC program must include multiple + different definitions for each appropriate datatype.

+ +

ISPC++ removes that burden by providing polymorphic numeric types and + automatically compiling multiple versions of functions for use with + different datatypes. The programmer now needs to only write and maintain a + single version of each function.

+ +
+number pow(number b, int a) {
+    number out = b;
+    for (int i = 1; i<a; i++) {
+        out *= b;
+    }
+
+    return out;
+}
+
+export void square(uniform int N, uniform number b[], uniform number out[]) {
+    foreach (i = 0 ... N) {
+        out[i] = pow(b[i], 2);
+    }
+}
+
+

Sample function using a polymorphic helper method

+ + +

Approach

+

Modifications to ISPC fall into two broad categories: adding support for + polymorphic type, and expanding functions with polymorphic arguments.

+ +

To add support for polymorphic types, I created a new type class + PolyType. There are three varieties: integer, floating, and + number. As with the other basic types in ISPC, we can have uniform or + varying, in addition to const, versions of each type. With the new types + added, the parser was modified to produce the new types. Finally, the new + cases produced by the new types are handled in typechecking.

+ +

After typechecking a function, we check for polymorphic parameters. If a + function has any polymorphic parameters, we create all of the permutations + of the function prototype. These prototypes are stored to produce the proper + header file later.

+ +

When adding definitions to the declarations, we traverse the abstract + syntax tree replacing the polymorphic types with the appropriate type from + the function definition. After this step is done, we are left with + overloaded functions and no polymorphic types. The rest of compilation + occurs normally.

+ +

When writing the final output, we add wrappers around all of the + polymorphic functions to enable convenient use from our C++ program.

+ +

For example, if we have a function void foo(uniform int N, uniform + floating A[]), we'd have the following header file:

+ + +
/* boilerplate from ISPC */
+    extern void foo_uni_un_3C_und_3E_(int32_t N, double * X);
+    extern void foo_uni_un_3C_unf_3E_(int32_t N, float * X);
+
+#if defined(__cplusplus)
+    extern void foo(int32_t N, double * X) {
+        return foo_uni_un_3C_und_3E_(N, X);
+    }
+    extern void foo(int32_t N, float * X) {
+        return foo_uni_un_3C_unf_3E_(N, X);
+    }
+#endif // __cplusplus
+/* more boilerplate */
+
+

Example header file showing overloaded polymorphic + function foo

+ +

Language Specification

+

Most of the language is unchanged from ISPC. The specification can be + found in the ISPC documentation.

+ +

The only change is the 3 new types. The semantics follow if you treat the + types as their representative atomic types.

+ +
<type>        := <variability> <typename><quant>;
+               | /* all the other ISPC types
+               ;
+<variability> := uniform
+               | varying
+               | /* empty, varying */
+               ;
+<typename>    := integer
+               | floating
+               | number
+               ;
+<quant>       := $[0-9]+
+               | /* empty, default quantifier */
+               ;
+
+

Specification for an ISPC++ type

+ +

integer is expanded to all of the integer types (signed and + unsigned, 8, 16, 32, and 64 bits). floating is expanded to both + float and double. number is expanded to the + union of the set of types for integer and + floating.

+ +

The quantifier is used to distinguish independent polymorphic types. If + no quantifier is specified, all similar types are considered identical. + Otherwise, types with different quantifiers are expanded independently. The + syntax for quantifiers has changed since the start of my project to avoid + conflict with vector types.

+ +

In the saxpy function bellow, we use type quantifiers to specify that the + input types can vary independent of the output type.

+ + +
export void saxpy(uniform int N,
+                  uniform floating$0 scale,
+                  uniform floating$1 X[],
+                  uniform floating$1 Y[],
+                  uniform floating$2 result[])
+{
+    foreach (i = 0 ... N) {
+        floating$2 tmp = scale * X[i] + Y[i];
+        result[i] = tmp;
+    }
+}
+
+

Example saxpy program showing quantified + polymorphic types

+ + +

A function may only return a polymorphic type if that type appears in the + parameters. Any polymorphic type found in a function body not found in the + parameters is cause for a typechecking error.

+ + +

Results

+

At present, my compiler works as intended on all of my test cases.

+ +

Maintain full compatibility with the ISPC language

+

To my first goal of maintaining compatibility with ISPC, out of 1330 test + cases, I fail 1 due to a variable named number which is now the + name of a type, and then 3 others that involve an implicit struct + definition, which I'll accept as minimally disruptive.

+ +

Produce C and C++ compatible object code

+

Compatibility with C++ is excellent: the produced header file defines a + single overloaded function for each exported polymorphic function that can + be used from the namespace ispc.

+

Compatibility with C is worse, but functional. Each version of a + polymorphic function is exported, but with a mangled name. Given that C does + not support polymorphic functions, this is as best as we can hope to do, but + working in C++ should be greatly preferred.

+ +

Produce performant, vectorized versions of polymorphic functions

+

Given that the backend of the compiler is not modified, the resulting + object file should be identical to non-polymorphic code. I do not have + extensive benchmarks, as I assumed performance would not be an issue, but + from my testing performance is not a concern.

+ +

Within ISPC, polymorphic functions are supported natively through + function overloading, including with concurrency through the + launch semantic.

+ +

Conclusion

+

Overall, I would consider ISPC++ a success. Aside from the issues with + implicitly defined structs, my finished product matches my vision coming + into this project and from my proposal.

+ +

We are able to easily make some academic observations using the new + functionality. For example, I modified our square root function from the + first assignment to observe single vs. double precision performance.

+
[sqrt float serial]:            [779.727] ms
+[sqrt double serial]:           [785.532] ms
+[sqrt float ispc]:              [117.996] ms
+[sqrt double ispc]:             [270.264] ms
+[sqrt float task ispc]:         [27.195] ms
+[sqrt double task ispc]:        [56.185] ms
+                                (6.61x speedup from ISPC float)
+                                (2.91x speedup from ISPC double)
+                                (28.67x speedup from task ISPC float)
+                                (13.98x speedup from task ISPC double)
+
+

Newton's square root algorithm with single and double + precision values on an Intel Xeon E5-1660 v4 @ 3.20GHz

+ +

We can see that the speedup from vectorization is much lower with + doubles, while the speedup from tasks is comparable regardless of type. I + was able to run this test without duplicating any ISPC code. This conclusion + isn't surprising, given that we operate on half as many values when we + double the precision, but as a curious student, I can try any datatype or + modify the function without duplicating definitions.

+ +

In the same way ISPC enables a programmer to easily produce programs that + take advantage of modern CPU's, ISPC++ furthers that mission by reducing + code duplication. The easier it is for programmers to write high performance + code, the more programmers will write high performance code.

+
+ +
+

Project Checkpoint

+ +

Work Completed

+

I have a proof of concept implementation working. Using aggressive + textual replacement, it produces valid ISPC, with a different function for + each combination of polymorphic types.

+ + +
export void saxpy(uniform int N,
+                  uniform floating<0> scale,
+                  uniform floating<1> X[],
+                  uniform floating<1> Y[],
+                  uniform floating<2> result[])
+{
+    foreach (i = 0 ... N) {
+        floating<2> tmp = scale * X[i] + Y[i];
+        result[i] = tmp;
+    }
+}
+
+ +

This simple SAXPY program produces a header file with multiple overloaded + definitions for the saxpy function. From the example, you can see the syntax + used for polymorphic types: floating<0> represents an + arbitrary floating point type, where the number is used to differentiate + independent polymorphic types. The only polymorphic types allowed are + floating, integer, and number. This + restriction solves one of the more complicated issues with separate + compilation of polymorphic code: we always generate all permutations of + polymorphic functions. We end up with an exponential blow up in code size, + but practical functions will likely only have a few polymorphic + parameters.

+ +

Upcoming Work

+

The next big step will be to modify the ISPC parser and elaboration + phases. My goals are largely unchanged, and I feel on track to produce a + complete, working solution:

+ + + +

Updated Schedule

+

Due to illness and a realization that a preprocessor based implementation + would result in redundant work, I am no longer aiming to produce a complete + preprocessor based solution.

+ + +
+ +
+

Proposal

+ +

ISPC++ is a fork of the Intel SPMD Program Compiler + (ISPC) project that includes support of polymorphic datatypes and + functions.

+ +

Background

+

ISPC aims to make writing single program multiple data (SPMD) programs + easy and relatively target-agnostic. The programmer does not need to write + vector intrinsics for each target platform, but can still closely reason + about a programs' mapping to hardware. The language closely resembles C, and + produces object files compatible with conventional C or C++ programs.

+ +

With roots in C, ISPC faces the same limitation to code reuse as C; in + particular, both languages lack polymorphism. Given that ISPC functions are + primarily arithmetic in nature, adding polymorphism will enable programmers + to write a single procedure and use it with any vector-supported datatype. A + single function definition can be used with different sized datatypes or + even both floating point and integer versions.

+ +

Similarly to how ISPC frees the programmer from re-writing functions + using different versions of intrinsics, ISPC++ will extend the abstraction to + include different operands.

+ +

Problem

+

The root of the challenge stems from maintaining compatibility with ISPC + and with C or C++. ISPC is a large application with support for a wide range + of targets, and a successful project will not inhibit that flexibility.

+ +

Resources

+

This is a direct fork of the ISPC project. Hopefully, ISPC++ will share + the same compatibility as ISPC, able to run across platforms and with any + number of vector targets.

+ +

Goals

+

This project aims to

+ +

and hopefully fully supports

+ + +

Assessment

+

The first three goals are pretty hard requirements. For the last two + there is some ability to have partial success. This project will be + completely successful if a programmer can write a single ISPC++ function and + use that function with any appropriate datatypes via overloading in C++. Any + restrictions placed on expressiveness should be avoided. For example, if the + solution makes use of regular expressions rather than integrating with the + AST, I would consider the project only a partial success.

+ +

Schedule

+ +
+ + diff --git a/15418/style.css b/15418/style.css new file mode 100644 index 0000000..15fdccb --- /dev/null +++ b/15418/style.css @@ -0,0 +1,104 @@ +body { + font-family: sans-serif; + background-color: #484848; + color: #989898; + padding: 24pt; + max-width: 800px; + margin-left: auto; + margin-right: auto; + margin-top: 0; + margin-bottom: 0; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: lighter; + line-height: 150%; +} + +h1 { + font-size: 24pt; +} + +h2 { + font-size: 16pt; + color: #ae4c00; +} + +h3 { + font-size: 12pt; + font-weight: bold; + color: #259089; +} + +h4 { + font-size: 12pt; + font-weight: bold; +} + +h4 { + line-height: 100%; +} + +p, ul { + font-size: 10pt; + line-height: 12pt; + color: #b8b8b8; +} + +p.caption { + margin-top: 2pt; + margin-bottom: 12pt; + margin-left: 12pt; + margin-right: 12pt; + text-align: center; +} + +a { + color: #7878c8; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +body > * { + border-bottom: 1px solid #989898; +} + +code { + background: #b8b8b8; + width: auto; + display: block; + padding: 10pt; + color: #222; + font-family: monospace; + overflow-x: scroll; +} + +code > pre { + margin: 0; + line-height: 125%; +} + +code .keyword { + color: #204a87; + font-weight: bold; +} + +code .ident { + font-weight: bold; +} + +code .op { + color: #208787; +} + +code .comment { + color: #20874a; +} + +code .type { + color: #ae4c00; + font-weight: bold; +} diff --git a/bench.sh b/bench.sh new file mode 100644 index 0000000..48e8054 --- /dev/null +++ b/bench.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +set -e +set +x + +for FILE in img/bench/webp-src/*.jpg; do + OUT="${FILE%.*}.webp" + OUT2X="${FILE%.*}@2x.webp" + cwebp -mt -resize 160 0 -q 40 $FILE -o $OUT + cwebp -mt -q 40 $FILE -o $OUT2X +done + +mv img/bench/webp-src/*.webp img/bench/ diff --git a/bench/1.html b/bench/1.html new file mode 100644 index 0000000..9593832 --- /dev/null +++ b/bench/1.html @@ -0,0 +1,52 @@ + + + + Bench - Aaron Gutierrez + + + + +
+

Bench.

+
+
+

Towards the start of my time at Carnegie Mellon, I started taking + pictures of benches. It provided me an object to seek out; and seek + benches out I did. Since then, I've amassed a collection of photographs + from all over the world.

+ +

All images + CC BY-NC Aaron Gutierrez.

+ +
+ + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/bench/2.html b/bench/2.html new file mode 100644 index 0000000..1309660 --- /dev/null +++ b/bench/2.html @@ -0,0 +1,52 @@ + + + + Bench - Aaron Gutierrez + + + + +
+

Bench.

+
+
+

Towards the start of my time at Carnegie Mellon, I started taking + pictures of benches. It provided me an object to seek out; and seek + benches out I did. Since then, I've amassed a collection of photographs + from all over the world.

+ +

All images + CC BY-NC Aaron Gutierrez.

+ +
+ + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/bench/3.html b/bench/3.html new file mode 100644 index 0000000..3bbfd14 --- /dev/null +++ b/bench/3.html @@ -0,0 +1,52 @@ + + + + Bench - Aaron Gutierrez + + + + +
+

Bench.

+
+
+

Towards the start of my time at Carnegie Mellon, I started taking + pictures of benches. It provided me an object to seek out; and seek + benches out I did. Since then, I've amassed a collection of photographs + from all over the world.

+ +

All images + CC BY-NC Aaron Gutierrez.

+ +
+ + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/bench/4.html b/bench/4.html new file mode 100644 index 0000000..5de0e22 --- /dev/null +++ b/bench/4.html @@ -0,0 +1,52 @@ + + + + + Bench - Aaron Gutierrez + + + + +
+

Bench.

+
+
+

Towards the start of my time at Carnegie Mellon, I started taking + pictures of benches. It provided me an object to seek out; and seek + benches out I did. Since then, I've amassed a collection of photographs + from all over the world.

+ +

All images + CC BY-NC Aaron Gutierrez.

+ +
+ + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/bench_template.html b/bench_template.html new file mode 100644 index 0000000..7b674e6 --- /dev/null +++ b/bench_template.html @@ -0,0 +1,36 @@ + + + + Bench - Aaron Gutierrez + + + + +
+

Bench.

+
+
+

Towards the start of my time at Carnegie Mellon, I started taking + pictures of benches. It provided me an object to seek out; and seek + benches out I did. Since then, I've amassed a collection of photographs + from all over the world.

+ +

All images + CC BY-NC Aaron Gutierrez.

+ +
+ {0} +
+
+
+ + + diff --git a/campaign/aaron.jpg b/campaign/aaron.jpg new file mode 100644 index 0000000..7bff9aa Binary files /dev/null and b/campaign/aaron.jpg differ diff --git a/campaign/banner.jpg b/campaign/banner.jpg new file mode 100644 index 0000000..d95a426 Binary files /dev/null and b/campaign/banner.jpg differ diff --git a/campaign/bettina.jpg b/campaign/bettina.jpg new file mode 100644 index 0000000..e5587a8 Binary files /dev/null and b/campaign/bettina.jpg differ diff --git a/campaign/care.jpg b/campaign/care.jpg new file mode 100644 index 0000000..a568a99 Binary files /dev/null and b/campaign/care.jpg differ diff --git a/campaign/contact.jpg b/campaign/contact.jpg new file mode 100644 index 0000000..60de2df Binary files /dev/null and b/campaign/contact.jpg differ diff --git a/campaign/cover.jpg b/campaign/cover.jpg new file mode 100644 index 0000000..22681de Binary files /dev/null and b/campaign/cover.jpg differ diff --git a/campaign/favicon.png b/campaign/favicon.png new file mode 100644 index 0000000..261f4b5 Binary files /dev/null and b/campaign/favicon.png differ diff --git a/campaign/frame.png b/campaign/frame.png new file mode 100644 index 0000000..129f5eb Binary files /dev/null and b/campaign/frame.png differ diff --git a/campaign/icon0.png b/campaign/icon0.png new file mode 100644 index 0000000..ce7f9c1 Binary files /dev/null and b/campaign/icon0.png differ diff --git a/campaign/icon1.png b/campaign/icon1.png new file mode 100644 index 0000000..190b8b5 Binary files /dev/null and b/campaign/icon1.png differ diff --git a/campaign/icon2.png b/campaign/icon2.png new file mode 100644 index 0000000..947ba23 Binary files /dev/null and b/campaign/icon2.png differ diff --git a/campaign/index.html b/campaign/index.html new file mode 100644 index 0000000..8f0d640 --- /dev/null +++ b/campaign/index.html @@ -0,0 +1,203 @@ + + + + Vaasavi and Aaron 2016 + + + + + + + + +
+
+ +
+
+
+ + + +

Who we are

+ +
+
+ + Vaasavi is a third year studying Economics at Carnegie Mellon + University. She has been involved in the Student Senate, Student Life, + Moneythink, and Counterpoint. +
+
+ + Aaron is a junior computer science major with a minor in music. On + campus, Aaron is a four-time teaching assistant for 15-122, president of + Delta Tau Delta, and has served in various student government and senate + roles. +
+
+ +

Why we care

+ + +
+
+

Vaasavi

+ In her time at Carnegie Mellon, Vaasavi has always wanted to make + student's lives better. After working with administration on the + University Strategic Plan, she realized that students were missing a + vital part of their Carnegie Mellon Experience: the infrastructure to + be innovators and leaders outside of the classroom. Since then, she + has worked to create environments encouraging students to think of + ways to change campus for the better. In her work as CA of E Tower, + she created a thinly-veiled incentive structure for students to engage + with the outside community. She wants to bring this to the overall CMU + community to make permanent improvements to campus. +
+
+

Aaron

+ When Aaron first came to Carnegie Mellon, he took up as many + opportunities to try new things and engage with the campus as + possible. He felt that he grew and learned far more outside the + classroom. Not everyone takes that same path. More than anything else, + students are forced to prioritize at Carnegie Mellon, and that is the + cause of a lot of stress. But students should not have to make that + choice. Engaging and exploration with the campus outside the classroom + should be an integral part of the Carnegie Mellon experience. +
+
+ +

How we will help

+ +
+
+ +

Fiscal Transparency

+ As students, we deserve to know where our tuition is going, how our + administrators are getting paid and about the university's spending. + Aaron and Vaasavi have read CMU's tax forms, so you don't have to. + Additionally, we are constantly asked for donations, yet it's not + always clear where that money is used. Look out for infographics on + our Facebook page! #financefridays +
+
+ +

The Model for Social Change

+ If we're going to change the world, we might as well get started. We + call it the President's Initiative--the common thread of the CMU + experience that we have the power to change. Vaasavi and Aaron + propose to mobilize club presidents around a common issue, and reward + the clubs and organizations that provide innovative cultural + solutions on our campus. +
+
+ +

Student Government Transparency

+ It shouldn't be normal that no one knows what Student Government + Executives do. The Student Body President should make an effort to be + present and available to all students, and regularly inform the + student body on what they're up to. Vaasavi and Aaron propose making + all student organization transactions public, a weekly column in the + Tartan, and going beyond the constitutionally required SBP office + hours in highly trafficked areas of campus, so there are no barriers + to being informed. +
+
+ +

Our team

+
+
+ +

Olivia Roy - Chief of Staff

+ + I've known Aaron since we were freshmen in E-Tower. We and our + friends would sit on the floor of his room and talk about how we had + grown since high school. As introspective as those + conversations are, I don't want to just talk anymore, I want to do + something. Vaasavi has a compelling call to action, and the + leadership qualities that we need in a Student Body President. I'm + proud to support Vaas and Aaron because they don't just want to talk + about how CMU has changed us, but how we can change CMU. +
+
+ +

Zach Newman - Recruitment

+ I support Vaasavi because from our first meeting, I knew how much + passion she has for this school and how much she is able to make + positive change. After conversations with her about deep rooted + issues we face as students, I realized the importance to have a leader + who understands so many different cultures within the student body to + make our four years at Carnegie Mellon more meaningful, impactful, + and positive. Despite her humility, I fully believe Vaasavi fits that + role and I am proud to be a part of her campaign. +
+
+ +

Srishti Jain - Public Relations

+ + I'm tired of merely talking about social change, and am ready for + students at Carnegie Mellon to actually make change. I believe Vaasavi + and Aaron are the best candidates to facilitate these changes. With + their experience, ambition, and thoughtfulness, I know they have the + ability to improve the lives of the CMU student body. After witnessing + Vaasavi and Aaron in Student Senate for the past few years, I can + confidently say Vaasavi and Aaron will be meaningful and transparent + with their initiatives. +
+
+ +

Bettina Chou - Designer

+ The CMU design curriculum has instilled upon me a habit of looking at + problems as systems on various scales and looking for entry points to + resolve certain problem spaces. So, hearing Vaasavi's approach, I was + pleasantly surprised to learn the methods in econ/finance tackled + issues in a similar, yet more empirical way. Combined with her + intrinsic compassion and empathy, I am confident in her + solution-oriented mindset. I support her and Aaron because I believe + they will create effective solutions with a purpose as opposed to + temporary band-aid solutions. +
+
+ +

Have questions? Let's chat

+ + + + Please feel free to contact us. We would be more than happy to talk over + coffee or tea. + + +
+ + + + diff --git a/campaign/logo.png b/campaign/logo.png new file mode 100644 index 0000000..c0d6a7a Binary files /dev/null and b/campaign/logo.png differ diff --git a/campaign/olivia.jpg b/campaign/olivia.jpg new file mode 100644 index 0000000..a933af6 Binary files /dev/null and b/campaign/olivia.jpg differ diff --git a/campaign/photo.html b/campaign/photo.html new file mode 100644 index 0000000..01d3380 --- /dev/null +++ b/campaign/photo.html @@ -0,0 +1,138 @@ + + + + Profile Picture Creator - Vaasavi and Aaron 2016 + + + + + + + + + + +
+
+ +
+
+
+ + +

Profile Picture Creator

+ Login with Facebook to create your picture + + + + + or upload another image + + + + + + + + + + + diff --git a/campaign/pic.html b/campaign/pic.html new file mode 100644 index 0000000..e096608 --- /dev/null +++ b/campaign/pic.html @@ -0,0 +1,50 @@ + + +Random imgur image + + + +

Random Imgur image

+
Please wait...
+ + diff --git a/campaign/platform.html b/campaign/platform.html new file mode 100644 index 0000000..a7cbf3b --- /dev/null +++ b/campaign/platform.html @@ -0,0 +1,170 @@ + + + + + + +
+ + Visit Vaas and Aaron's official campaign website here. + + + Cover Photo + +

Thanks for checking out our platform!

+ +

+ We're Vaasavi Unnava and Aaron Gutierrez, two rising seniors running for + Student Body President and Vice President. But this election isn't about + us--it's about you. It's about giving ourselves the tools to change campus for + the better, and leave a legacy we're proud of. Let's make change, together. +

+

+ Here's how we're making sure you have the power to do just that: +

+

+ Platform for Social Change: The President's Initiative +

+
    +
  • + Move the Board of the Directors to the beginning of the year, where clubs + and organizations build partnerships to make change +
  • +
  • + Set the agenda to address cultural problems on our campus, from SARV to + Mental Health +
  • +
  • + Reward the organization that provides the most innovative solution to a + prevalent campus problem +
  • +
+ +

+ Fiscal Transparency: Getting the Information We Deserve +

+
    +
  • + Provide flowcharts describing university budgetary process +
  • +
  • + Bring transparency to spending of the endowment +
  • +
  • + Create tangible goals for class donations, like material upgrades to the + campus community +
  • +
+ +

+ Student Government Transparency: For the Students +

+
    +
  • + Hold weekly office hours in the highest trafficked locations of campus +
  • +
  • + Create "To StuGov With Love" Facebook group, where students can directly + interact with student government officials +
  • +
  • + Write a weekly column for the Tartan outlining issues and decisions made + that week +
  • +
+ +

+ Let's create a campus where we get to take the lead on making CMU what we want + it to be, instead of waiting for administration to fix it. Why can we make + this happen? +

+ +

Why We're Qualified

+ +
+
+

Vaasavi Unnava

+

Student Body President

+ + + +

+ Vaasavi is a third year economics major at Carnegie Mellon. She is the + Community Advisor of Morewood E Tower and spent two years serving in the + Student Senate. In her tenure, she has: +

+
    +
  • + Started and managed the First Lectures (Watch at + youtube.com/thefirstlectures) +
  • +
  • + Co-founded the Sexual Assault and Relationship Violence Prevention + (SARVP) committee, where her team helped improve graduate student + orientation and put together the TartanHacks branch SARV hackathon. +
  • +
  • + Reinitiated CMU's participation in Pittsburgh Student Government + Council +
  • +
  • + Created and taught a StuCo on financial literacy for the CMU Student + (98-272!) +
  • +
  • + Built an incentive structure in Morewood E Tower to significantly + raise engagement with the city of Pittsburgh (and accidentally + eliminated stress culture as a byproduct) +
  • +
  • + Chaired the Business Affairs Committee in the Student Senate, getting + new dumbbells in Skibo Gym, among other initiatives +
  • +
+
+
+

Aaron Gutierrez

+

Student Body Vice President

+ + + +

+ Aaron is a third year computer science major with a minor in music at Carnegie + Mellon. In his tenure, he has: +

+
    +
  • + Served as President and Treasurer of Delta Tau Delta Fraternity +
  • +
  • + Worked for two years as a teaching assistant for 15-122 +
  • +
  • + Advised Dining Services with selecting the new Skibo Cafe and Scott + Hall dining vendor +
  • +
  • + Served on the Academic Review board and University Disciplinary + committee +
  • +
  • + Allocated student organization space in the CUC in 2014 and 2016 +
  • +
+
+
+ +

+ Thank you for taking the time to read through all of this! If you have any + questions, we'd love to get coffee or tea--please reach out to us at + vunnava@cmu.edu or + aarongutierrez@cmu.edu. +

+
+ + diff --git a/campaign/privacy.html b/campaign/privacy.html new file mode 100644 index 0000000..bae848b --- /dev/null +++ b/campaign/privacy.html @@ -0,0 +1,37 @@ + + + + Vaasavi and Aaron 2016 + + + + + + + + +
+
+ +
+
+
+ + +

Privacy Policy

+ + We use Google Analytics to collect anonymous information about who visits + our site. Other than that, we don't know anything about you. But if you'd + like to know more about us, please contact + us + + + diff --git a/campaign/site.css b/campaign/site.css new file mode 100644 index 0000000..e7dc668 --- /dev/null +++ b/campaign/site.css @@ -0,0 +1,114 @@ +/* Variables */ +/* sizes */ +/* font sizes */ +/* pallet */ +h1, h2, h3, h4, h5, h6 { + font-family: "proxima-nova-alt-condensed", Arial, Helvetica, sans-serif; + font-weight: bold; } + +body { + font-family: "proxima-nova", Arial, Helvetica, sans-serif; + font-size: 16px; + color: rgba(0, 0, 0, 0.9); + width: 100%; + margin: 0px; } + +h1 { + font-size: 64px; + margin: 64px 16px; + display: inline; } + +h2 { + font-size: 48px; + margin-top: 48px; + text-transform: uppercase; } + +h3 { + margin-top: -16px; } + +p { + margin: 16px; } + +nav img { + width: initial; } +nav ul { + list-style-type: none; + margin: 0; + padding: 0 16px 0 0; + display: block; + box-sizing: border-box; } +nav li { + float: right; } + nav li a { + text-align: center; + width: 64px; + color: #38526b; + display: block; + padding: 8px; + text-decoration: none; } + nav li a:hover { + font-weight: bold; } + +img { + width: 100%; + margin-bottom: 32px; } + +img.profPic { + margin-top: 32px; } + +.main, .header { + padding: 16px; + margin-right: auto; + margin-left: auto; } + +.block { + float: left; + display: block; + box-sizing: border-box; + padding: 16px; } + +.footer { + border-top: 1px solid #ba3845; + text-align: center; + margin: 16px; + padding: 16px; } + +.standout { + background-color: #ba3845; + color: #ffeacf; + font-size: 20px; + font-weight: 600; + padding: 16px; } + +.desktop { + display: none; } + +.hidden { + display: none; } + +.clearfix:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; } + +@media (min-width: 768px) { + .desktop { + display: inherit; } + + .mobile { + display: none; } + + .main, .header { + min-width: 752px; + max-width: 921.6px; } + + .block-half { + max-width: 50%; } + + .block-third { + max-width: 33.333%; } } + +/*# sourceMappingURL=site.css.map */ diff --git a/campaign/srishti.jpg b/campaign/srishti.jpg new file mode 100644 index 0000000..5edfc4c Binary files /dev/null and b/campaign/srishti.jpg differ diff --git a/campaign/vaas.jpg b/campaign/vaas.jpg new file mode 100644 index 0000000..968a69f Binary files /dev/null and b/campaign/vaas.jpg differ diff --git a/campaign/zach.gif b/campaign/zach.gif new file mode 100644 index 0000000..86ffbca Binary files /dev/null and b/campaign/zach.gif differ diff --git a/campaign/zach.jpg b/campaign/zach.jpg new file mode 100644 index 0000000..f15b753 Binary files /dev/null and b/campaign/zach.jpg differ diff --git a/img/aaron.jpg b/img/aaron.jpg new file mode 100644 index 0000000..3681716 Binary files /dev/null and b/img/aaron.jpg differ diff --git a/img/aaron@2x.jpg b/img/aaron@2x.jpg new file mode 100644 index 0000000..7032637 Binary files /dev/null and b/img/aaron@2x.jpg differ diff --git a/img/aaron@3x.jpg b/img/aaron@3x.jpg new file mode 100644 index 0000000..3cf1161 Binary files /dev/null and b/img/aaron@3x.jpg differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..968a0b0 --- /dev/null +++ b/index.html @@ -0,0 +1,72 @@ + + + + Aaron Gutierrez + + + + + + + + + +
+

Aaron Gutierrez

+ Aaron +

+ Integrations Engineer @ Asana
+ Carnegie Mellon University, SCS 2017 +

+
+
+
+

Work

+
+

Asana

+ +
+
+

Carnegie Mellon

+
    +
  • I extended the Intel + SPMD Program Compiler (ISPC) to support polymorphic datatypes in + my 15-418 Final Project
  • +
  • I spent several semesters as a teaching assistant for + 15-122, + 15-292, and + 15-411.
  • +
  • I served as the Student Body Vice President for the 2016-2017 school + year
  • +
  • I served as Treasurer and President of the + Delta Beta Chapter of + ∆T∆, where I built and maintained our + reimbursement tracking web application.
  • +
+

Links

+ +
+
+ + + diff --git a/pub.py b/pub.py new file mode 100755 index 0000000..3504e62 --- /dev/null +++ b/pub.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python3 + +import argparse +import os +import sys + +import boto3 + +BUCKET='www.aarongutierrez.com' +AWS_ACCESS_KEY='AKIAIDTVRR2EKQ5FYIEQ' +AWS_SECRET_KEY='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' + +s3 = boto3.client('s3', + aws_access_key_id=AWS_ACCESS_KEY, + aws_secret_access_key=AWS_SECRET_KEY) + +bench_fmt = """""" + "\n" + +TYPE_MAP = { + 'asc': 'text/plain', + 'css': 'text/css', + 'gif': 'image/gif', + 'html': 'text/html; charset=utf8', + 'jpg': 'image/jpeg', + 'png': 'image/png', + 'webp': 'image/webp', +} + +def upload_file(filename): + print('Uploading {} to {}/{}'.format(filename, BUCKET, filename)) + ext = filename.split('.')[-1] + + s3.upload_file(filename, BUCKET, filename, ExtraArgs={ + 'ACL': 'public-read', + 'ContentType': TYPE_MAP[ext] + }) + print('\tDone.') + +def filter_filenames(filenames, ext): + for f in filenames: + if (isinstance(ext, (list,)) and (f.split('.')[-1] in ext) \ + or f.split('.')[-1] == ext): + yield f + +def upload_root(): + upload_file('index.html') + upload_file('site.css') + upload_file('pubkey.asc') + +def upload_bench(): + imgs = os.listdir('img/bench') + img_files = [f for f in filter_filenames(imgs, ['jpg', 'webp'])] + num_imgs = int(len(img_files) / 4) + + with open('bench_template.html', 'r') as f: + template = f.read() + + for i in range(1, num_imgs+1, 16): + page = '' + for j in range(i, min(num_imgs+1, i+16)): + page += bench_fmt.format(j) + + prev_pg = i//16 + next_pg = i//16 + 2 + + prev_link = '#' if (prev_pg == 0) else '/bench/{}.html'.format(prev_pg) + next_link = '#' if (i+16 > num_imgs) else '/bench/{}.html'.format(next_pg) + + with open('bench/{}.html'.format(i//16 + 1), 'w') as out: + out.write(template.format(page, prev_link, next_link)) + + files = filter_filenames(os.listdir('bench'), 'html') + for f in files: + upload_file('bench/{}'.format(f)) + + for f in img_files: + upload_file('img/bench/{}'.format(f)) + +def upload_img(): + files = filter_filenames(os.listdir('img'), ['jpg', 'webp']) + for f in files: + upload_file('img/{}'.format(f)) + +def upload_15418(): + upload_file('15418/index.html') + upload_file('15418/style.css') + +def upload_campaign(): + files = filter_filenames(os.listdir('campaign'), + ['html', 'css', 'jpg', 'png', 'gif']) + for f in files: + upload_file('campaign/{}'.format(f)) + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Publish www.aarongutierrez.com') + + pub_help = 'What to publish' + pub_choices = ['all', 'root', 'img', 'bench', '15418', 'campaign'] + parser.add_argument('pub', choices=pub_choices, help=pub_help) + + args = parser.parse_args() + + if args.pub == 'root' or args.pub == 'all': + upload_root() + if args.pub == 'img' or args.pub == 'all': + upload_img() + if args.pub == 'bench' or args.pub == 'all': + upload_bench() + if args.pub == '15418' or args.pub == 'all': + upload_15418() + if args.pub == 'campaign' or args.pub == 'all': + upload_campaign() diff --git a/site.css b/site.css new file mode 100644 index 0000000..d6a9529 --- /dev/null +++ b/site.css @@ -0,0 +1,61 @@ +img#aaron { + width: 128px; + height: 128px; +} + +body { + max-width: 800px; + padding: 20px; +} + +h1 { + font-weight: normal; +} + +header { + text-align: center; +} + +footer { + margin-left: auto; + margin-right: auto; + text-align: center; +} + +.img-grid { + display: flex; + flex-wrap: wrap; +} + +.img-grid a { + display: inline-block; + height: 160px; + margin-right: 40px; + margin-bottom: 10px; + width: 160px; +} + +.img-grid img { + display: block; + margin-left: auto; + margin-right: auto; + max-width: 160px; + max-height: 160px; +} + +div.nav { + display: flex; + justify-content: space-between; + width: 100%; +} + + +@media(min-width:600px) { + header { + text-align: left; + } + + body { + margin: 0 auto; + } +}