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
Comments