GSoC 2020: In the Beginning
So I got in to GSoC!
GSoC is a program run by Google where college students from around the world get paid a stipend to work with open source projects over the summer. GSoC stands for "Google Summer of Code" (who could have guessed? :P ).
Students have to write up a proposal, for something they want to build that they think will benefit a particular project. I wrote two proposals for MIT App Inventor, which is a website that allows you to create Android apps without any coding knowledge. And it turns out that my second proposal Operation Options: Enum Blocks for App Inventor got accepted!
After students get accepted they get paired with one or more mentors and you begin the "Community Bonding Period". Which is basically a chance for you to refine your project plan to make sure you're building something useful.
My mentors for this summer are Franklyn Turbak and Mark Friedman.
They both seem really cool! Mark is the Vice President of Engineering at Thunkable, which is a commercial spinoff of MIT App Inventor. He worked on the App Inventor project back when it was owned by Google, so he's been with it since the beginning!
Lyn is an Associate Professor in the Computer Science Department at Wellesley College. He was very engaged with the upgrade from App Inventor 1 to App Inventor 2 (which uses the Blockly library). And he worked on a ton of really cool stuff like AI's lexical variable blocks, and the Component Processor system that I will be working on!
I honestly couldn't be happier with the people that were picked to be my mentors. I got to see Mark a bit at the Blockly conference, and I know he's a really smart person. Then Lyn and I had a really fun meeting on Friday. We talked about my project and a lot of the history of visual programming. He also sent me his masters thesis where he designed his own visual programming language; maybe I'll write about that once I finish it!
So I think this summer is going to be really fun :D
My project for this summer is to replace documented constants within the App Inventor blocks editor with dropdown blocks.
I think that this is great for a couple of reasons.
- Constants are not very discoverable. I think removing them will make the on-ramp for new users a lot smoother.
- Constants are not very readable. Unless you have all of the constants memorized, it can be hard to tell what code is doing.
- Constants are not very convenient. It can be annoying to have to drag out another block when you just want to set the value.
So hopefully by the end of this project those areas will have improved!
So this week I mainly worked on getting myself more familiar with Java annotations and AI's ComponentProcessor system.
The majority of AI's blocks aren't defined directly through Blockly block definitions. They are instead defined via annotated Java classes, which are parsed and then later turned into blocks. This system makes it easier to create extensions that interact with Android.
But this means that we have to be able to define our dropdown blocks via Java and annotations, which in turn means lots of edits to the ComponentProcessor system.
Yesterday (Saturday) I just finished up a WIP design document that goes into more depth that my original proposal. I'm hoping to share it on the AI community forums later this week or early next week to get feedback from users.
As I'm preparing to start programming my GSoC project, I'm also thinking about what I want to get out of this summer.
I've already worked on large projects for Blockly, and I feel like I already understand most of the technology I need to complete this project. So I would like to have something else to strive for.
After thinking about it, my initial goals list feels something like this:
- Complete the project. Based on some snooping, projects for App Inventor don't have a great track record of getting into production. I want to focus on getting this code merged into master.
- Practice my communication skills. I've been reading some books lately about how to be an effective communicator/leader/facilitator. I would like to take this as an opportunity to practice those skills.
- Learn the science. I've done a lot of work for Blockly, but I don't really know a lot about the science of visual programming. I'm hoping that with AI being housed at MIT, and Lyn knowing a lot about visual programmming, I'll be able to learn more about this area.
My goals may shift and sway as the project goes on, but for now I think this is a good start.
I don't know how consistent I'll be about it, but I'm hoping to put up a few more of these GSoC blog posts before the end of my project.
This post has been fun to write, and who knows, maybe a future GSoC participant will find it helpful =)