Ach so! tech specs

Modular, flexible backend

image alt text

Ach so! app is a client for a video service. The service where Ach so! app connects can be the default public server or it can be a custom service running from a Layers Box or other kind of installment of required server software.

Integration to other systems with webhooks

image alt text

To integrate Ach so! with existing digital learning environments, work management or information systems, Ach so! allows moderators of each group to define webhooks: consequences that are triggered when a certain action occurs. Initially we have three simple webhooks: an action that happens when someone views a video that belongs to the group, an action that happens when new video is added to the group and an action that happens when someone *edits *a video in the group. The actions are implemented as a simple JSON data packages sent to given URL endpoint definde in group’s advanced settings.

The practical effect of webhooks is that other systems can be notified about new, viewed or modified Ach so! videos without having to develop glue code between each potential system. Providing a lightweight method to integrate with existing systems should satisfy many of the needs of companies and institutes willing to think how Ach so! would fit into their workflow.

The “payload” of triggered webhooks are currently predefined JSON information about the action, but it is a future possibility to add capability for group moderators to write them with a simple template language to better match the requirements of their target systems. The webhooks send POST actions to URI endpoint provided by group moderator. The current webhooks and their payload examples are following:

New video

Triggered whenever a video is shared to the group

Payload:

{

"video_title": "Example video",

"event_type": "new_video",

"video_uri": "https://achrails-server/videos/xxxyyyzzz",

"thumb_uri": "https://videostorage/xxxyyyzzz/thumb-small",   

"user": {

    "email": "example@user.com",

    "name": "Guy Example",

    "preferred_username": "ExampleMan123"

}

}

Video edit

Triggered whenever a video is edited within a group

Payload:

{

"video_title": "Example video",

"event_type": "video_edit",

"video_uri": "https://achrails-server/videos/xxxyyyzzz",

"thumb_uri": "https://videostorage/xxxyyyzzz/thumb-small",   

"user": {

    "email": "example@user.com",

    "name": "Guy Example",

    "preferred_username": "ExampleMan123"

}

}

Video view

Triggered whenever a video belonging to a group is watched

Payload:

{

"video_title": "Example video",

"event_type": "video_view",

"video_uri": "https://achrails-server/videos/xxxyyyzzz",

"thumb_uri": "https://videostorage/xxxyyyzzz/thumb-small",   

"user": {

    "email": "example@user.com",

    "name": "Guy Example",

    "preferred_username": "ExampleMan123"

}

}

AchSo! Technologies

Heroku

Heroku is a Platform-as-a-Service (PAAS) that allows users to run their web applications without worrying about maintaining their own server infrastructure. AchSo! back-end (achrails) has been running on their free tier since the beginning. Every time a new commit is made to the achrails Git repository, it is automatically.

Ruby on Rails (Achrails)

Ruby on Rails is a framework designed for creating robust web applications quickly. The AchSo! back-end called Achrails is made with Ruby on Rails, and it serves as both the API and web-interface for AchSo!

Android & iOS

The AchSo! mobile application is available as a native application for both for Android and iOS. Native Android apps are made with Java, and iOS apps are made with Swift.

Golang (go-video-transcoder)

go-video-transcoder is a microservice used to create thumbnails of uploaded AchSo! videos, and transcode them into a more universal video format. Android and iOS both use different video encodings, so without the transcoder service videos made with the iOS app couldn’t be viewed with the Android version. The service also handles uploading of videos to Amazon’s S3 file hosting and storage service after they’ve been converted to the correct format.

Git & GitHub

Git is a distributed version control system originally developed by Linus Torvalds to aid with development of the Linux kernel. GitHub is a popular hosting service for git repositories, but it also comes with it’s own added features, such as a wiki system and an issue tracker. GitHub is used extensively in AchSo! development.

Python & Flask (achso-video-exporter)

Achso-video-exporter is a separate microservice made in Python and Flask, used to bake annotations into videos. This allows users to download and export their videos as ordinary .MP4 video files for other usage. The API is made with Flask, which is a lightweight micro web framework for Python. The actual video manipulation is made with a library called MoviePy, which uses the popular FFMPEG video convertion tool underneath.


Y4 Report

(notes about which parts are specifically Y4 achievements.)

-Integration with webhooks was designed and developed.

-Serverside logging of user activities and interactions with videos for analysis

-Added capability to export annotated videos. Exported videos are reassembled to “pause” on annotations by copying the same frame over a timespan.

-Added capability to download selected videos to device instead of streaming, to better support offline situations.

-Support for Amazon S3 as video storage and Google Identity Platform for authentication in addition to Layers Box’s services.

-Android releases in 2016, 11:

1.3.4 Feb 8 Add support for Layers Boxes with multiple accounts

1.3.5 Mar 14 Logging features

1.3.6 Mar 23 Multiple authentication methods

1.3.7 Apr 21 Alternative video transcoder

1.3.8 Apr 28 UI improvements and bug fixes

1.4.0 May 4 Remove genres

1.4.1 May 12 One-tap annotation

1.4.2 May 20 Bug fixes

1.5.0 Jul 7 Export annotated videos, better search, UI improvements

1.5.1 Jul 19 Minor fixes

1.6.0 Aug 17 Pre-download videos for offline use

1.7.0 Sep 1 Trim videos before upload, annotation colors

-iOS releases in 2016, 5:

0.1 Jan 20 Initial release to iTunes Store

RC2 Jan 25 bugfixes

1.1 Apr 21 support for custom Layers Boxes and AWS cloud services

1.2 May 4 Remove genres

1.3 Jul 18 Export annotated videos, better search, UI improvements