Translate

domingo, 20 de abril de 2014

Hoja de trucos de Clojure


Siempre es bueno tener un machete, no hablo del cuchillo, sino de las anotaciones que hacemos para los exámenes para ayudar a nuestra memoria.  Les dejo un ayuda memoria de Clojure. Muy útil!!

Dejo link:

viernes, 18 de abril de 2014

Característica ocultas de Android Kitkat


R, un lenguaje y entorno de programación para análisis estadístico


Como les conté en el post anterior estoy haciendo un curso de R en Coursera. Por eso me atrevo a realizar un post de R.

R es un lenguaje y entorno de programación para análisis estadístico y gráfico. Su historia es larga pero para hacer un resumen, podríamos decir que es un dialecto libre del lenguaje S, desarrollado por Robert Gentleman y Ross Ihaka del Departamento de Estadística de la Universidad de Auckland en 1993.

En qué me puede ayudar R?

  • R al estar orientado a las estadísticas, proporciona un amplio abanico de herramientas.
  • Entre otras características de R, podemos nombrar su capacidad gráfica, que permite generar gráficos con alta calidad, con sólo utilizar las funciones de graficación.
  • R también puede usarse como herramienta de cálculo numérico y a la vez ser útil para la minería de datos.

Como dije anteriormente R es un poderoso entorno y lenguaje en el cual podemos tratar datos y gráficar. Pero no quiero detenerme en el entorno sino que quiero revisar el lenguaje.

Al igual que S, se trata de un lenguaje de programación, lo que permite que permite extender sus propias funciones. La gran mayoría de las funciones de R fueron escritas en R pero por cuestiones de rendimiento existen funciones escritas en lenguajes de más bajo nivel como C o Fortran.

R es un lenguaje interpretado, el usuario normalmente accede por líneas de comandos o consola. Veamos unos ejemplos:

Si queremos hacer un Hola mundo podemos hacerlo de la siguiente manera:

> print("Hola Mundo")

[1] "Hola Mundo"

Sumemos 2 números:

> 2 + 3

[1] 5

Pero que hace tan potente a R? Momento, que recién empezamos! Veamos a R haciendo lo que mejor sabe hacer, analizar datos.

Vamos a crear una colección:

x <- c(1,2,3,4,5,6)

Vamos a calcular el cuadrado de cada elemento:

> y <- x^2

> y

[1] 1 4 9 16 25 36

Ahora vamos a calcular la media, la varianza y vamos a gráficar!

> mean(y)

[1] 15.16667

> var(y)

[1] 178.9667

> plot (y)




Como podemos ver R es un lenguaje y entorno muy poderoso, orientado al estudio de datos estadísticos.

Además, R puede integrarse con distintas bases de datos y existen bibliotecas que facilitan su utilización desde lenguajes de programación interpretados como Perl, Python y Ruby. Y por supuesto existen proyectos que permiten utilizar R desde Java o .net.

Y por si fuera poco cuenta con un poderoso entorno de desarrollo llamado R studio que se puede descargar de forma gratuita.

Dejo links:

miércoles, 16 de abril de 2014

Instalar R en Ubuntu

Como saben R es el lenguaje de programación para análisis estadístico de datos más usado en el mundo.  Estoy haciendo el curso de coursera: R Programming pero en este no dice como instalarlo en Linux. Por eso les quiero mostrar como hace:

sudo add-apt-repository "deb http://cran.rstudio.com/bin/linux/ubuntu $(lsb_release -cs)/"
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
sudo apt-get update
sudo apt-get install r-base r-base-dev

Y luego podemos instalar Rstudio, que es una IDE, para hacer esto debemos descargar la del siguiente link: http://www.rstudio.com/ide/download/desktop


Moonscript


MoonScript es un lenguaje dinámico que compila a la plataforma Lua. Con este lenguaje vas a tener el poder de un potente lenguaje script y la potencia de Lua

MoonScript puede correr dentro de Lua y a la vez puede ser dinámicamente compilado y cargar los archivos dinamicamente gracias a moonloader. Lo único que necesita es que agreguemos el siguiente import: require "moonscript".

MoonScript proporciona una sintaxis limpia, como pueden ver:

export my_func
x = 2323

collection =
  height: 32434
  hats: {"tophat", "bball", "bowler"}

my_func = (a) -> x + a

print my_func 100

Dejo link:
http://moonscript.org/
http://moonscript.org/reference/

domingo, 13 de abril de 2014

Pattern matching


Pattern Matching nace del paradigma funcional aunque hoy en día lenguaje multiparadigma lo implementan como Scala o Kotlin. Pattern Matching permite definir funciones por medio de macheo de parámetros y resultados. Veamos un ejemplo en Haskell de definición de factorial:

 factorial 0 = 1
 factorial n = n * factorial (n - 1)

Para ver la diferencia entre la forma de resolver el problema sin Pattern Matching, voy a resolver lo mismo en C++

 int factorial(int n) {
       if (n == 0) {
              return 1;
       } else {
             return n * factorial(n-1);
       }
 }

Si comparamos nos ahorramos 5 lineas; pero el tema no es solo escribir menos código. Además debemos pensar: ¿Cuál les parece más legible? ¿Cuál es más simple?

Muchos lenguajes implementan Pattern Matching, al venir del paradigma funcional normalmente los lenguajes funcionales como Erlang lo implementan; vamos a hacer la función de factorial en Erlang.

 fac(0) -> 1;
 fac(N) when N > 0, is_integer(N) -> N * fac(N-1).

Se puede ver que en este caso se indica que debe ser positivo el número; si se ingresa un valor negativo lanza un error. Ojo estas restricciones también la podíamos hacer en Haskell.

 Factorial con ML se vería de la siguiente manera:

 fun fac 0 = 1
      | fac n = n * fac (n - 1)

 Otros lenguajes multiparadigma nos permiten jugar con Patter Matching como Scala:

 def fact(n: Int): Int = n match {
     case 0 => 1
     case n => n * fact(n - 1)
   }

En este caso se define fact que devolverá un entero, y que el parámetro n debe coincidir con 0 y devuelve 1 o con cualquier otro valor y devolverá n * fact(n - 1).

 Por ejemplo Kotlin permite hacer Pattern Maching por el tipo de la siguiente manera:

 when (x) {
   is Int -> print(x)
   is List<Int> -> print(x.sum())
   !is Number -> print("No es un número")
   else -> print("No puedo hacer nada")
 }

Para citar otro ejemplo, veamos desarrollar una función que indique el número que se encuentra en una posición indicada por parámetro de la secuencia de Fibonacci, y lo desarrollaremos con F# :

 let rec fib n =
     match n with
     | 0 -> 0
     | 1 -> 1
     | 2 -> 1
     | _ -> fib (n - 1) + fib (n - 2)

 Si lo comparamos con Mathematica:
 fib[0]:=0
 fib[1|2]:=1
 fib[n_]:= fib[n-1] + fib[n-2]

En Mathematica podemos utilizar el | para decir esto o aquello y el _ para indicar cualquier otro valor.

Pattern Matching es una técnica muy simple, pero muy potente. Por ejemplo necesitamos el primer elemento de una lista podemos definirla de la siguiente manera, vamos a implementarlo en Haskell:

primero :: [a] -> a
primero [] = error "¡No puedes utilizar la función primero con una lista vacía!"
primero (x:_) = x

Con (x:_) estamos diciendo que puede llegar una lista por parámetro que está conformada por un elemento y el resto. Implementemos la función cantidadDeElementos que nos indique cuantos elementos tiene una lista:

cantidadDeElementos :: (Num b) => [a] -> b
cantidadDeElementos [] = 0
cantidadDeElementos (_:xs) = 1 + cantidadDeElementos xs

Una desventaja del uso de Pattern Matching es que nuestro código se verá muy afectado ante un cambio en las estructuras. Pero la ventajas son muchísimas, para citar algunas: legibilidad de código, simplicidad, menos lineas de código, etc...

Netrunner

Ya hable de Netrunner en el post anterior, ahora ha probarlo!!

Les dejo screenshots:












sábado, 12 de abril de 2014

Netrunner, mi próximo linux!!


No sé que voy a hacer mañana, pero sé que quiero instalar Netrunner, cuanto antes.

Por qué? Porque por lo que vi es una muy buena opción. Un entorno KDE muy elegante, y no soy fan de KDE pero en Netrunner se ve su potencia, un entorno muy cuidado.

Además que es una distro basada en Ubuntu, por lo tanto basada en Debian. Y me encanta usar Debian. Y eso no es todo, hace poco anunciaron que sera una Rolling Release. Para el que no sabe Rolling Release es que para cambiar de versión debemos esperar un periodo de tiempo, sino que se va actualizando periódicamente.

Netrunner es una distro muy buena para los amantes de KDE, Debian y Rolling Release.

La voy a probar y les cuento!!


Dejo link:
http://www.netrunner-os.com/
http://en.wikipedia.org/wiki/Netrunner_(operating_system)

lunes, 7 de abril de 2014

Oracle Massive Open Online Course: Develop Java Embedded Applications Using a Raspberry Pi May 2014


Oracle ofrecerá un curso de programación de Raspberry Pi con Java.

Yo no estaba enterado que Raspberry Pi soportaba Java. La verdad es que me saco el sombrero. Raspberry Pi pinta como una gran plataforma que va a acercar el mundo de la rebotica a muchos programadores.

Y esta rebueno que Oracle ofrezca estas capacitaciones.



Dejo el link:
https://apex.oracle.com/pls/apex/f?p=44785:145:0::::P145_EVENT_ID,P145_PREV_PAGE:1841,143

domingo, 6 de abril de 2014

Show Off. Get Proof. Convince Your Boss.


No soy asiduo de hacer publicidad a empresas pero quiero recomendarles la pagina de Typesafe.

Go Typesafe es un conjunto de recursos para ayudar a convencer a sus compañeros para utilizar la plataforma reactive de Typesafe: Play Framework, Akka y Scala.

Dejo link:
http://go.typesafe.com/

viernes, 4 de abril de 2014

Roslyn el compilador Open Source de C# y Visual Basic


Microsoft ha publicado el compilador Roslyn, bajo la licencia Apache.
Roslyn representa una importante inversión de Microsoft. Microsoft ha reescrito su compilador C# y VB. NET desde cero y lo publico con licencia Open source.

Esto es un gran salto para Microsoft dado que abrió el proceso de compilación de sus lenguajes. El lanzamiento de hoy de la tecnología . ET marca un cambio importante en el pensamiento de Microsoft. La visibilidad del codigo del compilador debería conducir a mejores beneficios para todos, independientemente de su plataforma.

Dejo link: http://msdn.microsoft.com/en-us/vstudio/roslyn.aspx

miércoles, 2 de abril de 2014

Reactive Design Patterns



Reactive Design Patterns es un libro que acaba de publicar la editorial Manning. Lo interesante es que regala el primer capitulo, y es una buena idea leerlo para ver de que se trata.

Dejo el link:
http://www.manning.com/kuhn/


Try Flux Today!


Codescholl lanzo la pagina try flux que la verdad no entiendo bien. Alguien me lo puede explicar??

Dejo link:
https://www.codeschool.com/try-flux