<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
On 2/12/16 7:21 AM, James Quilty wrote:<br>
<blockquote cite="mid:56BDCE32.7050201@ecs.vuw.ac.nz" type="cite">
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
Closely followed by:
<meta http-equiv="content-type" content="text/html;
charset=windows-1252">
4. Chat project(s). I'd like to hear everyone's views on my
ranking.<br>
<br>
Patrick, I'd like more details about the chat project(s) you had
in mind if you're keen for a project to be offered. I think chat
clients are something the students generally find attractive.<br>
</blockquote>
<br>
James,<br>
<br>
Sorry I was vague since I was referencing some of the projects on
our Google Summer of Code page. I think the ones which might best
work for a small team of students are:<br>
<br>
----<br>
<br>
File transfer support, this involves a lot of interacting pieces so
would require some good planning up front. There has been a few
failed projects about this in the past, but some partial
implementations might exist. Generally this involves: <br>
<ol>
<li>API design (designing interfaces that could be implemented by
different protocols such that the UI can interact in a protocol
agnostic way)</li>
<li>UI design (how will users interact with this feature?)</li>
<li>Backend implementation (most likely implementing one or two of
the XMPP methods, maybe IRC as well)</li>
<li>Frontend implementation</li>
<li>Fallback implementation (for protocols that don't support file
transfer OR if the file transfer fails, we'd like to use
Thunderbird's current FileLink component; we've also discussed
whether WebRTC could be useful here)<br>
</li>
</ol>
<p>Requires understanding of:
<meta http-equiv="content-type" content="text/html;
charset=windows-1252">
XPCOM, JavaScript, XUL/HTML, networking protocols<br>
</p>
<p>----<br>
</p>
<p>Currently Thunderbird can have additional protocols added to them
via libpurple. This is distributed separately because of licensing
compatibilities. There is a shim later (called purplexpcom) which
translates from Thunderbird's chat interfaces to libpurple's
interfaces. Unfortunately this is:<br>
</p>
<ul>
<li>Time consuming to maintain</li>
<li>Difficult to compile</li>
<li>Requires re-compilation for each Thunderbird version<br>
</li>
<li>Is not binary compatible with system libpurples</li>
</ul>
<p>It is desirable to experiment with different ways to interact
with libpurple to redesign this interface. Potential experiments
include:<br>
</p>
<ul>
<li>Using js-ctypes to interact with the libpurple binary
component (instead of C++ XPCOM code)</li>
<li>Spawn a separate sub-process and use IPC to communicate with
libpurple</li>
<li>Compile libpurple to JavaScript with emscripten</li>
</ul>
<p>Requires understanding of: C, C++, XPCOM, JavaScript<br>
</p>
<p>----<br>
</p>
<p>
<meta http-equiv="content-type" content="text/html;
charset=windows-1252">
Google Talk/Hangouts is one of the most popular networks to chat
on now and is available over XMPP. Unfortunately, Google has
slowly been breaking the interaction with their XMPP bridge such
that features stop working. It is desirable to connect directly to
Google Hangouts using their proprietary protocol. This would
involve creating a new Google Hangouts protocol to Thunderbird by
implementing the appropriate interfaces. This would involve:<br>
</p>
<ul>
<li>Creating a new Google Hangouts protocol</li>
<li>Improving and expanding shared code and APIs used by all
JavaScript protocol plugins</li>
<li>Improving documentation of the process for adding a protocol
to Thunderbird<br>
</li>
<li>Reversing engineering of a network protocol</li>
<li>Using the protocol on a day-to-day basis to dog-food the code<br>
</li>
</ul>
<p>Note that some implementations exist for other clients
(<a class="moz-txt-link-freetext" href="https://github.com/tdryer/hangups/">https://github.com/tdryer/hangups/</a>
<a class="moz-txt-link-freetext" href="https://bitbucket.org/EionRobb/purple-hangouts">https://bitbucket.org/EionRobb/purple-hangouts</a>).<br>
</p>
<p>Requires understanding of: JavaScript, XPCOM, networking
protocols<br>
</p>
<p>----<br>
</p>
<p>Please let me know if you have additional questions,<br>
</p>
<p>Patrick<br>
</p>
</body>
</html>