[Haskell-cafe] Google Summer of Code Proposal - Communicating with mobile devices

Conrad Parker conrad at metadecks.org
Fri May 3 04:21:43 CEST 2013


On 3 May 2013 08:53, Marcos Pividori <marcospividori at gmail.com> wrote:
> Greetings,
>
> I am a Computer Science student from Argentina. I am interested in working
> this summer in a project related to Haskell for the Google Summer of Code. I
> have been discussing my idea with Michael Snoyman in order to have a clearer
> idea. Now, I would like to know the community interest in this project.
>
> I want to develop a server-side library in Haskell for sending push
> notifications to devices running different OS, such as Android, iOS, Windows
> Phone, BlackBerry, and so on.
>
> To pass a subject, I have recently worked with Yesod (a Web Framework based
> in Haskell) developing a server to comunicate with Android-powered devices
> through Google Cloud Messaging. (It is available:
> https://github.com/MarcosPividori/Yesod-server-for-GCM – It is a Spanish
> commented version because it was a project for my University, I will replace
> it for an English version in the next weeks)
>
> To develop this project, I have read a lot about this service and Yesod
> libraries, and I developed two programs, a server written in Haskell and an
> Android application for mobile phones. Also, I developed an EDSL to write
> programs which exchange information with the devices.
>
> I would be really grateful if you could give me your opinion about this
> project and the proposal. I want some feedback in order to know if this
> would be a useful tool and what you would like to get out of it.
>
> Communicating with mobile devices
>
>
> Abstract
>
> The aim of this project is to develop a server-side library in Haskell for
> sending push notifications to devices running different OS, such as Android,
> iOS, Windows Phone, BlackBerry, and so on.
>
> The fact is that every company is developing Push Notification services, and
> these are very similar. Then, I want to find the fundamental concepts to
> construct a library which enable to configure the options for the different
> services and send messages easily.
>
> When I say they are very similar, I refer to the fact that they all are
> asynchronous, best-effort services that offers third-party developers a
> channel to send data to apps from a cloud service in a power-efficient
> manner. The most popular are:
>
>    - Google Cloud Messaging (Android)
>
>    - Apple Push Notification Service (iPhone / iPad)
>
>    - Microsoft Push Notification Service (Windows Phone)
>
>    - BlackBerry Push Service (BlackBerry)
>
>    - Windows Push Notification Services (Windows 8)
>
>    - etc.
>
> Once we have this libraries, I will investigate the possibility of mainting
> a "back and forth" communication between a server and mobile devices and I
> will develop a library to handle this.
>
>
> Motivation and expected benefits
>
> I think this idea would be very useful because it will allow all Haskell
> developers to open to a new world of mobile devices and to build useful
> programs/services that interact with them.
>
> Pushing data to smartphones provides users with instant access to desired
> updates as they happen, such as news and weather, sports scores, stock
> prices and other time-sensitive content. The push services provide an
> efficient way to quickly push timely information updates to many smartphones
> at once, in a centrally managed and controlled manner.
>
> Generally, you can also be very selective in who you send information to,
> including individual customers or many customers (multicast).
>
> This services minimizes the impact on the smartphones battery life. Instead
> of actively checking for new data, the applications can remain closed. Once
> the data is delivered, the application can be launched in the background to
> process it as needed.
>
> This processes offer an alternative to other less efficient methods, such as
> polling, where a device regularly polls an application server to see if new
> content is available.
>
> The main differences between the services, refer to details as: the maxim
> payload length, the quality of service, queueing the messages or not, and
> the time limit for this, the way the messages are handled in the devices,
> etc.
>
> As all the libraries to access to these services are developed in Java, I
> thought that it would be a good idea to offer an option to Haskell
> programmers. Taking advantage of the similarity of these services, I could
> develop a very adaptable library which fits the necessities for each one and
> at the same time offer an abstraction to the user.
>
>
> Deliverables.
>
>
> * An API library to build and send messages including:
>
>    - GCM and a demo Android app.
>
>    - APN and a demo iOS app.
>
>    - Microsoft Push Notification Service (Windows Phone) and a demo app.
>
>    - Documentation for all the code developed. Including the explantation on
> how to use the server
>
>      library and how to try the demo apps.
>
>
>
> * A library to handle a "back and forth" comunication between a server and
> mobile devices. Tools to mantain a state of the connection and manage with a
> lot of devices at the same time. A Yesod app example of the use of this
> library and a demo app for each OS (Android, iOS, Windows Phone, etc) to
> manage this communication.
>
>
>
> * Optionally:
>
>    - an API for communication through BlackBerry Push Service (BlackBerry).
>
>    - an API for communication through Windows Push Notification Services
> (Windows 8).
>
>
>
> Technical Considerations
>
> In the developing of the APIs for the communication through Push
> Notifications, I will aim to develop a good abstraction and find the
> properties in common between the differents services in order to develope an
> customizable tool but at the same time with a common structure.
>
> I want to let the user build messages and send these in a simple way
> following each protocol. Also, I will abstract the process of registering
> the devices in the server and let the user manage the different
> registrations behind a similar abstraccion.
>
> To develop a “back and forth” comunication between a server and mobile
> devices, I will investigate the different possibilities of maintaining a
> state of the connection. It could be through the use of cookies stored by
> the clients or maintaining some extra information in the server which would
> enable it to identify the different connections and provide the appropiate
> services.

Hi Marcos,

I really like this project, I think it will be very useful.

You've listed a lot of deliverables. In what order would you plan to
do things, and what deliverables would you consider essential to call
the project a success?

It sometimes happens with GSoC projects that some random task takes
longer than expected, or something in real-life delays progress. To
ensure success, you could make a timeline with all the essential
deliverables done about 60% of the way through, and the rest of the
time for bonus deliverables and polishing.

cheers,

Conrad.



More information about the Haskell-Cafe mailing list