Press Review Inno #7


Mobility

 

Generic Protocols and Type Erasure in Swift

With Swift, you can define protocols by associating one or more generic types. These types are defined using the associatedtype” keyword. The name Generic Type” is a bit misused here. We should actually talk about a placeholder for a reserved type. Indeed, we will see that such protocols do not offer great flexibility of use when we consider them as generic.

Useful Information:

 

Web Development

Django 2.0 Release Candidate Now Available

By Kévin Barralon

The Django web framework just published the first release candidate of its upcoming 2.0 version. Django 2.0 is scheduled to be released on December 1st.

Don’t be fooled by the name – this new major release of Django will not bring any major significant changes to the framework. The changes in the latest version should be of the same scale as those found in past new releases.

Despite this, the most important change in the 2.0 release is its incompatibility with Python 2.7, the support for which is scheduled to last only until 2020. Django 2.0 will only support a minimum version of Python 3.4, and of course it is highly recommended to go directly to the most recent version of Python, which is presently 3.6.

URL Routing

In terms of new features, the new function django.urls.path() renders the URL routing syntax much simpler and easier to read. So, instead of having to write url(r'^articles/(?P[0-9]{4})/$', views.year_archive), you can write path('articles//', views.year_archive). This new syntax will also allow the view to receive the URL arguments with the proper type already defined (a whole number in the case of year above, instead of a string).

It is still not possible to add a constraint to the URL route directly (in this example, the fact that the year should only consist of four digits). The current function django.conf.urls.url() will be replaced by django.urls.re_path() which will keep the existing functionality of allowing regular expressions to be placed in the definition of the route.

The functiondjango.conf.urls.include() will also be directly available under django.urls. This will allow you to import your modules like from django.urls import include, path.

Other New Things

Helpful Links:

Deploying Entire Services with Docker Swarm and GitLab CI

by Jacob Cook

Here at Savoir-faire Linux, I work on the deployment infrastructure for many of our hosted services, and am constantly looking for ways to improve our DevOps practice. Currently the deployment pipeline is centered around the use of Ansible to manually provision a service inside a virtual machine and adjust as necessary. But in an effort to make builds and deployments faster and more stable for our developers, we are looking at new approaches, including the use of Docker builds pushed to a registry and subsequently deployed using a pipeline like GitLab CI.

One of the tools that can be used to deploy a micro-service architecture (created with docker-compose) is called Docker Swarm. Using a set of servers configured to act in a swarm, one can deploy a stack of containers in a simple pattern with only docker stack deploy. Docker will then automatically choose the appropriate servers in the swarm to deploy to, and handle networking between the services just as if you were using docker-compose on your local machine. Neat, huh?

The best part is that it plays nicely with our existing build system in GitLab CI. We can build, test, release and deploy across our infrastructure using GitLab CI and GitLab Container Registry. There are still pieces of the puzzle to work out but it represents a major leap forward in the simplification and stability of our DevOps practice.

Further Reading:

Press Review Inno #6

Design

Atomic Design

By Patrick Bracquart

Since the early days of the web, we talk about what goes into creating a Web “page”. This term shows how our vision of the web was informed since the 90s: it came from an architecture that was structured as a series of documents, like if they were printed pages of an encyclopedia.
However, for several years now, the multitude of available platforms in the Web ecosystem continues to grow and to become more complex. From the computer to the smartphone, and without forgetting the television or even smart watches, it has become clear that the concept behind the design and structure of Web pages is now obsolete.
There is a new methodology of design available that can take this into account. It is called Atomic Design, and the term was coined by Brad Frost. Thus, instead of thinking about content in the form of a page, each design element is created starting with its smallest component element (such as a call to action) and builds up to create something much bigger. We start from the atom to create the molecules, and these molecules come together in order to create a coherent and modular Web organism.

As each atom is placed individually in a library, Atomic Design saves a lot of time and makes for a more coherent and simplified end result.

Web Development

Makefiles, or How to Avoid Reinventing the Wheel

By Samuel Sirois

After having taken a break from frontend Web application development, I’ve recently jumped back into the field through two projects that I am working on. It represents a great opportunity to revisit my preconceived notions and old work habits, through a codebase that already exists and that is up-to-date with the latest stylish tools to use, ready after a simple git clone.

Wow, things do change quickly! (Even from the first line) From new versions of ECMAScript supported in modern Web clients – a panoply of pseudo-languages based on JavaScript – to the multitude of CSS pre-processors available… In addition to all these new automated build pipelines specifically created by and for JavaScript developers.

With all of these new shiny things, these automated build pipelines become essential to ensure that the minification, linking, compilation?!, of all of these files won’t cancel out the efficiency gains given by these tools which are now a necessity for the development of modern Web applications.

I still can’t keep myself from wondering if there hasn’t been a little bit of a lack of communication between those that have recently needed these complex tools in their projects (front-end developers) and those who have already faced these same requirements in the past and have discovered a solution (not the only one, mind you) to this problem, way back in the 70s!

I’ve never yet felt the need to use these new tools, as I already know Make, and having already been confronted with new, shiny, stylish solutions around the turn of the century, only to have taken some steps backward from something that already worked well. Indeed, I often insist on manually creating these Makefiles for projects I contribute to and I don’t hesitate to spend the time necessary to manage this tool.

Reinventing the wheel, i.e. to fall into the same traps and mistakes, or to really improve the situation? Here are a few interesting links to help you make your own opinions on the subject:

Contribution

From Contributions to Inno Hackfest

While evaluating the success of the afternoons we spend once per month on contributing to open source projects, we’ve decided to revise our formula a bit. Starting now, these afternoons will be held biweekly under the banner of “Hackfest”.

 Our First Few Hackfests

While working in small groups (and never alone), our SFLians have had the opportunity to learn about new technologies, to contribute to projects that they love or even to work on some new “side projects”.

In and amongst these contributions we find: initiations to the world of virtual reality (VR) through the creation of a dominos simulator using Unity and Oculus Rift; a workshop on blockchain technology and the connection with a concrete case study using the Ring software’s username database; the creation of a proof-of-concept client for a document-oriented database.

Upgrade Review

By Maxime Turcotte

The Drupal 8 migration report page, on which the modules that require migration are listed, was in sore need of a refresh in order to improve the user experience (UX). During our afternoon Hackfest, I wrote an initial patch that reuses certain design elements of the Drupal administration interface. Also, in adding just a few new descriptive icons, it is far easier to quickly find what requires our attention in this report.

 

Helpful Link:

Press Review Inno #5

Web Development

Node.js releases LTS of version 8.x

By Jacob Cook

The release schedule for Node.js provides for updates in long-term support (LTS) most every October, and this year will be no exception. Node.js offers developers a happy Halloween gift this year in transitioning its current version branch (8.x) to a stable LTS version. This means that features that have been at the cutting edge of development since early 2016 have finally been made available to users that require the stable and well-tested environment that an LTS version provides.
 

The new features in Node.js 8.x that have been eagerly awaited by developers include full support for async/await in Node.js core, updates to the V8 engine, an HTTP/2 implementation, a new version of NPM that allows for package version pinning with lockfiles, and much more.

Further reading :

Mobile

Firebase Dev Summit

The Firebase Dev Summit has just ended and several important announcements were made:
 
Following the purchase of Fabric by Google, Crashlytics will be integrated into the Firebase console. This new crash reporting system will benefit from access to other Firebase services, including Cloud Functions – which are the functions (lambdas) triggered when a Firebase internal trigger fires, or externally via a REST API call.

 

The added value of such an integration is in triggering a Cloud Function in response to some raised crashes. A crash in the main flow of the app could trigger an email to the entire team to speed up its resolution. A Cloud Function could also be used to create a task in a project management tool.
Google also announced that they are bringing machine learning to work with a new service, Predictions, which can categorize groups of users based on the way they use an application. Firebase can then present these groups with different offers or exclusive features to maintain their engagement.

 

Press Review Inno #4

Mobility

RxSwift 4.0.0 Final Version Released!

As mentioned in one of our last press reviews, we remain interested in and excited about new developments in the RxSwift project. The core developers pushing RxSwift forward have already released the fourth and most current version of it this past October 17 – i.e. RxSwift 4.0.0. You can find more information on its GitHub page here.

The version is available through various dependency management tools and GitHub. Just remember, the authors of RxSwift have always encouraged us to contribute to the project and, if you wish to do so, please follow these guidelines: About Contributing.

Android Studio v3.0

The new version of Android Studio is now available. Among the new features, we are most excited about: a new suite of tools allowing developers to profile their applications and more easily find performance issues, support for Kotlin, and a wide variety of new tools and assistants to make the use of Oreo APIs easier. 

If you are interested in learning more about the improvements and new features, please visit the
Android Developers Blog.


Netwoks and The Internet

The Internet, or How to Avoid Breaking What Is Working!

I try to avoid making the same old mistakes: i.e. breaking things that are already working or just avoid fighting against the tool itself  by regularly reminding myself of the Essence of the tools I use every day. 

Here are some articles that I find particularly pertinent regarding the “Essence” of the Internet, so that I can better avoid breaking things the next time I am asked to help put an existing Web application “in the cloud”!

Architecture and UI/UX Experiments at the DroidCon NYC 2017

Savoir-faire Linux’s Web & Mobile Development Team was at the DroidCon (@droidconNYC) in New  York on September 25th and 26th. DroidCon NYC is basically one of the biggest events on the planet fully dedicated to Android developers. During this two-day conference, more than 900 participants have been attending nearly 70 sessions on Android and its vibrant ecosystem. In this article, our team gives you an update on the presentations they have attended.


Sessions on Architecture

Model View Intent (MVI), Embracing Reactive UI’s

Our Web & Mobile Team! From the left to the right: Alexandre Lision, Hadrien De Sousa, and Thibault Wittemberg.

MVI is an application design pattern from the Cycle.js javascript library. It is based primarily on the concept of “Intents”, which represent the flow of user actions and the notion of “State”, which represents the immutable state of the application at a time T.

Intent streams are connected to the “State Reducers“. These reducers are simple functions whose purpose is to modify the state of the application step by step. The state is then displayed by the shape view of a “View State” (a pre-formatted state specifically for the view to display it).

This design pattern is therefore very much about functional reactive programming (or asynchronous dataflow programming). This is very close to Redux and highlights the interest of the immutability of the state (the mutability allows the sharing of reference on objects in memory, it is thus source of effects of uncontrolled edges) .

It also makes it possible to address the recurrent problem of managing the life cycle of the Activity / Fragment by introducing a cache of “State” on which the view will connect to each of its instantiations (in the case of a rotation for example) .

Reactive Clean Architecture

In this talk, the idea of “Clean Architecture” is based on a division of the application into 3 layers:

  • Presentation
  • Domain
  • Data

Reactive programming can help us in the communication between these layers that we present below.

Data layer

This layer exposes a “Repository” that provides public access to our data model and manages a “Reactive Store” that maintains the state of the application. Internally, this repository will rely on technical sub-layers such as network access, persistence and access to the file system.

Domain layer

This layer is based on a “Reactive Interactor” whose purpose is to manage user input. This Interactor subscribes to the “Reactive Store” in order to expose (by possibly filtering) the states intended for the upper layers (in particular the Presentation layer).

Presentation layer

This layer manages “ViewEntities” which represent the states of the application pre-formatted for the view. A “View Model” will be responsible for the mapping between the states from the “Reactive Store” (made available by the “Reactive Interactor”) and these “ViewEntities”.

In order to read more on this subject, you can consult the following article: Reactive Clean Architecture with Android Architecture Components

Opening Talk at .droidconNYC 2017

Advanced Networking with RX Java + Retrofit

While there are many useful example on how to use the “Retrofit” library, there is still need to better understand how it plays out in the context of complex cases such as the following:

  • Failure recovery,
  • The management of specific error codes,
  • Progress indicator display.

Here we provide you with some helpful tricks to address each of these cases.

The failure to recovery

  • Using the RxJava retryWhen operator.

Http errors

It may be interesting to apply the “share” operator on the observable Rx managing the requests (this makes it possible not to re-execute the request with each subscription). It is then possible to create as many subscriptions as there are error codes to manage, applying to each of its subscriptions a “filter” operator that will only pass the results with the error code to manage.

Progress indicator

The Rx stream managing the network request may someday set a “progress state” in the form of a “BehaviorSubject”. The Presenter (or ViewModel) can thus subscribe to the Observable resulting from this Subject and give rise to an update of the view.

An extra tip

It might be interesting to use RxLifeCycle combined with the MVP pattern to make it easier to manage rotations.

Kotlin

Full stack Kotlin

Kotlin is a well-known language to replace Java, especially as it proposes a more efficient syntax. Although associated with Android, it is also possible to use it in many other contexts such as: server application, native application, and Web application.

Back-end

Ktor is a library offered by Jetbrains (http://ktor.io). It allows to manage the Http layer and the WebSockets. It is therefore quite possible to develop a Rest API in Kotlin for example. Its operation is simple and passes by the instantiation of an embedded server (Jetty, Netty or Tomcat) then by the definition of routes. It is also quite possible to make him manage the static part of a website. Its main fault lies in its lack of documentation.

The following alternatives exist: Spring Boot / Javalin / Spark / Kara.

Front-end

It is also possible to write the front-end part (HTML and javascript) of a website in Kotlin with the help of the following APIs: kotlin.browser, kotlin.js, kotlinx.html. Please make sure to use the plugin “kotlin2js” instead of the plugin “kotlin”.

Native

Kotlin also allows you to write native code while having access to all the features of Kotlin 1.1.

We will be able, at the price of a compilation by type of platform, to run the same program on Mac OS, Linux, Android arm32/64, iOS and Windows. Of course, this does not concern user interfaces since each system has its particularities. In addition, one shall pay attention to correctly managing the memory in the manner of a C code. Furthermore, it is recommended to use the plugin “konan” instead of the plugin “kotlin”.

Build

Kobalt is a build system inspired by Gradle and Maven. It is written entirely in Kotlin and its compilation files are also valid Kotlin files, so it is possible to benefit from the code auto-completion features offered by IDEs. For more information, you can also access and read the Kobalt’s documentation –Kobalt: A modern, versatile build system.

Data Binding in a Kotlin World

Data binding as proposed by Google goes well with:

  • Dagger
  • RxJava
  • Kotlin
  • Architecture Components
  • Butterknife

It is, however, incompatible with:

  • Anko
  • Litho

It is possible to use an expression language directly in the XML layout (to do conditional processing, mathematical operators, etc.). This practice is not widespread since it breaks the principles of responsibility, namely write business code in the view part.


Sessions on the UI / UX Experience

View Performance Deep Dive

The Facebook teams have been trying to solve potential performance problems in rendering views, especially at the List view (ListViews, RecyclerViews …).

To do this, they made a 3-step comparison, measuring the rendering performance of the views with Google’s “Systrace” tool on a Nexus 5.

Step 1 : RecyclerView with ConstraintLayout

Each cell in the list is based on a layout type: “Constraint Layout“. The cells are relatively simple and contain only a text field, a button and an image. The performance analysis shows that the system omits some frames and therefore does not offer an optimal rendering.

Our feedback on the Constraint Layout in a recyclerView is brief; in fact, the wrap_content is sometimes misinterpreted on the height of ViewHolders which forces to use a fixed height.

Step 2: RecyclerView with Drawable

The idea here is not to build a view tree within a cell, but to draw it as a single Drawable.

The root view of the cell thus exposes its Canvas, on which we will come to draw our components. This technique requires a lot of code re-writing and does not take into account accessibility APIs or Touch events.

The measurement with Systrace shows us an obvious gain in rendering.

Step 3 : Litho

Litho is a library made available by Facebook. It relies on the declarative aspect of graphic components directly in the code, and not in XML layouts. Its primary goal is to reduce the rendering time of the view. For this, it is based on:

  • A finer division of the view tree (redraws only what is displayed),
  • An overall rendering of the view as a Drawable,
  • The rendering calculation in a “background thread”.

It also manages accessibility APIs and of course Touch events. Facebook is currently working on the integration of customs animations.

Facebook clearly shows us its intention to converge the concepts put forward in React.js with programming by Component and the use of Props and State. The internal Litho engine is responsible for mimicking the behavior of a virtual DOM. It is a competing vision of MVVM, MVP or MVI type modeling, where it will tend to use in addition to XML layouts a data binding (standard Binding of Android or RxBinding).

To obtain more information, you can read the Litho’s documentation — Litho: A declarative UI framework for Android.

Doze

Included from Android Marshmallow (API 26), Doze and App Standby are two components of energy saving. Doze is a system mode that restricts access to services, applications that use the CPU and the network extensively.

Since Android Oreo (API 26), these restrictions are even more severe and disable even implicit broadcasts (see, e.g. Implicit Broadcast Exceptions) and it is no longer possible to start a service in an application in the background.

To make it easier to migrate applications to include these new restrictions, Evernote has implemented the android-job library for creating deferred and background jobs.

The Resurgence of SQL

After a transition from mode and while many libraries of ORM can be abstracted, the SQL returns today with SQLDelight and Room.

Properly used, SQL allows you to execute the business directly in the database rather than in the code in order to gain performance.

SQLDelight

This library developed by Square generates Java models from SQL that allow to read and write in the database. SQL tables and declarations are written directly into .sq files interpreted by the library.

SQLDelight supports AutoValue but does not support Kotlin data class in its current version

Room

Room is a SQLite abstraction layer developed by Google for Android and is part of the Architecture Components such as LiveData and ViewModel.

This library generates SQL from Java using pre-processor annotation.

There are many examples of implementation of this library including Kotlin and there is more complete documentation for SQLDelight.

To obtain more information, you can consult the Documentation of Room here: Room Persistence Library

GraphQL on Android is here!

GraphQL

GraphQL is a query language for API development that aims to provide a complete description of the data that allows clients to query only what they need. GraphQL is developed by Facebook and is an answer to the problems encountered during the development of API Rest.

Apollo

Apollo-Android is a GraphQL client that generates Java templates from GraphQL queries written in a .graphql file. Generated classes are used to create network queries to the GraphQL API.

Apollo was written for the purpose of being fully compatible with the RxJava2 responsive programming library.

  • Apollo-Android is available on GitHub.

Upgrading to Moshi

Moshi is a parsing library of JSON to Java developed by Square who wants to be the successor of Gson considered inactive and heavy (1345 methods for Gson against 759 for Moshi).

The implementation of Moshi is relatively similar to that of Gson to facilitate the migration from one to the other. Some differences however:

  • Moshi has less default adapter for Java and Android platform types, forcing developers to write their own adapters,
  • For the sake of simplification, Moshi is less configurable (no naming strategy, versioning, etc.)
  • No JsonElement
  • Moshi uses the Okio bookseller for I/O and integrates perfectly with OKHttp

Moshi also supports Kotlin (moshi-kotlin) but is dependent in his current version of kotlin-reflect so size is very important for Android standards (11,500 methods).

  • Moshi is available on GitHub

Press Review Inno #3

Web Development

PyCon 2017

By Jacob Cook

PyCon Canada is soon upon us, and the national Python conference of record will be held in Montreal this year, from November 18th to the 21st.

As a software company well-anchored in the Python and Django communities in Montreal, Savoir-faire Linux will be sending a large contingent of employees to attend. The first two days of the conference include keynotes, talks and coding tutorials which cover some of the newest and most useful developments in the Python universe and in software development more generally. On Sunday the 19th at 11:50am (Abstract here), I will be addressing the conference and giving a talk on how to quickly create Django applications that utilize the dynamic front-end power of React. With a stellar speaking lineup announced and 70% of tickets already sold, this year’s PyCon Canada promises to be the biggest yet.

Free Software Projects and Communities

#Hacktoberfest or how a dormant Free Software project is now more active than ever

By Samuel Sirois

Istvan Szalaï and I are attempting to restart the development of a Free Software project that we started last summer but is presently inactive. This project is called RingMe.js. In order to motivate ourselves a bit more to make some contributions to the project, Istvan proposed that we create some issues in the project as opportunities for contributions to Hacktoberfest by DigitalOcean. What started out as simply being a use of “gamification” to motivate ourselves to put more effort into the project became a magnet to some small contributions by passing strangers that helped solve some pressing tasks, bugs and necessary improvements that were marked with the tag #Hacktoberfest. In fact, we were surprised to find that the contributors took time to propose quality code (Check out the code here: savoirfairelinux/ringme.js).

Why has this been such a success?

A few possibilities:

  • The tasks, bugs and new features are simple, precisely-worded and not overly broad in scope (thanks to Istvan);
  • JavaScript is considered a “sexy” programming language in 2017;
  • The codebase is sufficiently young and unique to be easy to understand for newcomers, and it’s also easy to propose coherent solutions;
  • The README, CONTRIBUTING and issue template files are present and well thought-out (thanks to Emmanuel);
  • The project maintainers (Istvan and I) try to respond to contribution requests and questions within a period of 48 hours;
  • #Hacktoberfest has become a popular Web development event within the open source community.

Thanks to:

Thanks to Istvan for having come up with the idea to mark our issues with #Hacktoberfest. Thanks to Jacob for having helped us effectively evaluate some pull requests due to his knowledge of the modern JavaScript ecosystem.  And thanks once again to all contributors to the project, including (at press time):

Mobility

Secret: Psss…  Have You Heard about Android View State Storing?

Who has never before had problems or encountered weird behaviors while trying to store/restore custom views on Android ? In this article Elye will explain how the system works and how one can avoid problems.

Read the Article: A must know secret about Android View State storing mechanism!

Mastering the Thumbnail Generator with Liferay 7 CE and DXP

The Thumbnail Generator aims to improve and facilitate the generation of thumbnails provided by Liferay.

This plugin was created during a project requiring a large number of thumbnails with precise dimensions in order to minimize the loading time of the web pages. Currently, Liferay is only capable of generating two different sizes of thumbnails, when a new image is uploaded on an application (using the dl.file.entry.thumbnail.custom* settings of portal-ext.proprties). This new plugin, however, allows you to have full control over the number of thumbnails created as well as the way they are generated.

This article is structured as follows. After briefly describing the main components of this plugin, I will explain how to configure it in order to manage an unlimited number of thumbnails with Liferay.

I. Describing the Plugin Components

The Listeners
The Thumbnail Generator uses two Model Listeners to listen to ”persistence events” like the creation, modification and deletion of documents in Liferay application. A document can match any file’s type (text, image, video, pdf, …). Later, you will learn how to configure the plugins in order to process only relevant documents.

The first Listener listens for the creation and modification of a document, then it creates or updates the document’s thumbnails. The second listens for the deletion of a document, and deletes the thumbnails associated with this document in the aftermath.

The Servlet Filter
The Servlet Filter intercepts all requests calling for a document of the application and performs a series of validation before returning a thumbnail in response. It will first analyze the parameters of the query in order to know if a thumbnail is requested. Next, the filter is going to verify that the thumbnail does exist in order to finally return it to the author of the request. If one of these checks fails, the query will be ignored by the filter and it will follow its normal course – i.e. returning the original document requested.

The ThumbnailService
Lastly, the ThumbnailService handles the creation/deletion of the thumbnails and organizes them in the storage system of Liferay, using the plugin’s configuration.

II. Using the Plugins

The use of the Thumbnail Generator entails configuring the plugins and retrieving the thumbnails.

Configuration
The Thumbnail Generator’s configuration page (Menu => Control Panel => Configuration => System Settings => Thumbnail Configuration) allows you to define two options:

  • The format of the files that will be processed by the plugin.
    For example, to restrict the creation of thumbnails for JPG and PNG files, simply add these formats to the configuration and all the other files will not be taken into account by the plugin.
  • The command lines that will generate the thumbnails.
    In order to define a thumbnail and to generate it, you need to add a line in the configuration with the following syntax : ‘name:command‘. The name will later provide access to this thumbnail, the command corresponds to the command line that will generate the thumbnail (see ImageMagick’s documentation to explore all possible options). For example : ‘img_480:convert ${inputFile} -resize 480×270 ${outputFile}‘ will generate a thumbnail of dimension 480×270 and that will be retrievable through its name « img_480 ».

Thumbnail Generator configuration page

In the above screenshot, three different thumbnails will be created for each JPG and PNG files uploaded in the application.

The plugin’s configuration not only allows the user to control the number of thumbnails to be generated, but also the way in which they are created. In this scenario, the ‘convert command’ comes from the powerful image editing library ImageMagick. Instead of this command, we could have used any other commands executable on the machine hosting the Liferay application.

Thumbnails’ Retrieval
Once the plugin is deployed and configured, it is ready for use. Thumbnails will be automatically generated each time a document is uploaded into your application. In order to retrieve the thumbnail of the document, you just have to add the parameter “thumb={thumbnailName}” in the URL using this document.

An Example of Thumbnail Retrieval Process

  • The URL of a document (test.jpg) on a local instance of Liferay looks like this : http://localhost:8080/documents/20147/0/test.jpg/0d72d709-3e48-24b3-3fe6-e39a3c528725?version=1.0&t=1494431839298&imagePreview=1
  • The URL of a thumbnail associated to this document, named img_480, can be called this way : http://localhost:8080/documents/20147/0/test.jpg/0d72d709-3e48-24b3-3fe6-e39a3c528725?version=1.0&t=1494431839298&imagePreview=1&thumb=img_480

III. Administration

In order to give more control to the user in the management of this module, an administration page (your site > Configuration >  Thumbnails administration) has been created allowing you to perform some actions on the thumbnails:

  • Re-generate all the thumbnails
  • Delete all the thumbnails
  • Delete orphans thumbnails (Which are no longer linked to any documents but are still present due to a change in the configuration)

Thumbnail Generator administration

In conclusion, this brief tutorial introduces to you the Liferay’s utility app called Thumbnail Generator and describes how to use, configure, retrieve the thumbnails and administer the plugin. Should you have any further questions or comments please contact us.

The Future of Open Source Software in Broadcasting Industry: SMPTE BootCamp 2017

                           

Savoir-faire Linux participated at the Society of Motion Picture and Television Engineers (SMPTE)’s BootCamp 2017 having the overarching topic of Media in the IP Era. This bootcamp was organized by the Montreal SMPTE Committee including the main actor, CBC (Radio-Canada), and was held at LÉcole de technologie supérieure (ÉTS), June 12-13, 2017.

Michel Proulx addressing the audience at SMPTE BootCamp 2017 in Montreal


The Event’s Focus and Our Role

The SMPTE, including the Montreal/Quebec chapter, has three key goals: educating players in the media and broadcasting industry, communicating the latest technological developments, as well as encouraging networking and interaction among industry stakeholders. This year, the SMPTE’s BootCamp 2017 rallied participants around the following topics:

a) IP transport and the SMPTE 2110 Standards,
b) Virtualization and software.

On this occasion, our open source software (OSS) consultants: Éloi Bail and Amir Taherizadeh, jointly delivered a talk entitled Open Source Software: A Tool for Digital Transformation in the Broadcasting Industry. The first part revealed the empirical results of our joint R&D project with Radio-Canada on “how to handle IP contents in the cloud”. This includes deploying FFmpeg OSS technology on a general purpose server in order to transmit raw data at speed of 3.5 Gbps without relying on specialized hardware broadcasting equipment. In addition, Éloi demonstrated to the audience the actual data transmission, and performance on the stage in real time with the help of two generic servers and a switch. This showcases for the participants the technical implications and potential of FFmpeg in broadcasting industry for the years to come.

Amir Taherizadeh and Éloi Bail while presenting on the stage.

The second part explored the nature, inherent attributes, myths, advantages, challenges, and licensing opportunities associated with OSS. It explains OSS as a relevant, significant, and ubiquitous tool in a variety of industries including, but not limited to, aerospace as well as media, entertainment and broadcasting industries. The aerospace industry presents an interesting case as it is somewhat comparable to broadcasting industry on three dimensions. It is a rather closed and highly standard-governed industry. It is capital intensive and advances rapidly. There is also a complex and symbiotic interrelationship between hardware and software components. Amir presented an example where the networking stack of the Linux kernel drives the multi-media equipment of an aircraft. This case demonstrates how value-added solutions can be created having adopted an open and collaborative value creation process. Indeed, OSS projects like the Linux kernel and FFmpeg are testimonies to collaborative software development where private companies and communities work together towards a common objective.

From left to right: Éloi Bail, Daniel Guevin (Radio-Canada), David Beaulieu (Radio-Canada), Amir Taherizadeh, Ash Charles, and Francois Legrand (Radio-Canada)

Overall, we really enjoyed being part of this event as it highlighted the opportunity for software transformation – including using open source software such as FFMpeg, GStreamer – in the broadcasting industry.

FOSDEM 2017 : our impressions

Packed amphitheatre for the keynote on the «Kubernetes on the road to GIFEE»

In the 2017’s FOSDEM event, held in Brussels, Soizik, Cécile, Clément, Adrien and Andreas represented Savoir-faire Linux. Here, they share briefly their experience and impressions from their participation in the event.

Soizik Froger, project manager

It was my first FOSDEM event, and I loved it. I have only one regret: I wish I could have attended every session, and talked with everyone!! It was a tremendous place for tech-savvy and free software lovers like me. Seeing those panelists with very high level of expertise has taught me a lesson about humility that comes with great knowledge.

I definitely give five stars to Frenchy Matthieu Totet’s talk on Graph Cycles. This is a passionate work on a real time graph on Twitter and how we can seize the fantastic potential of this technology!

I almost cried of joy at open Q&A session with members of the OpenJDK Governing Board: Mark Reinhold, Mario Torre, Andrew Haley, Georges Saab & Doug Lee (embedded). I secretly took a picture, and I’m sure I will keep it in front of my eyes until the next FOSDEM.

Open Q&A session with members of the OpenJDK Governing Board: Mark Reinhold, Mario Torre, Andrew Haley, Georges Saab & Doug Lee (embedded)

I give the best ‘orator palm’ to Christian Thalinger for his benchmarking of Compiler JIT Graal on Twitter services. It was such a clear and organized speech that a slow guy like me understood it all.

Finally, I discovered what technologies lie behind Ring. Our session was a great success. We were excited by the volume of the turn-out. We had a diverse and enthusiastic audience that posed questions about the architecture of Ring and its ambitious potential for scalability. High five to the Ring’s development team!

Cécile Delépine, Delegate Europe General Manager

That was my first FOSDEM too! It was a great opportunity to meet with the industry in a both cozy and professional environment.
My main focus was containers orchestration with Kubernetes, the fast growing Open Source community at the time being. FOSDEM is the place for technological intelligence, which I see as a BizDev not as an engineer.

Students and tech-related senior job seekers, please take note : FOSDEM is also a place for hiring talents (we invaded FOSDEM job corner with all our job posts for France and Canada). Our presentation on Ring , and Clement’s commitment to LemonLdap coupled with our presence on OW2 stand also significantly contributed to promoting our expertise at Savoir-faire Linux.

I wish I attended Mozilla conference too. What does motivate the open source community? This is the question posed by Rina Jensen, whose conclusions should be widely shared.

Some food for thoughts.

My five stars goes to Software Heritage, a project supported and initiated by Roberto Di Cosmo (INRIA, GTLL Systematic Member). The source code of our projects is a common good, thus it should be available to all and be centralized in one archive which does not depend un one solution and does not vary from one solution to another (Github, Bitbucket…)

Last but not least, I bought the book How Linux works and I almost finished the second chapter;-)

Clément Oudot, infrastructure and security expert

This year, I represented LemonLDAP::NG projet. I then met with Fusion Directory and Spoon communities., It was the first time we had an OW2 stand, and it showed that this consortium was not only Enterprise oriented but also community-oriented.

I was pleased by the large number of attendees at Perl stand and the packed Devroom.
I am still surprised to see Perl can attract so many people. What a wonderful turn-out for Perl!

During this weekend, I met with lots of people I knew from different communities : Framasoft, XMPP, OpenStack, VLC, PHP etc. That’s why I love going to FOSDEM!

The OW2 Stand with Clément Oudot (c), Cécile Delépine and Soizik Forger
Ring conference : What technologies lie behind Ring

Adrien Béraud, Ring system engineer
FOSDEM is an exciting and inspiring place. We met with lots of interesting people with interesting projects, There were too many people! [8000 people attended the event]

As for the Ring session, it was amazing to see how exciting the audience were. Last year, people discovered Ring, this year, they wanted to know a lot more about the technology. No wonder there were so many of them. Actually, there is a growing interest for distributed communication systems.

My five stars goes to Alok Anand, who presented Telepathy Connection Manager for Ring. He was able to develop it because he joined Google Summer of Code’s program which accommodated Ring from Savoir-faire Linux. Thanks to such a wonderful collaboration and such a nice program for young coders.

Andreas Traczyk, Ring developer

Like Soizic and Cecile, it was my first time at FOSDEM in Brussels. It surpassed all my expectations. There were so many passionate people, so many nerds in the same place;-) It was intense!

A packed room for Ring conference

I was really impressed by the turn-out of the audience during the Ring session, Although we did not haveso much time, we were well received, and the audience’s questions were challenging. Besides, I wish we had more space and more time!

My five stars for the best presentation goes to Daniel Pocock for his excellent talk on the real time communication solutions crowdfunding. It was so interesting, so inspiring.

The Open Source Awakens

WIRED said that ‘Open Source went nuclear‘ in 2015.  Join the xiRADIO lunch-time podcast on May 18, to explore the forces disrupting the software industry.

Today, more than 3 out of 4 companies run on open source software, a pace that keeps increasing (it doubled since 2010). Why so much interest? There exist a wide variety of reasons, we can resume in three big points for now. (Note to the purists: to further simplify, I’m putting Free Software and Open Source in the same bag.)

#1 – Open Source is good for customers.

Cisco-on-advantages-of-FLOSS_Cg-iEn8U0AErnevCisco @lewtucker arguing for Open Source at the recent OpenStack Summit
(Austin TX, April 26, 2016)

It is no surprise that Google, Facebook and other IT giants have built most of their entire business on Free/Libre Open Source Software. According to Sylvain Carle, former Twitter employee and FLOSS advocate, Twitter runs on about 95% of Open Source software. It’s a great way to bootstrap a company, and to scale fast. Lew Tucker, Cisco Cloud VP/CTO, explained why Open Source makes sense to his business partners at the recent OpenStack Summit. Open Source is less expensive (e.g. no vendor lock-in, no per-user or per-CPU fee that would not allow scaling exponentially), more productive (e.g. code reuse, sustainability, agility), and it levels the playing field for everyone to collaborate and to compete, thanks to industry standards.

#2 – Open Source is good for IT Services companies.

wipro-innersourceWipro’s recorded presentation at the recent OpenStack Summit (April 2016)

Open Source builds on a deep tradition of Savoir-faire (Know-How) considered as best practice in the software development industry. That’s why companies like PayPal adopted Open Source practices without necessarily adopting Open Source (strictly speaking Open Source refers to a type of software licensing). They call this practice InnerSource: “a great tool to help break down silos, encourage internal collaboration, accelerate new engineer on-boarding (…)”. One step ahead in sophistication, Wipro leveraged Open Source to improve employee engagement and expertise. The Open Source way encourages developers to collaborate and to learn new skills fast, which is life and blood for service companies selling their time and expertise.

#3 – Open Source is the new de facto outsourcing model.

KubernetesA short history of Kubernetes

Most software is so complex that it can’t be developed by a single individual. More recently, large companies also have started to question whether they should carry the burden of developing everything on their own. When Google open sourced Kubernetes, derived from Borg -an internal tool that made scalable updates possible for services like Gmail, most major industry players offered to partner almost immediately. Although it may sound crazy that Google wanted to share their secret sauce, in fact it wasn’t really. Google did not vanish. As a result, the entire industry started to work together on improving how Google deploys software, and how everyone else is. Google ended up outsourcing part of their R&D for free, while scoring big points on technical leadership and vision. Today’s new normal is that two-thirds of companies find a benefit in contributing to Open Source.

In conclusion, did Open Source win?

Lao Tzu explains the principle of Self Realization in the Tao as 无为 (Wú Wéi), or the art of non-doing. If we look back a few years ago, we can wonder what happened to the dualistic view between Proprietary and Open Source software. What happened to all the hate between one side calling the other a ‘cancer’, and the other complaining about an imposed software ‘tax’ on computing? There is no such thing as winning or losing in achieving the harmony of Tao.

If today’s world seems much wiser, it is also more pragmatic. Software is often times governed by a blend of Open Source and other licenses. For example, Microsoft has nearly become an Open Source company close to open source Windows, and contributing to GitHub “with love”.

Whenever peace and love rule, carefreeness should not turn in carelessness. We should worry that a great majority of code on GitHub lacks a license (which means the author was clueless or did not care), and some thinkers like Nadia Eghbal already speak about a post-Open Source world. In fact, like Monsieur Jourdain, in Moliere’s play, suddenly realizing he had been speaking prose all his life, we see many young developers using Open Source tools without even knowing what Open Source is.

For end-users, it may well be that nothing has changed. They have to continue relying on intelligent and enlightened software developers and companies, hoping they won’t have to trade their Freedom and Privacy for good design and convenience.

Update May 19: The podcast is available on Vimeo.