Translate

jueves, 12 de febrero de 2015

Construir Aplicaciones Web con Go

Quiero compartir el libro para construir aplicaciones Web con Go.

Go es el lenguaje que embandera Google y esta tomando muchísimo lugar y como es esperado tambien sector Web.

Por lo tanto esta bueno leer este libro.




Les dejo este link:
http://codegangsta.gitbooks.io/building-web-apps-with-go/


lunes, 9 de febrero de 2015

.NET CoreCLR es Open Source y se mudo a GitHub


Microsoft sigue seduciendo a la comunidad open sources. Ahora tomo la decisión de publicar el corazón de .net en GitHub.

Que más se puede decir? Más que sorprendido y pienso que es un gran paso al open source.

Dejo link: https://github.com/dotnet/coreclr

domingo, 8 de febrero de 2015

Spring 4 y Java 8


Spring 4 soporta java 6,7 y 8 con lo que eso significa. Ahora podemos utilizar spring con Clausuras. Y no solo eso sino todos los beneficios  de java 8.

Podemos utiliza clasuras and la Api de DataTime. Además el operador diamante y repeating annotations.

Es muy bueno que Spring se acople y adapte a la nueva versión de Java.


Top 10 lenguajes de programación según IEEE Spectrum

IEEE Spectrum es un indice que se calcula con varias fuentes, google, github, etc. Según este indice el lenguaje más popular es Java y luego C. Pueden ver el detalles de los lenguajes en la siguiente imagen: 





lunes, 2 de febrero de 2015

Profiling R


Algo que me resulto sumamente interesante de R es que el lenguaje tiene unas funciones para buscar problemas de performance. Me parece muy buena idea, permite que sin herramientas visuales podemos verificar la performance.

La función system.time nos permite saber cuanto demora una función determinada, veamos un ejemplo:

system.time(for(i in 1:m) t.test(X[i, ] ~ grp)$stat)
#>    user  system elapsed
#>   1.575   0.011   1.599
system.time(
  for(i in 1:m) t.test(X[i, grp == 1], X[i, grp == 2])$stat
)
#>    user  system elapsed
#>   0.406   0.000   0.408

Otra función que nos permite buscar problema de performance es Rprof. Con Rprof podemos setear R para que funcione a modo de profiling. De esta forma R se ejecuta el código, de un modo que nos indica el tiempo que se ejecutan las funciones. Es ideal para buscar problemas de performance. 

Luego de esta pequeña introducción a código para hacer profile, me quedo con la idea de introducir funciones que nos permiten buscar problemas de performance. Es una gran idea, los lenguajes podrían copiar esta idea. Y a la vez eliminan la necesidad de IDEs. 

Dejo links: 
http://www.stat.berkeley.edu/~nolan/stat133/Fall05/lectures/profilingEx.html

sábado, 31 de enero de 2015

Gradle una herramienta para construir aplicaciones con la potencia y flexibilidad de Ant y con la gestión de dependencia de Maven

Ya escribí anteriormente a Gradle, es una herramienta que permite crear proyectos en Java o Groovy. Similar a Maven, es más utiliza los repositorio de Maven.

Si vemos la pagina web nos dice más o menos lo siguiente:

"Gradle es un sistema de automatización de compilación de código abierto. Gradle puede automatizar la creación, prueba, publicación, distribución y más de paquetes de software u otro tipo de proyectos, tales como sitios web generados estáticos, documentación generada o de hecho cualquier otra cosa.

Gradle combina la potencia y flexibilidad de Ant con la gestión de dependencias como Maven"

Pero, como utilizamos esta herramienta? Si utilizaron Maven anteriormente, instalar Gradle es muy similar. Se debe bajar esta herramienta y luego se debe agregar la carpeta a la variable PATH, en linux tenemos el archivo .profile y podemos hacer algo así:

export GRADLE_HOME=/java/gradle-2.2.1
export PATH=$GRADLE_HOME/bin:$PATH

Y luego hacemos que tome estos cambios con source

source .profile

Luego podemos probar esto de la siguiente manera:

$ gradle -v

------------------------------------------------------------
Gradle 2.2.1
------------------------------------------------------------

Build time:   2014-11-24 09:45:35 UTC
Build number: none
Revision:     6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a

Groovy:       2.3.6
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_11 (Oracle Corporation 25.11-b03)
OS:           Linux 3.11.0-12-generic amd64

Por hoy estamos, en siguientes post vamos a crear proyectos y ejecutar tareas. 

Dejo link: http://gradle.org/




jueves, 29 de enero de 2015

Aprender y enseñar con Teachlr


Teachlr es una pagina web en la cual se puede enseñar o aprender de forma gratuita. Todos tenemos cosas para aprender y para enseñar, y esta pagina es para hacer esto.

En esta pagina existen varios cursos de computación general, y tambien de programación HTML o CSS, en fin de todo.

Dejo el link: https://teachlr.com/

lunes, 26 de enero de 2015

Spring Boot


Es raro que no haya escrito antes de Spring Boot dado que es un subproyecto de Spring muy útil. Este proyecto nos ayuda a comenzar un proyecto rápidamente.

Como saben crear un proyecto Spring con todo configurado no es fácil y conlleva tiempo. Con Spring Boot podemos crear diferentes proyectos rápidamente. Ojo luego debemos trabajar un poco para personalizar nuestro proyecto pero el trabajo más grueso ya esta hecho.

Algo que me falto decir es que Spring Boot utiliza maven o Gradle, se pueden crear proyectos como arquetipos.

Entre las características podemos nombrar:

  • Podemos utilizar jetty o tomcat embebido. 
  • No necesitamos tocar configuraciones de Maven
  • Tenemos un proyecto listo para ejecutar, con mínimas configuraciones. 
Dejo link:

sábado, 24 de enero de 2015

h4ckademy


Hack es una palabra tillada y no me simpatiza. Pero me hago eco de la nueva pagina web para aprender programación. Simplemente eso, porque el Kick-off es en febrero.

Dejo link: http://www.h4ckademy.com/

jueves, 22 de enero de 2015

Lazy evaluation en R

R es un lenguaje funcional y a la vez tiene la característica de evaluación perezosa, es decir que no ejecuta código solo hasta que lo necesita. Parece rara esta característica pero es muy útil.

Supongamos lo siguiente:

> fx <- function() {
+     print("codigo muy costoso...")
+ }
> fx
function() {
    print("codigo muy costoso...")
}
> fx()
[1] "codigo muy costoso..."
> otraFx <- function (i, f) { if (i > 10) f() }
> otraFx(2,fx)
> otraFx(20,fx)
[1] "codigo muy costoso..."
>

Por lo tanto la función fx no se ejecuta si no es necesario, otro ejemplo:

> f <- function(x) {
  10
}
> f(stop("This is an error!"))
> [1] 10

Podemos forzar que ejecute el código, con force (que original) :

> f <- function(x) {
  force(x)
  10
}
> f(stop("This is an error!"))
#> Error in force(x): This is an error!

Una interesante característica, sin más dejo link:
http://adv-r.had.co.nz/Functions.html

jueves, 15 de enero de 2015

Rust 1.0 Alpha Released


Hace muy poco que hable sobre Rust y que paso? Un nuevo release de Rust 1.0 fue liberado. Ojo es la versión Alpha. Así es de poderoso este blog...

A la pregunta de en que andaba Rust, bueno están trabajando. Y han liberado una versión alpha.

Les dejo el release note.

Dejo link:
http://blog.rust-lang.org/2015/01/09/Rust-1.0-alpha.html

martes, 13 de enero de 2015

Python vs. R, Cual debo aprender primero?


Udacity es un sitio que dicta cursos de forma gratuita y es más que recomendable. Y quien no mejor para aconsejarnos que aprender primero Python o R, si nos vamos a dedicar a analizar datos.

Como sabrán los lenguajes más utilizados para el análisis de datos son Python y R. R no me sorprende para nada dado que el propósito del lenguaje es analizar datos. No es un lenguaje de propósito general, en cambio Python si es un lenguaje de propósito general, que cada vez más esta ganando lugar en la comunidad cientifica.

Yo me pregunto porque Python esta ganando tanto terreno en el plano científico, tal vez en otro post. Lo que yo pienso es que debe ser por la facilidad de uso, otra característica no se. Escucho opiniones.

Me ido por las ramas, lo importante es que dejo este interesante link, que si les cuenta cual es la ventaja de aprender uno o otro. No pienso contar el final.

Dejo link:
http://blog.udacity.com/2015/01/python-vs-r-learn-first.html?utm_content=buffer4eca6&utm_medium=social&utm_source=plus.google.com&utm_campaign=update

En que anda Rust?


Recuerdan a Rust? La verdad es que me había olvidado de este lenguaje, fue que en la encuesta de infoQ sobre "quien ocupara el lugar de C?" lo vi. Ahora tuve un poco de tiempo y decidí ver en que andaba...

Para los que no recuerdan Rust es un lenguaje similar a C pero más evolucionado, con muchas características interesantes. Como por ejemplo pattern matching, inferencia de tipo, clausuras, etc...

A la vez es multiparadigma, se puede programar de modo funcional o imperativo y tambien orientado a objetos. Pero por ejemplo no se encuentra mucha info de la programación orientada a objeto en rust.

Yo lo veo como un c++++, es decir con capacidades que hacen fácil programar pero a la vez tiene una orientación a tareas de bajo nivel. A la vez existe mucha documentación, lo que hace de este lenguaje un digno competidor de go.

Por ultimo les dejo unos ejemplos de rustbyexample :

// This is a comment, and will be ignored by the compiler
// You can test this code by clicking the "Run" button over there ->
// or if prefer to use your keyboard, you can use the "Ctrl + Enter" shortcut

// This code is editable, feel free to hack it!
// You can always return to the original code by clicking the "Reset" button ->

// This is the main function
fn main() {
    // The statements here will be executed when the compiled binary is called

    // Print text to the console
    println!("Hello World!");
}

Otro ejemplo:

fn main() {
    let x = 5u32;

    let y = {
        let x_squared = x * x;
        let x_cube = x_squared * x;

        // This expression will be assigned to `y`
        x_cube + x_squared + x
    };

    let z = {
        // The semicolon suppresses this expression and `()` is assigned to `z`
        2 * x;
    };

    println!("x is {:?}", x);
    println!("y is {:?}", y);
    println!("z is {:?}", z);
}

Otro ejemplo:

fn main() {
    let number: i32 = 13;
    // TODO ^ Try different values for `number`

    println!("Tell me about {}", number);
    match number {
        // Match a single value
        1 => println!("One!"),
        // Match several values
        2 | 3 | 5 | 7 | 11 => println!("This is a prime"),
        // Match an inclusive range
        13...19 => println!("A teen"),
        // Handle the rest of cases
        _ => println!("Ain't special"),
    }

    let boolean = true;
    // Match is an expression too
    let binary: i32 = match boolean {
        // The arms of a match must cover all the possible values
        false => 0,
        true => 1,
        // TODO ^ Try commenting out one of these arms
    };

    println!("{} -> {}", boolean, binary);
}

Dejo link:
https://github.com/rust-lang/rust
http://doc.rust-lang.org/book/
http://www.rust-lang.org/
http://rustbyexample.com/