Google Code-In 2012 (GCI)
Contents
- Google Code-In 2012 (GCI)
- Introduction
- Goals as stated by Google
- Lessons learned
- Coding tasks are interesting
- Add maintenance tasks
- Have a clear outline of the task
- No creative tasks, but design tasks
- Watch out for plagiarism
- Don't add extra requirements
- Make tasks small projects
- Make stand-alone projects
- Combine tasks to a larger project
- Be clear about your expected formats
- Stay in touch with the students
- Look into the tasks yourself before submitting them
- Don't underestimate the required effort!
- Be demanding
- Fulfilled tasks
Introduction
Code-In was running till January 14th. This page now contains the list of tasks which were actually done. You can see the results (open tasks as well as closed ones) on the Google Melange page. There were 88 tasks done and 23 were left open.
We provided a Virtualbox image for testing, such students didn't have to spend time on installing the system when they just wanted to complete a task where they needed NetBSD running.
Previous events by Google: Code-In 2010, Ghop 2007
Previous organizations accepted for Code-In: Code-In 2010 Code-In 2011
There is information from Google about what is suitable as a task for Code-In.
Goals as stated by Google
- Code: Tasks related to writing or refactoring code
- Documentation/Training: Tasks related to creating/editing documents and helping others learn more
- Outreach/Research: Tasks related to community management, outreach/marketing, or studying problems and recommending solutions
- Quality Assurance: Tasks related to testing and ensuring code is of high quality
- User Interface: Tasks related to user experience research or user interface design and interaction
Lessons learned
The effort needed for Code-In struck us unexpected. There were several things to be learned about Code-In and about the kind of work that can be done in the scope of Code-In.
Coding tasks are interesting
The students are mostly interested in coding tasks. They do not want to write documentation, and they don't want to research things. With coding tasks, students would even spend more time on a task than they would do with something else, and maybe even stick to that task when GCi has finished.
Add maintenance tasks
Another kind of task which was often claimed were the ones about maintenance jobs, in this case conversion of articles from XML to Markdown. They're easy to do, but require a lot of effort - suitable for GCi.
Have a clear outline of the task
Tasks with an unclear description often led to results which were not as expected. Students of this age are more used to have a task which has a clear result, and not something open. Though there were some good results, it's still difficult to understand the tasks and sometimes the tasks were only solved with the second or third approach.
No creative tasks, but design tasks
Don't do creative tasks, i.e. creating images. On the other side, the design or layout tasks went very well - so if you want to know how a student would imagine the interface for a program or website or book format you need, then make that a task - but be clear about the results and what you expect. You should have thought yourself about how you would do this in advance, such that you can explicitly state what requirements the task has. You'll get nice results with new ideas.
Watch out for plagiarism
Especially in the research or documentation tasks, you have to be careful about plagiarism. Several students just copied texts from other sources and tried to submit them.
Don't add extra requirements
When the student has to download or configure extra requirements first, the task gets much harder. You should not add tasks which rely on src, pkgsrc or pkgsrc-wip or whatever large or difficult extra things to do before being able to work on the task.
Make tasks small projects
The coding parts are more appealing when they are small autonomous projects. The tasks involving creating your own binary had a larger acceptance than the once which were about fixing bugs of existing programs. You can and should tasks for small programs even if you only want them for research, i.e. you want to look at the possibility of a larger project involving this. Even if the task is about another project, but which would or could add benefits for NetBSD, it is possible.
Make stand-alone projects
This is not the same as making small projects. The described small projects should be in such a way that you can run them on any operating system and they don't require a speical setup to be written, i.e. many preinstalled packages. The students are most likely not running NetBSD, and forcing them to install NetBSD, install some pkgsrc packages and spend time configuring the system discourages doing a task. Even the Virtualbox images were no great help for some of these tasks.
Combine tasks to a larger project
Maybe contrary to making small projects, tasks should have a connection. Students are more engaged if they did something, and when approving the work you already point them to other tasks which are similar to the one they just did, or work together with this one.
Be clear about your expected formats
You should be very clear about the formats you expect for input! If there is an image, tell t hem to upload the "sources" (gimp xcf file or so); if there is a text, it should be plain-text; if it is a program, the final submission should be an archive with the code and not a link to github.
Stay in touch with the students
The best way of communication with the students is via IRC. Everything else is too slow, and when a task is meant to be 48 hours, but half of the time is spent waiting for communication, the task is likely to fail or waste student's time.
Look into the tasks yourself before submitting them
Though it might be charming - when you want students to fix a PR, you should look at the bug yourself and have a slight idea how to fix it before submitting it. There was a task which was not possible to fix (for the student) and was duplicate. And the students might have questions and then having to research things yourself before you can help is not good.
Even with all the other tasks, you should have an idea what you want, and what effort it requires. There were some tasks which resulted in much work though they seemed easy in the beginning, while other tasks stated as difficult could be performed within a few minutes.
Don't underestimate the required effort!
You should not underestimate the effort needed by Code-In. On the one hand, when you're young, you're not as patient as later. Waiting several hours to get a task confirmed is a lot of time in a student's mind.
On the other hand, there was a great run in the first week of Code-In. You have to read several tens of mails every hour, especially in the beginning.
When a student needs help, you have to care for him and help him with that, even with configuring the system.
Be demanding
If you have an engaged student, you can be demanding. Don't hesitate to send back his work and be explicit about what you don't like. But be careful you don't frighten him. There were also students which just unclaimed a task because they didn't understand the review.
Fulfilled tasks
The work done by GCi has not yet been integrated to NetBSD. Especially the documentation tasks have to be put into the wiki, but also need modifications in the NetBSD website infrastructure.
These are the tasks which were completed:
Edit, wiki integration
These tasks created or converted articles for the wiki. We have to edit and commit them to the wiki.
- Howto: Running a webserver with Apache -- committed
- Convert articles from the website to wiki articles -- not suitable for integration
- Convert the NetBSD Guide from DocBook to Markdown -- committed
- Convert the encrypted iscsi article to markdown -- committed
- Convert the PUFFS guide to markdown -- committed
- Convert internals guide to markdown -- cannot be committed in a sane way
- Compare init systems with each other -- not suitable for integration
- Rewrite system configuration in the guide -- committed
- Create an overview of the NetBSD kernel source layout -- committed
- Create an overview of the NetBSD src layout -- committed
- Convert the tracking current guide to markdown -- committed
- Convert the security processes to markdown -- committed
- Intro: Disk and partition management with NetBSD
- Using the framebuffer in NetBSD
- Try out RFB/VNC software on NetBSD
- Try out VoIP software
- Howto: Using LVM to manage your disks
- Describe what a NetBSD installation does
- Describe how to run NetBSD headless
- Setup single sign-on (SSO) service using LDAP
- Try out XMPP software
- Describe how to create a NetBSD live flash drive
- Howto: Getting in touch with NetBSD
- Create an overview of the NetBSD releases
- Convert the Xen Howto to markdown
- Howto: How to get a graphical environment on NetBSD
- Howto: Update the system from binaries
- Try out VoIP software
- Create an overview of the NetBSD server layout
- Convert the CD-ROM creation guide to markdown
- Howto: Dual-boot NetBSD
- Describe how to backup NetBSD
- Convert installation notes to markdown
- Create list of available VoIP client software
- Make NetBSD a music or video player
- Convert the Networking FAQ to markdown
- Convert the NetBSD X documentation to markdown
- Convert the CD-ROM creation guide to markdown, merge it with other articles
Advocational tasks
These tasks created advocacy material and have to be integrated to the website or to a new wiki page.
- Compare NetBSD with other operating systems of its kind -- not suitable for integration
- Create smaller NetBSD artworks -- not suitable for integration
- Create smaller NetBSD artworks -- not suitable for integration
- Create NetBSD wallpapers -- not suitable for integration
- Create NetBSD wallpapers -- not suitable for integration
- Create NetBSD wallpapers -- not suitable for integration
- Create NetBSD wallpapers -- not suitable for integration
- Create a NetBSD poster -- not suitable for integration
- Create a NetBSD poster -- not suitable for integration
- Create an icon set for NetBSD - research -- not suitable for integration
- Create NetBSD slide templates (OpenOffice)
- Create NetBSD slide templates (Latex) -- needs some work to integrate the NetBSD logo
- Create a NetBSD book layout
- Create and implement an ikiwiki design template
Informational and external tasks
These tasks just provided information, we have to see how we handle them. They maybe also created code or information which should be used for something, but currently has nothing equivalent in NetBSD. They were done by developers who had project ideas, and wanted students to research or code them.
- Create an overview of NetBSD documentation
- Version the documentation
- Research POSIX compliance
- Research POSIX compliance
- Survey documentation structure of other projects
- Create lists of software needed for a desktop system
- Create a small markdown wiki CGI
- Research and write a Markdown style guide
- Write a Markdown - Latex converter
- Survey documentation structure of other projects
- Investigate necessary documentation markup
- Create a concept for a documentation browser
- Measure startup time
- Add an web interface to apropos
- Write a markdown - curses converter
- Create and implement a design and templates for a small wiki
- Create and implement a design for a web application
- Write a markdown - Docbook converter
- Survey documentation structure of other projects
Code tasks
These tasks created code, i.e. fixed bugs or wrote a new program, or did something that should be integrated to src/ or pkgsrc/.
- Fix bug bin/41049: usermod -g =uid testuser does not create group as indicated by man page
- Describe the format of usermgmt.conf
- Write apropos branch to search through Markdown documentation
- Create ATF tests
- Make OpenDJ run on NetBSD
- Research terminfo(5) keycodes
- Fix bug install/17792: Install process order - network verses disk
- Write a mail wrapper
- Document different time structures
- Repair vnconfig(8)'s return codes
- Create security/pam-pgsql package
- Fix bug bin/47065: /bin/sh returns success for Bad file descriptor
- Fix bug bin/46579: ifconfig prints unnecessary message when deleting interface
- Create ATF tests
- Multi-user graphical terminal server accessible by RFB/VNC
- Create ATF tests
- Create databases/nss-pgsql package
- Fix bug bin/47367: patch(1) mishandles Oops.rej