jueves, 26 de febrero de 2015

Nuevamente se dicta Principles of Reactive Programming en Coursera.

Que bueno es dar buenas noticias!

Se dicta nuevamente el curso Principles of Reactive Programming en Coursera el 13 de Abril de 2015. Este curso es muy bueno y lo dictan unos monstruos...

Por favor por amor a su carrera o por curiosidad, tomen este curso, super recomendado.


Dejo link:
https://www.coursera.org/course/reactive

martes, 24 de febrero de 2015

Hablemos de Apache Software Fundation


La Apache Software Fundation se compone de más de 150 proyectos, estos más de 150 proyectos son los que se llaman top-level, que cubren una amplia gama de tecnologías. Es probable que si buscamos software de calidad open sorce, en el sitio de Apache lo van a poder encontrar.

Hablemos un poco de los proyectos, la lista de proyectos es esta: http://projects.apache.org/indexes/alpha.html

Estos proyectos están organizados por categoría, estas categorías tienen que ver con el uso de este software (como es de esperar) , las categorías son:

  • big-data
  • build-management
  • cloud
  • content
  • database
  • ftp
  • graphics
  • hadoop
  • http
  • httpd-module
  • javaee
  • library
  • mail
  • mobile
  • network-client
  • network-server
  • osgi
  • regexp
  • retired
  • testing
  • virtual-machine
  • web-framework
  • xml

Como se puede ver existe un amplio gama de software. Y los lenguajes utilizados en los proyecto son:

  • ActionScript
  • Bash
  • C
  • C#
  • C++
  • Cocoa
  • D
  • Delphi
  • Erlang
  • Go
  • Groovy
  • Haskell
  • JSP
  • Java
  • Java, Javascript
  • JavaScript
  • Objective-C
  • Ocaml
  • PHP
  • Perl
  • Python
  • Ruby
  • SQL
  • SVG
  • Scala
  • SmallTalk
  • Tcl
  • XML
  • node.js

Siendo Java el lenguaje con el que se hicieron mayor cantidad de proyectos.

Esta organización nos provee una amplia gama de software de muy buena calidad. Sin más dejo link:
http://www.apache.org/

domingo, 22 de febrero de 2015

Apache Mesos


La verdad me siento un ignorante, se me paso Apache Mesos y la verdad es que tan gran proyecto de Apache no se nos puede pasar por alto.

Vamos con lo primero, que es Mesos? Mesos es un proyecto open source que permite administrar cluster, es decir que es un cluster manager  desarrollado por University of California, Berkeley.

Ahhhh reclaro... pero que es un cluster manager? Uno de los retos en el uso de un cluster de ordenadores es el costo de la administración de la misma que a veces puede ser tan alto como el costo de la administración de N máquinas independientes, si el clúster tiene N nodos.

Apache Mesos proporciona aislamiento eficiente de los recursos y manejo eficiente de recursos compartidos entre aplicaciones. Mesos permite compartir recursos de forma granular, mejorar la utilización de clusters.

Desde que fue desarrollado en la Universidad de Berkeley, ha sido adoptado por varias compañías de software, incluyendo Twitter y AirBnB. Al menos 50 organizaciones actualmente utilizan Mesos.

Mesos es un proyecto top-level de Apache, después de haber egresado de la incubadora, el 24 de julio de 2013. Y como es esperable se distribuye con licencia Apache.

Dejo links:
http://mesos.apache.org/
http://mesos.apache.org/documentation/latest/
http://mesos.apache.org/documentation/latest/mesos-frameworks/


sábado, 21 de febrero de 2015

Generar documentación en Python con Sphinx


Que pereza nos da hacer documentación, nos pone de mal humor...

Sphinx es una herramienta que hace que sea fácil crear documentación inteligente y sobre luzca agradable y bien organizada. Esta herramienta fue creada por Georg Brandl y con licencia BSD.

Yo que vengo de Java he usado javadoc y tambien el plugin de maven que genera un sitio que tiene documentación oriunda del código.

Entre las características de Sphinx:

  • Maneja diferentes tipos de formato de salida: HTML (incluyendo Windows HTML Help), LaTeX (para versiones en PDF para imprimir), ePub, Texinfo, páginas de manual, de texto sin formato.
  • Amplias referencias cruzadas: Marcado semántico y vínculos automáticos para funciones, clases, citas, términos del glosario y piezas similares de información.
  • Estructura jerárquica: Definición sencilla de un árbol de documentos, con enlaces automáticos a padres e hijos
  • Índices automáticos: Índice general, así como los índices de los módulos específicos del idioma del código: resaltado automático utilizando el resaltador Pygments.
  • Extensiones: Pruebas automáticas de fragmentos de código, la inclusión docstrings de módulos de Python (docs API), y más.

A simple vista es genial esta herramienta, vamos a tener que probarla.

Dejo link: http://sphinxsearch.com/

viernes, 20 de febrero de 2015

MapReduce framework para C/C++ open-sourced gracias a Google


Google ha anunciado que va a hacer un framework de código abierto MapReduce para permitir a los usuarios ejecutar nativo de C y C ++ código en sus entornos de Hadoop. Hadoop puede sufrir de problemas de rendimiento debido a ser escrito en Java por lo que este framework va venir como una muy buena noticia. 

'MR4C' (MapReduce para C) fue desarrollado por la empresa Skybox para uso ciencia a gran escala de procesamiento de imágenes de satélite y datos geoespaciales. Google encontró Hadoop una potente solución para el manejo de datos escalables gracias a sus capacidades de seguimiento de trabajo y gestión de clústeres, pero quería ser capaz de aprovechar las robustas bibliotecas de procesamiento de imágenes escritas en C y C ++.

Las empresas han construido sus propios sistemas propietarios para lograr esto, pero MR4C ofrece una solución integral para ahorrar tiempo en el trabajo con grandes conjuntos de datos. 




martes, 17 de febrero de 2015

Aleatoriedad en Haskell


Muchas veces necesitamos un numero aleatorio, tanto para hacer un juego o para simulación. En lenguajes imperativos esto es muy fácil, podemos utilizar una función que nos devuelva un numero aleatorio. Pero en la programación funcional, esto no es tan fácil, dado que la programación funcional se sostiene en un pilar que se llama "transparencia referencial"

La transparencia referencial es muy importante, lo que dice es que todas las funciones debe devolver el siempre mismo valor dado un parámetro determinado. Esto no siempre es así en la programación imperativa porque podemos tener estados, y esos estados pueden cambiar el comportamiento de una función, les muestro un ejemplo para ser más claro:

var a = 2;
var c = 3;

function ejemplo(paremetro) {
     if (a == 2) {
         return ++parametro;
     }
return --parametro;
}

> ejemplo(a)
3
> ejemplo(2)
1

La función utiliza una variable global, y dado el estado de esa variable incrementa el parámetro o lo decrementa.

Bueno, recuerda, Haskell es un lenguaje funcional puro. Esto hace un poco complicado obtener números aleatorios.

Si hacemos la función:

randomNumber :: (Num a) => a
randomNumber = 4

No será muy útil como función de números aleatorios ya que siempre nos devolverá el mismo 4, aunque puedo asegurar que ese 4 es totalmente aleatorio ya que acabo de lanzar un dado para obtenerlo.

Esto me hace acordar un chiste:


¿Qué hacen demás lenguajes para generar número aparentemente aleatorios? Bueno, primero obtienen algunos datos de tu computadora, como la hora actual, cuanto y a donde has movido el ratón, el ruido que haces delante del computador, etc. Y basándose en eso, devuelve un número que parece aleatorio. La combinación de esos factores (la aleatoriedad) probablemente es diferente en cada instante de tiempo, así que obtienes números aleatorios diferentes.

Así que en Haskell, podemos crear un número aleatorio si creamos una función que tome como parámetro esa aleatoriedad y devuelva un número (o cualquier otro tipo de dato) basándose en ella.

Utilizaremos el módulo System.Random. Contiene todas las funciones que calmaran nuestra sed de aleatoriedad. Vamos a jugar con una de las funciones que exporta, llamada random. Su declaración de tipo es random :: (RandomGen g, Random a) => g -> (a, g) ¡Wau! Hay nuevas clases de tipos en esta declaración. La clase de tipos RandomGen es para tipos que pueden actuar como fuentes de aleatoriedad. La clase de tipos Random es para tipos que pueden tener datos aleatorios. Un dato booleano puede tener valores aleatorios, True o False. Un número también puede tomar un conjunto de diferentes valores alotarios ¿Puede el tipo función tomar valores aleatorios? No creo. Si traducimos la declaración de tipo de random al español temos algo como: toma un generador aleatorio (es decir nuestra fuente de aleatoriedad) y devuelve un valor aleatorio y un nuevo generador aleatorio ¿Por qué devuelve un nuevo generador junto al valor aleatorio? Lo veremos enseguida.

Para utilizar la función random, primero tenemos que obtener uno de esos generadores aleatorios. El módulo System.Random exporta un tipo interensante llamado StdGen que posee una instancia para la clase de tipos RandomGen. Podemos crear un StdGen manualmente o podemos decirle al sistema que nos de uno basandose en un motón de cosas aleatorias.

Para crear manualmente un generador aletario, utilizamos la función mkStdGen. Tiene el tipo Int -> StdGen. Toma un entero y basándose en eso, nos devuelve un generador aleatorio. Bien, vamos a intentar utilizar el tandem random mkStdGen para obtener un número aleatorio.

ghci> random (mkStdGen 100)
<interactive>:1:0:
    Ambiguous type variable `a' in the constraint:
      `Random a' arising from a use of `random' at <interactive>:1:0-20
    Probable fix: add a type signature that fixes these type variable(s)

¿Qué pasa? Ah, la función random puede devolver cualquier tipo que sea miembro de la clase de tipos Random, así que tenemos que decir a Haskell exactamente que tipo queremos. Recuerda también que devuelve un valor aleatorio y un generador.

ghci> random (mkStdGen 100) :: (Int, StdGen)
(-1352021624,651872571 1655838864)

¡Por fin, un número que parece aleatorio! El primer componente de la dupla es nuestro número aleatorio mientras que el segundo componente es una representación textual del nuevo generador ¿Qué sucede si volvemos a llamar random con el mismo generador?

ghci> random (mkStdGen 100) :: (Int, StdGen)
(-1352021624,651872571 1655838864)

Por supuesto. El mismo resultado para los mismos parámetros. Vamos a probar dándole como parámetro un generador diferente.

ghci> random (mkStdGen 949494) :: (Int, StdGen)
(539963926,466647808 1655838864)

Genial, un número diferente. Podemos usar la anotación de tipo con muchos otros tipos.

ghci> random (mkStdGen 949488) :: (Float, StdGen)
(0.8938442,1597344447 1655838864)
ghci> random (mkStdGen 949488) :: (Bool, StdGen)
(False,1485632275 40692)
ghci> random (mkStdGen 949488) :: (Integer, StdGen)
(1691547873,1597344447 1655838864)

Esto es muy bueno!!

Dejo la fuente: http://aprendehaskell.es/content/EntradaSalida.html#aleatoriedad


Simplificando la interacción con Windows desde Linux con Winconn


Algunas veces necesitamos una aplicación que solo corre en Windows. Y no hay caso necesitamos esa aplicación y no una que la sustituya. Por lo que debemos crear una maquina virutal.

Winconn simplifica la administración, creación y integración con escritorios remotos Windows.

Entre las características podemos nombrar:

  • Podemos crear y gestionar perfiles de aplicación remotas
  • Acceder a carpetas de la aplicación remota como locales 
  • Redirección de impresora local
  • Crear acceso directos en el escritorio para sus aplicaciones remotas
  • Las aplicaciones remotas integradas en el menú 
  • Indicador de aplicación para una rápida ejecución de aplicaciones
  • Importación de aplicaciones remotas, empaquetados en archivos RDP


Una característica no tan buena es que corre en Ubuntu o los derivados. Tal vez podrían ampliar la distribución a otras distros.

Dejo link:
http://stanev.org/winconn/

Dejo un vídeo:



viernes, 13 de febrero de 2015

Cual es el mejor lenguaje para a prender programación funcional?


Me encontré con esta pregunta en internet y me resulta muy interesante...

Yo pienso en scala, haskell o sml . También es buena idea utilizar un lenguaje de tipado débil como Lisp o erlang...

Pero admito que me gusta aprender lenguajes, tal vez el más completo es Haskell. Pero esta es una opinión personal.

Seria muy interesante que opinen, les dejo el link:
http://www.slant.co/topics/485/~what-are-the-best-languages-for-learning-functional-programming

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