Google Summer of Code 2014

From Amahi Wiki
Revision as of 17:44, 4 January 2015 by Cpg (talk | contribs)
Jump to: navigation, search

List of Project Ideas

We have organized the ideas in groups, depending what area of Amahi they belong in. These groups are not in any particular order. For instance if you are a front-end person who knows HTML and Javascript, the GUI/UX may well be the best fit and we'd love to hear from you!

Platform

Plugin System (Completed)

Description: Make the ability to create and install Amahi Plugins easy and enable the creation of those plugins for a variety of purposes, like SMART monitoring, system stuff (network scanning, etc.) and the two examples below for the disk wizard and the Greyhole UI, among other ideas.

Objective: Create an amahi plugin system, where PHP, Python, Node, and other modern webapps can be easily integrated. We can currently do this with some RoR engines, but the mechanism is not robust enough. The plugins system should allow modern web-based apps to be easily integrated with Amahi -- from Node.js apps to Ruby/PHP/Python -- so that users can easily reap the benefits of the onslaught of difficult-to-deploy modern web apps with a single click install. ProTip: possibly leverage docker containers within Amahi

Skills Required: RoR, git

Mentors: Carlos, Rod

Disk Wizard (Nearly Completed)

Description: Expanding the storage capacity is an important feature of Amahi but as of now it requires advanced (e.g. command line) skills. We want easy disk/partition onboarding. Also add the ability to be asked to mount USB drives as a share when they're connected & connect external shares from for example a NAS with the plugin system using that wizard.

Objective: Create an amahi plugin that will streamline this process by providing a UI for disk management. The plugin should detect if a new disk was added and it should provide a wizard to create partitions and format with the desired file system

Skills Required: Low level system scripting

Mentors: Dag, Bogdan

References:

Greyhole UI (Completed)

Description: Greyhole is an application that uses Samba to create a storage pool of all your available hard drives (whatever their size, however they're connected), and allows you to create redundant copies of the files you store, in order to prevent data loss when part of your hardware fails. The purpose of this plugin is to provide a UI and the necessary tools under the UI to make starting and managing a Greyhole UI possible and nice to understand for regular humans.

Objective: Create and amahi plugin that provides an UI that allows for the management of the greyhole pool. The plugin should allow an administrator user to: add/remove disks to/from the pool.

  • change the number of copies for individual file/directory
  • invoke various gh commands
  • view and monitor log files
  • gui to visualize data distribution


Skills Required: RoR, System programming

Mentors: Carlos, Rod

Amahi 8 (Partially Completed)

Description: Amahi 7.2 and Amahi 8 are what's next. This is the time to come up with exciting features and ideas that we should put in Amahi 8 and the GSOC timeline is a perfect match!

Objective: Work closely with the core team to define the features and functionality that we need to implement to get Amahi 8 released. This project is about working on RoR and the Amahi platform core. Some of the core technology will need to be upgraded, like Rails 4, latest Phusion Passenger, possibly replace MySQL for the platform and use sqlite, create a native API to the platform that can be used by other apps, like mobile apps. Other ideas include beefing up security and provide support for Amahi hosting on the cloud. Features:

  • porting to rails 4
  • convert the front-end to bootstrap and make sure we can install bootstrap themes and have a consistent look and behavior
  • make it even more modular and cleaner (at the moment we still have some things that really belong in plugins but still are in controllers/views of the main app)
  • possibly using a new metal layer instead of passenger - especially ones that do not take a long time to reload, could be puma, i also like thin, maybe others
  • better initialization ... like a more standard (wordpress-like) initialization wizard (initially there are no users, we need to create an admin user and perhaps ask a few questions and integrate with amahi.org)

Skills Required: RoR, ruby, JS, CSS, HTML5

Mentors: Carlos, Rod

Backup App Data and Settings

Description: When new versions of Amahi come out, a drawback of Amahi is that it's hard to backup the settings (e.g. partitioning) installed applications and their user data

Objective: The plugin should allow an administrator to backup any application data either on an external media or in the cloud(e.g.: Dropbox, Google Drive, etc).The restore process should check if the application is installed on the HDA and if not it should be automatically installed from the AppStore before the user data is restored.

  • Create an Amahi plugin that will allow backup and restore of the user data for apps installed from the AppStore
  • Centralizing app data/configs - link them to app folder instead.
  • "Destructive" update awareness
  • Ability to list, outline data directories for backups/upgrade check


Skills Required: System scripting

Mentor: Rod, Daniel

Mobile

Mobile is a great topic at the moment and there are a lot of opportunities here. In the Android app, definitely more than one student are suitable for the project.

Android App Implementation (Completed -- more projects are available)

Description: There's huge demand for an Android application following the popularity of our iOS app. Our users are looking for an application that has feature parity with the existing iOS app, and even shows it up with additional features!

Objective: An Android app that is on par or better than the iOS app, including mobile streaming, downloading files and sharing them.

Skills Required: Java, Android, REST, JSON API programming, media interaction in Android

Mentor: Jesse Read, Carlos, Bogdan

Webapp Browsing in Mobile apps

Description: Add browsing of installed webapps within our mobile app.

Objective: One requested feature for our mobile app (iOS and later Android) is the ability to browse apps within our mobile app. Our server side of the app needs to be setup to proxy specific webapps that the user has installed. Collaboration with the iOS/Android devs will also be necessary to prototype it. Technically, this project consists of add functionality to our reference proxy (written in Go) to do transparent HTTP proxying for individual webapps separately. It's not a mobile project in the sense of being on a mobile OS.

Skills Required: Go programming

Things to be implemented:

  • NPN negotiation
  • More edge case tests.
  • Server push
  • Compliance to http/2
  • Actual implementation of priorities (everything is one priority at the moment)
  • Extensive error handling for all possible rainy-day scenarios specified in the specification
  • Support for other than HTTP GET frames, i.e. POST, PUT or any request that has a body

Details can be found on SPDY.

Mentors: Carlos, Bogdan

Reference: Amahi Github repo, in particular the SPDY and SPDY-proxy repos written in Golang

Mentors

This is a list of committed mentors. If you are interested in mentoring, let us know via IRC (mention the nicks below):

  • Carlos Puchol (cpg, PST, GSOC admin): team lead for Amahi, experience in RoR, Go, Ruby, RoR, system scripting/development, app packaging, C, C++
  • Bogdan Mitrea (megabitdragon, CST, GSOC admin): Android, Java, app packaging, system programming,C , C++, community lead
  • Rod Runyon (bigfoot65, CST): app lead for Amahi, system programming, app packaging, reliability, documentation, support
  • Jesse Read (DarthNerdus, EST): mobile team lead, system development, Objective C, iOS, Java, Android, C, C++, and much more
  • Daniel Falk (dnfalk, CST): system development and management, virtualization, networking, infrastructure
  • Dag Notland (dano5, CET): app packaging, system programming, community lead


Reference: GSOC mentoring page.

Reference