JBoss Community Google Summer of Code 2016 Ideas

Version 36

    The JBoss Community is participating in Google Summer of Code in 2016.

     

    All students & developers are welcome to participate in the Google Summer of Code 2016 program with the JBoss Community!

     

    If you are a student looking forward to participate the GSoC 2016 with the JBoss Community, feel free to browse the growing idea list below. Please don't hesitate to contact the mentor(s) indicated in the proposal for any related clarification and to discuss proposals. Students can submit the proposals starting March 14th 2016.

    If you want to suggest an additional idea, please use the page GSoC 15 Student Ideas (you'll need a free JBoss Community account to edit the page). Interested mentors can check the student ideas page and sign up to be a mentor by moving the idea onto the main page.

    You can also look at GSOC15 Ideas for suggestions from last year.




    Administrators and Mentors

    We will list the potential mentors in this place. For now, if you have any questions, please contact the primary GSoC administrator:

    Heiko Rupp (@pilhuhn)

    Andrew Lee Rubinger (@ALRubinger)


    Idea Proposals

    Category: Testing

    Provide test scheduling for large test suites

    Status: Final

    Summary of idea: When running large test suites during development we would like to find ways to execute the test suite to get negative feedback as soon as possible. That could include 'running previously failed tests first', 'running historically troublesome tests first', 'running tests that are touched by changed code', etc etc. Similar idea from the Ruby community; Predicting Test Failures | Tenderlovemaking or from Atlassian.

    Knowledge prerequisite: Java

    Skill level: Beginner | Intermediate

    Contact(s) / potential mentors(s): Aslak Knutsen (aslak@4fs.no), Bartosz Majsak (bartosz.majsak@gmail.com)

    Associated JBoss community project(s): Arquillian · Write Real Tests

     

    Category: Tooling

     

    AsciiDoc support for Eclipse

    Summary of idea:

    Writers need an IDE too. Join the effort to bring AsciiDoc support to Eclipse! (via the Mylyn WikiText project) The first step is to create a compliant parser for AsciiDoc. To avoid unnecessary overhead and external dependencies, the Eclipse must have its own parser, based on the WikiText API (not use the one from AsciidoctorJ). This parser is well underway, but there is still work to be done. If you are passionate about parsers, and want to learn more about the AsciiDoc syntax, this is a great project for you. Once the parser is in place, work can begin on views to provide more insight into the document structure, navigation aids like quick links and refactoring commands to enable intelligent content updates. You can find more information about this initiative at Mylyn/WikiText/AsciiDoc - Eclipsepedia.

     

    Knowledge prerequisite: Java, parsers, familiarity with the AsciiDoc syntax

    Skill level: Intermediate

    Contact(s) / potential mentors(s): Dan Allen (@mojavelinux), Max Andersen (@maxandersen)

    Associated JBoss community project(s): JBoss Tools

     

    IDE remote control

     

    Summary of idea: The idea is to write up a plugin for Eclipse (to start with) that listens for incoming requests on localhost and will react to requests like http://localhost:666/openProject?path=<pathtoresource> (to open a project based on a url) or http://localhost:666/cloneRepository?url=https://github.com/jbosstools-website etc. to clone a gitrepo, etc.  Allowing you to do various actions from a browser. Maybe even explore adding a custom url handler, to do ide://openProject, ide://cloneRepository etc.


    Idea is to first to it in Eclipse as a prototype to explore options and then if time permits try add it to other IDE's or even basic editors to allow for similar command access.


    Knowledge prerequisite: Eclipse, Java, JavaScript


    Skill level: Intermediate

     

    Contact(s): Max Rydahl Andersen

    Mentor(s): Max Rydahl Andersen

     

    Associated project(s): JBoss Tools

     

     

    Category: Application Development

     

    Drools IoT (Drools + Pi4J) - Drools Demo into the Raspberry PI

    Status: Final

    Summary of idea:

    The scope of this project is to create a very simple app to demonstrate the power of Drools running inside the Raspberry PI controlling some motors and getting real data from sensors attached to the board.

    The final goal of this project is to provide an integration between the Drools project and the Pi4J project which will allow us to interface with the board seamlessly. A basic set of rules to cover the most common scenarios

    can be delivered as part of the integration.

     

    Knowledge prerequisite: Java, Drools, Basics of the Raspberry PI Board (I can mentor on Drools and the Raspberry PI Specifics - knowledge on electronics will be highly recommended)

    Skill level: Intermediate

    Contact(s) / potential mentors(s): Mauricio Salatino (@salaboy - www.salaboy.com)

    Associated JBoss community project(s): Drools

     

    Drools Rules in Minecraft

    Status: Final

    Summary of idea:

    The scope of this project is to create a Drools MOD into Minecraft. This MOD should allow you to create simple rules which will monitor and control elements of the Minecraft World.

    Notice that you will need to know the basics of Minecraft Modding in order to apply for this idea. I can mentor on the Drools side.

     

    Knowledge prerequisite: Java, Drools, Minecraft Modding

    Skill level: Intermediate

    Contact(s) / potential mentors(s): Mauricio Salatino (@salaboy - www.salaboy.com)

    Associated JBoss community project(s): Drools

     

     

    Integrate Drools with your favourite project

    Status: Final

    Summary of idea:

    The Drools Rule Engine allows you to create rules based on any Java Model out there. By creating rules you can monitor the state of your model and react based on changes using a declarative fashion.

    The scope of this project is to provide the integration of Drools with your favourite Java framework. If you have an idea about integrating a framework with Drools, get in contact and we can

    discuss if it fits in this program.

     

    Knowledge prerequisite: Java, Drools

    Skill level: Intermediate

    Contact(s) / potential mentors(s): Mauricio Salatino (@salaboy - www.salaboy.com)

    Associated JBoss community project(s): Drools

     

    KIE Management Application (with REST api and UI)

    Status: Final

    Summary of idea: Build management extension and UI for KIE Server

    The project is about creating management extension to KIE Server (lightweight embeddable rule, process execution server) to manage it remotely. Typical management operations are:

    - manage containers (deploy/undeploy, upgrade etc)

    - view process instances and perform administration actions on them like cancelling, migrating etc

    - view tasks as admin - delegate, forward, alter properties

    - view jobs and perform admin operations on them like cancel, restart failed jobs etc

    Majority of the work will be buildiing fully featured UI with lightweight technology - prefferebly with AngularJS as both KIE Server has sample app and patternfly has set of UI directives for angular.

    Knowledge prerequisite: Java, AngularJS, REST, knowledge of KIE platform (drools, jbpm, dashbuilder) is an advantage but not mandatory

    Skill level: Intermediate

    Contact(s) / potential mentors(s): Maciej Swiderski (mswiders@redhat.com)

    Associated JBoss community project(s): KIE (Drools, jBPM, Dashbuilder), patterfly

     

    Category: Mangement and Monitoring

     

    Improve existing Hawkular-Android client

    Status: Final

    Summary of idea: The Hawkular Android client was last year developed in conjunction with the Aerogear team. Since then Hawkular has been developed further. In this proposal the client should be brought forward to match latest Hawkular and to put a focus on general purpose inventory browsing (also for resource types that do not have a corresponding view in the web-ui) and set up of alerts for metrics found in that inventory. It should be possible to remember those metrics as 'favorites' for quick access.

    Knowledge prerequisite: Java, Hawkular, Aerogear, Andrdoid

    Skill level: Intermediate

    Contact(s) / potential mentors(s): Heiko Rupp

    Associated JBoss community project(s): Hawkular, Aerogear

     

    Hawkular-agent for vert.x

    Status: Final

    Summary of idea: Vert.x has already the capability to send metrics to Hawkular. The student will in this proposal implement the functionality needed so that resources in vert.x can report themselves into the inventory of Hawkular, so that the Hawkular UI and other clients can find them with additional traits like operations, names of metrics etc. This also implies being able to run operations from Hawkular inside vert.x

    Knowledge prerequisite: Java, Hawkular, vert.x

    Skill level: Intermediate

    Contact(s) / potential mentors(s): Heiko Rupp, Thomas Segismont

    Associated JBoss community project(s): Hawkular, vert.x

     

    Improve existing Drools Monitoring Capabilities

    Status: Final

    Summary of idea:

    Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules Engine (BRE), a web authoring and rules management application (Drools Workbench) and an Eclipse IDE plugin for core development.

    Drools can handle a high amount of data and rules. It is a fairly common requirement to be able to measure and keep track on the rules that are fired/activated and the amount of information that the engine is handling. Currently Drools provides some metrics information via MBeans(JMX). The scope of this work will be to create a small REST service (Using Wildfly Swarm) that expose this information using JSON so it can be consumed and analized by a data analytics tool, allowing us also to create an UI based on the information that is extracted.

     

    Knowledge prerequisite: Java, Drools, REST (I can mentor in Drools and Wildfly Swarm)

    Skill level: Intermediate

    Contact(s) / potential mentors(s): Mauricio Salatino (@salaboy - www.salaboy.com)

    Associated JBoss community project(s): Drools

     

    Category: Asynchronous Messaging

    Smart HTTP/2-based protocol for Infinispan

    Status: Final

    Summary of idea: Infinispan (http://infinispan.org) is a distributed in-memory key/value data store. It can be used both as an embedded Java library and as a language-independent service accessed remotely over a variety of protocols (HotRod, REST, etc). The idea of the project is to implement the same topology and consistent-hash awareness already available in our custom binary protocol (HotRod), but over HTTP/2 in a way that provides graceful degradation for dumb clients, and enhanced performance for smart clients. This will require modifying the existing server-side REST endpoint and also in creating a smart HTTP client in either Java or Javascript.

    Knowledge prerequisite: Java (8), Scala, HTTP and Netty

    Skill level: Intermediate, Experienced

    Contact(s) / potential mentors(s): ttarrant@redhat.com

    Associated JBoss community project(s): Infinispan

    Category: Continuous Integration and Continous Improvement / DevOps

     

    DevOps tooling for Vert.x applications

    Status: Final

    Summary of idea: Vert.x (http://vertx.io)  is a toolkit for the Java Virtual Machine enabling the implementation of reactive, highly concurrent, polyglot applications. The idea of the project is to implement a set of tools / guidelines to implement Vert.x using a “devops” approach. This cover continuous integration, continuous deployment, production settings and so on.


    The project starts with an introduction to Vert.x and the implementation of small examples using the different modules available in the Vert.x ecosystem. In this project, you are going to:

    • provide the different settings to use different log aggregator that can be used with Vert.x application. This includes Graylog and Heka.
    • monitor applications based on New Relic, Netflix Servo are studied.
    • provide deployment recipes for Ansible and Chef
    • provide guidelines to implement continuous delivery of Vert.x application, in a zero-downtime environment

    Submission: To submit your proposal for this subject, use the vert.x organization (and not the jboss community one). See Google Summer of Code Ideas.


    Knowledge prerequisite: Java (8), Jenkins, Gradle or Maven is a plus

    Skill level: Intermediate, Experienced

    Contact(s) / potential mentors(s): clement.escoffier@redhat.com

    Associated JBoss community project(s): Vert.x, Ansible, Jenkins, Heka, Servo,...

     

    Category: Runtime Frameworks

    Implementation of “blueprint” Vert.x applications

    Status: Final

    Summary of idea: Vert.x (http://vertx.io)  is a toolkit for the Java Virtual Machine enabling the implementation of reactive, highly concurrent, polyglot applications. The idea of the project is to implement a set of applications using the Vert.x toolkit to illustrate how different classes of applications can be done. This project aims to provide guidelines to Vert.x users to implement various applications.


    The project starts with an introduction to Vert.x and the implementation of small examples using the different modules available in the Vert.x ecosystem. Then, the first application is a web application to manage a todo list following the specifications of Todo Backend (http://www.todobackend.com/). The second application is a message-based application such as Kue (http://automattic.github.io/kue/). The third application is also message-based but illustrates the scalability of Vert.x. It provides a message processing system able to handle a large number of message per seconds. Finally, the last application is a micro-service application close to the Spring Micro Service example (https://github.com/kbastani/spring-cloud-microservice-example).


    Live demo of the applications will run on OpenShift and OpenStack, to illustrate production deployment.

    All these applications will be available and documented on the Vert.x website.


    Knowledge prerequisite: Java (8), Gradle or Maven is a plus

    Skill level: Beginner, Intermediate

    Contact(s) / potential mentors(s): plopes@redhat.com, clement.escoffier@redhat.com

    Associated JBoss community project(s): Vert.x

    Submission: To submit your proposal for this subject, use the vert.x organization (and not the jboss community one). See Google Summer of Code Ideas.


    Vert.x Eventbus clients for Go, C, and Rust applications

    Status: Final

    Summary of idea: Vert.x (http://vertx.io)  is a toolkit for the Java Virtual Machine enabling the implementation of reactive, highly concurrent, polyglot applications. Thanks to its eventbus, any application can interact with Vert.x applications. The idea of the project is to provide a set of libraries to ease the integration of Vert.x applications with applications developed in Go, Rust and C.


    The project starts with an introduction to Vert.x and the implementation of small examples using the different modules available in the Vert.x ecosystem. A focus is made on the integration capabilities and the event bus bridges.


    At least 3 languages are covered in this project: Go, C and Rust. Proposals for other languages are definitely welcome. For each language, a library is developed in order to let an application developed with the language to interact with the Vert.x Event Bus. The communication is based on TCP and JSON.


    Knowledge prerequisite: Java (8), some notion of C, Go and Rust

    Skill level: Intermediate, Experienced

    Contact(s) / potential mentors(s): plopes@redhat.com, jviet@redhat.com

    Associated JBoss community project(s): Vert.x, Go, Rust

    Submission: To submit your proposal for this subject, use the vert.x organization (and not the jboss community one). See Google Summer of Code Ideas.

     

    Teiid HDFS Translator/Connector

    Status: Final

    Summary of idea: Teiid (http://teiid.io)  is data virtualization project that has capabilities to integrate data from disparate data sources and has abilities to provide logical views on top of that data in real time without moving that data from their source systems. The access to the source systems is provided through what we call translator or connector. The idea behind this project is to access the data HDFS through Teiid.

     

    This can be extended to add in support for PDF files, Web scraped pages to handle unstructured data. Also look at "Open to Community" requests for additional interest Issue Navigator - JBoss Issue Tracker

     

    Knowledge prerequisite: Java (7), SQL, Hadoop HDFS

    Skill level: Beginner, Intermediate

    Contact(s) / potential mentors(s): rareddy@redhat.com, shawkins@redhat.com

    Associated JBoss community project(s): Teiid



    Hibernate Search: JSR 352 batch job for re-indexing entities

    Status: Final

    Summary of idea:

    Hibernate Search is an extension to Hibernate ORM that brings full-text search via Lucene or Elasticsearch to JPA domain models. The full-text index can be updated in two ways: Automatically, whenever data changes (using listeners hooked into Hibernate) or by means of the "mass indexer", which rebuilds the entire index for given entity types.

     

    You mission, should you decide to accept it, will be to implement a new mass indexer using the Java Batch architecture as defined by JSR 352. This batch job should accept the entity type(s) to re-index as an input, load the relevant entities from the database and rebuild the full-text index from these.

     

    The following tasks are suggested as part of the project, but we look forward to your ideas as well:

     

    • Implement a JSR 352 batch job
    • Run integration tests in plain Java SE (using JBeret as the batch runtime) and JBoss WildFly
    • Compare the performance of the batch job with the existing mass indexer and find the right tuning parameters to ensure a great performance
    • Allow to select the entities to be re-indexed through a HQL/JPQL query (allowing e.g. to re-index only entities modified after a specific date)
    • Allow to specify a JPA 2.1 entity graph for loading the entities to be re-indexed

     

    Knowledge prerequisite: Java, Git, Maven; Ideally Java Batch (JSR 352)

    Skill level: Intermediate

    Contact(s) / potential mentors(s): Gunnar Morling (gunnar@hibernate.org)

    Associated JBoss community project(s): Hibernate



    Hibernate Search: track database changes for asynchronous indexing

    Status: Final

    Summary of idea:

    Hibernate Search is an extension to Hibernate ORM that brings full-text search via Lucene or Elasticsearch to JPA domain models. In its current form the indexing events are fired by listening to events from Hibernate ORM, and this generates events in the same JVM which then need to be either processed on the spot or pushed to a different system for subsequent indexing, such as storing these events in a JMS queue.

     

    This approach has been effective so far, but is limited to the changes that the Hibernate ORM engine is able to intercept; for example it can not maintain the indexes in sync when the database is updated from a different application, or when the Hibernate API is bypassed by using native SQL update statements. In terms of convenience, it also requires to either setup a reliable, fault tolerant JMS queue, or rely on the non-durable in memory representations, which further limits the application deployment to a single node.

     

    The goal of this project is to provide alternative strategies to track changes to the entities which require updates to the Lucene or Elasticsearch indexes.

    In a first phase we hope to polish the (currently experimental) approach of using triggers in the database:

    • Completely automate the generation of the needed triggers and other schema modifications, to be automatically exported by Hibernate ORM when it creates the schema generation scripts using the existing export options.
    • Allow activation of the new backends with a strong focus on simplicity for the end users; for example using a single configuration property if that's possible.
    • Minimize the API surface: ideally users should not need to know about how the supporting entities are generated(mapped), nor need to learn new annotations.
    • Polish the currently experimental code to the high standards required by our brand so that it can be integrated in the main release and documented as a new feature.

    In a second phase, we expect to spend some time exploring an evolution of this approach: rather than using database driven triggers, to gather the same events using the binary replication logs generated by most relational databases using the Debezium · GitHub project. Since Debezium is currently in early development and will probably not support all major databases yet, this second phase of the project is meant to be more of an explorative kind and not necessarily meant for integration in the main source code repository.

     

    Knowledge prerequisite: Java, Git, Maven; SQL

    Skill level: Intermediate

    Contact(s): Sanne Grinovero (sanne@hibernate.org)

    Associated JBoss community project(s): Hibernate


     

    Category: Mobile

    AeroGear WebPush and UnifiedPush Server integration

    Status: Final

    Summary of idea:

    AeroGear has an early version of a WebPush compliant server, the integration of the new WebPush standard to the UPS (UnifiedPush Server) is crutial to ensure UPS is up-to-date with latest Push standards. 

    Involved tasks:

    • Add WebPush support for Google Chrome, Mozilla Firefox and Safari browsers into UPS.
    • Integrate AeroGear WebPush server with UnifiedPush Server.
    • Keep WebPush Server codebase up-to-date to the latest version of the WebPush standard
    • Demo application for showing the work of WebPush protocol in action with UPS.
      • pure WebPush demo: AeroGear UPS to WebPush Server, which delivers to a browser/device
      • GCM push, triggered by UPS. On browser/device push message is received on (Chrome's) WebPush APIs

    If the scope of the project has room for some more tasks, the following ideas might be interesting to implement as well:

    • Port webpush-codec directly to Netty. It will simplify WebPush Server code base and attract other developers to improve the core of the protocol.
    • Java client for AppServer (similar as a current client for User Agents).

     

    All code changes do require updates to our project documentation and of course unit testing and integration testing are part of the development process

     

    Knowledge prerequisite: Java, Netty, JavaScript/HTML5 and JavaEE

    Skill level: Intermediate, Experienced

    Contact(s) / potential mentors(s): Matthias Wessendorf (@mwessendorf)

    Associated JBoss community project(s): AeroGear

     

    Push Notification demo case for Unified Push Server

    Status: Final

    Summary of idea:

    Write a new versions of the different components for our successful AeroDoc example, which you can see here https://youtu.be/IVMHW1uzrH4?t=209

    Some ideas regarding updates on the different related components:

    Backend/Server microservice component

    * remove picket link based auth with Keycloak for pure OAuth2 login

    * convert the server to WildFly Swarm fat JARs, to run AeroDoc as a Microservice, in a scalable mode.

    ** Features like WildFly's Ribbon layer (from Netflix OSS) could be used

    * Rewrite the UI, using Angular2 and make it look nicer

    * Use latest of Hibernate's Geo library for Geolocation based push notifications

    IMO it could be done as a complete rewrite.

    iOS app update

    * port the application to Swift and use our Keycloak library for OAuth2

    Android app update

    * port app to latest Android APIs and use our Keycloak library for OAuth2

    New Windows version of the App

    * would be nice to have

    New feature

    * Silent notifications: Introduce the usage of silent notification (no alert) to ping the application. The app wakes up, and performs a HTTP background check against the backend, to check for new Leads (for the AeroDoc Sales guys). Based on the HTTP response of the call, done in the background, local notifications are issued and presented to the user. This includes fine grain update of badge icon on iOS, and similar techniques on Android.

     

     

    Knowledge prerequisite: Java, JavaEE, Mobile (iOS/Android), Push Notifications

    Skill level: Intermediate

    Contact(s) / potential mentors(s): Matthias Wessendorf (@mwessendorf)

    Associated JBoss community project(s): AeroGear

     

    WatchKit SDK for AeroGear/FeedHenry

    Status: Final

    Summary of idea:

    Bring the features of AeroGear/FeedHenry libs to the  Watch:

    - push notification

    - geofencing

    - oauth2: send a tweet from your wrist…

    Provide an extension to the existing AeroGear sdks to make them Apple Watch fit. Focus on high quality sdks also include work on how to unit test (mocking…) your app.

     

    Knowledge prerequisite: iOS8/9, Swift

    Skill level: Medium

    Contact(s) / potential mentors(s): Corinne Krych (ckrych@redhat.com, corinnekrych@gmail.com)

    Associated project(s): AeroGear, FeedHenry, Keycloak

     

    Category: Ceylon Programming Language

     

    Support for SourceMaps

    Status: Final

    Summary of idea:

    Support generating SourceMaps for the JavaScript backend, for better debugger support.

     

    Knowledge prerequisite: JavaScript, Java

    Skill level: Medium

    Contact(s) / potential mentors(s): Enrique Zamudio (enrique@ceylon-lang.org)

    Associated project(s): Ceylon

     

    API diff

    Status: Final

    Summary of idea:

    Generate API diffs in the ceylon API documentation generator, to be able to see the difference between one version and the next.

     

    Knowledge prerequisite: Java, HTML

    Skill level: Medium

    Contact(s) / potential mentors(s): Stephane Epardaud (stephane@ceylon-lang.org)

    Associated project(s): Ceylon

     

    JVM compatibility checker

    Status: Final

    Summary of idea:

    Check whether two Ceylon binaries are binary-compatible or not

     

    Knowledge prerequisite: Java

    Skill level: Medium

    Contact(s) / potential mentors(s): Stephane Epardaud (stephane@ceylon-lang.org)

    Associated project(s): Ceylon

     

    Write a Markdown processor in Ceylon

    Status: Final

    Summary of idea:

    Generate HTML from a Markdown source

     

    Knowledge prerequisite: Markdown, Ceylon

    Skill level: Medium

    Contact(s) / potential mentors(s): Stephane Epardaud (stephane@ceylon-lang.org)

    Associated project(s): Ceylon

     

    Add a ceylon hilight subcommand

    Status: Final

    Summary of idea:

    Generate syntax-hilighted source code in HTML for a given module or function or standard input

     

    Knowledge prerequisite: HTML, Ceylon

    Skill level: Medium

    Contact(s) / potential mentors(s): Stephane Epardaud (stephane@ceylon-lang.org)

    Associated project(s): Ceylon

     

    Participating Projects

    Drools : www.drools.org

    Hibernate: www.hibernate.org