# Google Code-In (GCI) project ideas
## Goals as stated by Google
1. Code: Tasks related to writing or refactoring code
1. Documentation: Tasks related to creating/editing documents
1. Outreach: Tasks related to community management and outreach/marketing
1. Quality Assurance: Tasks related to testing and ensuring code is of high quality
1. Research: Tasks related to studying a problem and recommending solutions
1. Training: Tasks related to helping others learn more
1. Translation: Tasks related to localization
1. User Interface: Tasks related to user experience research or user interface design and interaction
## Proposed areas
### Desktop project (QA, UI, Doc)
Try out various desktop scenarios: KDE, GNOME, XFCE.
Install software, configure, document, tune.
Make it good-looking, I mean _really_ good-looking.
Describe problems you meet, sort them out (file problem reports as necessary).
### Document time and calendar formats and functions and their relations (Doc, QA)
We have "time_t", "struct timespec", "struct timeval", "struct tm", and so on.
Document all of them as time(5) so that one could have overview of those.
We have time zone sensitive and time zone independent representations too,
figuring out conversions between local time and UTC from manual pages is hard.
This is to be addressed too.
This requires some programming skills, some knowledge of C in particular.
### Embedded project (Doc, Research)
Describe and document some embedded usage,
e.g. making NetBSD run on machine without:
* keyboard and video ports
* above and serial port
#### Possible embedded usage
* Thin client: rdesktop or vnc to hardcoded server
* Home or SOHO router (wireless access point)
* Home or SOHO file storage
* Home or SOHO print server
It is preferred if NetBSD installation uses the least possible resources.
(E.g. try making it boot over network, or consider that it is to be made so in future.)
#### More notes on embedded systems
##### File server
It should present HTTP(S), FTP(S), and SMB access to data (must),
consider other access methods (SFTP, NFS, AFS/CODA, AppleTalk).
It should implement web interface.
Bonus points if you make it work like Apple Time Capsule (already running NetBSD) or better,
e.g. implement periodic file system snapshots,
Take any SOHO router as example.
Adapt pfSense? Similar software?
### Unattended installation (Research, Doc, Code)
Consider installation recovery scenario from bare system to configured server.
### Live USB Flash image (Doc, Outreach, Code)
Perform and document how one does it.
Script it if possible.
Script cross-buildin if possible.
Consider thin client.
### Make fdisk, installboot and other similar tools work on other systems (Code)
E.g. make it possible to create bootable media when running FreeBSD or Linux (NT or OSX are fine too).
For hardcore hackers.
### System Library project (Code, Doc, QA, Research)
Add a function call to a system library.
The function call does not need to be immediately useful (ideally we should provide several
suggestions) and in fact should not be very complex as the project contains the following
tasks with varying skills
* produce C code of function
* bump library minor version
* write nroff manpage
* handle Makefile changes
* handle set list changes
* write ATF testcase
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb