Code Monkey home page Code Monkey logo

littlelight's Introduction

LittleLight

The idea for Little Light came about in 2015 when I was throwing hours at Bungie's Destiny while I waited for some personal matters to be resolved. At that moment there was no easy way to transfer items from character to character. One had to change characters, travel to the tower, and return to the character where you wanted the item. I figured there had to be a better way. I had done Android dev work before and was still learning some things, so I decided to dig around and see if there was anything to be done about this missing piece. I found Bungie's API and the rest... well it's in this repo.

Architecture and Design

Little Light's current state is influenced by a few architectural and design practices. Namely Domain Driven Design, Clean Architecture, Ports and Adapters, and Model-View-Presenter. I found all these to be compatible, and they became great tools to create a coherent and flexible application.

Ports and Adapters

This approach allowed me to separate all the code that would be only specific to the Android application while leaving the core functionality to be reused if there ever was the possibility/opportunity to create another adapter ie. iOS or Desktop app. Actually iOS adpater was my intent when I learned about Intel's Multi-OS Engine, though I never realized that idea.

MVP

If you talk to any Android developer you have to mention MVP. In my effort to understand Model-View-Presenter I dug through a few different resources:

  • Potel, Mike. "MVP: Model-View-Presenter the Taligent programming model for C++ and Java." Taligent Inc (1996): 20.
  • Bower, Andy, and Blair McGlashan. "Twisting the triad." Tutorial Paper for European Smalltalk User Group (ESUP) (2000).
  • Greer, Derek. "Interactive application architecture patterns." Aspiringcraftsman. com (2007).

To me, the moral of the story is that no one has the clear cut notion of MVP, because there isn't one. As long as you're separating your UI code from your Domain logic I think you'll be alright.

Popular libraries

In this repo you'll find some popular libraries like: Retrofit 2, Picasso, Dagger, rxJava 2, and gson.

rxJava

On an earlier iteration of LittleLight I tried to implement something similar to Fernando Cejas' clean arch example in which you see reactive/observable pattern from the Presenter all the way to the Repository. After spending a considerable amount of time going through the Rx dcoumentation for map, flatMap, zip, backpressure, etc (which might be the best docs I've ever used), and even finding and reporting a bug about replay, I realized that I was fighting the language and I was using rx just because it was popular. I now only use rx for propagating domain events to the UI, which I think is a perfect fit. Nonetheless, rx is a great library and was a great learning experience. The reactive pattern is being adopted in many places and I'd recommend anyone to take a look at it.

Dagger

At the time I started looking to introduce Dagger I was also learning about the Spring framework for other projects. Perhaps looking at both is what allowed me to wrap my head around Dependency Injection and how to put it to use. You'll see that my use of Dagger is a little more explicit than most examples, I feel this keeps the magic at bay.

Google Play Store report and listing

As these images suggest, the app had rapid adoption and subsequent rapid decline. The folks over at r/DestinyTheGame were the reason the app became popular in a short amount of time. Eventually I had less and less time to keep the app up to date or even play the game at all. The app became stale as Bungie added new content to the game and other apps became more popular and useful (Ishtar Commander is probably my favorite), alas here is a graphic depiction of Little Light's up and down journey.

Report Listing

littlelight's People

Contributors

jam01 avatar

Watchers

John Silva avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.