File:  [NetBSD Developer Wiki] / wikisrc / projects / code-in.mdwn
Revision 1.25: download - view: text, annotated - select for diffs
Sat Nov 6 09:47:38 2010 UTC (10 years, 10 months ago) by mbalmer
Branches: MAIN
CVS tags: HEAD
Put this into perspective.

# Google Code-In (GCI) project ideas

Please note:  In late 2010, Google ran a program somewhat similar to
Google Summer of Code, Google Code-In, for which we applied, but were
not selected.

We keep our proposed ideas on this page for further reference, or as a starting
point if you want to start working on NetBSD.


Google ran a similar event a couple of years ago, see <> for details and perhaps snitch some ideas from there?

## 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)

#### Generic desktop

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).

#### Home theater (QA, Doc)

Try simulating music player and/or video player.

See also in embedded projects.

### 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

##### Router

Take any SOHO router as example.

Adapt pfSense? Similar software?

##### Home theater

Create music and/or video player. Perhaps desktop.

### Thin client / Kiosk

Build thin client.

* install and configure graphical system (X server)
* make your NetBSD autologin and launch some application (imagine a kind of kiosk or game console)
* make your NetBSD ask login in graphical mode
* make your NetBSD autologin and launch graphical application
* configure and install VNC server
* make your NetBSD connect to VNC server
* configure and install RDP server
* make your NetBSD connect to RDP server
* boot your client over network
* make your client boot from CD or USB Flash, or CF card

It is preferred if NetBSD installation uses the least possible resources.

### File server
Build personal file server.

Ideally, it should present HTTP(S), FTP(S), and SMB access to data.
Consider other access methods (SFTP, NFS, AFS/CODA, AppleTalk).

Ideally, 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, 

Separate tasks:

* provide access to your files via HTTP
* provide access to your files via FTP
* provide access to your files via SMB
* provide access to your files via NFS
* provide access to your files via SFTP
* create periodic file system snapshots on your NetBSD
* learn how to perform automatic periodic tasks
* make your NetBSD perform periodic file system snapshots
* try doing anything/everything above on headless system
* try automatising anything/everything above

### Bluetooth access point (Doc, QA, Code)

* connect NetBSD to your phone (dial out)
* connect your phone or other computer to NetBSD via bluetooth
* provide different services via bluetooth connection ("push", network)

### Backup and Recovery (Research, Doc, QA, Code)

#### Incremental backup scenario

Document it. Try different plans.

#### Recovery from bare iron (QA, Doc, Code)

Consider installation recovery scenario from bare system to configured server.

Try automatizing it.

#### Unattended installation (Research, Code)

Like above only using installation tools.

### 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.

### Installation tools (QA, Research, Doc, Code)

Try creating bootable media using fdisk, disklabel, installboot.
Decribe experience, propose improvements, implement them.

Build NetBSD on any other OS at your choice: FreeBSD, Linux, NT, or OSX.

Try creating bootable media using tools built on another OS.
Decribe experience, propose improvements, implement them.

Tools affected
* fdisk
* disklabel
* installboot
* perhaps others

For hardcore hackers (those wishing to learn how the stuff works).

### Audio/Video broadcasting (network radio/TV broadcasting)

Build audio and/or video broadcasting server.

### Telephony

Become VoIP provider!

### Build system QA (QA, Code, Research)

Check all MK* variables, check how they affect builds,
suggest improvements or removal.

### 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

### Tests projects (Code, QA)

Create ATF tests for a section of library routines, such as:

* [[!template id=man name="atomic_ops" section="3"]]
* [[!template id=man name="bitstring" section="3"]]
* [[!template id=man name="bluetooth" section="3"]]
* [[!template id=man name="cdbr" section="3"]] and [[!template id=man name="cdbw" section="3"]]
* [[!template id=man name="inet" section="3"]] and [[!template id=man name="inet_net" section="3"]]
* [[!template id=man name="ethers" section="3"]], [[!template id=man name="iso_addr" section="3"]] and [[!template id=man name="link_addr" section="3"]]
* [[!template id=man name="regex" section="3"]]
* [[!template id=man name="sdp_data" section="3"]]
* [[!template id=man name="ssp" section="3"]]
* [[!template id=man name="string" section="3"]]
* [[!template id=man name="strings" section="3"]]
* [[!template id=man name="strtod" section="3"]], [[!template id=man name="strtol" section="3"]], [[!template id=man name="strtoul" section="3"]] and [[!template id=man name="strtoull" section="3"]]
* [[!template id=man name="uuid" section="3"]]
* (please add..)

### PR projects (Code, Research)

Create a fix for PR#...

(please list any PRs that you think are easily fixable but just require a bit
of time that you don't have)

### Documentation projects (Doc, Outreach)

#### Save all useful information from closed wiki.NetBSD.SE

Go over NetBSD.SE snapshot, check pages for valid and useful information,
move all relevant bits to to-be-official NetBSD wiki.

CVSweb for NetBSD wikisrc <> software: FreeBSD-CVSweb