<?xml version="1.0" encoding="UTF-8"?>
<wiki>
  <body>&lt;p&gt;SamePlace is applying to participate as a mentoring organization to the Google Summer of Code 2009.  Here you&amp;#8217;ll find general information about the event, SamePlace itself, and a list of proposals for projects to work on.&lt;/p&gt;
&lt;h2&gt;About the Google Summer of Code&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Google Summer of Code is a global program that offers student developers stipends to write code for various open source software projects.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Read more at the &lt;a href=&quot;http://code.google.com/soc/&quot;&gt;official home page of the initiative&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;About SamePlace&lt;/h2&gt;
&lt;p&gt;SamePlace is an instant messaging application based on the &lt;a href=&quot;http://xmpp.org/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; protocol&lt;/a&gt; and the Mozilla platform.&lt;/p&gt;
&lt;p&gt;SamePlace can be used inside Firefox or as a stand-alone desktop client.  As a Mozilla-based application, it can be developed not only by modifying &lt;a href=&quot;http://github.com/bard/sameplace/tree/master&quot;&gt;its source&lt;/a&gt; but also through extensions.  It is written in JavaScript and &lt;span class=&quot;caps&quot;&gt;XUL&lt;/span&gt;.  JavaScript in Mozilla can access a far wider range of possibilities than JavaScript on the web.  It can use native components for network and file I/O, storage, and mostly anything you&amp;#8217;d expect in desktop application development. JavaScript in Mozilla also provides parts of the language specification not widely implemented on the web such as &lt;a href=&quot;https://developer.mozilla.org/en/E4X&quot;&gt;E4X&lt;/a&gt;, which greatly simplifies &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; handling.&lt;/p&gt;
&lt;p&gt;SamePlace was started in 2005 as a virtual presence client and gradually became both an end-user, &lt;a href=&quot;http://www.sameplace.cc/blogs/bard/2008/2/12/09-released-091-released-contest-won&quot;&gt;award-winning&lt;/a&gt; IM client and a testbed for experimenting with &lt;a href=&quot;http://2007.xtech.org/public/schedule/detail/97&quot;&gt;cool ideas about the real-time web&lt;/a&gt;.  Some extensions built on SamePlace: &lt;a href=&quot;http://chattytime.com&quot;&gt;ChattyTime&lt;/a&gt;, &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/9970&quot;&gt;xbookmarks&lt;/a&gt;, &lt;a href=&quot;http://hamen.homelinux.org/&quot;&gt;NotifyMe&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Projects below involve one or more of the following skills areas: JavaScript, &lt;span class=&quot;caps&quot;&gt;XUL&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt;, C++, &lt;span class=&quot;caps&quot;&gt;XPCOM&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt;, graphic design.&lt;/p&gt;
&lt;p&gt;Developer resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;[[Creating SamePlace extensions]]&lt;/li&gt;
	&lt;li&gt;[[Developing SamePlace]]&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Ideas&lt;/h2&gt;
&lt;p&gt;Feel free to propose more ideas or to inquire about the existing ones either on the &lt;a href=&quot;http://groups.google.com/group/mozlab&quot;&gt;mailing list&lt;/a&gt; or with the &lt;a href=&quot;http://hyperstruct.net&quot;&gt;maintainer of this page&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;AutoPub extension&lt;/h3&gt;
&lt;p&gt;This extension would retrieve data from configurable sources and publish it to configurable endpoints.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;retrieve current tune from &lt;a href=&quot;http://www.foxytunes.com&quot;&gt;FoxyTunes&lt;/a&gt; or &lt;a href=&quot;http://www.songbirdnest.com&quot;&gt;Songbird&lt;/a&gt; and publish it as status message&lt;/li&gt;
	&lt;li&gt;as above, but publish it as user tune event&lt;/li&gt;
	&lt;li&gt;retrieve current &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; from the browser and publish it as a browsing event&lt;/li&gt;
	&lt;li&gt;retrieve funny quote from a web site or a local file and send it to a group of contacts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Programming language(s): JavaScript, &lt;span class=&quot;caps&quot;&gt;XUL&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Difficulty: quite easy.  &lt;span class=&quot;caps&quot;&gt;XUL&lt;/span&gt; possibly limited to a preference window; well-known APIs like XMLHttpRequest can be used to fetch remote data; more effort required to get local data (either from other extensions in Mozilla which might not always expose an obvious &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;, or from other applications on the OS).&lt;/p&gt;
&lt;p&gt;Resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://xmpp.org/extensions/xep-0118.html&quot;&gt;User tune &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; protocol extension&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://xmpp.org/extensions/xep-0195.html&quot;&gt;User browsing &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; protocol extension&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;vertical-align:middle;&quot;&gt;Notify extension&lt;/h3&gt;
&lt;p&gt;This extension would install listeners for various &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; events and let the user configure how to notify them.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;show when a specific contact (or set of contacts) signs on using a desktop popup&lt;/li&gt;
	&lt;li&gt;show when the user&amp;#8217;s GMail account receives a new mail using a notification bar in the browser, optionally allowing the user to go to his inbox directly&lt;/li&gt;
	&lt;li&gt;let user configure reminders, e.g. &amp;#8220;when Joe is online, remind me to ask him about his new project&amp;#8221;&lt;/li&gt;
	&lt;li&gt;detect when a contact is publishing his current tune through the status message, and display that in a &amp;#8220;notification stream&amp;#8221; enriching it with a link to social music sites&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Programming language(s): JavaScript, &lt;span class=&quot;caps&quot;&gt;XUL&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Difficulty: easy; involves basic understanding of the &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; in SamePlace for listening to events and some UI creativity to choose the least-intrusive ways to display notifications.&lt;/p&gt;
&lt;p&gt;Resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://code.google.com/apis/talk/jep_extensions/gmail.html&quot;&gt;GMail notification &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; protocol extension&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en/nsIAlertsService&quot;&gt;Mozilla &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; for desktop popup notifications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;vertical-align:middle;&quot;&gt;Thunderbird 3 integration&lt;/h3&gt;
&lt;p&gt;Integrate SamePlace in Thunderbird 3.  SamePlace used to be well-integrated in Thunderbird 2 but maintenance was cumbersome.  However, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=385758&quot;&gt;it would make many people happy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Examples of integration:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;host chats in the mail message area&lt;/li&gt;
	&lt;li&gt;if a mail contact has an associated IM address, display his/her presence in his/her mails, GMail-style&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Programming language(s): JavaScript, &lt;span class=&quot;caps&quot;&gt;XUL&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Difficulty: moderate; integration in Thunderbird 2 wasn&amp;#8217;t straightforward and involved some hacks; be prepared to make good friends with the &lt;span class=&quot;caps&quot;&gt;DOM&lt;/span&gt; Inspector.&lt;/p&gt;
&lt;p&gt;Resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/En/Extensions/Thunderbird&quot;&gt;Creating Thunderbird extensions&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mozillamessaging.com/en-US/thunderbird/early_releases/&quot;&gt;Thunderbird 3 beta releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;vertical-align:middle;&quot;&gt;Mobile/Small display interface design&lt;/h3&gt;
&lt;p&gt;Design, and prototype with graphic mockups or even &lt;em&gt;in vivo&lt;/em&gt; with &lt;a href=&quot;http://en.wikipedia.org/wiki/Mozilla_Fennec&quot;&gt;Fennec&lt;/a&gt;, a user interface for SamePlace on small interfaces, such as the in-browser sidebar and mobile phones.&lt;/p&gt;
&lt;p&gt;Programming language(s): basic knowledge of JavaScript and &lt;span class=&quot;caps&quot;&gt;XUL&lt;/span&gt; if you also want to create a live prototype, otherwise none.  Other knowledge: familiarity with or strong interest in User Experience design, vector drawing (preferably using an &lt;span class=&quot;caps&quot;&gt;SVG&lt;/span&gt;-based software such as &lt;a href=&quot;http://www.inkscape.org&quot;&gt;Inkscape&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Difficulty: depending on your experience in user interface design, either a pleasant journey or a descent into hell. :)&lt;/p&gt;
&lt;p&gt;Resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mozilla.org/projects/fennec/1.0a1/releasenotes/&quot;&gt;Fennec download page&lt;/a&gt; (also has releases for desktop machines).&lt;/li&gt;
	&lt;li&gt;Aza Raskin&amp;#8217;s inspiring posts covering the same problem area of small-screen UI for Firefox: &lt;a href=&quot;http://www.azarask.in/blog/post/firefox-mobile-concept-video/&quot;&gt;Firefox Mobile Concept Video&lt;/a&gt;, &lt;a href=&quot;http://www.azarask.in/blog/post/opening-thedesign-process/&quot;&gt;A Glipse Into The Mobile Firefox Design Process&lt;/a&gt;, &lt;a href=&quot;http://www.google.com/search?q=site%3Aazarask.in+fennec&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;aq=t&amp;amp;rls=org.mozilla:en-US:official&amp;amp;client=firefox-a&quot;&gt;More&amp;#8230;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;vertical-align:middle;&quot;&gt;Invisibility&lt;/h3&gt;
&lt;p&gt;Implement configurable user invisibility.  Examples: be visible to everyone except a contact, be visible to a group of contacts only, etc.&lt;/p&gt;
&lt;p&gt;Programming language(s): JavaScript, &lt;span class=&quot;caps&quot;&gt;XUL&lt;/span&gt;. Other knowledge: familiarity with &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Difficulty: part of the challenge for this project is coming up with a user interface that doesn&amp;#8217;t expose all the complexity of &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; privacy lists while still presenting the 20% that makes up the 80% of the usefulness.&lt;/p&gt;
&lt;p&gt;Resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://xmpp.org/extensions/xep-0016.html&quot;&gt;&lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; privacy lists specification&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://xmpp.org/extensions/xep-0126.html&quot;&gt;Best practices in the implementation of invisibility&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;vertical-align:middle;&quot;&gt;libpurple-based connector to foreign networks&lt;/h3&gt;
&lt;p&gt;libpurple is a library providing a single &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; to connect to various instant messaging networks (&lt;span class=&quot;caps&quot;&gt;MSN&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;AIM&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;ICQ&lt;/span&gt;, etc).  This projects consists of wrapping libpurple in an &lt;span class=&quot;caps&quot;&gt;XPCOM&lt;/span&gt; service and provide a translation layer between libpurple &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; and &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt;, so that for example the service will receive a &lt;code&gt;&amp;lt;message/&amp;gt;&lt;/code&gt; &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; packet and translate it to the appropriate libpurple &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; call.&lt;/p&gt;
&lt;p&gt;Programming language(s): C, C++. Other knowledge: Mozilla platform, &lt;span class=&quot;caps&quot;&gt;XPCOM&lt;/span&gt;, threading, basic familiarity with &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Difficulty: very hard if you don&amp;#8217;t have significant C/C++ background, moderate otherwise.&lt;/p&gt;
&lt;p&gt;Resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://developer.pidgin.im/wiki/WhatIsLibpurple&quot;&gt;libpurple page on the Pidgin wiki&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://wiki.github.com/bard/purplebridge&quot;&gt;PurpleBridge&lt;/a&gt;, a proof-of-concept implementing the same idea as a stand-alone process&lt;/li&gt;
	&lt;li&gt;(&lt;span class=&quot;caps&quot;&gt;XPCOM&lt;/span&gt;) &lt;a href=&quot;https://developer.mozilla.org/en/Creating_XPCOM_Components/Component_Internals&quot;&gt;Component internals&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;How to build a binary &lt;span class=&quot;caps&quot;&gt;XPCOM&lt;/span&gt; component using Visual Studio &amp;#8211; https://developer.mozilla.org/en/How_to_build_a_binary_XPCOM_component_using_Visual_Studio (buggy wiki parser &amp;#8211; just copy and paste)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;vertical-align:middle;&quot;&gt;UI Theme(s)&lt;/h3&gt;
&lt;p&gt;Mozilla applications are fully themeable (for many examples see the &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/browse/type:2&quot;&gt;themes section of addons.mozilla.org&lt;/a&gt; and the &lt;a href=&quot;http://addons.songbirdnest.com/tag/theme&quot;&gt;themes section of songbirdnest.com&lt;/a&gt;).  This project is about creating a UI theme for SamePlace, as well as driving changes to make the code base friendlier toward theme developers.&lt;/p&gt;
&lt;p&gt;Programming language(s):  &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt;.  Other knowledge: &lt;span class=&quot;caps&quot;&gt;XUL&lt;/span&gt;, and ideally some previous experience with theme development for a Mozilla-based application.&lt;/p&gt;
&lt;p&gt;Difficulty: you&amp;#8217;ll need some time to get used to Mozilla &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; extensions.  Other than that, standard &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; knowledge is 100% applicable.&lt;/p&gt;
&lt;p&gt;Resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en/Themes&quot;&gt;&lt;span class=&quot;caps&quot;&gt;MDC&lt;/span&gt; documentation on theme development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;vertical-align:middle;&quot;&gt;Connectors to non-IM networks&lt;/h3&gt;
&lt;p&gt;SamePlace can access non-&lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; networks through &amp;#8220;connectors&amp;#8221;.  Connectors provide a translation layer between the protocol of the foreign service and &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;While services that bridge different IM networks are well known in the &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; world, bridging with non-IM networks is far less explored and interesting.  SamePlace comes with a Twitter connector.  This project is about implementing connectors for two more non-IM networks, either &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; and Facebook or other options to be discussed with the student.&lt;/p&gt;
&lt;p&gt;Programming language(s): JavaScript.&lt;/p&gt;
&lt;p&gt;Difficulty: the SamePlace part is quite straightforward, it merely requests network data and translates it to &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; packets; most complexity will probably come from the APIs of the selected services.&lt;/p&gt;
&lt;p&gt;Resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Source of the Twitter connector for SamePlace: http://github.com/bard/sameplace/tree/7e63e6c6eef2e222b077b92180451431408d01cb/chrome/content/connectors (buggy wiki parser &amp;#8211; just copy and paste)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://xmpp.org/extensions/xep-0100.html&quot;&gt;&lt;span class=&quot;caps&quot;&gt;XEP&lt;/span&gt;-0100 &amp;#8211; Gateway interaction&lt;/a&gt; &amp;#8211; The &amp;#8220;traditional&amp;#8221; way to build bridges between networks in &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;vertical-align:middle;&quot;&gt;Jingle file transfer through libjingle&lt;/h3&gt;
&lt;p&gt;Jingle is a way to create p2p binary stream between two &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; clients even when they are both behind firewalls.  The &lt;a href=&quot;http://www.google.com/talk/&quot;&gt;Google Talk client&lt;/a&gt; uses it for audio calls and file transfer.  This project consists of wrapping Google&amp;#8217;s open source &lt;a href=&quot;http://code.google.com/apis/talk/libjingle/index.html&quot;&gt;Jingle library&lt;/a&gt; into an &lt;span class=&quot;caps&quot;&gt;XPCOM&lt;/span&gt; binary component to make it available to the Mozilla platform.&lt;/p&gt;
&lt;p&gt;Programming language(s): C++.  Other knowledge: &lt;span class=&quot;caps&quot;&gt;XPCOM&lt;/span&gt;; understanding of the &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; signaling&lt;/p&gt;
&lt;p&gt;Difficulty: high.  Libjingle is a complex piece of software, it includes its own &lt;span class=&quot;caps&quot;&gt;XMPP&lt;/span&gt; classes but those need to be scrapped away and replaced with xmpp4moz; binary &lt;span class=&quot;caps&quot;&gt;XPCOM&lt;/span&gt; development is also not for the faint of heart.&lt;/p&gt;
&lt;p&gt;Resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;(&lt;span class=&quot;caps&quot;&gt;XPCOM&lt;/span&gt;) &lt;a href=&quot;https://developer.mozilla.org/en/Creating_XPCOM_Components/Component_Internals&quot;&gt;Component internals&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;How to build a binary &lt;span class=&quot;caps&quot;&gt;XPCOM&lt;/span&gt; component using Visual Studio &amp;#8211; https://developer.mozilla.org/en/How_to_build_a_binary_XPCOM_component_using_Visual_Studio (buggy wiki parser &amp;#8211; just copy and paste)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://code.google.com/apis/talk/libjingle/index.html&quot;&gt;libjingle documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</body>
  <created-at type="datetime">2009-11-21T18:30:19-08:00</created-at>
  <id type="integer">157468</id>
  <permalink>summer-of-code-2009</permalink>
  <repository-id type="integer">39402</repository-id>
  <title>Summer of Code 2009</title>
  <updated-at type="datetime">2009-03-15T16:00:45-07:00</updated-at>
  <user-id type="integer">19322</user-id>
</wiki>
