<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lucian</id>
	<title>Sugar Labs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lucian"/>
	<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/go/Special:Contributions/Lucian"/>
	<updated>2026-06-15T10:35:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Talk:Features/WebKit&amp;diff=66626</id>
		<title>Talk:Features/WebKit</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Talk:Features/WebKit&amp;diff=66626"/>
		<updated>2011-06-24T12:23:41Z</updated>

		<summary type="html">&lt;p&gt;Lucian: Created page with &amp;quot;In case no one noticed, there&amp;#039;s an updated version of Surf [http://git.sugarlabs.org/surf]. It has a lot of features the previous Surf lacked, such as downloads, persistence and ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In case no one noticed, there&#039;s an updated version of Surf [http://git.sugarlabs.org/surf]. It has a lot of features the previous Surf lacked, such as downloads, persistence and history. It&#039;s still missing cookie support because libsoup has no static python binding.&lt;br /&gt;
&lt;br /&gt;
In order for this version of Surf to reach feature parity with Browse, it would (only) need a PyGI(-compatible) version of sugar-toolkit. It should work just fine with gtk2.&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=51079</id>
		<title>Summer of Code/2010/Abstract Browser</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=51079"/>
		<updated>2010-04-10T18:17:01Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
I have also participated on GSoC last year with [[Webified]].&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
AbstractBrowser&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
Several people have expressed concern about xulrunner/hulahop and Browse maintainability. Also, there is a perception that webkit is faster and uses less memory than gecko. Various benchmarks do seem to show webkit to be superior, but results are inconclusive. Also, the Surf activity is significantly faster than Browse on XOs.&lt;br /&gt;
&lt;br /&gt;
It would be good if Browse could switch between browser engines, if not at runtime at least with little effort. This would require an abstraction layer on top of hulahop/pywebkitgtk that Browse could target. This would open the road for other engines as well (like chromium).&lt;br /&gt;
&lt;br /&gt;
Thus, this project has two parts:&lt;br /&gt;
# Design and implement a browser engine abstraction layer in Python with two backends: hulahop/xulrunner and pywebkitgtk/webkit.&lt;br /&gt;
# Port Browse to this new abstraction layer, complete with [[Webified|SSB support]].&lt;br /&gt;
&lt;br /&gt;
Since recent efforts to empower browsers like HTML5, Jetpack and the Chrome extension API are minimalistic in nature, the web development world is moving towards engine-independent extensions. Thus, implementing Jetpack/Chrome extensions/similar homegrown API for Browse should be both feasible and would benefit from a wealth of existing code.&lt;br /&gt;
&lt;br /&gt;
SSBs are becoming less &amp;quot;web app to replace desktop apps&amp;quot; and more &amp;quot;internet apps to fit better in the desktop&amp;quot;. I will design Browse&#039;s new SSB support to match this trend.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
Weeks:&lt;br /&gt;
# Write prototype of abstraction layer&lt;br /&gt;
#* WebView GTK widget that wraps hulahop.WebView or pywebkitgtk.WebView&lt;br /&gt;
#* nothing more than WebView.load_uri()&lt;br /&gt;
# Simple Browser activity based on the abstraction layer&lt;br /&gt;
#* recycle code from Browse &amp;amp; Surf&lt;br /&gt;
#* implement missing functionality as needed&lt;br /&gt;
# Basic browser functionality&lt;br /&gt;
#* DOM access&lt;br /&gt;
#* html events mapped to gobject events&lt;br /&gt;
# More browser functionality&lt;br /&gt;
#* downloads, history&lt;br /&gt;
#* user stylesheets&lt;br /&gt;
#* browser settings (i.e. proxy)&lt;br /&gt;
# Port SSB code from Browse&#039;s ssb branch&lt;br /&gt;
#* create ssb&lt;br /&gt;
#* edit userstyles/usersheets&lt;br /&gt;
#* bookmarklets&lt;br /&gt;
# More functionality&lt;br /&gt;
# Polish&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough third.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
M&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2010 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=51055</id>
		<title>Summer of Code/2010/Abstract Browser</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=51055"/>
		<updated>2010-04-09T15:27:18Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
I have also participated on GSoC last year with [[Webified]].&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
AbstractBrowser&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
Several people have expressed concern about xulrunner/hulahop and Browse maintainability. Also, there is a perception that webkit is faster and uses less memory than gecko. Various benchmarks do seem to show webkit to be superior, but results are inconclusive. Also, the Surf activity is significantly faster than Browse on XOs.&lt;br /&gt;
&lt;br /&gt;
It would be good if Browse could switch between browser engines, if not at runtime at least with little effort. This would require an abstraction layer on top of hulahop/pywebkitgtk that Browse could target. This would open the road for other engines as well (like chromium).&lt;br /&gt;
&lt;br /&gt;
Thus, this project has two parts:&lt;br /&gt;
# Design and implement a browser engine abstraction layer in Python with two backends: hulahop/xulrunner and pywebkitgtk/webkit.&lt;br /&gt;
# Port Browse to this new abstraction layer, complete with [[Webified|SSB support]].&lt;br /&gt;
&lt;br /&gt;
Since recent efforts to empower browsers like HTML5, Jetpack and the Chrome extension API are minimalistic in nature, the web development world is moving towards engine-independent extensions. Thus, implementing Jetpack/Chrome extensions/similar homegrown API for Browse should be both feasible and would benefit from a wealth of existing code.&lt;br /&gt;
&lt;br /&gt;
SSBs are becoming less &amp;quot;web app to replace desktop apps&amp;quot; and more &amp;quot;internet apps to fit better in the desktop&amp;quot;. I will design Browse&#039;s new SSB support to match this trend.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
Weeks:&lt;br /&gt;
# Write prototype of abstraction layer&lt;br /&gt;
#* WebView GTK widget that wraps hulahop.WebView or pywebkitgtk.WebView&lt;br /&gt;
#* nothing more than WebView.load_uri()&lt;br /&gt;
# Simple Browser activity based on the abstraction layer&lt;br /&gt;
#* recycle code from Browse &amp;amp; Surf&lt;br /&gt;
#* implement missing functionality as needed&lt;br /&gt;
# Basic browser functionality&lt;br /&gt;
#* DOM access&lt;br /&gt;
#* html events mapped to gobject events&lt;br /&gt;
# More browser functionality&lt;br /&gt;
#* downloads, history&lt;br /&gt;
#* user stylesheets&lt;br /&gt;
#* browser settings (i.e. proxy)&lt;br /&gt;
# Port SSB code from Browse&#039;s ssb branch&lt;br /&gt;
#* create ssb&lt;br /&gt;
#* edit userstyles/usersheets&lt;br /&gt;
#* bookmarklets&lt;br /&gt;
# More functionality&lt;br /&gt;
# Polish&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough third.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also participated in last year&#039;s GSoC, adding SSB support to Browse. See [Webified].&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
M&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2010 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=51054</id>
		<title>Summer of Code/2010/Abstract Browser</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=51054"/>
		<updated>2010-04-09T15:19:08Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
I have also participated on GSoC last year with [[Webified]].&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
AbstractBrowser&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
Several people have expressed concern about xulrunner/hulahop and Browse maintainability. Also, there is a perception that webkit is faster and uses less memory than gecko. Various benchmarks do seem to show webkit to be superior, but results are inconclusive. Also, the Surf activity is significantly faster than Browse on XOs.&lt;br /&gt;
&lt;br /&gt;
It would be good if Browse could switch between browser engines, if not at runtime at least with little effort. This would require an abstraction layer on top of hulahop/pywebkitgtk that Browse could target. This would open the road for other engines as well (like chromium).&lt;br /&gt;
&lt;br /&gt;
Thus, this project has two parts:&lt;br /&gt;
# Design and implement a browser engine abstraction layer in Python with two backends: hulahop/xulrunner and pywebkitgtk/webkit.&lt;br /&gt;
# Port Browse to this new abstraction layer, complete with [[Webified|SSB support]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
Weeks:&lt;br /&gt;
# Write prototype of abstraction layer&lt;br /&gt;
#* WebView GTK widget that wraps hulahop.WebView or pywebkitgtk.WebView&lt;br /&gt;
#* nothing more than WebView.load_uri()&lt;br /&gt;
# Simple Browser activity based on the abstraction layer&lt;br /&gt;
#* recycle code from Browse &amp;amp; Surf&lt;br /&gt;
#* implement missing functionality as needed&lt;br /&gt;
# Basic browser functionality&lt;br /&gt;
#* DOM access&lt;br /&gt;
#* html events mapped to gobject events&lt;br /&gt;
# More browser functionality&lt;br /&gt;
#* downloads, history&lt;br /&gt;
#* user stylesheets&lt;br /&gt;
#* browser settings (i.e. proxy)&lt;br /&gt;
# Port SSB code from Browse&#039;s ssb branch&lt;br /&gt;
#* create ssb&lt;br /&gt;
#* edit userstyles/usersheets&lt;br /&gt;
#* bookmarklets&lt;br /&gt;
# More functionality&lt;br /&gt;
# Polish&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough third.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also participated in last year&#039;s GSoC, adding SSB support to Browse. See [Webified].&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
M&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2010 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=51053</id>
		<title>Summer of Code/2010/Abstract Browser</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=51053"/>
		<updated>2010-04-09T15:14:25Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
I have also participated on GSoC last year with [[Webified]].&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
AbstractBrowser&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
Several people have expressed concern about xulrunner/hulahop and Browse maintainability. Also, there is a perception that webkit is faster and uses less memory than gecko. Various benchmarks do seem to show webkit to be superior, but results are inconclusive. Also, the Surf activity is significantly faster than Browse on XOs.&lt;br /&gt;
&lt;br /&gt;
It would be good if Browse could switch between browser engines, if not at runtime at least with little effort. This would require an abstraction layer on top of hulahop/pywebkitgtk that Browse could target. This would open the road for other engines as well (like chromium).&lt;br /&gt;
&lt;br /&gt;
Thus, this project has two parts:&lt;br /&gt;
# Design and implement a browser engine abstraction layer in Python with two backends: hulahop/xulrunner and pywebkitgtk/webkit.&lt;br /&gt;
# Port Browse to this new abstraction layer, complete with [[Webified|SSB support]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
Weeks:&lt;br /&gt;
# Write prototype of abstraction layer&lt;br /&gt;
## WebView GTK widget that wraps hulahop.WebView or pywebkitgtk.WebView&lt;br /&gt;
## nothing more than WebView.load_uri()&lt;br /&gt;
# Simple Browser activity based on the abstraction layer&lt;br /&gt;
## recycle code from Browse &amp;amp; Surf&lt;br /&gt;
## implement missing functionality as needed&lt;br /&gt;
# Basic browser functionality&lt;br /&gt;
## DOM access&lt;br /&gt;
## html events mapped to gobject events&lt;br /&gt;
# More browser functionality&lt;br /&gt;
## downloads, history&lt;br /&gt;
## user stylesheets&lt;br /&gt;
## browser settings (i.e. proxy)&lt;br /&gt;
# Port SSB code from Browse&#039;s ssb branch&lt;br /&gt;
## create ssb&lt;br /&gt;
## edit userstyles/usersheets&lt;br /&gt;
## bookmarklets&lt;br /&gt;
# More functionality&lt;br /&gt;
# Polish&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough third.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also participated in last year&#039;s GSoC, adding SSB support to Browse. See [Webified].&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
M&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2010 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=51052</id>
		<title>Summer of Code/2010/Abstract Browser</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=51052"/>
		<updated>2010-04-09T15:10:01Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
I have also participated on GSoC last year with [[Webified]].&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
AbstractBrowser&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
Several people have expressed concern about xulrunner/hulahop and Browse maintainability. Also, there is a perception that webkit is faster and uses less memory than gecko. Various benchmarks do seem to show webkit to be superior, but results are inconclusive. Also, the Surf activity is significantly faster than Browse on XOs.&lt;br /&gt;
&lt;br /&gt;
It would be good if Browse could switch between browser engines, if not at runtime at least with little effort. This would require an abstraction layer on top of hulahop/pywebkitgtk that Browse could target. This would open the road for other engines as well (like chromium).&lt;br /&gt;
&lt;br /&gt;
Thus, this project has two parts:&lt;br /&gt;
# Design and implement a browser engine abstraction layer in Python with two backends: hulahop/xulrunner and pywebkitgtk/webkit.&lt;br /&gt;
# Port Browse to this new abstraction layer, complete with [[Webified|SSB support]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
Weeks:&lt;br /&gt;
# Write prototype of abstraction layer&lt;br /&gt;
* WebView GTK widget that wraps hulahop.WebView or pywebkitgtk.WebView&lt;br /&gt;
* nothing more than WebView.load_uri()&lt;br /&gt;
# Simple Browser activity based on the abstraction layer&lt;br /&gt;
* recycle code from Browse &amp;amp; Surf&lt;br /&gt;
* implement missing functionality as needed&lt;br /&gt;
# Basic browser functionality&lt;br /&gt;
* DOM access&lt;br /&gt;
* html events mapped to gobject events&lt;br /&gt;
# More browser functionality&lt;br /&gt;
* downloads, history&lt;br /&gt;
* user stylesheets&lt;br /&gt;
* browser settings (i.e. proxy)&lt;br /&gt;
# Port SSB code from Browse&#039;s ssb branch&lt;br /&gt;
* create ssb&lt;br /&gt;
* edit userstyles/usersheets&lt;br /&gt;
* bookmarklets&lt;br /&gt;
# More functionality&lt;br /&gt;
# Polish&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough third.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also participated in last year&#039;s GSoC, adding SSB support to Browse. See [Webified].&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
M&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2010 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=51051</id>
		<title>Summer of Code/2010/Abstract Browser</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=51051"/>
		<updated>2010-04-09T15:08:28Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
I have also participated on GSoC last year with [[Webified]].&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
AbstractBrowser&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
Several people have expressed concern about xulrunner/hulahop and Browse maintainability. Also, there is a perception that webkit is faster and uses less memory than gecko. Various benchmarks do seem to show webkit to be superior, but results are inconclusive. Also, the Surf activity is significantly faster than Browse on XOs.&lt;br /&gt;
&lt;br /&gt;
It would be good if Browse could switch between browser engines, if not at runtime at least with little effort. This would require an abstraction layer on top of hulahop/pywebkitgtk that Browse could target. This would open the road for other engines as well (like chromium).&lt;br /&gt;
&lt;br /&gt;
Thus, this project has two parts:&lt;br /&gt;
# Design and implement a browser engine abstraction layer in Python with two backends: hulahop/xulrunner and pywebkitgtk/webkit.&lt;br /&gt;
# Port Browse to this new abstraction layer, complete with [[Webified|SSB support]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
Weeks:&lt;br /&gt;
# Write prototype of abstraction layer&lt;br /&gt;
   * WebView GTK widget that wraps hulahop.WebView or pywebkitgtk.WebView&lt;br /&gt;
   * nothing more than WebView.load_uri()&lt;br /&gt;
# Simple Browser activity based on the abstraction layer&lt;br /&gt;
   * recycle code from Browse &amp;amp; Surf&lt;br /&gt;
   * implement missing functionality as needed&lt;br /&gt;
# Basic browser functionality&lt;br /&gt;
   * DOM access&lt;br /&gt;
   * html events mapped to gobject events&lt;br /&gt;
# More browser functionality&lt;br /&gt;
   * downloads, history&lt;br /&gt;
   * user stylesheets&lt;br /&gt;
   * browser settings (i.e. proxy)&lt;br /&gt;
# Port SSB code from Browse&#039;s ssb branch&lt;br /&gt;
   * create ssb&lt;br /&gt;
   * edit userstyles/usersheets&lt;br /&gt;
   * bookmarklets&lt;br /&gt;
# More functionality&lt;br /&gt;
# Polish&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough third.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
M&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2010 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=50256</id>
		<title>Summer of Code/2010/Abstract Browser</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=50256"/>
		<updated>2010-03-26T00:54:21Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
I have also participated on GSoC last year with [[Webified]].&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
AbstractBrowser&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
Several people have expressed concern about xulrunner/hulahop and Browse maintainability. Also, there is a perception that webkit is faster and uses less memory than gecko. Various benchmarks do seem to show webkit to be superior, but results are inconclusive. Also, the Surf activity is significantly faster than Browse on XOs.&lt;br /&gt;
&lt;br /&gt;
It would be good if Browse could switch between browser engines, if not at runtime at least with little effort. This would require an abstraction layer on top of hulahop/pywebkitgtk that Browse could target. This would open the road for other engines as well (like chromium).&lt;br /&gt;
&lt;br /&gt;
Thus, this project has two parts:&lt;br /&gt;
# Design and implement a browser engine abstraction layer in Python with two backends: hulahop/xulrunner and pywebkitgtk/webkit.&lt;br /&gt;
# Port Browse to this new abstraction layer, complete with [[Webified|SSB support]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough third.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
M&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=50255</id>
		<title>Summer of Code/2010/Abstract Browser</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=50255"/>
		<updated>2010-03-26T00:51:02Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
I have also participated on GSoC last year with [[Webified]].&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
AbstractBrowser&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
Several people have expressed concern about xulrunner/hulahop and Browse maintainability. Also, there is a perception that webkit is faster and uses less memory than gecko. Various benchmarks do seem to show webkit to be superior, but results are inconclusive. Also, the Surf activity is significantly faster than Browse on XOs.&lt;br /&gt;
&lt;br /&gt;
It would be good if Browse could switch between browser engines, if not at runtime at least with little effort. This would require an abstraction layer on top of hulahop/pywebkitgtk that Browse could target. This would open the road for other engines as well (like chromium).&lt;br /&gt;
&lt;br /&gt;
Thus, this project has two parts:&lt;br /&gt;
1) Design and implement a browser engine abstraction layer in Python with two backends: hulahop/xulrunner and pywebkitgtk/webkit.&lt;br /&gt;
&lt;br /&gt;
2) Port Browse to this new abstraction layer, complete with [[Webified|SSB support]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough third.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
M&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=50254</id>
		<title>Summer of Code/2010/Abstract Browser</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=50254"/>
		<updated>2010-03-26T00:38:20Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
I have also participated on GSoC last year with [[Webified]].&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webified&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough third.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
M&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=50250</id>
		<title>Summer of Code/2010/Abstract Browser</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2010/Abstract_Browser&amp;diff=50250"/>
		<updated>2010-03-25T21:09:52Z</updated>

		<summary type="html">&lt;p&gt;Lucian: Created page with &amp;#039;{{TOCright}} &amp;#039;&amp;#039;The results of this project are now in the Browse activity and at [http://git.sugarlabs.org/projects/browse/repos/webified a branch of Browse…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&#039;&#039;The results of this project are now in the [[Activities/Browse|Browse]] activity and at [http://git.sugarlabs.org/projects/browse/repos/webified a branch of Browse]. See also complementary work on [[Karma]].&#039;&#039;&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webified&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
M&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Talk:WebCollab&amp;diff=34541</id>
		<title>Talk:WebCollab</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Talk:WebCollab&amp;diff=34541"/>
		<updated>2009-08-03T13:38:44Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I&#039;ve been very busy with RL lately, I&#039;m finally getting around to implementing something. I&#039;ll try your model first, if only because it&#039;s simpler to implement.&lt;br /&gt;
&lt;br /&gt;
I&#039;ll be making at least one change though, replacing PUT with POST. In REST, POST is usually for create and PUT for modify.&lt;br /&gt;
[[User:Lucian|Lucian]] 13:38, 3 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Talk:WebCollab&amp;diff=34540</id>
		<title>Talk:WebCollab</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Talk:WebCollab&amp;diff=34540"/>
		<updated>2009-08-03T13:38:23Z</updated>

		<summary type="html">&lt;p&gt;Lucian: Created page with &amp;#039;I&amp;#039;ve been very busy with RL lately, I&amp;#039;m finally getting around to implementing something. I&amp;#039;ll try your model first, if only because it&amp;#039;s simpler to implement.  I&amp;#039;ll be making at…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I&#039;ve been very busy with RL lately, I&#039;m finally getting around to implementing something. I&#039;ll try your model first, if only because it&#039;s simpler to implement.&lt;br /&gt;
&lt;br /&gt;
I&#039;ll be making at least one change though, replacing PUT with POST. In REST, POST is usually for create and PUT for modify.&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Talk:Karma/Bundle_layout&amp;diff=33939</id>
		<title>Talk:Karma/Bundle layout</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Talk:Karma/Bundle_layout&amp;diff=33939"/>
		<updated>2009-07-22T11:44:57Z</updated>

		<summary type="html">&lt;p&gt;Lucian: Created page with &amp;#039;I still have a problem with chakra.html.  If you put the karma bundle on a web server, it will serve index.html by default. In this case, it will give a 403, because on most (san…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I still have a problem with chakra.html.&lt;br /&gt;
&lt;br /&gt;
If you put the karma bundle on a web server, it will serve index.html by default. In this case, it will give a 403, because on most (sane) servers you can&#039;t view the contents of folders.&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Development_Team/Almanac&amp;diff=33515</id>
		<title>Development Team/Almanac</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Development_Team/Almanac&amp;diff=33515"/>
		<updated>2009-07-16T12:21:14Z</updated>

		<summary type="html">&lt;p&gt;Lucian: /* How do I create a text box for code editing? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Almanac}}&lt;br /&gt;
{{Almanac TOC}}&lt;br /&gt;
== How do I get additional help beyond this almanac? ==&lt;br /&gt;
* Looking to get started with the basics of Sugar development? Check out Christoph Derndorfer&#039;s [http://www.olpcaustria.org/mediawiki/index.php/Activity_handbook Activity Handbook]. &lt;br /&gt;
* See also [[Development Team/Almanac/Code Snippets]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, on to the actual almanac ...&lt;br /&gt;
&lt;br /&gt;
== Where can I see API changes? ==&lt;br /&gt;
API changes between OLPC releases can be seen here: [[Development Team/Almanac/API Changes|API Changes]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
=== How do I structure my files so that they are a valid sugar activity?  === &lt;br /&gt;
Information on activity bundle structure can be found here: [[Development Team/Almanac/Activity Bundles|Activity Bundles]]&lt;br /&gt;
&lt;br /&gt;
=== How do I make an icon for my activity? ===&lt;br /&gt;
Information on what you need to do can be found here: [[Development Team/Almanac/Making Icons|Making Icons]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.env|sugar.env]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.profile|sugar.profile]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.mime|sugar.mime]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.logger|sugar.logger]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.activity ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.activity.activity|sugar.activity.activity]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.activity.activityfactory|sugar.activity.activityfactory]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.activity.registry|sugar.activity.registry]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.datastore ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.datastore.datastore|sugar.datastore.datastore]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.graphics ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.alert|sugar.graphics.alert]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.icon|sugar.graphics.icon]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.notebook|sugar.graphics.notebook]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.toolbutton|sugar.graphics.toolbutton]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.toolbox|sugar.graphics.toolbox]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.style|sugar.graphics.style]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.presence ==&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence|Sugar.presence]]&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence.activity|Sugar.presence.activity]]&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence.buddy|Sugar.presence.buddy]]&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence.presenceservice|Sugar.presence.presenceservice]]&lt;br /&gt;
&lt;br /&gt;
== Clipboard ==&lt;br /&gt;
* Notes on using [[Development Team/Almanac/GTK&#039;s Clipboard Module|GTK&#039;s Clipboard Module]]&lt;br /&gt;
&lt;br /&gt;
== Logging ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.logger|sugar.logger]]&lt;br /&gt;
* Notes on using [[Development Team/Almanac/Python Standard Logging|Python Standard Logging]]&lt;br /&gt;
&lt;br /&gt;
== Internationalization ==&lt;br /&gt;
*[[Development Team/Almanac/Internationalization|Internationalization]]&lt;br /&gt;
&lt;br /&gt;
== Text and Graphics for Sugar Activities ==&lt;br /&gt;
* [[Development Team/Almanac/Pango|Pango]]&lt;br /&gt;
=== How do I create a text box for code editing? ===&lt;br /&gt;
You can use gtksourceview2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import gtk&lt;br /&gt;
import gtksourceview2&lt;br /&gt;
from sugar.graphics import style&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# set up the buffer&lt;br /&gt;
buffer = gtksourceview2.Buffer()&lt;br /&gt;
if hasattr(buffer, &#039;set_highlight&#039;): # handle different API versions&lt;br /&gt;
    buffer.set_highlight(True)&lt;br /&gt;
else:&lt;br /&gt;
    buffer.set_highlight_syntax(True)&lt;br /&gt;
&lt;br /&gt;
# set mime type for the buffer&lt;br /&gt;
lang_manager = gtksourceview2.language_manager_get_default()&lt;br /&gt;
if hasattr(lang_manager, &#039;list_languages&#039;): # again, handle different APIs&lt;br /&gt;
    langs = lang_manager.list_languages()&lt;br /&gt;
else:&lt;br /&gt;
    lang_ids = lang_manager.get_language_ids()&lt;br /&gt;
    langs = [lang_manager.get_language(lang_id) &lt;br /&gt;
                  for lang_id in lang_ids]&lt;br /&gt;
for lang in langs:&lt;br /&gt;
    for m in lang.get_mime_types():&lt;br /&gt;
        if m == mime_type:        # &amp;lt;-- this is the mime type you want&lt;br /&gt;
            buffer.set_language(lang)&lt;br /&gt;
&lt;br /&gt;
# set up the view object, use it like gtk.TextView&lt;br /&gt;
view = gtksourceview2.View(buffer)&lt;br /&gt;
view.set_size_request(300, 450)&lt;br /&gt;
view.set_editable(True)&lt;br /&gt;
view.set_cursor_visible(True)&lt;br /&gt;
view.set_show_line_numbers(True)&lt;br /&gt;
view.set_wrap_mode(gtk.WRAP_CHAR)&lt;br /&gt;
view.set_right_margin_position(80)&lt;br /&gt;
#view.set_highlight_current_line(True) #FIXME: Ugly color&lt;br /&gt;
view.set_auto_indent(True)&lt;br /&gt;
view.modify_font(pango.FontDescription(&amp;quot;Monospace &amp;quot; +&lt;br /&gt;
                 str(style.FONT_SIZE)))&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the text in the buffer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buffer.set_text(text)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get all the text:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will probably want to put the view in a gtk.ScrolledWindow&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sw = gtk.ScrolledWindow()&lt;br /&gt;
sw.add(view)&lt;br /&gt;
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and add the sw object instead of the view.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can find more in the Pippy source and in jarabe.view.sourceview.&lt;br /&gt;
&lt;br /&gt;
== Audio &amp;amp; Video ==&lt;br /&gt;
* [[Development Team/Almanac/GStreamer|GStreamer]]&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
=== How do I change the mouse cursor in my activity to the wait cursor? ===&lt;br /&gt;
In your activity subclass:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self.window.set_cursor( gtk.gdk.Cursor(gtk.gdk.WATCH) )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and to switch it back to the default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self.window.set_cursor( None );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I track the position of the mouse? ===&lt;br /&gt;
There are many different reasons you might want to track the position of the mouse in your activity, ranging from the entertaining ([[http://en.wikipedia.org/wiki/Xeyes]]) to the functional (hiding certain windows when the mouse hasn&#039;t moved for a couple of seconds and making those ui elements re-appear when the mouse has moved again).  Here is one way you can implement this functionality:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		...&lt;br /&gt;
		self.hideWidgetsTime = time.time()&lt;br /&gt;
		self.mx = -1&lt;br /&gt;
		self.my = -1&lt;br /&gt;
		self.HIDE_WIDGET_TIMEOUT_ID = gobject.timeout_add( 500, self.mouseMightHaveMovedCb )&lt;br /&gt;
&lt;br /&gt;
	def _mouseMightHaveMovedCb( self ):&lt;br /&gt;
		x, y = self.get_pointer()&lt;br /&gt;
		passedTime = 0&lt;br /&gt;
&lt;br /&gt;
		if (x != self.mx or y != self.my):&lt;br /&gt;
			self.hideWidgetsTime = time.time()&lt;br /&gt;
			if (self.hiddenWidgets):&lt;br /&gt;
				self.showWidgets()&lt;br /&gt;
				self.hiddenWidgets = False&lt;br /&gt;
		else:&lt;br /&gt;
			passedTime = time.time() - self.hideWidgetsTime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		if (passedTime &amp;gt;= 3):&lt;br /&gt;
			if (not self.hiddenWidgets):&lt;br /&gt;
				self.hideWidgets()&lt;br /&gt;
				self.hiddenWidgets = True&lt;br /&gt;
&lt;br /&gt;
		self.mx = x&lt;br /&gt;
		self.my = y&lt;br /&gt;
		return True&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
The tasks below are random useful techniques that have come up as I write code and documentation for this reference. They have yet to be categorized, but will be as a sufficient set of related entries are written.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I know when my activity is &amp;quot;active&amp;quot; or not? ===&lt;br /&gt;
&lt;br /&gt;
You can set an event using the VISIBILITY_NOTIFY_MASK constant in order to know when your activity changes visibility. Then in the callback for this event, you simply compare the event&#039;s state to gtk-defined variables for activity visibility. See the [http://www.pygtk.org/docs/pygtk/gdk-constants.html#gdk-visibility-state-constants GDK Visibility State Constants] section of gtk.gdk.Constants for more information. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        # Notify when the visibility state changes by calling self.__visibility_notify_cb&lt;br /&gt;
        # (PUT THIS IN YOUR ACTIVITY CODE - EG. THE __init__() METHOD)&lt;br /&gt;
        self.add_events(gtk.gdk.VISIBILITY_NOTIFY_MASK)&lt;br /&gt;
        self.connect(&amp;quot;visibility-notify-event&amp;quot;, self.__visibility_notify_cb)&lt;br /&gt;
    ...&lt;br /&gt;
    # Callback method for when the activity&#039;s visibility changes&lt;br /&gt;
    def __visibility_notify_cb(self, window, event):&lt;br /&gt;
        if event.state == gtk.gdk.VISIBILITY_FULLY_OBSCURED:&lt;br /&gt;
            print &amp;quot;I am not visible&amp;quot;&lt;br /&gt;
        elif event.state in [gtk.gdk.VISIBILITY_UNOBSCURED, gtk.gdk.VISIBILITY_PARTIAL]:&lt;br /&gt;
            print &amp;quot;I am visible&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I get the amount of free space available on disk under the /home directory tree? ===&lt;br /&gt;
The following function uses the [http://docs.python.org/lib/module-statvfs.html statvfs] module. The following code demonstrates how to get the total amount of free space under /home. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    #### Method: getFreespaceKb, returns the available freespace in kilobytes. &lt;br /&gt;
    def getFreespaceKb(self):&lt;br /&gt;
        stat = os.statvfs(&amp;quot;/home&amp;quot;)&lt;br /&gt;
        freebytes  = stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL]&lt;br /&gt;
        freekb = freebytes / 1024&lt;br /&gt;
        return freekb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note, however, that assuming anything about &amp;quot;/home&amp;quot; is a bad idea, better use os.environ[&#039;HOME&#039;] instead.  Rainbow will put your actual files elsewhere,&lt;br /&gt;
some on ramdisks, some on flash.  Be clear about which filesystem&#039;s free space you actually care about.&lt;br /&gt;
&lt;br /&gt;
=== How do I know whether my activity is running on a physical XO? ===&lt;br /&gt;
Sugar runs on ordinary computers as well as on XO&#039;s.  While your activity is typically going to be run on a real XO, some people will indeed run it elsewhere.  Normally you shouldn&#039;t write your activity to care whether it&#039;s on an XO or not.  If for some odd reason, you need to care, the easiest way to tell if you are on a physical XO is to check whether /sys/power/olpc-pm, an essential power management file for the XO, exists. &amp;lt;ref&amp;gt;[http://lists.laptop.org/pipermail/devel/2008-June/015923.html reliably detecting if running on an XO]&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;OLPC [[Power Management Interface]]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
...&lt;br /&gt;
      #Print out a boolean value that tells us whether we are on an XO or not. &lt;br /&gt;
      print os.path.exists(&#039;/sys/power/olpc-pm&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I know the current language setting on my XO? ===&lt;br /&gt;
The system variable &#039;LANG&#039; tells you which language is currently active on the XO. The following code shows how to look at the value of this variable. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
...&lt;br /&gt;
       _logger.debug(os.environ[&#039;LANG&#039;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I repeatedly call a specific method after N number of seconds? ===&lt;br /&gt;
The gobject.timeout_add() function allows you to invoke a callback method after a certain amount of time. If you want to repeatedly call a method, simply keep invoking the gobject.timeout_add function in your callback itself. The code below is a simple example, where the callback function is named repeatedly_call. Note that the timing of the callbacks are approximate. To get the process going, you should make an initial call to repeatedly_call() somewhere in your code. &lt;br /&gt;
&lt;br /&gt;
You can see a more substantive example of this pattern in use when we [[Pango#How_do_I_dynamically_set_the_text_in_a_pango_layout.3F | regularly update the time displayed on a pango layout object]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	#This method calls itself ROUGHLY every 1 second &lt;br /&gt;
	def repeatedly_call(self):&lt;br /&gt;
		now = datetime.datetime.now()&lt;br /&gt;
		gobject.timeout_add(self.repeat_period_msec, self.repeatedly_update_time)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I update the current build version of code that is running on my XO? ===&lt;br /&gt;
&lt;br /&gt;
There are several pages that give you instructions on how to install/update your current build. &lt;br /&gt;
&lt;br /&gt;
* If you already have a working build installed and an internet connection, first try [[olpc-update]]. &lt;br /&gt;
* If that doesn&#039;t work, you can look at instructions for an [[Activated upgrade]] that can be done via USB] boot. &lt;br /&gt;
&lt;br /&gt;
As the instructions on the pages linked above note, make sure to install your activities separately after you have upgraded to a specific base build.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== I am developing on an XO laptop, but my keyboard and language settings are not ideal. How can I change them? ===&lt;br /&gt;
&lt;br /&gt;
Internationalized laptops will often have settings that might slow you down while developing. To change around the language settings so you can better understand environment messages, use the [[Sugar Control Panel]]&lt;br /&gt;
&lt;br /&gt;
Keyboard settings on internationalized laptops&amp;lt;ref&amp;gt;[[Keyboard layouts#OLPC keyboard layouts]]&amp;lt;/ref&amp;gt; can also be suboptimal, especially as characters like &amp;quot;-&amp;quot; and &amp;quot;/&amp;quot; are in unfamiliar positions. You can use the &amp;lt;tt&amp;gt;setxkbmap&amp;lt;/tt&amp;gt; command in the [[Terminal Activity]] to reset the type of keyboard input used and then attach a standard U.S. keyboard that will allow you to type normally. The command below sets the keyboard to the US mapping (it will reset to the default internationalized mapping upon restart). &lt;br /&gt;
&lt;br /&gt;
 setxkbmap us&lt;br /&gt;
&lt;br /&gt;
=== My Python activity wants to use threads; how do I do that? ===&lt;br /&gt;
&lt;br /&gt;
A question that has been answered with limited success is which threading patterns are most appropriate for use in Sugar.  The following pattern of code to work fine in basic instances:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  #### Method: __init__, initialize this AnnotateActivity instance&lt;br /&gt;
    def __init__(self, handle):&lt;br /&gt;
        ...&lt;br /&gt;
        self.sample_thread = Thread(target=self.announce_thread, args=())&lt;br /&gt;
        self.sample_thread.setDaemon(0)&lt;br /&gt;
        self.sample_thread.start()&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
    def announce_thread(self):&lt;br /&gt;
        while (self.Running):&lt;br /&gt;
            time.sleep(1)&lt;br /&gt;
            print &amp;quot;thread running&amp;quot;&lt;br /&gt;
            self._update_chat_text(&amp;quot;Thread&amp;quot;, &amp;quot;In here&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the basic series of steps that most online documentation on python suggests to use when trying to work with threads in python. The problem is that it is unclear how this pattern relates to code that worked in the SimCity activity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import gobject&lt;br /&gt;
gobject.threads_init()&lt;br /&gt;
#import dbus.mainloop.glib&lt;br /&gt;
#dbus.mainloop.glib.threads_init()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that in the SimCity activity the pygame sound player would not produce sound reliably unless this setup was done.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Should the two patterns always be used in tandem? It seems that the latter code is mainly to initiate gobject and other libraries to work with threading, but it is unclear what restrictions there are with using threading with these libraries. Does one take precedence over the other? It is not clear if there is any problem with using the standard python threading code on the sugar technology stack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In fact, experiments with threading on sugar leads to several different problems. For one thing, thread termination was tricky - using the can_close() method for sugar activities to terminate an activity only killed threads in some circumstances. It did not properly handle terminating threads in the case of CTRL-C or terminal interrupts. You can try to catch signals (SIGINT, SIGTERM or SIGHUP), but you will still be running in to errors in terminating child threads using these as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another set of errors with threading comes up when trying to combine with stream tubes. The bottom line is that it is unclear what the scope of threading in a Sugar activity should be - should it simply work if you do the standard python threading pattern, is the use of the glib.threads_init and gobject.threads_init calls necessary, are there other interactions with threads and dbus that need to be accounted for? With more clarity from sugar developers on how the platform envisions threading to work in an activity, we can be more comfortable writing entries in the Almanac to help developers write error-free code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I customize the title that is displayed for each instance of my activity? ===&lt;br /&gt;
&lt;br /&gt;
By default, activity titles are just the generic activity names that you specify in your activity.info file. In some applications, you may want the activity title to be more dynamic. &lt;br /&gt;
&lt;br /&gt;
For example, it makes sense to set the title for different browser sessions to the active web page being visited. That way, when you look back in the journal at the different browser sessions you have run in the previous few days, you can identify unique sessions based on the website you happened to be visiting at the time. &lt;br /&gt;
&lt;br /&gt;
The code below shows how you can set the metadata for your activity to reflect a dynamic title based on whatever session criteria you feel is important. This example is adapted from the Browse activity, which sets activity instance titles based on the title of the current web page being visited. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        if self.metadata[&#039;mime_type&#039;] == &#039;text/plain&#039;:&lt;br /&gt;
            if not self._jobject.metadata[&#039;title_set_by_user&#039;] == &#039;1&#039;:&lt;br /&gt;
                if self._browser.props.title:&lt;br /&gt;
                    # Set the title of this activity to be the current &lt;br /&gt;
                    # title of the page being visited by the browser. &lt;br /&gt;
                    self.metadata[&#039;title&#039;] = self._browser.props.title&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What packages are available on sugar to support game development? ===&lt;br /&gt;
&lt;br /&gt;
If your activity will require tools that are typically needed to develop robust and clean video games, then you should utilize the [http://www.pygame.org/ pygame package]. It can be readily imported into any activity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import pygame&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I detect when one of the game buttons on the laptop have been pressed? ===&lt;br /&gt;
&lt;br /&gt;
The laptop game buttons (the circle, square, x, and check buttons next to the LCD) are encoded as page up, home, page down and end respectively. So, you can detect their press by listening for these specific events. For example, the code below listens for button presses and then just writes to an output widget which button was pressed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    #### Initialize this activity. &lt;br /&gt;
    def __init__(self, handle):&lt;br /&gt;
        ...&lt;br /&gt;
        self.connect(&#039;key-press-event&#039;, self._keyPressCb)&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
    #### Method _keyPressCb, which catches any presses of the game buttons. &lt;br /&gt;
    def _keyPressCb(self, widget, event):&lt;br /&gt;
&lt;br /&gt;
        keyname = gtk.gdk.keyval_name(event.keyval)&lt;br /&gt;
        &lt;br /&gt;
        if (keyname == &#039;KP_Page_Up&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nCircle Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Page_Down&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nX Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Home&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nSquare Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_End&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nCheck Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
&lt;br /&gt;
        return False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I detect if one of the joystick buttons has been pressed? ===&lt;br /&gt;
&lt;br /&gt;
This is the same process as detecting game buttons, except with different names for the keys. Again, you listen for &amp;quot;key-press-event&amp;quot; signals and then in your callback you check to see if the pressed button was one of the joystick keys. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    #### Initialize this activity. &lt;br /&gt;
    def __init__(self, handle):&lt;br /&gt;
        ...&lt;br /&gt;
        self.connect(&#039;key-press-event&#039;, self._keyPressCb)&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
    #### Method _keyPressCb, which catches any presses of the game buttons. &lt;br /&gt;
    def _keyPressCb(self, widget, event):&lt;br /&gt;
&lt;br /&gt;
        keyname = gtk.gdk.keyval_name(event.keyval)&lt;br /&gt;
        &lt;br /&gt;
        if (keyname == &#039;KP_Up&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nUp Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Down&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nDown Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Left&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nLeft Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Right&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nRight Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
&lt;br /&gt;
        return False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do i remove an specific button from the toolbar? ===&lt;br /&gt;
&lt;br /&gt;
This is an example of the share button is removed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    activity_toolbar = toolbox.get_activity_toolbar()&lt;br /&gt;
    activity_toolbar.remove(activity_toolbar.share)&lt;br /&gt;
    activity_toolbar.share = None&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Development Team]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Development_Team/Almanac&amp;diff=33475</id>
		<title>Development Team/Almanac</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Development_Team/Almanac&amp;diff=33475"/>
		<updated>2009-07-15T16:06:59Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Almanac}}&lt;br /&gt;
{{Almanac TOC}}&lt;br /&gt;
== How do I get additional help beyond this almanac? ==&lt;br /&gt;
* Looking to get started with the basics of Sugar development? Check out Christoph Derndorfer&#039;s [http://www.olpcaustria.org/mediawiki/index.php/Activity_handbook Activity Handbook]. &lt;br /&gt;
* See also [[Development Team/Almanac/Code Snippets]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, on to the actual almanac ...&lt;br /&gt;
&lt;br /&gt;
== Where can I see API changes? ==&lt;br /&gt;
API changes between OLPC releases can be seen here: [[Development Team/Almanac/API Changes|API Changes]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
=== How do I structure my files so that they are a valid sugar activity?  === &lt;br /&gt;
Information on activity bundle structure can be found here: [[Development Team/Almanac/Activity Bundles|Activity Bundles]]&lt;br /&gt;
&lt;br /&gt;
=== How do I make an icon for my activity? ===&lt;br /&gt;
Information on what you need to do can be found here: [[Development Team/Almanac/Making Icons|Making Icons]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.env|sugar.env]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.profile|sugar.profile]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.mime|sugar.mime]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.logger|sugar.logger]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.activity ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.activity.activity|sugar.activity.activity]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.activity.activityfactory|sugar.activity.activityfactory]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.activity.registry|sugar.activity.registry]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.datastore ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.datastore.datastore|sugar.datastore.datastore]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.graphics ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.alert|sugar.graphics.alert]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.icon|sugar.graphics.icon]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.notebook|sugar.graphics.notebook]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.toolbutton|sugar.graphics.toolbutton]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.toolbox|sugar.graphics.toolbox]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.style|sugar.graphics.style]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.presence ==&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence|Sugar.presence]]&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence.activity|Sugar.presence.activity]]&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence.buddy|Sugar.presence.buddy]]&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence.presenceservice|Sugar.presence.presenceservice]]&lt;br /&gt;
&lt;br /&gt;
== Clipboard ==&lt;br /&gt;
* Notes on using [[Development Team/Almanac/GTK&#039;s Clipboard Module|GTK&#039;s Clipboard Module]]&lt;br /&gt;
&lt;br /&gt;
== Logging ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.logger|sugar.logger]]&lt;br /&gt;
* Notes on using [[Development Team/Almanac/Python Standard Logging|Python Standard Logging]]&lt;br /&gt;
&lt;br /&gt;
== Internationalization ==&lt;br /&gt;
*[[Development Team/Almanac/Internationalization|Internationalization]]&lt;br /&gt;
&lt;br /&gt;
== Text and Graphics for Sugar Activities ==&lt;br /&gt;
* [[Development Team/Almanac/Pango|Pango]]&lt;br /&gt;
=== How do I create a text box for code editing? ===&lt;br /&gt;
You can use gtksourceview2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import gtk&lt;br /&gt;
import gtksourceview2&lt;br /&gt;
from sugar.graphics import style&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# set up the buffer&lt;br /&gt;
buffer = gtksourceview2.Buffer()&lt;br /&gt;
if hasattr(buffer, &#039;set_highlight&#039;): # handle different API versions&lt;br /&gt;
    buffer.set_highlight(True)&lt;br /&gt;
else:&lt;br /&gt;
    buffer.set_highlight_syntax(True)&lt;br /&gt;
&lt;br /&gt;
# set mime type for the buffer&lt;br /&gt;
lang_manager = gtksourceview2.language_manager_get_default()&lt;br /&gt;
if hasattr(lang_manager, &#039;list_languages&#039;): # again, handle different APIs&lt;br /&gt;
    langs = lang_manager.list_languages()&lt;br /&gt;
else:&lt;br /&gt;
    lang_ids = lang_manager.get_language_ids()&lt;br /&gt;
    langs = [lang_manager.get_language(lang_id) &lt;br /&gt;
                  for lang_id in lang_ids]&lt;br /&gt;
for lang in langs:&lt;br /&gt;
    for m in lang.get_mime_types():&lt;br /&gt;
        if m == mime_type:        # &amp;lt;-- this is the mime type you want&lt;br /&gt;
            buffer.set_language(lang)&lt;br /&gt;
&lt;br /&gt;
# set up the view object, use it like gtk.TextView&lt;br /&gt;
view = gtksourceview2.View(buffer)&lt;br /&gt;
view.set_size_request(300, 450)&lt;br /&gt;
view.set_editable(True)&lt;br /&gt;
view.set_cursor_visible(True)&lt;br /&gt;
view.set_show_line_numbers(True)&lt;br /&gt;
view.set_wrap_mode(gtk.WRAP_CHAR)&lt;br /&gt;
view.set_right_margin_position(80)&lt;br /&gt;
#view.set_highlight_current_line(True) #FIXME: Ugly color&lt;br /&gt;
view.set_auto_indent(True)&lt;br /&gt;
view.modify_font(pango.FontDescription(&amp;quot;Monospace &amp;quot; +&lt;br /&gt;
                 str(style.FONT_SIZE)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the text in the buffer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buffer.set_text(text)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get all the text:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can find more in the Pippy source and in jarabe.view.sourceview.&lt;br /&gt;
&lt;br /&gt;
== Audio &amp;amp; Video ==&lt;br /&gt;
* [[Development Team/Almanac/GStreamer|GStreamer]]&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
=== How do I change the mouse cursor in my activity to the wait cursor? ===&lt;br /&gt;
In your activity subclass:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self.window.set_cursor( gtk.gdk.Cursor(gtk.gdk.WATCH) )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and to switch it back to the default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self.window.set_cursor( None );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I track the position of the mouse? ===&lt;br /&gt;
There are many different reasons you might want to track the position of the mouse in your activity, ranging from the entertaining ([[http://en.wikipedia.org/wiki/Xeyes]]) to the functional (hiding certain windows when the mouse hasn&#039;t moved for a couple of seconds and making those ui elements re-appear when the mouse has moved again).  Here is one way you can implement this functionality:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		...&lt;br /&gt;
		self.hideWidgetsTime = time.time()&lt;br /&gt;
		self.mx = -1&lt;br /&gt;
		self.my = -1&lt;br /&gt;
		self.HIDE_WIDGET_TIMEOUT_ID = gobject.timeout_add( 500, self.mouseMightHaveMovedCb )&lt;br /&gt;
&lt;br /&gt;
	def _mouseMightHaveMovedCb( self ):&lt;br /&gt;
		x, y = self.get_pointer()&lt;br /&gt;
		passedTime = 0&lt;br /&gt;
&lt;br /&gt;
		if (x != self.mx or y != self.my):&lt;br /&gt;
			self.hideWidgetsTime = time.time()&lt;br /&gt;
			if (self.hiddenWidgets):&lt;br /&gt;
				self.showWidgets()&lt;br /&gt;
				self.hiddenWidgets = False&lt;br /&gt;
		else:&lt;br /&gt;
			passedTime = time.time() - self.hideWidgetsTime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		if (passedTime &amp;gt;= 3):&lt;br /&gt;
			if (not self.hiddenWidgets):&lt;br /&gt;
				self.hideWidgets()&lt;br /&gt;
				self.hiddenWidgets = True&lt;br /&gt;
&lt;br /&gt;
		self.mx = x&lt;br /&gt;
		self.my = y&lt;br /&gt;
		return True&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
The tasks below are random useful techniques that have come up as I write code and documentation for this reference. They have yet to be categorized, but will be as a sufficient set of related entries are written.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I know when my activity is &amp;quot;active&amp;quot; or not? ===&lt;br /&gt;
&lt;br /&gt;
You can set an event using the VISIBILITY_NOTIFY_MASK constant in order to know when your activity changes visibility. Then in the callback for this event, you simply compare the event&#039;s state to gtk-defined variables for activity visibility. See the [http://www.pygtk.org/docs/pygtk/gdk-constants.html#gdk-visibility-state-constants GDK Visibility State Constants] section of gtk.gdk.Constants for more information. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        # Notify when the visibility state changes by calling self.__visibility_notify_cb&lt;br /&gt;
        # (PUT THIS IN YOUR ACTIVITY CODE - EG. THE __init__() METHOD)&lt;br /&gt;
        self.add_events(gtk.gdk.VISIBILITY_NOTIFY_MASK)&lt;br /&gt;
        self.connect(&amp;quot;visibility-notify-event&amp;quot;, self.__visibility_notify_cb)&lt;br /&gt;
    ...&lt;br /&gt;
    # Callback method for when the activity&#039;s visibility changes&lt;br /&gt;
    def __visibility_notify_cb(self, window, event):&lt;br /&gt;
        if event.state == gtk.gdk.VISIBILITY_FULLY_OBSCURED:&lt;br /&gt;
            print &amp;quot;I am not visible&amp;quot;&lt;br /&gt;
        elif event.state in [gtk.gdk.VISIBILITY_UNOBSCURED, gtk.gdk.VISIBILITY_PARTIAL]:&lt;br /&gt;
            print &amp;quot;I am visible&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I get the amount of free space available on disk under the /home directory tree? ===&lt;br /&gt;
The following function uses the [http://docs.python.org/lib/module-statvfs.html statvfs] module. The following code demonstrates how to get the total amount of free space under /home. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    #### Method: getFreespaceKb, returns the available freespace in kilobytes. &lt;br /&gt;
    def getFreespaceKb(self):&lt;br /&gt;
        stat = os.statvfs(&amp;quot;/home&amp;quot;)&lt;br /&gt;
        freebytes  = stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL]&lt;br /&gt;
        freekb = freebytes / 1024&lt;br /&gt;
        return freekb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note, however, that assuming anything about &amp;quot;/home&amp;quot; is a bad idea, better use os.environ[&#039;HOME&#039;] instead.  Rainbow will put your actual files elsewhere,&lt;br /&gt;
some on ramdisks, some on flash.  Be clear about which filesystem&#039;s free space you actually care about.&lt;br /&gt;
&lt;br /&gt;
=== How do I know whether my activity is running on a physical XO? ===&lt;br /&gt;
Sugar runs on ordinary computers as well as on XO&#039;s.  While your activity is typically going to be run on a real XO, some people will indeed run it elsewhere.  Normally you shouldn&#039;t write your activity to care whether it&#039;s on an XO or not.  If for some odd reason, you need to care, the easiest way to tell if you are on a physical XO is to check whether /sys/power/olpc-pm, an essential power management file for the XO, exists. &amp;lt;ref&amp;gt;[http://lists.laptop.org/pipermail/devel/2008-June/015923.html reliably detecting if running on an XO]&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;OLPC [[Power Management Interface]]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
...&lt;br /&gt;
      #Print out a boolean value that tells us whether we are on an XO or not. &lt;br /&gt;
      print os.path.exists(&#039;/sys/power/olpc-pm&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I know the current language setting on my XO? ===&lt;br /&gt;
The system variable &#039;LANG&#039; tells you which language is currently active on the XO. The following code shows how to look at the value of this variable. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
...&lt;br /&gt;
       _logger.debug(os.environ[&#039;LANG&#039;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I repeatedly call a specific method after N number of seconds? ===&lt;br /&gt;
The gobject.timeout_add() function allows you to invoke a callback method after a certain amount of time. If you want to repeatedly call a method, simply keep invoking the gobject.timeout_add function in your callback itself. The code below is a simple example, where the callback function is named repeatedly_call. Note that the timing of the callbacks are approximate. To get the process going, you should make an initial call to repeatedly_call() somewhere in your code. &lt;br /&gt;
&lt;br /&gt;
You can see a more substantive example of this pattern in use when we [[Pango#How_do_I_dynamically_set_the_text_in_a_pango_layout.3F | regularly update the time displayed on a pango layout object]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	#This method calls itself ROUGHLY every 1 second &lt;br /&gt;
	def repeatedly_call(self):&lt;br /&gt;
		now = datetime.datetime.now()&lt;br /&gt;
		gobject.timeout_add(self.repeat_period_msec, self.repeatedly_update_time)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I update the current build version of code that is running on my XO? ===&lt;br /&gt;
&lt;br /&gt;
There are several pages that give you instructions on how to install/update your current build. &lt;br /&gt;
&lt;br /&gt;
* If you already have a working build installed and an internet connection, first try [[olpc-update]]. &lt;br /&gt;
* If that doesn&#039;t work, you can look at instructions for an [[Activated upgrade]] that can be done via USB] boot. &lt;br /&gt;
&lt;br /&gt;
As the instructions on the pages linked above note, make sure to install your activities separately after you have upgraded to a specific base build.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== I am developing on an XO laptop, but my keyboard and language settings are not ideal. How can I change them? ===&lt;br /&gt;
&lt;br /&gt;
Internationalized laptops will often have settings that might slow you down while developing. To change around the language settings so you can better understand environment messages, use the [[Sugar Control Panel]]&lt;br /&gt;
&lt;br /&gt;
Keyboard settings on internationalized laptops&amp;lt;ref&amp;gt;[[Keyboard layouts#OLPC keyboard layouts]]&amp;lt;/ref&amp;gt; can also be suboptimal, especially as characters like &amp;quot;-&amp;quot; and &amp;quot;/&amp;quot; are in unfamiliar positions. You can use the &amp;lt;tt&amp;gt;setxkbmap&amp;lt;/tt&amp;gt; command in the [[Terminal Activity]] to reset the type of keyboard input used and then attach a standard U.S. keyboard that will allow you to type normally. The command below sets the keyboard to the US mapping (it will reset to the default internationalized mapping upon restart). &lt;br /&gt;
&lt;br /&gt;
 setxkbmap us&lt;br /&gt;
&lt;br /&gt;
=== My Python activity wants to use threads; how do I do that? ===&lt;br /&gt;
&lt;br /&gt;
A question that has been answered with limited success is which threading patterns are most appropriate for use in Sugar.  The following pattern of code to work fine in basic instances:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  #### Method: __init__, initialize this AnnotateActivity instance&lt;br /&gt;
    def __init__(self, handle):&lt;br /&gt;
        ...&lt;br /&gt;
        self.sample_thread = Thread(target=self.announce_thread, args=())&lt;br /&gt;
        self.sample_thread.setDaemon(0)&lt;br /&gt;
        self.sample_thread.start()&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
    def announce_thread(self):&lt;br /&gt;
        while (self.Running):&lt;br /&gt;
            time.sleep(1)&lt;br /&gt;
            print &amp;quot;thread running&amp;quot;&lt;br /&gt;
            self._update_chat_text(&amp;quot;Thread&amp;quot;, &amp;quot;In here&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the basic series of steps that most online documentation on python suggests to use when trying to work with threads in python. The problem is that it is unclear how this pattern relates to code that worked in the SimCity activity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import gobject&lt;br /&gt;
gobject.threads_init()&lt;br /&gt;
#import dbus.mainloop.glib&lt;br /&gt;
#dbus.mainloop.glib.threads_init()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that in the SimCity activity the pygame sound player would not produce sound reliably unless this setup was done.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Should the two patterns always be used in tandem? It seems that the latter code is mainly to initiate gobject and other libraries to work with threading, but it is unclear what restrictions there are with using threading with these libraries. Does one take precedence over the other? It is not clear if there is any problem with using the standard python threading code on the sugar technology stack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In fact, experiments with threading on sugar leads to several different problems. For one thing, thread termination was tricky - using the can_close() method for sugar activities to terminate an activity only killed threads in some circumstances. It did not properly handle terminating threads in the case of CTRL-C or terminal interrupts. You can try to catch signals (SIGINT, SIGTERM or SIGHUP), but you will still be running in to errors in terminating child threads using these as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another set of errors with threading comes up when trying to combine with stream tubes. The bottom line is that it is unclear what the scope of threading in a Sugar activity should be - should it simply work if you do the standard python threading pattern, is the use of the glib.threads_init and gobject.threads_init calls necessary, are there other interactions with threads and dbus that need to be accounted for? With more clarity from sugar developers on how the platform envisions threading to work in an activity, we can be more comfortable writing entries in the Almanac to help developers write error-free code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I customize the title that is displayed for each instance of my activity? ===&lt;br /&gt;
&lt;br /&gt;
By default, activity titles are just the generic activity names that you specify in your activity.info file. In some applications, you may want the activity title to be more dynamic. &lt;br /&gt;
&lt;br /&gt;
For example, it makes sense to set the title for different browser sessions to the active web page being visited. That way, when you look back in the journal at the different browser sessions you have run in the previous few days, you can identify unique sessions based on the website you happened to be visiting at the time. &lt;br /&gt;
&lt;br /&gt;
The code below shows how you can set the metadata for your activity to reflect a dynamic title based on whatever session criteria you feel is important. This example is adapted from the Browse activity, which sets activity instance titles based on the title of the current web page being visited. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        if self.metadata[&#039;mime_type&#039;] == &#039;text/plain&#039;:&lt;br /&gt;
            if not self._jobject.metadata[&#039;title_set_by_user&#039;] == &#039;1&#039;:&lt;br /&gt;
                if self._browser.props.title:&lt;br /&gt;
                    # Set the title of this activity to be the current &lt;br /&gt;
                    # title of the page being visited by the browser. &lt;br /&gt;
                    self.metadata[&#039;title&#039;] = self._browser.props.title&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What packages are available on sugar to support game development? ===&lt;br /&gt;
&lt;br /&gt;
If your activity will require tools that are typically needed to develop robust and clean video games, then you should utilize the [http://www.pygame.org/ pygame package]. It can be readily imported into any activity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import pygame&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I detect when one of the game buttons on the laptop have been pressed? ===&lt;br /&gt;
&lt;br /&gt;
The laptop game buttons (the circle, square, x, and check buttons next to the LCD) are encoded as page up, home, page down and end respectively. So, you can detect their press by listening for these specific events. For example, the code below listens for button presses and then just writes to an output widget which button was pressed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    #### Initialize this activity. &lt;br /&gt;
    def __init__(self, handle):&lt;br /&gt;
        ...&lt;br /&gt;
        self.connect(&#039;key-press-event&#039;, self._keyPressCb)&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
    #### Method _keyPressCb, which catches any presses of the game buttons. &lt;br /&gt;
    def _keyPressCb(self, widget, event):&lt;br /&gt;
&lt;br /&gt;
        keyname = gtk.gdk.keyval_name(event.keyval)&lt;br /&gt;
        &lt;br /&gt;
        if (keyname == &#039;KP_Page_Up&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nCircle Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Page_Down&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nX Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Home&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nSquare Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_End&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nCheck Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
&lt;br /&gt;
        return False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I detect if one of the joystick buttons has been pressed? ===&lt;br /&gt;
&lt;br /&gt;
This is the same process as detecting game buttons, except with different names for the keys. Again, you listen for &amp;quot;key-press-event&amp;quot; signals and then in your callback you check to see if the pressed button was one of the joystick keys. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    #### Initialize this activity. &lt;br /&gt;
    def __init__(self, handle):&lt;br /&gt;
        ...&lt;br /&gt;
        self.connect(&#039;key-press-event&#039;, self._keyPressCb)&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
    #### Method _keyPressCb, which catches any presses of the game buttons. &lt;br /&gt;
    def _keyPressCb(self, widget, event):&lt;br /&gt;
&lt;br /&gt;
        keyname = gtk.gdk.keyval_name(event.keyval)&lt;br /&gt;
        &lt;br /&gt;
        if (keyname == &#039;KP_Up&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nUp Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Down&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nDown Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Left&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nLeft Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Right&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nRight Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
&lt;br /&gt;
        return False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do i remove an specific button from the toolbar? ===&lt;br /&gt;
&lt;br /&gt;
This is an example of the share button is removed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    activity_toolbar = toolbox.get_activity_toolbar()&lt;br /&gt;
    activity_toolbar.remove(activity_toolbar.share)&lt;br /&gt;
    activity_toolbar.share = None&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Development Team]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Development_Team/Almanac&amp;diff=33474</id>
		<title>Development Team/Almanac</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Development_Team/Almanac&amp;diff=33474"/>
		<updated>2009-07-15T16:06:03Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Almanac}}&lt;br /&gt;
{{Almanac TOC}}&lt;br /&gt;
== How do I get additional help beyond this almanac? ==&lt;br /&gt;
* Looking to get started with the basics of Sugar development? Check out Christoph Derndorfer&#039;s [http://www.olpcaustria.org/mediawiki/index.php/Activity_handbook Activity Handbook]. &lt;br /&gt;
* See also [[Development Team/Almanac/Code Snippets]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, on to the actual almanac ...&lt;br /&gt;
&lt;br /&gt;
== Where can I see API changes? ==&lt;br /&gt;
API changes between OLPC releases can be seen here: [[Development Team/Almanac/API Changes|API Changes]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
=== How do I structure my files so that they are a valid sugar activity?  === &lt;br /&gt;
Information on activity bundle structure can be found here: [[Development Team/Almanac/Activity Bundles|Activity Bundles]]&lt;br /&gt;
&lt;br /&gt;
=== How do I make an icon for my activity? ===&lt;br /&gt;
Information on what you need to do can be found here: [[Development Team/Almanac/Making Icons|Making Icons]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.env|sugar.env]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.profile|sugar.profile]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.mime|sugar.mime]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.logger|sugar.logger]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.activity ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.activity.activity|sugar.activity.activity]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.activity.activityfactory|sugar.activity.activityfactory]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.activity.registry|sugar.activity.registry]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.datastore ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.datastore.datastore|sugar.datastore.datastore]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.graphics ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.alert|sugar.graphics.alert]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.icon|sugar.graphics.icon]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.notebook|sugar.graphics.notebook]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.toolbutton|sugar.graphics.toolbutton]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.toolbox|sugar.graphics.toolbox]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.style|sugar.graphics.style]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.presence ==&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence|Sugar.presence]]&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence.activity|Sugar.presence.activity]]&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence.buddy|Sugar.presence.buddy]]&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence.presenceservice|Sugar.presence.presenceservice]]&lt;br /&gt;
&lt;br /&gt;
== Clipboard ==&lt;br /&gt;
* Notes on using [[Development Team/Almanac/GTK&#039;s Clipboard Module|GTK&#039;s Clipboard Module]]&lt;br /&gt;
&lt;br /&gt;
== Logging ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.logger|sugar.logger]]&lt;br /&gt;
* Notes on using [[Development Team/Almanac/Python Standard Logging|Python Standard Logging]]&lt;br /&gt;
&lt;br /&gt;
== Internationalization ==&lt;br /&gt;
*[[Development Team/Almanac/Internationalization|Internationalization]]&lt;br /&gt;
&lt;br /&gt;
== Text and Graphics for Sugar Activities ==&lt;br /&gt;
* [[Development Team/Almanac/Pango|Pango]]&lt;br /&gt;
=== How do I create a text box for code editing? ===&lt;br /&gt;
You can use gtksourceview2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import gtk&lt;br /&gt;
import gtksourceview2&lt;br /&gt;
from sugar.graphics import style&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# set up the buffer&lt;br /&gt;
buffer = gtksourceview2.Buffer()&lt;br /&gt;
if hasattr(buffer, &#039;set_highlight&#039;): # handle different API versions&lt;br /&gt;
    buffer.set_highlight(True)&lt;br /&gt;
else:&lt;br /&gt;
    buffer.set_highlight_syntax(True)&lt;br /&gt;
&lt;br /&gt;
# set mime type for the buffer&lt;br /&gt;
lang_manager = gtksourceview2.language_manager_get_default()&lt;br /&gt;
if hasattr(lang_manager, &#039;list_languages&#039;): # again, handle different APIs&lt;br /&gt;
    langs = lang_manager.list_languages()&lt;br /&gt;
else:&lt;br /&gt;
    lang_ids = lang_manager.get_language_ids()&lt;br /&gt;
    langs = [lang_manager.get_language(lang_id) &lt;br /&gt;
                  for lang_id in lang_ids]&lt;br /&gt;
for lang in langs:&lt;br /&gt;
    for m in lang.get_mime_types():&lt;br /&gt;
        if m == mime_type:        # &amp;lt;-- this is the mime type you want&lt;br /&gt;
            buffer.set_language(lang)&lt;br /&gt;
&lt;br /&gt;
# set up the view object, use it like gtk.TextView&lt;br /&gt;
view = gtksourceview2.View(buffer)&lt;br /&gt;
view.set_size_request(300, 450)&lt;br /&gt;
view.set_editable(True)&lt;br /&gt;
view.set_cursor_visible(True)&lt;br /&gt;
view.set_show_line_numbers(True)&lt;br /&gt;
view.set_wrap_mode(gtk.WRAP_CHAR)&lt;br /&gt;
view.set_right_margin_position(80)&lt;br /&gt;
#view.set_highlight_current_line(True) #FIXME: Ugly color&lt;br /&gt;
view.set_auto_indent(True)&lt;br /&gt;
view.modify_font(pango.FontDescription(&amp;quot;Monospace &amp;quot; +&lt;br /&gt;
                 str(style.FONT_SIZE)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the text in the buffer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buffer.set_text(text)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get all the text:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can find more in the Pippy source and in jarabe.view.sourceview.&lt;br /&gt;
&lt;br /&gt;
== Audio &amp;amp; Video ==&lt;br /&gt;
* [[Development Team/Almanac/GStreamer|GStreamer]]&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
=== How do I change the mouse cursor in my activity to the wait cursor? ===&lt;br /&gt;
In your activity subclass:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self.window.set_cursor( gtk.gdk.Cursor(gtk.gdk.WATCH) )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and to switch it back to the default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self.window.set_cursor( None );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I track the position of the mouse? ===&lt;br /&gt;
There are many different reasons you might want to track the position of the mouse in your activity, ranging from the entertaining ([[http://en.wikipedia.org/wiki/Xeyes]]) to the functional (hiding certain windows when the mouse hasn&#039;t moved for a couple of seconds and making those ui elements re-appear when the mouse has moved again).  Here is one way you can implement this functionality:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		...&lt;br /&gt;
		self.hideWidgetsTime = time.time()&lt;br /&gt;
		self.mx = -1&lt;br /&gt;
		self.my = -1&lt;br /&gt;
		self.HIDE_WIDGET_TIMEOUT_ID = gobject.timeout_add( 500, self.mouseMightHaveMovedCb )&lt;br /&gt;
&lt;br /&gt;
	def _mouseMightHaveMovedCb( self ):&lt;br /&gt;
		x, y = self.get_pointer()&lt;br /&gt;
		passedTime = 0&lt;br /&gt;
&lt;br /&gt;
		if (x != self.mx or y != self.my):&lt;br /&gt;
			self.hideWidgetsTime = time.time()&lt;br /&gt;
			if (self.hiddenWidgets):&lt;br /&gt;
				self.showWidgets()&lt;br /&gt;
				self.hiddenWidgets = False&lt;br /&gt;
		else:&lt;br /&gt;
			passedTime = time.time() - self.hideWidgetsTime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		if (passedTime &amp;gt;= 3):&lt;br /&gt;
			if (not self.hiddenWidgets):&lt;br /&gt;
				self.hideWidgets()&lt;br /&gt;
				self.hiddenWidgets = True&lt;br /&gt;
&lt;br /&gt;
		self.mx = x&lt;br /&gt;
		self.my = y&lt;br /&gt;
		return True&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
The tasks below are random useful techniques that have come up as I write code and documentation for this reference. They have yet to be categorized, but will be as a sufficient set of related entries are written.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I know when my activity is &amp;quot;active&amp;quot; or not? ===&lt;br /&gt;
&lt;br /&gt;
You can set an event using the VISIBILITY_NOTIFY_MASK constant in order to know when your activity changes visibility. Then in the callback for this event, you simply compare the event&#039;s state to gtk-defined variables for activity visibility. See the [http://www.pygtk.org/docs/pygtk/gdk-constants.html#gdk-visibility-state-constants GDK Visibility State Constants] section of gtk.gdk.Constants for more information. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        # Notify when the visibility state changes by calling self.__visibility_notify_cb&lt;br /&gt;
        # (PUT THIS IN YOUR ACTIVITY CODE - EG. THE __init__() METHOD)&lt;br /&gt;
        self.add_events(gtk.gdk.VISIBILITY_NOTIFY_MASK)&lt;br /&gt;
        self.connect(&amp;quot;visibility-notify-event&amp;quot;, self.__visibility_notify_cb)&lt;br /&gt;
    ...&lt;br /&gt;
    # Callback method for when the activity&#039;s visibility changes&lt;br /&gt;
    def __visibility_notify_cb(self, window, event):&lt;br /&gt;
        if event.state == gtk.gdk.VISIBILITY_FULLY_OBSCURED:&lt;br /&gt;
            print &amp;quot;I am not visible&amp;quot;&lt;br /&gt;
        elif event.state in [gtk.gdk.VISIBILITY_UNOBSCURED, gtk.gdk.VISIBILITY_PARTIAL]:&lt;br /&gt;
            print &amp;quot;I am visible&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I get the amount of free space available on disk under the /home directory tree? ===&lt;br /&gt;
The following function uses the [http://docs.python.org/lib/module-statvfs.html statvfs] module. The following code demonstrates how to get the total amount of free space under /home. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    #### Method: getFreespaceKb, returns the available freespace in kilobytes. &lt;br /&gt;
    def getFreespaceKb(self):&lt;br /&gt;
        stat = os.statvfs(&amp;quot;/home&amp;quot;)&lt;br /&gt;
        freebytes  = stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL]&lt;br /&gt;
        freekb = freebytes / 1024&lt;br /&gt;
        return freekb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note, however, that assuming anything about &amp;quot;/home&amp;quot; is a bad idea, better use os.environ[&#039;HOME&#039;] instead.  Rainbow will put your actual files elsewhere,&lt;br /&gt;
some on ramdisks, some on flash.  Be clear about which filesystem&#039;s free space you actually care about.&lt;br /&gt;
&lt;br /&gt;
=== How do I know whether my activity is running on a physical XO? ===&lt;br /&gt;
Sugar runs on ordinary computers as well as on XO&#039;s.  While your activity is typically going to be run on a real XO, some people will indeed run it elsewhere.  Normally you shouldn&#039;t write your activity to care whether it&#039;s on an XO or not.  If for some odd reason, you need to care, the easiest way to tell if you are on a physical XO is to check whether /sys/power/olpc-pm, an essential power management file for the XO, exists. &amp;lt;ref&amp;gt;[http://lists.laptop.org/pipermail/devel/2008-June/015923.html reliably detecting if running on an XO]&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;OLPC [[Power Management Interface]]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
...&lt;br /&gt;
      #Print out a boolean value that tells us whether we are on an XO or not. &lt;br /&gt;
      print os.path.exists(&#039;/sys/power/olpc-pm&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I know the current language setting on my XO? ===&lt;br /&gt;
The system variable &#039;LANG&#039; tells you which language is currently active on the XO. The following code shows how to look at the value of this variable. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
...&lt;br /&gt;
       _logger.debug(os.environ[&#039;LANG&#039;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I repeatedly call a specific method after N number of seconds? ===&lt;br /&gt;
The gobject.timeout_add() function allows you to invoke a callback method after a certain amount of time. If you want to repeatedly call a method, simply keep invoking the gobject.timeout_add function in your callback itself. The code below is a simple example, where the callback function is named repeatedly_call. Note that the timing of the callbacks are approximate. To get the process going, you should make an initial call to repeatedly_call() somewhere in your code. &lt;br /&gt;
&lt;br /&gt;
You can see a more substantive example of this pattern in use when we [[Pango#How_do_I_dynamically_set_the_text_in_a_pango_layout.3F | regularly update the time displayed on a pango layout object]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	#This method calls itself ROUGHLY every 1 second &lt;br /&gt;
	def repeatedly_call(self):&lt;br /&gt;
		now = datetime.datetime.now()&lt;br /&gt;
		gobject.timeout_add(self.repeat_period_msec, self.repeatedly_update_time)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I update the current build version of code that is running on my XO? ===&lt;br /&gt;
&lt;br /&gt;
There are several pages that give you instructions on how to install/update your current build. &lt;br /&gt;
&lt;br /&gt;
* If you already have a working build installed and an internet connection, first try [[olpc-update]]. &lt;br /&gt;
* If that doesn&#039;t work, you can look at instructions for an [[Activated upgrade]] that can be done via USB] boot. &lt;br /&gt;
&lt;br /&gt;
As the instructions on the pages linked above note, make sure to install your activities separately after you have upgraded to a specific base build.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== I am developing on an XO laptop, but my keyboard and language settings are not ideal. How can I change them? ===&lt;br /&gt;
&lt;br /&gt;
Internationalized laptops will often have settings that might slow you down while developing. To change around the language settings so you can better understand environment messages, use the [[Sugar Control Panel]]&lt;br /&gt;
&lt;br /&gt;
Keyboard settings on internationalized laptops&amp;lt;ref&amp;gt;[[Keyboard layouts#OLPC keyboard layouts]]&amp;lt;/ref&amp;gt; can also be suboptimal, especially as characters like &amp;quot;-&amp;quot; and &amp;quot;/&amp;quot; are in unfamiliar positions. You can use the &amp;lt;tt&amp;gt;setxkbmap&amp;lt;/tt&amp;gt; command in the [[Terminal Activity]] to reset the type of keyboard input used and then attach a standard U.S. keyboard that will allow you to type normally. The command below sets the keyboard to the US mapping (it will reset to the default internationalized mapping upon restart). &lt;br /&gt;
&lt;br /&gt;
 setxkbmap us&lt;br /&gt;
&lt;br /&gt;
=== My Python activity wants to use threads; how do I do that? ===&lt;br /&gt;
&lt;br /&gt;
A question that has been answered with limited success is which threading patterns are most appropriate for use in Sugar.  The following pattern of code to work fine in basic instances:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  #### Method: __init__, initialize this AnnotateActivity instance&lt;br /&gt;
    def __init__(self, handle):&lt;br /&gt;
        ...&lt;br /&gt;
        self.sample_thread = Thread(target=self.announce_thread, args=())&lt;br /&gt;
        self.sample_thread.setDaemon(0)&lt;br /&gt;
        self.sample_thread.start()&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
    def announce_thread(self):&lt;br /&gt;
        while (self.Running):&lt;br /&gt;
            time.sleep(1)&lt;br /&gt;
            print &amp;quot;thread running&amp;quot;&lt;br /&gt;
            self._update_chat_text(&amp;quot;Thread&amp;quot;, &amp;quot;In here&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the basic series of steps that most online documentation on python suggests to use when trying to work with threads in python. The problem is that it is unclear how this pattern relates to code that worked in the SimCity activity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import gobject&lt;br /&gt;
gobject.threads_init()&lt;br /&gt;
#import dbus.mainloop.glib&lt;br /&gt;
#dbus.mainloop.glib.threads_init()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that in the SimCity activity the pygame sound player would not produce sound reliably unless this setup was done.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Should the two patterns always be used in tandem? It seems that the latter code is mainly to initiate gobject and other libraries to work with threading, but it is unclear what restrictions there are with using threading with these libraries. Does one take precedence over the other? It is not clear if there is any problem with using the standard python threading code on the sugar technology stack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In fact, experiments with threading on sugar leads to several different problems. For one thing, thread termination was tricky - using the can_close() method for sugar activities to terminate an activity only killed threads in some circumstances. It did not properly handle terminating threads in the case of CTRL-C or terminal interrupts. You can try to catch signals (SIGINT, SIGTERM or SIGHUP), but you will still be running in to errors in terminating child threads using these as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another set of errors with threading comes up when trying to combine with stream tubes. The bottom line is that it is unclear what the scope of threading in a Sugar activity should be - should it simply work if you do the standard python threading pattern, is the use of the glib.threads_init and gobject.threads_init calls necessary, are there other interactions with threads and dbus that need to be accounted for? With more clarity from sugar developers on how the platform envisions threading to work in an activity, we can be more comfortable writing entries in the Almanac to help developers write error-free code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I customize the title that is displayed for each instance of my activity? ===&lt;br /&gt;
&lt;br /&gt;
By default, activity titles are just the generic activity names that you specify in your activity.info file. In some applications, you may want the activity title to be more dynamic. &lt;br /&gt;
&lt;br /&gt;
For example, it makes sense to set the title for different browser sessions to the active web page being visited. That way, when you look back in the journal at the different browser sessions you have run in the previous few days, you can identify unique sessions based on the website you happened to be visiting at the time. &lt;br /&gt;
&lt;br /&gt;
The code below shows how you can set the metadata for your activity to reflect a dynamic title based on whatever session criteria you feel is important. This example is adapted from the Browse activity, which sets activity instance titles based on the title of the current web page being visited. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        if self.metadata[&#039;mime_type&#039;] == &#039;text/plain&#039;:&lt;br /&gt;
            if not self._jobject.metadata[&#039;title_set_by_user&#039;] == &#039;1&#039;:&lt;br /&gt;
                if self._browser.props.title:&lt;br /&gt;
                    # Set the title of this activity to be the current &lt;br /&gt;
                    # title of the page being visited by the browser. &lt;br /&gt;
                    self.metadata[&#039;title&#039;] = self._browser.props.title&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What packages are available on sugar to support game development? ===&lt;br /&gt;
&lt;br /&gt;
If your activity will require tools that are typically needed to develop robust and clean video games, then you should utilize the [http://www.pygame.org/ pygame package]. It can be readily imported into any activity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import pygame&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I detect when one of the game buttons on the laptop have been pressed? ===&lt;br /&gt;
&lt;br /&gt;
The laptop game buttons (the circle, square, x, and check buttons next to the LCD) are encoded as page up, home, page down and end respectively. So, you can detect their press by listening for these specific events. For example, the code below listens for button presses and then just writes to an output widget which button was pressed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    #### Initialize this activity. &lt;br /&gt;
    def __init__(self, handle):&lt;br /&gt;
        ...&lt;br /&gt;
        self.connect(&#039;key-press-event&#039;, self._keyPressCb)&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
    #### Method _keyPressCb, which catches any presses of the game buttons. &lt;br /&gt;
    def _keyPressCb(self, widget, event):&lt;br /&gt;
&lt;br /&gt;
        keyname = gtk.gdk.keyval_name(event.keyval)&lt;br /&gt;
        &lt;br /&gt;
        if (keyname == &#039;KP_Page_Up&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nCircle Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Page_Down&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nX Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Home&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nSquare Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_End&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nCheck Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
&lt;br /&gt;
        return False;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I detect if one of the joystick buttons has been pressed? ===&lt;br /&gt;
&lt;br /&gt;
This is the same process as detecting game buttons, except with different names for the keys. Again, you listen for &amp;quot;key-press-event&amp;quot; signals and then in your callback you check to see if the pressed button was one of the joystick keys. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    #### Initialize this activity. &lt;br /&gt;
    def __init__(self, handle):&lt;br /&gt;
        ...&lt;br /&gt;
        self.connect(&#039;key-press-event&#039;, self._keyPressCb)&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
    #### Method _keyPressCb, which catches any presses of the game buttons. &lt;br /&gt;
    def _keyPressCb(self, widget, event):&lt;br /&gt;
&lt;br /&gt;
        keyname = gtk.gdk.keyval_name(event.keyval)&lt;br /&gt;
        &lt;br /&gt;
        if (keyname == &#039;KP_Up&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nUp Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Down&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nDown Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Left&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nLeft Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Right&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nRight Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
&lt;br /&gt;
        return False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do i remove an specific button from the toolbar? ===&lt;br /&gt;
&lt;br /&gt;
This is an example of the share button is removed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    activity_toolbar = toolbox.get_activity_toolbar()&lt;br /&gt;
    activity_toolbar.remove(activity_toolbar.share)&lt;br /&gt;
    activity_toolbar.share = None&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Development Team]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Development_Team/Almanac&amp;diff=33471</id>
		<title>Development Team/Almanac</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Development_Team/Almanac&amp;diff=33471"/>
		<updated>2009-07-15T15:51:14Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Almanac}}&lt;br /&gt;
{{Almanac TOC}}&lt;br /&gt;
== How do I get additional help beyond this almanac? ==&lt;br /&gt;
* Looking to get started with the basics of Sugar development? Check out Christoph Derndorfer&#039;s [http://www.olpcaustria.org/mediawiki/index.php/Activity_handbook Activity Handbook]. &lt;br /&gt;
* See also [[Development Team/Almanac/Code Snippets]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, on to the actual almanac ...&lt;br /&gt;
&lt;br /&gt;
== Where can I see API changes? ==&lt;br /&gt;
API changes between OLPC releases can be seen here: [[Development Team/Almanac/API Changes|API Changes]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
=== How do I structure my files so that they are a valid sugar activity?  === &lt;br /&gt;
Information on activity bundle structure can be found here: [[Development Team/Almanac/Activity Bundles|Activity Bundles]]&lt;br /&gt;
&lt;br /&gt;
=== How do I make an icon for my activity? ===&lt;br /&gt;
Information on what you need to do can be found here: [[Development Team/Almanac/Making Icons|Making Icons]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.env|sugar.env]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.profile|sugar.profile]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.mime|sugar.mime]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.logger|sugar.logger]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.activity ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.activity.activity|sugar.activity.activity]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.activity.activityfactory|sugar.activity.activityfactory]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.activity.registry|sugar.activity.registry]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.datastore ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.datastore.datastore|sugar.datastore.datastore]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.graphics ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.alert|sugar.graphics.alert]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.icon|sugar.graphics.icon]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.notebook|sugar.graphics.notebook]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.toolbutton|sugar.graphics.toolbutton]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.toolbox|sugar.graphics.toolbox]]&lt;br /&gt;
* [[Development Team/Almanac/sugar.graphics.style|sugar.graphics.style]]&lt;br /&gt;
&lt;br /&gt;
== Package: sugar.presence ==&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence|Sugar.presence]]&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence.activity|Sugar.presence.activity]]&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence.buddy|Sugar.presence.buddy]]&lt;br /&gt;
* [[Development Team/Almanac/Sugar.presence.presenceservice|Sugar.presence.presenceservice]]&lt;br /&gt;
&lt;br /&gt;
== Clipboard ==&lt;br /&gt;
* Notes on using [[Development Team/Almanac/GTK&#039;s Clipboard Module|GTK&#039;s Clipboard Module]]&lt;br /&gt;
&lt;br /&gt;
== Logging ==&lt;br /&gt;
* [[Development Team/Almanac/sugar.logger|sugar.logger]]&lt;br /&gt;
* Notes on using [[Development Team/Almanac/Python Standard Logging|Python Standard Logging]]&lt;br /&gt;
&lt;br /&gt;
== Internationalization ==&lt;br /&gt;
*[[Development Team/Almanac/Internationalization|Internationalization]]&lt;br /&gt;
&lt;br /&gt;
== Text and Graphics for Sugar Activities ==&lt;br /&gt;
* [[Development Team/Almanac/Pango|Pango]]&lt;br /&gt;
&lt;br /&gt;
== Audio &amp;amp; Video ==&lt;br /&gt;
* [[Development Team/Almanac/GStreamer|GStreamer]]&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
=== How do I change the mouse cursor in my activity to the wait cursor? ===&lt;br /&gt;
In your activity subclass:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self.window.set_cursor( gtk.gdk.Cursor(gtk.gdk.WATCH) )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and to switch it back to the default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self.window.set_cursor( None );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I track the position of the mouse? ===&lt;br /&gt;
There are many different reasons you might want to track the position of the mouse in your activity, ranging from the entertaining ([[http://en.wikipedia.org/wiki/Xeyes]]) to the functional (hiding certain windows when the mouse hasn&#039;t moved for a couple of seconds and making those ui elements re-appear when the mouse has moved again).  Here is one way you can implement this functionality:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		...&lt;br /&gt;
		self.hideWidgetsTime = time.time()&lt;br /&gt;
		self.mx = -1&lt;br /&gt;
		self.my = -1&lt;br /&gt;
		self.HIDE_WIDGET_TIMEOUT_ID = gobject.timeout_add( 500, self.mouseMightHaveMovedCb )&lt;br /&gt;
&lt;br /&gt;
	def _mouseMightHaveMovedCb( self ):&lt;br /&gt;
		x, y = self.get_pointer()&lt;br /&gt;
		passedTime = 0&lt;br /&gt;
&lt;br /&gt;
		if (x != self.mx or y != self.my):&lt;br /&gt;
			self.hideWidgetsTime = time.time()&lt;br /&gt;
			if (self.hiddenWidgets):&lt;br /&gt;
				self.showWidgets()&lt;br /&gt;
				self.hiddenWidgets = False&lt;br /&gt;
		else:&lt;br /&gt;
			passedTime = time.time() - self.hideWidgetsTime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		if (passedTime &amp;gt;= 3):&lt;br /&gt;
			if (not self.hiddenWidgets):&lt;br /&gt;
				self.hideWidgets()&lt;br /&gt;
				self.hiddenWidgets = True&lt;br /&gt;
&lt;br /&gt;
		self.mx = x&lt;br /&gt;
		self.my = y&lt;br /&gt;
		return True&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
The tasks below are random useful techniques that have come up as I write code and documentation for this reference. They have yet to be categorized, but will be as a sufficient set of related entries are written.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I know when my activity is &amp;quot;active&amp;quot; or not? ===&lt;br /&gt;
&lt;br /&gt;
You can set an event using the VISIBILITY_NOTIFY_MASK constant in order to know when your activity changes visibility. Then in the callback for this event, you simply compare the event&#039;s state to gtk-defined variables for activity visibility. See the [http://www.pygtk.org/docs/pygtk/gdk-constants.html#gdk-visibility-state-constants GDK Visibility State Constants] section of gtk.gdk.Constants for more information. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        # Notify when the visibility state changes by calling self.__visibility_notify_cb&lt;br /&gt;
        # (PUT THIS IN YOUR ACTIVITY CODE - EG. THE __init__() METHOD)&lt;br /&gt;
        self.add_events(gtk.gdk.VISIBILITY_NOTIFY_MASK)&lt;br /&gt;
        self.connect(&amp;quot;visibility-notify-event&amp;quot;, self.__visibility_notify_cb)&lt;br /&gt;
    ...&lt;br /&gt;
    # Callback method for when the activity&#039;s visibility changes&lt;br /&gt;
    def __visibility_notify_cb(self, window, event):&lt;br /&gt;
        if event.state == gtk.gdk.VISIBILITY_FULLY_OBSCURED:&lt;br /&gt;
            print &amp;quot;I am not visible&amp;quot;&lt;br /&gt;
        elif event.state in [gtk.gdk.VISIBILITY_UNOBSCURED, gtk.gdk.VISIBILITY_PARTIAL]:&lt;br /&gt;
            print &amp;quot;I am visible&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I get the amount of free space available on disk under the /home directory tree? ===&lt;br /&gt;
The following function uses the [http://docs.python.org/lib/module-statvfs.html statvfs] module. The following code demonstrates how to get the total amount of free space under /home. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    #### Method: getFreespaceKb, returns the available freespace in kilobytes. &lt;br /&gt;
    def getFreespaceKb(self):&lt;br /&gt;
        stat = os.statvfs(&amp;quot;/home&amp;quot;)&lt;br /&gt;
        freebytes  = stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL]&lt;br /&gt;
        freekb = freebytes / 1024&lt;br /&gt;
        return freekb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note, however, that assuming anything about &amp;quot;/home&amp;quot; is a bad idea, better use os.environ[&#039;HOME&#039;] instead.  Rainbow will put your actual files elsewhere,&lt;br /&gt;
some on ramdisks, some on flash.  Be clear about which filesystem&#039;s free space you actually care about.&lt;br /&gt;
&lt;br /&gt;
=== How do I know whether my activity is running on a physical XO? ===&lt;br /&gt;
Sugar runs on ordinary computers as well as on XO&#039;s.  While your activity is typically going to be run on a real XO, some people will indeed run it elsewhere.  Normally you shouldn&#039;t write your activity to care whether it&#039;s on an XO or not.  If for some odd reason, you need to care, the easiest way to tell if you are on a physical XO is to check whether /sys/power/olpc-pm, an essential power management file for the XO, exists. &amp;lt;ref&amp;gt;[http://lists.laptop.org/pipermail/devel/2008-June/015923.html reliably detecting if running on an XO]&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;OLPC [[Power Management Interface]]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
...&lt;br /&gt;
      #Print out a boolean value that tells us whether we are on an XO or not. &lt;br /&gt;
      print os.path.exists(&#039;/sys/power/olpc-pm&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I know the current language setting on my XO? ===&lt;br /&gt;
The system variable &#039;LANG&#039; tells you which language is currently active on the XO. The following code shows how to look at the value of this variable. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
...&lt;br /&gt;
       _logger.debug(os.environ[&#039;LANG&#039;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I repeatedly call a specific method after N number of seconds? ===&lt;br /&gt;
The gobject.timeout_add() function allows you to invoke a callback method after a certain amount of time. If you want to repeatedly call a method, simply keep invoking the gobject.timeout_add function in your callback itself. The code below is a simple example, where the callback function is named repeatedly_call. Note that the timing of the callbacks are approximate. To get the process going, you should make an initial call to repeatedly_call() somewhere in your code. &lt;br /&gt;
&lt;br /&gt;
You can see a more substantive example of this pattern in use when we [[Pango#How_do_I_dynamically_set_the_text_in_a_pango_layout.3F | regularly update the time displayed on a pango layout object]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	#This method calls itself ROUGHLY every 1 second &lt;br /&gt;
	def repeatedly_call(self):&lt;br /&gt;
		now = datetime.datetime.now()&lt;br /&gt;
		gobject.timeout_add(self.repeat_period_msec, self.repeatedly_update_time)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I update the current build version of code that is running on my XO? ===&lt;br /&gt;
&lt;br /&gt;
There are several pages that give you instructions on how to install/update your current build. &lt;br /&gt;
&lt;br /&gt;
* If you already have a working build installed and an internet connection, first try [[olpc-update]]. &lt;br /&gt;
* If that doesn&#039;t work, you can look at instructions for an [[Activated upgrade]] that can be done via USB] boot. &lt;br /&gt;
&lt;br /&gt;
As the instructions on the pages linked above note, make sure to install your activities separately after you have upgraded to a specific base build.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== I am developing on an XO laptop, but my keyboard and language settings are not ideal. How can I change them? ===&lt;br /&gt;
&lt;br /&gt;
Internationalized laptops will often have settings that might slow you down while developing. To change around the language settings so you can better understand environment messages, use the [[Sugar Control Panel]]&lt;br /&gt;
&lt;br /&gt;
Keyboard settings on internationalized laptops&amp;lt;ref&amp;gt;[[Keyboard layouts#OLPC keyboard layouts]]&amp;lt;/ref&amp;gt; can also be suboptimal, especially as characters like &amp;quot;-&amp;quot; and &amp;quot;/&amp;quot; are in unfamiliar positions. You can use the &amp;lt;tt&amp;gt;setxkbmap&amp;lt;/tt&amp;gt; command in the [[Terminal Activity]] to reset the type of keyboard input used and then attach a standard U.S. keyboard that will allow you to type normally. The command below sets the keyboard to the US mapping (it will reset to the default internationalized mapping upon restart). &lt;br /&gt;
&lt;br /&gt;
 setxkbmap us&lt;br /&gt;
&lt;br /&gt;
=== My Python activity wants to use threads; how do I do that? ===&lt;br /&gt;
&lt;br /&gt;
A question that has been answered with limited success is which threading patterns are most appropriate for use in Sugar.  The following pattern of code to work fine in basic instances:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  #### Method: __init__, initialize this AnnotateActivity instance&lt;br /&gt;
    def __init__(self, handle):&lt;br /&gt;
        ...&lt;br /&gt;
        self.sample_thread = Thread(target=self.announce_thread, args=())&lt;br /&gt;
        self.sample_thread.setDaemon(0)&lt;br /&gt;
        self.sample_thread.start()&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
    def announce_thread(self):&lt;br /&gt;
        while (self.Running):&lt;br /&gt;
            time.sleep(1)&lt;br /&gt;
            print &amp;quot;thread running&amp;quot;&lt;br /&gt;
            self._update_chat_text(&amp;quot;Thread&amp;quot;, &amp;quot;In here&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the basic series of steps that most online documentation on python suggests to use when trying to work with threads in python. The problem is that it is unclear how this pattern relates to code that worked in the SimCity activity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import gobject&lt;br /&gt;
gobject.threads_init()&lt;br /&gt;
#import dbus.mainloop.glib&lt;br /&gt;
#dbus.mainloop.glib.threads_init()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that in the SimCity activity the pygame sound player would not produce sound reliably unless this setup was done.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Should the two patterns always be used in tandem? It seems that the latter code is mainly to initiate gobject and other libraries to work with threading, but it is unclear what restrictions there are with using threading with these libraries. Does one take precedence over the other? It is not clear if there is any problem with using the standard python threading code on the sugar technology stack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In fact, experiments with threading on sugar leads to several different problems. For one thing, thread termination was tricky - using the can_close() method for sugar activities to terminate an activity only killed threads in some circumstances. It did not properly handle terminating threads in the case of CTRL-C or terminal interrupts. You can try to catch signals (SIGINT, SIGTERM or SIGHUP), but you will still be running in to errors in terminating child threads using these as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another set of errors with threading comes up when trying to combine with stream tubes. The bottom line is that it is unclear what the scope of threading in a Sugar activity should be - should it simply work if you do the standard python threading pattern, is the use of the glib.threads_init and gobject.threads_init calls necessary, are there other interactions with threads and dbus that need to be accounted for? With more clarity from sugar developers on how the platform envisions threading to work in an activity, we can be more comfortable writing entries in the Almanac to help developers write error-free code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I customize the title that is displayed for each instance of my activity? ===&lt;br /&gt;
&lt;br /&gt;
By default, activity titles are just the generic activity names that you specify in your activity.info file. In some applications, you may want the activity title to be more dynamic. &lt;br /&gt;
&lt;br /&gt;
For example, it makes sense to set the title for different browser sessions to the active web page being visited. That way, when you look back in the journal at the different browser sessions you have run in the previous few days, you can identify unique sessions based on the website you happened to be visiting at the time. &lt;br /&gt;
&lt;br /&gt;
The code below shows how you can set the metadata for your activity to reflect a dynamic title based on whatever session criteria you feel is important. This example is adapted from the Browse activity, which sets activity instance titles based on the title of the current web page being visited. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        if self.metadata[&#039;mime_type&#039;] == &#039;text/plain&#039;:&lt;br /&gt;
            if not self._jobject.metadata[&#039;title_set_by_user&#039;] == &#039;1&#039;:&lt;br /&gt;
                if self._browser.props.title:&lt;br /&gt;
                    # Set the title of this activity to be the current &lt;br /&gt;
                    # title of the page being visited by the browser. &lt;br /&gt;
                    self.metadata[&#039;title&#039;] = self._browser.props.title&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What packages are available on sugar to support game development? ===&lt;br /&gt;
&lt;br /&gt;
If your activity will require tools that are typically needed to develop robust and clean video games, then you should utilize the [http://www.pygame.org/ pygame package]. It can be readily imported into any activity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import pygame&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I detect when one of the game buttons on the laptop have been pressed? ===&lt;br /&gt;
&lt;br /&gt;
The laptop game buttons (the circle, square, x, and check buttons next to the LCD) are encoded as page up, home, page down and end respectively. So, you can detect their press by listening for these specific events. For example, the code below listens for button presses and then just writes to an output widget which button was pressed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    #### Initialize this activity. &lt;br /&gt;
    def __init__(self, handle):&lt;br /&gt;
        ...&lt;br /&gt;
        self.connect(&#039;key-press-event&#039;, self._keyPressCb)&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
    #### Method _keyPressCb, which catches any presses of the game buttons. &lt;br /&gt;
    def _keyPressCb(self, widget, event):&lt;br /&gt;
&lt;br /&gt;
        keyname = gtk.gdk.keyval_name(event.keyval)&lt;br /&gt;
        &lt;br /&gt;
        if (keyname == &#039;KP_Page_Up&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nCircle Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Page_Down&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nX Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Home&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nSquare Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_End&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nCheck Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
&lt;br /&gt;
        return False;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How do I detect if one of the joystick buttons has been pressed? ===&lt;br /&gt;
&lt;br /&gt;
This is the same process as detecting game buttons, except with different names for the keys. Again, you listen for &amp;quot;key-press-event&amp;quot; signals and then in your callback you check to see if the pressed button was one of the joystick keys. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    #### Initialize this activity. &lt;br /&gt;
    def __init__(self, handle):&lt;br /&gt;
        ...&lt;br /&gt;
        self.connect(&#039;key-press-event&#039;, self._keyPressCb)&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
    #### Method _keyPressCb, which catches any presses of the game buttons. &lt;br /&gt;
    def _keyPressCb(self, widget, event):&lt;br /&gt;
&lt;br /&gt;
        keyname = gtk.gdk.keyval_name(event.keyval)&lt;br /&gt;
        &lt;br /&gt;
        if (keyname == &#039;KP_Up&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nUp Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Down&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nDown Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Left&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nLeft Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
        elif (keyname == &#039;KP_Right&#039;):&lt;br /&gt;
            self._chat += &amp;quot;\nRight Pressed!&amp;quot;&lt;br /&gt;
            self._chat_buffer.set_text(self._chat)&lt;br /&gt;
&lt;br /&gt;
        return False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do i remove an specific button from the toolbar? ===&lt;br /&gt;
&lt;br /&gt;
This is an example of the share button is removed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    activity_toolbar = toolbox.get_activity_toolbar()&lt;br /&gt;
    activity_toolbar.remove(activity_toolbar.share)&lt;br /&gt;
    activity_toolbar.share = None&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Development Team]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Talk:Webkit_backend_for_Hulahop&amp;diff=33290</id>
		<title>Talk:Webkit backend for Hulahop</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Talk:Webkit_backend_for_Hulahop&amp;diff=33290"/>
		<updated>2009-07-13T16:20:04Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I&#039;m confused. Wouldn&#039;t it ruin the whole idea if you had to change the Hulahop API? The idea is to make gecko/xulrunner and webkit interchangeable using an existing, standard API, right? [[User:Homunq|Homunq]] 01:09, 31 March 2009 (UTC)&lt;br /&gt;
: Changes are supposed to be as non-invasive as possible, but some would be needed. I was thinking that since Browse is the only major consumer of Hulahop, it wouldn&#039;t be a problem as long as it still worked. [[User:Lucian|Lucian]] 06:23, 1 April 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Lucian, i&#039;ve already added the python DOM bindings to pywebkitgtk that you will need in order to complete this work.  I&#039;ve also recently added a wrapper script that makes the two (hulahop and pywebkitgtk) look near-identical.  You will need to bitch like mad at apple and will need to add your voice to those wishing to see the necessary glib / gobject bindings added into webkit.  If you do not, it will be believed that i am the only person who would like to see this happen and i have been treated with the utmost enormous amount of disrespect and arrogance that only a billion dollar company can muster.  see bug #16401 on webkit and bug #13 on code.google.com pywebkitgtk for the necessary patches.&lt;br /&gt;
: I&#039;ve voted on that webkit bug, that&#039;s about as much as I can do. If it doesn&#039;t get accepted, it&#039;s just annoying, not dealbreaking. Distros will manage this.&lt;br /&gt;
&lt;br /&gt;
also btw the pywebkitgtk and also the hulahop engines are actually sufficiently powerful to actually _replace_ the sugarlabs graphics engine, which is currently written in a hybrid of c and python, with pure python.  which would be very cool.&lt;br /&gt;
: It would be very cool, but sugar.graphics is a very leaky abstractions, pretty much all activities use GTK widgets too. When it gets more GTK-agnostic, web-engine would be a very interesting platform (next to Qt, Android and Swing).&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=32173</id>
		<title>Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=32173"/>
		<updated>2009-07-06T23:45:21Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webified&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m making a template [http://en.wikipedia.org/wiki/Site-specific_browser SSB] activity and a small utility that can create activities out of websites using that template. This combination will make sugarizing web apps almost entirely automatic.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The purpose of this project is twofold:&amp;lt;br /&amp;gt;&lt;br /&gt;
* it would make it easy to &amp;quot;sugarize&amp;quot; web apps (like gmail).&amp;lt;br /&amp;gt;&lt;br /&gt;
Users could press a button in the Browse activity (or there could be a separate activity for this) and a small tool would help them create a sugarized web app as a new activity.&lt;br /&gt;
* there are a lots of web developers out there that are familiar with HTML(5), CSS and JavaScript and it would be great to take advantage of their skills.&amp;lt;br /&amp;gt;&lt;br /&gt;
Web developers could use Webified to port their web apps to sugar using only web technologies, without having to learn Python.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I have been inspired by [http://fluidapp.com/ Fluid], which creates custom SSBs for websites. Fluid has Gears and GreaseMonkey plugins and provides a simple JavaScript API to websites for common native calls (like sounds, notifications, badges, etc.),  which makes it very easy to extend web apps to provide more integration. For example, GMail in a custom Fluid SSB feels like a native application.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two main strategies for implementing this:&lt;br /&gt;
# Running a standard browser, as light as possible, that points to a small local webserver (SimpleHTTPServer). It would use AJAX or a wrapper on top of that (like jsonrpc) to provide the bridge to python. The biggest downside would be that the SSB would have to call the python backend for persistence and interaction with Sugar. Another problem would be that this process could not easily be automated. Some python code would have to be written for any semi-interesting application. It would also be harder for web developers to hack Webified itself.&lt;br /&gt;
# In a small controller application, embed a browser runtime (with hulahop). The resulting activity would be completely standalone and would not depend on a web server anymore. Gears would have to be installed as a plugin for xulrunner. Some form of [https://addons.mozilla.org/en-US/firefox/addon/748 GreaseMonkey] would be very useful. Javascript dbus access through [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#WebKit_.28JavaScriptCore.29_version_notes this bridge], [https://www.socialtext.net/lukec/index.cgi?xocom XOCOM], pyxpcom directly or, in a worst case scenario, AJAX. It would be very similar to other efforts to bring web apps to the desktop and it could also provide better integration with Sugar.&amp;lt;br /&amp;gt;Browse could be used as a base for the Webified SSB. A small utility (probably an extension to the Browse activity) would create activities (XO bundles) out of websites.&amp;lt;br /&amp;gt;&lt;br /&gt;
I will be focusing on the second stragety.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Why not use existing solutions like Mozilla Prism or Titanium?&lt;br /&gt;
# Prism. It&#039;s just a stripped-down firefox. To make it useful, at least Gears would have to be installed and there would still remain the issue of integration, since Prism is designed for regular desktops. Building on hulahop and the existing Browse activity would yield better integration. There may still be useful code in Prism, like the SSB creation utility. &lt;br /&gt;
# Titanium. Titanium is more interesting, as it already is an SDK for creating desktop applications with web technologies. It&#039;s only real technical disadvantage is introducing a new dependency (webkit) in Sugar. However, it&#039;s [http://titanium-js.appspot.com/Core/Titanium design] is largely incompatible with Sugar, as it focuses on traditional desktops. Refactoring all that to fit into Sugar would be too much work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Milestones&#039;&#039;&#039;&lt;br /&gt;
Legend: - todo, + prototype done, # done&lt;br /&gt;
* Webified SSB can load a website (hello world)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: # getting more familiar with Sugar and Browse code&lt;br /&gt;
:: # building the Webified SSB.&lt;br /&gt;
: &#039;&#039;&#039;Week 1&#039;&#039;&#039;&lt;br /&gt;
* Both Browse and Webified SSB can use GMail in offline mode (through Gears)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: + getting the Firefox Gears extension working in Browse and the Webified SSB&lt;br /&gt;
: &#039;&#039;&#039;Week 2, at worst 3&#039;&#039;&#039;&lt;br /&gt;
* Browse (with its utility extension) can successfully &amp;quot;sugarize&amp;quot; GMail and the resulting activity works.&lt;br /&gt;
: Requires:&lt;br /&gt;
:: # activity template as host for the Webified SSB&lt;br /&gt;
::: &#039;&#039;&#039;Week 3&#039;&#039;&#039;&lt;br /&gt;
:: # python tool that packages up activities, using the activity template&lt;br /&gt;
::: &#039;&#039;&#039;Week 3, at worst 4&#039;&#039;&#039;&lt;br /&gt;
:: # button in Browse that uses the python tool&lt;br /&gt;
::: &#039;&#039;&#039;Week 4&#039;&#039;&#039;&lt;br /&gt;
* JavaScript from inside a Webified SSB can call dbus stuff&lt;br /&gt;
: Dbus is vital for good integration, but there may not be enough time in GSoC for making a nice JavaScript-side API. So I will at least provide a javascript-dbus bridge that web developers can build on.&lt;br /&gt;
: Requires investigating:&lt;br /&gt;
:: + [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#Gecko_version_notes This] javascript-dbus bridge&lt;br /&gt;
:: - if that is not appropriate, try marshalling calls to Python with [http://en.wikipedia.org/wiki/JSON-RPC JSON-RPC]&lt;br /&gt;
::: - through PyXPCOM (hulahop). almost as good as a direct bridge&lt;br /&gt;
::: - through AJAX. sounds like the easiest way, but doing some [http://en.wikipedia.org/wiki/Cross-site_scripting XSS] would be needed&lt;br /&gt;
: &#039;&#039;&#039;Week 5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The remaining time could then be spent on polishing things up and for any eventual emergencies.&lt;br /&gt;
&lt;br /&gt;
If I have extra time. In no particular order.&lt;br /&gt;
* Webified SSB can save and restore its state with the Journal.&lt;br /&gt;
: Save &amp;amp; restore the browser state. possibilities:&lt;br /&gt;
:: # Browse does this&lt;br /&gt;
: Save &amp;amp; restore Gears state&lt;br /&gt;
:: # do nothing. Gears provides resuming state. The only real drawback is that only the latest version will be available to resume. No actual data would be stored in the Journal.&lt;br /&gt;
:: - save the entire Gears profile. Could be very slow for large profiles.&lt;br /&gt;
:: - save just the sqlite databases. Could be very slow for large databases (GMail).&lt;br /&gt;
* Build a JavaScript-side API for basic functionality that cannot be achieved easily with HTML and Gears&lt;br /&gt;
: - similar in concept to [http://fluidapp.com/developer/ Fluid&#039;s], but tailored for Sugar. Based on the javascript-dbus bridge&lt;br /&gt;
* Webified SSB can run a userscript (GreaseMonkey)&lt;br /&gt;
: + should be as easy as injecting some JavaScript in the page&lt;br /&gt;
: - a GUI like the one GreaseMonkey has is outside the scope of this project&lt;br /&gt;
: - there will be instructions for how to add/remove userscripts&lt;br /&gt;
* Webified SSB can use a userstyle (CSS)&lt;br /&gt;
: # a user stylesheet can be made in data/style.user.css&lt;br /&gt;
: + there&#039;s a GUI for it&lt;br /&gt;
&lt;br /&gt;
Beyond GSoC, I would like to keep working on this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
:The result of my project would be something akin to Fluid (and Prism), but tailored for Sugar. It would allow users to make separate activities out of websites and, if those websites support Gears, also take them offline.&amp;lt;br /&amp;gt;&lt;br /&gt;
:The web is moving towards websites-as-applications and there are many projects to help integrate these new applications with the various desktop environments ([http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime AIR], [http://en.wikipedia.org/wiki/Silverlight#Silverlight_3 Silverlight Out-of-Browser Experience], [http://developer.mozilla.org/en/Prism Mozilla Prism], [http://fluidapp.com Fluid]). There is also the bold [http://en.wikipedia.org/wiki/Palm_webOS webOS] from Palm, that fully embraces web technologies by making them the default toolkit for building applications for the platform.&lt;br /&gt;
:It would be great to bring these ideas to Sugar, as they would enable easier usage of web applications and in general more orientation towards the web. It would also allow web developers to easily extend those websites to better integrate with Sugar, increasing the developer pool of and raising awareness towards Sugar.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Bryan Berry&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003451.html mailing list thread]&amp;lt;br /&amp;gt;&lt;br /&gt;
:Again, this requires people to learn python, a whole new language that they don&#039;t necessarily use at work. We need to enable developers to be very productive in just 2-3 hours per week. For them to be productive they need to be using tools they are already familiar w/.&lt;br /&gt;
:Python is a tool popular among sysadmins and hackers. It is great tool. But folks who develop web UIs use css, html, javascript, and flash. I highly doubt that will change in the near or distant future. These are people we need to recruit as activity designers.&lt;br /&gt;
&#039;&#039;&#039;Tomeu Vizoso&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html same mailing list thread] &amp;lt;br /&amp;gt;&lt;br /&gt;
: Without needing to get into what is better for our deployments, I do see value in making easier to make Sugar activities using technologies such as HTML, CSS, etc.&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=32172</id>
		<title>Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=32172"/>
		<updated>2009-07-06T23:42:12Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webified&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m making a template [http://en.wikipedia.org/wiki/Site-specific_browser SSB] activity and a small utility that can create activities out of websites using that template. This combination will make sugarizing web apps almost entirely automatic.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The purpose of this project is twofold:&amp;lt;br /&amp;gt;&lt;br /&gt;
* it would make it easy to &amp;quot;sugarize&amp;quot; web apps (like gmail).&amp;lt;br /&amp;gt;&lt;br /&gt;
Users could press a button in the Browse activity (or there could be a separate activity for this) and a small tool would help them create a sugarized web app as a new activity.&lt;br /&gt;
* there are a lots of web developers out there that are familiar with HTML(5), CSS and JavaScript and it would be great to take advantage of their skills.&amp;lt;br /&amp;gt;&lt;br /&gt;
Web developers could use Webified to port their web apps to sugar using only web technologies, without having to learn Python.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I have been inspired by [http://fluidapp.com/ Fluid], which creates custom SSBs for websites. Fluid has Gears and GreaseMonkey plugins and provides a simple JavaScript API to websites for common native calls (like sounds, notifications, badges, etc.),  which makes it very easy to extend web apps to provide more integration. For example, GMail in a custom Fluid SSB feels like a native application.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two main strategies for implementing this:&lt;br /&gt;
# Running a standard browser, as light as possible, that points to a small local webserver (SimpleHTTPServer). It would use AJAX or a wrapper on top of that (like jsonrpc) to provide the bridge to python. The biggest downside would be that the SSB would have to call the python backend for persistence and interaction with Sugar. Another problem would be that this process could not easily be automated. Some python code would have to be written for any semi-interesting application. It would also be harder for web developers to hack Webified itself.&lt;br /&gt;
# In a small controller application, embed a browser runtime (with hulahop). The resulting activity would be completely standalone and would not depend on a web server anymore. Gears would have to be installed as a plugin for xulrunner. Some form of [https://addons.mozilla.org/en-US/firefox/addon/748 GreaseMonkey] would be very useful. Javascript dbus access through [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#WebKit_.28JavaScriptCore.29_version_notes this bridge], [https://www.socialtext.net/lukec/index.cgi?xocom XOCOM], pyxpcom directly or, in a worst case scenario, AJAX. It would be very similar to other efforts to bring web apps to the desktop and it could also provide better integration with Sugar.&amp;lt;br /&amp;gt;Browse could be used as a base for the Webified SSB. A small utility (probably an extension to the Browse activity) would create activities (XO bundles) out of websites.&amp;lt;br /&amp;gt;&lt;br /&gt;
I will be focusing on the second stragety.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Why not use existing solutions like Mozilla Prism or Titanium?&lt;br /&gt;
# Prism. It&#039;s just a stripped-down firefox. To make it useful, at least Gears would have to be installed and there would still remain the issue of integration, since Prism is designed for regular desktops. Building on hulahop and the existing Browse activity would yield better integration. There may still be useful code in Prism, like the SSB creation utility. &lt;br /&gt;
# Titanium. Titanium is more interesting, as it already is an SDK for creating desktop applications with web technologies. It&#039;s only real technical disadvantage is introducing a new dependency (webkit) in Sugar. However, it&#039;s [http://titanium-js.appspot.com/Core/Titanium design] is largely incompatible with Sugar, as it focuses on traditional desktops. Refactoring all that to fit into Sugar would be too much work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Milestones&#039;&#039;&#039;. Stuff with + is done&lt;br /&gt;
* Webified SSB can load a website (hello world)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: + getting more familiar with Sugar and Browse code&lt;br /&gt;
:: + building the Webified SSB.&lt;br /&gt;
: &#039;&#039;&#039;Week 1&#039;&#039;&#039;&lt;br /&gt;
* Both Browse and Webified SSB can use GMail in offline mode (through Gears)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: + getting the Firefox Gears extension working in Browse and the Webified SSB&lt;br /&gt;
: &#039;&#039;&#039;Week 2, at worst 3&#039;&#039;&#039;&lt;br /&gt;
* Browse (with its utility extension) can successfully &amp;quot;sugarize&amp;quot; GMail and the resulting activity works.&lt;br /&gt;
: Requires:&lt;br /&gt;
:: + activity template as host for the Webified SSB&lt;br /&gt;
::: &#039;&#039;&#039;Week 3&#039;&#039;&#039;&lt;br /&gt;
:: + python tool that packages up activities, using the activity template&lt;br /&gt;
::: &#039;&#039;&#039;Week 3, at worst 4&#039;&#039;&#039;&lt;br /&gt;
:: + button in Browse that uses the python tool&lt;br /&gt;
::: &#039;&#039;&#039;Week 4&#039;&#039;&#039;&lt;br /&gt;
* JavaScript from inside a Webified SSB can call dbus stuff&lt;br /&gt;
: Dbus is vital for good integration, but there may not be enough time in GSoC for making a nice JavaScript-side API. So I will at least provide a javascript-dbus bridge that web developers can build on.&lt;br /&gt;
: Requires investigating:&lt;br /&gt;
:: + [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#Gecko_version_notes This] javascript-dbus bridge&lt;br /&gt;
:: - if that is not appropriate, try marshalling calls to Python with [http://en.wikipedia.org/wiki/JSON-RPC JSON-RPC]&lt;br /&gt;
::: - through PyXPCOM (hulahop). almost as good as a direct bridge&lt;br /&gt;
::: - through AJAX. sounds like the easiest way, but doing some [http://en.wikipedia.org/wiki/Cross-site_scripting XSS] would be needed&lt;br /&gt;
: &#039;&#039;&#039;Week 5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The remaining time could then be spent on polishing things up and for any eventual emergencies.&lt;br /&gt;
&lt;br /&gt;
If I have extra time. In no particular order.&lt;br /&gt;
* Webified SSB can save and restore its state with the Journal.&lt;br /&gt;
: Save &amp;amp; restore the browser state. possibilities:&lt;br /&gt;
:: - just save the URL. It may be slower to resume and in fact loses some state, but it should be enough for most cases.&lt;br /&gt;
:: - save the HTML structure. May have trouble with running scripts.&lt;br /&gt;
:: - pickle the WebView. I&#039;m not sure it works, but it may be the easiest way&lt;br /&gt;
: Save &amp;amp; restore Gears state&lt;br /&gt;
:: + do nothing. Gears provides resuming state. The only real drawback is that only the latest version will be available to resume. No actual data would be stored in the Journal.&lt;br /&gt;
:: - save the entire Gears profile. Could be very slow for large profiles.&lt;br /&gt;
:: - save just the sqlite database. Could be very slow for large databases (GMail).&lt;br /&gt;
* Build a JavaScript-side API for basic functionality that cannot be achieved easily with HTML and Gears&lt;br /&gt;
: - similar in concept to [http://fluidapp.com/developer/ Fluid&#039;s], but tailored for Sugar.&lt;br /&gt;
: - based on the javascript-dbus bridge&lt;br /&gt;
* Webified SSB can run a userscript (GreaseMonkey)&lt;br /&gt;
: + should be as easy as injecting some JavaScript in the page&lt;br /&gt;
: - a GUI like the one GreaseMonkey has is outside the scope of this project&lt;br /&gt;
: - there will be instructions for how to add/remove userscripts&lt;br /&gt;
* Webified SSB can use a userstyle (CSS)&lt;br /&gt;
: + a user stylesheet can be made in data/style.user.css&lt;br /&gt;
: + there&#039;s a GUI for it&lt;br /&gt;
&lt;br /&gt;
Beyond GSoC, I would like to keep working on this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
:The result of my project would be something akin to Fluid (and Prism), but tailored for Sugar. It would allow users to make separate activities out of websites and, if those websites support Gears, also take them offline.&amp;lt;br /&amp;gt;&lt;br /&gt;
:The web is moving towards websites-as-applications and there are many projects to help integrate these new applications with the various desktop environments ([http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime AIR], [http://en.wikipedia.org/wiki/Silverlight#Silverlight_3 Silverlight Out-of-Browser Experience], [http://developer.mozilla.org/en/Prism Mozilla Prism], [http://fluidapp.com Fluid]). There is also the bold [http://en.wikipedia.org/wiki/Palm_webOS webOS] from Palm, that fully embraces web technologies by making them the default toolkit for building applications for the platform.&lt;br /&gt;
:It would be great to bring these ideas to Sugar, as they would enable easier usage of web applications and in general more orientation towards the web. It would also allow web developers to easily extend those websites to better integrate with Sugar, increasing the developer pool of and raising awareness towards Sugar.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Bryan Berry&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003451.html mailing list thread]&amp;lt;br /&amp;gt;&lt;br /&gt;
:Again, this requires people to learn python, a whole new language that they don&#039;t necessarily use at work. We need to enable developers to be very productive in just 2-3 hours per week. For them to be productive they need to be using tools they are already familiar w/.&lt;br /&gt;
:Python is a tool popular among sysadmins and hackers. It is great tool. But folks who develop web UIs use css, html, javascript, and flash. I highly doubt that will change in the near or distant future. These are people we need to recruit as activity designers.&lt;br /&gt;
&#039;&#039;&#039;Tomeu Vizoso&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html same mailing list thread] &amp;lt;br /&amp;gt;&lt;br /&gt;
: Without needing to get into what is better for our deployments, I do see value in making easier to make Sugar activities using technologies such as HTML, CSS, etc.&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/Edit_panel_on_Frame&amp;diff=32132</id>
		<title>Features/Edit panel on Frame</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/Edit_panel_on_Frame&amp;diff=32132"/>
		<updated>2009-07-06T17:15:47Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}{{TOCright}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Edit panel on Frame =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
It would useful to be able to have a consistent text editor available to all activities as part of the Frame. It could be used for making small modifications to things like style sheets in Browse, Python code in Turtle Art, etc.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
* Name: [[User:Walter| Walter Bender]]&lt;br /&gt;
* Email: walter@sugarlabs.org&lt;br /&gt;
* Name: Lucian Branescu&lt;br /&gt;
* Email: lucian dot braNOSPAMnescu at gmail dot com&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.86&lt;br /&gt;
* Last updated:&lt;br /&gt;
* Percentage of completion: 10%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
We plan to add a panel that is associated with a clipboard entry to enable small text edits. We are considering SourceEditor class that inherits gtk.Widget. It would use gtktextview2 internally for syntax coloring.&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
Many Activities would be able to support small inline modifications, whether it be in regard to style and appearance or function. Letting these changes be made on clipboard objects as opposed to Journal objects saves a step and some context for the user.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
It requires changes in the clipboard code... haven&#039;t looked into detail yet as to how best to make the intervention.&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
Open an activity that can export text to the clipboard. Edit that text in the clipboard extension. Paste it back to see it the change was accepted.&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
Small edits can be handled more directly.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
None necessary, revert to previous release behavior.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
None other than this page.&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
* See [[Talk:Features/Edit-panel-on-Frame]]&lt;br /&gt;
&lt;br /&gt;
==[[Features]] Subpages==&lt;br /&gt;
{{Special:PrefixIndex/Features/}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:FeaturePageIncomplete]]&lt;br /&gt;
[[Category:Feature]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/Edit_panel_on_Frame&amp;diff=32131</id>
		<title>Features/Edit panel on Frame</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/Edit_panel_on_Frame&amp;diff=32131"/>
		<updated>2009-07-06T17:15:22Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}{{TOCright}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Edit panel on Frame =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
It would useful to be able to have a consistent text editor available to all activities as part of the Frame. It could be used for making small modifications to things like style sheets in Browse, Python code in Turtle Art, etc.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
* Name: [[User:Walter| Walter Bender]]&lt;br /&gt;
* Email: walter@sugarlabs.org&lt;br /&gt;
* Name: Lucian Branescu&lt;br /&gt;
* Email: lucian dot braNOSPAMnescu at gmail dot com&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.86&lt;br /&gt;
* Last updated:&lt;br /&gt;
* Percentage of completion: 0%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
We plan to add a panel that is associated with a clipboard entry to enable small text edits. We are considering SourceEditor class that inherits gtk.Widget. It would use gtktextview2 internally for syntax coloring.&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
Many Activities would be able to support small inline modifications, whether it be in regard to style and appearance or function. Letting these changes be made on clipboard objects as opposed to Journal objects saves a step and some context for the user.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
It requires changes in the clipboard code... haven&#039;t looked into detail yet as to how best to make the intervention.&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
Open an activity that can export text to the clipboard. Edit that text in the clipboard extension. Paste it back to see it the change was accepted.&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
Small edits can be handled more directly.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
None necessary, revert to previous release behavior.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
None other than this page.&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
* See [[Talk:Features/Edit-panel-on-Frame]]&lt;br /&gt;
&lt;br /&gt;
==[[Features]] Subpages==&lt;br /&gt;
{{Special:PrefixIndex/Features/}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:FeaturePageIncomplete]]&lt;br /&gt;
[[Category:Feature]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/Edit_panel_on_Frame&amp;diff=32127</id>
		<title>Features/Edit panel on Frame</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/Edit_panel_on_Frame&amp;diff=32127"/>
		<updated>2009-07-06T16:44:25Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}{{TOCright}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Edit panel on Frame =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
It would useful to be able to have a consistent text editor available to all activities as part of the Frame. It could be used for making small modifications to things like style sheets in Browse, Python code in Turtle Art, etc.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
* Name: [[User:Walter| Walter Bender]]&lt;br /&gt;
* Email: walter@sugarlabs.org&lt;br /&gt;
* Name: Lucian Branescu&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.86&lt;br /&gt;
* Last updated:&lt;br /&gt;
* Percentage of completion: 0%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
We plan to add a panel that is associated with a clipboard entry to enable small text edits. We are considering SourceEditor class that inherits gtk.Widget. It would use gtktextview2 internally for syntax coloring.&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
Many Activities would be able to support small inline modifications, whether it be in regard to style and appearance or function. Letting these changes be made on clipboard objects as opposed to Journal objects saves a step and some context for the user.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
It requires changes in the clipboard code... haven&#039;t looked into detail yet as to how best to make the intervention.&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
Open an activity that can export text to the clipboard. Edit that text in the clipboard extension. Paste it back to see it the change was accepted.&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
Small edits can be handled more directly.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
None necessary, revert to previous release behavior.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
None other than this page.&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
* See [[Talk:Features/Edit-panel-on-Frame]]&lt;br /&gt;
&lt;br /&gt;
==[[Features]] Subpages==&lt;br /&gt;
{{Special:PrefixIndex/Features/}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:FeaturePageIncomplete]]&lt;br /&gt;
[[Category:Feature]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webkit_backend_for_Hulahop&amp;diff=31833</id>
		<title>Webkit backend for Hulahop</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webkit_backend_for_Hulahop&amp;diff=31833"/>
		<updated>2009-07-03T10:45:16Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
[This was a backup proposal, I got accepted for the other one.]&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name&#039;&#039;&#039;?&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address&#039;&#039;&#039;?&lt;br /&gt;
lucian dot braNOSPAMnescu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username&#039;&#039;&#039;?&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname&#039;&#039;&#039;?&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&#039;&#039;&#039;&lt;br /&gt;
I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webkit backend for Hulahop&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I will be attempting to write a [http://webkit.org/ Webkit] backend for Hulahop. This will require minimal modifications of Hulahop&#039;s APIs where they expose PyXPCOM or xulrunner internals (mostly just a few renames).&lt;br /&gt;
&lt;br /&gt;
Hulahop has a rather nice, simple, python API for integrating browsers in PyGTK applications. It embeds XULrunner with a small [http://kb.mozillazine.org/Chrome_URLs chrome] and provides simple enough interaction between Python and the DOM inside the chrome. It is built on [https://developer.mozilla.org/en/PyXPCOM PyXPCOM], which allows interaction between Python and XPCOM components.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pywebkitgtk/ PyWebkitGTK] unsurprisingly provides a PyGTK widget with a browser inside. It&#039;s API is lower level than Hulahop and more specific to Webkit, so it should be both feasible and beneficial to the community at large to wrap PyWebkitGTK in Hulahop&#039;s API..&lt;br /&gt;
&lt;br /&gt;
I intend to provide an alternative WebView implementation for Hulahop that embeds Webkit.  Hulahop&#039;s API does have places where PyXPCOM bleeds through, so I will attempt to provide a WebView class with as little dependency on a specific engine as possible.&lt;br /&gt;
This project is not aimed at providing a complete a drop-in replacement for the current (Gecko) version of hulahop. Firstly, activities (like Browse) that use hulahop do not restrict themselves to an engine-independent subset of the API, so they will have to be modified in order to work with hulahop-webkit. Secondly, XUL extensions only work on Gecko, not on Webkit.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The motivation for this project is the fact that there is a lot of empirical data that shows Webkit is significantly faster and uses significantly less memory than Gecko. Some [http://www.j5live.com/2007/08/02/webkit-and-xulrunner-mozilla-side-by-side-on-the-xo/ experimentation] was already done on the XO. I have made some of my own tests that confirm most of these results, both [http://dl.getdropbox.com/u/317039/webkit%20vs%20gecko.txt on OS X natively] and [http://dl.getdropbox.com/u/317039/webkit%20vs%20gecko%20soas.txt on linux in VirtualBox]. Webkit ends up being anywhere from 1.2 to 9 times faster than Gecko on benchmarks.&lt;br /&gt;
&lt;br /&gt;
Besides these synthetic benchmarks, there is also a significant difference in the (decidedly subjective) user experience. While running the more intensive benchmarks, the Webkit demo browser was much more responsive than Gecko, which frequently locked up.&lt;br /&gt;
The same trend is observed on the [http://www.chromeexperiments.com/ Chrome Experiments]. There may be some bias on the part of the builders of these experiments that may make the observation invalid, since Chrome uses Webkit. However, these experiments stress the JavaScript engine much more than anything else and Chrome has a different engine (v8) to Webkit.&lt;br /&gt;
This may have to do with better threading and different interactions with the Python and gobject bindings, but considering that both bindings use GTK and have Cairo rendering, it is at least reasonable to conclude that the browser widget in PyWebkitGTK has better user responsiveness than the one in Hulahop-gecko.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Why not use existing solutions?&#039;&#039;&#039;&lt;br /&gt;
# [http://wiki.laptop.org/go/Browse/WebKit Browse-WebKit] is mostly incomplete. &lt;br /&gt;
# Some other GTK WebKit browser. They would have to be sugarized.&lt;br /&gt;
Both of these would only provide WebKit for Browse. Other activities that need a browser GTK widget, like [http://www.socialtext.net/socialcalcxo/index.cgi SocialCalc] would have to recycle Browse source, which is less than optimal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;How about XUL extensions?&#039;&#039;&#039;&lt;br /&gt;
Hulahop can load some Firefox extensions right now, and this ability would be lost for the Webkit version. However, it&#039;s not that big a problem because 1) many XUL extensions target the Firefox chrome, which does not exist in Browse and 2) [http://userscripts.org/ userscripts] (GreaseMonkey) are lighter-weight extensions that work in many browsers (GreaseMonkey for Firefox, GreaseKit for Safari, Opera, Chrome, etc.). Although userscripts do not have the same access to browser and native APIs as XUL extensions, they are still very capable. [http://softwareas.com/for-browser-extensions-grease-is-the-word Some] even envision userscripts getting APIs to supplement some of the capabilities they are currently lacking.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
I plan to get a small WebView class working with both webkit and gecko in the first 2-3 weeks. Two weeks at most should be necessary to build a demo browser with controls (and change the WebView class where necessary). The rest could be spent on investigating and refactoring Browse and polishing things up or for emergencies.&lt;br /&gt;
Milestones:&lt;br /&gt;
# Replacement WebView class instantiates and displays google.com successfully&lt;br /&gt;
# hulahop-webkit works with [http://wiki.laptop.org/go/Sugar_Code_Snippets#WebView this snippet], with adjustments if necessary&lt;br /&gt;
# Browse modified to use the the Hulahop API with can load google.com&lt;br /&gt;
# Browse can browse history and make/load bookmarks&lt;br /&gt;
# Browse can save/restore to/from the Journal&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check Sugar Labs/OLPC forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project? &#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webkit_backend_for_Hulahop&amp;diff=31832</id>
		<title>Webkit backend for Hulahop</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webkit_backend_for_Hulahop&amp;diff=31832"/>
		<updated>2009-07-03T10:42:42Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
[This was a backup proposal, I got accepted for the other one.]&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name&#039;&#039;&#039;?&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address&#039;&#039;&#039;?&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username&#039;&#039;&#039;?&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname&#039;&#039;&#039;?&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&#039;&#039;&#039;&lt;br /&gt;
I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webkit backend for Hulahop&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I will be attempting to write a [http://webkit.org/ Webkit] backend for Hulahop. This will require minimal modifications of Hulahop&#039;s APIs where they expose PyXPCOM or xulrunner internals (mostly just a few renames).&lt;br /&gt;
&lt;br /&gt;
Hulahop has a rather nice, simple, python API for integrating browsers in PyGTK applications. It embeds XULrunner with a small [http://kb.mozillazine.org/Chrome_URLs chrome] and provides simple enough interaction between Python and the DOM inside the chrome. It is built on [https://developer.mozilla.org/en/PyXPCOM PyXPCOM], which allows interaction between Python and XPCOM components.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pywebkitgtk/ PyWebkitGTK] unsurprisingly provides a PyGTK widget with a browser inside. It&#039;s API is lower level than Hulahop and more specific to Webkit, so it should be both feasible and beneficial to the community at large to wrap PyWebkitGTK in Hulahop&#039;s API..&lt;br /&gt;
&lt;br /&gt;
I intend to provide an alternative WebView implementation for Hulahop that embeds Webkit.  Hulahop&#039;s API does have places where PyXPCOM bleeds through, so I will attempt to provide a WebView class with as little dependency on a specific engine as possible.&lt;br /&gt;
This project is not aimed at providing a complete a drop-in replacement for the current (Gecko) version of hulahop. Firstly, activities (like Browse) that use hulahop do not restrict themselves to an engine-independent subset of the API, so they will have to be modified in order to work with hulahop-webkit. Secondly, XUL extensions only work on Gecko, not on Webkit.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The motivation for this project is the fact that there is a lot of empirical data that shows Webkit is significantly faster and uses significantly less memory than Gecko. Some [http://www.j5live.com/2007/08/02/webkit-and-xulrunner-mozilla-side-by-side-on-the-xo/ experimentation] was already done on the XO. I have made some of my own tests that confirm most of these results, both [http://dl.getdropbox.com/u/317039/webkit%20vs%20gecko.txt on OS X natively] and [http://dl.getdropbox.com/u/317039/webkit%20vs%20gecko%20soas.txt on linux in VirtualBox]. Webkit ends up being anywhere from 1.2 to 9 times faster than Gecko on benchmarks.&lt;br /&gt;
&lt;br /&gt;
Besides these synthetic benchmarks, there is also a significant difference in the (decidedly subjective) user experience. While running the more intensive benchmarks, the Webkit demo browser was much more responsive than Gecko, which frequently locked up.&lt;br /&gt;
The same trend is observed on the [http://www.chromeexperiments.com/ Chrome Experiments]. There may be some bias on the part of the builders of these experiments that may make the observation invalid, since Chrome uses Webkit. However, these experiments stress the JavaScript engine much more than anything else and Chrome has a different engine (v8) to Webkit.&lt;br /&gt;
This may have to do with better threading and different interactions with the Python and gobject bindings, but considering that both bindings use GTK and have Cairo rendering, it is at least reasonable to conclude that the browser widget in PyWebkitGTK has better user responsiveness than the one in Hulahop-gecko.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Why not use existing solutions?&#039;&#039;&#039;&lt;br /&gt;
# [http://wiki.laptop.org/go/Browse/WebKit Browse-WebKit] is mostly incomplete. &lt;br /&gt;
# Some other GTK WebKit browser. They would have to be sugarized.&lt;br /&gt;
Both of these would only provide WebKit for Browse. Other activities that need a browser GTK widget, like [http://www.socialtext.net/socialcalcxo/index.cgi SocialCalc] would have to recycle Browse source, which is less than optimal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;How about XUL extensions?&#039;&#039;&#039;&lt;br /&gt;
Hulahop can load some Firefox extensions right now, and this ability would be lost for the Webkit version. However, it&#039;s not that big a problem because 1) many XUL extensions target the Firefox chrome, which does not exist in Browse and 2) [http://userscripts.org/ userscripts] (GreaseMonkey) are lighter-weight extensions that work in many browsers (GreaseMonkey for Firefox, GreaseKit for Safari, Opera, Chrome, etc.). Although userscripts do not have the same access to browser and native APIs as XUL extensions, they are still very capable. [http://softwareas.com/for-browser-extensions-grease-is-the-word Some] even envision userscripts getting APIs to supplement some of the capabilities they are currently lacking.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
I plan to get a small WebView class working with both webkit and gecko in the first 2-3 weeks. Two weeks at most should be necessary to build a demo browser with controls (and change the WebView class where necessary). The rest could be spent on investigating and refactoring Browse and polishing things up or for emergencies.&lt;br /&gt;
Milestones:&lt;br /&gt;
# Replacement WebView class instantiates and displays google.com successfully&lt;br /&gt;
# hulahop-webkit works with [http://wiki.laptop.org/go/Sugar_Code_Snippets#WebView this snippet], with adjustments if necessary&lt;br /&gt;
# Browse modified to use the the Hulahop API with can load google.com&lt;br /&gt;
# Browse can browse history and make/load bookmarks&lt;br /&gt;
# Browse can save/restore to/from the Journal&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check Sugar Labs/OLPC forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project? &#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=What_could_I_do_in_an_hour%3F&amp;diff=30790</id>
		<title>What could I do in an hour?</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=What_could_I_do_in_an_hour%3F&amp;diff=30790"/>
		<updated>2009-06-20T17:09:29Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}{{TOCright}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
==Contribute an hour of your time==&lt;br /&gt;
* If you have a free hour you want to contribute, please find a wiki page that interests you&amp;amp;mdash;and could be improved with something you know or could explain more clearly.&lt;br /&gt;
&lt;br /&gt;
* It&#039;s simple to click the edit tab/button, and enter some new text or links, or whatever you want.  Don&#039;t worry about making a mistake with the formating, others will come along to fix things up.&lt;br /&gt;
&lt;br /&gt;
* If you don&#039;t want to edit the page directly, each page has a matching &#039;discussion&#039; page, which you can reach by clicking the &#039;discussion&#039; tab/button at the top.  These pages are meant to collect reader comments and questions relevant to the parent page.  See for example, [[Talk:Welcome_to_the_Sugar_Labs_wiki]].&lt;br /&gt;
*: Remember to click the &#039;Watch&#039; tab button so you will be notified of changes to the page.  When you register your email with you account name, you can also click the [[Special:Preferences|&#039;prefs&#039;]] (preferences) link at the top right of any page, and then, on the [[Special:Preferences#prefsection-7|&#039;Watchlist&#039;]] tab page, you can set a preference to add any page you edit to your personal watchlist.&lt;br /&gt;
&lt;br /&gt;
* If you want to enter whole new content pages, there are some guidelines at [[Wiki Team/Guide/Page Creation]].  There are instructions there for experimenting with new pages in you personal &#039;User_talk:&#039; section of the wiki.&lt;br /&gt;
*: By this means, you can share and collaborate on whole projects in the Sugar Labs fields of interest, like Ed Cherlin&#039;s [[Creating textbooks]].&lt;br /&gt;
&lt;br /&gt;
==New ideas, questions, or problems==&lt;br /&gt;
Some of our wiki pages are meant to collect new ideas:&lt;br /&gt;
* [[Request New Features]]&lt;br /&gt;
or questions:&lt;br /&gt;
* [[Sugar help#Help Requests:]]&lt;br /&gt;
or problems:&lt;br /&gt;
* [[Submit Bugs/Problems]]&lt;br /&gt;
&lt;br /&gt;
==It&#039;s your wiki!==&lt;br /&gt;
&lt;br /&gt;
Please take a hour to explore the wiki, learn what&#039;s there, and then consider what&#039;s missing.&lt;br /&gt;
At your next opportunity, enter that missing piece!&lt;br /&gt;
&lt;br /&gt;
It&#039;s your collective intelligence and contributions that make wikis work well.&lt;br /&gt;
&lt;br /&gt;
Thank you for your contributions!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Participate]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=30668</id>
		<title>Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=30668"/>
		<updated>2009-06-18T15:34:39Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot braneNOSPAMscu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webified&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m making a template [http://en.wikipedia.org/wiki/Site-specific_browser SSB] activity and a small utility that can create activities out of websites using that template. This combination will make sugarizing web apps almost entirely automatic.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The purpose of this project is twofold:&amp;lt;br /&amp;gt;&lt;br /&gt;
* it would make it easy to &amp;quot;sugarize&amp;quot; web apps (like gmail).&amp;lt;br /&amp;gt;&lt;br /&gt;
Users could press a button in the Browse activity (or there could be a separate activity for this) and a small tool would help them create a sugarized web app as a new activity.&lt;br /&gt;
* there are a lots of web developers out there that are familiar with HTML(5), CSS and JavaScript and it would be great to take advantage of their skills.&amp;lt;br /&amp;gt;&lt;br /&gt;
Web developers could use Webified to port their web apps to sugar using only web technologies, without having to learn Python.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I have been inspired by [http://fluidapp.com/ Fluid], which creates custom SSBs for websites. Fluid has Gears and GreaseMonkey plugins and provides a simple JavaScript API to websites for common native calls (like sounds, notifications, badges, etc.),  which makes it very easy to extend web apps to provide more integration. For example, GMail in a custom Fluid SSB feels like a native application.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two main strategies for implementing this:&lt;br /&gt;
# Running a standard browser, as light as possible, that points to a small local webserver (SimpleHTTPServer). It would use AJAX or a wrapper on top of that (like jsonrpc) to provide the bridge to python. The biggest downside would be that the SSB would have to call the python backend for persistence and interaction with Sugar. Another problem would be that this process could not easily be automated. Some python code would have to be written for any semi-interesting application. It would also be harder for web developers to hack Webified itself.&lt;br /&gt;
# In a small controller application, embed a browser runtime (with hulahop). The resulting activity would be completely standalone and would not depend on a web server anymore. Gears would have to be installed as a plugin for xulrunner. Some form of [https://addons.mozilla.org/en-US/firefox/addon/748 GreaseMonkey] would be very useful. Javascript dbus access through [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#WebKit_.28JavaScriptCore.29_version_notes this bridge], [https://www.socialtext.net/lukec/index.cgi?xocom XOCOM], pyxpcom directly or, in a worst case scenario, AJAX. It would be very similar to other efforts to bring web apps to the desktop and it could also provide better integration with Sugar.&amp;lt;br /&amp;gt;Browse could be used as a base for the Webified SSB. A small utility (probably an extension to the Browse activity) would create activities (XO bundles) out of websites.&amp;lt;br /&amp;gt;&lt;br /&gt;
I will be focusing on the second stragety.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Why not use existing solutions like Mozilla Prism or Titanium?&lt;br /&gt;
# Prism. It&#039;s just a stripped-down firefox. To make it useful, at least Gears would have to be installed and there would still remain the issue of integration, since Prism is designed for regular desktops. Building on hulahop and the existing Browse activity would yield better integration. There may still be useful code in Prism, like the SSB creation utility. &lt;br /&gt;
# Titanium. Titanium is more interesting, as it already is an SDK for creating desktop applications with web technologies. It&#039;s only real technical disadvantage is introducing a new dependency (webkit) in Sugar. However, it&#039;s [http://titanium-js.appspot.com/Core/Titanium design] is largely incompatible with Sugar, as it focuses on traditional desktops. Refactoring all that to fit into Sugar would be too much work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Milestones&#039;&#039;&#039;:&lt;br /&gt;
* Webified SSB can load a website (hello world)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: - getting more familiar with Sugar and Browse code&lt;br /&gt;
:: - building the Webified SSB.&lt;br /&gt;
: &#039;&#039;&#039;Week 1&#039;&#039;&#039;&lt;br /&gt;
* Both Browse and Webified SSB can use GMail in offline mode (through Gears)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: - getting the Firefox Gears extension working in Browse and the Webified SSB&lt;br /&gt;
: &#039;&#039;&#039;Week 2, at worst 3&#039;&#039;&#039;&lt;br /&gt;
* Browse (with its utility extension) can successfully &amp;quot;sugarize&amp;quot; GMail and the resulting activity works.&lt;br /&gt;
: Requires:&lt;br /&gt;
:: - activity template as host for the Webified SSB&lt;br /&gt;
::: &#039;&#039;&#039;Week 3&#039;&#039;&#039;&lt;br /&gt;
:: - python tool that packages up activities, using the activity template&lt;br /&gt;
::: &#039;&#039;&#039;Week 3, at worst 4&#039;&#039;&#039;&lt;br /&gt;
:: - button in Browse that uses the python tool&lt;br /&gt;
::: &#039;&#039;&#039;Week 4&#039;&#039;&#039;&lt;br /&gt;
* JavaScript from inside a Webified SSB can call dbus stuff&lt;br /&gt;
: Dbus is vital for good integration, but there may not be enough time in GSoC for making a nice JavaScript-side API. So I will at least provide a javascript-dbus bridge that web developers can build on.&lt;br /&gt;
: Requires investigating:&lt;br /&gt;
:: - [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#Gecko_version_notes This] javascript-dbus bridge&lt;br /&gt;
:: - if that is not appropriate, try marshalling calls to Python with [http://en.wikipedia.org/wiki/JSON-RPC JSON-RPC]&lt;br /&gt;
::: - through PyXPCOM (hulahop). almost as good as a direct bridge&lt;br /&gt;
::: - through AJAX. sounds like the easiest way, but doing some [http://en.wikipedia.org/wiki/Cross-site_scripting XSS] would be needed&lt;br /&gt;
: &#039;&#039;&#039;Week 5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The remaining time could then be spent on polishing things up and for any eventual emergencies.&lt;br /&gt;
&lt;br /&gt;
If I have extra time. In no particular order.&lt;br /&gt;
* Webified SSB can save and restore its state with the Journal.&lt;br /&gt;
: Save &amp;amp; restore the browser state. possibilities:&lt;br /&gt;
:: - just save the URL. It may be slower to resume and in fact loses some state, but it should be enough for most cases.&lt;br /&gt;
:: - save the HTML structure. May have trouble with running scripts.&lt;br /&gt;
:: - pickle the WebView. I&#039;m not sure it works, but it may be the easiest way&lt;br /&gt;
: Save &amp;amp; restore Gears state&lt;br /&gt;
:: - do nothing. Gears provides resuming state. The only real drawback is that only the latest version will be available to resume. No actual data would be stored in the Journal.&lt;br /&gt;
:: - save the entire Gears profile. Could be very slow for large profiles.&lt;br /&gt;
:: - save just the sqlite database. Could be very slow for large databases (GMail).&lt;br /&gt;
* Build a JavaScript-side API for basic functionality that cannot be achieved easily with HTML and Gears&lt;br /&gt;
: - similar in concept to [http://fluidapp.com/developer/ Fluid&#039;s], but tailored for Sugar.&lt;br /&gt;
: - based on the javascript-dbus bridge&lt;br /&gt;
* Webified SSB can run a userscript (GreaseMonkey)&lt;br /&gt;
: - should be as easy as injecting some JavaScript in the page&lt;br /&gt;
: - a GUI like the one GreaseMonkey has is outside the scope of this project&lt;br /&gt;
: - there will be instructions for how to add/remove userscripts&lt;br /&gt;
* Webified SSB can use a userstyle (CSS)&lt;br /&gt;
: - again, should be just injecting some CSS&lt;br /&gt;
: - again, no GUI will be provided, just instructions&lt;br /&gt;
&lt;br /&gt;
Beyond GSoC, I would like to keep working on this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
:The result of my project would be something akin to Fluid (and Prism), but tailored for Sugar. It would allow users to make separate activities out of websites and, if those websites support Gears, also take them offline.&amp;lt;br /&amp;gt;&lt;br /&gt;
:The web is moving towards websites-as-applications and there are many projects to help integrate these new applications with the various desktop environments ([http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime AIR], [http://en.wikipedia.org/wiki/Silverlight#Silverlight_3 Silverlight Out-of-Browser Experience], [http://developer.mozilla.org/en/Prism Mozilla Prism], [http://fluidapp.com Fluid]). There is also the bold [http://en.wikipedia.org/wiki/Palm_webOS webOS] from Palm, that fully embraces web technologies by making them the default toolkit for building applications for the platform.&lt;br /&gt;
:It would be great to bring these ideas to Sugar, as they would enable easier usage of web applications and in general more orientation towards the web. It would also allow web developers to easily extend those websites to better integrate with Sugar, increasing the developer pool of and raising awareness towards Sugar.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Bryan Berry&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003451.html mailing list thread]&amp;lt;br /&amp;gt;&lt;br /&gt;
:Again, this requires people to learn python, a whole new language that they don&#039;t necessarily use at work. We need to enable developers to be very productive in just 2-3 hours per week. For them to be productive they need to be using tools they are already familiar w/.&lt;br /&gt;
:Python is a tool popular among sysadmins and hackers. It is great tool. But folks who develop web UIs use css, html, javascript, and flash. I highly doubt that will change in the near or distant future. These are people we need to recruit as activity designers.&lt;br /&gt;
&#039;&#039;&#039;Tomeu Vizoso&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html same mailing list thread] &amp;lt;br /&amp;gt;&lt;br /&gt;
: Without needing to get into what is better for our deployments, I do see value in making easier to make Sugar activities using technologies such as HTML, CSS, etc.&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Activity_Team/Git_FAQ&amp;diff=30431</id>
		<title>Activity Team/Git FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Activity_Team/Git_FAQ&amp;diff=30431"/>
		<updated>2009-06-12T14:08:32Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Git and Gitorious FAQs ==&lt;br /&gt;
&lt;br /&gt;
=== How do I create an account on git.sugarlabs.org? ===&lt;br /&gt;
&lt;br /&gt;
:[http://git.sugarlabs.org/users/new Register] using the link on the upper right menu on the Home Page.&lt;br /&gt;
&lt;br /&gt;
===How do I migrate a project to git.sugarlabs.org? ===&lt;br /&gt;
&lt;br /&gt;
:Please follow the [[Activity Team/How_to_migrate_from_OLPC|instructions here]] to first set up your project&#039;s entry in Gitorious.&lt;br /&gt;
&lt;br /&gt;
=== How do I create a new project? ===&lt;br /&gt;
&lt;br /&gt;
First set up the project in gitorious as per above.&lt;br /&gt;
&lt;br /&gt;
Go to your project directory and type:&lt;br /&gt;
 git init&lt;br /&gt;
&lt;br /&gt;
 git add *&lt;br /&gt;
 git commit -a&lt;br /&gt;
 git remote add origin gitorious@git.sugarlabs.org:[your project name]/mainline.git&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
Hence forth, just use:&lt;br /&gt;
 git commit&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
You can also use&lt;br /&gt;
 git commit -a -m &amp;quot;I am the commit message&amp;quot;&lt;br /&gt;
to avoid opening an editor.&lt;br /&gt;
&lt;br /&gt;
=== How do I create a fork of an existing project? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Clone repository&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
:Note: if you (as maintainer) are making a clone to replace a corrupted mainline on your local machine, you&#039;ll need to:&lt;br /&gt;
&lt;br /&gt;
  git clone  git://git.sugarlabs.org/yourproject/mainline.git&lt;br /&gt;
&lt;br /&gt;
:and update [remote] section&lt;br /&gt;
&lt;br /&gt;
 git config remote.origin.url gitorious@git.sugarlabs.org:yourproject/mainline.git&lt;br /&gt;
&lt;br /&gt;
=== How do I request a merge? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Request merge&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== How do I add a committer? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Add Committer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== How do I get translations for my project? ===&lt;br /&gt;
&lt;br /&gt;
# Use the gettext mechanism for your stings.&lt;br /&gt;
# Use &amp;lt;code&amp;gt;python setup.py genpot&amp;lt;/code&amp;gt; to generate a .pot file for your project.&lt;br /&gt;
# Fill a ticket requesting that your POT file be added to Pootle. Assign the ticket to &amp;quot;Localization&amp;quot;.&lt;br /&gt;
# Add User Pootle to the list of committers on your project.&lt;br /&gt;
&lt;br /&gt;
=== What if my project has a binary blob? ===&lt;br /&gt;
&lt;br /&gt;
:You may have to use the --force flag.&lt;br /&gt;
&lt;br /&gt;
 git push -fv&lt;br /&gt;
&lt;br /&gt;
=== How do I stay in sync with translations being pushed from the Pootle server? ===&lt;br /&gt;
&lt;br /&gt;
:Periodically—in my experience, on Fridays—updates to the project .po files are pushed from the Localization team.&lt;br /&gt;
&lt;br /&gt;
:Use &amp;lt;code&amp;gt; git-pull &amp;lt;/code&amp;gt; to periodically pull these updates to the local copy of your project.&lt;br /&gt;
&lt;br /&gt;
:Also, run &amp;lt;code&amp;gt;python setup.py fix_manifest&amp;lt;/code&amp;gt; to update the .mo files after updating the .po files&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; After every major release, a new branch is created on the Pootle server, e.g., Fructose-0.82 and Fructose-0.84. The Localization team may push translations to any or all of the corresponding branches of your project. Changes to your master branch are not necessarily intended for the release branches.&lt;br /&gt;
&lt;br /&gt;
=== How do I update the Tag field in Gitorious? ===&lt;br /&gt;
&lt;br /&gt;
 git tag -m &amp;quot;Release 36&amp;quot; v36 HEAD&lt;br /&gt;
 git push --tags&lt;br /&gt;
&lt;br /&gt;
=== As a maintainer, how do I merge a patch? ===&lt;br /&gt;
&lt;br /&gt;
:git-pull does a combination of fetch and merge, so to merge a patch...&lt;br /&gt;
&lt;br /&gt;
 git pull git://git.sugarlabs.org/myproject/myproject-clone.git master&lt;br /&gt;
&lt;br /&gt;
===How do I select which branch I am working on?===&lt;br /&gt;
&lt;br /&gt;
 git checkout master&lt;br /&gt;
&lt;br /&gt;
 git checkout sucrose-0.84&lt;br /&gt;
&lt;br /&gt;
===How do I merge changes from master into a branch?===&lt;br /&gt;
&lt;br /&gt;
 git checkout sucrose-0.84&lt;br /&gt;
 git rebase master&lt;br /&gt;
&lt;br /&gt;
==Misc.==&lt;br /&gt;
&lt;br /&gt;
=== How do I generate a patch? ===&lt;br /&gt;
 git diff &amp;gt; blah.patch&lt;br /&gt;
or&lt;br /&gt;
 diff -rup [old] [new]&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the .xo file for my project? ===&lt;br /&gt;
&lt;br /&gt;
:We are using http://activities.sugarlabs.org/ to host Activity bundles. Create an account and put your project&#039;s .xo file there.&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the source tarball for my project? ===&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/&lt;br /&gt;
&lt;br /&gt;
:Specifically, if it is a Fructose project, it goes here:&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/sucrose/fructose/[your project directory]/&lt;br /&gt;
&lt;br /&gt;
:Honey projects go here:&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/honey/[your project directory]/&lt;br /&gt;
&lt;br /&gt;
=== Where should I document my project? ===&lt;br /&gt;
&lt;br /&gt;
:Please create a subpage in the wiki under Activities, e.g., [[Activities/Turtle Art]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Activity Team]]&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Activity_Team/Git_FAQ&amp;diff=30430</id>
		<title>Activity Team/Git FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Activity_Team/Git_FAQ&amp;diff=30430"/>
		<updated>2009-06-12T14:07:36Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Git and Gitorious FAQs ==&lt;br /&gt;
&lt;br /&gt;
=== How do I create an account on git.sugarlabs.org? ===&lt;br /&gt;
&lt;br /&gt;
:[http://git.sugarlabs.org/users/new Register] using the link on the upper right menu on the Home Page.&lt;br /&gt;
&lt;br /&gt;
===How do I migrate a project to git.sugarlabs.org? ===&lt;br /&gt;
&lt;br /&gt;
:Please follow the [[Activity Team/How_to_migrate_from_OLPC|instructions here]] to first set up your project&#039;s entry in Gitorious.&lt;br /&gt;
&lt;br /&gt;
=== How do I create a new project? ===&lt;br /&gt;
&lt;br /&gt;
First set up the project in gitorious as per above.&lt;br /&gt;
&lt;br /&gt;
Go to your project directory and type:&lt;br /&gt;
 git init&lt;br /&gt;
&lt;br /&gt;
 git add *&lt;br /&gt;
 git commit -a&lt;br /&gt;
 git remote add origin gitorious@git.sugarlabs.org:[your project name]/mainline.git&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
Hence forth, just use:&lt;br /&gt;
 git commit&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
You can also use&lt;br /&gt;
 git commit -a -m &amp;quot;I am the commit mesasge&amp;quot;&lt;br /&gt;
to avoid opening an editor.&lt;br /&gt;
&lt;br /&gt;
=== How do I create a fork of an existing project? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Clone repository&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
:Note: if you (as maintainer) are making a clone to replace a corrupted mainline on your local machine, you&#039;ll need to:&lt;br /&gt;
&lt;br /&gt;
  git clone  git://git.sugarlabs.org/yourproject/mainline.git&lt;br /&gt;
&lt;br /&gt;
:and update [remote] section&lt;br /&gt;
&lt;br /&gt;
 git config remote.origin.url gitorious@git.sugarlabs.org:yourproject/mainline.git&lt;br /&gt;
&lt;br /&gt;
=== How do I request a merge? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Request merge&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== How do I add a committer? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Add Committer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== How do I get translations for my project? ===&lt;br /&gt;
&lt;br /&gt;
# Use the gettext mechanism for your stings.&lt;br /&gt;
# Use &amp;lt;code&amp;gt;python setup.py genpot&amp;lt;/code&amp;gt; to generate a .pot file for your project.&lt;br /&gt;
# Fill a ticket requesting that your POT file be added to Pootle. Assign the ticket to &amp;quot;Localization&amp;quot;.&lt;br /&gt;
# Add User Pootle to the list of committers on your project.&lt;br /&gt;
&lt;br /&gt;
=== What if my project has a binary blob? ===&lt;br /&gt;
&lt;br /&gt;
:You may have to use the --force flag.&lt;br /&gt;
&lt;br /&gt;
 git push -fv&lt;br /&gt;
&lt;br /&gt;
=== How do I stay in sync with translations being pushed from the Pootle server? ===&lt;br /&gt;
&lt;br /&gt;
:Periodically—in my experience, on Fridays—updates to the project .po files are pushed from the Localization team.&lt;br /&gt;
&lt;br /&gt;
:Use &amp;lt;code&amp;gt; git-pull &amp;lt;/code&amp;gt; to periodically pull these updates to the local copy of your project.&lt;br /&gt;
&lt;br /&gt;
:Also, run &amp;lt;code&amp;gt;python setup.py fix_manifest&amp;lt;/code&amp;gt; to update the .mo files after updating the .po files&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; After every major release, a new branch is created on the Pootle server, e.g., Fructose-0.82 and Fructose-0.84. The Localization team may push translations to any or all of the corresponding branches of your project. Changes to your master branch are not necessarily intended for the release branches.&lt;br /&gt;
&lt;br /&gt;
=== How do I update the Tag field in Gitorious? ===&lt;br /&gt;
&lt;br /&gt;
 git tag -m &amp;quot;Release 36&amp;quot; v36 HEAD&lt;br /&gt;
 git push --tags&lt;br /&gt;
&lt;br /&gt;
=== As a maintainer, how do I merge a patch? ===&lt;br /&gt;
&lt;br /&gt;
:git-pull does a combination of fetch and merge, so to merge a patch...&lt;br /&gt;
&lt;br /&gt;
 git pull git://git.sugarlabs.org/myproject/myproject-clone.git master&lt;br /&gt;
&lt;br /&gt;
===How do I select which branch I am working on?===&lt;br /&gt;
&lt;br /&gt;
 git checkout master&lt;br /&gt;
&lt;br /&gt;
 git checkout sucrose-0.84&lt;br /&gt;
&lt;br /&gt;
===How do I merge changes from master into a branch?===&lt;br /&gt;
&lt;br /&gt;
 git checkout sucrose-0.84&lt;br /&gt;
 git rebase master&lt;br /&gt;
&lt;br /&gt;
==Misc.==&lt;br /&gt;
&lt;br /&gt;
=== How do I generate a patch? ===&lt;br /&gt;
 git diff &amp;gt; blah.patch&lt;br /&gt;
or&lt;br /&gt;
 diff -rup [old] [new]&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the .xo file for my project? ===&lt;br /&gt;
&lt;br /&gt;
:We are using http://activities.sugarlabs.org/ to host Activity bundles. Create an account and put your project&#039;s .xo file there.&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the source tarball for my project? ===&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/&lt;br /&gt;
&lt;br /&gt;
:Specifically, if it is a Fructose project, it goes here:&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/sucrose/fructose/[your project directory]/&lt;br /&gt;
&lt;br /&gt;
:Honey projects go here:&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/honey/[your project directory]/&lt;br /&gt;
&lt;br /&gt;
=== Where should I document my project? ===&lt;br /&gt;
&lt;br /&gt;
:Please create a subpage in the wiki under Activities, e.g., [[Activities/Turtle Art]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Activity Team]]&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Activity_Team/Git_FAQ&amp;diff=30426</id>
		<title>Activity Team/Git FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Activity_Team/Git_FAQ&amp;diff=30426"/>
		<updated>2009-06-12T13:26:07Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Git and Gitorious FAQs ==&lt;br /&gt;
&lt;br /&gt;
=== How do I create an account on git.sugarlabs.org? ===&lt;br /&gt;
&lt;br /&gt;
:[http://git.sugarlabs.org/users/new Register] using the link on the upper right menu on the Home Page.&lt;br /&gt;
&lt;br /&gt;
===How do I migrate a project to git.sugarlabs.org? ===&lt;br /&gt;
&lt;br /&gt;
:Please follow the [[Activity Team/How_to_migrate_from_OLPC|instructions here]] to first set up your project&#039;s entry in Gitorious.&lt;br /&gt;
&lt;br /&gt;
=== How do I create a new project? ===&lt;br /&gt;
&lt;br /&gt;
First set up the project in gitorious as per above.&lt;br /&gt;
&lt;br /&gt;
Go to your project directory and type:&lt;br /&gt;
 git init&lt;br /&gt;
&lt;br /&gt;
 git add *&lt;br /&gt;
 git commit -a&lt;br /&gt;
 git remote add origin gitorious@git.sugarlabs.org:[your project name]/mainline.git&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
Hence forth, just use:&lt;br /&gt;
 git commit&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
=== How do I create a fork of an existing project? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Clone repository&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
:Note: if you (as maintainer) are making a clone to replace a corrupted mainline on your local machine, you&#039;ll need to:&lt;br /&gt;
&lt;br /&gt;
  git clone  git://git.sugarlabs.org/yourproject/mainline.git&lt;br /&gt;
&lt;br /&gt;
:and update [remote] section&lt;br /&gt;
&lt;br /&gt;
 git config remote.origin.url gitorious@git.sugarlabs.org:yourproject/mainline.git&lt;br /&gt;
&lt;br /&gt;
=== How do I request a merge? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Request merge&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== How do I added a committer? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Add Committer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== How do I get translations for my project? ===&lt;br /&gt;
&lt;br /&gt;
# Use the gettext mechanism for your stings.&lt;br /&gt;
# Use &amp;lt;code&amp;gt;python setup.py genpot&amp;lt;/code&amp;gt; to generate a .pot file for your project.&lt;br /&gt;
# Fill a ticket requesting that your POT file be added to Pootle. Assign the ticket to &amp;quot;Localization&amp;quot;.&lt;br /&gt;
# Add User Pootle to the list of committers on your project.&lt;br /&gt;
&lt;br /&gt;
=== What if my project has a binary blob? ===&lt;br /&gt;
&lt;br /&gt;
:You may have to use the --force flag.&lt;br /&gt;
&lt;br /&gt;
 git push -fv&lt;br /&gt;
&lt;br /&gt;
=== How do I stay in sync with translations being pushed from the Pootle server? ===&lt;br /&gt;
&lt;br /&gt;
:Periodically—in my experience, on Fridays—updates to the project .po files are pushed from the Localization team.&lt;br /&gt;
&lt;br /&gt;
:Use &amp;lt;code&amp;gt; git-pull &amp;lt;/code&amp;gt; to periodically pull these updates to the local copy of your project.&lt;br /&gt;
&lt;br /&gt;
:Also, run &amp;lt;code&amp;gt;python setup.py fix_manifest&amp;lt;/code&amp;gt; to update the .mo files after updating the .po files&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; After every major release, a new branch is created on the Pootle server, e.g., Fructose-0.82 and Fructose-0.84. The Localization team may push translations to any or all of the corresponding branches of your project. Changes to your master branch are not necessarily intended for the release branches.&lt;br /&gt;
&lt;br /&gt;
=== How do I update the Tag field in Gitorious? ===&lt;br /&gt;
&lt;br /&gt;
 git tag -m &amp;quot;Release 36&amp;quot; v36 HEAD&lt;br /&gt;
 git push --tags&lt;br /&gt;
&lt;br /&gt;
=== As a maintainer, how do I merge a patch? ===&lt;br /&gt;
&lt;br /&gt;
:git-pull does a combination of fetch and merge, so to merge a patch...&lt;br /&gt;
&lt;br /&gt;
 git pull git://git.sugarlabs.org/myproject/myproject-clone.git master&lt;br /&gt;
&lt;br /&gt;
===How do I select which branch I am working on?===&lt;br /&gt;
&lt;br /&gt;
 git checkout master&lt;br /&gt;
&lt;br /&gt;
 git checkout sucrose-0.84&lt;br /&gt;
&lt;br /&gt;
===How do I merge changes from master into a branch?===&lt;br /&gt;
&lt;br /&gt;
 git checkout sucrose-0.84&lt;br /&gt;
 git rebase master&lt;br /&gt;
&lt;br /&gt;
==Misc.==&lt;br /&gt;
&lt;br /&gt;
=== How do I generate a patch? ===&lt;br /&gt;
 git diff &amp;gt; blah.patch&lt;br /&gt;
or&lt;br /&gt;
 diff -rup [old] [new]&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the .xo file for my project? ===&lt;br /&gt;
&lt;br /&gt;
:We are using http://activities.sugarlabs.org/ to host Activity bundles. Create an account and put your project&#039;s .xo file there.&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the source tarball for my project? ===&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/&lt;br /&gt;
&lt;br /&gt;
:Specifically, if it is a Fructose project, it goes here:&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/sucrose/fructose/[your project directory]/&lt;br /&gt;
&lt;br /&gt;
:Honey projects go here:&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/honey/[your project directory]/&lt;br /&gt;
&lt;br /&gt;
=== Where should I document my project? ===&lt;br /&gt;
&lt;br /&gt;
:Please create a subpage in the wiki under Activities, e.g., [[Activities/Turtle Art]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Activity Team]]&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Activity_Team/Git_FAQ&amp;diff=30425</id>
		<title>Activity Team/Git FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Activity_Team/Git_FAQ&amp;diff=30425"/>
		<updated>2009-06-12T13:23:12Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Git and Gitorious FAQs ==&lt;br /&gt;
&lt;br /&gt;
=== How do I create an account on git.sugarlabs.org? ===&lt;br /&gt;
&lt;br /&gt;
:[http://git.sugarlabs.org/users/new Register] using the link on the upper right menu on the Home Page.&lt;br /&gt;
&lt;br /&gt;
===How do I migrate a project to git.sugarlabs.org? ===&lt;br /&gt;
&lt;br /&gt;
:Please follow the [[Activity Team/How_to_migrate_from_OLPC|instructions here]] to first set up your project&#039;s entry in Gitorious.&lt;br /&gt;
&lt;br /&gt;
=== How do I create a new project? ===&lt;br /&gt;
&lt;br /&gt;
First set up the project in gitorious as per above.&lt;br /&gt;
&lt;br /&gt;
Go to your project directory and type:&lt;br /&gt;
 git init&lt;br /&gt;
&lt;br /&gt;
 git add *&lt;br /&gt;
 git commit -a&lt;br /&gt;
 git remote add origin gitorious@git.sugarlabs.org:[your project name]/mainline.git&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
Hence forth, just use:&lt;br /&gt;
 git commit&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
You can also use&lt;br /&gt;
 git commit -m &amp;quot;This is the commit message&amp;quot;&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
=== How do I create a fork of an existing project? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Clone repository&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
:Note: if you (as maintainer) are making a clone to replace a corrupted mainline on your local machine, you&#039;ll need to:&lt;br /&gt;
&lt;br /&gt;
  git clone  git://git.sugarlabs.org/yourproject/mainline.git&lt;br /&gt;
&lt;br /&gt;
:and update [remote] section&lt;br /&gt;
&lt;br /&gt;
 git config remote.origin.url gitorious@git.sugarlabs.org:yourproject/mainline.git&lt;br /&gt;
&lt;br /&gt;
=== How do I request a merge? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Request merge&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== How do I added a committer? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Add Committer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== How do I get translations for my project? ===&lt;br /&gt;
&lt;br /&gt;
# Use the gettext mechanism for your stings.&lt;br /&gt;
# Use &amp;lt;code&amp;gt;python setup.py genpot&amp;lt;/code&amp;gt; to generate a .pot file for your project.&lt;br /&gt;
# Fill a ticket requesting that your POT file be added to Pootle. Assign the ticket to &amp;quot;Localization&amp;quot;.&lt;br /&gt;
# Add User Pootle to the list of committers on your project.&lt;br /&gt;
&lt;br /&gt;
=== What if my project has a binary blob? ===&lt;br /&gt;
&lt;br /&gt;
:You may have to use the --force flag.&lt;br /&gt;
&lt;br /&gt;
 git push -fv&lt;br /&gt;
&lt;br /&gt;
=== How do I stay in sync with translations being pushed from the Pootle server? ===&lt;br /&gt;
&lt;br /&gt;
:Periodically—in my experience, on Fridays—updates to the project .po files are pushed from the Localization team.&lt;br /&gt;
&lt;br /&gt;
:Use &amp;lt;code&amp;gt; git-pull &amp;lt;/code&amp;gt; to periodically pull these updates to the local copy of your project.&lt;br /&gt;
&lt;br /&gt;
:Also, run &amp;lt;code&amp;gt;python setup.py fix_manifest&amp;lt;/code&amp;gt; to update the .mo files after updating the .po files&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; After every major release, a new branch is created on the Pootle server, e.g., Fructose-0.82 and Fructose-0.84. The Localization team may push translations to any or all of the corresponding branches of your project. Changes to your master branch are not necessarily intended for the release branches.&lt;br /&gt;
&lt;br /&gt;
=== How do I update the Tag field in Gitorious? ===&lt;br /&gt;
&lt;br /&gt;
 git tag -m &amp;quot;Release 36&amp;quot; v36 HEAD&lt;br /&gt;
 git push --tags&lt;br /&gt;
&lt;br /&gt;
=== As a maintainer, how do I merge a patch? ===&lt;br /&gt;
&lt;br /&gt;
:git-pull does a combination of fetch and merge, so to merge a patch...&lt;br /&gt;
&lt;br /&gt;
 git pull git://git.sugarlabs.org/myproject/myproject-clone.git master&lt;br /&gt;
&lt;br /&gt;
===How do I select which branch I am working on?===&lt;br /&gt;
&lt;br /&gt;
 git checkout master&lt;br /&gt;
&lt;br /&gt;
 git checkout sucrose-0.84&lt;br /&gt;
&lt;br /&gt;
===How do I merge changes from master into a branch?===&lt;br /&gt;
&lt;br /&gt;
 git checkout sucrose-0.84&lt;br /&gt;
 git rebase master&lt;br /&gt;
&lt;br /&gt;
==Misc.==&lt;br /&gt;
&lt;br /&gt;
=== How do I generate a patch? ===&lt;br /&gt;
 git diff &amp;gt; blah.patch&lt;br /&gt;
or&lt;br /&gt;
 diff -rup [old] [new]&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the .xo file for my project? ===&lt;br /&gt;
&lt;br /&gt;
:We are using http://activities.sugarlabs.org/ to host Activity bundles. Create an account and put your project&#039;s .xo file there.&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the source tarball for my project? ===&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/&lt;br /&gt;
&lt;br /&gt;
:Specifically, if it is a Fructose project, it goes here:&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/sucrose/fructose/[your project directory]/&lt;br /&gt;
&lt;br /&gt;
:Honey projects go here:&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/honey/[your project directory]/&lt;br /&gt;
&lt;br /&gt;
=== Where should I document my project? ===&lt;br /&gt;
&lt;br /&gt;
:Please create a subpage in the wiki under Activities, e.g., [[Activities/Turtle Art]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Activity Team]]&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Activity_Team/Git_FAQ&amp;diff=30424</id>
		<title>Activity Team/Git FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Activity_Team/Git_FAQ&amp;diff=30424"/>
		<updated>2009-06-12T12:17:49Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Git and Gitorious FAQs ==&lt;br /&gt;
&lt;br /&gt;
=== How do I create an account on git.sugarlabs.org? ===&lt;br /&gt;
&lt;br /&gt;
:[http://git.sugarlabs.org/users/new Register] using the link on the upper right menu on the Home Page.&lt;br /&gt;
&lt;br /&gt;
===How do I migrate a project to git.sugarlabs.org? ===&lt;br /&gt;
&lt;br /&gt;
:Please follow the [[Activity Team/How_to_migrate_from_OLPC|instructions here]] to first set up your project&#039;s entry in Gitorious.&lt;br /&gt;
&lt;br /&gt;
=== How do I create a new project? ===&lt;br /&gt;
&lt;br /&gt;
First set up the project in gitorious as per above.&lt;br /&gt;
&lt;br /&gt;
Go to your project directory and type:&lt;br /&gt;
 git init&lt;br /&gt;
&lt;br /&gt;
 git add *&lt;br /&gt;
 git commit -a&lt;br /&gt;
 git remote add origin gitorious@git.sugarlabs.org:[your project name]/mainline.git&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
Hence forth, just use:&lt;br /&gt;
 git commit&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
You can also use&lt;br /&gt;
 git commit -m &amp;quot;This is the commit message&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== How do I create a fork of an existing project? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Clone repository&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
:Note: if you (as maintainer) are making a clone to replace a corrupted mainline on your local machine, you&#039;ll need to:&lt;br /&gt;
&lt;br /&gt;
  git clone  git://git.sugarlabs.org/yourproject/mainline.git&lt;br /&gt;
&lt;br /&gt;
:and update [remote] section&lt;br /&gt;
&lt;br /&gt;
 git config remote.origin.url gitorious@git.sugarlabs.org:yourproject/mainline.git&lt;br /&gt;
&lt;br /&gt;
=== How do I request a merge? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Request merge&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== How do I added a committer? ===&lt;br /&gt;
&lt;br /&gt;
:Click on the Repositories Tab of the project page in Gitorious. Click on &amp;quot;Mainline&amp;quot;. A link will appear on the right-hand side of the page saying, &amp;quot;Add Committer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== How do I get translations for my project? ===&lt;br /&gt;
&lt;br /&gt;
# Use the gettext mechanism for your stings.&lt;br /&gt;
# Use &amp;lt;code&amp;gt;python setup.py genpot&amp;lt;/code&amp;gt; to generate a .pot file for your project.&lt;br /&gt;
# Fill a ticket requesting that your POT file be added to Pootle. Assign the ticket to &amp;quot;Localization&amp;quot;.&lt;br /&gt;
# Add User Pootle to the list of committers on your project.&lt;br /&gt;
&lt;br /&gt;
=== What if my project has a binary blob? ===&lt;br /&gt;
&lt;br /&gt;
:You may have to use the --force flag.&lt;br /&gt;
&lt;br /&gt;
 git push -fv&lt;br /&gt;
&lt;br /&gt;
=== How do I stay in sync with translations being pushed from the Pootle server? ===&lt;br /&gt;
&lt;br /&gt;
:Periodically—in my experience, on Fridays—updates to the project .po files are pushed from the Localization team.&lt;br /&gt;
&lt;br /&gt;
:Use &amp;lt;code&amp;gt; git-pull &amp;lt;/code&amp;gt; to periodically pull these updates to the local copy of your project.&lt;br /&gt;
&lt;br /&gt;
:Also, run &amp;lt;code&amp;gt;python setup.py fix_manifest&amp;lt;/code&amp;gt; to update the .mo files after updating the .po files&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; After every major release, a new branch is created on the Pootle server, e.g., Fructose-0.82 and Fructose-0.84. The Localization team may push translations to any or all of the corresponding branches of your project. Changes to your master branch are not necessarily intended for the release branches.&lt;br /&gt;
&lt;br /&gt;
=== How do I update the Tag field in Gitorious? ===&lt;br /&gt;
&lt;br /&gt;
 git tag -m &amp;quot;Release 36&amp;quot; v36 HEAD&lt;br /&gt;
 git push --tags&lt;br /&gt;
&lt;br /&gt;
=== As a maintainer, how do I merge a patch? ===&lt;br /&gt;
&lt;br /&gt;
:git-pull does a combination of fetch and merge, so to merge a patch...&lt;br /&gt;
&lt;br /&gt;
 git pull git://git.sugarlabs.org/myproject/myproject-clone.git master&lt;br /&gt;
&lt;br /&gt;
===How do I select which branch I am working on?===&lt;br /&gt;
&lt;br /&gt;
 git checkout master&lt;br /&gt;
&lt;br /&gt;
 git checkout sucrose-0.84&lt;br /&gt;
&lt;br /&gt;
===How do I merge changes from master into a branch?===&lt;br /&gt;
&lt;br /&gt;
 git checkout sucrose-0.84&lt;br /&gt;
 git rebase master&lt;br /&gt;
&lt;br /&gt;
==Misc.==&lt;br /&gt;
&lt;br /&gt;
=== How do I generate a patch? ===&lt;br /&gt;
 git diff &amp;gt; blah.patch&lt;br /&gt;
or&lt;br /&gt;
 diff -rup [old] [new]&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the .xo file for my project? ===&lt;br /&gt;
&lt;br /&gt;
:We are using http://activities.sugarlabs.org/ to host Activity bundles. Create an account and put your project&#039;s .xo file there.&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the source tarball for my project? ===&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/&lt;br /&gt;
&lt;br /&gt;
:Specifically, if it is a Fructose project, it goes here:&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/sucrose/fructose/[your project directory]/&lt;br /&gt;
&lt;br /&gt;
:Honey projects go here:&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org:/var/www-sugarlabs/download/sources/honey/[your project directory]/&lt;br /&gt;
&lt;br /&gt;
=== Where should I document my project? ===&lt;br /&gt;
&lt;br /&gt;
:Please create a subpage in the wiki under Activities, e.g., [[Activities/Turtle Art]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Activity Team]]&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=27889</id>
		<title>Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=27889"/>
		<updated>2009-04-23T15:33:52Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webified&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m making a template [http://en.wikipedia.org/wiki/Site-specific_browser SSB] activity and a small utility that can create activities out of websites using that template. This combination will make sugarizing web apps almost entirely automatic.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The purpose of this project is twofold:&amp;lt;br /&amp;gt;&lt;br /&gt;
* it would make it easy to &amp;quot;sugarize&amp;quot; web apps (like gmail).&amp;lt;br /&amp;gt;&lt;br /&gt;
Users could press a button in the Browse activity (or there could be a separate activity for this) and a small tool would help them create a sugarized web app as a new activity.&lt;br /&gt;
* there are a lots of web developers out there that are familiar with HTML(5), CSS and JavaScript and it would be great to take advantage of their skills.&amp;lt;br /&amp;gt;&lt;br /&gt;
Web developers could use Webified to port their web apps to sugar using only web technologies, without having to learn Python.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I have been inspired by [http://fluidapp.com/ Fluid], which creates custom SSBs for websites. Fluid has Gears and GreaseMonkey plugins and provides a simple JavaScript API to websites for common native calls (like sounds, notifications, badges, etc.),  which makes it very easy to extend web apps to provide more integration. For example, GMail in a custom Fluid SSB feels like a native application.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two main strategies for implementing this:&lt;br /&gt;
# Running a standard browser, as light as possible, that points to a small local webserver (SimpleHTTPServer). It would use AJAX or a wrapper on top of that (like jsonrpc) to provide the bridge to python. The biggest downside would be that the SSB would have to call the python backend for persistence and interaction with Sugar. Another problem would be that this process could not easily be automated. Some python code would have to be written for any semi-interesting application. It would also be harder for web developers to hack Webified itself.&lt;br /&gt;
# In a small controller application, embed a browser runtime (with hulahop). The resulting activity would be completely standalone and would not depend on a web server anymore. Gears would have to be installed as a plugin for xulrunner. Some form of [https://addons.mozilla.org/en-US/firefox/addon/748 GreaseMonkey] would be very useful. Javascript dbus access through [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#WebKit_.28JavaScriptCore.29_version_notes this bridge], [https://www.socialtext.net/lukec/index.cgi?xocom XOCOM], pyxpcom directly or, in a worst case scenario, AJAX. It would be very similar to other efforts to bring web apps to the desktop and it could also provide better integration with Sugar.&amp;lt;br /&amp;gt;Browse could be used as a base for the Webified SSB. A small utility (probably an extension to the Browse activity) would create activities (XO bundles) out of websites.&amp;lt;br /&amp;gt;&lt;br /&gt;
I will be focusing on the second stragety.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Why not use existing solutions like Mozilla Prism or Titanium?&lt;br /&gt;
# Prism. It&#039;s just a stripped-down firefox. To make it useful, at least Gears would have to be installed and there would still remain the issue of integration, since Prism is designed for regular desktops. Building on hulahop and the existing Browse activity would yield better integration. There may still be useful code in Prism, like the SSB creation utility. &lt;br /&gt;
# Titanium. Titanium is more interesting, as it already is an SDK for creating desktop applications with web technologies. It&#039;s only real technical disadvantage is introducing a new dependency (webkit) in Sugar. However, it&#039;s [http://titanium-js.appspot.com/Core/Titanium design] is largely incompatible with Sugar, as it focuses on traditional desktops. Refactoring all that to fit into Sugar would be too much work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Milestones&#039;&#039;&#039;:&lt;br /&gt;
* Webified SSB can load a website (hello world)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: - getting more familiar with Sugar and Browse code&lt;br /&gt;
:: - building the Webified SSB.&lt;br /&gt;
: &#039;&#039;&#039;Week 1&#039;&#039;&#039;&lt;br /&gt;
* Both Browse and Webified SSB can use GMail in offline mode (through Gears)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: - getting the Firefox Gears extension working in Browse and the Webified SSB&lt;br /&gt;
: &#039;&#039;&#039;Week 2, at worst 3&#039;&#039;&#039;&lt;br /&gt;
* Browse (with its utility extension) can successfully &amp;quot;sugarize&amp;quot; GMail and the resulting activity works.&lt;br /&gt;
: Requires:&lt;br /&gt;
:: - activity template as host for the Webified SSB&lt;br /&gt;
::: &#039;&#039;&#039;Week 3&#039;&#039;&#039;&lt;br /&gt;
:: - python tool that packages up activities, using the activity template&lt;br /&gt;
::: &#039;&#039;&#039;Week 3, at worst 4&#039;&#039;&#039;&lt;br /&gt;
:: - button in Browse that uses the python tool&lt;br /&gt;
::: &#039;&#039;&#039;Week 4&#039;&#039;&#039;&lt;br /&gt;
* JavaScript from inside a Webified SSB can call dbus stuff&lt;br /&gt;
: Dbus is vital for good integration, but there may not be enough time in GSoC for making a nice JavaScript-side API. So I will at least provide a javascript-dbus bridge that web developers can build on.&lt;br /&gt;
: Requires investigating:&lt;br /&gt;
:: - [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#Gecko_version_notes This] javascript-dbus bridge&lt;br /&gt;
:: - if that is not appropriate, try marshalling calls to Python with [http://en.wikipedia.org/wiki/JSON-RPC JSON-RPC]&lt;br /&gt;
::: - through PyXPCOM (hulahop). almost as good as a direct bridge&lt;br /&gt;
::: - through AJAX. sounds like the easiest way, but doing some [http://en.wikipedia.org/wiki/Cross-site_scripting XSS] would be needed&lt;br /&gt;
: &#039;&#039;&#039;Week 5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The remaining time could then be spent on polishing things up and for any eventual emergencies.&lt;br /&gt;
&lt;br /&gt;
If I have extra time. In no particular order.&lt;br /&gt;
* Webified SSB can save and restore its state with the Journal.&lt;br /&gt;
: Save &amp;amp; restore the browser state. possibilities:&lt;br /&gt;
:: - just save the URL. It may be slower to resume and in fact loses some state, but it should be enough for most cases.&lt;br /&gt;
:: - save the HTML structure. May have trouble with running scripts.&lt;br /&gt;
:: - pickle the WebView. I&#039;m not sure it works, but it may be the easiest way&lt;br /&gt;
: Save &amp;amp; restore Gears state&lt;br /&gt;
:: - do nothing. Gears provides resuming state. The only real drawback is that only the latest version will be available to resume. No actual data would be stored in the Journal.&lt;br /&gt;
:: - save the entire Gears profile. Could be very slow for large profiles.&lt;br /&gt;
:: - save just the sqlite database. Could be very slow for large databases (GMail).&lt;br /&gt;
* Build a JavaScript-side API for basic functionality that cannot be achieved easily with HTML and Gears&lt;br /&gt;
: - similar in concept to [http://fluidapp.com/developer/ Fluid&#039;s], but tailored for Sugar.&lt;br /&gt;
: - based on the javascript-dbus bridge&lt;br /&gt;
* Webified SSB can run a userscript (GreaseMonkey)&lt;br /&gt;
: - should be as easy as injecting some JavaScript in the page&lt;br /&gt;
: - a GUI like the one GreaseMonkey has is outside the scope of this project&lt;br /&gt;
: - there will be instructions for how to add/remove userscripts&lt;br /&gt;
* Webified SSB can use a userstyle (CSS)&lt;br /&gt;
: - again, should be just injecting some CSS&lt;br /&gt;
: - again, no GUI will be provided, just instructions&lt;br /&gt;
&lt;br /&gt;
Beyond GSoC, I would like to keep working on this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
:The result of my project would be something akin to Fluid (and Prism), but tailored for Sugar. It would allow users to make separate activities out of websites and, if those websites support Gears, also take them offline.&amp;lt;br /&amp;gt;&lt;br /&gt;
:The web is moving towards websites-as-applications and there are many projects to help integrate these new applications with the various desktop environments ([http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime AIR], [http://en.wikipedia.org/wiki/Silverlight#Silverlight_3 Silverlight Out-of-Browser Experience], [http://developer.mozilla.org/en/Prism Mozilla Prism], [http://fluidapp.com Fluid]). There is also the bold [http://en.wikipedia.org/wiki/Palm_webOS webOS] from Palm, that fully embraces web technologies by making them the default toolkit for building applications for the platform.&lt;br /&gt;
:It would be great to bring these ideas to Sugar, as they would enable easier usage of web applications and in general more orientation towards the web. It would also allow web developers to easily extend those websites to better integrate with Sugar, increasing the developer pool of and raising awareness towards Sugar.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Bryan Berry&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003451.html mailing list thread]&amp;lt;br /&amp;gt;&lt;br /&gt;
:Again, this requires people to learn python, a whole new language that they don&#039;t necessarily use at work. We need to enable developers to be very productive in just 2-3 hours per week. For them to be productive they need to be using tools they are already familiar w/.&lt;br /&gt;
:Python is a tool popular among sysadmins and hackers. It is great tool. But folks who develop web UIs use css, html, javascript, and flash. I highly doubt that will change in the near or distant future. These are people we need to recruit as activity designers.&lt;br /&gt;
&#039;&#039;&#039;Tomeu Vizoso&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html same mailing list thread] &amp;lt;br /&amp;gt;&lt;br /&gt;
: Without needing to get into what is better for our deployments, I do see value in making easier to make Sugar activities using technologies such as HTML, CSS, etc.&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=27496</id>
		<title>Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=27496"/>
		<updated>2009-04-15T16:55:00Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webified&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m making a template [http://en.wikipedia.org/wiki/Site-specific_browser SSB] activity and a small utility that can create activities out of websites using that template. This combination will make sugarizing web apps almost entirely automatic.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The purpose of this project is twofold:&amp;lt;br /&amp;gt;&lt;br /&gt;
* it would make it easy to &amp;quot;sugarize&amp;quot; web apps (like gmail).&amp;lt;br /&amp;gt;&lt;br /&gt;
Users could press a button in the Browse activity (or there could be a separate activity for this) and a small tool would help them create a sugarized web app as a new activity.&lt;br /&gt;
* there are a lots of web developers out there that are familiar with HTML(5), CSS and JavaScript and it would be great to take advantage of their skills.&amp;lt;br /&amp;gt;&lt;br /&gt;
Web developers could use Webified to port their web apps to sugar using only web technologies, without having to learn Python.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I have been inspired by [http://fluidapp.com/ Fluid], which creates custom SSBs for websites. Fluid has Gears and GreaseMonkey plugins and provides a simple JavaScript API to websites for common native calls (like sounds, notifications, badges, etc.),  which makes it very easy to extend web apps to provide more integration. For example, GMail in a custom Fluid SSB feels like a native application.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two main strategies for implementing this:&lt;br /&gt;
# Running a standard browser, as light as possible, that points to a small local webserver (SimpleHTTPServer). It would use AJAX or a wrapper on top of that (like jsonrpc) to provide the bridge to python. The biggest downside would be that the SSB would have to call the python backend for persistence and interaction with Sugar. Another problem would be that this process could not easily be automated. Some python code would have to be written for any semi-interesting application. It would also be harder for web developers to hack Webified itself.&lt;br /&gt;
# In a small controller application, embed a browser runtime (with hulahop). The resulting activity would be completely standalone and would not depend on a web server anymore. Gears would have to be installed as a plugin for xulrunner. Some form of [https://addons.mozilla.org/en-US/firefox/addon/748 GreaseMonkey] would be very useful. Javascript dbus access through [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#WebKit_.28JavaScriptCore.29_version_notes this bridge], [https://www.socialtext.net/lukec/index.cgi?xocom XOCOM], pyxpcom directly or, in a worst case scenario, AJAX. It would be very similar to other efforts to bring web apps to the desktop and it could also provide better integration with Sugar.&amp;lt;br /&amp;gt;Browse could be used as a base for the Webified SSB. A small utility (probably an extension to the Browse activity) would create activities (XO bundles) out of websites.&amp;lt;br /&amp;gt;&lt;br /&gt;
I will be focusing on the second stragety.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Why not use existing solutions like Mozilla Prism or Titanium?&lt;br /&gt;
# Prism. It&#039;s just a stripped-down firefox. To make it useful, at least Gears would have to be installed and there would still remain the issue of integration, since Prism is designed for regular desktops. Building on hulahop and the existing Browse activity would yield better integration. There may still be useful code in Prism, like the SSB creation utility. &lt;br /&gt;
# Titanium. Titanium is more interesting, as it already is an SDK for creating desktop applications with web technologies. It&#039;s only real technical disadvantage is introducing a new dependency (webkit) in Sugar. However, it&#039;s [http://titanium-js.appspot.com/Core/Titanium design] is largely incompatible with Sugar, as it focuses on traditional desktops. Refactoring all that to fit into Sugar would be too much work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Milestones&#039;&#039;&#039;:&lt;br /&gt;
* Webified SSB can load a website (hello world)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: - getting more familiar with Sugar and Browse code&lt;br /&gt;
:: - building the Webified SSB.&lt;br /&gt;
: &#039;&#039;&#039;Week 1&#039;&#039;&#039;&lt;br /&gt;
* Both Browse and Webified SSB can use GMail in offline mode (through Gears)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: - getting the Firefox Gears extension working in Browse and the Webified SSB&lt;br /&gt;
: &#039;&#039;&#039;Week 2, at worst 3&#039;&#039;&#039;&lt;br /&gt;
* Browse (with its utility extension) can successfully &amp;quot;sugarize&amp;quot; GMail and the resulting activity works.&lt;br /&gt;
: Requires:&lt;br /&gt;
:: - activity template as host for the Webified SSB&lt;br /&gt;
::: &#039;&#039;&#039;Week 3&#039;&#039;&#039;&lt;br /&gt;
:: - python tool that packages up activities, using the activity template&lt;br /&gt;
::: &#039;&#039;&#039;Week 3, at worst 4&#039;&#039;&#039;&lt;br /&gt;
:: - button in Browse that uses the python tool&lt;br /&gt;
::: &#039;&#039;&#039;Week 4&#039;&#039;&#039;&lt;br /&gt;
* JavaScript from inside a Webified SSB can call dbus stuff&lt;br /&gt;
: Dbus is vital for good integration, but there may not be enough time in GSoC for making a nice JavaScript-side API. So I will at least provide a javascript-dbus bridge that web developers can build on.&lt;br /&gt;
: Requires investigating:&lt;br /&gt;
:: - [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#Gecko_version_notes This] javascript-dbus bridge&lt;br /&gt;
:: - if that is not appropriate, try marshalling calls to Python with [http://en.wikipedia.org/wiki/JSON-RPC JSON-RPC]&lt;br /&gt;
::: - through PyXPCOM (hulahop). almost as good as a direct bridge&lt;br /&gt;
::: - through AJAX. sounds like the easiest way, but doing some [http://en.wikipedia.org/wiki/Cross-site_scripting XSS] would be needed&lt;br /&gt;
: &#039;&#039;&#039;Week 5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The remaining time could then be spent on polishing things up and for any eventual emergencies.&lt;br /&gt;
&lt;br /&gt;
If I have extra time. In no particular order.&lt;br /&gt;
* Webified SSB can save and restore its state with the Journal.&lt;br /&gt;
: Save &amp;amp; restore the browser state. possibilities:&lt;br /&gt;
:: - just save the URL. It may be slower to resume and in fact loses some state, but it should be enough for most cases.&lt;br /&gt;
:: - save the HTML structure. May have trouble with running scripts.&lt;br /&gt;
:: - pickle the WebView. I&#039;m not sure it works, but it may be the &lt;br /&gt;
: Save &amp;amp; restore Gears state&lt;br /&gt;
:: - do nothing. Gears provides resuming state. The only real drawback is that only the latest version will be available to resume. No actual data would be stored in the Journal.&lt;br /&gt;
:: - save the entire Gears profile. Could be very slow for large profiles.&lt;br /&gt;
:: - save just the sqlite database. Could be very slow for large databases (GMail).&lt;br /&gt;
* Build a JavaScript-side API for basic functionality that cannot be achieved easily with HTML and Gears&lt;br /&gt;
: - similar in concept to [http://fluidapp.com/developer/ Fluid&#039;s], but tailored for Sugar.&lt;br /&gt;
: - based on the javascript-dbus bridge&lt;br /&gt;
* Webified SSB can run a userscript (GreaseMonkey)&lt;br /&gt;
: Should be as easy as injecting some JavaScript in the page&lt;br /&gt;
: a GUI like the one GreaseMonkey has is outside the scope of this project&lt;br /&gt;
: there will be instructions for how to add/remove userscripts&lt;br /&gt;
* Webified SSB can use a userstyle (CSS)&lt;br /&gt;
: again, should be just injecting some CSS&lt;br /&gt;
: again, no GUI will be provided, just instructions&lt;br /&gt;
&lt;br /&gt;
Beyond GSoC, I would like to keep working on this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
:The result of my project would be something akin to Fluid (and Prism), but tailored for Sugar. It would allow users to make separate activities out of websites and, if those websites support Gears, also take them offline.&amp;lt;br /&amp;gt;&lt;br /&gt;
:The web is moving towards websites-as-applications and there are many projects to help integrate these new applications with the various desktop environments ([http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime AIR], [http://en.wikipedia.org/wiki/Silverlight#Silverlight_3 Silverlight Out-of-Browser Experience], [http://developer.mozilla.org/en/Prism Mozilla Prism], [http://fluidapp.com Fluid]). There is also the bold [http://en.wikipedia.org/wiki/Palm_webOS webOS] from Palm, that fully embraces web technologies by making them the default toolkit for building applications for the platform.&lt;br /&gt;
:It would be great to bring these ideas to Sugar, as they would enable easier usage of web applications and in general more orientation towards the web. It would also allow web developers to easily extend those websites to better integrate with Sugar, increasing the developer pool of and raising awareness towards Sugar.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Bryan Berry&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003451.html mailing list thread]&amp;lt;br /&amp;gt;&lt;br /&gt;
:Again, this requires people to learn python, a whole new language that they don&#039;t necessarily use at work. We need to enable developers to be very productive in just 2-3 hours per week. For them to be productive they need to be using tools they are already familiar w/.&lt;br /&gt;
:Python is a tool popular among sysadmins and hackers. It is great tool. But folks who develop web UIs use css, html, javascript, and flash. I highly doubt that will change in the near or distant future. These are people we need to recruit as activity designers.&lt;br /&gt;
&#039;&#039;&#039;Tomeu Vizoso&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html same mailing list thread] &amp;lt;br /&amp;gt;&lt;br /&gt;
: Without needing to get into what is better for our deployments, I do see value in making easier to make Sugar activities using technologies such as HTML, CSS, etc.&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[Development Team#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/Interviews&amp;diff=27358</id>
		<title>Summer of Code/Interviews</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/Interviews&amp;diff=27358"/>
		<updated>2009-04-13T16:27:20Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We would like to interview the top candidates for Google Summer of Code under Sugar Labs. Please sign up for a time below. If you have been told the name of your provisional prospective mentor, and your mentor has put his/her preferred times below, please try to find a time which works for your mentor. (Note that mentor assignments are still in flux; if your provisional prospective mentor changes, we will try to accommodate your chosen time or reschedule at a convenient time for you.)&lt;br /&gt;
&lt;br /&gt;
Interviews will be conducted over IRC; even hours on #sugar-interview0 and half-hours on #sugar-interview1 . Please treat these like real rooms, ie, do not lurk unless you are a mentor. If you have some quick pre-interview questions, we will be in #sugar too.&lt;br /&gt;
&lt;br /&gt;
If you have not been told to sign up to interview (through a public comment on your application), please do not sign up here. Interview time is limited, and we are trying to interview the applicants with the best chances of admission. Like many other organizations participating in GSoC, we have received more good applications than we have funding for interviews. Almost all of our applications would be things that we&#039;d really love to have you working on, even if we don&#039;t have space for you in GSoC. If you are interested in finishing your project and would like a mentor assigned even though we can&#039;t give you a slot, please contact us on the sugar-devel or gsoc mailing list and we&#039;ll work something out.&lt;br /&gt;
&lt;br /&gt;
== Wed Apr 15 ==&lt;br /&gt;
&lt;br /&gt;
Mentors attending: Jameson Quinn, [[User:BryanWB|BryanWB]], Luis G. Lira ...&lt;br /&gt;
&lt;br /&gt;
* [http://www.timeanddate.com/counters/customcounter.html?day=15&amp;amp;month=04&amp;amp;year=2009&amp;amp;hour=14&amp;amp;min=0&amp;amp;sec=0&amp;amp;p0=0 1400 UTC]:&lt;br /&gt;
&lt;br /&gt;
* 1430 UTC:  &lt;br /&gt;
&lt;br /&gt;
* 1500 UTC: Lucian Branescu (lucian1900)&lt;br /&gt;
&lt;br /&gt;
* 1530 UTC:&lt;br /&gt;
&lt;br /&gt;
== Thurs Apr 16 (Wed 15 in the western hemisphere) ==&lt;br /&gt;
&lt;br /&gt;
Mentors attending: Jameson Quinn, Andrés Ambrois, [[User:BryanWB|BryanWB]], [[User:Nrp|Nirav Patel]] ...&lt;br /&gt;
&lt;br /&gt;
* [http://www.timeanddate.com/counters/customcounter.html?day=16&amp;amp;month=04&amp;amp;year=2009&amp;amp;hour=0&amp;amp;min=0&amp;amp;sec=0&amp;amp;p0=0 0000 UTC]:&lt;br /&gt;
&lt;br /&gt;
* 0030 UTC:&lt;br /&gt;
&lt;br /&gt;
* 0100 UTC:&lt;br /&gt;
&lt;br /&gt;
* 0130 UTC:&lt;br /&gt;
&lt;br /&gt;
== Thurs Apr 16 ==&lt;br /&gt;
&lt;br /&gt;
Mentors attending: Jameson Quinn, Sayamindu Dasgupta ...&lt;br /&gt;
&lt;br /&gt;
* [http://www.timeanddate.com/counters/customcounter.html?day=16&amp;amp;month=04&amp;amp;year=2009&amp;amp;hour=18&amp;amp;min=0&amp;amp;sec=0&amp;amp;p0=0 1800 UTC]:&lt;br /&gt;
&lt;br /&gt;
* 1830 UTC:&lt;br /&gt;
&lt;br /&gt;
* 1900 UTC:&lt;br /&gt;
&lt;br /&gt;
* 1930 UTC:&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Talk:Karma/application&amp;diff=24974</id>
		<title>Talk:Karma/application</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Talk:Karma/application&amp;diff=24974"/>
		<updated>2009-04-03T08:28:49Z</updated>

		<summary type="html">&lt;p&gt;Lucian: New page: I don&amp;#039;t want to be nagging, but insist on not focusing on any specific rendering engine. Of course you&amp;#039;ll going to have to ignore IE (even 8), but other real, modern browsers should all wo...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I don&#039;t want to be nagging, but insist on not focusing on any specific rendering engine. Of course you&#039;ll going to have to ignore IE (even 8), but other real, modern browsers should all work with Karma. [[User:Lucian|Lucian]] 08:28, 3 April 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webkit_backend_for_Hulahop&amp;diff=24853</id>
		<title>Webkit backend for Hulahop</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webkit_backend_for_Hulahop&amp;diff=24853"/>
		<updated>2009-04-02T14:42:46Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
[backup proposal]&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name&#039;&#039;&#039;?&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address&#039;&#039;&#039;?&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username&#039;&#039;&#039;?&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname&#039;&#039;&#039;?&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&#039;&#039;&#039;&lt;br /&gt;
I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webkit backend for Hulahop&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I will be attempting to write a [http://webkit.org/ Webkit] backend for Hulahop. This will require minimal modifications of Hulahop&#039;s APIs where they expose PyXPCOM or xulrunner internals (mostly just a few renames).&lt;br /&gt;
&lt;br /&gt;
Hulahop has a rather nice, simple, python API for integrating browsers in PyGTK applications. It embeds XULrunner with a small [http://kb.mozillazine.org/Chrome_URLs chrome] and provides simple enough interaction between Python and the DOM inside the chrome. It is built on [https://developer.mozilla.org/en/PyXPCOM PyXPCOM], which allows interaction between Python and XPCOM components.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pywebkitgtk/ PyWebkitGTK] unsurprisingly provides a PyGTK widget with a browser inside. It&#039;s API is lower level than Hulahop and more specific to Webkit, so it should be both feasible and beneficial to the community at large to wrap PyWebkitGTK in Hulahop&#039;s API..&lt;br /&gt;
&lt;br /&gt;
I intend to provide an alternative WebView implementation for Hulahop that embeds Webkit.  Hulahop&#039;s API does have places where PyXPCOM bleeds through, so I will attempt to provide a WebView class with as little dependency on a specific engine as possible.&lt;br /&gt;
This project is not aimed at providing a complete a drop-in replacement for the current (Gecko) version of hulahop. Firstly, activities (like Browse) that use hulahop do not restrict themselves to an engine-independent subset of the API, so they will have to be modified in order to work with hulahop-webkit. Secondly, XUL extensions only work on Gecko, not on Webkit.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The motivation for this project is the fact that there is a lot of empirical data that shows Webkit is significantly faster and uses significantly less memory than Gecko. Some [http://www.j5live.com/2007/08/02/webkit-and-xulrunner-mozilla-side-by-side-on-the-xo/ experimentation] was already done on the XO. I have made some of my own tests that confirm most of these results, both [http://dl.getdropbox.com/u/317039/webkit%20vs%20gecko.txt on OS X natively] and [http://dl.getdropbox.com/u/317039/webkit%20vs%20gecko%20soas.txt on linux in VirtualBox]. Webkit ends up being anywhere from 1.2 to 9 times faster than Gecko on benchmarks.&lt;br /&gt;
&lt;br /&gt;
Besides these synthetic benchmarks, there is also a significant difference in the (decidedly subjective) user experience. While running the more intensive benchmarks, the Webkit demo browser was much more responsive than Gecko, which frequently locked up.&lt;br /&gt;
The same trend is observed on the [http://www.chromeexperiments.com/ Chrome Experiments]. There may be some bias on the part of the builders of these experiments that may make the observation invalid, since Chrome uses Webkit. However, these experiments stress the JavaScript engine much more than anything else and Chrome has a different engine (v8) to Webkit.&lt;br /&gt;
This may have to do with better threading and different interactions with the Python and gobject bindings, but considering that both bindings use GTK and have Cairo rendering, it is at least reasonable to conclude that the browser widget in PyWebkitGTK has better user responsiveness than the one in Hulahop-gecko.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Why not use existing solutions?&#039;&#039;&#039;&lt;br /&gt;
# [http://wiki.laptop.org/go/Browse/WebKit Browse-WebKit] is mostly incomplete. &lt;br /&gt;
# Some other GTK WebKit browser. They would have to be sugarized.&lt;br /&gt;
Both of these would only provide WebKit for Browse. Other activities that need a browser GTK widget, like [http://www.socialtext.net/socialcalcxo/index.cgi SocialCalc] would have to recycle Browse source, which is less than optimal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;How about XUL extensions?&#039;&#039;&#039;&lt;br /&gt;
Hulahop can load some Firefox extensions right now, and this ability would be lost for the Webkit version. However, it&#039;s not that big a problem because 1) many XUL extensions target the Firefox chrome, which does not exist in Browse and 2) [http://userscripts.org/ userscripts] (GreaseMonkey) are lighter-weight extensions that work in many browsers (GreaseMonkey for Firefox, GreaseKit for Safari, Opera, Chrome, etc.). Although userscripts do not have the same access to browser and native APIs as XUL extensions, they are still very capable. [http://softwareas.com/for-browser-extensions-grease-is-the-word Some] even envision userscripts getting APIs to supplement some of the capabilities they are currently lacking.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
I plan to get a small WebView class working with both webkit and gecko in the first 2-3 weeks. Two weeks at most should be necessary to build a demo browser with controls (and change the WebView class where necessary). The rest could be spent on investigating and refactoring Browse and polishing things up or for emergencies.&lt;br /&gt;
Milestones:&lt;br /&gt;
# Replacement WebView class instantiates and displays google.com successfully&lt;br /&gt;
# hulahop-webkit works with [http://wiki.laptop.org/go/Sugar_Code_Snippets#WebView this snippet], with adjustments if necessary&lt;br /&gt;
# Browse modified to use the the Hulahop API with can load google.com&lt;br /&gt;
# Browse can browse history and make/load bookmarks&lt;br /&gt;
# Browse can save/restore to/from the Journal&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project? &#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24849</id>
		<title>Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24849"/>
		<updated>2009-04-02T14:38:06Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webified&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m making a template [http://en.wikipedia.org/wiki/Site-specific_browser SSB] activity and a small utility that can create activities out of websites using that template. This combination will make sugarizing web apps almost entirely automatic.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The purpose of this project is twofold:&amp;lt;br /&amp;gt;&lt;br /&gt;
* it would make it easy to &amp;quot;sugarize&amp;quot; web apps (like gmail).&amp;lt;br /&amp;gt;&lt;br /&gt;
Users could press a button in the Browse activity (or there could be a separate activity for this) and a small tool would help them create a sugarized web app as a new activity.&lt;br /&gt;
* there are a lots of web developers out there that are familiar with HTML(5), CSS and JavaScript and it would be great to take advantage of their skills.&amp;lt;br /&amp;gt;&lt;br /&gt;
Web developers could use Webified to port their web apps to sugar using only web technologies, without having to learn Python.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I have been inspired by [http://fluidapp.com/ Fluid], which creates custom SSBs for websites. Fluid has Gears and GreaseMonkey plugins and provides a simple JavaScript API to websites for common native calls (like sounds, notifications, badges, etc.),  which makes it very easy to extend web apps to provide more integration. For example, GMail in a custom Fluid SSB feels like a native application.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two main strategies for implementing this:&lt;br /&gt;
# Running a standard browser, as light as possible, that points to a small local webserver (SimpleHTTPServer). It would use AJAX or a wrapper on top of that (like jsonrpc) to provide the bridge to python. The biggest downside would be that the SSB would have to call the python backend for persistence and interaction with Sugar. Another problem would be that this process could not easily be automated. Some python code would have to be written for any semi-interesting application. It would also be harder for web developers to hack Webified itself.&lt;br /&gt;
# In a small controller application, embed a browser runtime (with hulahop). The resulting activity would be completely standalone and would not depend on a web server anymore. Gears would have to be installed as a plugin for xulrunner. Some form of [https://addons.mozilla.org/en-US/firefox/addon/748 GreaseMonkey] would be very useful. Javascript dbus access through [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#WebKit_.28JavaScriptCore.29_version_notes this bridge], [https://www.socialtext.net/lukec/index.cgi?xocom XOCOM], pyxpcom directly or, in a worst case scenario, AJAX. It would be very similar to other efforts to bring web apps to the desktop and it could also provide better integration with Sugar.&amp;lt;br /&amp;gt;Browse could be used as a base for the Webified SSB. A small utility (probably an extension to the Browse activity) would create activities (XO bundles) out of websites.&amp;lt;br /&amp;gt;&lt;br /&gt;
I will be focusing on the second stragety.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Why not use existing solutions like Mozilla Prism or Titanium?&lt;br /&gt;
# Prism. It&#039;s just a stripped-down firefox. To make it useful, at least Gears would have to be installed and there would still remain the issue of integration, since Prism is designed for regular desktops. Building on hulahop and the existing Browse activity would yield better integration. There may still be useful code in Prism, like the SSB creation utility. &lt;br /&gt;
# Titanium. Titanium is more interesting, as it already is an SDK for creating desktop applications with web technologies. It&#039;s only real technical disadvantage is introducing a new dependency (webkit) in Sugar. However, it&#039;s [http://titanium-js.appspot.com/Core/Titanium design] is largely incompatible with Sugar, as it focuses on traditional desktops. Refactoring all that to fit into Sugar would be too much work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Milestones&#039;&#039;&#039;:&lt;br /&gt;
* Webified SSB can load a website (hello world)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: - getting more familiar with Sugar and Browse code&lt;br /&gt;
:: - building the Webified SSB.&lt;br /&gt;
: &#039;&#039;&#039;Week 1&#039;&#039;&#039;&lt;br /&gt;
* Both Browse and Webified SSB can use GMail in offline mode (through Gears)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: - getting the Firefox Gears extension working in Browse and the Webified SSB&lt;br /&gt;
: &#039;&#039;&#039;Week 2, at worst 3&#039;&#039;&#039;&lt;br /&gt;
* Browse (with its utility extension) can successfully &amp;quot;sugarize&amp;quot; GMail and the resulting activity works.&lt;br /&gt;
: Requires:&lt;br /&gt;
:: - activity template as host for the Webified SSB&lt;br /&gt;
::: &#039;&#039;&#039;Week 3&#039;&#039;&#039;&lt;br /&gt;
:: - python tool that packages up activities, using the activity template&lt;br /&gt;
::: &#039;&#039;&#039;Week 3, at worst 4&#039;&#039;&#039;&lt;br /&gt;
:: - button in Browse that uses the python tool&lt;br /&gt;
::: &#039;&#039;&#039;Week 4&#039;&#039;&#039;&lt;br /&gt;
* JavaScript from inside a Webified SSB can call dbus stuff&lt;br /&gt;
: Dbus is vital for good integration, but there may not be enough time in GSoC for making a nice JavaScript-side API. So I will at least provide a javascript-dbus bridge that web developers can build on.&lt;br /&gt;
: Requires investigating:&lt;br /&gt;
:: - [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#Gecko_version_notes This] javascript-dbus bridge&lt;br /&gt;
:: - if that is not appropriate, try marshalling calls to Python with [http://en.wikipedia.org/wiki/JSON-RPC JSON-RPC]&lt;br /&gt;
::: - through PyXPCOM (hulahop). almost as good as a direct bridge&lt;br /&gt;
::: - through AJAX. sounds like the easiest way, but doing some [http://en.wikipedia.org/wiki/Cross-site_scripting XSS] would be needed&lt;br /&gt;
: &#039;&#039;&#039;Week 5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The remaining time could then be spent on polishing things up and for any eventual emergencies.&lt;br /&gt;
&lt;br /&gt;
If I have extra time. In no particular order.&lt;br /&gt;
* Webified SSB can save and restore its state with the Journal.&lt;br /&gt;
: Save &amp;amp; restore the browser state. possibilities:&lt;br /&gt;
:: - just save the URL. It may be slower to resume and in fact loses some state, but it should be enough for most cases.&lt;br /&gt;
:: - save the HTML structure. May have trouble with running scripts.&lt;br /&gt;
:: - pickle the WebView. I&#039;m not sure it works, but it may be the &lt;br /&gt;
: Save &amp;amp; restore Gears state&lt;br /&gt;
:: - do nothing. Gears provides resuming state. The only real drawback is that only the latest version will be available to resume. No actual data would be stored in the Journal.&lt;br /&gt;
:: - save the entire Gears profile. Could be very slow for large profiles.&lt;br /&gt;
:: - save just the sqlite database. Could be very slow for large databasesc (GMail).&lt;br /&gt;
* Build a JavaScript-side API for basic functionality that cannot be achieved easily with HTML and Gears&lt;br /&gt;
: - similar in concept to [http://fluidapp.com/developer/ Fluid&#039;s], but tailored for Sugar.&lt;br /&gt;
: - based on the javascript-dbus bridge&lt;br /&gt;
* Webified SSB can run a userscript (GreaseMonkey)&lt;br /&gt;
: Should be as easy as injecting some JavaScript in the page&lt;br /&gt;
: a GUI like the one GreaseMonkey has is outside the scope of this project&lt;br /&gt;
: there will be instructions for how to add/remove userscripts&lt;br /&gt;
* Webified SSB can use a userstyle (CSS)&lt;br /&gt;
: again, should be just injecting some CSS&lt;br /&gt;
: again, no GUI will be provided, just instructions&lt;br /&gt;
&lt;br /&gt;
Beyond GSoC, I would like to keep working on this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
:The result of my project would be something akin to Fluid (and Prism), but tailored for Sugar. It would allow users to make separate activities out of websites and, if those websites support Gears, also take them offline.&amp;lt;br /&amp;gt;&lt;br /&gt;
:The web is moving towards websites-as-applications and there are many projects to help integrate these new applications with the various desktop environments ([http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime AIR], [http://en.wikipedia.org/wiki/Silverlight#Silverlight_3 Silverlight Out-of-Browser Experience], [http://developer.mozilla.org/en/Prism Mozilla Prism], [http://fluidapp.com Fluid]). There is also the bold [http://en.wikipedia.org/wiki/Palm_webOS webOS] from Palm, that fully embraces web technologies by making them the default toolkit for building applications for the platform.&lt;br /&gt;
:It would be great to bring these ideas to Sugar, as they would enable easier usage of web applications and in general more orientation towards the web. It would also allow web developers to easily extend those websites to better integrate with Sugar, increasing the developer pool of and raising awareness towards Sugar.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Bryan Berry&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003451.html mailing list thread]&amp;lt;br /&amp;gt;&lt;br /&gt;
:Again, this requires people to learn python, a whole new language that they don&#039;t necessarily use at work. We need to enable developers to be very productive in just 2-3 hours per week. For them to be productive they need to be using tools they are already familiar w/.&lt;br /&gt;
:Python is a tool popular among sysadmins and hackers. It is great tool. But folks who develop web UIs use css, html, javascript, and flash. I highly doubt that will change in the near or distant future. These are people we need to recruit as activity designers.&lt;br /&gt;
&#039;&#039;&#039;Tomeu Vizoso&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html same mailing list thread] &amp;lt;br /&amp;gt;&lt;br /&gt;
: Without needing to get into what is better for our deployments, I do see value in making easier to make Sugar activities using technologies such as HTML, CSS, etc.&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webkit_backend_for_Hulahop&amp;diff=24666</id>
		<title>Webkit backend for Hulahop</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webkit_backend_for_Hulahop&amp;diff=24666"/>
		<updated>2009-04-01T06:27:25Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
[backup proposal]&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name&#039;&#039;&#039;?&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address&#039;&#039;&#039;?&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username&#039;&#039;&#039;?&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname&#039;&#039;&#039;?&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&#039;&#039;&#039;&lt;br /&gt;
I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webkit backend for Hulahop&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I will be attempting to write a [http://webkit.org/ Webkit] backend for Hulahop. This will require minimal modifications of Hulahop&#039;s APIs where they expose PyXPCOM or xulrunner internals, thereby further abstracting Hulahop.&lt;br /&gt;
&lt;br /&gt;
Hulahop has a rather nice, simple, python API for integrating browsers in PyGTK applications. It embeds XULrunner with a small [http://kb.mozillazine.org/Chrome_URLs chrome] and provides simple enough interaction between Python and the DOM inside the chrome. It is built on [https://developer.mozilla.org/en/PyXPCOM PyXPCOM], which allows interaction between Python and XPCOM components.&lt;br /&gt;
&lt;br /&gt;
This project, [http://code.google.com/p/pywebkitgtk/ PyWebkitGTK] that unsurprisingly provides a PyGTK widget with a browser inside. It&#039;s API is lower level than Hulahop and more specific to Webkit, so it should be both feasible and beneficial to the community at large to wrap PyWebkitGTK in Hulahop&#039;s API, where it makes sense.&lt;br /&gt;
&lt;br /&gt;
I intend to provide an alternative WebView implementation for Hulahop that embeds Webkit.  Hulahop&#039;s API does have places where PyXPCOM bleeds through, but the I will attempt to provide a WebView class with as little dependency on a specific engine as possible.&lt;br /&gt;
This project is not aimed at providing a complete a drop-in replacement for the current (Gecko) version of hulahop. Firstly, activities (like Browse) that use hulahop do not restrict themselves to an engine-independent subset of the API, so they will have to be modified in order to work with hulahop-webkit.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The motivation for this project is the fact that there is a lot of empirical data that shows Webkit is significantly faster and uses significantly less memory than Gecko. Some [http://www.j5live.com/2007/08/02/webkit-and-xulrunner-mozilla-side-by-side-on-the-xo/ experimentation] was already done on the XO. I have made some of my own tests that confirm most of these results, both [http://dl.getdropbox.com/u/317039/webkit%20vs%20gecko.txt on OS X natively] and [http://dl.getdropbox.com/u/317039/webkit%20vs%20gecko%20soas.txt on linux in VirtualBox]. Webkit ends up being anywhere from 1.2 to 9 times faster than Gecko on benchmarks.&lt;br /&gt;
&lt;br /&gt;
Besides these synthetic benchmarks, there is also a significant difference in the (decidedly subjective) user experience. While running the more intensive benchmarks, the Webkit demo browser was much more responsive than Gecko, which frequently locked up.&lt;br /&gt;
The same trend is observed on the [http://www.chromeexperiments.com/ Chrome Experiments]. There may be some bias on the part of the builders of these experiments that may make the observation invalid, since Chrome uses Webkit. However, these experiments stress the JavaScript engine much more than anything else and Chrome has a different engine (v8) to Webkit.&lt;br /&gt;
This may have to do with better threading and different interactions with the Python and gobject bindings, but considering that both bindings use GTK and have Cairo rendering, it is at least reasonable to conclude that the browser widget in PyWebkitGTK has better user responsiveness than the one in Hulahop-gecko.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Why not use existing solutions?&#039;&#039;&#039;&lt;br /&gt;
# [http://wiki.laptop.org/go/Browse/WebKit Browse-WebKit] is mostly incomplete. &lt;br /&gt;
# Some other GTK WebKit browser. They would have to be sugarized.&lt;br /&gt;
Both of these would only provide WebKit for Browse. Other activities that need a browser GTK widget, like [http://www.socialtext.net/socialcalcxo/index.cgi SocialCalc] would have to recycle Browse source, which is less than optimal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;How about XUL extensions?&#039;&#039;&#039;&lt;br /&gt;
Hulahop can load some Firefox extensions right now, and this ability would be lost for the Webkit version. However, it&#039;s not that big a problem because 1) many XUL extensions target the Firefox chrome, which does not exist in Browse and 2) [http://userscripts.org/ userscripts] (GreaseMonkey) are lighter-weight extensions that work in many browsers (GreaseMonkey for Firefox, GreaseKit for Safari, Opera, Chrome, etc.). Although userscripts do not have the same access to browser and native APIs as XUL extensions, they are still very capable. [http://softwareas.com/for-browser-extensions-grease-is-the-word Some] even envision userscripts getting APIs to supplement some of the capabilities they are lacking.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
I plan to get a small WebView class working with both webkit and gecko in the first 2-3 weeks. Two weeks at most should be necessary to build a demo browser with controls (and change the WebView class where necessary). The rest could be spent on investigating and refactoring Browse and polishing things up or for emergencies.&lt;br /&gt;
Milestones:&lt;br /&gt;
# Replacement WebView class instantiates and displays google.com successfully&lt;br /&gt;
# hulahop-webkit works with [http://wiki.laptop.org/go/Sugar_Code_Snippets#WebView this snippet], adjustments as necessary for the reworked Hulahop API.&lt;br /&gt;
# Browse modified to use the the Hulahop API with the modifications can load google.com&lt;br /&gt;
# Browse can browse history and make/load bookmarks&lt;br /&gt;
# Browse can save/restore to/from the Journal&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project? &#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webkit_backend_for_Hulahop&amp;diff=24665</id>
		<title>Webkit backend for Hulahop</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webkit_backend_for_Hulahop&amp;diff=24665"/>
		<updated>2009-04-01T06:26:34Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
[backup proposal]&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name&#039;&#039;&#039;?&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address&#039;&#039;&#039;?&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username&#039;&#039;&#039;?&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname&#039;&#039;&#039;?&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&#039;&#039;&#039;&lt;br /&gt;
I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webkit backend for Hulahop&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I will be attempting to write a [http://webkit.org/ Webkit] backend for Hulahop. This will require minimal modifications of Hulahop&#039;s APIs where they expose PyXPCOM or xulrunner internals, thereby further abstracting Hulahop.&lt;br /&gt;
&lt;br /&gt;
Hulahop has a rather nice, simple, python API for integrating browsers in PyGTK applications. It embeds XULrunner with a small [http://kb.mozillazine.org/Chrome_URLs chrome] and provides simple enough interaction between Python and the DOM inside the chrome. It is built on [https://developer.mozilla.org/en/PyXPCOM PyXPCOM], which allows interaction between Python and XPCOM components.&lt;br /&gt;
&lt;br /&gt;
This project, [http://code.google.com/p/pywebkitgtk/ PyWebkitGTK] that unsurprisingly provides a PyGTK widget with a browser inside. It&#039;s API is lower level than Hulahop and more specific to Webkit, so it should be both feasible and beneficial to the community at large to wrap PyWebkitGTK in Hulahop&#039;s API, where it makes sense.&lt;br /&gt;
&lt;br /&gt;
I intend to provide an alternative WebView implementation for Hulahop that embeds Webkit.  Hulahop&#039;s API does have places where PyXPCOM bleeds through, but the I will attempt to provide a WebView class with as little dependency on a specific engine as possible.&lt;br /&gt;
This project is not aimed at providing a complete a drop-in replacement for the current (Gecko) version of hulahop. Firstly, activities (like Browse) that use hulahop do not restrict themselves to an engine-independent subset of the API, so they will have to be modified in order to work with hulahop-webkit.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The motivation for this project is the fact that there is a lot of empirical data that shows Webkit is significantly faster and uses significantly less memory than Gecko. Some [http://www.j5live.com/2007/08/02/webkit-and-xulrunner-mozilla-side-by-side-on-the-xo/ experimentation] was already done on the XO. I have made some of my own tests that confirm most of these results, both [http://dl.getdropbox.com/u/317039/webkit%20vs%20gecko.txt on OS X natively] and [http://dl.getdropbox.com/u/317039/webkit%20vs%20gecko%20soas.txt on linux in VirtualBox]. Webkit ends up being anywhere from 1.2 to 9 times faster than Gecko on benchmarks.&lt;br /&gt;
&lt;br /&gt;
Besides these synthetic benchmarks, there is also a significant difference in the (decidedly subjective) user experience. While running the more intensive benchmarks, the Webkit demo browser was much more responsive than Gecko, which frequently locked up.&lt;br /&gt;
The same trend is observed on the [http://www.chromeexperiments.com/ Chrome Experiments]. There may be some bias on the part of the builders of these experiments that may make the observation invalid, since Chrome uses Webkit. However, these experiments stress the JavaScript engine much more than anything else and Chrome has a different engine (v8) to Webkit.&lt;br /&gt;
This may have to do with better threading and different interactions with the Python and gobject bindings, but considering that both bindings use GTK and have Cairo rendering, it is at least reasonable to conclude that the browser widget in PyWebkitGTK has better user responsiveness than the one in Hulahop-gecko.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Why not use existing solutions?&#039;&#039;&#039;&lt;br /&gt;
# [http://wiki.laptop.org/go/Browse/WebKit Browse-WebKit] is mostly incomplete. &lt;br /&gt;
# Some other GTK WebKit browser. They would have to be sugarized.&lt;br /&gt;
Both of these would only provide WebKit for Browse. Other activities that need a browser GTK widget, like [http://www.socialtext.net/socialcalcxo/index.cgi SocialCalc] would have to recycle Browse source, which is less than optimal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;How about XUL extensions?&#039;&#039;&#039;&lt;br /&gt;
Hulahop can load some Firefox extensions right now, and this ability would be lost for the Webkit version. However, it&#039;s not that big a problem because 1) many XUL extensions target the Firefox chrome, which does not exist in Browse and 2) [http://userscripts.org/ userscripts] (GreaseMonkey) are lighter-weight extensions that work in many browsers (GreaseMonkey for Firefox, GreaseKit for Safari, Opera, Chrome, etc.). Although userscripts do not have the same access to browser and native APIs as XUL extensions, they are still very capable. [http://softwareas.com/for-browser-extensions-grease-is-the-word Some] even envision userscripts getting APIs to supplement some of the capabilities they are lacking.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
I plan to get a small WebView class working with both webkit and gecko in the first 2-3 weeks. Two weeks at most should be necessary to build a demo browser with controls (and change the WebView class where necessary). The rest could be spent on investigating and refactoring Browse and polishing things up or for emergencies.&lt;br /&gt;
Milestones:&lt;br /&gt;
# Replacement WebView class instantiates and displays google.com successfully&lt;br /&gt;
# hulahop-webkit works with [http://wiki.laptop.org/go/Sugar_Code_Snippets#WebView this snippet], adjustments as necessary for the reworked Hulahop API.&lt;br /&gt;
# Browse refactored to use the new Hulahop API can load google.com&lt;br /&gt;
# Browse can browse history and make/load bookmarks&lt;br /&gt;
# Browse can save/restore to/from the Journal&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project? &#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Talk:Webkit_backend_for_Hulahop&amp;diff=24664</id>
		<title>Talk:Webkit backend for Hulahop</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Talk:Webkit_backend_for_Hulahop&amp;diff=24664"/>
		<updated>2009-04-01T06:23:15Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I&#039;m confused. Wouldn&#039;t it ruin the whole idea if you had to change the Hulahop API? The idea is to make gecko/xulrunner and webkit interchangeable using an existing, standard API, right? [[User:Homunq|Homunq]] 01:09, 31 March 2009 (UTC)&lt;br /&gt;
: Changes are supposed to be as non-invasive as possible, but some would be needed. I was thinking that since Browse is the only major consumer of Hulahop, it wouldn&#039;t be a problem as long as it still worked. [[User:Lucian|Lucian]] 06:23, 1 April 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24611</id>
		<title>Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24611"/>
		<updated>2009-03-31T16:11:20Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webified&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m making a template [http://en.wikipedia.org/wiki/Site-specific_browser SSB] activity and a small utility that can create activities out of websites using that template.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The purpose of this project is twofold:&amp;lt;br /&amp;gt;&lt;br /&gt;
* it would make it easy to &amp;quot;sugarize&amp;quot; web apps (like gmail).&amp;lt;br /&amp;gt;&lt;br /&gt;
Users could press a button in the Browse activity (or there could be a separate activity for this) and a small tool would help them create a sugarized web app as a new activity.&lt;br /&gt;
* there are a lots of web developers out there that are familiar with HTML(5), CSS and JavaScript and it would be great to take advantage of their skills.&amp;lt;br /&amp;gt;&lt;br /&gt;
Web developers could use Webified to port their web apps to sugar using only web technologies, without having to learn Python.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I have been inspired by [http://fluidapp.com/ Fluid], which creates custom SSBs for websites. Fluid has Gears and GreaseMonkey plugins and provides a simple JavaScript API to websites for common native calls (like sounds, notifications, badges, etc.),  which makes it very easy to extend web apps to provide more integration. For example, GMail in a custom Fluid SSB feels like a native application.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two main strategies for implementing this:&lt;br /&gt;
# Running a standard browser, as light as possible, that points to a small local webserver (SimpleHTTPServer). It would use AJAX or a wrapper on top of that (like jsonrpc) to provide the bridge to python. The biggest downside would be that the SSB would have to call the python backend for persistence and interaction with Sugar. Another problem would be that this process could not easily be automated. Some python code would have to be written for any semi-interesting application. It would also be harder for web developers to hack Webified itself.&lt;br /&gt;
# In a small controller application, embed a browser runtime (with hulahop). The resulting activity would be completely standalone and would not depend on a web server anymore. Gears would have to be installed as a plugin for xulrunner. Some form of [https://addons.mozilla.org/en-US/firefox/addon/748 GreaseMonkey] would be very useful. Javascript dbus access through [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#WebKit_.28JavaScriptCore.29_version_notes this bridge], [https://www.socialtext.net/lukec/index.cgi?xocom XOCOM], pyxpcom directly or, in a worst case scenario, AJAX. It would be very similar to other efforts to bring web apps to the desktop and it could also provide better integration with Sugar.&amp;lt;br /&amp;gt;Browse could be used as a base for the Webified SSB. A small utility (probably an extension to the Browse activity) would create activities (XO bundles) out of websites.&amp;lt;br /&amp;gt;&lt;br /&gt;
I will be focusing on the second stragety.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Why not use existing solutions like Mozilla Prism or Titanium?&lt;br /&gt;
# Prism. It&#039;s just a stripped-down firefox. To make it useful, at least Gears would have to be installed and there would still remain the issue of integration, since Prism is designed for regular desktops. Building on hulahop and the existing Browse activity would yield better integration. There may still be useful code in Prism, like the SSB creation utility. &lt;br /&gt;
# Titanium. Titanium is more interesting, as it already is an SDK for creating desktop applications with web technologies. It&#039;s only real technical disadvantage is introducing a new dependency (webkit) in Sugar. However, it&#039;s [http://titanium-js.appspot.com/Core/Titanium design] is largely incompatible with Sugar, as it focuses on traditional desktops. Refactoring all that to fit into Sugar would be too much work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Milestones&#039;&#039;&#039;:&lt;br /&gt;
* Webified SSB can load a website (hello world)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: - getting more familiar with Sugar and Browse code&lt;br /&gt;
:: - building the Webified SSB.&lt;br /&gt;
: &#039;&#039;&#039;Week 1&#039;&#039;&#039;&lt;br /&gt;
* Both Browse and Webified SSB can use GMail in offline mode (through Gears)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: - getting the Firefox Gears extension working in Browse and the Webified SSB&lt;br /&gt;
: &#039;&#039;&#039;Week 2, at worst 3&#039;&#039;&#039;&lt;br /&gt;
* Browse (with its utility extension) can successfully &amp;quot;sugarize&amp;quot; GMail and the resulting activity works.&lt;br /&gt;
: Requires:&lt;br /&gt;
:: - activity template as host for the Webified SSB&lt;br /&gt;
::: &#039;&#039;&#039;Week 3&#039;&#039;&#039;&lt;br /&gt;
:: - python tool that packages up activities, using the activity template&lt;br /&gt;
::: &#039;&#039;&#039;Week 3, at worst 4&#039;&#039;&#039;&lt;br /&gt;
:: - button in Browse that uses the python tool&lt;br /&gt;
::: &#039;&#039;&#039;Week 4&#039;&#039;&#039;&lt;br /&gt;
* JavaScript from inside a Webified SSB can call dbus stuff&lt;br /&gt;
: Dbus is vital for good integration, but there may not be enough time in GSoC for making a nice JavaScript-side API. So I will at least provide a javascript-dbus bridge that web developers can build on.&lt;br /&gt;
: Requires investigating:&lt;br /&gt;
:: - [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#Gecko_version_notes This] javascript-dbus bridge&lt;br /&gt;
:: - if that is not appropriate, try marshalling calls to Python with [http://en.wikipedia.org/wiki/JSON-RPC JSON-RPC]&lt;br /&gt;
::: - through PyXPCOM (hulahop). almost as good as a direct bridge&lt;br /&gt;
::: - through AJAX. sounds like the easiest way, but doing some [http://en.wikipedia.org/wiki/Cross-site_scripting XSS] would be needed&lt;br /&gt;
: &#039;&#039;&#039;Week 5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The remaining time could then be spent on polishing things up and for any eventual emergencies.&lt;br /&gt;
&lt;br /&gt;
If I have extra time. In no particular order.&lt;br /&gt;
* Webified SSB can save and restore its state with the Journal.&lt;br /&gt;
: Save &amp;amp; restore the browser state. possibilities:&lt;br /&gt;
:: - just save the URL. It may be slower to resume and in fact loses some state, but it should be enough for most cases.&lt;br /&gt;
:: - save the HTML structure. May have trouble with running scripts.&lt;br /&gt;
:: - pickle the WebView. I&#039;m not sure it works, but it may be the &lt;br /&gt;
: Save &amp;amp; restore Gears state&lt;br /&gt;
:: - do nothing. Gears provides resuming state. The only real drawback is that only the latest version will be available to resume. No actual data would be stored in the Journal.&lt;br /&gt;
:: - save the entire Gears profile. Could be very slow for large profiles.&lt;br /&gt;
:: - save just the sqlite database. Could be very slow for large databasesc (GMail).&lt;br /&gt;
* Build a JavaScript-side API for basic functionality that cannot be achieved easily with HTML and Gears&lt;br /&gt;
: - similar in concept to [http://fluidapp.com/developer/ Fluid&#039;s], but tailored for Sugar.&lt;br /&gt;
: - based on the javascript-dbus bridge&lt;br /&gt;
* Webified SSB can run a userscript (GreaseMonkey)&lt;br /&gt;
: Should be as easy as injecting some JavaScript in the page&lt;br /&gt;
: a GUI like the one GreaseMonkey has is outside the scope of this project&lt;br /&gt;
: there will be instructions for how to add/remove userscripts&lt;br /&gt;
* Webified SSB can use a userstyle (CSS)&lt;br /&gt;
: again, should be just injecting some CSS&lt;br /&gt;
: again, no GUI will be provided, just instructions&lt;br /&gt;
&lt;br /&gt;
Beyond GSoC, I would like to keep working on this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
:The result of my project would be something akin to Fluid (and Prism), but tailored for Sugar. It would allow users to make separate activities out of websites and, if those websites support Gears, also take them offline.&amp;lt;br /&amp;gt;&lt;br /&gt;
:The web is moving towards websites-as-applications and there are many projects to help integrate these new applications with the various desktop environments ([http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime AIR], [http://en.wikipedia.org/wiki/Silverlight#Silverlight_3 Silverlight Out-of-Browser Experience], [http://developer.mozilla.org/en/Prism Mozilla Prism], [http://fluidapp.com Fluid]). There is also the bold [http://en.wikipedia.org/wiki/Palm_webOS webOS] from Palm, that fully embraces web technologies by making them the default toolkit for building applications for the platform.&lt;br /&gt;
:It would be great to bring these ideas to Sugar, as they would enable easier usage of web applications and in general more orientation towards the web. It would also allow web developers to easily extend those websites to better integrate with Sugar, increasing the developer pool of and raising awareness towards Sugar.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Bryan Berry&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003451.html mailing list thread]&amp;lt;br /&amp;gt;&lt;br /&gt;
:Again, this requires people to learn python, a whole new language that they don&#039;t necessarily use at work. We need to enable developers to be very productive in just 2-3 hours per week. For them to be productive they need to be using tools they are already familiar w/.&lt;br /&gt;
:Python is a tool popular among sysadmins and hackers. It is great tool. But folks who develop web UIs use css, html, javascript, and flash. I highly doubt that will change in the near or distant future. These are people we need to recruit as activity designers.&lt;br /&gt;
&#039;&#039;&#039;Tomeu Vizoso&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html same mailing list thread] &amp;lt;br /&amp;gt;&lt;br /&gt;
: Without needing to get into what is better for our deployments, I do see value in making easier to make Sugar activities using technologies such as HTML, CSS, etc.&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24610</id>
		<title>Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24610"/>
		<updated>2009-03-31T16:10:34Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webified&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m making a template [http://en.wikipedia.org/wiki/Site-specific_browser SSB] activity and a small utility that can create activities out of websites using that template.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The purpose of this project is twofold:&amp;lt;br /&amp;gt;&lt;br /&gt;
* it would make it easy to &amp;quot;sugarize&amp;quot; web apps (like gmail).&amp;lt;br /&amp;gt;&lt;br /&gt;
Users could press a button in the Browse activity (or there could be a separate activity for this) and a small tool would help them create a sugarized web app as a new activity.&lt;br /&gt;
* there are a lots of web developers out there that are familiar with HTML(5), CSS and JavaScript and it would be great to take advantage of their skills.&amp;lt;br /&amp;gt;&lt;br /&gt;
Web developers could use Webified to port their web apps to sugar using only web technologies, without having to learn Python.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I have been inspired by [http://fluidapp.com/ Fluid], which creates custom SSBs for websites. Fluid has Gears and GreaseMonkey plugins and provides a simple JavaScript API to websites for common native calls (like sounds, notifications, badges, etc.),  which makes it very easy to extend web apps to provide more integration. For example, GMail in a custom Fluid SSB feels like a native application.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two main strategies for implementing this:&lt;br /&gt;
# Running a standard browser, as light as possible, that points to a small local webserver (SimpleHTTPServer). It would use AJAX or a wrapper on top of that (like jsonrpc) to provide the bridge to python. The biggest downside would be that the SSB would have to call the python backend for persistence and interaction with Sugar. Another problem would be that this process could not easily be automated. Some python code would have to be written for any semi-interesting application. It would also be harder for web developers to hack Webified itself.&lt;br /&gt;
# In a small controller application, embed a browser runtime (with hulahop). The resulting activity would be completely standalone and would not depend on a web server anymore. Gears would have to be installed as a plugin for xulrunner. Some form of [https://addons.mozilla.org/en-US/firefox/addon/748 GreaseMonkey] would be very useful. Javascript dbus access through [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#WebKit_.28JavaScriptCore.29_version_notes this bridge], [https://www.socialtext.net/lukec/index.cgi?xocom XOCOM], pyxpcom directly or, in a worst case scenario, AJAX. It would be very similar to other efforts to bring web apps to the desktop and it could also provide better integration with Sugar.&amp;lt;br /&amp;gt;Browse could be used as a base for the Webified SSB. A small utility (probably an extension to the Browse activity) would create activities (XO bundles) out of websites.&amp;lt;br /&amp;gt;&lt;br /&gt;
I will be focusing on the second stragety.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Why not use existing solutions like Mozilla Prism or Titanium?&lt;br /&gt;
# Prism. It&#039;s just a stripped-down firefox. To make it useful, at least Gears would have to be installed and there would still remain the issue of integration, since Prism is designed for regular desktops. Building on hulahop and the existing Browse activity would yield better integration. There may still be useful code in Prism, like the SSB creation utility. &lt;br /&gt;
# Titanium. Titanium is more interesting, as it already is an SDK for creating desktop applications with web technologies. It&#039;s only real technical disadvantage is introducing a new dependency (webkit) in Sugar. However, it&#039;s [http://titanium-js.appspot.com/Core/Titanium design] is largely incompatible with Sugar, as it focuses on traditional desktops. Refactoring all that to fit into Sugar would be too much work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Milestones&#039;&#039;&#039;:&lt;br /&gt;
* Webified SSB can load a website (hello world)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: - getting more familiar with Sugar and Browse code&lt;br /&gt;
:: - building the Webified SSB.&lt;br /&gt;
: &#039;&#039;&#039;Week 1&#039;&#039;&#039;&lt;br /&gt;
* Both Browse and Webified SSB can use GMail in offline mode (through Gears)&lt;br /&gt;
: Requires: &lt;br /&gt;
:: - getting the Firefox Gears extension working in Browse and the Webified SSB&lt;br /&gt;
: &#039;&#039;&#039;Week 2, at worst 3&#039;&#039;&#039;&lt;br /&gt;
* Browse (with its utility extension) can successfully &amp;quot;sugarize&amp;quot; GMail and the resulting activity works.&lt;br /&gt;
: Requires:&lt;br /&gt;
:: - activity template as host for the Webified SSB&lt;br /&gt;
::: &#039;&#039;&#039;Week 3&#039;&#039;&#039;&lt;br /&gt;
:: - python tool that packages up activities, using the activity template&lt;br /&gt;
::: &#039;&#039;&#039;Week 3, at worst 4&#039;&#039;&#039;&lt;br /&gt;
:: - button in Browse that uses the python tool&lt;br /&gt;
::: &#039;&#039;&#039;Week 4&#039;&#039;&#039;&lt;br /&gt;
* JavaScript from inside a Webified SSB can call dbus stuff&lt;br /&gt;
: Dbus is vital for good integration, but there may not be enough time in GSoC for making a nice JavaScript-side API. So I will at least provide a javascript-dbus bridge that web developers can build on.&lt;br /&gt;
: Requires investigating:&lt;br /&gt;
:: - [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#Gecko_version_notes This] javascript-dbus bridge&lt;br /&gt;
:: - if that is not appropriate, try marshalling calls to Python with [http://en.wikipedia.org/wiki/JSON-RPC JSON-RPC]&lt;br /&gt;
::: - through PyXPCOM (hulahop). almost as good as a direct bridge&lt;br /&gt;
::: - through AJAX. sounds like the easiest way, but doing some [http://en.wikipedia.org/wiki/Cross-site_scripting XSS] would be needed&lt;br /&gt;
: &#039;&#039;&#039;Week 5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The remaining time could then be spent on polishing things up and for any eventual emergencies.&lt;br /&gt;
&lt;br /&gt;
If I have extra time.&lt;br /&gt;
* Webified SSB can save and restore its state with the Journal.&lt;br /&gt;
: Save &amp;amp; restore the browser state. possibilities:&lt;br /&gt;
:: - just save the URL. It may be slower to resume and in fact loses some state, but it should be enough for most cases.&lt;br /&gt;
:: - save the HTML structure. May have trouble with running scripts.&lt;br /&gt;
:: - pickle the WebView. I&#039;m not sure it works, but it may be the &lt;br /&gt;
: Save &amp;amp; restore Gears state&lt;br /&gt;
:: - do nothing. Gears provides resuming state. The only real drawback is that only the latest version will be available to resume. No actual data would be stored in the Journal.&lt;br /&gt;
:: - save the entire Gears profile. Could be very slow for large profiles.&lt;br /&gt;
:: - save just the sqlite database. Could be very slow for large databasesc (GMail).&lt;br /&gt;
* Build a JavaScript-side API for basic functionality that cannot be achieved easily with HTML and Gears&lt;br /&gt;
: - similar in concept to [http://fluidapp.com/developer/ Fluid&#039;s], but tailored for Sugar.&lt;br /&gt;
: - based on the javascript-dbus bridge&lt;br /&gt;
* Webified SSB can run a userscript (GreaseMonkey)&lt;br /&gt;
: Should be as easy as injecting some JavaScript in the page&lt;br /&gt;
: a GUI like the one GreaseMonkey has is outside the scope of this project&lt;br /&gt;
: there will be instructions for how to add/remove userscripts&lt;br /&gt;
* Webified SSB can use a userstyle (CSS)&lt;br /&gt;
: again, should be just injecting some CSS&lt;br /&gt;
: again, no GUI will be provided, just instructions&lt;br /&gt;
&lt;br /&gt;
Beyond GSoC, I would like to keep working on this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
:The result of my project would be something akin to Fluid (and Prism), but tailored for Sugar. It would allow users to make separate activities out of websites and, if those websites support Gears, also take them offline.&amp;lt;br /&amp;gt;&lt;br /&gt;
:The web is moving towards websites-as-applications and there are many projects to help integrate these new applications with the various desktop environments ([http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime AIR], [http://en.wikipedia.org/wiki/Silverlight#Silverlight_3 Silverlight Out-of-Browser Experience], [http://developer.mozilla.org/en/Prism Mozilla Prism], [http://fluidapp.com Fluid]). There is also the bold [http://en.wikipedia.org/wiki/Palm_webOS webOS] from Palm, that fully embraces web technologies by making them the default toolkit for building applications for the platform.&lt;br /&gt;
:It would be great to bring these ideas to Sugar, as they would enable easier usage of web applications and in general more orientation towards the web. It would also allow web developers to easily extend those websites to better integrate with Sugar, increasing the developer pool of and raising awareness towards Sugar.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Bryan Berry&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003451.html mailing list thread]&amp;lt;br /&amp;gt;&lt;br /&gt;
:Again, this requires people to learn python, a whole new language that they don&#039;t necessarily use at work. We need to enable developers to be very productive in just 2-3 hours per week. For them to be productive they need to be using tools they are already familiar w/.&lt;br /&gt;
:Python is a tool popular among sysadmins and hackers. It is great tool. But folks who develop web UIs use css, html, javascript, and flash. I highly doubt that will change in the near or distant future. These are people we need to recruit as activity designers.&lt;br /&gt;
&#039;&#039;&#039;Tomeu Vizoso&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html same mailing list thread] &amp;lt;br /&amp;gt;&lt;br /&gt;
: Without needing to get into what is better for our deployments, I do see value in making easier to make Sugar activities using technologies such as HTML, CSS, etc.&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24609</id>
		<title>Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24609"/>
		<updated>2009-03-31T16:05:47Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webified&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m making a template [http://en.wikipedia.org/wiki/Site-specific_browser SSB] activity and a small utility that can create activities out of websites using that template.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The purpose of this project is twofold:&amp;lt;br /&amp;gt;&lt;br /&gt;
* it would make it easy to &amp;quot;sugarize&amp;quot; web apps (like gmail).&amp;lt;br /&amp;gt;&lt;br /&gt;
Users could press a button in the Browse activity (or there could be a separate activity for this) and a small tool would help them create a sugarized web app as a new activity.&lt;br /&gt;
* there are a lots of web developers out there that are familiar with HTML(5), CSS and JavaScript and it would be great to take advantage of their skills.&amp;lt;br /&amp;gt;&lt;br /&gt;
Web developers could use Webified to port their web apps to sugar using only web technologies, without having to learn Python.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I have been inspired by [http://fluidapp.com/ Fluid], which creates custom SSBs for websites. Fluid has Gears and GreaseMonkey plugins and provides a simple JavaScript API to websites for common native calls (like sounds, notifications, badges, etc.),  which makes it very easy to extend web apps to provide more integration. For example, GMail in a custom Fluid SSB feels like a native application.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two main strategies for implementing this:&lt;br /&gt;
# Running a standard browser, as light as possible, that points to a small local webserver (SimpleHTTPServer). It would use AJAX or a wrapper on top of that (like jsonrpc) to provide the bridge to python. The biggest downside would be that the SSB would have to call the python backend for persistence and interaction with Sugar. Another problem would be that this process could not easily be automated. Some python code would have to be written for any semi-interesting application. It would also be harder for web developers to hack Webified itself.&lt;br /&gt;
# In a small controller application, embed a browser runtime (with hulahop). The resulting activity would be completely standalone and would not depend on a web server anymore. Gears would have to be installed as a plugin for xulrunner. Some form of [https://addons.mozilla.org/en-US/firefox/addon/748 GreaseMonkey] would be very useful. Javascript dbus access through [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#WebKit_.28JavaScriptCore.29_version_notes this bridge], [https://www.socialtext.net/lukec/index.cgi?xocom XOCOM], pyxpcom directly or, in a worst case scenario, AJAX. It would be very similar to other efforts to bring web apps to the desktop and it could also provide better integration with Sugar.&amp;lt;br /&amp;gt;Browse could be used as a base for the Webified SSB. A small utility (probably an extension to the Browse activity) would create activities (XO bundles) out of websites.&amp;lt;br /&amp;gt;&lt;br /&gt;
I will be focusing on the second stragety.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Why not use existing solutions like Mozilla Prism or Titanium?&lt;br /&gt;
# Prism. It&#039;s just a stripped-down firefox. To make it useful, at least Gears would have to be installed and there would still remain the issue of integration, since Prism is designed for regular desktops. Building on hulahop and the existing Browse activity would yield better integration. There may still be useful code in Prism, like the SSB creation utility. &lt;br /&gt;
# Titanium. Titanium is more interesting, as it already is an SDK for creating desktop applications with web technologies. It&#039;s only real technical disadvantage is introducing a new dependency (webkit) in Sugar. However, it&#039;s [http://titanium-js.appspot.com/Core/Titanium design] is largely incompatible with Sugar, as it focuses on traditional desktops. Refactoring all that to fit into Sugar would be too much work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Milestones&#039;&#039;&#039;:&lt;br /&gt;
# Webified SSB can load a website (hello world)&lt;br /&gt;
:: Requires: &lt;br /&gt;
::: - getting more familiar with Sugar and Browse code&lt;br /&gt;
::: - building the Webified SSB.&lt;br /&gt;
:: &#039;&#039;&#039;Week 1&#039;&#039;&#039;&lt;br /&gt;
# Both Browse and Webified SSB can use GMail in offline mode (through Gears)&lt;br /&gt;
:: Requires: &lt;br /&gt;
::: - getting the Firefox Gears extension working in Browse and the Webified SSB&lt;br /&gt;
:: &#039;&#039;&#039;Week 2, at worst 3&#039;&#039;&#039;&lt;br /&gt;
# Browse (with its utility extension) can successfully &amp;quot;sugarize&amp;quot; GMail and the resulting activity works.&lt;br /&gt;
:: Requires:&lt;br /&gt;
::: - activity template as host for the Webified SSB&lt;br /&gt;
:::: &#039;&#039;&#039;Week 3&#039;&#039;&#039;&lt;br /&gt;
::: - python tool that packages up activities, using the activity template&lt;br /&gt;
:::: &#039;&#039;&#039;Week 3, at worst 4&#039;&#039;&#039;&lt;br /&gt;
::: - button in Browse that uses the python tool&lt;br /&gt;
:::: &#039;&#039;&#039;Week 4&#039;&#039;&#039;&lt;br /&gt;
# JavaScript from inside a Webified SSB can call dbus stuff&lt;br /&gt;
:: Dbus is vital for good integration, but there may not be enough time in GSoC for making a nice JavaScript-side API. So I will at least provide a javascript-dbus bridge that web developers can build on.&lt;br /&gt;
:: Requires investigating:&lt;br /&gt;
::: - [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#Gecko_version_notes This] javascript-dbus bridge&lt;br /&gt;
::: - if that is not appropriate, try marshalling calls to Python with [http://en.wikipedia.org/wiki/JSON-RPC JSON-RPC]&lt;br /&gt;
:::: - through PyXPCOM (hulahop). almost as good as a direct bridge&lt;br /&gt;
:::: - through AJAX. sounds like the easiest way, but doing some [http://en.wikipedia.org/wiki/Cross-site_scripting XSS] would be needed&lt;br /&gt;
:: &#039;&#039;&#039;Week 5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The remaining time could then be spent on polishing things up and for any eventual emergencies.&lt;br /&gt;
&lt;br /&gt;
If I have extra time.&lt;br /&gt;
# Webified SSB can save and resume its state with the Journal.&lt;br /&gt;
:: Save &amp;amp; resume the browser state. possibilities:&lt;br /&gt;
::: - just save the URL. It may be slower to resume and in fact loses some state, but it should be enough for most cases.&lt;br /&gt;
::: - save the HTML structure. May have trouble with running scripts.&lt;br /&gt;
::: - pickle the WebView. I&#039;m not sure it works, but it may be the &lt;br /&gt;
:: Save &amp;amp; resume Gears state&lt;br /&gt;
::: - do nothing. Gears provides resuming state. The only real drawback is that only the latest version will be available to resume. No actual data would be stored in the Journal.&lt;br /&gt;
::: - save the entire Gears profile. Could be very slow for large profiles.&lt;br /&gt;
::: - save just the sqlite database. Could be very slow for large databasesc (GMail).&lt;br /&gt;
# Build a JavaScript-side API for basic functionality that cannot be achieved easily with HTML and Gears&lt;br /&gt;
:: - similar in concept to [http://fluidapp.com/developer/ Fluid&#039;s], but tailored for Sugar.&lt;br /&gt;
:: - based on the javascript-dbus bridge&lt;br /&gt;
# Webified SSB can run a userscript (GreaseMonkey)&lt;br /&gt;
:: Should be as easy as injecting some JavaScript in the page&lt;br /&gt;
:: a GUI like the one GreaseMonkey has is outside the scope of this project&lt;br /&gt;
:: there will be instructions for how to add/remove userscripts&lt;br /&gt;
# Webified SSB can use a userstyle (CSS)&lt;br /&gt;
:: again, should be just injecting some CSS&lt;br /&gt;
:: again, no GUI will be provided, just instructions&lt;br /&gt;
&lt;br /&gt;
Beyond GSoC, I would like to keep working on this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
:The result of my project would be something akin to Fluid (and Prism), but tailored for Sugar. It would allow users to make separate activities out of websites and, if those websites support Gears, also take them offline.&amp;lt;br /&amp;gt;&lt;br /&gt;
:The web is moving towards websites-as-applications and there are many projects to help integrate these new applications with the various desktop environments ([http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime AIR], [http://en.wikipedia.org/wiki/Silverlight#Silverlight_3 Silverlight Out-of-Browser Experience], [http://developer.mozilla.org/en/Prism Mozilla Prism], [http://fluidapp.com Fluid]). There is also the bold [http://en.wikipedia.org/wiki/Palm_webOS webOS] from Palm, that fully embraces web technologies by making them the default toolkit for building applications for the platform.&lt;br /&gt;
:It would be great to bring these ideas to Sugar, as they would enable easier usage of web applications and in general more orientation towards the web. It would also allow web developers to easily extend those websites to better integrate with Sugar, increasing the developer pool of and raising awareness towards Sugar.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Bryan Berry&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003451.html mailing list thread]&amp;lt;br /&amp;gt;&lt;br /&gt;
:Again, this requires people to learn python, a whole new language that they don&#039;t necessarily use at work. We need to enable developers to be very productive in just 2-3 hours per week. For them to be productive they need to be using tools they are already familiar w/.&lt;br /&gt;
:Python is a tool popular among sysadmins and hackers. It is great tool. But folks who develop web UIs use css, html, javascript, and flash. I highly doubt that will change in the near or distant future. These are people we need to recruit as activity designers.&lt;br /&gt;
&#039;&#039;&#039;Tomeu Vizoso&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html same mailing list thread] &amp;lt;br /&amp;gt;&lt;br /&gt;
: Without needing to get into what is better for our deployments, I do see value in making easier to make Sugar activities using technologies such as HTML, CSS, etc.&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Talk:Webified&amp;diff=24606</id>
		<title>Talk:Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Talk:Webified&amp;diff=24606"/>
		<updated>2009-03-31T15:59:07Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Prior discussion===&lt;br /&gt;
Great application!  I really hope we get to do this.  If you haven&#039;t already, you may want to check out some of the threads on sugar-devel and IAEP about this topic.&lt;br /&gt;
&lt;br /&gt;
* http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html At some point in this thread I propose recycling the Browse activity source as the basis for this framework.&lt;br /&gt;
&lt;br /&gt;
[[User:Wade|Wade]] 14:27, 26 March 2009 (UTC)&lt;br /&gt;
: Thanks for reminding me about that discussion! I&#039;ve used quotes from that mailing list in the &#039;impact on the community&#039; section. I hope that&#039;s ok. [[User:Lucian|Lucian]] 19:25, 29 March 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== This is really ambitious ==&lt;br /&gt;
&lt;br /&gt;
Can you talk about the compromises you&#039;d make if you couldn&#039;t make all your milestones? And how much work you think each one is? [[User:Homunq|Homunq]] 00:49, 31 March 2009 (UTC)&lt;br /&gt;
: I clarified the milestones and their timing. I also discovered : and &#039; &#039; &#039;, then made everything more readable. [[User:Lucian|Lucian]] 15:57, 31 March 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Talk:Webified&amp;diff=24605</id>
		<title>Talk:Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Talk:Webified&amp;diff=24605"/>
		<updated>2009-03-31T15:57:57Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Prior discussion===&lt;br /&gt;
Great application!  I really hope we get to do this.  If you haven&#039;t already, you may want to check out some of the threads on sugar-devel and IAEP about this topic.&lt;br /&gt;
&lt;br /&gt;
* http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html At some point in this thread I propose recycling the Browse activity source as the basis for this framework.&lt;br /&gt;
&lt;br /&gt;
[[User:Wade|Wade]] 14:27, 26 March 2009 (UTC)&lt;br /&gt;
: Thanks for reminding me about that discussion! I&#039;ve used quotes from that mailing list in the &#039;impact on the community&#039; section. I hope that&#039;s ok. [[User:Lucian|Lucian]] 19:25, 29 March 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== This is really ambitious ==&lt;br /&gt;
&lt;br /&gt;
Can you talk about the compromises you&#039;d make if you couldn&#039;t make all your milestones? And how much work you think each one is? [[User:Homunq|Homunq]] 00:49, 31 March 2009 (UTC)&lt;br /&gt;
: I clarified the milestones and their timing. I also discovered : and &#039;&#039;&#039;, then made everything more readable. [[User:Lucian|Lucian]] 15:57, 31 March 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24603</id>
		<title>Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24603"/>
		<updated>2009-03-31T15:56:37Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is your name?&#039;&#039;&#039;&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* &#039;&#039;&#039;What is your email address?&#039;&#039;&#039;&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* &#039;&#039;&#039;What is your Sugar Labs wiki username?&#039;&#039;&#039;&lt;br /&gt;
lucian&lt;br /&gt;
* &#039;&#039;&#039;What is your IRC nickname?&#039;&#039;&#039;&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* &#039;&#039;&#039;What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&#039;&#039;&#039;&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* &#039;&#039;&#039;Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&#039;&#039;&#039;&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* &#039;&#039;&#039;Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&#039;&#039;&#039;&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere since there was little interest. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the name of your project?&#039;&#039;&#039;&lt;br /&gt;
Webified&lt;br /&gt;
* &#039;&#039;&#039;Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m making a template [http://en.wikipedia.org/wiki/Site-specific_browser SSB] activity and a small utility that can create activities out of websites using that template.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The purpose of this project is twofold:&amp;lt;br /&amp;gt;&lt;br /&gt;
* it would make it easy to &amp;quot;sugarize&amp;quot; web apps (like gmail).&amp;lt;br /&amp;gt;&lt;br /&gt;
Users could press a button in the Browse activity (or there could be a separate activity for this) and a small tool would help them create a sugarized web app as a new activity.&lt;br /&gt;
* there are a lots of web developers out there that are familiar with HTML(5), CSS and JavaScript and it would be great to take advantage of their skills.&amp;lt;br /&amp;gt;&lt;br /&gt;
Web developers could use Webified to port their web apps to sugar using only web technologies, without having to learn Python.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I have been inspired by [http://fluidapp.com/ Fluid], which creates custom SSBs for websites. Fluid has Gears and GreaseMonkey plugins and provides a simple JavaScript API to websites for common native calls (like sounds, notifications, badges, etc.),  which makes it very easy to extend web apps to provide more integration. For example, GMail in a custom Fluid SSB feels like a native application.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two main strategies for implementing this:&lt;br /&gt;
# Running a standard browser, as light as possible, that points to a small local webserver (SimpleHTTPServer). It would use AJAX or a wrapper on top of that (like jsonrpc) to provide the bridge to python. The biggest downside would be that the SSB would have to call the python backend for persistence and interaction with Sugar. Another problem would be that this process could not easily be automated. Some python code would have to be written for any semi-interesting application. It would also be harder for web developers to hack Webified itself.&lt;br /&gt;
# In a small controller application, embed a browser runtime (with hulahop). The resulting activity would be completely standalone and would not depend on a web server anymore. Gears would have to be installed as a plugin for xulrunner. Some form of [https://addons.mozilla.org/en-US/firefox/addon/748 GreaseMonkey] would be very useful. Javascript dbus access through [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#WebKit_.28JavaScriptCore.29_version_notes this bridge], [https://www.socialtext.net/lukec/index.cgi?xocom XOCOM], pyxpcom directly or, in a worst case scenario, AJAX. It would be very similar to other efforts to bring web apps to the desktop and it could also provide better integration with Sugar.&amp;lt;br /&amp;gt;Browse could be used as a base for the Webified SSB. A small utility (probably an extension to the Browse activity) would create activities (XO bundles) out of websites.&amp;lt;br /&amp;gt;&lt;br /&gt;
I will be focusing on the second stragety.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Why not use existing solutions like Mozilla Prism or Titanium?&lt;br /&gt;
# Prism. It&#039;s just a stripped-down firefox. To make it useful, at least Gears would have to be installed and there would still remain the issue of integration, since Prism is designed for regular desktops. Building on hulahop and the existing Browse activity would yield better integration. There may still be useful code in Prism, like the SSB creation utility. &lt;br /&gt;
# Titanium. Titanium is more interesting, as it already is an SDK for creating desktop applications with web technologies. It&#039;s only real technical disadvantage is introducing a new dependency (webkit) in Sugar. However, it&#039;s [http://titanium-js.appspot.com/Core/Titanium design] is largely incompatible with Sugar, as it focuses on traditional desktops. Refactoring all that to fit into Sugar would be too much work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Milestones&#039;&#039;&#039;:&lt;br /&gt;
# Webified SSB can load a website (hello world)&lt;br /&gt;
:: Requires: &lt;br /&gt;
::: - getting more familiar with Sugar and Browse code&lt;br /&gt;
::: - building the Webified SSB.&lt;br /&gt;
:: &#039;&#039;&#039;Week 1&#039;&#039;&#039;&lt;br /&gt;
# Both Browse and Webified SSB can use GMail in offline mode (through Gears)&lt;br /&gt;
:: Requires: &lt;br /&gt;
::: - getting the Firefox Gears extension working in Browse and the Webified SSB&lt;br /&gt;
:: &#039;&#039;&#039;Week 2, at worst 3&#039;&#039;&#039;&lt;br /&gt;
# Browse (with its utility extension) can successfully &amp;quot;sugarize&amp;quot; GMail and the resulting activity works.&lt;br /&gt;
:: Requires:&lt;br /&gt;
::: - activity template as host for the Webified SSB&lt;br /&gt;
:::: &#039;&#039;&#039;Week 3&#039;&#039;&#039;&lt;br /&gt;
::: - python tool that packages up activities, using the activity template&lt;br /&gt;
:::: &#039;&#039;&#039;Week 3, at worst 4&#039;&#039;&#039;&lt;br /&gt;
::: - button in Browse that uses the python tool&lt;br /&gt;
:::: &#039;&#039;&#039;Week 4&#039;&#039;&#039;&lt;br /&gt;
# JavaScript from inside a Webified SSB can call dbus stuff&lt;br /&gt;
:: Dbus is vital for good integration, but there may not be enough time in GSoC for making a nice JavaScript-side API. So I will at least provide a javascript-dbus bridge that web developers can build on.&lt;br /&gt;
:: Requires investigating:&lt;br /&gt;
::: - [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#Gecko_version_notes This] javascript-dbus bridge&lt;br /&gt;
::: - if that is not appropriate, try marshalling calls to Python with [http://en.wikipedia.org/wiki/JSON-RPC JSON-RPC]&lt;br /&gt;
:::: - through PyXPCOM (hulahop). almost as good as a direct bridge&lt;br /&gt;
:::: - through AJAX. sounds like the easiest way, but doing some [http://en.wikipedia.org/wiki/Cross-site_scripting XSS] would be needed&lt;br /&gt;
:: &#039;&#039;&#039;Week 5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The remaining time could then be spent on polishing things up and for any eventual emergencies.&lt;br /&gt;
&lt;br /&gt;
If I have extra time.&lt;br /&gt;
# Webified SSB can save and resume its state with the Journal.&lt;br /&gt;
# Build a JavaScript-side API for basic functionality that cannot be achieved easily with HTML and Gears&lt;br /&gt;
: similar in concept to [http://fluidapp.com/developer/ Fluid&#039;s], but tailored for Sugar.&lt;br /&gt;
: based on the javascript-dbus bridge&lt;br /&gt;
# Webified SSB can run a userscript (GreaseMonkey)&lt;br /&gt;
: Should be as easy as injecting some JavaScript in the page&lt;br /&gt;
: a GUI like the one GreaseMonkey has is outside the scope of this project&lt;br /&gt;
:: there will be instructions for how to add/remove userscripts&lt;br /&gt;
# Webified SSB can use a userstyle (CSS)&lt;br /&gt;
: again, should be just injecting some CSS&lt;br /&gt;
: again, no GUI will be provided, just instructions&lt;br /&gt;
&lt;br /&gt;
Beyond GSoC, I would like to keep working on this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* &#039;&#039;&#039;If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
:The result of my project would be something akin to Fluid (and Prism), but tailored for Sugar. It would allow users to make separate activities out of websites and, if those websites support Gears, also take them offline.&amp;lt;br /&amp;gt;&lt;br /&gt;
:The web is moving towards websites-as-applications and there are many projects to help integrate these new applications with the various desktop environments ([http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime AIR], [http://en.wikipedia.org/wiki/Silverlight#Silverlight_3 Silverlight Out-of-Browser Experience], [http://developer.mozilla.org/en/Prism Mozilla Prism], [http://fluidapp.com Fluid]). There is also the bold [http://en.wikipedia.org/wiki/Palm_webOS webOS] from Palm, that fully embraces web technologies by making them the default toolkit for building applications for the platform.&lt;br /&gt;
:It would be great to bring these ideas to Sugar, as they would enable easier usage of web applications and in general more orientation towards the web. It would also allow web developers to easily extend those websites to better integrate with Sugar, increasing the developer pool of and raising awareness towards Sugar.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Bryan Berry&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003451.html mailing list thread]&amp;lt;br /&amp;gt;&lt;br /&gt;
:Again, this requires people to learn python, a whole new language that they don&#039;t necessarily use at work. We need to enable developers to be very productive in just 2-3 hours per week. For them to be productive they need to be using tools they are already familiar w/.&lt;br /&gt;
:Python is a tool popular among sysadmins and hackers. It is great tool. But folks who develop web UIs use css, html, javascript, and flash. I highly doubt that will change in the near or distant future. These are people we need to recruit as activity designers.&lt;br /&gt;
&#039;&#039;&#039;Tomeu Vizoso&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html same mailing list thread] &amp;lt;br /&amp;gt;&lt;br /&gt;
: Without needing to get into what is better for our deployments, I do see value in making easier to make Sugar activities using technologies such as HTML, CSS, etc.&lt;br /&gt;
* &#039;&#039;&#039;Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&#039;&#039;&#039;&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* &#039;&#039;&#039;What will you do if you get stuck on your project and your mentor isn&#039;t around?&#039;&#039;&#039;&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* &#039;&#039;&#039;How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?&#039;&#039;&#039;&lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* &#039;&#039;&#039;We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&#039;&#039;&#039;&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* &#039;&#039;&#039;What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&#039;&#039;&#039;&lt;br /&gt;
XL&lt;br /&gt;
* &#039;&#039;&#039;Describe a great learning experience you had as a child.&#039;&#039;&#039;&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* &#039;&#039;&#039;Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&#039;&#039;&#039;&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24602</id>
		<title>Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24602"/>
		<updated>2009-03-31T15:52:58Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* What is your name?&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* What is your email address?&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* What is your Sugar Labs wiki username?&lt;br /&gt;
lucian&lt;br /&gt;
* What is your IRC nickname?&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* What is the name of your project?&lt;br /&gt;
Webified&lt;br /&gt;
* Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&lt;br /&gt;
I&#039;m making a template [http://en.wikipedia.org/wiki/Site-specific_browser SSB] activity and a small utility that can create activities out of websites using that template.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The purpose of this project is twofold:&amp;lt;br /&amp;gt;&lt;br /&gt;
* it would make it easy to &amp;quot;sugarize&amp;quot; web apps (like gmail).&amp;lt;br /&amp;gt;&lt;br /&gt;
Users could press a button in the Browse activity (or there could be a separate activity for this) and a small tool would help them create a sugarized web app as a new activity.&lt;br /&gt;
* there are a lots of web developers out there that are familiar with HTML(5), CSS and JavaScript and it would be great to take advantage of their skills.&amp;lt;br /&amp;gt;&lt;br /&gt;
Web developers could use Webified to port their web apps to sugar using only web technologies, without having to learn Python.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I have been inspired by [http://fluidapp.com/ Fluid], which creates custom SSBs for websites. Fluid has Gears and GreaseMonkey plugins and provides a simple JavaScript API to websites for common native calls (like sounds, notifications, badges, etc.),  which makes it very easy to extend web apps to provide more integration. For example, GMail in a custom Fluid SSB feels like a native application.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two main strategies for implementing this:&lt;br /&gt;
# Running a standard browser, as light as possible, that points to a small local webserver (SimpleHTTPServer). It would use AJAX or a wrapper on top of that (like jsonrpc) to provide the bridge to python. The biggest downside would be that the SSB would have to call the python backend for persistence and interaction with Sugar. Another problem would be that this process could not easily be automated. Some python code would have to be written for any semi-interesting application. It would also be harder for web developers to hack Webified itself.&lt;br /&gt;
# In a small controller application, embed a browser runtime (with hulahop). The resulting activity would be completely standalone and would not depend on a web server anymore. Gears would have to be installed as a plugin for xulrunner. Some form of [https://addons.mozilla.org/en-US/firefox/addon/748 GreaseMonkey] would be very useful. Javascript dbus access through [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#WebKit_.28JavaScriptCore.29_version_notes this bridge], [https://www.socialtext.net/lukec/index.cgi?xocom XOCOM], pyxpcom directly or, in a worst case scenario, AJAX. It would be very similar to other efforts to bring web apps to the desktop and it could also provide better integration with Sugar.&amp;lt;br /&amp;gt;Browse could be used as a base for the Webified SSB. A small utility (probably an extension to the Browse activity) would create activities (XO bundles) out of websites.&amp;lt;br /&amp;gt;&lt;br /&gt;
I will be focusing on the second stragety.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Why not use existing solutions like Mozilla Prism or Titanium?&lt;br /&gt;
# Prism. It&#039;s just a stripped-down firefox. To make it useful, at least Gears would have to be installed and there would still remain the issue of integration, since Prism is designed for regular desktops. Building on hulahop and the existing Browse activity would yield better integration. There may still be useful code in Prism, like the SSB creation utility. &lt;br /&gt;
# Titanium. Titanium is more interesting, as it already is an SDK for creating desktop applications with web technologies. It&#039;s only real technical disadvantage is introducing a new dependency (webkit) in Sugar. However, it&#039;s [http://titanium-js.appspot.com/Core/Titanium design] is largely incompatible with Sugar, as it focuses on traditional desktops. Refactoring all that to fit into Sugar would be too much work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Milestones&#039;&#039;&#039;:&lt;br /&gt;
# Webified SSB can load a website (hello world)&lt;br /&gt;
:: Requires: &lt;br /&gt;
::: - getting more familiar with Sugar and Browse code&lt;br /&gt;
::: - building the Webified SSB.&lt;br /&gt;
:: &#039;&#039;&#039;Week 1&#039;&#039;&#039;&lt;br /&gt;
# Both Browse and Webified SSB can use GMail in offline mode (through Gears)&lt;br /&gt;
:: Requires: &lt;br /&gt;
::: - getting the Firefox Gears extension working in Browse and the Webified SSB&lt;br /&gt;
:: &#039;&#039;&#039;Week 2, at worst 3&#039;&#039;&#039;&lt;br /&gt;
# Browse (with its utility extension) can successfully &amp;quot;sugarize&amp;quot; GMail and the resulting activity works.&lt;br /&gt;
:: Requires:&lt;br /&gt;
::: - activity template as host for the Webified SSB&lt;br /&gt;
:::: &#039;&#039;&#039;Week 3&#039;&#039;&#039;&lt;br /&gt;
::: - python tool that packages up activities, using the activity template&lt;br /&gt;
:::: &#039;&#039;&#039;Week 3, at worst 4&#039;&#039;&#039;&lt;br /&gt;
::: - button in Browse that uses the python tool&lt;br /&gt;
:::: &#039;&#039;&#039;Week 4&#039;&#039;&#039;&lt;br /&gt;
# JavaScript from inside a Webified SSB can call dbus stuff&lt;br /&gt;
:: Dbus is vital for good integration, but there may not be enough time in GSoC for making a nice JavaScript-side API. So I will at least provide a javascript-dbus bridge that web developers can build on.&lt;br /&gt;
:: Requires investigating:&lt;br /&gt;
::: - [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#Gecko_version_notes This] javascript-dbus bridge&lt;br /&gt;
::: - if that is not appropriate, try marshalling calls to Python with [http://en.wikipedia.org/wiki/JSON-RPC JSON-RPC]&lt;br /&gt;
:::: - through PyXPCOM (hulahop). almost as good as a direct bridge&lt;br /&gt;
:::: - through AJAX. sounds like the easiest way, but doing some [http://en.wikipedia.org/wiki/Cross-site_scripting XSS] would be needed&lt;br /&gt;
:: &#039;&#039;&#039;Week 5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The remaining time could then be spent on polishing things up and for any eventual emergencies.&lt;br /&gt;
&lt;br /&gt;
If I have extra time.&lt;br /&gt;
# Webified SSB can save and resume its state with the Journal.&lt;br /&gt;
# Build a JavaScript-side API for basic functionality that cannot be achieved easily with HTML and Gears&lt;br /&gt;
: similar in concept to [http://fluidapp.com/developer/ Fluid&#039;s], but tailored for Sugar.&lt;br /&gt;
: based on the javascript-dbus bridge&lt;br /&gt;
# Webified SSB can run a userscript (GreaseMonkey)&lt;br /&gt;
: Should be as easy as injecting some JavaScript in the page&lt;br /&gt;
: a GUI like the one GreaseMonkey has is outside the scope of this project&lt;br /&gt;
:: there will be instructions for how to add/remove userscripts&lt;br /&gt;
# Webified SSB can use a userstyle (CSS)&lt;br /&gt;
: again, should be just injecting some CSS&lt;br /&gt;
: again, no GUI will be provided, just instructions&lt;br /&gt;
&lt;br /&gt;
Beyond GSoC, I would like to keep working on this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
:The result of my project would be something akin to Fluid (and Prism), but tailored for Sugar. It would allow users to make separate activities out of websites and, if those websites support Gears, also take them offline.&amp;lt;br /&amp;gt;&lt;br /&gt;
:The web is moving towards websites-as-applications and there are many projects to help integrate these new applications with the various desktop environments ([http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime AIR], [http://en.wikipedia.org/wiki/Silverlight#Silverlight_3 Silverlight Out-of-Browser Experience], [http://developer.mozilla.org/en/Prism Mozilla Prism], [http://fluidapp.com Fluid]). There is also the bold [http://en.wikipedia.org/wiki/Palm_webOS webOS] from Palm, that fully embraces web technologies by making them the default toolkit for building applications for the platform.&lt;br /&gt;
:It would be great to bring these ideas to Sugar, as they would enable easier usage of web applications and in general more orientation towards the web. It would also allow web developers to easily extend those websites to better integrate with Sugar, increasing the developer pool of and raising awareness towards Sugar.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Bryan Berry&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003451.html mailing list thread]&amp;lt;br /&amp;gt;&lt;br /&gt;
:Again, this requires people to learn python, a whole new language that they don&#039;t necessarily use at work. We need to enable developers to be very productive in just 2-3 hours per week. For them to be productive they need to be using tools they are already familiar w/.&lt;br /&gt;
:Python is a tool popular among sysadmins and hackers. It is great tool. But folks who develop web UIs use css, html, javascript, and flash. I highly doubt that will change in the near or distant future. These are people we need to recruit as activity designers.&lt;br /&gt;
&#039;&#039;&#039;Tomeu Vizoso&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html same mailing list thread] &amp;lt;br /&amp;gt;&lt;br /&gt;
: Without needing to get into what is better for our deployments, I do see value in making easier to make Sugar activities using technologies such as HTML, CSS, etc.&lt;br /&gt;
* Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* What will you do if you get stuck on your project and your mentor isn&#039;t around?&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project? &lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&lt;br /&gt;
XL&lt;br /&gt;
* Describe a great learning experience you had as a child.&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24601</id>
		<title>Webified</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Webified&amp;diff=24601"/>
		<updated>2009-03-31T15:52:08Z</updated>

		<summary type="html">&lt;p&gt;Lucian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* What is your name?&lt;br /&gt;
Lucian Branescu Mihaila&lt;br /&gt;
* What is your email address?&lt;br /&gt;
lucian dot branescu at gmail dot com&lt;br /&gt;
* What is your Sugar Labs wiki username?&lt;br /&gt;
lucian&lt;br /&gt;
* What is your IRC nickname?&lt;br /&gt;
lucian. backups are lucian1900 and sindbad1900&lt;br /&gt;
* What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&lt;br /&gt;
English and Romanian, either is fine.&lt;br /&gt;
* Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&lt;br /&gt;
Mostly in the UK, perhaps a short while in Romania during the summer break.&amp;lt;br /&amp;gt; I don&#039;t have a &#039;coding time&#039; in my schedule, anything goes. I also often stay up late at night.&lt;br /&gt;
* Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&lt;br /&gt;
I&#039;ve started a small project on freshmeat called statusPidgin that fetched text from various sources and made it a status message in Pidgin. It&#039;s now abandoned, but you can find the source [http://linux.softpedia.com/get/Communications/Chat/statusPidgin-31896.shtml  on softpedia ]&amp;lt;br /&amp;gt;&lt;br /&gt;
I have also released one of my school projects as open source (a small web imap/pop3 client), but I doubt it&#039;s still hosted anywhere. You can get it from [http://dl.getdropbox.com/u/317039/easymail.zip my dropbox]. I haven&#039;t contributed in a significant way to open source projects before, beside bug reports and small patches. &amp;lt;br /&amp;gt;&lt;br /&gt;
I am a user of open source (linux, KDE, gcc, python, firefox, webkit) and am absolutely delighted by the concept. I am convinced it is the most efficient way of developing software, and perhaps not only software.&amp;lt;br /&amp;gt;&lt;br /&gt;
I am especially interested in the Sugar project, as I have myself experienced the closed-mindedness that schools instill in their students by teaching them using closed source software. I have been fortunate enough to get some exposure to linux and kde early enough and I would like to help others by showing them the alternatives.&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* What is the name of your project?&lt;br /&gt;
Webified&lt;br /&gt;
* Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&lt;br /&gt;
I&#039;m making a template [http://en.wikipedia.org/wiki/Site-specific_browser SSB] activity and a small utility that can create activities out of websites using that template.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The purpose of this project is twofold:&amp;lt;br /&amp;gt;&lt;br /&gt;
* it would make it easy to &amp;quot;sugarize&amp;quot; web apps (like gmail).&amp;lt;br /&amp;gt;&lt;br /&gt;
Users could press a button in the Browse activity (or there could be a separate activity for this) and a small tool would help them create a sugarized web app as a new activity.&lt;br /&gt;
* there are a lots of web developers out there that are familiar with HTML(5), CSS and JavaScript and it would be great to take advantage of their skills.&amp;lt;br /&amp;gt;&lt;br /&gt;
Web developers could use Webified to port their web apps to sugar using only web technologies, without having to learn Python.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I have been inspired by [http://fluidapp.com/ Fluid], which creates custom SSBs for websites. Fluid has Gears and GreaseMonkey plugins and provides a simple JavaScript API to websites for common native calls (like sounds, notifications, badges, etc.),  which makes it very easy to extend web apps to provide more integration. For example, GMail in a custom Fluid SSB feels like a native application.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two main strategies for implementing this:&lt;br /&gt;
# Running a standard browser, as light as possible, that points to a small local webserver (SimpleHTTPServer). It would use AJAX or a wrapper on top of that (like jsonrpc) to provide the bridge to python. The biggest downside would be that the SSB would have to call the python backend for persistence and interaction with Sugar. Another problem would be that this process could not easily be automated. Some python code would have to be written for any semi-interesting application. It would also be harder for web developers to hack Webified itself.&lt;br /&gt;
# In a small controller application, embed a browser runtime (with hulahop). The resulting activity would be completely standalone and would not depend on a web server anymore. Gears would have to be installed as a plugin for xulrunner. Some form of [https://addons.mozilla.org/en-US/firefox/addon/748 GreaseMonkey] would be very useful. Javascript dbus access through [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#WebKit_.28JavaScriptCore.29_version_notes this bridge], [https://www.socialtext.net/lukec/index.cgi?xocom XOCOM], pyxpcom directly or, in a worst case scenario, AJAX. It would be very similar to other efforts to bring web apps to the desktop and it could also provide better integration with Sugar.&amp;lt;br /&amp;gt;Browse could be used as a base for the Webified SSB. A small utility (probably an extension to the Browse activity) would create activities (XO bundles) out of websites.&amp;lt;br /&amp;gt;&lt;br /&gt;
I will be focusing on the second stragety.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Why not use existing solutions like Mozilla Prism or Titanium?&lt;br /&gt;
# Prism. It&#039;s just a stripped-down firefox. To make it useful, at least Gears would have to be installed and there would still remain the issue of integration, since Prism is designed for regular desktops. Building on hulahop and the existing Browse activity would yield better integration. There may still be useful code in Prism, like the SSB creation utility. &lt;br /&gt;
# Titanium. Titanium is more interesting, as it already is an SDK for creating desktop applications with web technologies. It&#039;s only real technical disadvantage is introducing a new dependency (webkit) in Sugar. However, it&#039;s [http://titanium-js.appspot.com/Core/Titanium design] is largely incompatible with Sugar, as it focuses on traditional desktops. Refactoring all that to fit into Sugar would be too much work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Milestones&#039;&#039;&#039;:&lt;br /&gt;
# Webified SSB can load a website (hello world)&lt;br /&gt;
:: Requires: &lt;br /&gt;
::: - getting more familiar with Sugar and Browse code&lt;br /&gt;
::: - building the Webified SSB.&lt;br /&gt;
:: &#039;&#039;&#039;Week 1&#039;&#039;&#039;&lt;br /&gt;
# Both Browse and Webified SSB can use GMail in offline mode (through Gears)&lt;br /&gt;
:: Requires: &lt;br /&gt;
::: - getting the Firefox Gears extension working in Browse and the Webified SSB&lt;br /&gt;
:: &#039;&#039;&#039;Week 2, at worst 3&#039;&#039;&#039;&lt;br /&gt;
# Browse (with its utility extension) can successfully &amp;quot;sugarize&amp;quot; GMail and the resulting activity works.&lt;br /&gt;
:: Requires:&lt;br /&gt;
::: - activity template as host for the Webified SSB&lt;br /&gt;
:::: &#039;&#039;&#039;Week 3&#039;&#039;&#039;&lt;br /&gt;
::: - python tool that packages up activities, using the activity template&lt;br /&gt;
:::: &#039;&#039;&#039;Week 3, at worst 4&#039;&#039;&#039;&lt;br /&gt;
::: - button in Browse that uses the python tool&lt;br /&gt;
:::: &#039;&#039;&#039;Week 4&#039;&#039;&#039;&lt;br /&gt;
# JavaScript from inside a Webified SSB can call dbus stuff&lt;br /&gt;
:: dbus is vital for good integration, but there may not be enough time in GSoC for making a nice JavaScript-side API. So I will at least provide a javascript-dbus bridge that web developers can build on.&lt;br /&gt;
:: Requires investigating:&lt;br /&gt;
::: - [http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge#Gecko_version_notes This] javascript-dbus bridge&lt;br /&gt;
::: - if that is not appropriate, try marshalling calls to Python with [http://en.wikipedia.org/wiki/JSON-RPC JSON-RPC]&lt;br /&gt;
:::: - through PyXPCOM (hulahop). almost as good as a direct bridge&lt;br /&gt;
:::: - through AJAX. sounds like the easiest way, but doing some [http://en.wikipedia.org/wiki/Cross-site_scripting XSS] would be needed&lt;br /&gt;
:: &#039;&#039;&#039;Week 5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The remaining time could then be spent on polishing things up and for any eventual emergencies.&lt;br /&gt;
&lt;br /&gt;
If I have extra time.&lt;br /&gt;
# Webified SSB can save and resume its state with the Journal.&lt;br /&gt;
# Build a JavaScript-side API for basic functionality that cannot be achieved easily with HTML and Gears&lt;br /&gt;
: similar in concept to [http://fluidapp.com/developer/ Fluid&#039;s], but tailored for Sugar.&lt;br /&gt;
: based on the javascript-dbus bridge&lt;br /&gt;
# Webified SSB can run a userscript (GreaseMonkey)&lt;br /&gt;
: Should be as easy as injecting some JavaScript in the page&lt;br /&gt;
: a GUI like the one GreaseMonkey has is outside the scope of this project&lt;br /&gt;
:: there will be instructions for how to add/remove userscripts&lt;br /&gt;
# Webified SSB can use a userstyle (CSS)&lt;br /&gt;
: again, should be just injecting some CSS&lt;br /&gt;
: again, no GUI will be provided, just instructions&lt;br /&gt;
&lt;br /&gt;
Beyond GSoC, I would like to keep working on this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&lt;br /&gt;
&lt;br /&gt;
Python is my favourite programming language and JavaScript is a close enough second.&lt;br /&gt;
I have some experience with python and I&#039;ve built various things, from small utilities to websites with it. My most interesting project was helping to port a scientific application from c++ and Qt3 to Python and Qt4. It involved writing some Pyrex as well. It was lovely to see just how much the code shrunk, while keeping the application itself just as speedy.&lt;br /&gt;
&lt;br /&gt;
I have used JavaScript and HTML to build a small web game, Mousebuster (not online, get it from [http://dl.getdropbox.com/u/317039/mousebuster.zip my dropbox]). Although at first I did not like javascript at all, I quickly realised it&#039;s immense advantage: huge existing install base.&lt;br /&gt;
&lt;br /&gt;
I also had some contact with C# and Java and have been thoroughly disappointed by their general lack of expressiveness. I did one small schoolwork in C#, that dealt with a [http://dl.getdropbox.com/u/317039/csharp.zip database of students]. Recently, I did another small schoolwork in Java, dealing with a [http://dl.getdropbox.com/u/317039/cricket.zip cricket club]. After finishing each, I was amazed at how much of my code was just boilerplate or fighting the type system, code that I wouldn&#039;t have had to write in a more dynamic language.&lt;br /&gt;
&lt;br /&gt;
I also used various linux distros for several years, until last year. I got a macbook as a gift and broadcom drivers are still a mess, but that&#039;ll get fixed at some point. I found unix in general so intriguing that I set up a small home server with a 300mhz CPU. I put debian on it and used it for various purposes, from web hosting, file serving, distcc node to a router for my home.&lt;br /&gt;
&lt;br /&gt;
Since I was using a lot of open source at home, I tried to push it in school as well. I managed to make students and teachers aware of GCC as a replacement for Borland C/C++, Mono and SharpDevelop as a replacement for the not-quite-free Visual Studio. With the help of a friend, I even managed to convince the head of school to install Ubuntu in one of the labs.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
* If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&lt;br /&gt;
&#039;&#039;&#039;Myself&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
:The result of my project would be something akin to Fluid (and Prism), but tailored for Sugar. It would allow users to make separate activities out of websites and, if those websites support Gears, also take them offline.&amp;lt;br /&amp;gt;&lt;br /&gt;
:The web is moving towards websites-as-applications and there are many projects to help integrate these new applications with the various desktop environments ([http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime AIR], [http://en.wikipedia.org/wiki/Silverlight#Silverlight_3 Silverlight Out-of-Browser Experience], [http://developer.mozilla.org/en/Prism Mozilla Prism], [http://fluidapp.com Fluid]). There is also the bold [http://en.wikipedia.org/wiki/Palm_webOS webOS] from Palm, that fully embraces web technologies by making them the default toolkit for building applications for the platform.&lt;br /&gt;
:It would be great to bring these ideas to Sugar, as they would enable easier usage of web applications and in general more orientation towards the web. It would also allow web developers to easily extend those websites to better integrate with Sugar, increasing the developer pool of and raising awareness towards Sugar.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Bryan Berry&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003451.html mailing list thread]&amp;lt;br /&amp;gt;&lt;br /&gt;
:Again, this requires people to learn python, a whole new language that they don&#039;t necessarily use at work. We need to enable developers to be very productive in just 2-3 hours per week. For them to be productive they need to be using tools they are already familiar w/.&lt;br /&gt;
:Python is a tool popular among sysadmins and hackers. It is great tool. But folks who develop web UIs use css, html, javascript, and flash. I highly doubt that will change in the near or distant future. These are people we need to recruit as activity designers.&lt;br /&gt;
&#039;&#039;&#039;Tomeu Vizoso&#039;&#039;&#039; [http://lists.sugarlabs.org/archive/iaep/2009-January/003445.html same mailing list thread] &amp;lt;br /&amp;gt;&lt;br /&gt;
: Without needing to get into what is better for our deployments, I do see value in making easier to make Sugar activities using technologies such as HTML, CSS, etc.&lt;br /&gt;
* Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&lt;br /&gt;
I&#039;m not familiar with schools near where I live, as I am an international student. [Any suggestions?]&lt;br /&gt;
* What will you do if you get stuck on your project and your mentor isn&#039;t around?&lt;br /&gt;
Google, check sugarlabs/olpc forums/mailing lists/wikis. Ask on #sugar/mailing list.&lt;br /&gt;
Ask other mentors and GSoC students or developers of related open source software.&lt;br /&gt;
* How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project? &lt;br /&gt;
In the worst case scenario, just emails to my mentor and commits. IRC has proven itself time and again and I intend to proudly announce any advances made.&lt;br /&gt;
I intend to set up a blog and use that as well. Identi.ca or Twitter may also prove useful.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:lucian-dev-env.png|thumb|right|My development environment with the small hack.]]&lt;br /&gt;
* We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&lt;br /&gt;
Picture to the right.&lt;br /&gt;
* What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&lt;br /&gt;
XL&lt;br /&gt;
* Describe a great learning experience you had as a child.&lt;br /&gt;
The most important thing I ever learned was to never be certain of anything and to always be prepared for the worst.&lt;br /&gt;
* Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more?&lt;br /&gt;
Web technologies are remarkably flexible and it would be great to encourage students to play around with them.&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;/div&gt;</summary>
		<author><name>Lucian</name></author>
	</entry>
</feed>