Annotation of wikisrc/projects/code-in.mdwn, revision 1.33
1.1 asau 1: # Google Code-In (GCI) project ideas
1.28 jdf 3: ## Introduction
4: For the application for [Google Code-In 2012](http://code.google.com/opensource/gci/2012/index.html), and as a starting point for people who want to start working on NetBSD, here is a list of tasks to be fulfilled.
1.25 mbalmer 5:
1.28 jdf 6: All the tasks should be completable within hours or up to three days. To get an idea of how much a single task should be and what kind of they could be, look at [this page](http://code.google.com/p/google-code-in/wiki/GCIExampleTasks).
1.25 mbalmer 7:
1.28 jdf 8: Even if you don't want to attend the Code-In, you can use this as a starting point. In most cases, the work needs some research in order to be completed. Just write a mail to one of the [mailing lists](http://www.netbsd.org/mailinglists/ you think is suiting (if you don't find any, just pick netbsd-users) and ask for more details.
1.26 asau 9:
1.28 jdf 10: Previous events by Google: [Code-In 2010](http://code.google.com/opensource/gci/2010-11/index.html), [Ghop 2007](http://code.google.com/opensource/ghop/2007-8/)
1.25 mbalmer 11:
1.28 jdf 12: ## Goals as stated by Google
13: 1. **Code**: Tasks related to writing or refactoring code
14: 1. **Documentation/Training**: Tasks related to creating/editing documents and helping others learn more
15: 1. **Outreach/Research**: Tasks related to community management, outreach/marketing, or studying problems and recommending solutions
16: 1. **Quality Assurance**: Tasks related to testing and ensuring code is of high quality
17: 1. **User Interface**: Tasks related to user experience research or user interface design and interaction
1.33 ! jdf 19: ## Used tags
1.29 jdf 20: If you want to search for a tag, just search this site for "Tag: $TAGNAME".
21: Used tags are (categories are not tagged):
1.31 jdf 22:
1.29 jdf 23: * *man* - tasks related to writing on or working with manpages
24: * *network* - tasks related to networking (including firewalls)
25: * *system* - tasks related to the system itself, either kernel or system level things
26: * *service* - tasks involving services running on the system (as compared to *system*)
27: * *overview* - tasks related to getting and documenting an overview
28: * *howto* - tasks involving the creation of a howto
29: * *comparison* - tasks involving the comparison of different solutions
30: * *research* - tasks involving active research by the student
31: * *ui* - tasks involving the user interface (mostly graphical)
32: * *graphics* - tasks related to creating graphics
1.33 ! jdf 34: ## Prerequisites
! 35: Altough there are several tasks involving prerequisites, you should read the text for the amount they are necessary in. Maybe there is a Latex prerequisite, but we could provide you with the Latex knowledge you need to fulfill the task.
1.29 jdf 36:
1.33 ! jdf 37: ## Proposed tasks
1.28 jdf 38: ### Documentation
1.29 jdf 40: * **Task: Describe the format of usermgmt.conf**: The file usermgmt.conf contains default values used by user management tools (like useradd(8)). But currently, the manpage usermgmt.conf(5) contains only a description of the fields, but not the format of the file itself. So review code about what is possible (spaces, tabs, etc.) and create an EXAMPLE section.
1.28 jdf 41: The file can be seen here: [usermgmt.conf(5)](http://netbsd.gw.com/cgi-bin/man-cgi?usermgmt.conf+5+NetBSD-current)
1.29 jdf 42: *Tag*: man
43: *Tag*: system
1.28 jdf 44:
1.29 jdf 45: * **Task: Create an overview of NetBSD documentation**: NetBSD has a variety of documentation stored everywhere in the web. On the one hand, there's the website with single articles, the NetBSD Guide, the pkgsrc Guide, documentation in /usr/, the NetBSD wiki, some important mailing list posts, manpages, other mdoc documents, something stored inside the code, etc.
46: In an attempt to gather documentation for NetBSD and provide a nicer entry point for beginners, this task is about gathering the points where documentation lies (with the full path), what language it is written in, what it is about (just a rough overview), and how much it is.
47: For the final goal, see [this mailing list post](http://mail-index.netbsd.org/netbsd-docs/2012/09/20/msg000295.html).
1.28 jdf 48: If you want to do this task, get in touch with us such that we can provide you with basic information where to start.
1.29 jdf 49: *Tag*: overview
1.28 jdf 50:
1.29 jdf 51: * **Task: Howto: How to get a graphical environment on NetBSD**: NetBSD is a very sleek operating system, delivering an X server (and the mandatory twm), but nothing else. As most people don't like twm, they install another graphical environment.
1.28 jdf 52: But how do you do so?
1.29 jdf 53: This task is about creating a howto to install graphical environments after the installation. You should provide screenshots or screendumps (when still being on the console) and describe which configuration files have to be modified, which packages should be installed, which are there after the instalation and which can be added afterwards (special editors, etc.), and so on.
1.28 jdf 54: The package light-desktop should be stressed in this documentation.
1.29 jdf 55: *Tag*: ui
56: *Tag*: howto
1.28 jdf 57:
1.29 jdf 59: * **Task: Create an overview of the NetBSD server layout**: If you're on a NetBSD mirror, after traversing into the tree you'll see various directories that seem to do the same.
1.28 jdf 60: You have to traverse the directories of a NetBSD server (ftp.netbsd.org might be the best one, as it is *the* reference), find out which directories have which meaning, and document that. In the end, you should think about a good ASCII representation of a directory tree and realize it.
1.29 jdf 61: *Tag*: research
62: *Tag*: overview
1.28 jdf 63:
1.29 jdf 64: * **Task: Create an overview of the NetBSD releases**: As every project with release engineering, it is difficult for a beginner to know which releases are the current ones, how long will a branch be supported, what are the actual branche names and what is the actual change in a minor or in a major version, what about binary compatibility, and where can I get information all in all?
1.28 jdf 65: This task is about writing a small article explaining the release engineering of NetBSD.
1.29 jdf 66: *Tag*: research
67: *Tag*: overview
1.28 jdf 68:
1.29 jdf 69: * **Task: Create an overview of the NetBSD src layout**: There is the manpage hier(7), which describes the directory layout of a running NetBSD system.
70: To make it easier for beginners to find things inside src, an equivalent document for the sources of NetBSD.
1.28 jdf 71: Even if you're not fond with mdoc, researching this and gathering the information (e.g. in plain ASCII or markdown) would be a great benefit, and somebody who likes mdoc can then convert it to a system manpage.
1.29 jdf 72: *Tag*: research
73: *Tag*: overview
1.28 jdf 74:
1.29 jdf 75: * **Task: Howto: Update the system from binaries**: There is the new tool written in shell named sysupgrade (to be found in pkgsrc/sysutils/sysupgrade), which updates the system in binaries for you. Though it is nice, you may have reasons to not use it for an update (e.g. non-standard systems, or some components may not change).
76: This is why you should document the single tasks sysupgrade does (and why) and fill it with examples, in the end creating an howto which resembles the work done by sysupgrade.
1.28 jdf 77: [sysupgrade usage](http://www.netbsd.org/docs/guide/en/chap-upgrading.html)
1.30 jdf 78: *Tag*: howto
1.29 jdf 79: *Tag*: research
1.28 jdf 80:
1.29 jdf 81: * **Task: Howto: Install additional software in NetBSD**: With NetBSD, you have three major ways to install additional software: pkgsrc, pkg_add and pkgin.
1.28 jdf 82: Which one is to use for which use case, what are their benefits, their merits? Document them, and give a small introduction of the needed tools and their usage (package installation, package deletion, package information).
1.29 jdf 83: *Tag*: howto
1.30 jdf 84: *Tag*: system
1.29 jdf 85: *Tag*: service
1.28 jdf 86:
1.29 jdf 87: * **Task: Howto: Dual-boot NetBSD**: Having NetBSD not only as the single operating system, even if only for trying, is a common setup.
88: Of course you can dual-boot NetBSD with its internal bootloader as well as with grub and grub2.
1.28 jdf 89: These possibilities should be documented, and a howto how to dual-boot NetBSD should be created, for any scenario (NetBSD installed before main OS, and main OS installed before NetBSD).
1.29 jdf 90: *Tag*: howto
91: *Tag*: research
92: *Tag*: system
1.28 jdf 93:
1.29 jdf 94: * **Task: Howto: Encrypt the hard disk with NetBSD**: NetBSD has its very nice cryptographic device driver cgd. Apart from being already described in the [guide](http://netbsd.org/docs/guide/en/chap-cgd.html).
95: An explicit howto how to do this (in short) and how to do this during the installation, is the issue of this task.
1.28 jdf 96: Though cgd will be in sysinst for the next version of NetBSD, the current ones are still without, so there should be a special emphasis of how to add cgd during system installation.
1.29 jdf 97: *Tag*: howto
98: *Tag*: system
1.28 jdf 99:
1.29 jdf 100: * **Task: Howto: Running usermanagement with LDAP and Kerberos**: Having NetBSD being a server is a common setup. Additionally to all the LDAP and Kerberos setup tutorials in the web, an explicit tutorial how to use NetBSD as an LDAP and Kerberos server would be nice.
1.28 jdf 101: This means you shouldn't reproduce all the other tutorials about the gory internals, but rather describe what has to be done which is NetBSD-specific (which packages have to be installed, where their configuration files lie, etc.) and just a short chapter about what is needed for the rest, with a reference to the original OpenLDAP and Heimdal/MIT documentation.
1.29 jdf 102: *Tag*: howto
1.30 jdf 103: *Tag*: service
1.29 jdf 104: *Tag*: system
1.28 jdf 105:
1.29 jdf 106: * **Task: Howto: Running a webserver with Apache**: As well as the aforementioned task with OpenLDAP and Kerberos, a howto what to do with Apache in NetBSD would be good.
1.28 jdf 107: This should also include a reference to the already included bozohttpd, which may be suited better in some cases.
1.30 jdf 108: *Tag*: howto
109: *Tag*: service
1.29 jdf 110: *Tag*: system
1.28 jdf 111:
1.29 jdf 112: * **Task: Howto: Using LVM to manage your disks**: There is already a [chapter about the logical volume manager in NetBSD](http://netbsd.org/docs/guide/en/chap-lvm.html).
1.28 jdf 113: This task is about not having a whole chapter about it, but rather a small and comprehensive howto how you would manage logical volumes with NetBSD instead of reading through the whole chapter.
1.29 jdf 114: *Tag*: howto
115: *Tag*: system
1.28 jdf 116:
1.29 jdf 117: * **Task: Intro: Disk and partition management with NetBSD**: Additionally to the gpt and mbr confusion, NetBSD has two other systems that add complexity to disk management: Disk wedges (dk(4)) and Unix disklabels (disklabel(5)).
1.28 jdf 118: You should write an article that introduces the reader to these systems, how they interact, and what their use cases are.
1.29 jdf 119: *Tag*: howto
120: *Tag*: system
1.1 asau 121:
1.29 jdf 122: * **Task: Rewrite system configuration in the guide**: January this year, we got a [new configuration menu for the installer](http://mail-index.netbsd.org/tech-install/2012/01/23/msg000223.html)
123: The chapter in the guide about system configuration is still [the old one](http://netbsd.org/docs/guide/en/chap-exinst.html#exinst-system-configuration)
1.28 jdf 124: Your task is to rewrite this paragraph, add a new screenshot such that it fits the new configuration menu.
1.30 jdf 125: *Tag*: howto
1.29 jdf 126: *Tag*: ui
1.14 plunky 127:
1.29 jdf 128: * **Task: Convert articles from the website to wiki articles**: There are several articles on the website (like [this one](http://netbsd.org/docs/misc/index.html)) which should be converted to wiki articles.
129: On the way, you could separate obsolete articles from newer ones.
1.28 jdf 130: Though this work could also partially be done by a tool like pandoc, the articles on the website have different format: Sometimes docbook, sometimes html, sometimes a mix of them. And pandoc doesn't result in such good results as hand-conversion might do.
1.29 jdf 131: *Tag*: wiki
1.28 jdf 132:
1.29 jdf 133: * **Task: Convert the NetBSD Guide from DocBook to Markdown**: There are already tools to convert docbook to markdown (e.g. pandoc), so they have to be applied. The results have to be checked whether they are useful, and then every chapter should be a single wiki article, with one overview, such that the user optimally doesn't see the difference between the website and the wiki guide.
134: [The guide](http://www.netbsd.org/docs/guide/en/index.html), [the sources](http://cvsweb.netbsd.org/bsdweb.cgi/htdocs/docs/guide/).
135: *Tag*: wiki
1.28 jdf 136:
1.29 jdf 137: * **Task: Convert installation notes to markdown**: Currently, the [installation notes](http://ftp.netbsd.org/pub/NetBSD/NetBSD-5.1.2/i386/INSTALL.html) are constructed with mdoc from distrib/notes.
138: The task is to research whether it is possible to convert these articles to markdown, and, if possible, do so.
139: There might be many inclusions etc. to get the original structure, but even the result of *what* has to be done without the actual conversion would be neat.
1.30 jdf 140: *Tag*: wiki
1.29 jdf 141: *Tag*: man
1.28 jdf 142:
1.29 jdf 143: * **Task: Describe how to run NetBSD headless**: For any server usage, you want to use NetBSD without access to keyboard, mouse or monitor. For these usages, you want to have access via ssh (or something similar, document that) or serial console.
144: Your task is to describe the steps which are necessary to run a NetBSD system headless, i.e. printing boot messages to serial port, enabling the bootloader on serial, enabling the serial port, describing the possible options how to do so, which security measures should be taken.
145: You should also consider systems which don't even have a serial port, i.e. what has to be done if you cannot watch a device start, but you *must* go sure it will come up and you have some sort of access (like a router).
1.30 jdf 146: *Tag*: howto
1.29 jdf 147: *Tag*: system
149: * **Task: Describe how to use NetBSD as a bluetooth access point**: With bluetooth, you can easily connect your computer to a mobile phone and let the phone use the network connection of the computer.
150: Your task is to describe how to do this: Connecting NetBSD via bluetooth to your phone and then provide different services (especially file transfer and network connection).
1.30 jdf 151: *Tag*: howto
152: *Tag*: system
153: *Tag*: network
1.29 jdf 154: *Tag*: service
156: * **Task: Describe how to use NetBSD as an appliance**: NetBSD is often used for appliances, i.e. a small server serving only one single purpose. Though, there are no howtos describing how to set up a single appliance serving only one cause.
157: Though these howtos are targeted at creating a single appliance, they can also be used for other purposes.
158: Possible appliances would be:
159: * **router** - NetBSD is very well suited for router appliances and often used for that. There is a special task which is about creating a howto how to configure npf and comparing the different firewall solutions NetBSD offers. This task would rather be about everything around, like the routing part, securing the machine, network management (e.g. for wireless access points), and maybe only one example configuration for the firewall (especially NATting). A good example for an existing appliance is pfSense
160: * **file server** - NetBSD is also excellent as a file server, may it be either with nfs, smb, http, ftp or ftp over ssh as the transfer protocol. Your task would be to describe the packages which exist in pkgsrc and in NetBSD's base, and choose one special scenario for each protocol and give example configurations of the services. You should also mention RAIDframe, lvm and cgd briefly and what their use cases are. A good example for an existing appliance is FreeNAS or Apple Time Capsule (already running NetBSD).
161: Every howto for an appliance is considered a single task.
162: * **backup server** - though somewhat similar to a file server, a backup server has different requirements. On the one hand, you have to think about how to connect effectively for backups, e.g. with rsync or other special backup protocols. On the other hand, you have to take special care for data integrity and data security. You should also take file system snapshots into account.
1.30 jdf 163:
1.29 jdf 164: As a special task, you could also create a shell script that fulfills the steps you mentioned in your howto, such that the user only has to execute this script to get an appliance. The prerequisite is only for this task.
165: If you can think of more possible appliances, maybe you can also use this as a task. If you want to work on a larger project (i.e. providing a whole derivate with one of these tasks), just tell us.
166: *Prerequisites*: sh
167: *Tag*: howto
168: *Tag*: research
1.30 jdf 169: *Tag*: service
170: *Tag*: system
1.29 jdf 171: *Tag*: network
173: * **Task: Describe how to backup NetBSD**: Though NetBSD is much like other Unixes in this respect, backup is still something you should consider specially for every operating system. Which tools are available in the base distribution for backupping, like dump(8) and restore(8)?
174: Which one suits better, pax(1), dump(8) or even just rsync or other special backup solutions? What are their use cases?
175: What is a full, a differential, an incremental backup? What is the estimated space usage of them, depending on the backups?
176: How would you restore your system after a crash, which steps have to be taken to get a working system again?
177: After reading the resulting article, the reader should be able to decide for a backup scheme and solution and implement it without further research.
1.30 jdf 178: *Tag*: howto
179: *Tag*: system
1.29 jdf 180: *Tag*: research
182: * **Task: Describe how to create a NetBSD live flash drive**: Flash drives become increasingly the source for operating system installations.
183: Though, you might want to try the operating system first by using a live system.
184: In this task you should create a live USB flash drive from NetBSD. You can use Jibbed or the installation USB flash drive images as an example how to do this.
185: In the end, there should be a howto which steps have to be taken to enable NetBSD to boot from a flash drive.
1.30 jdf 186: *Tag*: howto
187: *Tag*: research
1.29 jdf 188: *Tag*: system
190: * **Task: Describe how to become a voip provider**: Sip is a protocol used for VoIP communications.
191: NetBSD was sometimes tried as a VoIP server, but there has been no howto yet how to do this.
192: So, install an Asterisk or FreeSwitch or something else like that and describe how to use NetBSD as a VoIP server.
1.30 jdf 193: *Tag*: howto
1.29 jdf 194: *Tag*: service
1.28 jdf 195:
1.29 jdf 197: ### Outreach/Research
1.28 jdf 198:
1.29 jdf 199: * **Task: Howto: Getting in touch with NetBSD**: If you have a problem, there are several ways to get in touch with NetBSD people: BSD user groups, mailing lists, IRC, problem reports... Which one is the best for which issue?
200: Document the single methods for contacting others and categorize them by the task they're useful for.
201: *Tag*: howto
1.30 jdf 202: *Tag*: research
1.29 jdf 203: *Tag*: overview
1.28 jdf 204:
1.29 jdf 205: * **Task: Compare init systems with each other**: Additional to the historical ones (SysV and BSD), systemd recently added another init system to the Unix world.
206: An objective comparison of these three systems (if there are other major ones, add them, maybe upstart?) would be nice. Not in the sense of showing their features side-by-side, but simply describing how they work and how you do things yourself.
207: In the end, you should have created a small article that enables anyone using one of these systems to switch to the other one just by reading this article.
208: *Tag*: comparison
1.30 jdf 209: *Tag*: research
1.29 jdf 210: *Tag*: system
1.28 jdf 211:
1.29 jdf 212: * **Task: Investigate and document Markdown to PDF and text conversion**: Propose a method for converting NetBSD Guide Markdown pages into PDF and text, so that they can be delivered with releases. Note the information (description, source location, home page, build method) so that a pkgsrc package (or packages) can be built using the proposed tools (the tools chosen must be compilable for NetBSD, and other free Unix-like systems).
213: *Tag*: research
214: *Tag*: overview
1.28 jdf 215:
1.29 jdf 216: * **Task: Compare NetBSD with other operating systems of its kind**: NetBSD is an operating system which targets people who like the cleanness of a system, and mostly already have Unix or Linux experience.
217: As such, there are other operating systems which fall into the same audience as NetBSD does, which are at least Slackware, Arch Linux, Gentoo, OpenBSD, FreeBSD, DragonFly.
218: This task is about researching what other distros are out there which are close to NetBSD's principles and use cases (distrowatch.org might be a good starting point), and how they are different.
219: After having collected facts, maybe a simple overview of the community (what kind of people are there, what do they want?), you should create an article which lists all those and describes their differences to NetBSD.
1.28 jdf 220: You could also try interviewing some people what their view of the communities and the operating systems is and try to evolve your own opinion about them all.
1.29 jdf 221: *Tag*: comparison
222: *Tag*: research
223: *Tag*: system
224: *Tag*: overview
226: * **Task: Analyze NetBSD's users**: NetBSD is a very universal operating system. Some people run it on their 20 years old VAXen, others on their recent desktop computer or server, or on their tiny ARM box as a router.
227: As the aforementioned task (which is rather about the others out there), this task is about doing an in-depth analyzation of NetBSD itself. What kind of users and what kind of developers are out there? Look at the mailing lists to get an impression about the community and the developers and what their goals are.
228: This task is also about thinking about some statistical methods you could use. What data is available you could easily analyze, what are the metrics? Do other distributions have the same data available, so you could eventually run these statistics on other operating systems?
229: This task does not have to be about analyzation, but could also be simply the research how you could do this, which statistical methods. Maybe the student is not able to do the actual computation because of a lack of sources and computing power.
1.28 jdf 230: Besides being a gci task, thinking about these statistics, you could also create a nice website analyzing distributions based on statistical methods.
1.29 jdf 231: *Tag*: research
1.30 jdf 232: *Tag*: comparison
233: *Tag*: system
1.29 jdf 234: *Tag*: overview
1.21 asau 235:
1.29 jdf 236: * **Task: Compare firewall solutions in NetBSD**: NetBSD has several firewall solutions on board: ipf, npf, pf, even more (you should research that).
237: For the beginner, it is not clear what they are capable of, how fast they are and what their syntaxes look like.
238: In this task you should research the differences of these firewalls, create some examples that do the same (so you can view them side-by-side) and provide links to further documentation.
239: *Tag*: comparison
1.30 jdf 240: *Tag*: network
1.29 jdf 241: *Tag*: research
1.2 asau 242:
1.21 asau 243:
1.28 jdf 244: ### Quality Assurance
1.21 asau 245:
1.29 jdf 246: * **Task: Document integrated tools in NetBSD**: Apart from the famous web server and ftp server choices, there are smaller ones already integrated to NetBSD, as well as other smaller tools a user should know.
247: The goal is to create a comprehensive (!) list of full software packages that are already included in the base distribution.
248: In the document src/doc/3RDPARTY there is already a list of imported software, but there are more tools which are NetBSD-inherent themselves or contained in a larger package that is just listed as a whole there.
249: *Tag*: overview
250: *Tag*: research
1.21 asau 251:
1.29 jdf 252: * **Task: Try out various desktop scenarios, report errors**: Modern desktop environments like Xfce, KDE, Gnome or LXDE are mostly written for Linux. As such, it is important to try them on NetBSD and report their errors. Plus, checking the ease of installation via pkgsrc - which packages have to be installed, how intuitive is their name, their installation? Everything should be as easy as possible.
253: This task also refers to the task of creating a tutorial - maybe doing this first, and then creating the tutorial would be nice. The tutorial could either be updated on the fly when the reported bugs are corrected, or will be held back until the process is as easy as it should be.
254: This also includes bug-checking for light-deskop, the preferred package for a NetBSD desktop.
255: *Tag*: ui
256: *Tag*: research
258: * **Task: Make NetBSD a music or video player**: NetBSD could as well serve as a music (mpd) or video player. You have to research which packages are needed for such a use case, and document it in a tutorial.
259: Ideally, create a pkgsrc meta package including all the dependencies.
260: Report bugs you find on the way.
1.30 jdf 261: *Tag*: ui
1.29 jdf 262: *Tag*: research
264: * **Task: Create ATF tests**: [[atf]] is the automatic test framework for NetBSD. We strive to have automatic tests for all the important parts of our system: libraries, syscalls, binaries, etc.
265: Your task is to write such tests. You should read the [[tutorial|atf]] about how to write an atf test, and then you can start testing things.
266: As testing is an endless task, here are just a few ideas about which items could be tested:
267: * [[!template id=man name="atomic_ops" section="3"]]
268: * [[!template id=man name="cdbr" section="3"]] and [[!template id=man name="cdbw" section="3"]]
269: * [[!template id=man name="inet" section="3"]] and [[!template id=man name="inet_net" section="3"]]
270: * [[!template id=man name="ethers" section="3"]], [[!template id=man name="iso_addr" section="3"]] and [[!template id=man name="link_addr" section="3"]]
271: * [[!template id=man name="strtol" section="3"]], [[!template id=man name="strtoul" section="3"]] and [[!template id=man name="strtoull" section="3"]]
272: * [[!template id=man name="uuid" section="3"]]
1.30 jdf 273:
1.29 jdf 274: Every *single written test* is considered as **one task**. If you think there is another test that should be added, but is not listed here, feel free to contact us.
275: The tests should be written in either C or sh.
276: *Prerequisites*: sh or C
277: *Tag*: man
278: *Tag*: research
280: * **Task: Describe how NetBSD boots**: Build NetBSD on any system (especially non-NetBSD) and try to create a bootable medium without using makefs(8) or integrated wrappers.
281: Creating a bootable disk is possible, but difficult and there is no comprehensive information about this. You have to try much until you get the real results.
282: The affected tools are
283: * fdisk(8)
284: * installboot(8)
285: * disklabel(8)
286: * gpt(8)
1.31 jdf 287:
1.29 jdf 288: In the end of this task, a small howto and some corrections for the manpages of the affected tools should be there.
1.30 jdf 289: *Tag*: system
1.29 jdf 290: *Tag*: howto
292: * **Task: Describe how to boot NetBSD on a gpt disk**: Currently, NetBSD supports booting from a gpt partition, but you cannot know how.
293: This task is about creating documentation how to use the tool gpt(8) and maybe installboot(8) how to create GPT labels, how they interact with MBRs as created by fdisk(8), how wedges work on this, and how you would make it bootable.
294: You should also describe which problems you have and what people might edge on when trying to create a gpt-bootable disk.
295: *Tag*: howto
296: *Tag*: system
1.1 asau 297:
1.29 jdf 298: * **Task: Howto: Configure npf**: The new NetBSD packet filter npf is a nice and well-scaling way to configure a firewall. Despite being there and functional, it does not have much documentation.
299: The manpage of npf.conf(5) gives an introduction, but nothing that could be used as a howto: [npf.conf(5)](http://netbsd.gw.com/cgi-bin/man-cgi?npf.conf+5+NetBSD-current).
300: The howto should contain a step-by-step introduction about how npf works, but also an introduction to the technics of npf itself: What kind of rules and tables are there, how they are applied, etc.
1.33 ! jdf 301: There is already a [howto by rmind](http://www.netbsd.org/~rmind/pub/npf_manual_netbsd_6.pdf), this would have to be converted and checked against errors, and extended.
1.29 jdf 302: *Tag*: howto
303: *Tag*: network
1.5 asau 304:
1.1 asau 305:
1.29 jdf 306: ### Code
1.5 asau 307:
1.29 jdf 308: * **Task: Document different time structures**: We have several time structures like `time_t`, `struct timespec`, `struct timeval`, `struct tm` and so on. Document all of them as a time(5) manpage such that a programmer can see all of them at once, in comparison. As we have time zone sensitive and time zone independent representations, figuring out conversions between local time and UTC from manual pages is hard and should also be documented in that manpage.
1.32 jdf 309: *Prerequisites*: C coding skills (just reading)
1.30 jdf 310: *Tag*: man
1.29 jdf 311: *Tag*: system
1.1 asau 312:
1.29 jdf 313: * **Task: Add an web interface to apropos**: Last year's Google Summer Of Code project was creating a new apropos(1). Though the current version already has a web interface, adding CSS and appropriate HTML to the web interface would be nice to integrate it to other websites.
314: Though the source code is written in C, C knowledge is not necessary. You just have to extract the HTML and pseudo-understand what the code around it does, i.e. in which cases the single actions are taken.
315: The file which would be modified is [apropos-utils.c](https://github.com/abhinav-upadhyay/apropos_replacement/tree/cgi).
1.32 jdf 316: *Prerequisites*: C CSS HTML
1.30 jdf 317: *Tag*: ui
1.29 jdf 318: *Tag*: graphics
1.1 asau 319:
1.29 jdf 320: * **Task: Create a pkgsrc package to get the wiki offline**: The NetBSD wiki can be fetched via cvs or rsync. As it is going to be filled up with information, you might want to have it offline.
321: The goal of this task is to create a pkgsrc package which depends on the tools necessary for offline-viewing of the wiki (this could also be just the integrated if you consider Markdown readable enough) and fetches the wiki.
322: All in all a simple package with few dependencies if any and one or two wrapper scripts.
1.31 jdf 323: *Prerequisites*: C or sh
1.30 jdf 324: *Tag*: wiki
1.29 jdf 325: *Tag*: research
1.32 jdf 327: * **Task: Describe all MK* variables**: Describe all the MK variables and how they affect the builds.
1.29 jdf 328: Suggest improvements or removal.
329: *Tag*: research
331: * **Task: Write apropos branch to search through markdown**: apropos(1) is a last summer's Google Summer Of Code project implemented in NetBSD. It allows a relevance-based search through manpages.
332: As maybe Markdown is going to be in the source tree, we want to extend apropos to also be able to search through Markdown articles.
333: Your task would be to research the possibility of creating another binary that is able to search through markdown pages, creating its own index file (mandb).
334: If you are having fun with this, thinking about ways how to combine the two binaries into one single documentation search binary would be good.
1.33 ! jdf 335: [Mail announcint import of apropos](http://mail-index.netbsd.org/tech-userlevel/2012/02/01/msg006040.html)
1.29 jdf 336: *Prerequisites*: C
337: *Tag*: research
338: *Tag*: man
340: * **Task: Write a markdown browser**: Markdown is the most widespread cleartext markup language, also used in the NetBSD wiki. Though it is already very well readable, some markups used are not as good and it would be nice to have them applicable directly. Looking at Markdown-rendered HTML is also not an option as it has too much overhead.
341: This project is about researching the possibility of writing a Markdown browser for the shell. This should not be much work and most probably work.
342: Then, you have to think about a user interface. You want to view a text (scrollable), but also offer the possibility of having links and opening new files, including a small "browser history".
343: Considered as a second task, you could write a reference implementation for this browser. For the finished browser, we would need either an sh implementation if this is not too difficult or error-prone, or a C implementation. But for this project, you can take any language you want, sh and C just would be the preferred way.
344: This project is intended to be included in pkgsrc, in the long run maybe in src. Anyway, it would be a very nice project for the whole developer community in the long run.
345: The prerequisites are only for the coding part.
1.33 ! jdf 346: [libsoldout, a public-domain Markdown implementation in C](http://fossil.instinctive.eu/libsoldout/index)
1.32 jdf 347: *Prerequisites*: C or sh
1.29 jdf 348: *Tag*: research
349: *Tag*: wiki
1.2 asau 350:
1.33 ! jdf 351: * **Task: Write a Markdown - PDF (or Latex) converter**: This task is not strictly for NetBSD, but another project named [libsoldout](http://fossil.instinctive.eu/libsoldout). libsoldout is a markdown converter written in C and published under public domain.
! 352: Though there are already other tools which would do this task, they either have a licence that is not usable by NetBSD or have too many dependencies (like pandoc).
! 353: Your task is to write a converter from Markdown to Latex (or PDF, which might be a fairly large task), which is just specifying some tags you use for inserting and putting it in C code.
! 354: You can take the [html](http://fossil.instinctive.eu/libsoldout/artifact/fd100c723c722189d62fd9bf261d67db69240043) or the [mdoc](http://fossil.instinctive.eu/libsoldout/artifact/1e22b7962dfba92c28f4916609746045dbe29a90) converter as a template for this. Though this task seems large, the task itself is rather small. You have to analyze the converters for mdoc and html and replace their tags by the appropriate Latex ones.
! 355: If you're not as good with Latex, feel free to ask for the tags that are to replace.
! 356: *Prerequisites*: C Latex
! 357: *Tag*: research
! 358: *Tag*: wiki
! 359: *Tag*: ui
1.1 asau 360:
1.29 jdf 361: ### User Interface
1.1 asau 362:
1.29 jdf 363: * **Task: Create NetBSD wallpapers**: Currently, there are nearly no NetBSD wallpapers. The combination of beastie, the flag and the old logo (daemons on old computers), plus the very smooth NetBSD colours (orange, grey, white) should be a resource for nice wallpapers.
364: If you're fine with drawing on a computer or graphical programs (like The Gimp or Photoshop), this might be a nice and very creative task for you.
365: *Tag*: graphics
1.4 asau 366:
1.29 jdf 367: * **Task: Create an icon set for NetBSD - research**: To provide a nice graphical user interface, as well as prettifying the wiki and the website, having some buttons and icons would be nice.
368: This task is about gathering and writing down what sizes are useful, and what kinds of icons are needed (and what they could be used for).
369: *Tag*: research
370: *Tag*: ui
1.4 asau 371:
1.29 jdf 372: * **Task: Create an icon set for NetBSD - graphics**: In addition to the previous task, creating those icons is still needed. You would have to think about an artwork concept, how these icons should look overall and creating the single icons that are specified.
373: This task could be fulfilled multiple times, and if you succeed well, it would be nice if we could stay in touch with you about this in the future (like adding further graphics).
374: *Tag*: graphics
375: *Tag*: ui
1.17 asau 376:
1.29 jdf 377: * **Task: Create smaller NetBSD artwork**: NetBSD does not have much artwork. Except from the aforementioned wallpapers and icons sets, multiple smaller artworks would be nice as well.
378: This includes drawing comics, creating a CD label, the image of a flash drive with NetBSD on it or e.g. a Beastie with a NetBSD flash drive, such things.
379: If you want to do this task, even if you don't know what to do, just contact us. We can tell you some ideas what to do, and if you already have one, approve it is suited for us.
380: *Tag*: graphics
1.9 plunky 381:
1.32 jdf 382: * **Task: Create NetBSD slide templates (Latex)**: NetBSD developers often hold presentations on conferences like the EuroBSDCon, BSDCan, etc.
1.33 ! jdf 383: For all these occassions, people are using the [Latex typesetting system](http://de.wikipedia.org/wiki/Latex) beamer package, but using their own templates or the standard template.
1.32 jdf 384: Your task would be to create a template that can be downloaded, included and then simply used such that NetBSD presentations have a NetBSD branding.
385: This task is also a great chance to get used to the Latex package beamer or to Latex at all, it is usable for any presentations in school or university. So don't hesitate if you don't fulfill the prerequisite, if you want to learn, you can relatively fast do it and then complete this task.
386: *Prerequisite*: Latex
1.33 ! jdf 387: *Tag*: graphics
! 388: *Tag*: ui
! 390: * **Task: Create a NetBSD book layout**: NetBSD has several articles that could and are converted to PDF. While the final conversion and its methods is another task, having a nice book layout is necessary.
! 391: In this task, you have to research the different styles a NetBSD article would need (i.e., code blocks, other blockquotes, special quotes for commands, for manpages, etc.) and everything around like a front page, the font, etc.
! 392: You can deliver the specification either as a Latex style or exactly written with some example images.
! 393: *Tag*: graphics
1.32 jdf 394: *Tag*: ui
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb