Diff for /wikisrc/projects/code-in.mdwn between versions 1.34 and 1.35

version 1.34, 2012/10/21 10:15:41 version 1.35, 2012/10/22 11:01:14
Line 7  All the tasks should be completable with Line 7  All the tasks should be completable with
   
 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.  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.
   
   We will provide a [Virtualbox](https://www.virtualbox.org/) image for testing, such that you don't have to spend time on installing the system when you want to complete a task where you need NetBSD running.
   
 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/)  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/)
   
 Previous organizations accepted for Code-In: [Code-In 2010](http://www.google-melange.com/gci/accepted_orgs/google/gci2010) [Code-In 2011](http://www.google-melange.com/gci/accepted_orgs/google/gci2011)  Previous organizations accepted for Code-In: [Code-In 2010](http://www.google-melange.com/gci/accepted_orgs/google/gci2010) [Code-In 2011](http://www.google-melange.com/gci/accepted_orgs/google/gci2011)
   
   There is [information from Google](http://code.google.com/p/google-code-in/wiki/GCIMentorInformation2012) about what is suitable as a task for Code-In.
   The most important part is to make the task easy enough: It should take approximately two hours of an experienced contributor to complete a single task. There are no difficulties, all tasks should approximately have the same difficulty.
   
 ## Goals as stated by Google  ## Goals as stated by Google
 1. **Code**: Tasks related to writing or refactoring code  1. **Code**: Tasks related to writing or refactoring code
 1. **Documentation/Training**: Tasks related to creating/editing documents and helping others learn more  1. **Documentation/Training**: Tasks related to creating/editing documents and helping others learn more
Line 53  For all the tasks involving prerequisite Line 58  For all the tasks involving prerequisite
   *Tag*: overview    *Tag*: overview
   
 * **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.    * **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.  
   But how do you do so?    But how do you do so?  
   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.      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.  
   The package light-desktop should be stressed in this documentation.      The package light-desktop should be stressed in this documentation.  
   *Tag*: ui      *Tag*: ui  
Line 120  For all the tasks involving prerequisite Line 125  For all the tasks involving prerequisite
   
 * **Task: Howto: Protecting your system with veriexec**: There already is [a chapter in the Guide](http://netbsd.org/docs/guide/en/chap-veriexec.html) about veriexec, but there is no comprehensive guide how to activate it and how to check in all files in the distribution (there is [veriexecgen(8)](http://netbsd.gw.com/cgi-bin/man-cgi?veriexecgen++NetBSD-current) for this.    * **Task: Howto: Protecting your system with veriexec**: There already is [a chapter in the Guide](http://netbsd.org/docs/guide/en/chap-veriexec.html) about veriexec, but there is no comprehensive guide how to activate it and how to check in all files in the distribution (there is [veriexecgen(8)](http://netbsd.gw.com/cgi-bin/man-cgi?veriexecgen++NetBSD-current) for this.  
   Your task is to write a howto describing evrything a user needs to know and needs to do to have a secure system with veriexec.      Your task is to write a howto describing evrything a user needs to know and needs to do to have a secure system with veriexec.  
   *Tag*: howto    *Tag*: howto  
   *Tag*: system    *Tag*: system
   
 * **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)).    * **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)).  
Line 128  For all the tasks involving prerequisite Line 133  For all the tasks involving prerequisite
   *Tag*: howto      *Tag*: howto  
   *Tag*: system    *Tag*: system
   
 * **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)  * **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).
   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)    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).
   Your task is to rewrite this paragraph, add a new screenshot such that it fits the new configuration menu.      Your task is to rewrite this paragraph, add a new screenshot such that it fits the new configuration menu.  
   *Tag*: howto      *Tag*: howto  
   *Tag*: ui    *Tag*: ui
Line 218  For all the tasks involving prerequisite Line 223  For all the tasks involving prerequisite
   *Tag*: research      *Tag*: research  
   *Tag*: system    *Tag*: system
   
 * **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).    * **Task: Investigate necessary documentation markup**: To choose the right markup language for documentation, you need a clear and comprehensive list of needed markup. While formats like Docbook or Latex support nearly everything, languages like Markdown or RestructuredText are more limited and have different dialects.  
     Your task is to investigate which formats are needed for documentation (links, blockquotes for code, tables, monospace font, headlines in different sizes, etc.) and specify those.  
     Formats like Docbook and mdoc are also providing semantical information, i.e. though they may display everything the same, e.g. the document knows whether a given monospace font written object is a filename, a command name, a function call, etc. Thus you also have to investigate whether these formats are used, and if their usage makes sense.  
     In the end, you should provide a table of needed markup formats and of currently used semantical content of manpages, and whether they are in use somewhere.  
   *Tag*: research      *Tag*: research  
   *Tag*: overview    *Tag*: overview
   
Line 232  For all the tasks involving prerequisite Line 240  For all the tasks involving prerequisite
   *Tag*: system      *Tag*: system  
   *Tag*: overview    *Tag*: overview
   
 * **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.    * **Task: Analyze NetBSD's users - research**: 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.  
   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.      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, the IRC and the bug reports to get an impression about the community and the developers and what their goals are.  
   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?      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?  
   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.      This task is not about the actual analysis, but only about the methods and measures.  
   Besides being a gci task, thinking about these statistics, you could also create a nice website analyzing distributions based on statistical methods.      In the end, you should create a small paper (about two pages) describing the methods you use, the sources and their reasonation and usefulness.  
     Besides being a gci task, thinking about these statistics, you could also create a nice website analyzing all kinds of distributions based on statistical methods.  
     *Tag*: research  
     *Tag*: comparison  
     *Tag*: overview
   
   * **Followup Task: Analyze NetBSD's users - statistics**: This task is about applying the statistics you developed in the task before.  
     You have to write some small tools or scripts that do the analysis you developed before, and then you have to write a two-paged paper about the results, the problems you actually faced when trying to do this task, but no interpretation.  
     If you don't have the computing power or the resources to do the actual analysis, we can help you with that.  
     *Tag*: research  
     *Tag*: comparison  
     *Tag*: overview
   
   * **Followup Task: analyze NetBSD's users - interpretation**: Finally, you have to interpret the results you got from before. As you were researching texts which people were writing personally, depending on their mood and ideas, you will be biased by the impressions you got.  
     Now, you have to compare these impressions with your results. What are the right impressions, which are not? What is the overall image you should get from the NetBSD community after doing these tasks?  
     You should write at least two pages of interpretation.  
     *Tag*: research  
     *Tag*: comparison  
     *Tag*: overview
   
   * **Task: Analyze NetBSD's focus (in source files) - research**: As the foregoing task, you have to research statistical methods to find places where NetBSD has much effort in. There are already tools and methods to do this, but we want you to actually analyze the semantical focus of NetBSD.  
     What is being most worked on (and in which timescale), comparing kernel to userland, comparing the effort, the lines of code, the frequency of commits, comparing the several subsystems of the kernel, etc. You should also look at bug reports for specific subsystems, and the responsiveness of the people fixing those bugs.   
     You should look at the ports of the NetBSD CVS repository to fossil and git to run your methods locally.  
     You should again write a reasonation about what you differentiate, which methods you use and your results, defending them.  
     *Tag*: research  
     *Tag*: comparison  
     *Tag*: overview
   
   * **Followup Task: Analyze NetBSD's focus (in source files) - statistics**: This task is about applying the methods you developed in the task before.  
     You should download the ports of the CVS repository to git or fossil ([see here](ftp://ftp.netbsd.org/NetBSD/misc/repositories/)) and develop scripts to run the analysis.  
     In the end, you should present your results (without interpretation) and defend them in a small two-paged paper.  
     *Tag*: research  
     *Tag*: comparison  
     *Tag*: overview
   
   * **Followup Task: Analyze NetBSD's focus (in source files) - interpretation**: Before, you were occupied with developing statistical methods and applying them.  
     But the most important part about statistics is its interpretation - without, everybody will see only the results he likes himself.  
     So you have to interpret the results you got before, comparing them with the overall image NetBSD usually has (see also the statistics task about NetBSD's users) and comparing it with the reality. Where do you see possible improvements, which parts of the source are not cared for enough, which are?  
     Write this down in a paper at least two pages long.  
     *Tag*: research  
     *Tag*: comparison  
     *Tag*: overview
   
   * **Task: Analyze NetBSD documentation's focus - research**: This is again a statistical task.  
     You have to investigate methods to analyze the various sources of NetBSD documentation (see the foregoing task, "Create an overview of NetBSD documentation"), and categorize them. Then, you have to measure somehow their content (note that this is not possible by just counting lines or words, as e.g. technical descriptions and tables have much more words in them than rather prosaic documentation).  
     As with the others, you are expected to write a two-paged paper about your used methods and sources, defending their usefulness.  
     *Tag*: research  
     *Tag*: comparison  
     *Tag*: overview
   
   * **Followup Task: Analyze NetBSD documentation's focus - statistics**: This task is about applying the methods developed before.  
     You should write scripts to actually do the analysis you proposed before, and afterwards writing down your results in a two-paged paper.  
     *Tag*: research  
     *Tag*: comparison  
     *Tag*: overview
   
   * **Followup Task: Analyze NetBSD documentation's focus - interpretation**: In this task, you have to do the final goal of the research before: The interpretation.  
     Based on the results you got before, you should write down your personal interpretation of what you got. You should also mix these results together with the overall impression you got when doing Code-In things, or what you heard about NetBSD at all and what you did with other operating systems.  
     A two-paged paper would be the goal, but if you have more ideas, don't try to fit them into two pages.  
   *Tag*: research      *Tag*: research  
   *Tag*: comparison      *Tag*: comparison  
   *Tag*: system    
   *Tag*: overview    *Tag*: overview
   
 * **Task: Compare firewall solutions in NetBSD**: NetBSD has several firewall solutions on board: ipf, npf, pf, even more (you should research that).    * **Task: Compare firewall solutions in NetBSD**: NetBSD has several firewall solutions on board: ipf, npf, pf, even more (you should research that).  
Line 249  For all the tasks involving prerequisite Line 314  For all the tasks involving prerequisite
   *Tag*: network      *Tag*: network  
   *Tag*: research    *Tag*: research
   
   * **Task: Research terminfo(5) keycodes**: terminfo(5) is a library to describe the capabilities of a terminal.  
     As such, it also has a code for all the special function keys that are on a keyboard. The new terminfo(5) manpage lists all these keys, but not their function. You have to research what the single keys do and insert the description into the list.  
     This bug has also been reported as "lib/47090 - terminfo(5) lacks descriptions for key definitions".  
     *Tag*: research  
     *Tag*: man
   
   
 ### Quality Assurance  ### Quality Assurance
   
Line 270  For all the tasks involving prerequisite Line 341  For all the tasks involving prerequisite
   *Tag*: ui      *Tag*: ui  
   *Tag*: research    *Tag*: research
   
 * **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.    
   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.    
   As testing is an endless task, here are just a few ideas about which items could be tested:  
   * [[!template id=man name="atomic_ops" 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="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"]]  
   
   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.    
   The tests should be written in either C or sh.    
   *Prerequisites*: sh or C    
   *Tag*: man    
   *Tag*: research  
   
 * **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.    * **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.  
   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.      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.  
Line 300  For all the tasks involving prerequisite Line 356  For all the tasks involving prerequisite
   
 * **Task: Describe how to boot NetBSD on a gpt disk**: Currently, NetBSD supports booting from a gpt partition, but you cannot know how.    * **Task: Describe how to boot NetBSD on a gpt disk**: Currently, NetBSD supports booting from a gpt partition, but you cannot know how.  
   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.      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.  
   You should also describe which problems you have and what people might edge on when trying to create a gpt-bootable disk.    You should also describe which problems you have and what people might edge on when trying to create a gpt-bootable disk.  
   *Tag*: howto      *Tag*: howto  
   *Tag*: system    *Tag*: system
   
Line 311  For all the tasks involving prerequisite Line 367  For all the tasks involving prerequisite
   *Tag*: howto      *Tag*: howto  
   *Tag*: network    *Tag*: network
   
   * **Task: Using the framebuffer in NetBSD**: NetBSD has a framebuffer, but until now, it is not much used. The framebuffer can be used for showing nice fonts and resolutions in the console, to show a spashscreen while booting, etc., but there is no documentation.  
     The genfb(4) and wsdisplay(4) manpages are a good start with this.  
     Your task is to try using the framebuffer, document what you are doing and why, and report what is missing and where you have no idea how to go on.  
     *Tag*: ui
     *Tag*: system
   
   * **Task: Research and write a Markdown style guide**: NetBSD is using Markdown for its wiki. To have a unified format of wiki pages, it would be nice if we had a style guide.  
     Your task is to research whether other projects which are using Markdown have a style guide, and what it implies. You should also research the other style guides of NetBSD (for the website and for source), and then deduce a style guide for the NetBSD wiki for this.  
     *Tag*: research  
     *Tag*: ui
   
   * **Task: Research POSIX compliance**: POSIX is the (more or less) standard all Unixes orient on. It describes libraries to use as well as binaries every Unix should have (like cp, mv) and their behaviour.
     You can find the standard on the Internet. Your task is to look for any non-trivial manpage (i.e., more than a few options) and research whether the NetBSD behaviour of this tool or library conforms to POSIX or not.  
     You should then insert this part into a list and document whether it complies to POSIX and if not, which differences are there.  
     As it is hard to determine the difficulty of a single part of the standard, this will be measured in lines. For every 1000 lines of the NetBSD versions of the manpages, this is one task.  
     The prerequisite is only for looking at libraries.  
     *Prerequisite*: C (reading)  
     *Tag*: research
   
   
 ### Code  ### Code
   
   * **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.  
     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.  
     As testing is an endless task, here are just a few ideas about which items could be tested:
     * [[!template id=man name="atomic_ops" 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="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"]]
   
     Though this task is originally rather considered quality assurance, the actual test writing is only coding work (whether the test succeeds or not, is up to the original author of the library or tool).  
     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.  
     The tests should be written in either C or sh, depending on the test subject.  
     *Prerequisites*: sh or C  
     *Tag*: man  
     *Tag*: research
   
 * **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.    * **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.  
   *Prerequisites*: C coding skills (just reading)      *Prerequisites*: C (just reading)  
   *Tag*: man      *Tag*: man  
   *Tag*: system    *Tag*: system
   
Line 326  For all the tasks involving prerequisite Line 418  For all the tasks involving prerequisite
   *Tag*: ui      *Tag*: ui  
   *Tag*: graphics    *Tag*: graphics
   
 * **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.    * **Task: Write apropos branch to search through Markdown documentation**: apropos(1) is a last summer's Google Summer Of Code project implemented in NetBSD. It allows a relevance-based search through manpages written in mdoc.  
   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.      As maybe Markdown is going to be in the source tree, we want to extend apropos to also be able to search through generic documentation articles.  
   All in all a simple package with few dependencies if any and one or two wrapper scripts.      Your task would be to research the possibility of creating another binary that is able to search through markdown documentation pages, creating its own index file (mandb).  
   *Prerequisites*: C or sh    
   *Tag*: wiki    
   *Tag*: research  
   
 * **Task: Describe all MK* variables**: Describe all the MK variables and how they affect the builds.    
   Suggest improvements or removal.    
   *Tag*: research  
   
 * **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.    
   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.    
   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).    
   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.      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.  
   [Mail announcint import of apropos](http://mail-index.netbsd.org/tech-userlevel/2012/02/01/msg006040.html)      [Mail announcint import of apropos](http://mail-index.netbsd.org/tech-userlevel/2012/02/01/msg006040.html)  
   *Prerequisites*: C      *Prerequisites*: C  
   *Tag*: research      *Tag*: research  
   *Tag*: man    *Tag*: man
   
 * **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.    * **Task: Write a Markdown - 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.
   This project is about researching the possibility of writing a Markdown browser for the shell and if it is possible, provide a structure such that somebody else could pick up the work and start coding it. This should not be much work and most probably work.    
   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".    
   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.    
   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.    
   The prerequisites are only for the coding part.    
   [libsoldout, a public-domain Markdown implementation in C](http://fossil.instinctive.eu/libsoldout/index)    
   *Prerequisites*: C or sh    
   *Tag*: research    
   *Tag*: wiki    
   
 * **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.  
   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).      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).  
   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.      Your task is to write a converter from Markdown to Latex (or PDF, which might be a fairly large task and not suited for Code-In), which is just specifying some tags you use for inserting and putting it in C code.  
   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.      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.  
   If you're not as good with Latex, feel free to ask for the tags that are to replace.      If you're not as good with Latex, feel free to ask for the tags that are to replace. Latex is not a strict prerequisite!  
   *Prerequisites*: C Latex      *Prerequisites*: C Latex  
   *Tag*: research    *Tag*: research  
   *Tag*: wiki    *Tag*: wiki  
   *Tag*: ui    *Tag*: ui
   
   * **Followup task: Create NetBSD slide templates (Latex)**: Many people are used to using the [Latex typesetting system](http://de.wikipedia.org/wiki/Latex) beamer package for presentations instead of OpenOffice.  
     Thus, you should convert the OpenOffice template created in the according User Interface task to a Latex template.  
     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.  
     *Prerequisite*: Latex  
     *Tag*: graphics
   
   * **Task: Fix bug install/17792**: The problem in this bug report is clear: The function get_and_unpack_sets() in util.c calls the menu MENU_distmedium as long as the status is set to retry.  
     The solution is to run this menu once before actually getting into this loop, before actually writing the changes to disk (see the file install.c or upgrade.c for an example).  
     Though the user who is used to fetch its sources from more than one source will be confused about the changed order of the question, 99% of the people won't even notice it.  
     *Prerequisite*: C  
     *Tag*: system
   
   * **Task: Fix bug bin/46579**: The problem in this bug report is already analyzed: There is a general dispatcher for the requested tasks of ifconfig. After fulfilling these tasks, ifconfig goes on to show information, but then, the interface doesn't exist anymore.  
     You have to think of a clean way how to circumvent this, i.e. either catch non-existing devices before the task of ifconfig is done, or do a differentiation afterwards such that the error is not printed anymore.  
     ifconfig is a very complex tool, so expect a high difficulty from this task, not in the coding part, but in the analyzation part!  
     *Prerequisite*: C  
     *Tag*: system
   
   * **Task: Repair vnconfig(8)'s return codes**: vnconfig(8) is a tool to create virtual disk images. There was a (not officially filed) bug report that it sometimes returns success although it fails:
     > qemu# vnconfig vnd0 not_existent_file ; echo $? ; : bad 
     > vnconfig: not_existent_file: No such file or directory
     > 0
     > qemu# vnconfig vnd0 existent_file ; echo $? ;: good
     > 0
     > qemu#
     In this task, you will go through the whole work of fixing a bug: You have to analyze the situation, find the source of that bug in the code, and finally fix it.  
     *Prerequisite*: C  
     *Tag*: system
   
   * **Task: Fix bug bin/47089**: Apparently, the well-known tool mv(1) (for moving files around in the file system) does not return an appropriate error message when you try to move a mount point of a file system.  
     In this task, you will go through the whole work of fixing a bug: You have to analyze the situation, find the source of that bug in the code, and finally fix it.  
     *Prerequisite*: C  
     *Tag*: system
   
   * **Task: Fix bug bin/47065**: The shell returns a wrong error code when it should return an error (on a bad file descriptor).  
     In this task, you will go through the whole work of fixing a bug: You have to analyze the situation, find the source of that bug in the code, and finally fix it.  
     In this task, you will also learn much about how a shell internally works. This will help you definetely if you want to do shell programming some day, or just want to dig more into the internals of file descriptors.  
     *Prerequisite*: C  
     *Tag*: system
   
   * **Task: Fix bug bin/41049**: The description of "usermod -g" in the manpage does not accord to its real behaviour. Actually, this has not been implemented, so you have the rather difficult task to write the implementation for this.  
     You can use code from the other tools which deal with user and group modification, maybe you will find a place where nearly the same work has already been done.  
     *Prerequisite*: C  
     *Tag*: system
   
   
 ### User Interface  ### User Interface
   
   * **Task: Create a concept for a documentation browser**: There are many possibilities to ship documentation together with the distribution. Most operating systems stick to providing their documentation PDF, HTML, cleartext, GNU info or manpages.  NetBSD currently uses various formats for documentation, but for this task, this doesn't matter.  
     In case your system is offline (when the Internet connection shut down, or you are on your notebook), you want to have this information available.  
     We want to write an offline documentation browser, but the whole user interface is unclear. What kind of links do you provide (remember: A browser might not be available)? How do you select them? By numbering them, by commandline (like vi), by selecting them with cursors? When using cursors, how do you browse? How would you implement a browser history?  
     This task is not strictly user interface, you also have to research how it is possible. We want to reuse as many tools as possible (like less(1)) as they sometimes fulfill complicated tasks.  
     In the end, we expect a declaration of how the user interface should look like, such that the programmer can directly start to program this interface. You should not only provide this declaration, but also a reasoning why this choice is the best one, and some conceptual drawings that show your interface "in action".  
     If this task is interesting for you, we can support you also after Code-In if you want to write such a browser (in C), the actual language for the markup depending on a prior task.  
     *Tag*: research  
     *Tag*: wiki
   
 * **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.    * **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.  
   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.      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.  
   *Tag*: graphics      *Tag*: graphics  
   
 * **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.    * **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.  
   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).      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).  
     For this, you have to research what icons a current desktop environment uses (there are icons in /usr/share/icons) and then specify what motives are useful. You do not have to say there should be an icon for "file browser", but an icon for "a cupboard holding folders". The icons should stay generic.
   *Tag*: research      *Tag*: research  
   *Tag*: ui    *Tag*: ui
   
 * **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.    * **Followup 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 which loosely orients on the NetBSD corporate colours (orange, grey, white), maybe even providing two colour sets (additionally orange, grey, black), how these icons should look overall and creating the single icons that are specified.  
   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).      The icons should be in a vector graphics format like as Inkscape creates, such that in the future, we can choose to produce hihgher resolution icons.  
     As the whole icon set would clearly be too much work, this task is about creating **three icons of your choice** that have not yet been created, thus this task can be fulfilled multiple times.  
   *Tag*: graphics      *Tag*: graphics  
   *Tag*: ui    *Tag*: ui
   
Line 389  For all the tasks involving prerequisite Line 515  For all the tasks involving prerequisite
   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.      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.  
   *Tag*: graphics    *Tag*: graphics
   
 * **Task: Create NetBSD slide templates (Latex)**: NetBSD developers often hold presentations on conferences like the EuroBSDCon, BSDCan, etc.    * **Task: Create NetBSD slide templates (OpenOffice)**: NetBSD developers often hold presentations on conferences like the EuroBSDCon, BSDCan, etc.  
   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.      Your task is to think of a non-intrusive design which still reminds people of NetBSD, but without focussing on that. After that, you create a template that can be downloaded, included and then simply used such that NetBSD presentations have a NetBSD branding.  
   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.    *Tag*: graphics
   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.    
   *Prerequisite*: Latex    
   *Tag*: graphics    
   *Tag*: ui  
   
 * **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.    * **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.  
   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.      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.  
   You can deliver the specification either as a Latex style or exactly written with some example images.      You can deliver the specification either as a Latex style or exactly written with some example images.  
   *Tag*: graphics      *Tag*: graphics  
   *Tag*: ui  
   
 * **Task: Create a NetBSD poster**: NetBSD advocacy material is used on fairies where NetBSD usually has its own booth. To make the presentation more attractive, a nice poster (in format A0) would be nice.    * **Task: Create a NetBSD poster**: NetBSD advocacy material is used on fairies where NetBSD usually has its own booth. To make the presentation more attractive, a nice poster (in format A0) would be nice.  
   This task can be fulfilled multiple times. You can either create different posters advocating different aspects of NetBSD, or just create graphical posters.      This task can be fulfilled multiple times. You can either create different posters advocating different aspects of NetBSD, or just create graphical posters.  

Removed from v.1.34  
changed lines
  Added in v.1.35


CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb