Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
GSoC 2019
API Client Tools at Google
Lorenz Hofmann-Wellenhof
2 Statement of Motivation
The first time I heard about GSoC was 20 th of March 2016. My brother texted me about it and said that it
would be a good thing if I participate. However, for students from the University of Passau this is the
worst possible time, because we got lectures and exams in exactly that period.
After my exchange semester in NYC in 2018 where I went to a lot of tech meet ups and got more familiar
with the idea of open source, I realized that I have one last opportunity for GSoC in 2019. Technically, it
is the perfect summer, because I only have my master thesis left to write, quit my job, and moved back
home to Austria to my parents (so they can cook for me while I code 😄).).
Surface Model:
The surface package is an already created package in experimental state. It serves as model for the
generator plugins. It provides information in a structured way about the types (request parameters,
response paramaters) and methods (GET, POST, ...) used in the OpenAPI description. Additions have to
be made to meet requirements of the generator. Technically, information for the checker could also be
made available inside the surface model.
I already started implementing the generator. The progress can be seen here. An example of a
generated .proto file can be seen here for this OpenAPI description. Additionally, I created a repository
which takes an .proto file and generates + starts a reverse proxy and a gRPC server. Maybe this could
come in handy at the end of the project.
5 Project Schedule
5.1 Deliverables
• A list that defines what parts of the OpenAPI specification are transcodeable to a gRPC API.
◦ The list should be maintainable and extendable.
• A checker based on the defined list. The input of the checker is an OpenAPI description. The
output gives information about which parts of the OpenAPI description can be made available
with gRPC and which parts would not be represented.
◦ Implemented and distributed as Golang package. Available as plugin for gnostic, hence it is
executable as command line tool.
• A generator based on the defined list. The input of the generator is an OpenAPI description. The
output is a Protocol Buffer specification (.proto file).
◦ Implemented and distributed as Golang package. Available as plugin for gnostic, hence it is
executable as command line tool.
• Proper documentation and tests for the above mentioned components.
◦ Unit test cases for specified rules, documentation of source code, usage of how to use the
generator and checker.
5.2 Timeline
May 6 – May 27 (Before the start of GSoC)
• Spend more time on debugging through gnostic to get a deeper understanding of the code base.
• Read documentation, set up development environment, get familiar with the testing system used.
• Solve some LeetCode problems with Golang to get more familiar with the language.
May 27 – June 2 (Official start)
• Come up with the list that specifies which parts of the OpenAPI spec are transcodeable to gRPC.
June 3 – June 9
• Discuss with mentors which parts of the OpenAPI specification are must haves and which are optional.
• Start working on generator.
June 10 – June 16
• Work on the generator to satisfy most crucial requirements. Keep in mind that changes to other components have to
made (e.g.: surface model).
June 17 – June 23
• Keep working on generator. Commit progress continuously to verify that Travis build is not breaking.
June 24 – June 30 Phase 1 Evaluation: June 24 – June 28
• Discuss further steps with mentors.
• Code review existing progress.
July 1 – July 7
• Implement additional features for the generator.
July 8 – July 14
• Work on checker.
July 15 – July 21
• Code.
July 22 – July 28 Phase 2 Evaluation: July 22 – July 26
• Discuss final steps with mentors.
• Code review existing progress.
July 29 – August 4
• Proper source code documentation.
• Proper documentation on how to use the parser and checker.
The last three weeks are not included: A buffer of two weeks has been kept for unpredictable delay and
another week for testing. I plan to apply test-driven development practices. So there won’t be a dedicated
week only for testing. Test cases will be created during development.
During the entire timeline I will continuously be available on Slack or up for a scheduled video call to
discuss ideas, progress, further steps, and everything else that is related to this project.
EDUCATION
M. Sc. in Computer Science University of Passau, Germany 02/2017 - 02/2020
Emphasis: Programming and Software Systems
Education abroad in Computer Science Stevens Institute of Technology, USA 08/2018 - 12/2018
Grade: 4.0 (GPA)
B. Sc. in Mobile and Embedded Systems University of Passau, Germany 10/2014 - 09/2017
Grade: 1.8 (German System) ~ 3.2 (GPA)
Courses:
• Algorithms and Data Structures • Machine Learning • Programming in Java
• Agile Software Development • Enterprise Software Architecture • Mathematics in Technical Systems I-III
• Computer Networks • Computer Architecture • Computer Engineering
EXPERIENCE
Creator – My Telegrams 10/2017 – 01/2019
• Created an open source Amazon Echo Skill that enables users to send and to listen to messages via the Telegram
Messenger
• Accumulated over 1000 users in English and German
• Check out: bit.ly/my-telegrams-video to see the Skill in action
• Used technologies: Python, AWS
Creator – lorenzhofmannw.com 03/2018 – 01/2019
• Implemented a web server for the usage with Amazon Echo Skills
• Set up REST API with Django and MySQL DB, used Angular as front end framework, deployed the application with
AWS, added social authentication, progressive web app support, OAuth, implemented push notification via Firebase,
and used a Python wrapper to communicate with the Telegram API
• Used technologies: Python, TypeScript, HTML5, CSS, Sass, Django, MySQL, Angular, AWS
Software engineer (working student) – csneovias GmbH 03/2016 – 07/2018
• Designed and implemented front end applications (course registry, courses overview) for the University of Münster
and the University of Zurich
• Assisted development and design of back end interfaces to provide applications with mock data
• Used technologies: JavaScript, ABAP, SAPUI5, OData protocol
Creator – Bing Bong / Stretch Out 02/2018 – 07/2018
• Launched a brain game as Amazon Echo Skill (Bing Bong)
• Created an Amazon Echo fitness Skill that lets user create their own workouts (Stretch Out)
• Accumulated over 1400 users
• Used technologies: Python, AWS
SKILLS
Core programming languages: Python, JavaScript, TypeScript
Languages: German (native), English (fluent)