Translate
domingo, 24 de julio de 2016
Spring Statemachine Framework
Nunca les paso que deben diseñar una maquina de estados, pero utilizar un framework de bpm es muchisimo pero hacerlo a mano es un trabajo muy arduo.
Por eso spring diseño, Spring Statemachine Framework.
La idea es simple, es un framework que permite diseñar maquinas de estados de forma muy fácil. Como cualquier maquina de estados tenemos estados y eventos que permiten cambiar de estado:
static enum States {
STATE1, STATE2
}
static enum Events {
EVENT1, EVENT2
}
Con esto tenemos los estados y los eventos, pero falta algo muy importante, definir los caminos o transiciones para esto utilizamos un objeto de configuración:
@Configuration
@EnableStateMachine
static class Config1 extends EnumStateMachineConfigurerAdapter<States, Events> {
@Override
public void configure(StateMachineStateConfigurer<States, Events> states)
throws Exception {
states
.withStates()
.initial(States.STATE1)
.states(EnumSet.allOf(States.class));
}
@Override
public void configure(StateMachineTransitionConfigurer<States, Events> transitions)
throws Exception {
transitions
.withExternal()
.source(States.STATE1).target(States.STATE2)
.event(Events.EVENT1)
.and()
.withExternal()
.source(States.STATE2).target(States.STATE1)
.event(Events.EVENT2);
}
}
Luego definimos el bean que va ser utilizado en esta maquina de estado:
@WithStateMachine
static class MyBean {
@OnTransition(target = "STATE1")
void toState1() {
}
@OnTransition(target = "STATE2")
void toState2() {
}
}
Finalmente podemos utilizar esta maquina:
static class MyApp {
@Autowired
StateMachine<States, Events> stateMachine;
void doSignals() {
stateMachine.start();
stateMachine.sendEvent(Events.EVENT1);
stateMachine.sendEvent(Events.EVENT2);
}
}
Y listo!
Dejo link: http://projects.spring.io/spring-statemachine/
miércoles, 20 de julio de 2016
Try .net mvc
La gente de codescholl me invito a cursar su nuevo curso gratuito sobre .net mvc. Este curso pertenece a la colección "try" que son muy buenos para tener contacto por primera vez con una tecnología, les dejo el mail que me enviaron:
| ||||||
|
domingo, 17 de julio de 2016
Que es una Sequence en Oracle?
En mysql tenemos los valores autoincrementales, que están muy buenos pero siendo realistas tenemos poco control de la secuencia que llena el valor autoincremental.
En oracle en cambio tenemos objetos secuencia que nos permiten tener más control de los valores autoincrementales. Ojo! la secuencia es un objeto independiente del campo que deba llenar. Es decir podemos tener una secuencia para todos nuestros campos autoincrementales o una secuencia para cada uno de ellos. Como ven, tenemos mucha más libertad.
Como creo una secuencia? Asì:
Aja... claro! Mejor veamos un ejemplo, no?
CREATE SEQUENCE customers_seq
START WITH 1000
INCREMENT BY 1
NOCACHE
NOCYCLE;
Con estas sentencias estamos creando una secuencia que comienza en 1000 y va de 1 en 1.
Ahora bien, como la usamos?
por ejemplo con el metodo nextval podemos acceder al proximo valor.
Select customers_seq.NEXTVAL from dual;
Por lo tanto podemos utilizarla en un insert:
INSERT INTO customers_tab (id, name)
VALUES (customers_seq.NEXTVAL, 'Acme');
También podemos saber el valor actual con CURRVAL
INSERT INTO Line_items_tab (Orderno, Partno, Quantity)
VALUES (Order_seq.CURRVAL, 29374, 1);
Ojo al piojo, se puede usar CURRVAL solo luego de ejecutar NEXTVAL, es decir si no ejecutaste NEXTVAL, CURRVAL va dar error.
Podemos alterar la secuencia, pero nunca reiniciarla. Para reiniciarla tenemos que eliminarla y crearla nuevamente.
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE
CACHE 20;
Dejo link: https://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm
sábado, 16 de julio de 2016
Como programar en C++
Quiero compartir un link, para descargar un muy buen libro sobre c++, sin más:
http://bajalotumismo.blogspot.com.ar/2016/07/como-programar-en-c.html
lunes, 11 de julio de 2016
John Sullivan: ¿Qué es el software libre y porqué es tan importante para la sociedad?
Les dejo un buen vídeo donde pueden ver como funciona y que es el software libre:
domingo, 10 de julio de 2016
Don Electron
Electron permite construir aplicaciones nativas de la misma forma que construimos una web. Utilizando tecnologías javascript, html y css con electrón podemos construir aplicaciones nativas.
Entre sus características podemos nombrar:
Dejo un video:
y un poco de música tipo rock and roll:
Dejo link: http://electron.atom.io/
Entre sus características podemos nombrar:
- Tecnología web: Utiliza HTML, CSS, javascript y tecnologías node.js
- Open Source: Es totalmente libre y esta alojado en github
- Cross Platform: compatible con Linux, Windows y OsX
Dejo un video:
y un poco de música tipo rock and roll:
Dejo link: http://electron.atom.io/
jueves, 7 de julio de 2016
White Paper sobre MySQL Enterprise Edition
No soy de dar publicar publicidad de empresas, pero creo que es interesante publicar información técnica sobre productos por más que sean comerciales.
Me llego este mail y se los comparto:
Me llego este mail y se los comparto:
View this message in a Web browser |
| |||||||||
|
|
lunes, 4 de julio de 2016
Que es Erlang distribution?
El "distribution protocol" es el medio por el cual varios nodos de Erlang se unen para formar un clúster. Cuando se agrupan los nodos de Erlang, cualquier proceso puede enviar mensajes a los procesos en cualquier otro nodo, y generar nuevos procesos en cualquier otro nodo. Esto forma la base para las aplicaciones distribuidas como Mnesia, la aplicación de base de datos que viene con Erlang/OTP, y RabbitMQ.
En este post, se describe cómo ejecutar el protocolo de distribución de Erlang sobre TLS, y cuáles son los problemas que puede o no puede resolver.
Dejo link:
https://www.erlang-solutions.com/blog/erlang-distribution-over-tls.html?utm_source=Gplus&utm_medium=groups&utm_campaign=TLSblog
domingo, 3 de julio de 2016
Microsoft anuncia la disponibilidad de .NET Core 1.0
Microsoft ama a linux y cada vez más me creo este cuento...
Porque Microsoft ha anunciado la disponibilidad de .NET Core 1.0, ASP.NET Core 1.0 y Entity Framework Core 1.0, los cuales están disponibles para Windows, OS X y GNU/Linux a través de la instalación de .NET Core 1.0.
.NET Core 1.0 forma parte del proyecto de Microsoft para ir liberando .NET bajo licencia MIT, ofreciendo un framework Open Source para crear aplicaciones web modernas, librerías y aplicaciones de consola, incluyendo las librerías y herramientas necesarias. Además Microsoft ha liberado extensiones tanto para Visual Studio como Visual Studio Code para poder crear proyectos con .NET Core. Para aquellos que estén interesados en programar con este framework, Microsoft ha publicado también documentación en su sitio web, detallando aspectos como el hecho de que es Open Source y haciendo una breve comparativa con Mono y la rama oficial .NET Framework.
Dejo links:
https://dotnet.github.io/
https://www.microsoft.com/net/core
Porque Microsoft ha anunciado la disponibilidad de .NET Core 1.0, ASP.NET Core 1.0 y Entity Framework Core 1.0, los cuales están disponibles para Windows, OS X y GNU/Linux a través de la instalación de .NET Core 1.0.
.NET Core 1.0 forma parte del proyecto de Microsoft para ir liberando .NET bajo licencia MIT, ofreciendo un framework Open Source para crear aplicaciones web modernas, librerías y aplicaciones de consola, incluyendo las librerías y herramientas necesarias. Además Microsoft ha liberado extensiones tanto para Visual Studio como Visual Studio Code para poder crear proyectos con .NET Core. Para aquellos que estén interesados en programar con este framework, Microsoft ha publicado también documentación en su sitio web, detallando aspectos como el hecho de que es Open Source y haciendo una breve comparativa con Mono y la rama oficial .NET Framework.
Dejo links:
https://dotnet.github.io/
https://www.microsoft.com/net/core
Probando Mint
Como ya había dicho, me baje linux mint 18, y lo probé. Muy bueno!!
Nada más que decir...
Las novedades son muy buenas y todo bajo esa simpleza que lo caracteriza. Cinnamon 3 es muy bueno y estable.
La verdad, muy contento.
Dejo screenshots:
Nada más que decir...
Las novedades son muy buenas y todo bajo esa simpleza que lo caracteriza. Cinnamon 3 es muy bueno y estable.
La verdad, muy contento.
Dejo screenshots:
sábado, 2 de julio de 2016
Introducción al Business Intelligence
Me llego esta mail de Universitat Oberta de Catalunya y es muy interesante:
Hola Emanuel,
Nos ponemos en contacto contigo para informarte de que, atendiendo a la petición que nos habéis hecho muchos de vosotros, hemos dado acceso abierto a los contenidos del MOOC.
Creemos que también pueden interesarte otros contenidos en vídeo de nuestra cuenta de Vimeo, por lo que te invitamos a visitarla.
Por otra parte, nos gustaría recordarte que sigues teniendo a tu disposición los recursos siguientes:
- Notícias y entradas de difusión en Inteligencia de Negocio y Análisis de Datos en nuestro Blog.
- Toda la información sobre el Máster y los programas de la UOC en Business intelligence.
Te agradecemos de nuevo tu participación e interés en nuestro MOOC de Introducción al Business intelligence.
Recibe un cordial saludo.
José Ramón Rodríguez
Director de los programas en Inteligencia de negocio y análisis de datos
Universitat Oberta de Catalunya (UOC)
Universitat Oberta de Catalunya (UOC)
Yo me perdí el curso pero es muy bueno que compartan los vídeos, y por lo que vi son de muy buena calidad. Muy buena iniciativa.
Ya está entre nosotros Linux Mint 18
Si, ya estoy bajando Mint 18, es una nueva versión de una distro genial. Esta versión esta basada en ubuntu 16.04 y tiene el nombre de Sarah. la mayor novedad es cinnamon 3, que les dejo un video:
Linux Mint 18 llega con un nuevo tema llamado Mint-Y, que le da un aspecto muy atractivo.
Dejo link:
https://www.linuxmint.com/
Linux Mint 18 llega con un nuevo tema llamado Mint-Y, que le da un aspecto muy atractivo.
Dejo link:
https://www.linuxmint.com/
miércoles, 29 de junio de 2016
Curso de Angular 2
Code school me envío un correo sobre angular 2, la primera clase es gratis.
Dejo más info:
Dejo más info:
|
Encuesta de Stackoverflow
Stackoverflow realizo una encuesta la cual contestaron 56,033 desarrolladores de 173 países.
Los desarrolladores aman Rust. Incluso los desarrolladores de back-end saben JavaScript. Sólo el 7% de los desarrolladores se identifican como "estrellas de rock". La mayoría de los desarrolladores prefieren los perros a los gatos...
Dejo link: http://stackoverflow.com/research/developer-survey-2016
lunes, 27 de junio de 2016
Interfaces Funcionales en Java
La programación funcional tiene un apogeo desde hace tiempo y todos los lenguajes se ven afectado por este éxito, por supuesto Java no es la excepción.
Las interfaces funcionales no son diferentes de la interfaz común. Ahora con Java 8, podemos tener métodos por defecto en las interfaces con la palabra clave default, por lo tanto puede haber cualquier número de métodos por defecto en una interfaz; sin embargo, si tiene un sólo una método abstracto se puede considerar como una interfaz funcional. Y podemos utilizar la anotación @FunctionalInterface que si bien es opcional, nos viene bien para documentar.
Por ejemplo:
@FunctionalInterface
public interface MyFuncInterface1{
public abstract void functionalMethod1();
}
@FunctionalInterface
public interface MyFuncInterface2{
public abstract void functionalMethod2();
public default boolean isPresent(){
return true;
}
}
Las interfaces funcionales son interfaces con sólo un método abstracto, se deduce inmediatamente que el énfasis se encuentra en lo que hace, es decir es una interfaz que encapsula un comportamiento. Un ejemplo es Runnable :
class RunnableImpl implements Runnable{
public void run (){
//do something in a new thread
}
}
Ahora podemos pasar una instancia de esta clase a un hilo, es más podemos utilizar una clase abstracta:
new Thread(new Runnable(){
public void run(){
//do something in this thread
}
},"NEW-THREAD").start();
Como se puede ver hemos escrito mucho código, solo para pasar una función por parámetro. Por que no usar una expresión Lambda:
new Thread(()->{
//do something in this thread
}, "NEW-THREAD").start();
Que paso? La interfaz se elimino? En efecto, pudimos pasar sólo la función, el nuevo hilo correría el bloque de código (dentro del método run)
Java 8 proporciona un conjunto completo de interfaces funcionales dentro del paquete java.util.function. Estas interfaces funcionales se adaptan a la mayoría de los requisitos generales de desarrollo diario.
Veamos algún ejemplo:
IntStream intStream = IntStream.of(1,2,3,4,5);
intStream.filter(new IntPredicate() {
@Override
public boolean test(int value) {
if(value%2 != 0)
return false;
return true;
}
});
Podemos cambiarlo por:
IntStream intStream = IntStream.of(1,2,3,4,5);
intStream.filter(val -> {
if (val % 2 != 0)
return false;
return true;
});
Interfaces funcionales son un medio de hacer funciones de primer orden, llevando el mundo funcional al orientado a objetos.
Suscribirse a:
Entradas (Atom)