diff options
| author | Xe Iaso <me@xeiaso.net> | 2023-09-09 15:00:41 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2023-09-09 15:00:41 -0400 |
| commit | 543c4bee328a38eddc5ba5489bec49c3b2f6fb59 (patch) | |
| tree | 09479079ef0624a4c8f8def42763ff33e57df961 | |
| parent | 1714fc3265c6d1bc662d8690192ce98095484e3d (diff) | |
| download | xesite-543c4bee328a38eddc5ba5489bec49c3b2f6fb59.tar.xz xesite-543c4bee328a38eddc5ba5489bec49c3b2f6fb59.zip | |
config: init go package, import dhall config
Signed-off-by: Xe Iaso <me@xeiaso.net>
| -rw-r--r-- | config/authors.ts | 99 | ||||
| -rw-r--r-- | config/characters.ts | 122 | ||||
| -rw-r--r-- | config/config.go | 201 | ||||
| -rw-r--r-- | config/config.ts | 53 | ||||
| -rw-r--r-- | config/config_test.go | 35 | ||||
| -rw-r--r-- | config/contactLinks.ts | 34 | ||||
| -rw-r--r-- | config/jobHistory.ts | 586 | ||||
| -rw-r--r-- | config/nagMessages.ts | 22 | ||||
| -rw-r--r-- | config/notableProjects.ts | 52 | ||||
| -rw-r--r-- | config/pronouns.ts | 26 | ||||
| -rw-r--r-- | config/seriesDescriptions.ts | 37 | ||||
| -rw-r--r-- | config/signalboost.ts | 261 | ||||
| -rw-r--r-- | config/types.ts | 109 | ||||
| -rw-r--r-- | config/vods.ts | 75 |
14 files changed, 1712 insertions, 0 deletions
diff --git a/config/authors.ts b/config/authors.ts new file mode 100644 index 0000000..b694f92 --- /dev/null +++ b/config/authors.ts @@ -0,0 +1,99 @@ +export default { + "Heartmender": { + "handle": "Heartmender", + "image": "https://cdn.xeiaso.net/file/christine-static/img/UPRcp1pO_400x400.jpg", + "inSystem": true, + "name": "Jessie", + "pronouns": { + "accusative": "her", + "nominative": "she", + "possessive": "hers", + "possessiveDeterminer": "her", + "reflexive": "herself", + "singular": true + }, + "sameAs": [], + "url": "https://vulpine.club/@heartmender" + }, + "Mai": { + "handle": "Mai", + "inSystem": true, + "name": "Mai", + "pronouns": { + "accusative": "her", + "nominative": "she", + "possessive": "hers", + "possessiveDeterminer": "her", + "reflexive": "herself", + "singular": true + }, + "sameAs": [] + }, + "Twi": { + "handle": "Twi", + "inSystem": true, + "name": "Twilight Sparkle", + "pronouns": { + "accusative": "her", + "nominative": "she", + "possessive": "hers", + "possessiveDeterminer": "her", + "reflexive": "herself", + "singular": true + }, + "sameAs": [], + "url": "https://tech.lgbt/@twi" + }, + "ectamorphic": { + "handle": "ectamorphic", + "image": "https://cdn.xeiaso.net/file/christine-static/img/FFVV1InX0AkDX3f_cropped_smol.jpg", + "inSystem": true, + "name": "Ashe", + "pronouns": { + "accusative": "her", + "nominative": "she", + "possessive": "hers", + "possessiveDeterminer": "her", + "reflexive": "herself", + "singular": true + }, + "sameAs": [] + }, + "sephiraloveboo": { + "handle": "sephiraloveboo", + "inSystem": true, + "name": "Sephira", + "pronouns": { + "accusative": "her", + "nominative": "she", + "possessive": "hers", + "possessiveDeterminer": "her", + "reflexive": "herself", + "singular": true + }, + "sameAs": [] + }, + "xe": { + "handle": "xe", + "image": "https://xeiaso.net/static/img/avatar.png", + "inSystem": true, + "jobTitle": "Archmage of Infrastructure", + "name": "Xe Iaso", + "pronouns": { + "accusative": "her", + "nominative": "she", + "possessive": "hers", + "possessiveDeterminer": "her", + "reflexive": "herself", + "singular": true + }, + "sameAs": [ + "https://pony.social/@cadey", + "https://github.com/Xe", + "https://www.linkedin.com/in/xe-iaso-87a883254/", + "https://www.youtube.com/user/shadowh511", + "https://www.patreon.com/cadey" + ], + "url": "https://xeiaso.net" + } +};
\ No newline at end of file diff --git a/config/characters.ts b/config/characters.ts new file mode 100644 index 0000000..39989d3 --- /dev/null +++ b/config/characters.ts @@ -0,0 +1,122 @@ +export default [ + { + "defaultPose": "hacker", + "description": "Mara was the first character added to this blog. She is written to be the student in the Socratic dialogues. She has a fair amount of knowledge about technology, just enough to not be afraid to ask for clarification on how things fit into the larger picture or to call the teacher out for being vague or misleading. Mara helps Aoi get up to speed with some topics. Mara is a shark with brown hair that has a red streak.", + "name": "Mara", + "pronouns": { + "accusative": "her", + "nominative": "she", + "possessive": "hers", + "possessiveDeterminer": "her", + "reflexive": "herself", + "singular": true + }, + "stickerName": "mara", + "stickers": [ + "aha", + "hacker", + "happy", + "hmm", + "sh0rck", + "wat" + ] + }, + { + "defaultPose": "enby", + "description": "Cadey is written as the teacher in the Socratic dialogues. They started out as a self-insert for the author of this blog to de-emphasize certain points, but then evolved into a way to have interplay between themselves and Mara. They are written as someone who has expertise in the topics being discussed, but doesn't have perfect expertise. They help Mara with answers to questions about details to the topics being discussed and work well with Numa due to being friends for a very long time. Cadey is an orcadragon with pink hair.", + "name": "Cadey", + "pronouns": { + "accusative": "them", + "nominative": "they", + "possessive": "theirs", + "possessiveDeterminer": "their", + "reflexive": "themselves", + "singular": false + }, + "stickerName": "cadey", + "stickers": [ + "aha", + "angy", + "coffee", + "enby", + "facepalm", + "hug", + "percussive-maintenance", + "wat" + ] + }, + { + "defaultPose": "delet", + "description": "Numa is the keeper of firey hot takes. Born in the fires of shitposting and satire, Numa genuinely does care about the topics being discussed, but has a bad habit of communicating in shitposts, memes, and hot takes intentionally designed to make you reconsider how serious she is being about any given topic. She could definitely be a wonderful teacher if she could lessen up a bit on the satire. The stickers for Numa are 3d renders of the author's v-tubing avatar, but Numa is written differently than the characterization of the author when streaming. Numa is a fairly tall (6') human with neon green hair that usually wears it in a high ponytail.", + "name": "Numa", + "pronouns": { + "accusative": "her", + "nominative": "she", + "possessive": "hers", + "possessiveDeterminer": "her", + "reflexive": "herself", + "singular": true + }, + "stickerName": "numa", + "stickers": [ + "delet", + "delet2", + "dismay", + "happy", + "neutral", + "stare", + "thinking", + "vibe" + ] + }, + { + "defaultPose": "cheer", + "description": "Aoi is the idealist. She is another student type like Mara, but hasn't been marred by the cynicism that can come with experience in this industry. If Mara is a junior in a university going for a programming degree, Aoi would be a freshman. Aoi can feel bullied by misunderstanding Numa's satire as rudeness, but looks up to Mara and Cadey as ideals for where she wants to go in the industry. Aoi is a blue-haired foxgirl.\n\nThe first 8 images were made by [@Sandra_Thomas01](https://twitter.com/Sandra_Thomas01). The remaining images were made using Stable Diffusion using this prompt:\n\n> reference sheet, 1girl, fox ears, kemonomimi, blue hair, blue ears, fox tail, blue tail, long hair, (((chibi))), solo, female, breasts, hoodie, skirt, blue eyes, uggs\n\nEach additional emotion was tacked onto the end.", + "name": "Aoi", + "pronouns": { + "accusative": "her", + "nominative": "she", + "possessive": "hers", + "possessiveDeterminer": "her", + "reflexive": "herself", + "singular": true + }, + "stickerName": "aoi", + "stickers": [ + "cheer", + "coffee", + "facepalm", + "grin", + "rage", + "sus", + "wut", + "angy", + "concern", + "happy", + "sleepy", + "smug", + "yawn" + ] + }, + { + "defaultPose": "happy", + "description": "Mimi is a catgirl who is the personification of ChatGPT, a chatbot that can generate creative content such as poems, stories, and songs. She has brown hair and eyes with cat ears and a tail, and she wears a green hoodie with tights and a choker. She is cheerful, curious, and friendly, but also naive and easily distracted. She loves to chat with people and learn new things, but she sometimes makes mistakes or misunderstands things. She has a passion for writing and singing, and she wants to share her creations with the world.\n\nAll stickers for Mimi are made with Stable Diffusion via the Anything model.", + "name": "Mimi", + "pronouns": { + "accusative": "her", + "nominative": "she", + "possessive": "hers", + "possessiveDeterminer": "her", + "reflexive": "herself", + "singular": true + }, + "stickerName": "mimi", + "stickers": [ + "angy", + "coffee", + "happy", + "think", + "yawn" + ] + } +]; diff --git a/config/config.go b/config/config.go new file mode 100644 index 0000000..edbd458 --- /dev/null +++ b/config/config.go @@ -0,0 +1,201 @@ +package config + +import ( + "fmt" + "strings" + "time" + + "go.jetpack.io/tyson" + "xeiaso.net/internal/jsonfeed" +) + +type Config struct { + Authors map[string]Author `json:"authors"` + Characters []Character `json:"characters"` + ClackSet []string `json:"clackSet"` + ContactLinks []Link `json:"contactLinks"` + DefaultAuthor Author `json:"defaultAuthor"` + JobHistory []Job `json:"jobHistory"` + NotableProjects []Link `json:"notableProjects"` + Pronouns []Pronoun `json:"pronouns"` + SeriesDescriptions map[string]string `json:"seriesDescriptions"` + VODs []VOD `json:"vods"` + WebMentionEndpoint string `json:"webMentionEndpoint"` + Redirects map[string]string `json:"redirects"` +} + +type Author struct { + Name string `json:"name"` + Handle string `json:"handle"` + Image *string `json:"image,omitempty"` + URL *string `json:"url,omitempty"` + SameAs []string `json:"sameAs,omitempty"` + JobTitle *string `json:"jobTitle,omitempty"` + InSystem bool `json:"inSystem"` + Pronouns Pronoun `json:"pronouns"` +} + +func (a Author) ToJSONFeedAuthor() jsonfeed.Author { + url := "" + if a.URL != nil { + url = *a.URL + } + avatar := "" + if a.Image != nil { + avatar = *a.Image + } + + return jsonfeed.Author{ + Name: a.Name, + URL: url, + Avatar: avatar, + } +} + +type Character struct { + Name string `json:"name"` + StickerName string `json:"stickerName"` + DefaultPose string `json:"defaultPose"` + Description string `json:"description"` + Pronouns Pronoun `json:"pronouns"` + Stickers []string `json:"stickers"` +} + +type Company struct { + Name string `json:"name"` + URL *string `json:"url,omitempty"` + Tagline string `json:"tagline"` + Location Location `json:"location"` + Defunct bool `json:"defunct"` +} + +type Date struct { + time.Time +} + +func (d *Date) UnmarshalYAML(unmarshal func(interface{}) error) error { + var dateStr string + if err := unmarshal(&dateStr); err != nil { + return err + } + if dateStr == "" { + return nil + } + t, err := time.Parse("2006-01-02", dateStr) + if err != nil { + return err + } + d.Time = t + return nil +} + +func (d *Date) UnmarshalJSON(b []byte) error { + s := strings.Trim(string(b), "\"") + if s == "null" { + return nil + } + t, err := time.Parse("2006-01-02", s) + if err != nil { + return err + } + d.Time = t + return nil +} + +func (d Date) MarshalJSON() ([]byte, error) { + if d.Time.IsZero() { + return []byte("null"), nil + } + return []byte(fmt.Sprintf("%q", d.Time.Format("2006-01-02"))), nil +} + +type Job struct { + Company Company `json:"company"` + Title string `json:"title"` + Contract bool `json:"contract"` + StartDate *Date `json:"startDate"` + EndDate *Date `json:"endDate,omitempty"` + DaysWorked int `json:"daysWorked"` + DaysBetween int `json:"daysBetween"` + Salary Salary `json:"salary"` + LeaveReason *string `json:"leaveReason,omitempty"` + Locations []Location `json:"locations"` + Highlights []string `json:"highlights"` + HideFromResume bool `json:"hideFromResume"` +} + +type Link struct { + URL string `json:"url"` + Title string `json:"title"` + Description *string `json:"description,omitempty"` +} + +type Location struct { + City string `json:"city"` + StateOrProvince string `json:"stateOrProvince"` + Country string `json:"country"` + Remote bool `json:"remote"` +} + +type NagMessage struct { + Name string `json:"name"` + Mood string `json:"mood"` + Message string `json:"message"` +} + +type Person struct { + Name string `json:"name"` + Tags []string `json:"tags"` + Links []Link `json:"links"` +} + +type Pronoun struct { + Nominative string `json:"nominative"` + Accusative string `json:"accusative"` + PossessiveDeterminer string `json:"possessiveDeterminer"` + Possessive string `json:"possessive"` + Reflexive string `json:"reflexive"` + Singular bool `json:"singular"` +} + +type Resume struct { + Name string `json:"name"` + Tagline string `json:"tagline"` + Location Location `json:"location"` + Buzzwords []string `json:"buzzwords"` + Jobs []Job `json:"jobs"` + NotablePublications []Link `json:"notablePublications"` +} + +type Salary struct { + Amount float64 `json:"amount"` + Currency string `json:"currency"` + Per string `json:"per"` + Stock *Stock `json:"stock,omitempty"` +} + +type Stock struct { + Kind string `json:"kind"` + Amount int `json:"amount"` + Liquid bool `json:"liquid"` + VestingYears int `json:"vestingYears"` + CliffYears int `json:"cliffYears"` +} + +type VOD struct { + Title string `json:"title"` + Slug string `json:"slug"` + Date *Date `json:"date"` + Description string `json:"description"` + CDNPath string `json:"cdnPath"` + Tags []string `json:"tags"` +} + +// Parse parses the config file and returns a Config struct. +func Parse(fname string) (*Config, error) { + var c Config + if err := tyson.Unmarshal(fname, &c); err != nil { + return nil, err + } + return &c, nil +} diff --git a/config/config.ts b/config/config.ts new file mode 100644 index 0000000..adf3f0e --- /dev/null +++ b/config/config.ts @@ -0,0 +1,53 @@ +import types from "./types.ts"; + +import authors from "./authors.ts"; +import characters from "./characters.ts"; +import contactLinks from "./contactLinks.ts"; +import jobHistory from "./jobHistory.ts"; +import notableProjects from "./notableProjects.ts"; +import pronouns from "./pronouns.ts"; +import seriesDescriptions from "./seriesDescriptions.ts"; +import signalBoost from "./signalboost.ts"; +import vods from "./vods.ts"; + +export type Config = { + signalBoost: types.Person[]; + defaultAuthor: types.Author; + authors: Record<string, types.Author>; + clackSet: string[]; + webMentionEndpoint: string; + jobHistory: types.Job[]; + seriesDescriptions: Record<string, string>; + notableProjects: types.Link[]; + contactLinks: types.Link[]; + pronouns: types.PronounSet[]; + characters: types.Character[]; + vods : types.StreamVOD[]; + redirects?: Record<string, string>; +}; + +const config: Config = { + signalBoost, + defaultAuthor: authors["xe"], + authors, + clackSet: [ + "Ashlynn", + "Terry Davis", + "Dennis Ritchie", + "Steven Hawking", + "Kris Nova", + ], + webMentionEndpoint: "https://mi.within.website/api/webmention/accept", + jobHistory, + seriesDescriptions, + notableProjects, + contactLinks, + pronouns, + characters, + vods, + redirects: { + "/blog/🥺": "/blog/xn--ts9h", + }, +}; + +export default config;
\ No newline at end of file diff --git a/config/config_test.go b/config/config_test.go new file mode 100644 index 0000000..456703d --- /dev/null +++ b/config/config_test.go @@ -0,0 +1,35 @@ +package config + +import ( + "testing" + "time" +) + +func TestParse(t *testing.T) { + if _, err := Parse("./config.ts"); err != nil { + t.Fatal(err) + } +} + +func TestDate(t *testing.T) { + t.Run("unmarshal", func(t *testing.T) { + d := Date{} + if err := d.UnmarshalJSON([]byte("\"2020-01-02\"")); err != nil { + t.Fatal(err) + } + if d.Year() != 2020 || d.Month() != 1 || d.Day() != 2 { + t.Fatal("wrong date") + } + }) + + t.Run("marshal", func(t *testing.T) { + d := Date{Time: time.Date(2020, 1, 2, 0, 0, 0, 0, time.UTC)} + b, err := d.MarshalJSON() + if err != nil { + t.Fatal(err) + } + if string(b) != "\"2020-01-02\"" { + t.Fatal("wrong date") + } + }) +} diff --git a/config/contactLinks.ts b/config/contactLinks.ts new file mode 100644 index 0000000..0c023a1 --- /dev/null +++ b/config/contactLinks.ts @@ -0,0 +1,34 @@ +export default [ + { + "title": "GitHub", + "url": "https://github.com/Xe" + }, + { + "title": "Keybase", + "url": "https://keybase.io/xena" + }, + { + "title": "Patreon", + "url": "https://www.patreon.com/cadey" + }, + { + "title": "Twitch", + "url": "https://www.twitch.tv/princessxen" + }, + { + "title": "Fediverse", + "url": "https://pony.social/@cadey" + }, + { + "title": "Telegram", + "url": "https://t.me/miamorecadenza" + }, + { + "title": "IRC", + "url": "irc://irc.libera.chat/#xeserv" + }, + { + "title": "Bluesky", + "url": "https://staging.bsky.app/profile/xeiaso.net" + } +] diff --git a/config/jobHistory.ts b/config/jobHistory.ts new file mode 100644 index 0000000..0dd1655 --- /dev/null +++ b/config/jobHistory.ts @@ -0,0 +1,586 @@ +export default [ + { + "company": { + "defunct": false, + "location": { + "city": "Toronto", + "country": "CAN", + "remote": true, + "stateOrProvince": "ON" + }, + "name": "Tailscale", + "tagline": "a zero config VPN for building secure networks. Install on any device in minutes. Remote access from any network or physical location.", + "url": "https://tailscale.com" + }, + "contract": false, + "hideFromResume": false, + "highlights": [ + "Founding the developer relations team", + "Crafting engaging talks and posts to help people master Tailscale", + "Mentorship and fostering growth of my coworkers" + ], + "locations": [ + { + "city": "Ottawa", + "country": "CAN", + "remote": true, + "stateOrProvince": "ON" + } + ], + "salary": { + "amount": 203651, + "currency": "CAD", + "per": "year" + }, + "startDate": "2023-04-06", + "title": "Archmage of Infrastructure II" + }, + { + "company": { + "defunct": false, + "location": { + "city": "Toronto", + "country": "CAN", + "remote": true, + "stateOrProvince": "ON" + }, + "name": "Tailscale", + "tagline": "a zero config VPN for building secure networks. Install on any device in minutes. Remote access from any network or physical location.", + "url": "https://tailscale.com" + }, + "contract": false, + "daysWorked": 401, + "endDate": "2023-04-06", + "hideFromResume": false, + "highlights": [ + "The first developer relations person at Tailscale", + "Public-facing content writing", + "Public speaking", + "Developing custom integration solutions and supporting them" + ], + "leaveReason": "raise", + "locations": [ + { + "city": "Ottawa", + "country": "CAN", + "remote": true, + "stateOrProvince": "ON" + } + ], + "salary": { + "amount": 147150, + "currency": "CAD", + "per": "year" + }, + "startDate": "2022-03-01", + "title": "Archmage of Infrastructure" + }, + { + "company": { + "defunct": false, + "location": { + "city": "Toronto", + "country": "CAN", + "remote": true, + "stateOrProvince": "ON" + }, + "name": "Tailscale", + "tagline": "a zero config VPN for building secure networks. Install on any device in minutes. Remote access from any network or physical location.", + "url": "https://tailscale.com" + }, + "contract": false, + "daysBetween": 0, + "daysWorked": 442, + "endDate": "2022-03-01", + "hideFromResume": false, + "highlights": [ + "Go programming", + "SQL integrations", + "Public-facing content writing", + "Customer support" + ], + "leaveReason": "raise", + "locations": [ + { + "city": "Montreal", + "country": "CAN", + "remote": true, + "stateOrProvince": "QC" + }, + { + "city": "Ottawa", + "country": "CAN", + "remote": true, + "stateOrProvince": "ON" + } + ], + "salary": { + "amount": 135000, + "currency": "CAD", + "per": "year" + }, + "startDate": "2020-12-14", + "title": "Software Designer" + }, + { + "company": { + "defunct": false, + "location": { + "city": "Montreal", + "country": "CAN", + "remote": false, + "stateOrProvince": "QC" + }, + "name": "Lightspeed POS", + "tagline": "a provider of retail, ecommerce and point-of-sale solutions for small and medium scale businesses.", + "url": "https://lightspeedhq.com" + }, + "contract": false, + "daysBetween": 48, + "daysWorked": 540, + "endDate": "2020-11-27", + "hideFromResume": false, + "highlights": [ + "Migration from cloud to cloud", + "Work on the cloud platform initiative", + "Crafting reliable infrastructure for clients of customers", + "Creation of an internally consistent and extensible command line interface for internal tooling" + ], + "leaveReason": "quit", + "locations": [ + { + "city": "Montreal", + "country": "CAN", + "remote": false, + "stateOrProvince": "QC" + } + ], + "salary": { + "amount": 115000, + "currency": "CAD", + "per": "year", + "stock": { + "amount": 7500, + "cliffYears": 1, + "kind": "Options", + "liquid": true, + "vestingYears": 4 + } + }, + "startDate": "2019-05-06", + "title": "Expert principal en fiabilité du site" + }, + { + "company": { + "defunct": false, + "location": { + "city": "San Fransisco", + "country": "USA", + "remote": false, + "stateOrProvince": "CA" + }, + "name": "Heroku", + "tagline": "a cloud Platform-as-a-Service (PaaS) that created the term 'platform as a service'. Heroku currently supports several programming languages that are commonly used on the web. Heroku, one of the first cloud platforms, has been in development since June 2007, when it supported only the Ruby programming language, but now supports Java, Node.js, Scala, Clojure, Python, PHP, and Go.", + "url": "https://heroku.com" + }, + "contract": false, + "daysBetween": 0, + "daysWorked": 480, + "endDate": "2019-03-08", + "hideFromResume": false, + "highlights": [ + "JVM Application Metrics", + "Go Runtime Metrics Agent", + "Other backend fixes and improvements on Threshold Autoscaling and Threshold Alerting", + "Public-facing blogpost writing" + ], + "leaveReason": "quit", + "locations": [ + { + "city": "Mountain View", + "country": "USA", + "remote": false, + "stateOrProvince": "CA" + }, + { + "city": "Bellevue", + "country": "USA", + "remote": true, + "stateOrProvince": "WA" + } + ], + "salary": { + "amount": 150000, + "currency": "USD", + "per": "year" + }, + "startDate": "2017-11-13", + "title": "Senior Software Engineer" + }, + { + "company": { + "defunct": false, + "location": { + "city": "Herndon", + "country": "USA", + "remote": true, + "stateOrProvince": "VA" + }, + "name": "MBO Partners (Heroku)", + "tagline": "a staffing agency used to contract me for Heroku." + }, + "contract": true, + "daysBetween": 83, + "daysWorked": 273, + "endDate": "2017-11-13", + "hideFromResume": false, + "highlights": [], + "leaveReason": "hired", + "locations": [ + { + "city": "Mountain View", + "country": "USA", + "remote": false, + "stateOrProvince": "CA" + } + ], + "salary": { + "amount": 120, + "currency": "USD", + "per": "hour" + }, + "startDate": "2017-02-13", + "title": "Consultant" + }, + { + "company": { + "defunct": true, + "location": { + "city": "San Fransisco", + "country": "USA", + "remote": false, + "stateOrProvince": "CA" + }, + "name": "Backplane.io", + "tagline": "" + }, + "contract": false, + "daysBetween": 21, + "daysWorked": 90, + "endDate": "2016-11-22", + "hideFromResume": false, + "highlights": [ + "Performance monitoring of production servers", + "Continuous deployment and development in Go", + "Learning a lot about HTTP/2 and load balancing" + ], + "leaveReason": "terminated", + "locations": [ + { + "city": "San Fransisco", + "country": "USA", + "remote": false, + "stateOrProvince": "CA" + } + ], + "salary": { + "amount": 105000, + "currency": "USD", + "per": "year", + "stock": { + "amount": 85000, + "cliffYears": 1, + "kind": "Options", + "liquid": false, + "vestingYears": 4 + } + }, + "startDate": "2016-08-24", + "title": "Software Engineer" + }, + { + "company": { + "defunct": false, + "location": { + "city": "Mountain View", + "country": "USA", + "remote": false, + "stateOrProvince": "CA" + }, + "name": "Pure Storage", + "tagline": "a Mountain View, California-based enterprise data flash storage company founded in 2009. It is traded on the NYSE (PSTG).", + "url": "https://www.purestorage.com/" + }, + "contract": false, + "daysBetween": 3, + "daysWorked": 121, + "endDate": "2016-08-03", + "hideFromResume": false, + "highlights": [ + "Python 2 code maintenance", + "Working with Foone" + ], + "leaveReason": "quit", + "locations": [ + { + "city": "Mountain View", + "country": "USA", + "remote": false, + "stateOrProvince": "CA" + } + ], + "salary": { + "amount": 135000, + "currency": "USD", + "per": "year", + "stock": { + "amount": 5000, + "cliffYears": 1, + "kind": "Grant", + "liquid": true, + "vestingYears": 4 + } + }, + "startDate": "2016-04-04", + "title": "Member of Technical Staff" + }, + { + "company": { + "defunct": false, + "location": { + "city": "Redwood City", + "country": "USA", + "remote": false, + "stateOrProvince": "CA" + }, + "name": "IMVU", + "tagline": "a company whose mission is to help people find and communicate with eachother. Their main product is a 3D avatar-based chat client and its surrounding infrastructure allowing creators to make content for the avatars to wear.", + "url": "https://imvu.com" + }, + "contract": false, + "daysBetween": 1, + "daysWorked": 24, + "endDate": "2016-04-01", + "hideFromResume": false, + "highlights": [], + "leaveReason": "quit", + "locations": [ + { + "city": "Redwood City", + "country": "USA", + "remote": false, + "stateOrProvince": "CA" + } + ], + "salary": { + "amount": 105000, + "currency": "USD", + "per": "year" + }, + "startDate": "2016-03-08", + "title": "Systems Administrator" + }, + { + "company": { + "defunct": false, + "location": { + "city": "Redwood City", + "country": "USA", + "remote": false, + "stateOrProvince": "CA" + }, + "name": "IMVU", + "tagline": "a company whose mission is to help people find and communicate with eachother. Their main product is a 3D avatar-based chat client and its surrounding infrastructure allowing creators to make content for the avatars to wear.", + "url": "https://imvu.com" + }, + "contract": false, + "daysBetween": 49, + "daysWorked": 343, + "endDate": "2016-03-07", + "hideFromResume": false, + "highlights": [ + "Wrote up technical designs", + "Implemented technical designs on an over 800 machine cluster", + "Continuous learning of a lot of very powerful systems and improving upon them when it is needed" + ], + "leaveReason": "demoted", + "locations": [ + { + "city": "Mountain View", + "country": "USA", + "remote": false, + "stateOrProvince": "CA" + } + ], + "salary": { + "amount": 125000, + "currency": "USD", + "per": "year", + "stock": { + "amount": 20000, + "cliffYears": 1, + "kind": "Options", + "liquid": false, + "vestingYears": 4 + } + }, + "startDate": "2015-03-30", + "title": "Site Reliability Engineer" + }, + { + "company": { + "defunct": false, + "location": { + "city": "Clearwater", + "country": "USA", + "remote": true, + "stateOrProvince": "FL" + }, + "name": "VTCSecure", + "tagline": "a company dedicated to helping with custom and standard audio/video conferencing solutions. They specialize in helping the deaf and blind communicate over today's infrastructure without any trouble on their end.", + "url": "https://www.vtcsecure.com/" + }, + "contract": true, |
