Translate

jueves, 12 de marzo de 2015

MongoDB 3.0

Charan charan!! Y con nosotros la nueva versión de MongoDB. Si la versión número 3.0 fue liberada. Según el sitio de MongoDB es una de las versiones que más rápido se expandió y a la vez mejora el rendimiento, reduce las necesidades de almacenamiento hasta en un 80%

Que más trae esta nueva versión?

  • Auditoria de punta a punta.
  • Motores de almacenamiento conectables  
  • Mayor rendimiento y eficiencia
  • Lenguaje mejorado de consulta y herramientas. 



lunes, 9 de marzo de 2015

Utilizar cin en una aplicación de consola ejecutada en QtCreator

Si hacemos una aplicación de consola en QtCreator vamos a tener problemas si esta aplicación utiliza el comando cin. Esto es porque hay un bug en la consola de QtCreator. Pero no hay problema lo que debemos hacer es indicarle a QtCreator que ejecute el programa en una consola aparte (no la integrada) para ello vamos a :


Lo que también puede pasar es que no encuentre la consola para cambiar la consola se debe ir a Tools->Options->Environment->General y en esta pantalla se puede cambiar la consola:



domingo, 8 de marzo de 2015

Ejecutar un programa de consola en modo Debug en QtCreator

Luego de crear el proyecto de consola. Podemos ejecutarlo en modo debug pero esto lanzara un error:


Esto sucede dado que Cmake no creo las carpetas de Debug. Tenemos que ejecutar a Cmake con el siguiente comando: -DCMAKE_BUILD_TYPE=Debug


Para hacer esto vamos al proyecto y haciendo menú contextual, seleccionamos “run Cmake”



Luego podemos ejecutar nuestro programa en modo debug.

Si queremos que se detenga en una linea determinada ponemos un breakpoint haciendo doble click en el panel que tiene el numero de lineas.   


jueves, 5 de marzo de 2015

Scala Excercises


Quiero compartir la pagina Scala Excercises en donde puede encontrar un completo tutorial de Scala (como es esperable) que nos lleva por lo básico y lo complejo del lenguaje. Sin más...

Dejo link:
http://scala-exercises.47deg.com/index.html

miércoles, 4 de marzo de 2015

Groovy un proyecto de la Fundación Apache??


"The Groovy team is happy to announce its intention to join the Apache Software Foundation (ASF). "

Estas son las palabras del amigo Guillaume Laforge que sería el "Groovy Project Manager".

Pero cabe destacar que estoy contando la historia desde el final o lo que parece el final. Por que esta historia comenzó con el hecho de que la organización Pivotal decide abandonar el proyecto Groovy. Dado este suceso la comunidad de Groovy tal huérfano se puso a buscar otra organización que lo acoja. Muchos nombres se barajaron com Eclipse, JBoss, etc. pero al parecer la organización que triunfo fue Apache.

Esperemos que lleguen a buen puerto me gusta como suena "Apache Groovy"


Dejo links:
http://glaforge.appspot.com/article/groovy-projects-intends-to-join-the-apache-software-foundation

lunes, 2 de marzo de 2015

Dropwizard vs. Spring Boot


Hace poco escribí sobre Spring Boot, una forma de crear proyectos rápidamente. Y me gusto mucho la comparativa Dropwizard vs. Spring Boot. A la vez no conocía Dropwizard, y le voy a prestar más atención.

Dejo link: http://blog.takipi.com/java-bootstrap-dropwizard-vs-spring-boot/

domingo, 1 de marzo de 2015

Crear Proyecto de consola en Qt creator

Vamos hacer un proyecto de consola en Qt Creator.

Abrimos Qt creator y vamos a:

File → New File or Project

Y se mostrara la siguiente pantalla:



Elegir Non-Qt Project/Plain C++ Project. Luego se debe ingresar el nombre de la aplicación y donde se va a guardar. 


Luego se debe indicar, donde se van a generar los archivos de compilación.


Luego se debe indicar si se va utilizar algún software de control de versión. 


Luego se debe programar:


Para correr el software se debe utilizar el botón triangular verde:


Para correr el software en modo debug se debe utilizar el botón:


20 sitios para aprender IOS


No soy muy amante de IOS, pero en la vocación de compartir recursos del blog, este post viene bien. La verdad que podria hacer algo similar de otros lenguajes o plataformas.

Volviendo al tema, dejo link: http://www.thewildblogger.com/2015/03/learn-ios-programming-and-development.html

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: