Functional Programmingis a model of programming that transform and compose stream of immutable sequences by applying map, filter and reduce. Events are immutable because you can't change history.Reactive Programmingis a model of programming focuses on data flow and change propagation.ReactiveXis an API that focuses on asynchronous composition and manipulation of observable streams of data or events by using a combination of the Observer pattern, Iterator pattern, and features of Functional Programming.RxJavais the open-source implementation ofReactiveXin Java.RxJavais a Java VM implementation ofReactiveX(Reactive Extensions): a library for composing asynchronous and event-based programs by using observable sequences.RxAndroidis a lightweight extension to RxJava that providers a Scheduler for Android’s Main Thread, as well as the ability to create a Scheduler that runs on any given Android Handler class.- The two main classes are
ObservableandSubscriber. - `O
| import android.annotation.TargetApi; | |
| import android.content.Context; | |
| import android.graphics.Rect; | |
| import android.os.Build; | |
| import android.util.AttributeSet; | |
| import android.view.View; | |
| import android.widget.AutoCompleteTextView; | |
| /** | |
| * Created by PasiMatalamaki on 7.9.2015. |
| import android.app.Activity; | |
| import android.content.Context; | |
| import android.content.Intent; | |
| import android.content.pm.ResolveInfo; | |
| import android.content.res.AssetFileDescriptor; | |
| import android.database.Cursor; | |
| import android.graphics.Bitmap; | |
| import android.graphics.BitmapFactory; | |
| import android.graphics.Matrix; | |
| import android.media.ExifInterface; |
| package com.pkmmte.widget; | |
| import android.annotation.TargetApi; | |
| import android.content.Context; | |
| import android.os.Build; | |
| import android.util.AttributeSet; | |
| import android.view.WindowInsets; | |
| import android.widget.FrameLayout; | |
| /** |
| <?xml version="1.0" encoding="utf-8"?> | |
| <resources> | |
| <!-- google's material design colours from | |
| http://www.google.com/design/spec/style/color.html#color-ui-color-palette --> | |
| <!--reds--> | |
| <color name="md_red_50">#FFEBEE</color> | |
| <color name="md_red_100">#FFCDD2</color> | |
| <color name="md_red_200">#EF9A9A</color> |
State machines are everywhere in interactive systems, but they're rarely defined clearly and explicitly. Given some big blob of code including implicit state machines, which transitions are possible and under what conditions? What effects take place on what transitions?
There are existing design patterns for state machines, but all the patterns I've seen complect side effects with the structure of the state machine itself. Instances of these patterns are difficult to test without mocking, and they end up with more dependencies. Worse, the classic patterns compose poorly: hierarchical state machines are typically not straightforward extensions. The functional programming world has solutions, but they don't transpose neatly enough to be broadly usable in mainstream languages.
Here I present a composable pattern for pure state machiness with effects,
The tutorial Use OpenCL in Android camera preview based CV application show us how we can use the Transparent API to dramatically increase the performance of some expensive operations.
The first step in order to be able to execute the tutorial example is to re-compile opencv with the correct flags:
# Export your NDK, it will be looked for OpenCV to compile your project. In my case
export ANDROID_NDK=~/graffter/libs/android-ndk-r10d/
# Download the necessary code| class FooActivity extends MviActivity<...> { | |
| @Inject FooPresenter | |
| public void onCreate(Bundle bundle){ | |
| super.onCreate(bundle); | |
| FooComponent component = DaggerFooComponent.builder() | |
| .fooModule(new FooModule(bundle)) | |
| .build(); | |
| component.inject(this); |
| package be.brol | |
| import android.os.Binder | |
| import android.os.Bundle | |
| import android.support.v4.app.BundleCompat | |
| import android.support.v4.app.Fragment | |
| /** | |
| * Eases the Fragment.newInstance ceremony by marking the fragment's args with this delegate | |
| * Just write the property in newInstance and read it like any other property after the fragment has been created |