|
#include <stdio.h> |
|
#include <time.h> |
|
|
|
typedef struct { |
|
union { |
|
char * company; |
|
char * school; |
|
char * project; |
|
}; |
|
union { |
|
char * location; |
|
char * url; |
|
}; |
|
union { |
|
char * title; |
|
char * program; |
|
}; |
|
|
|
time_t started; |
|
time_t left; |
|
|
|
char * description[]; |
|
} thing_t; |
|
|
|
typedef thing_t job_t; |
|
typedef thing_t school_t; |
|
typedef thing_t project_t; |
|
|
|
#define CURRENT 0 /* I wasn't alive at the Unix epoch, so that'll work */ |
|
|
|
/* Contact Information */ |
|
char * name = "Kevin R. Lange"; |
|
char * email = "[email protected]"; |
|
char * address = "1045 Mission St, Apt 440\n" |
|
"San Francisco, CA 94103"; |
|
|
|
/* Education */ |
|
school_t uiuc = { |
|
.school = "University of Illinois at Urbana-Champaign", |
|
.location = "Urbana, IL", |
|
.program = "BS Computer Science", |
|
.started = 1251158400, |
|
.left = 1336608000, |
|
.description = { |
|
"Minor in International Studies in Engineering, Japan", |
|
"Focused on systems software courses", |
|
NULL |
|
} |
|
}; |
|
|
|
school_t hit = { |
|
.school = "Hiroshima Institute of Technology", |
|
.location = "Hiroshima, Japan", |
|
.program = "Study Abroad", |
|
.started = 1274745600, |
|
.left = 1278288000, |
|
.description = { |
|
"Cultural exchange program", |
|
NULL |
|
} |
|
}; |
|
|
|
school_t * schools[] = { |
|
&uiuc, |
|
&hit, |
|
NULL |
|
}; |
|
|
|
/* Projects */ |
|
project_t compiz = { |
|
.project = "Compiz Window Manager", |
|
.url = "http://compiz.org", |
|
.title = "Developer", |
|
.started = 1201392000, |
|
.left = 1264291200, |
|
.description = { |
|
"Minor plugin contributor", |
|
"Various research projects", |
|
NULL |
|
} |
|
}; |
|
|
|
project_t toaruos = { |
|
.project = "ToAruOS", |
|
.url = "https://github.com/klange/toaruos", |
|
.title = "Lead", |
|
.started = 1295049600, |
|
.left = CURRENT, |
|
.description = { |
|
"Hobby x86 Unix-like kernel and userspace", |
|
"Advanced in-house GUI with compositing window manager", |
|
NULL |
|
} |
|
}; |
|
|
|
project_t * projects[] = { |
|
&toaruos, |
|
&compiz, |
|
NULL |
|
}; |
|
|
|
/* Employment History */ |
|
|
|
job_t yelp = { |
|
.company = "Yelp, Inc.", |
|
.location = "San Francisco, CA", |
|
.title = "Software Engineer, i18n", |
|
.started = 1339977600, |
|
.left = CURRENT, |
|
.description = { |
|
"Developed several internal tools and libraries", |
|
"Provided critical input and design work for Yelp's launch in Japan", |
|
NULL |
|
} |
|
}; |
|
|
|
job_t apple_internship = { |
|
.company = "Apple Inc.", |
|
.location = "Cupertino, CA", |
|
.title = "Software Engineering Intern", |
|
.started = 1306886400, |
|
.left = 1314662400, |
|
.description = { |
|
"Built software framework for testing and verification of desktop retina display modes", |
|
"Assisted other interns with Unix fundamentals", |
|
NULL |
|
} |
|
}; |
|
|
|
job_t * jobs[] = { |
|
&yelp, |
|
&apple_internship, |
|
NULL |
|
}; |
|
|
|
void print_thing(thing_t * thing) { |
|
char started[100]; |
|
char left[100]; |
|
struct tm * ti; |
|
int i = 0; |
|
|
|
printf("%s at %s - %s\n", thing->title, thing->company, thing->location); |
|
|
|
ti = localtime(&thing->started); |
|
strftime(started, 100, "%B %d, %Y", ti); |
|
|
|
if (thing->left == CURRENT) { |
|
printf("%s to now\n", started); |
|
} else { |
|
ti = localtime(&thing->left); |
|
strftime(left, 100, "%B %d, %Y", ti); |
|
printf("%s to %s\n", started, left); |
|
} |
|
|
|
char ** desc = thing->description; |
|
while (*desc) { |
|
printf("- %s\n", *desc); |
|
desc++; |
|
} |
|
} |
|
|
|
int main(int argc, char ** argv) { |
|
|
|
printf("%s\n%s\n%s\n\n", name, email, address); |
|
|
|
puts("Education\n"); |
|
school_t ** s = schools; |
|
while (*s) { |
|
print_thing(*s); |
|
puts(""); |
|
s++; |
|
} |
|
|
|
puts("Employment\n"); |
|
job_t ** j = jobs; |
|
while (*j) { |
|
print_thing(*j); |
|
puts(""); |
|
j++; |
|
} |
|
|
|
puts("Projects\n"); |
|
project_t ** p = projects; |
|
while (*p) { |
|
print_thing(*p); |
|
puts(""); |
|
p++; |
|
} |
|
|
|
return 0; |
|
} |