summaryrefslogtreecommitdiff
path: root/developers/gsoc/2009ideas.html
blob: af111a91e8e5f97223cc3a2ce6703ae65f8bb5c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>NetSurf | Google Summer of Code 2009 Ideas</title>
<link rel="stylesheet" title="Standard" type="text/css" href="/netsurf.css">
</head>

<body>
<p class="banner"><a href="/"><img src="/netsurf.png" alt="NetSurf"></a></p>

<div class="navigation">
<div class="navsection">
<ul>
<li><a href="/about/">About NetSurf</a></li>
<li><a href="/downloads/">Downloads</a></li>
<li><a href="/documentation/">Documentation</a></li>
<li><a href="/developers/">Development area</a>
<ul>
<li><a href="/developers/contribute">Contribution</a></li>
<li><a href="/developers/gsoc">GSoC</a></li>
</ul>
</li>
<li><a href="/webmasters/">Webmaster area</a></li>
<li><a href="/contact/">Contact</a></li>
</ul>
</div>

<div class="navsection">
<ul class="languages">
<!--<li><a href="index.de">Deutsch</a></li>-->
<li>English</li>
<!--<li><a href="index.fr">Franšais</a></li>-->
<!--<li><a href="index.nl">Nederlands</a></li>-->
</ul>
</div>

<div class="navsection">
<ul class="sitelinks">
<li><a href="http://wiki.netsurf-browser.org/">Development wiki</a></li>
<li><a href="http://source.netsurf-browser.org/">Git repository viewer</a></li>
<li><a href="http://ci.netsurf-browser.org/">Continuous Integration</a></li>
<li><a href="http://bugs.netsurf-browser.org/">Bug report system</a></li>
</ul>
</div>

</div>

<div class="content">

<p class="breadcrumbs"><a href="/">Home</a><a href="/developers/">Developer area</a> ╗ Google Summer of Code</p>

<h1>Google Summer of Code Ideas</h1>

<p>This page lists our project ideas for <strong><a href="http://code.google.com/soc/">Google Summer of Code 2009</a></strong>.</p>

<dl>
<dt>Before applying for a project<dt>
<dd>
<ul>
<li>Join our IRC channel <code>#netsurf</code> on <a href="http://freenode.net/">Freenode</a> and introduce yourself. Also, subscribe to the <a href="http://www.netsurf-browser.org/lists/netsurf-dev">developer mailing list</a>.</li>
<li>Have access to a computer with supported OS (RISC OS, Linux, FreeBSD, BeOS, AmigaOS etc) or an OS relevant for the project you want to apply for (Windows, Mac OS).</li>
<li>Get up to speed with <a href="http://wiki.netsurf-browser.org/Documentation/GettingCoding">Git</a>, as we use this for source control, and get the NetSurf <a href="http://www.netsurf-browser.org/documentation/develop#SourceControl">source code</a>.</li>
<li><a href="http://www.netsurf-browser.org/documentation/develop#Compiling">Build NetSurf</a> and enjoy using it. (Ask if you need help.)</li>
<li>Get familiarised with the source code &ndash; read the <a href="http://source.netsurf-browser.org/netsurf.git/tree/Docs">code documentation</a>.</li>
<li>Consider submitting a patch to fix an issue on our <a href="http://sourceforge.net/tracker/?func=browse&group_id=51719&atid=464312">bug tracker</a> or <a href="http://sourceforge.net/tracker/?func=browse&amp;group_id=51719&atid=464315">feature request tracker</a></li>
</ul>
<dd>
<dt>When applying for a project<dt>
<dd>
<ul>
<li>Tell us about yourself, your experience, and why you want to work with us.</li>
<li>Describe the project you want to do, and how you plan to go about doing it. <strong>Do not simply copy the project description from the ideas page.</strong></li>
<li>Create a set of project milestones (ranging from a couple to maximum 10) with expected completion dates. This will be useful for you as guidance and for us to set our expectations right.</li>
<li>Describe how you will test your contributions.</li>
<li>Include your IRC nick in your application if you've spoken with us on <code>#netsurf</code>, so that we recognise you. <strong>We strongly recommend that you communicate with us before submitting an application.</strong></li>
<li>We expect GSoC to be mostly equivalent to a full-time job. Therefore, please tell us if you have any other demands on your time.</li>
</ul>
<dd>
<dt>During the project</dt>
<dd>
<ul>
<li>Most of NetSurf team communication happens via #netsurf IRC during evenings and nights (<a href="http://en.wikipedia.org/wiki/Central_European_Time">CET</a>). We expect you to join in on a regular basis for help, discussions and project updates. Note that you're not restricted to speaking to your assigned mentor; the whole development team are willing to help wherever they can.</li>
<li>When improving NetSurf's layout engine, be able to create <a href="">test cases</a> and verify that existing test cases don't get broken.</li>
<li>Keep NetSurf's <a href="http://www.netsurf-browser.org/about/#ProjectGoals">project goals</a> in mind, especially the first point.</li>
</ul>
</dd>
</dl>

<p>There is some more information in the <a href="http://wiki.netsurf-browser.org/google-summer-of-code">GSoC section</a> of our wiki. Note particularly the <a href="http://wiki.netsurf-browser.org/gsoc-student-guidelines">student guidelines</a>.</p>

<p>Please <a href="/contact/">get in touch</a> if any of these ideas appeal to you or if you have your own idea for either <a href="/">NetSurf</a> or one of NetSurf's <a href="/projects/">sub-projects</a>. Come and chat to the developers in the NetSurf IRC channel or post to the developer mailing list.</p>

<p><strong>All these ideas require knowledge of C</strong>, as NetSurf is entirely written in C.</p>

<p>See the <a href="http://sourceforge.net/tracker/?func=browse&amp;group_id=51719&amp;atid=464315">Feature Requests</a> tracker for more ideas.</p>

<h2>Keyboard navigation</h2>
<p>The browser currently requires a mouse to use. Keyboard shortcuts would move between and activate links, inputs, etc. The document structure is stored in a tree, and algorithms for walking through the tree to find the next link or input would need to be developed. A further improvement would be to take layout position into account and implement moving in 2D.</p>
<p><strong>Skills required:</strong> C, HTML, CSS, usability</p>
<p><strong>Difficulty:</strong> Easy</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/desktop/textinput.c?view=markup">Key press handling</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/render/box.h?view=markup">Box tree structures</a></p>
<p><strong>References:</strong></p>

<h2>Page reader</h2>
<p>The web is a vast resource of information and services. Traditional browsers enable its access for people who can see. NetSurf attempts to help partially sighted users with a sophisticated scaling / zoom feature, however it could be improved further with a page reading option. Speech synthesis could be used to render pages as spoken output.</p>
<p>There are already several libraries for speech synthesis. This project would first involve enabling NetSurf to speak the textual content of a page. Further work would improve the usability of the system by consideration for such factors as:</p>
<ul>
<li>Overview mode, which announces the document headings</li>
<li>Section skipping to allow swift to access to the next part of the document</li>
<li>Repetition of the current section or skipping back to previous sections</li>
<li>How to differentiate link text from the rest of the text</li>
<li>How to handle emphasis tags; &lt;em&gt; and &lt;strong&gt;</li>
</ul>
<p><strong>Skills required:</strong> C, accessibility</p>
<p><strong>Difficulty:</strong> Medium &ndash; Hard</p>
<p><strong>Existing code:</strong></p>
<p><strong>References:</strong> <a href="http://espeak.sourceforge.net/">eSpeak text to speech synthesizer</a></p>

<h2>LibDOM</h2>
<p>LibDOM is an implementation of the W3C DOM. It currently implements a large proportion of DOM Level 3 Core. It is a work in progress and requires a fairly large number of fixes and additions before it can be integrated into NetSurf. Note that the scope of this project is quite large. We expect you to prioritise the parts you intend to implement.</p>
<div class="details">
<p>Things that need doing include:</p>
<ul>
<li>
<p>Use vtables rather than known function names + switching on node type</p>
<p>A vtable is a structure containing function pointers. Each node type will populate the vtable with the appropriate functions. These may then be called by any client without the client needing to know what the node type is.</p>
</li>
<li>
<p>Implement the rest of DOM 3/2/1/0, primarily:</p>
<ul>
<li>Events</li>
<li>HTML</li>
<li>Other DOM modules</li>
</ul>
</li>
<li>
<p>Test suite</p>
<p>The W3C provide a test suite for DOM implementations. It is stored in an XML format and currently, has transformations from this format to Java and JavaScript source code. Ideally, a transformation into C source code will be written so that LibDOM may be tested automatically.</p>
</li>
<li>
<p>Integration with NetSurf</p>
</li>
</ul>
</div>
<p><strong>Skills required:</strong> C, DOM, XSLT (for the test suite)</p>
<p><strong>Difficulty:</strong> Medium &ndash; Hard</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/dom/">LibDOM sources</a></p>
<p><strong>References:</strong> <a href="http://www.w3.org/DOM/DOMTR">DOM specifications</a></p>

<h2>Layout engine improvements</h2>
<p>The layout engine forms part of the core of the browser. It is responsible for calculating the position of each part of the page. It currently has a number of deficiencies which should be addressed. These include the following parts of the CSS specification:</p>
<ul>
<li>Stacking order (<code style="color:#46a;">z-index</code>)</li>
<li>Fixed position (<code style="color:#46a;">position: fixed;</code>)</li>
<li>Fixed backgrounds (<code style="color:#46a;">background-attachment: fixed;</code>)</li>
<li>Vertical alignment (<code style="color:#46a;">vertical-align</code>)</li>
<li>Handling of white space and wrapping (<code style="color:#46a;">white-space</code>)</li>
</ul>
<p>There are also other layout issues which could be tackled. For example in table layout some CSS properties, like <code style="color:#46a;">height</code>, are not handled for table rows.</p>
<p><strong>Skills required:</strong> C, HTML, CSS</p>
<p><strong>Difficulty:</strong> Medium &ndash; Hard</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/render/layout.c?view=markup">layout engine</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/render/html_redraw.c?view=markup">rendering code</a></p>
<p><strong>References:</strong> <a href="http://www.w3.org/TR/CSS21">CSS 2.1 specification</a>, <a href="http://www.w3.org/TR/CSS21/propidx.html">CSS 2.1 property index</a></p>

<h2>Automated layout test engine</h2>
<p>When NetSurf's layout engine is modified there is a risk that the change may break other pages. When problems are found, we create test cases which demonstrate the problem and keep them as regression tests once the issue is fixed. Currently, it takes quite a lot of manual effort to test NetSurf against all these test pages manually.</p>
<div class="details">
<p>This project will create a tool for automatically testing NetSurf's layout engine for regressions. There are three components that will make up the completed project:</p>
<dl>
<dt>Minimal test front end</dt>
<dd>
<p>The first task will be to write the code necessary to call NetSurf's core engine to fetch a page, perform layout on it and dump the page's box tree. The box dump specifies the x/y coordinates, width and height of every box in the render tree, as well as other pertinent information.</p>
<p>This will involve the implementation of a simple test &quot;front end&quot;. Unlike the GTK, RISC OS or BeOS, etc front ends, it is not to be a usable web browser, but a command line tool. The minimal debug and framebuffer front ends can be used as example code.</p>
</dd>
<dt>A defined test data format</dt>
<dd>
<p>The existing test data is fine for manual testing. However, for automated testing to work, there needs to be some ground truthed comparison data for each test input. There also needs to be a way of determining which comparison data is associated with which test.</p>
<p>To ensure that the test front end is working correctly, some amount of test input and comparison data will need to be created. The existing test suite can be used as a starting point for this.</p>
</dd>
<dt>A test runner</dt>
<dd>
<p>This can be some kind of script that runs the NetSurf test code for each page in the test suite and compares the box dump NetSurf produces with the expected data. It can output the test name and then PASS or FAIL.</p>
</dd>
</dl>
</div>
<p><strong>Skills required:</strong> C, HTML, CSS, scripting</p>
<p><strong>Difficulty:</strong> Medium</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurftest/">existing test case repository</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/render/box.c?view=markup">box dump code &ndash; box_dump() (note that this is extremely verbose and contains much data that is of little use in automated testing)</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/debug/">debug front end</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/framebuffer/">framebuffer front end</a></p>
<p><strong>References:</strong></p>

<h2>Core UI enhancements</h2>
<p>So that NetSurf can draw pages on different platforms, there is an interface between the core cross-platform code and the front end UI code that abstracts plotting. This interface is used to plot everything within the browser's content area.</p>
<p>There are parts of NetSurf's user interface which are common across platforms. However, each platform frontend has to implement these separately. This results in unnecessary duplication of functionality. Therefore, it would be good to move support for some of the common widgets into the core and draw them using the same plotting interface as used for the content area.</p>
<p>Initially, this will require:</p>
<ul>
<li>A plotter-based treeview for global history, cookie manager and bookmarks.</li>
<li>A plotter-based (single &amp; multi line) text input widget.</li>
</ul>
<p>Further to the above, the way NetSurf's core implements HTML frames is not particularly portable. This could be addressed as an extension.</p>
<p><strong>Skills required:</strong> C, Usability</p>
<p><strong>Difficulty:</strong> Easy &ndash; Medium</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/desktop/tree.h?view=markup">Core treeview interface</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/desktop/tree.c?view=markup">Core treeview code</a></p>
<p><strong>References:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/desktop/plotters.h?view=markup">plotters interface</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/riscos/textarea.c?view=markup">textarea widget code</a></p>

<h2>Native Windows or Mac OS X port</h2>
<p>NetSurf currently has user-interface layers for several systems including RISC OS, GTK (on Linux, FreeBSD, etc.), AmigaOS and BeOS. The GTK interface works on Windows or Mac OS X, but a native interface for these systems would give a better experience.</p>
<p>The existing front end implementations can be used as examples. Of these, the framebuffer front end is very self contained and the debug front end is the most minimal. For the rendering of NetSurf's content area, a set of plotters needs to be implemented for drawing primitives such as rectangles, plotting bitmaps and text.</p>
<p><strong>Skills required:</strong> C, Windows UI development or Mac OS X UI development</p>
<p><strong>Difficulty:</strong> Medium</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/desktop/gui.h?view=markup">Declarations of functions that each interface must implement</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/desktop/plotters.h?view=markup">plotters interface</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/riscos/">RISC OS specific code</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/gtk/">GTK specific code</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/beos/">BeOS specific code</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/amiga/">AmigaOS specific code</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/framebuffer/">framebuffer specific code</a></p>
<p><strong>References:</strong></p>

<h2>Improved GTK front end</h2>
<p>NetSurf's GTK front end is fairly usable at present, but would benefit from enhancement.</p>
<p>Outstanding functionality includes:</p>
<ul>
<li>Find</li>
<li>Bookmarks (also see core UI enhancements idea)</li>
<li>Improved contextual right-click menu (&quot;Save image as...&quot; and &quot;Open in new tab...&quot; for example)</li>
<li>GUI should adjust to match GTK interface preferences (icons in menu, text under toolbar buttons, etc.)</li>
<li>File uploads</li>
<li>View source</li>
<li>Documentation (user guide)</li>
<li>Favicons</li>
</ul>
<p><strong>Skills required:</strong> C, GTK</p>
<p><strong>Difficulty:</strong> Easy &ndash; Medium</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/gtk/">GTK specific code</a></p>
<p><strong>References:</strong></p>

<h2>Improved Haiku/BeOS front end</h2>
<p>NetSurf's BeOS frontend is reasonably usable, but would benefit from some enhancement.</p>
<p>Outstanding functionality includes:</p>
<ul>
<li>Tabs</li>
<li>Download window</li>
<li>Bookmarks, also see core UI enhancements idea</li>
<li>History, also see core UI enhancements idea</li>
<li>Fix &lt;frame&gt; support, also see core UI enhancements idea</li>
<li>Printing</li>
<li>Preferences window</li>
</ul>
<div class="details">
<p><strong>Note:</strong> Any student interested in working on this front end should apply to both the NetSurf and Haiku organisations. The developer who would mentor this project is also a mentor for the Haiku organisation.</p>
</div>
<p><strong>Skills required:</strong> C++, BeOS/Haiku UI toolkits</p>
<p><strong>Difficulty:</strong> Easy &ndash; Medium</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/beos/">BeOS specific code</a></p>
<p><strong>References:</strong> <a href="http://www.haiku-os.org/community/gsoc2009/ideas">Haiku organisation ideas</a></p>

<h2>Improved RISC OS front end</h2>
<p>NetSurf's RISC OS front end is the most feature complete. There are various ways in which it could be improved. These include:</p>
<ul>
<li>Tabs</li>
<li>Better config e.g. web page language choice option</li>
<li>Richer status bar, perhaps progress bar and icons for SSL, and to indicate what it's doing</li>
<li>OLE</li>
<li>Favicons</li>
</ul>
<p><strong>Skills required:</strong> C, RISC OS Wimp programming using OSLib</p>
<p><strong>Difficulty:</strong> Medium</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/riscos/">RISC OS specific code</a></p>
<p><strong>References:</strong> <a href="http://ro-oslib.sourceforge.net/">OSLib</a></p>

<div class="footer">
<p>Copyright 2003 - 2009 The NetSurf Developers</p>
</div>

</div>


<form method="get" action="http://www.google.co.uk/search">
<div class="searchbox">
<input type="hidden" name="q" value="site:netsurf-browser.org">
<input type="text" name="q" maxlength="255"><br>
<input type="submit" value="Search" name="btnG">
</div>
</form>

</body>
</html>