Skip to content

Instantly share code, notes, and snippets.

@dev-ritik
Created August 25, 2019 17:46
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save dev-ritik/cddad0f015f75d362511d183e187a77e to your computer and use it in GitHub Desktop.
Save dev-ritik/cddad0f015f75d362511d183e187a77e to your computer and use it in GitHub Desktop.
Report for my project on NpChat for the Google Summer of Code 2019

Android App Improvement

Introduction

NpChat is a photo and file-sharing application built on Android and is inspired by Snapchat. It runs over the Named Data Network (NDN) and focuses on decentralised information sharing architecture. It stands as one of the best examples of Android application developed on the new Internet architecture.

The project description can be found here. During Google Summer of Code 2019, I contributed to the project and developed several features to improve the NpChat app, its supporting library(Jndn) and the Identity Manager.

Work

During the GSoC period, I worked on the following,

  • Replaces FaceProxy with Memorycache (#132) : Replaced FaceProxy (which used to store and serve data for interests) class with Memorycache class which uses MemoryContentCache (from the jNDN library).

  • Aimd pipelining in Segment fetcher (#24) : Updated SegmentFetcher.java from the jndn library to use AIMD pipe-lining in place of the fixed window fetching. Ran some tests on minindn to compare these strategies among the jNDN and ndn-cxx libraries, the most recent of the results can be found here. After a long review period and a list of changes, it was successfully merged.

  • Introduce MVVM architecture (#161) : The state of the code at that point was more or less ad-hoc with things like memory and network access specific code placed and used in the view itself against the encouraged application architecture patterns like MVVM. This Pull Request moved and reorganised the code to single Activity multiple Fragment MVVM architecture, with operation logics separated and organised into classes and packages.

  • Add location co-ordinates to pictures (#162) : Added a feature to let user geo-tag a picture. Once Geo-tagged, the location is shared by adding the co-ordinates into the Exif metadata and transformed to ground address using Geocoder class.

  • File sharing (#163) : Improved the pictures sharing and file browsing experience and separated them into status and files, to be viewed differently.

  • NDNCert java client (#1): For the users to have a namespace, they must have a certificate for it. Previously, a self-signed certificate was used to verify the ownership. This PR updates the Android Identity Manager to get signed certificates of the namespace using NDNCERT. This will be used to prove the ownership using the trust agent.

GSoC contribution

Here is a list of all contribution made during the GSoC period.

  • (#132) Replaces FaceProxy with Memorycache
  • (#134) Removes publishData code from FilesActivity
  • (#154) Replace Log with Timber
  • (#155) Add AboutActivity
  • (#161) Introduce MVVM architecture
  • (#162) Add location co-ordinates to pictures
  • (#163) Picture selection
  • (#24) Aimd pipelining in Segment fetcher
  • (#25) Fix null object error in AIMD SegmentFetcher
  • (#1) Ndncert java

These PRs spans accross NpChat, jndn and android-identity-manager

TODO

  • Publishing the app to Play Store.
  • Adding ECDH key encryption to android-identity-manager.

Challenges

As a part of the project, I faced some challenges, which gave me experiences in new fields

  1. Moving to decentralised from the popular centralised server model.
  2. The nature of the work (pretty much new and unprecedented).
  3. Establishing and updating development environments and NDN dependencies.
  4. Trying to establish ECDH key exchange.

Future Works

I plan to continue working on the NDN concept, developing and contributing to open-source application and utilities, in the days to come.

@dev-ritik
Copy link
Author

⚠️ DO NOT DELETE ⚠️

@deepansh-1
Copy link

Anyone work on this project ??

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment