A Java client for the Sixpack A/B testing framework https://github.com/seatgeek/sixpack

Overview

sixpack-java

Build Status Coverage Status

A Java client for SeatGeek's Sixpack a/b testing framework: https://github.com/seatgeek/sixpack

Installing

Sixpack-java is currently only being deployed to maven snapshots, to use it, add the following dependency to your build.gradle:

repositories {
    maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
}

dependencies {
    compile 'com.seatgeek:sixpack-java:0.4-SNAPSHOT'
}

or, if you're a maven user:

<dependency>
  <groupId>com.seatgeek</groupId>
  <artifactId>sixpack-java</artifactId>
  <version>0.4-SNAPSHOT</version>
</dependency>

Overview

The Sixpack client has some nomenclature to be familiar with...

  • A Sixpack server is the deployment of the Sixpack-server that will be hosting your test results
  • An experiment represents a single test in the Sixpack server. It can have multiple alternatives
  • An alternative is one potential result returned to the client when participating in an experiment
  • You start a test by participating in an experiment with alternatives
  • Once the server has selected an alternative for you, you can convert the experiment when the user performs the action that you're measuring

Getting Started

After installing...

The first thing to do is create a Sixpack client using the SixpackBuilder:

    Sixpack sixpack = new SixpackBuilder()
            .setSixpackUrl("http://api.mycompany.com/sixpack")
            .setClientId(user != null ? user.sixpackId : getCachedClientId())
            .build();

It is recommended that you maintain a singleton instance of Sixpack with the DI library of your choice.

Creating Experiments

  1. Create a new experiment from your Sixpack instance:

        Experiment colorsExperiment = Sixpack.experiment()
                .withName("colors")
                .withAlternatives(
                    new Alternative("control"),
                    new Alternative("red"),
                    new Alternative("green"),
                    new Alternative("blue")
                )
                .build();
  2. Participate in that new Experiment by calling participate()

        ParticipatingExperiment participatingExperiment = colorsExperiment.participate();
  3. When the user performs the action measured in the test, convert the experiment

        participatingExperiment.convert();

Contributing

  1. Fork this repo and clone your fork
  2. Make your desired changes
  3. Add tests for your new feature and ensure all tests are passing
  4. Commit and push
  5. Submit a Pull Request through Github's interface and a project maintainer will decide your changes fate.

note: issues can be submitted via github issues

License

Sixpack-Java is released under the BSD 2-Clause License

Comments
  • Changed ActionBarActivity (deprecated) to AppCompatActivity

    Changed ActionBarActivity (deprecated) to AppCompatActivity

    Looks nice project! I'm rooting for you.

    ActionBarActivity is deprecated. https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html

    opened by takahirom 2
  • Add synchronous API

    Add synchronous API

    I'm actually unsure if this replaces or is done in addition to the callbacks api that exists. But it would make working with an Rx API (such as the one proposed in #15) much more simple:

    i.e.

    new RxSixpack(sixpack).experiment("colors", "red", "blue").map(Experiment::participate).subscribe();
    
    opened by sddamico 1
  • [CI] Deploy releases to bintray

    [CI] Deploy releases to bintray

    We have our SeatGeek organization on bintray

    Things we need to get sorted out before we can start releasing:

    • [ ] gpg keys and signing
    • [ ] https://github.com/bintray/gradle-bintray-plugin set up and configured
    opened by sddamico 1
  • Add support for prefetch

    Add support for prefetch

    Really handy for use on mobile is this (undocumented right now): https://github.com/seatgeek/sixpack/blob/master/sixpack/server.py#L132

    Since the selection of the alternative is deterministic based on the client id, we can prefetch the selected alternative on the client so that participation doesn't block the ui, it can be done async in the background after the user starts participating.

    opened by sddamico 0
  • Be explicit about the first alternative being the control

    Be explicit about the first alternative being the control

    Currently, it's ambiguous that the first alternative passed in is the control alternative.

    Also, consider dropping the Alternative wrapper. Type safety is nice but doesn't add a lot of value in this application.

    opened by sddamico 0
  • Validate experiment/alternative names

    Validate experiment/alternative names

    From the clientspec:

    Clients MUST validate the format of experiment and alternative names. Currently, valid experiment/alternative names are ones that match the following regex: ^[a-z0-9][a-z0-9\-_ ]*$. This is enforced in the sixpack server, but duplicating this functionality in the client gives developers immediate feedback when creating tests.

    opened by sddamico 0
  • Need a good README

    Need a good README

    Need a good README with:

    • [x] brief explanation of what Sixpack is + link to main repo
    • [x] installation instructions (gradle/maven)
    • [x] API overview
    • [x] contributing
    • [x] license information
    enhancement 
    opened by sddamico 0
  • Expand logging for different log levels

    Expand logging for different log levels

    Currently, we offer several log levels, but that's only used to decide what level of Retrofit logging is selected. We should expand our logging for other things based on the current LogLevel.

    Example items to log:

    • [x] warning when using default sixpack url
    • [x] creating new experiment
    • [x] starting participation
    • [x] converting
    enhancement 
    opened by sddamico 0
  • Convert without having to call participate

    Convert without having to call participate

    Please support the use case to convert an experiment without a call to participate

    The use case is where I need to record the conversion in a separate system which doesn't know (and doesn't need to know the alternatives) just the experiment name and client_id. The HTTP conversion API method doesn't require the alternatives either.

    opened by cameronbraid 0
  • Sixpack-java Rx bindings

    Sixpack-java Rx bindings

    Nice to have as part of the library, would be great to have Rx bindings for the sixpack-java api.

    One idea is, ParticipatingExperiments can be exposed as Observables and have their values .cached() easily.

    Also, the ability to have convert() be exposed as an Action1 for doOnNext() would be useful as well.

    opened by sddamico 0
Owner
null
****. Use the native and support library variants instead - https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html. An android library that makes it easy to add custom fonts to edittexts and textviews

Add to your project Add this line to your dependencies in build.gradle compile 'in.workarounds.typography:typography:0.0.8' Using the views There are

Workarounds 43 Nov 6, 2021
A gradle plugin for getting java lambda support in java 6, 7 and android

Gradle Retrolambda Plugin This plugin will automatically build your java or android project with retrolambda, giving you lambda goodness on java 6 or

Evan Tatarka 5.3k Jan 5, 2023
I was fed up with writing Java classes to mirror json models. So I wrote this Java app to automate the process.

Json2Java I was fed up with writing Java classes to mirror json models. So I wrote this Java app to automate the process. What this tool can do right

Jon F Hancock 303 Oct 8, 2022
A curated list of standards, tests and benchmarks that can be used for testing and evaluating dev-tools

A curated list of standards, tests and benchmarks that can be used for testing and evaluating dev tools Contribution Add the description of the benchm

null 13 Dec 16, 2022
android-engineer-assignment-2021-miguelaboliveira created by GitHub Classroom

Memory Android Engineer Interview Assignment Hello and welcome to the Memory Android Engineer interview assignment! There can be no demo app that does

Memory 0 Oct 30, 2021
📄The reliable, generic, fast and flexible logging framework for Android

logback-android v2.0.0 Overview logback-android brings the power of logback to Android. This library provides a highly configurable logging framework

Tony Trinh 1.1k Jan 8, 2023
Android framework for node.js applications

Introduction Anode is an embryonic framework for running node.js applications on Android. There are two main parts to this: a port of node.js to the A

Paddy Byers 586 Dec 9, 2022
A RS3 RSPS framework targeted at NXT, the goal is to stay up-to-date with RS3

OpenNXT - RS3 919 A RS3 RSPS framework targeted at NXT, the goal is to stay up-to-date with RS3 Discord We have a Discord server you can join! https:/

Daniël Voort 23 Oct 13, 2022
JVM Bytecode Transformation Framework

unboks - JVM Bytecode Transformation Framework ⚠️ Read the State of the Project section before considering use! ⚠️ This framework exposes a graph-base

Anders Høst 1 May 25, 2022
A simple and scalable Android bot emulation framework, as presented at Black Hat Europe's Arsenal

m3 A simple and scalable Android bot emulation framework. A detailed explanation can be found here. This project was first published at Black Hat Euro

null 22 Aug 20, 2022
♣️ A flexible and powerful command framework with default Guilded API implementations using deck

A simple and versatile command framework made with the primary objective of making Guilded command experience a little more elegant.

Gabriel 2 Dec 15, 2022
Ini adalah Launcher SAMP untuk android, ini hanya untuk mengganti nama dan kemungkinan di update lanjutnya akan mendukung download client.

SAMP-Launcher-Android Ini adalah Launcher SAMP untuk android, ini hanya untuk mengganti nama dan kemungkinan di update lanjutnya akan mendukung downlo

Kiril 3 Nov 3, 2022
Src for muffin client, without hwid

Muffin-SRC-BUILDABLE Src for muffin client. Modifications: Fully removed the hwid system, Changed the main menu shader option to be off by default (it

null 28 Dec 2, 2022
Editframe Kotlin Client library

Editframe Kotlin Client library Installing Add the project to your gradle dependencies.

editframe 2 Apr 7, 2022
ZXing ("Zebra Crossing") barcode scanning library for Java, Android

Project in Maintenance Mode Only The project is in maintenance mode, meaning, changes are driven by contributed patches. Only bug fixes and minor enha

ZXing Project 30.5k Dec 27, 2022
Google core libraries for Java

Guava: Google Core Libraries for Java Guava is a set of core Java libraries from Google that includes new collection types (such as multimap and multi

Google 46.5k Jan 1, 2023
AndroidPermissions 4.2 0.0 Java Android M was added to check Permission. but Permission check processing is so dirty.

Android Permissions Checker Android M was added to check Permission. but Permission check processing is so dirty. This Project is to be simple, Checki

Steve SeongUg Jung 340 Nov 11, 2022
Simple Artificial Neural Network java library

SANN Simple Artificial Neural Network java library WIP Creating neural network Variant 1 //create new net (input, hidden, default len, output) Net net

Korpusov Maxim 14 Oct 11, 2022
Powerful, elegant and flexible test framework for Kotlin with additional assertions, property testing and data driven testing

Kotest is a flexible and comprehensive testing tool for Kotlin with multiplatform support. To learn more about Kotest, visit kotest.io or see our quic

Kotest 3.8k Jan 3, 2023
Integration Testing Kotlin Multiplatform Kata for Kotlin Developers. The main goal is to practice integration testing using Ktor and Ktor Client Mock

This kata is a Kotlin multiplatform version of the kata KataTODOApiClientKotlin of Karumi. We are here to practice integration testing using HTTP stub

Jorge Sánchez Fernández 29 Oct 3, 2022