<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>