Summer is over! Sadly this means our summer of code is also coming to an end.
What have we accomplished so far?
First of all, we learned a lot about everything! If we were to categorize the technical things we learned, it would be:
computers (the heap and stack, garbage collection, unicode)
internet and things (DNS, IP, HTTP, web browser engine, JS engine)
Rust (memory-safe language that’s also easy to use!)
As a bonus, we learned about what makes a good project good, how to motivate people to learn, and how to motivate ourselves to continue learning.
In terms of project related accomplishments, we have implemented the Headers, Request, and Response APIs. We have also added support for the Fetch method, and hopefully we are almost done with implementing Body mixin methods! Throughout this journey, we also discovered ambiguous wording and bugs in the Fetch spec. These improvements have come in the form of submitting 17 pull requests to Servo and opening 5 issues at WHATWG. How exciting! A lot of the groundwork was already done (thank you Servo contributors!), which made our project so much more tangible and productive.
Fetch in action!
Below is a simple example of fetch usage in locally built Servo.
Watch Servo making fetch happen! (gif: Team JaM)
Going to conferences
RustConf
We attended the first ever RustConf. We were so lucky that it happened to be in our city, Portland, OR. We had a great time meeting other people who like Rust and learned a lot from the informative talks! Many thanks to RustConf organizers for granting us a day full of fun and learning.
Strange Loop
We also went to Strange Loop in St. Louis, MO!
Having fun at the City Museum in St. Louis! X) Also featured: Ore from Team B'More Stunners and our coach Nick! (photo: Team JaM)
Strange Loop was a large conference; this year, there were over 1000 attendants and 5 talks going on at once. We learned about many concepts that we were unfamiliar with, such as lambda calculus, turing machines, scheduling algorithms, and computational origami. We came back with a long list of things we want to learn deeper, which made us happy. We are grateful to Strange Loop and Rails Girls Summer of Code for the opportunity to learn new things!
Our mentor, Josh Matthews (aka jdm). Thank you, jdm, for your boundless patience while we learned the ropes, and for your easily digestable explanations of how Servo works! We asked a LOT of questions. jdm also gave a great talk about Optimizing Open Source Projects for Contribution! By the way, we’re half-convinced jdm has both a crystal ball and a time machine at his disposal.
Our supervisor, Scott Kobewka. We always finished our weekly video calls feeling better about how much we’ve accomplished, even when we sometimes felt like we were moving at a snail’s pace! Only one more call left ;( ….
Our coach Nick. Nick was our go-to person for Rust questions and had our back whenever we (the front-line) were battling with the borrow-checker. As a Mozilla employee, he also knows a lot about Servo design, which was super helpful. Thanks, Nick!
Our coach Stefan. We went to Stefan for all things git and web-related. Even when we sort of knew how to implement fetch, we were confused about why we were implementing fetch. Stefan helped clear that up for us!
Tons of people from the Servo and Rust communities! Everyone on IRC and github was so responsive and helpful, we feel so warm and fuzzy all over. :) Thanks to Manish for taking time to help us with tricky Servo questions, even with the wacky time-zone situation. Thanks also to annevk for helping us understand the Fetch Spec, seanmonstar for help with hyper, KiChjang for his feedback and Rust tips, and many, many more people…!
And, of course, a giant thank you to everyone at Rails Girls Summer of Code who made this summer possible! <3 <3
So, what’s next?
We hope to have implemented a large chunk of the Body mixin by end of this week. After that, well, we both liked contributing to Servo so much that we plan on continuing to contribute. We’re really proud of what we’ve accomplished in the last three months. Now that we know what we’re capable of, nothing can stop us from trying and learning new things!
It has been a summer full of some happy coincidences and one we have just discovered is that apart from having a Star Wars related name like the Coding Padawans, we, Team Joda are writing our blog exactly two years after they published it 😉 and are getting ready to end our coding journey as Rails Girls Summer of Code students.
Role Models
Amazing Role Models (Image: Team joda, Technique: Collage)
This has been a very cool journey indeed, through which we got to meet many inspiring women and learn about their coding journeys as well. We shared our stories and motivated each other: We had lunch several times at SoundCloud with team LoadtoCode and we also met team Kindr3d, when they came to Berlin for a couple of conferences. Then, we even got to meet the RubyCats during EuRuKo 2016. Furthermore, Ellen (one of our coaches), Duana and Tam (our mentors) and Nynne (a RGSoC alumna, who worked last year on the same project) have been incredible role models that continuously embolden us throughout our coding paths.
Our Project and Lessons Learned
As we mentioned in our first post, our project is SoundDrop. By working on this project closely together and having a great team of supporters, we acquired and improved both our technical, as well as our communication skills: We learned to ask more precise questions, to research better for solutions, to try things out from different perspectives and to talk about our problems and boundaries to be able to get along throughout the summer. Working on a project so closely can be very challenging: It is like having a travel companion with which you do everything together and with whom you have to talk often, to make sure you are not stepping on each others’ toes. So even if our communication is not always perfect, we put a lot of effort and achieved the goals we had for the summer:
We learned about APIs and could design and implement one for our project
We revamped the landing page with an embedded map in which you can see the drops that have been added
We added tags, so users can categorize their drops
Johanna made it possible for users to search drops according to tags
Dayana created a “My Drops” Page where users can see their drops on a map and a count of them.
Of course this is work in progress and there is still much work to be done, but we’re satisfied with the results and looking forward to code more. Throughout this process we learned a lot about programming languages, servers and memory allocation among other topics and also began using awesome debugging tools such as Pry and Chrome’s developer tools. We also had to understand, and sometimes even refactor legacy code.
Conference: EuRuKo 2016
EuRuKo 2016 (Image: Team joda, Technique: Collage)
On September 23rd and 24th, we were able to attend our first international Ruby conference, EuRuKo, which was taking place this year in Sofia, Bulgaria (Thanks again to EuRuKo for providing free tickets!). Not only was EuRuKo our first big international conference, it was also the first one where we gave a lightning talk. We became quite nervous, when we realized in front of what a large audience we would speak and what famous and well known developers were attending. But the EuRuKo staff supported us very well and we quite enjoyed standing on stage, sharing our Rails Girls Summer of Code experience wrapped up in 5 minutes. We received a lot of positive feedback and people liked that we announced to be looking for jobs after Summer of Code ;)
Attending EuRuKo meant experiencing diversity in many different ways: The talks were both technical and non-technical. One talk that deeply impressed us was “Consequences of an Insightful Algorithm” by Carina C. Zona. She warned about negative impacts that errors in algorithms can have on people’s’ lives, e.g. when an automated tagging system categorizes a picture of a concentration camp as “playground” or when Facebook reminds you of a day you always wanted to forget. We were also impressed by José Valim talking about how and why he created Elixir and to hear about the accomplishments of the awesome Ruby Together community that maintains some of the most important Ruby Gems (in their free time! Thanks!). During the breaks and the after party on Friday we got to meet a lot of Ruby enthusiasts from many different countries and backgrounds, e.g. our fellow RGSoC Team from Warsaw: The Ruby Cats, some Rails Girls Sofia organizers with whom we could exchange experiences from putting together beginner workshops and - last but not least - we met Matz, the creator of the Ruby programming language!
In a nutshell, we had an amazing experience with many interesting people in a pulsating city and we are looking forward to EuRuKo 2017 in Budapest!
What Comes Next
Now the last week of RGSoC has started and of course we are sad that these three months of intensive learning are soon to be over. But we are also looking forward to new challenges: continue contributing to SoundDrop (updating it to Rails 5 \o/), working on our own projects and applying for developer jobs. Or, as Yoda would put it:
“If you end your training now — if you choose the quick and easy path as Vader did — you will become an agent of evil.”
Hey, we are Team Rookies. Our summer story begins with great excitement and our adventure is almost ending with happy memories. For 3 months, we have delved into JavaScript world, learning from the front-end to the back-end to make a Hoodie desktop application. We have learned how to handle events, how to make API, how to split the code efficiently with Riot.js and how to connect our project to the Hoodie server with Node.js and how to wrap the project with Electron Framework. When we look back our summer, it was not only about learning technologies but also about positive mindsets and enthusiastic attitudes. There were many important lessons and we were happy to achieve a lot of progress in our project. This growth of ours was impossible without kind supports and helps from RGSoC, Hoodie, mentors, coaches and supervisor.
And,,,,, Now, are you ready to listen our amazing & exciting summer journey? :D
This is a visualization of our Hoodie-RGSoC summer journey. (Image: HyeSoo)
Positive mindset & Take an action
It has been a happy summer for us to grow up and make progress in our Hoodie desktop application project. We have learned an invaluable mindset towards approaching the problems and taking an action. These days, IT industry is flooded with a lot of new technologies and we might feel overwhelmed sometimes. When we talked about this issue with the mentor and coaches, we learned a positive attitude from them. Instead of trying to cover all must-know new technologies, we can think of how we can move towards problems first and use the technologies as a tool to solve the problems. With this approach, we can have an open mind on challenges and required technologies than getting overwhelmed.
We also have been wondering how we can write a clean and efficient code and how we can broaden our horizon as a developer. While we were talking with the mentor and coaches, we learned an important lesson. If we just read lots of books and do not take an action to make an application, we are likely to forget what we have read/studied. But if we practice what we read by getting our hands dirty by making actual applications, we can grasp more concrete concepts by experiences. We are happy that we can approach current/future projects with a positive mindset and walk through them in a better direction.
Tehetena is in the center, from the bottom left are Esko, HyeSoo, Omid, Pilar and Gregor. (Image: Gregor)
Improvements and progress of Team Rookies’ project
We also have made lots of changes to the code we made in the first month. First, we have learned lots of new concepts in JavaScript. We made 8 different kinds of event handlers to create/edit/update/cancel/delete/go back/start/stop applications. When we had the first response by clicking button with handlers, we were so happy. We also learned how to debug using ‘debugger’, ‘breakpoint’ and ‘watch’ in the browser from Gregor. With these methods, we were able to observe the code flow and expressions and find where an error comes from. There are no perfect applications and most of times, we try to improve our application by debugging or adding more features. They became very useful tools for fixing problems in our project.
While implementing several features for our project, we used ‘event.preventDefault’ to make our custom event. For sorting the apps in the app list, we used ‘Array.prototype.filter()’ and for looking through the application, we used ‘Array.prototype.forEach()’, and ‘Array.prototype.map()’.
We also learned two advanced JS topics. One is ‘promise’ and ‘closure’. We both have never worked with promise and closure before. It took us a while to grasp the concepts. Thanks to Gregor’s helpful tutorials, we have managed to work with promises for making our API work asynchronously and closure for our API safer from the scope of the anonymous function with a private variable.
This is an example of our API which with promise and closure. (Image: Tehetena)
When we reviewed the code feedback done by Gregor, we learned how to clean up our current code and how to make an uniform format with a standard style throughout our code.
The other important thing we have learned this month was working with APIs. In the beginning our application main.js file contained all its logics and methods on one long JavaScript file. Now we have tried to split the code into several different tags, using ‘Riot.js’, so that we can manage our code more efficiently. Gregor’s example code was very helpful to understand how to divide our application into several tags that will show and hide according to the routing.
This is the first prototype of Hoodie Desktop application. (Image: HyeSoo)
Our plan for the last part of our journey
Lastly, this month is our last part of our RGSoC journey. Time flies. We cannot believe we are already looking at the end of our journey.;D We have grown day by day compared to our beginning. In July, we did not know how to make event handler, API and how to clean up the code etc. But now we are more confident that we can implement interactive web pages and handle API to talk with server and retrieve data.
In the monthly call, we planned our last month with Hoodie mentor Gregor, our coaches Omid & Esko and our supervisor Pilar. While we taught ourselves Riot.js, Gregor worked on the guidance of how to use Riot.js for our project to speed up our project. We tried to understand how Riot.js works for our project with coaches’ helps for several weeks. Since last week, we have studied Node.js and Electron framework to make our project interact with the real Hoodie server side and wrap up our current code with Electron framework. We hope that our first prototype of Hoodie Electron desktop application can be ready by the end of September.
We also talked about what we can do after this month in the monthly call. If it is possible, we would like to work as a contributor for the current project, so that if someone who is interested in this project have a question, we can help him/her and if there are errors or bugs, we want to try to solve the issues together in the future.
Everyday we have felt so thankful for RGSoc, Hoodie mentor Gregor, coaches(Omid, Esko, Musse) and supervisor Pilar who have helped us a lot and supported us all the time. Thanks to their great encouragements and helps, we did not lose our confidence during the 3 month journey and we were able to move our steps forwards day by day.
‘Our last journey’ does not mean we will end our stories. We would like to continue working on our project after these happy and invaluable three months. If it can be helpful or interesting to someone, we also would like to share our stories with RGSoC communities.
Thank you so much for the great opportunities and kind helps. We will not forget our 2016 amazing summer with RGSoC.
Best wishes for all of us and RGSoC. cheers! ;D
For further information on repository of Hoodie desktop application, please visit team Rookies’ repository and for Hoodie, visit hood.ie.
Github’s CEO Chris Wanstrath, also known as defunkt, commenced Github Universe by unveiling exciting, new features.
Some of these new features included a refreshed redesign of Github’s profiles, unveiling the GraphQL API, and the project management tool Github Projects.
Photo taken by Patricia Arbona
Github Universe was located in a warehouse district near San Francisco’s Pier 70. On top of this warehouse was a giant Octocat!
In the main entrance of the conference, a majestic balloon Octocat strikes your eye.
We had came across Githubber Nikka Padilla.
Photo taken by Elom Gomez
All throughout Github Universe, our team periodically kept running into friends, colleagues, and mentors.
As fellows currently going through the program now,
it was valuable to hear about Karla’s and Emma’s challenges and successes with their Rails Girls project.
Our team attended the informative Open Source panel Pains and Gains: Five Short Stories, facilitated by Katrina Owen.
Each panelist illuminated upon a particular challenge they faced in Open Source, and what strategies they employed to go about solving their unique challenges.
After the panel, our team was fortunate enough to speak with two Rails Girls Summer of Code Project Maintainers,
Katrina Owen, author of exercism.io and Gregor Martynus,
Chief Dream Officer of Hoodie.
Both Project Maintainers were welcoming, approachable, and humble in regards to their amazing accomplishments.
At the Heroku booth, our team was thrilled to meet up with an previous programming instructor, Cynthia Dueltgen.
Cynthia is currently having a fantastic experience as a Customer Solutions Architect at Heroku.
Our team thanked her for giving us foundational software development skills. Her patience teaching us difficult programming concepts was pivotal in our growth as software developers.
Cynthia was ecstatic to hear about our experiences in the world of Open Source!
Photo taken by Rebekkah Murphy
We ended a jam-packed day with a Big-Bang Benefit Concert, with proceeds going to Black Girls Who Code.
Common’s lyrics and rhymes were powerful! Common has an amazing stage-presence. His lyrics were very politically-aware.
Photo taken by Patricia Arbona
Team Hackbrighters came across Amanda Gelender, Senior Manager of Github’s Social Impact team.
Amanda made it possible for our team to be hosted by Github for the duration of our fellowship. We are extremely grateful for Amanda and the Social Impact team’s time and generosity.
Thank you for supporting women in Open Source!
At lunch, our team met former GitHubbers Brandon Ferguson and Rachel Meyers.
Brandon currently works at Travis CI, and Rachel was a Rails Girls Coach in 2015 and is founder of Opsolutely.com.
Both imparted to us thoughtful advice in terms of how to grow professionally as a software developer.
Our team attended an interesting Electron talk Making Electron Development Simpler, More Pleasant, and More Productive by Slack Desktop Engineer,
Machisté Quintana.
Photo taken by Patricia Arbona
Machisté highlighted throughout his talk how there exist
unique challenges when working with Electron, a cross-platform framework for desktop apps.
We also came across Travis CI foundation’s booth.
Here we spoke with Konstantin Haas, Mathias Meyer,
and Josh Kalderimis co-founders of Travis CI.
Past and current Rails Girls fellows thanked the Travis foundation for creating and funding our fellowship.
After intimately configuring and debugging Travis CI on Lektor,
our team gave input as to how to improve the continuous integration system.
It’s so hard to write a post about project management which wouldn’t make people say: ‘Hey, this is obvious!’. Still obvious solutions to problems are often the right ones and at the same time difficult to follow-through on. Most management tips may sound logical and even familiar to you, yet so many project problems arise not because of technical failures but rather due to mismanagement.
Project management will look very different from company to company and from project to project. Here I would like to stress just a few things which make a difference whatever you do in a team.
1. Talk with your teammates
Tech people tend to underestimate the importance of communication, and yet most problems in projects appear as a result of insufficient communication, or lack of transparency in communication. Sometimes you may think that things are obvious without discussion when, in fact, team members have different opinions on them. Examples could be:
project mission and values (why you do something);
expectations and motivation (what you want to do, in which way and what result you expect);
actual meaning behind vague task titles (e.g. improving UI may mean reworking design or cleaning up markup);
etc.
There are many communication techniques which may come handy and efficient: issue trackers, wiki, project management tools, not to mention emails and chats. And at the same time, talking to people is still indispensable, because it helps you not just to understand each other, but also to reveal communication gaps. Please, find your time to talk to each other.
Photo by Anika Lindtner
2. Ask for help
Often students don’t ask for help. The reasons may be different:
I don’t want to look not smart/capable enough;
I don’t want to bother others;
I want to deal with this challenge myself!
The latter might make sense up to a certain degree, however, try also to think of what is good for the project. You can spend a week on a one-day task and finally nail it, but ask yourself first: Is it an efficient way to spend time? Doesn’t it hinder the project instead?
Ask people for help if you feel like you’re stuck. You might even set a “rule of one day”: if I spent one day on a particular problem, searched everywhere I could (I really did!) and didn’t find a solution, I ask my teammates for advice. It doesn’t have to be one day, of course; try to find a period which would be comfortable for your team. It’s always about balance.
3. Share progress and set deadlines
Even if things are going well at your side, don’t disregard sharing your progress with the team. It’s really easy to forget about it when you:
do something monotonous;
work on one task for a long time;
dive too deep into technical details…
But even then, providing your team with updates will not only get the team on the same page, but may also be beneficial — be it actual help from your teammates or just them pushing you forward :)
One of the best ways to make sure you move in a good pace is to set deadlines. Everybody is used to setting deadlines to big tasks. Sometimes it is useful to set deadlines to smaller tasks, too. If you’re stuck with a task or not sure which solution to choose, break the task into smaller pieces and eat your elephant one bite at a time: you can plan to talk to someone ‘by Wednesday’ and make a decision ‘by Friday’. This will help you keep moving.
Photo by Anika Lindtner
4. Don’t rely on your memory
Whenever you have a meeting where you discuss things and especially make decisions, a good thing would be to write a short summary and share it. It could be as simple as: “Today is DD.MM.YY, participants are Alice and Bob, we agreed on this and that”.
Often you might feel that it’s not necessary because:
the meeting was short;
it wasn’t official enough;
nobody demands notes from me, so why would I lose precious time writing them;
and my personal favorite: we won’t forget this anyway.
Time goes, things change. Sometimes it’s very useful to refer to history, whether you want to understand why things went the way they went, need facts to argue with someone, or want to give a quick update on the project to someone who wasn’t there with the team for some time.
5. Stay in touch with the project maintainer
Whenever you have a customer, a product owner or an OSS project maintainer — a person who is interested in developing a project — it’s good to keep them in the loop. Show them what you have accomplished every once in a while, even if it’s not a big piece of software and even if you send pull requests anyway.
Don’t take it the wrong way, I don’t mean you should spam your project maintainer with emails (maintainers are usually busy after all!). The point is the following: if you work on a project regularly and try to make major contributions, it’s good to give the person on the other side an overview of what you were/are up to. This will not only help you get feedback and learn if you are doing the right thing or not, but it will also ensure transparency and shape your future plans.
That’s it. No silver bullet, right? Hope you still found it useful. Good luck!