Translate

domingo, 3 de enero de 2016

GOA, a Go-based HTTP Microservice Framework


El lenguje de google no se toma respiro y sigue creciendo. Ahora tengo el agrado de presentar a GOA, que es un framework hecho en Go y que permite definir servicios a través de un DSL y luego se genera el código y la documentación.

Veamos un ejemplo:

package design

import (
        . "github.com/raphael/goa/design" // "dot" imports make the DSL easier to read.
        . "github.com/raphael/goa/design/dsl"
)

var _ = API("winecellar", func() { // The API function defines an API given its name.
        Description("The winecellar service API")
        BasePath("/cellar")        // Base path or prefix to all requests.
                                   // Can be overridden in action definitions using an
                                   // absolute path starting with //.
        Host("cellar.goa.design")  // Default API host used by clients and Swagger.
        Scheme("http")             // Supported API URL scheme used by clients and Swagger.
        Scheme("https")            // Scheme("http", "https") works too
})

var _ = Resource("Bottle", func() { // Define the Bottle resource
        DefaultMedia(BottleMedia)   // Default media type used to render the bottle resources
        BasePath("/bottles")        // Gets appended to the API base path

        Action("show", func() {              // Define the show action on the Bottle resource
                Routing(GET("/:bottleID"))   // The relative path to the show endpoint. The full path is
                                             // built concatenating the API and resource base paths with it.
                                             // Uses a wildcard to capture the requested bottle ID.
                                             // Wildcards can start with : to capture a single path segment
                                             // or with * to capture the rest of the path.
                Description("Retrieve bottle with given ID")
                Params(func() {              // Define the request parameters found in the URI (wildcards)
                                             // and the query string.
                        Param(               // Define a single parameter
                                "bottleID",  // Here it corresponds to the path segment captured by :bottleID
                                Integer,     // The JSON type of the parameter
                                "The name of the bottle to retrieve", // An optional description
                        )
                })
                Response(OK)                 // Define a potential response
                Response(NotFound)           // An action may define any number of responses.
                                             // Their content is defined through ResponseTemplates (not shown
                                             // in this simplistic example). Here we use the default response
                                             // templates defined in goa.
        })
})

var BottleMedia = MediaType("application/vnd.goa.example.bottle+json", func() {
        Description("A bottle of wine")
        Attributes(func() {
                Attribute("id", Integer, "ID of bottle") // Attribute defines a single field in
                                                         // the media type data structure given its
                                                         // name, type and description.
                Attribute("href")                        // The default type for attributes is String.
                Attribute("name", String "The bottle  name", func() { // Like with API, Resource and Action an
                                                         // attribute definition may use an anonymous function
                                                         // as last argument to define additional properties.
                        MinLength(1)                     // Here we define validation rules specifying a
                        MaxLength(255)                   // minimum and maximum number of characters in a bottle
                        // name.
                })
                Attribute("color", func() {              // Descriptions are optional.
                        Enum("red", "white", "rose", "yellow", "sparkling") // Possible field values
                })
                Attribute("sweetness", Integer, func() {
                        Minimum(1)                       // Minimum and maximum int field values.
                        Maximum(5)
                })

                View("default", func() {                 // Views are used to render a media type.
                        Attribute("id")                  // A media type can have one or more views
                        Attribute("href")                // and must define the "default" view.
                        Attribute("name")                // The view simply lists the fields to render.
                        Attribute("color")               // It can also specify the view to use to render
                        Attribute("sweetness")           // fields whose type is itself a media type
                                                         // (the "default" view by default). Not used here.
                })
        })
})

Parece cimplejo a simple vista pero pensemos que estamos codificando y documentando un servicio REST.

A la vez este framework se encuentra documentado en Go academy.

Dejo link:
https://blog.gopheracademy.com/advent-2015/goaUntanglingMicroservices/

miércoles, 30 de diciembre de 2015

Feliz navidad y prospero año



Como todos los años quiero desearles feliz navidad y prospero año. Nos seguimos leyendo en le 2016.

Las más populares bases NoSQL del 2015


Quiero compartir un link muy interesante, sobre las base de datos más populares de este año. Lo más interesante del articulo no esta expreso en articulo y es que son similares a las base NoSql del año pasado. Es decir que este movimiento no nos a dado mayores novedades, cosa que puede ser vista como algo negativo, pero yo pienso todo lo contrario, habla sobre estabilidad. Ya tuvimos problemas, ya los solucionamos, ya podes usar tranquilo estas soluciones. Que piensan ustedes?


Dejo link:
http://www.improgrammer.net/most-popular-nosql-database/

OpenSUSE Leap


OpenSUSE Leap es el contagio de las distros de Mint. Me explico mejor, OpenSUSE Leap es llevar la simpleza a las distros como Mint llevo simpleza a Ubuntu, OpenSUSE Leap llevo simpleza y elegancia a OpenSUSE.

La contra (en mi opinión) es que se debe bajar los DVDs que no esta tan bueno, prefiero bajar un cd chico y luego ir bajando las dependencias.

Que más decir? Les dejo un vídeo:


Dejo link:
https://en.opensuse.org/Portal:42.1
https://software.opensuse.org/421/es

domingo, 27 de diciembre de 2015

10 Ides para Node.js



El mundo de las IDEs va cambiando con el tiempo y seamos sinceros depende de una moda o gusto del desarrollador. También cambia si es necesario compilar o si es un lenguaje interpretado. Por lo tanto estuve buscando una IDE para estudiar un poco de Node y encontré este genial articulo:

http://www.freewebdesigntutorials.net/10-best-integrated-development-environment-for-node-js/

Si alguien le interesa mi opinión Atom esta muy bueno, me gusto mucho. Y IDEs pesadas como eclipse o intellij las veo muy pesadas y no utilizas todas las funcionalidades que traen.

Que les parece? Cual les gusta más?


martes, 22 de diciembre de 2015

NodeOS, el sistema operativo basado en Node.js



NodeOS  es un sistema operativo basado en Node.js, si si lo que escuchaste. NodeOS utiliza un kernel linux y se comunica con el a través de node.js.

Si bien es un proyecto que esta tomando vida y es muy reciente. Este fue impulsado por una sola pregunta: Se puede hacer un sistema operativo con node.js?

Si bien esta hecho con node.js como es de pensar utiliza todas sus herramientas, y se apoya en un kernel linux.

Para más info dejo link: https://node-os.com/

lunes, 21 de diciembre de 2015

Cosas que se pueden hacer en F# y no en C#

Estuve viendo este video y me resulto muy entretenido, como el titulo indica ataca las diferencias entre estos dos lenguajes:


jueves, 17 de diciembre de 2015

Stack Overflow en español



Stack Overflow en español es un sitio de preguntas y respuestas para programadores y profesionales de la informática. Es 100 % gratuito, y no se requiere registro.

Así se anuncia Stack Overflow en español. Ahora podemos hacer consultas en nuestro idioma.

Dejo el link: http://es.stackoverflow.com/

miércoles, 16 de diciembre de 2015

Google lanza 8 diplomados con certificación gratuita

El gigante de Internet Google anunció que, en conjunto con el gobierno español y universidades hispanas de prestigio internacional, ha puesto a disposición de forma gratuita 8 cursos online y 2 presenciales para usuarios de todo el mundo.

Sin más que decir, dejo los cursos:



Dejo link: https://cursos.formacionactivate.es/explorer

Big data University cambia la cara y te invita a hacer más cursos


Big data University es un sitio dedicado en la enseñanza de técnicas para utilizar Big data en 2015.

Hoy en día todo el mundo habla de big data y mucho no tiene idea. Para esa gente existe existe este sitio.

Big data University tiene una variada cantidad de cursos en varios idiomas. Totalmente gratuitos y abalados por IBM.

Dejo link: http://bigdatauniversity.com/

martes, 15 de diciembre de 2015

Que es Microservices??


Hace ya tiempo que todo el mundo habla de microservices, pero creo que pocos tienen claro, que son los microservices o que es una arquitectura de estilo microservices. Bueno, en tu blog amigo te cantamos la justa.

El termino microservice en arquitectura de software ha surgido en los últimos años para describir una forma particular de diseño de aplicaciones de software como suites de servicios de forma independiente desplegables. Es decir que es un conjunto de servicios independientes.

Si bien no existe una definición precisa de este estilo arquitectónico, hay ciertas características comunes en torno a la organización en torno a la capacidad empresarial, el despliegue automatizado, la inteligencia en los clientes, y el descentralizado control de datos.

Si queda alguna duda, el estilo arquitectónico microservice es un enfoque para el desarrollo de una única aplicación como un conjunto de servicios pequeños, cada uno que se ejecuta en su propio proceso y la comunicación es de forma lijera utilizando una API rest por medio de http. Estos servicios se construyen alrededor de las capacidades empresariales y de forma independiente de despliegue por la maquinaria despliegue totalmente automatizado. No hay un mínimo de gestión centralizada de estos servicios, que pueden estar escritas en diferentes lenguajes de programación y utilizan diferentes tecnologías de almacenamiento de datos.

Dejo link: http://martinfowler.com/microservices/#what

jueves, 10 de diciembre de 2015

Cursos de Videojuegos dictados por la Universidad de los Andes de forma gratuita!


Que largo me quedo el titulo!! Pero es explicativo, quiero compartir una serie de cursos de Videojuegos dictados por la Universidad de los Andes de forma gratuita en Coursera!

Les dejo los links:

Diseño de Videojuegos: Una introducción
Dictado por: Universidad de los Andes
Contenido: otro buen curso de programación y diseño de videojuegos, repasando los aspectos básicos y teóricos.
EnlaceIr al curso

Desarrollo de Videojuegos en Unity
Dictado por: Universidad de los Andes
Contenido: otro curso introductorio para aprender a desarrollar videojuegos desde un motor universal como Unity.
EnlaceIr al curso

Desarrollo de Videojuegos 3D en Unity
Dictado por: Universidad de los Andes
Contenido: al concluir este curso serás capaz de crear un prototipo de juego en 3D, haciendo uso de una serie de herramientas esenciales.
EnlaceIr al curso

Desarrollo y Diseño de Videojuegos
Dictado por: Universidad de los Andes
Contenido: aunque este curso también es gratuito, previamente es necesario aprobar otros cursos sobre desarrollo y diseño de videojuegos. Leer información oficial para despejar cualquier duda.
EnlaceIr al curso

miércoles, 9 de diciembre de 2015

10 ejemplos de uso de Lambda en Java 8

Estos post son buenos, lo que quiere ver un programador es código y encontré una pagina que da ejemplos de uso de Lambda en Java 8 y quiero transcribirlos:

Ejemplo 1 - Implementar Runnable usando Lambda:

Antes:

new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8, too much code for too little to do"); } }).start();

Ahora:

new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();

Ejemplo 2 - Manejo de eventos:

Antes:

Button show = new JButton("Show"); show.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Event handling without lambda expression is boring"); } });

Ahora:

show.addActionListener((e) -> { System.out.println("Light, Camera, Action !! Lambda expressions Rocks"); });

Ejemplo 3 - Iterar una lista:

Antes:

List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API"); for (String feature : features) { System.out.println(feature); }

Ahora:

List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
features.forEach(n -> System.out.println(n));

Ejemplo 4 - Usar Labda para filtrar (como predicado)

public static void main(args[]){ List languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
System.out.println("Languages which starts with J :");
filter(languages, (str)->str.startsWith("J"));
System.out.println("Languages which ends with a ");
filter(languages, (str)->str.endsWith("a"));
System.out.println("Print all languages :");
filter(languages, (str)->true);
System.out.println("Print no language : ");
filter(languages, (str)->false);
System.out.println("Print language whose length greater than 4:");
filter(languages, (str)->str.length() > 4); }

public static void filter(List names, Predicate condition) {
for(String name: names) { if(condition.test(name)) { System.out.println(name + " "); } } }
}

Ejemplo 5 - Combinando Predicado y Lambda:

Predicate<String> startsWithJ = (n) -> n.startsWith("J");
Predicate<String> fourLetterLong = (n) -> n.length() == 4;
names.stream() .filter(startsWithJ.and(fourLetterLong)) .forEach((n) -> System.out.print("\nName, which starts with 'J' and four letter long is : " + n));


Ejemplo 6 - Map and reduce:

Antes:

List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
for (Integer cost : costBeforeTax) {
    double price = cost + .12*cost;
    System.out.println(price);
}

Ahora:
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
costBeforeTax.stream().map((cost) -> cost + .12*cost).forEach(System.out::println);

Ejemplo 7 - Creando listas y filtrando:

List<String> filtered = strList.stream().filter(x -> x.length()> 2).collect(Collectors.toList()); System.out.printf("Original List : %s, filtered list : %s %n", strList, filtered);

Ejemplo 8 - aplicando una función a cada elemento:

List<String> G7 = Arrays.asList("USA", "Japan", "France", "Germany", "Italy", "U.K.","Canada"); String G7Countries = G7.stream().map(x -> x.toUpperCase()).collect(Collectors.joining(", ")); System.out.println(G7Countries);

Ejemplo 9 - creando sublistas y filtrando:

List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4);
List<Integer> distinct = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
System.out.printf("Original List : %s, Square Without duplicates : %s %n", numbers, distinct);

Ejemplo 10 - calculando máximo, mínimo, etc:

List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);
IntSummaryStatistics stats = primes.stream().mapToInt((x) -> x).summaryStatistics(); System.out.println("Highest prime number in List : " + stats.getMax()); S
ystem.out.println("Lowest prime number in List : " + stats.getMin());
System.out.println("Sum of all prime numbers : " + stats.getSum());
System.out.println("Average of all prime numbers : " + stats.getAverage());

A simple vista se ve muy bueno!

Dejo link:
http://javarevisited.blogspot.com.ar/2014/02/10-example-of-lambda-expressions-in-java8.html

martes, 8 de diciembre de 2015

Con nosotros, PHP 7!!


Todo el mundo esta hablando de PHP 7 y yo no quiero ser menos. Tranquilamente podría hablar de las nuevas características, pero encontré una infografia que es como un resumen:


Si vieron la infografía esta muy bien contado todo, lo que más me sorprende es que va ser el doble de rápido, en PHP 5 algo andaba mal.

  • A la vez algunas cosas que no dice y dice pero yo repito: 
  • Nueva versión de Zend Engine (de nombre en clave PHP#NG)
  • Importante reducción del uso de memoria
  • Árbol sintáctico abstracto
  • Soporte consistente a los 64-bits
  • Un buen número de errores fatales convertidos en excepciones (¡Aleluya!)
  • Mejora en la jerarquía de estas excepciones
  • Generador de números aleatorio más seguro
  • Operador de coalescencia con null (el ansiado ??)
  • Clases anónimas
  • Compatibilidad con la recién salida última versión de OpenSSL (1.0.2e)
A la vez se elimina todas las funcionalidades viejas!

Dejo link:



lunes, 7 de diciembre de 2015

Racket 6.3 se viene con todo!!


Ya he hablado de racket es como scheme pero libre, es genial. Trae hasta el Dr. scheme, que se llama Dr. racket (como es de esperar)

En su nueva versión hizo unos pasos importantes, para enumerar algunas de las mejoras:

  • Introduce un nuevo macro expander, este es un nuevo sistema de macros (que es no del todo compatible con el viejo sistema)  el nuevo macro expander es más fácil de usar que el anterior, ofrece un mejor diagnóstico cuando los enlaces fallan, tiene una aplicación más simple, y por lo tanto es menos propenso a errores.
  • Mejoras en su Redex DSL, entre las mejoras hace un mejor y m{as simple chequeo de la sintaxis. 
  • Y soporte para GTK3

Como les conté es software con licencia LGPL y además podemos bajarlo gratuitamente!!

Dejo link:
http://www.infoq.com/news/2015/12/racket-63-released
http://racket-lang.org/