Ponencia ofrecida por Oier Blasco en DroidconMAD2013. Sinopsis: La programación reactiva es un paradigma de programación que se centra en los flujos de datos. La presentación trata de cómo podemos usar la programación reactiva para simplificar la programación de tareas asíncronas en android (principalmente las aplicaciones que consumen datos de servicios remotos). Para ello comenzaremos la presentación con una introducción sobre los motivos y los fundamentos de la programación reactiva y como los implementa RxJava (El port open-source hecho por Netflix de la Rx extensions de microsoft). El la segunda para parte de la presentación veremos algunos ejemplos concreto de cómo podemos aplicar estos principios a problemas cotidianos en android.
Esta presentación nos muestra qué es la programación reactiva, en qué consiste, qué nos permite hacer y por qué está tan de moda. Además, podemos ver el uso concreto de esta programación utilizando RxJava.
Autor: Juan Pablo González de Gracia.
Desarrollo de sistemas tolerantes a fallasSoftware Guru
¿Cuánto cuesta a una organización cuando un sistema falla? ¿Cuál es el impacto de que todo un sistema esté fuera de operación por una falla inesperada? ¿Hay manera de crear sistemas que continúen funcionando aún cuando, por ejemplo, un proceso o sub-sistema muere o no está disponible? ¿Crees que todo esto se puede arreglar con un bloque “try-catch” bien colocado?
En esta sesión platicaré sobre la importancia de crear sistemas robustos y tolerantes a fallas, explicando las propiedades básicas que un sistema debe cumplir para continuar funcionando aún en la presencia de errores inesperados. Presentaré también varios patrones de diseño con el código correspondiente para que comiences a introducir robustez y tolerancia a fallas a los sistemas con que trabajas.
Semblanza del conferencista:
Agustín Ramos es un profesional de desarrollo de software con más de 12 años de experiencia en la industria. Impulsor de la metáfora del artesano como un modelo de cómo debe ser nuestra profesión. Gusta de refactorizar diseños, código, ideas y equipos de desarrollo por igual. Actualmente su principal interés se enfoca en resolver los retos que presenta el desarrollo de sistemas altamente distribuidos y escalables.
Presentación sobre Reactive Programming en la JVM para el meetup JVM_MX.
Se mostraron conceptos sobre Reactive Programming y Functional Reactive Programming con la biblioteca RxJava de Netflix.
Esta presentación nos muestra qué es la programación reactiva, en qué consiste, qué nos permite hacer y por qué está tan de moda. Además, podemos ver el uso concreto de esta programación utilizando RxJava.
Autor: Juan Pablo González de Gracia.
Desarrollo de sistemas tolerantes a fallasSoftware Guru
¿Cuánto cuesta a una organización cuando un sistema falla? ¿Cuál es el impacto de que todo un sistema esté fuera de operación por una falla inesperada? ¿Hay manera de crear sistemas que continúen funcionando aún cuando, por ejemplo, un proceso o sub-sistema muere o no está disponible? ¿Crees que todo esto se puede arreglar con un bloque “try-catch” bien colocado?
En esta sesión platicaré sobre la importancia de crear sistemas robustos y tolerantes a fallas, explicando las propiedades básicas que un sistema debe cumplir para continuar funcionando aún en la presencia de errores inesperados. Presentaré también varios patrones de diseño con el código correspondiente para que comiences a introducir robustez y tolerancia a fallas a los sistemas con que trabajas.
Semblanza del conferencista:
Agustín Ramos es un profesional de desarrollo de software con más de 12 años de experiencia en la industria. Impulsor de la metáfora del artesano como un modelo de cómo debe ser nuestra profesión. Gusta de refactorizar diseños, código, ideas y equipos de desarrollo por igual. Actualmente su principal interés se enfoca en resolver los retos que presenta el desarrollo de sistemas altamente distribuidos y escalables.
Presentación sobre Reactive Programming en la JVM para el meetup JVM_MX.
Se mostraron conceptos sobre Reactive Programming y Functional Reactive Programming con la biblioteca RxJava de Netflix.
Visualizando la actividad de la instancia Deadlocks y errores de SQL utilizando Extended Events SQL Performance Dashboard Missing Indexes desde el query plan Performance Point – Sistema de Captura , Análisis y Alertas
Metodologia para resolver problemas con Programacion orientada a ObjetosWilliam Diaz S
Propuesta metodología para enseñar a programar
Enfatiza Métodos /técnicas
Como generar algoritmos
Método de los refinamientos sucesivos de Wirth Nickaus
Clases Objetos arrays
Excelente guía para Profesores para que enseñen realmente a programar y a solucionar problemas
En muchas ocasiones los agentes realizan, o tratan de realizar, funcionalidades complejas que pueden llegar a implicar tareas simultáneas forzando a implementar agentes multihilo, lo que puede causar problemas. JADE proporciona un sistema de comportamientos (behaviours) que ayudan al usuario a construir sistemas multiagente y reutilizar código.
Todo el mundo que trabaja con base de datos siempre se ha preguntado alguna vez qué son los planes de ejecución y como se leen. Saber leer un plan de ejecución nos va a dar información valiosísima de cara a mejorar el rendimiento de una consulta. En esta sesión vamos a centrarnos en aprender a leer T-SQL para interpretar lo que está haciendo SQL Server para devolvernos la información.
Visualizando la actividad de la instancia Deadlocks y errores de SQL utilizando Extended Events SQL Performance Dashboard Missing Indexes desde el query plan Performance Point – Sistema de Captura , Análisis y Alertas
Metodologia para resolver problemas con Programacion orientada a ObjetosWilliam Diaz S
Propuesta metodología para enseñar a programar
Enfatiza Métodos /técnicas
Como generar algoritmos
Método de los refinamientos sucesivos de Wirth Nickaus
Clases Objetos arrays
Excelente guía para Profesores para que enseñen realmente a programar y a solucionar problemas
En muchas ocasiones los agentes realizan, o tratan de realizar, funcionalidades complejas que pueden llegar a implicar tareas simultáneas forzando a implementar agentes multihilo, lo que puede causar problemas. JADE proporciona un sistema de comportamientos (behaviours) que ayudan al usuario a construir sistemas multiagente y reutilizar código.
Todo el mundo que trabaja con base de datos siempre se ha preguntado alguna vez qué son los planes de ejecución y como se leen. Saber leer un plan de ejecución nos va a dar información valiosísima de cara a mejorar el rendimiento de una consulta. En esta sesión vamos a centrarnos en aprender a leer T-SQL para interpretar lo que está haciendo SQL Server para devolvernos la información.
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAVíctor Bolinches
02/03/2017
Charla Universidad Politécnica de Valencia - https://www.upv.es/
Asingnatura : Auditoria, Calidad y Gestion de Sistemas de Información (ACG)
Máster Universitario en Ingeniería Informática - https://www.upv.es/titulaciones/MUIINF/
Concurrency with Promise Style – Rayco ArañaDroidcon Spain
Descripción: Los móviles de hoy en día tienen muchos núcleos, ¿usan tus apps todos ellos? En esta charla veremos como podemos utilizar el patrón Promise y la librería jDeferred para sacar el mayor partido a la CPU del teléfono sin morir usando herramientas de bajo nivel.
Ponencia ofrecida por inMediaStudio: José Luis Navarro y Moisés García en Droidcon Spain 2013.
Sinopsis: El uso de dispositivos Android va más allá de lo que se considera tradicional. Pueden formar parte de sistemas mayores, haciendo uso de su tecnología como un control remoto adaptable, como una cámara para detectar objetos mediante realidad aumentada o como cliente portátil de un sistema cliente-servidor específico.
Ponencia de Juan Alonso Moreno de Tecnilogica ofrecida en Droidcon Spain. Sinopsis: En un mercado donde aún se tiene una mentalidad “iOS first”, es posible evitar que las apps de Android queden relegadas a meras adaptaciones de los originales. En esta charla expondremos cómo conseguirlo, potenciando las características más sobresalientes de la plataforma Android y esquivando las trampas mas habituales. Utilizaremos como ejemplo algunas aplicaciones que estamos desarrollando.
Ponencia sobre los coches como nueva plataforma para el desarrollo de apps ofrecida por Juan Antonio Corrales de Applicantes en Droidcon Spain. La necesidad crear un estándar único entre los fabricantes para que los desarrolladores encuentren este nuevo soporte ‘apetecible’, también se trata en esta conferencia.
Accesibilidad en apps móviles - CodefactoryDroidcon Spain
Ponencia ofrecida por Ferran Gállego de Codefactory en Droidcon Spain. Sinopsis: Las tecnologías móviles han experimentado grandes avances durante los últimos años en el campo de la accesibilidad. Los fabricantes de sistemas operativos dedican enormes esfuerzos a garantizar que sus plataformas son accesibles y, a su vez, ofrecen las herramientas necesarias para que terceros se puedan beneficiar de la accesibilidad nativa en el desarrollo de sus aplicaciones.
Visión Artificial, Accesibilidad y AndroidDroidcon Spain
Ponencia ofrecida por Juan Manuel Sáez Martínez, profesor de la Universidad de Alicante. Sinopsis: En esta charla descubriremos una herramienta de desarrollo en android, el entorno Qt. Una biblioteca multiplataforma de código abierto para desarrollo GUI, bajo licencia LGPL. Además del FrameWork, Qt proporciona un completo entorno de desarrollo, denominado QtCreator. Junto a ello la visión estéreo y android permitirán dar forma a software de detección de obstáculos aéreos.
Conferencia ofrecida por Ander Martínez de Mundo Glass en Droidcon Spain. Droidcon Spain fue el primer evento donde se analizó el GDK, el Glass Development Kit. La versión preliminar del GDK que permitirá a los desarrolladores crear aplicaciones específicas para Google Glass. Hace solo unas semanas que Google liberó esta primera versión del kit de desarrollo de software para hacer las delicias de todos los developers que lo estaban esperando con ansias.
Ponencia ofrecida por Jesús Arias de Pay Pal en Droidcon Spain. Sinopsis: Presente y futuro de los pagos móviles. Descripción de las APIs de PayPal y cómo interaccionan para permitir el pago por móvil, de eso versará la conferencia de PayPal.
Ponencia ofrecida por LSI en Droidcon Spain. Sinopsis: En esta charla, aprenderemos qué problemáticas afrontamos hoy en día para crear una app y cómo solventarlas de la forma más sencilla. Veremos también los diferentes tipos de apps existentes, a nivel funcional y de estructura. Finalmente, veremos desarrollar una app para Android de tipo empresarial con estructura completa usando una herramienta que me permita solventar de forma ágil todas las especificaciones técnicas y estructurales necesarias.
Metodología Scrum para el desarrollo de appsDroidcon Spain
Ponencia Upplication en Droidcon Spain. Sinopsis: Si quieres ser ágil y rápido en el desarrollo de tu app la metodología scrum es necesaria en cualquier equipo de desarrollo. Te mostraremos las mejores herramientas, las técnicas scrum a implementar en el día a día y verás los beneficios de usar un plan de trabajo medido y escalable. Iremos mostrando todo en base a la experiencia real vivida al aplicar la metodología srcum para el desarrollo de Upplication.
Introducción Tu Go and Open Tok - Telefónica i+d Droidcon Spain
Analizaremos brevemente el crecimiento del acceso móvil a Internet y la relevancia que Android tiene actualmente para los servicios que lanza Telefónica, para dar paso después a una charla técnica sobre dos de nuestros desarrollos. TU Go convierte tu número de teléfono en una aplicación, permitiéndote realizar y recibir llamadas desde donde mejor te convenga en cada momento; analizaremos detalles de la implementación en Android. OpenTok es una plataforma que facilita la integración de WebRTC en tu sitio web y tus aplicaciones móviles; entraremos en más detalle con la implementación para Android.
Analizaremos brevemente el crecimiento del acceso móvil a Internet y la relevancia que Android tiene actualmente para los servicios que lanza Telefónica, para dar paso después a una charla técnica sobre dos de nuestros desarrollos. TU Go convierte tu número de teléfono en una aplicación, permitiéndote realizar y recibir llamadas desde donde mejor te convenga en cada momento; analizaremos detalles de la implementación en Android. OpenTok es una plataforma que facilita la integración de WebRTC en tu sitio web y tus aplicaciones móviles; entraremos en más detalle con la implementación para Android.
Analizaremos brevemente el crecimiento del acceso móvil a Internet y la relevancia que Android tiene actualmente para los servicios que lanza Telefónica, para dar paso después a una charla técnica sobre dos de nuestros desarrollos. TU Go convierte tu número de teléfono en una aplicación, permitiéndote realizar y recibir llamadas desde donde mejor te convenga en cada momento; analizaremos detalles de la implementación en Android. OpenTok es una plataforma que facilita la integración de WebRTC en tu sitio web y tus aplicaciones móviles; entraremos en más detalle con la implementación para Android.
Ponencia ofrecida por Xavi Rigau en DroidconMAD 2013.
Sinopsis: Practical session on how to write better/faster UI Android automated tests using Google’s Espresso testing API. We will see:
– How to set it up in a project using Gradle.
– How to write tests in a real world example.
– Extending its API with custom matchers.
– A small dive into its internals.
Ponencia ofrecida por Santiago Martínez, GPMESS.
Sinopsis: Cada día la información está más geolocalizada y las aplicaciones móviles se están adaptando a ello. Incluir geolocalización en Android es sencillo pero puede complicarse cuando necesitas crear una aplicación que se integre completamente con ella. Para solventar esto, recorreremos las diferentes opciones que existen en Android para incluir Geolocalización, y las técnicas que existen dentro de ella en función de las necesidades de la aplicación.
Ponencia de Jorge del Casar en DroidconMAD2013.
Sinopsis: Cordova es un framework de desarrollo móvil de código abierto que permite usar tecnologías web standard como HTML5, CSS3 y Javascript para el desarrollo multiplataforma, evitando desarrollar en el lenguaje nativo de cada plataforma. La nueva Command Line Interface (CLI) desarrollada en Node.js te permite automatizar la creación de proyectos, adición de plataformas y plugins así como la construir la app y probarla en simuladores y dispositivos reales.
Ponencia ofrecida por Loïc Martínez Normand en DroidconMAD2013.
Sinopsis: Esta conferencia se centra en la futura norma EN 301 549 de requisitos de accesibilidad que tendrán que aplicar las administraciones públicas al comprar productos y servicios TIC (incluyendo apps móviles). Presentación de la norma y su significado e identificación de requisitos que tendrían que aplicar para cumplir con esta normativa.
Ponencia ofrecida por Alberto Delgado y Diego Hernández en DroidconMAD2013.
Sinopsis: #ASPACEnet es un proyecto que nace de la colaboración de Fundación Vodafone España con la Confederación ASPACE. El objetivo es mejorar la autonomía y la calidad de vida de las personas con parálisis cerebral a través de la tecnología móvil. Para ello se está desarrollando un subsistema en Android para hacer accesible el uso de aplicaciones del sistema operativo relacionadas con la comunicación, como WhatsApp, Facebook, Twitter, Message+, Skype o SMS. Para garantizar esta accesibilidad es necesario conseguir una interfaz completamente adaptada a diferentes necesidades, permitiendo al propio usuario o a su acompañante realizar esta adaptación mediante herramientas sencillas.
Ponencia ofrecida por Alberto Delgado y Diego Hernández en DroidconMAD 2013.
#ASPACEnet es un proyecto que nace de la colaboración de Fundación Vodafone España con la Confederación ASPACE. El objetivo es mejorar la autonomía y la calidad de vida de las personas con parálisis cerebral a través de la tecnología móvil. Para ello se está desarrollando un subsistema en Android para hacer accesible el uso de aplicaciones del sistema operativo relacionadas con la comunicación, como WhatsApp, Facebook, Twitter, Message+, Skype o SMS. Para garantizar esta accesibilidad es necesario conseguir una interfaz completamente adaptada a diferentes necesidades, permitiendo al propio usuario o a su acompañante realizar esta adaptación mediante herramientas sencillas.
Ponencia ofrecida por Antonio Leiva en DroidconMAD 2013.
Sinopsis: En la actualidad, debido a la agresiva competencia en el mundo de las aplicaciones Android, diseñar una interfaz intuitiva y visualmente atractiva para los usuarios no es una opción si queremos tener alguna oportunidad de éxito. En esta charla repasaremos cuáles son los patrones de diseño de interfaces más utilizados y trataremos algunos otros emergentes, así como las pautas para implementarlos de la forma más sencilla.
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Telefónica
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0xWord escrito por Ibón Reinoso ( https://mypublicinbox.com/IBhone ) con Prólogo de Chema Alonso ( https://mypublicinbox.com/ChemaAlonso ). Puedes comprarlo aquí: https://0xword.com/es/libros/233-big-data-tecnologias-para-arquitecturas-data-centric.html
Inteligencia Artificial y Ciberseguridad.pdfEmilio Casbas
Recopilación de los puntos más interesantes de diversas presentaciones, desde los visionarios conceptos de Alan Turing, pasando por la paradoja de Hans Moravec y la descripcion de Singularidad de Max Tegmark, hasta los innovadores avances de ChatGPT, y de cómo la IA está transformando la seguridad digital y protegiendo nuestras vidas.
3Redu: Responsabilidad, Resiliencia y Respetocdraco
¡Hola! Somos 3Redu, conformados por Juan Camilo y Cristian. Entendemos las dificultades que enfrentan muchos estudiantes al tratar de comprender conceptos matemáticos. Nuestro objetivo es brindar una solución inclusiva y accesible para todos.
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informáticavazquezgarciajesusma
En este proyecto de investigación nos adentraremos en el fascinante mundo de la intersección entre el arte y los medios de comunicación en el campo de la informática.
La rápida evolución de la tecnología ha llevado a una fusión cada vez más estrecha entre el arte y los medios digitales, generando nuevas formas de expresión y comunicación.
Continuando con el desarrollo de nuestro proyecto haremos uso del método inductivo porque organizamos nuestra investigación a la particular a lo general. El diseño metodológico del trabajo es no experimental y transversal ya que no existe manipulación deliberada de las variables ni de la situación, si no que se observa los fundamental y como se dan en su contestó natural para después analizarlos.
El diseño es transversal porque los datos se recolectan en un solo momento y su propósito es describir variables y analizar su interrelación, solo se desea saber la incidencia y el valor de uno o más variables, el diseño será descriptivo porque se requiere establecer relación entre dos o más de estás.
Mediante una encuesta recopilamos la información de este proyecto los alumnos tengan conocimiento de la evolución del arte y los medios de comunicación en la información y su importancia para la institución.
Actualmente, y debido al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos están en formato digital, siendo este un componente electrónico, por tanto se ha desarrollado y se ofrece un amplio rango de soluciones al problema del almacenamiento de datos.
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informáticavazquezgarciajesusma
En este proyecto de investigación nos adentraremos en el fascinante mundo de la intersección entre el arte y los medios de comunicación en el campo de la informática.
La rápida evolución de la tecnología ha llevado a una fusión cada vez más estrecha entre el arte y los medios digitales, generando nuevas formas de expresión y comunicación.
Continuando con el desarrollo de nuestro proyecto haremos uso del método inductivo porque organizamos nuestra investigación a la particular a lo general. El diseño metodológico del trabajo es no experimental y transversal ya que no existe manipulación deliberada de las variables ni de la situación, si no que se observa los fundamental y como se dan en su contestó natural para después analizarlos.
El diseño es transversal porque los datos se recolectan en un solo momento y su propósito es describir variables y analizar su interrelación, solo se desea saber la incidencia y el valor de uno o más variables, el diseño será descriptivo porque se requiere establecer relación entre dos o más de estás.
Mediante una encuesta recopilamos la información de este proyecto los alumnos tengan conocimiento de la evolución del arte y los medios de comunicación en la información y su importancia para la institución.
Es un diagrama para La asistencia técnica o apoyo técnico es brindada por las compañías para que sus clientes puedan hacer uso de sus productos o servicios de la manera en que fueron puestos a la venta.
4. Intent Service
•
No especifica como notificar a los clientes.!
•
Ningún controlo sobre la concurrencia.!
•
No especifican método de gestión de errores.
5. AsyncTask
•
Implementación cambia dependiendo del la version de android.!
•
En la version actual se ejecutan en serie.!
•
Suelen ser fuente de context leak.!
•
No especifican método de gestión de errores/excepciones.
11. RxJava
•
Una librería para componer programas asíncronos y
basados en evento mediante el uso de secuencias
observables.!
•
Open source.!
•
Creada por Netflix.!
•
Un port de “Reactive extension” creadas por Microsoft.!
•
Observable / Observer como elementos basicos.
12. Observable
•
Una secuencia de valores , finita o infinita.!
•
Permite la subscripción de observer mediante el método
subscribe.!
•
Lazy evaluation.!
13. Observer
•
Extension del patron observer de GoF.!
•
Se subscribe a objectos que implemente el interfaz
Observable y reacciona a lo items que este emita.!
•
El observer “espera” de manera no bloquean los valores
emitidos por el Observable.!
!
14. Observer
Observer<String>
stringObserver = new Observer<String> {
!
public void onNext(String value) {
System.out.println(“ NextValue : ” + value);
}
public void onCompleted() {
System.out.println(“Done!”);
}
public void onError(Throwable t) {
System.out.println(“ERROR!!!!!”);
}
}
15. Observable
Observable.create( new Observable.OnSubscribeFunc<String>() {
!
public Subscription onSubscribe(Observer<? super String> observer) {
observer.onNext("pedro@domain.com");
observer.onNext("maria@domain.com");
observer.onNext("juan@domain.com");
observer.onNext("isa@domain.com");
!
observer.onCompleted();
!
return Subscriptions.empty();
}
!
});
17. Composición
•
Los Observables pueden modificados mediante operadores.!
•
Estos operadores permiten filtrar , combinar y transformar las
secuencias representadas por los Observables.!
•
Los operadores retornan otros observables con lo cual se pueden
concatenar para producir la secuencia de datos deseada.!
•
RxJava viene con más de 50 operadores.!
•
Es posible crear mas operadores para ajustarlos a nuestras necesidades.!
•
Los “Marble diagrams” se usan en la documentación de RxJava para
explicar el funcionamiento de los operadores de una forma gráfica. !
18. Observer de ejemplo
private static Observer<Integer> createIntegerObserver(){
return new Observer<Integer>() {
!
public void onCompleted() {
System.out.println("Sequence complete");
}
!
public void onError(Throwable throwable) {
String msg = throwable.getMessage();
System.out.println("Error: “+ msg);
}
!
public void onNext(Integer i) {
System.out.println(i)
}
};
}
19. Map
Transforma la secuencia mediante la función
Integer[] values = new Integer[]{1, 2, 3, 4, 5};
Observable<Integer> numbers = Observable.from(values);
!
numbers.map(new Func1<Integer, Integer>() {
public Integer call(Integer i) {
return i * i;
}
}).subscribe(observer);
Output:
1!
4!
9!
16!
25!
21. Reduce
Aplica una función a cada item devolviendo únicamente el acumulado
Integer[] values = new Integer[]{1, 2, 3, 4, 5};
Observable<Integer> numbers = Observable.from(values);
Observer<Integer> observer = createIntegerObserver();
!
numbers.reduce(new Func2<Integer, Integer, Integer>() {
public Integer call(Integer a , Integer b) {
return a + b;
}
}).subscribe(observer);
Output:
15!
Sequence
complete
22. Filter
Filtra la secuencia en base a la función suministrada
Integer[] values = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
Observable<Integer> numbers = Observable.from(values);
Observer<Integer> observer = createIntegerObserver();
!
numbers.filter(new Func1<Integer, Boolean>() {
public Boolean call(Integer i) {
return (i % 2 == 0);
}
}).subscribe(observer);
Output:
2!
4!
6!
8!
Sequence complete
23. SkipWhile
No emite los valores hasta que una condición se cumple
Integer[] values = new Integer[]{1, 2, 3, 4, 5, 4, 3, 2, 1};
Observable<Integer> numbers = Observable.from(values);
!
Observer<Integer> observer = createIntegerObserver();
numbers.skipWhile(new Func1<Integer, Boolean>() {
public Boolean call(Integer i) {
return (i <4);
}
}).subscribe(observer);
Output:
4!
5!
4!
3!
2!
1!
Sequence complete
24. Take
Emite solo los N elementos de la lista
Integer[] values = new Integer[]{1, 2, 3, 4, 5, 4, 3,
2, 1};
Observable<Integer> numbers =
Observable.from(values);
!
Observer<Integer> observer = createIntegerObserver();
numbers.take(2).subscribe(observer);
Output:
1!
2!
Sequence complete
25. Distinct
Elimina los duplicados de la secuencia
Integer[] values = new Integer[]{1, 2, 1, 2, 3, 3, 4, 1, 2};
Observable<Integer> numbers = Observable.from(values);
Observer<Integer> observer =createIntegerObserver();
!
numbers.distinct().subscribe(observer);
Output:
1!
2!
3!
4!
Sequence complete
29. Schedulers
•
Los observables son mono hilo (single threaded) por defecto.!
•
Los scheduler se usan para introducir la concurrencia permitiendo ejecutar
partes de nuestro cadena de observables concurrentemente.!
•
Hay dos aspectos de nuestros Observables de los que queremos poder
controlar la concurrencia:!
•
•
•
En la invocación de la subscripción. Para ello usaremos el método
Observable.observeOn(Scheduler s).!
En las notificaciones al Observer. Para ello usaremos el método
Observable.notifyOn(Scheduler s).!
Hay varia implementaciones de los schedulers. Ex:
CurrentThreadScheduler, ExecutorScheduler, NewThreadScheduler, …
30. Schedulers - Ejemplo
public class WeatherAPI
!
public static Observable<WeatherData> getWeatherFromCities(String ... cities){
return Observable.from(cities).map(new Func1<String,WeatherData>() {
public WeatherData call(String s) {
// Call to remote api
return RemoteService.getWeatherData(s);
}
}).subscribeOn(Schedulers.threadPoolForIO());
}
}
31. Schedulers - Ejemplo
String [] cities= { "Madrid","Barcelona","Bilbao"} ;
WeatherAPI.getWeatherFromCities(cities)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<WeatherData>() {
// Safe to call UI code from here
public void onCompleted() { … }
public void onError(Throwable throwable) { … }
public void onNext(String s) {
}});
… }
32. Pros
•
Método simple y uniforme de tratar los eventos y los
errores (onNext, onError,onCompleted).!
•
Podemos crea APIS que mantengan el control sobre la
concurrencia .!
•
Facilmente Testeable.!
•
Reusable permite que el cliente extienda/adapte la
secuencia usando los operadores.!