Translate

martes, 25 de junio de 2013

Bigdata University



La verdad que la gente de IBM se paso con el sitio
bigdata university, es un sitio donde uno puede tomar cursos gratuitos sobre bigdata y db2.


Esta muy bueno! Lo recomiendo.


Dejo un video:


Dejo el link:
http://bigdatauniversity.com/

DB2 Express ahora cuenta con 16 GB de RAM


Hace tiempo vengo promocionando DB2 Express, por que? porque de las versiones express de base de datos comerciales me parece una de las mejores; además esta orientada al aprendizaje.

Leyendo infoQ me encuentro con la noticia que la nueva versión de DB2 Express nos permite utilizar 16 gigas de memoria. IBM ha flexibilizado las restricciones de memoria en la versión gratuita de su base de datos. La versión 10.5 de DB2 Express-C puede ahora utilizar hasta 16 GB de RAM. El producto ya permitía utilizar espacio ilimitados en disco, pero se limita a un único socket (2 núcleos).

Por el contrario, SQL Server Express se limita a 1 socket (4 núcleos), 1 GB de RAM y 10 GB de almacenamiento. Oracle 11g Express es igualmente restrictiva con 1 CPU, 1 GB de RAM y 11 GB de storage.DB2 está disponible para Windows (x86/x64), Linux (x86, x64, Power Systems), Solaris y OS X. DB2 puede ser gestionado desde la consola o con la herramienta gratuita, IBM Data Studio.

Ya se lo que van a opinar, porque no Postgres o MySQL y tienen razón. Antes que un producto express, mejor un producto open source con una comunidad. Eso no lo discuto! Lo que simplemente opino es que si queremos aprender un producto comercial, porque pensamos comprarlo o porque en nuestra empresa lo utiliza. DB2 Express es muy bueno!

La verdad es que hace mucho que no lo utilizo, pero es una buena oportunidad.

Dejo links:
http://www.infoq.com/news/2013/06/DB2-Express-RAM
http://www.db2teamblog.com
https://www14.software.ibm.com/webapp/iwm/web/pick.do?source=swg-db2expressc&S_CMP=db2teamblog


Scala Days 2013


En Parley han publicado las charlas de scala days 2013, todas las charlas estan muy buenas!!

Dejo link:
http://www.parleys.com/channel/51ae1022e4b01033a7e4b6ca/presentations

domingo, 23 de junio de 2013

Probando Ubuntu 13.04

Tanto tanto hablaron de Ubuntu 13.04 que se me dio por probarlo, y la verdad me gusto, no mucho. Ya saben no me llevo bien con Unity pero bue...

Muchos cambios! Si quieren verlos les dejo un buen resumen: http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_13.04. Pero de igual forma no existen cambios que nos muevan el piso, a mi parecer ubuntu sigue el mismo camino. Y eso esta muy bueno!

Dejo links:
http://www.ubuntu.com/download/desktop
http://releases.ubuntu.com/raring/
http://usemoslinux.blogspot.com/2013/05/que-hacer-despues-de-instalar-ubuntu.html (es muy bueno)


Dejo pantallas:






  

Bottle: Python Web Framework


Se acuerdan de Sinatra? no el cantante! Sinatra el framework web de ruby; básicamente la idea es poder hacer una pagina web con muy poco esfuerzo. Es como un DSL para realizar paginas web; para que puede servir esto? para hacer prototipos o tambien puede ser muy practico para colgar servicios rest con json y consumirlo con javascript. La idea de sinatra  se extrapolo a otros frameworks, tecnologias y lenguajes; como por ejemplo Bottle que es el sinatra para Python.

Bottle es un micro framework rápido, sencillo y ligero para Python. Se distribuye como un módulo y esta formado por un único archivo y no tiene dependencias distintas de la biblioteca estándar de Python.

Veamos un ejemplo de un hola mundo con bottle:

from bottle import route, run, template

@route('/hello/<name>')
def index(name='World'):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

Y listo tenemos una pagina!

Como podemos ver en ejemplo por medio de @route indicamos la url y le decimos que nos van a pasar el nombre por la url, es decir usamos url restfull. Luego retornamos la pagina web. Podemos formar json y devolver json para hacer una API Rest o podemos utilizar template para hacer paginas webs. Genial!

Y si enviamos un mensaje con este framework va a ser...


Dejo link:
http://bottlepy.org
http://bottlepy.org/docs/dev/index.html


viernes, 21 de junio de 2013

The People Who Support Linux: You

La gente de linux.com compartió una genial infografía que describe quienes participan en el proyecto Linux:

Dejo el link:
http://www.linux.com/news/featured-blogs/185-jennifer-cloer/724867-the-people-who-support-linux-you

Dejo la infografía:

infogfx people linux final

miércoles, 19 de junio de 2013

Huayra, el linux más Argentino que el mate!


En visperas del día de la bandera vamos a hablar de un Linux Argentino, como Peron, como el mate, como nosotros.  Esté es el sistema operativo que se utiliza en las netbooks  de el programa del gobierno "conectar igualdad", no voy a dar mi opinión sobre este programa. Pero si les dejo esta reseña del sistema operativo:

Basado en Debian GNU/Linux, Huayra es más seguro, más ágil y desarrollado en Argentina teniendo en cuenta las necesidades tantos de estudiantes como de docentes y manteniendo nuestra identidad nacional. Huayra  toma su nombre del vocablo quechua que significa viento: viento de cambios, vientos de libertad, vientos de soberanía tecnológica. Además de ser un sistema operativo libre, Huayra ha sido pensado y desarrollado para el uso de la comunidad educativa. A través de él puede accederse a una gran variedad de programas y aplicaciones educativas.  

Es un tanto extraño el termino soberanía tecnológica; pero bueno la verdad es que es muy bueno que se haya optado por una alternativa libre y se haya decidio invertir en software libre. En mi opinión es un buena decisión.

Un poco de info técnica:

Para ello decidimos basarnos en Debian, una distribución de GNU/Linux que:

  • - Permite ser adaptada a necesidades propias para diseñar distribuciones específicas.
  • - No depende de ninguna empresa o corporación y sus formas de gobierno se encuentran documentadas y son permeables al ingreso de nuevos actores.
  • - Posee cerca de 25 mil paquetes de software y soporta más de 10 arquitecturas de hardware.
  • - Cuenta con un gran comunidad de voluntarios a nivel mundial.
  • - Posee un sistema de control de calidad fiable y bien documentado.
  • - Es la metadistribución origen de otras grandes distribuciones como Ubuntu, Guadalinex, Canaima, Knopix, etc.

Detalles Técnicos de Huayra

  • - Basada en Debian
  • - Entorno de escritorio: Gnome Shell
  • - Licencia: Mayormente GNU GPL
  • - Repositorios propios y abiertos
  • - Documentación propia
  • - Tema de ventanas propio


Dejo link:
http://huayra.conectarigualdad.gob.ar/
http://www.conectarigualdad.gob.ar/

domingo, 16 de junio de 2013

Que curso puedo hacer?

Que curso puedo hacer? y si hago este o aquel curso, sera difícil, fácil, cuantas horas me puede llevar por semana?

Para responder estas preguntas existen redes sociales de cursos on line... Muy bueno! Donde la gente opina de cursos que ha hecho y deja su puntuación,  además agrega cuantas horas le consume y que dificultad tiene.

Dejo los links:
http://knollop.com/
http://coursetalk.org/

Simplify IT and Unleash Innovation




Oracle nos regala una guía para simplificar nuestro trabajo, obviamente con sus productos; pero vale la pena darle una ojeada. Lo único malo es que hay que hacerse un usuario, es gratuito, pero hay que hacerlo :(











Dejo el link:
http://www.oracle.com/webapps/dialogue/ns/dlgwelcome.jsp?p_ext=Y&p_dlg_id=11705213&src=7011103&Act=103

sábado, 15 de junio de 2013

Racket


Como les aconseje en el siguiente post : http://emanuelpeg.blogspot.com.ar/2013/06/introduction-to-systematic-program.html; un curso que esta muy bueno en cursera es "Introduction to Systematic Program Design". En este curso se utiliza el lenguaje Racket.

Racket es un lenguaje de la familia de lisp/scheme, multiparadigma y es un lenguaje de propósito general que se utiliza para la enseñanza, investigación y para cualquier otra cosa. Tiene un entorno que se llama DrRacket, funciona en diferentes plataformas; yo lo estoy corriendo en Linux sin problemas.

Como se pueden imaginar al ser un lenguaje derivado de lisp es funcional, pero también fue influido por scheme y eiffel. De este ultimo toma la programación dirigida por contratos. A la vez soporta macros y es muy extensible. Una cosa curiosa es que soporta elementos gráficos, en realidad me resulta curioso a mi, podemos hacer esto:

(require 2htdp/image)
(triangle 80 'solid 'red)

y dibujara un triangulo.

Esta muy bueno para enseñar programación funcional y también para introducir a los alumnos a programación dirigida por contratos.

También tiene funciones similares a doctest de python es decir podemos hacer:

;; devuelve la suma de dos nros
(check-expect (suma 2 3) 5)
(check-expect (suma 5 3) 8)
(check-expect (suma 2 30) 32)
(check-expect (suma 2 -3) -1)

(define (suma nro1 nro2)
  (+ nro1 nro2)
 )

y haciendo esto la ide nos devolverá: "All 4 tests passed!"

Es lanzado con licencia LGPL por lo tanto lo podemos usar para hacer proyectos GPL y también comerciales.

Dejo links:
http://racket-lang.org/
https://en.wikipedia.org/wiki/Racket_(programming_language)

Dejo unas fotos de la IDE:



Javapocalypse

Un divertido vídeo de javaZone:


jueves, 13 de junio de 2013

martes, 11 de junio de 2013

Aprender couchdase

Si queres aprender couchbase solo tenes que ir a:  http://www.couchbase.com/learn donde podrás encontrar mucha información, webinars, papers,  presentaciones.

domingo, 9 de junio de 2013

Introduction to Systematic Program Design

Quiero recomendar el siguiente curso de coursera "Introduction to Systematic Program Design", que explica como diseñar programas. Esta muy orientado a la programación funcional, se usa un lenguaje llamado racket que es un derivado de Lisp, también se basa en un libro: "How to Design Programs". A primera vista esta muy bueno.

Dejo un video:


Dejo links:
https://class.coursera.org/programdesign-001
http://www.ccs.neu.edu/home/matthias/HtDP2e/
http://htdp.org/
http://racket-lang.org/


Libro oficial del administrador de Debian en español para su descarga


Quiero compartir este libro que es gratuito y vale la pena su difusión.

Dejo el link:
http://www.4shared.com/office/iY4NOc8Z/Hertzog_R__Mas_R_-_El_libro_de.html

y la fuente:

http://www.rinconinformatico.net/libro-oficial-del-administrador-de-debian-en-espanol-para-su-descarga/

sábado, 8 de junio de 2013

Las Ides del futuro...

Leyendo infoQ me encontre con una noticia de una idea que se desarrollo sobre OpenGL, me parecio buena pero muy inutil. La verdad es que creo que no hay mayores inovaciones en los entornos de desarrollo.  No he utilizado IntelliJ que según lo que sé esta bastante bueno. Que agregarían a las IDES del futuro?

Dejo video:


Dejo link:

10 cosas que un desarrollador debe conocer de couchdase

Couchdase es un producto que nació como la fusión de memdase y couchDB. La empresa Membase Inc. anuncio que se funcionaría con CouchOne. Uniendo también sus productos memdase y couchDB.

Como desarrolladores debemos saber los siguientes 10 items:


  • Acceso a los documentos en Couchbase es consistente: Couchbase garantiza una fuerte consistencia, asegurándose de que todas las lecturas y escrituras de un documento en particular van a un solo nodo de un clúster. 
  • Las escrituras son asíncronas por defecto, pero se puede controlar: Por defecto, las escrituras en Couchbase son asíncronas - replicación y persistencia suceden en background, y el cliente es notificado de un éxito o un fallo. Los cambios se guardan en la memoria y se vacían en el disco y replican en otros nodos Couchbase de forma asíncrona.
  • Couchbase tiene operaciones atómicas para contar y anexar
  • Un cubo es equivalente a una base de datos. Puede almacenar objetos de características o atributos diferentes en el mismo cubo. Así que si usted se está moviendo de un RDBMS, debe almacenar los registros de varias tablas en un solo cubo. Recuerde que debe crear un atributo "type" que ayudará a diferenciar los distintos objetos almacenados en el cubo y crear índices en ellos. Se recomienda comenzar con un cubo y crecer a más grupos cuando sea necesario
  • Trate de usar 5 o menos cubos en Couchbase. Nunca más de 10: Documentos no tienen un esquema fijo, varios documentos con diferentes esquemas pueden estar en el mismo cubo. La mayoría de las implementaciones tienen un bajo número de cubos (normalmente 2 ó 3) y sólo unos pocos más de 5. Aunque no existe un límite duro en el software, el máximo de 10 cubos previene problemas de performance.
  • El bloqueo optimista o pesimista, ¿cuál debería elegir? Si su aplicación necesita de bloqueo, considere primero el uso de CAS (bloqueo optimista) antes de usar (bloqueo pesimista) GETL. Pero recuerde, bloqueo no puede ser bueno para todos los casos.
  • Utilice las operaciones multi-get: Una vez que la aplicación cliente tiene una lista de los ID de documento, el enfoque de mayor rendimiento para recuperar artículos a granel con una petición de varios GET. Esto funciona mejor que un bucle de serie que trata de obtener para cada elemento de forma individual y de forma secuencial.
  • Mantenga las bibliotecas de cliente actualizadas: Asegúrese de que usted está utilizando la biblioteca de cliente más reciente. Bibliotecas de cliente Couchbase están disponibles en Java,. NET, C / C + +, Ruby, Python y PHP.
  • Modelar los datos mediante documentos JSON: Couchbase Server es compatible con JSON y el formato de documento binario. En primer lugar, tratar de modelar sus datos mediante JSON. Documentos JSON se pueden indexar y consultar. Puede almacenar blobs binarios y consulta gama off de los nombres clave. Comience por la creación de documentos de objetos a nivel de aplicación.
  • Utilice índices efectivamente: Use acceso clave primaria tanto como sea posible. Couchbase tiene claves y metadatos en la memoria - accesos de datos son rápidos.
Dejo link:



jueves, 6 de junio de 2013

Limitar un conjunto de datos agrupados




El problema es simple,queremos los 5 primeros mails de las personas, tenemos una tabla personas y una tabla mails. y la tabla mails conoce a la tabla personas.  Algo importante es que queremos los últimos mails, es decir los más nuevos.


Como podemos solucionar esto? con oracle la tenemos fácil porque existe el rank, la función rank va rankeando los resultados de una query, los rankea por una condición; por ejemplo los mails por persona:


SELECT RANK () OVER (PARTITION BY persona_id ORDER BY fecha DESC) orden,
persona_id,
email
FROM emails

Ahora bien si queremos limitar la cantidad de mails debemos hacer:

select persona_id, email from
(SELECT RANK () OVER (PARTITION BY persona_id ORDER BY fecha DESC) orden,
persona_id,
email
FROM emails)
WHERE orden < 5

Se pueden hacer muchas cosas muy buenas con rank y over. Over se puede utilizar también con el count.

Y todo gracias a Facundo Torres!!

Dejo links:
http://www.techonthenet.com/oracle/functions/rank.php
http://www.orafaq.com/node/55
http://www.oracle-base.com/articles/misc/rank-dense-rank-first-last-analytic-functions.php

miércoles, 5 de junio de 2013

Spring Framework 4.0 fue anunciado

La gente de spring no para y anuncia una nueva versión de su framework; que al parecer va tener su primer release candidate en septiembre de este año. Y es sorprendente si tenemos en cuenta que es un cambio importante de versión, con soporte a Java 8 y JEE 7, más un plus de funcionalidad.

Spring sigue creciendo, que se viene? Soporte a Java 8 es decir:

  • JSR-335 Lambda expressions.
  • JSR-310 La nueva Api de fechas de java 8
  • Y soporte al nuevo bytecode de java 8, para soportar Lambdas. 

Soporte a JEE 7 es decir:

  • JSR-343 JMS 2.0.
  • JSR-338 JPA 2.1.
  • JSR-349 Bean Validation 1.1.
  • JSR-236 Java EE 7 Enterprise Concurrency support.
  • JSR-356 Spring's WebSocket endpoint mode.

Que más agregar? Esperamos con ansias esta nueva versión.

Dejo link:
http://blog.springsource.org/2013/05/21/spring-framework-4-0-m1-3-2-3-available/
http://www.infoq.com/news/2013/06/Spring_Framework_4.0_Announced

martes, 4 de junio de 2013

Distro Picker, una gran idea para saber cual es tu distro ideal


Seguro que no sabes que instalar, te gustan todas las distros de linux. Algo que te puede ayudar es el Distro Picker. Es muy facil de usar, completas que escritorio te gusta más, que manejador de paquetes, para que lo vas a utilizar y listo. Te tira tu distro ideal.

Dejo link:
http://tuxradar.com/content/distro-picker-0

Manual de Ubuntu


Si instalaste ubuntu y no tenes idea de la vida, ni que es linux este manual es para vos. Un manual para principiantes y totalmente en castellano

Dejo link:
http://issuu.com/jarodriguez/docs/manual_ubuntu

99 Bottles of Beer


Como sabrán me gusta muchos los lenguajes de programación pero mucho más la cerveza. Por lo tanto quiero compartir el siguiente sitio que trata de lenguajes de programación aunque su nombre referencia a la cerveza.

En este sitio se recopilan ejemplos de un programa que debe imprimir la letra de la canción: 99 Bottles of Beer. Fácilmente en este sitio podemos comparar lenguajes de programación.

Dejo el link:
http://www.99-bottles-of-beer.net


domingo, 2 de junio de 2013

Processing

Processing es un lenguaje de programación y entorno de desarrollo de código abierto para las personas que desean crear imágenes, animaciones e interacciones. Desarrollado inicialmente con el objetivo de generar bocetos de software y para enseñar los fundamentos de la programación informática en un contexto visual, Processing se fue convirtiendo en una herramienta para la generación de trabajo real y profesional. Hoy en día, hay decenas de miles de estudiantes, artistas, diseñadores, investigadores y aficionados que utilizan processing para el aprendizaje, creación de prototipos de software y generación de software real.

Bueno pero que se puede hacer con Processing? Todo lo que tenga que ver con manipulación de imagenes, animaciones, etc. Les dejo unos vídeos:






Dejo link:
http://www.processing.org/

sábado, 1 de junio de 2013

La historia de los lenguajes de programación en Infrografía.

Historia de lenguajes de programación

Interesante infografía de BigData

Los últimos avances en Neo4j


Leyendo InfoQ me encontré con un articulo sobre los avances de Neo4j. Neo4j anuncio su versión 1.9 y 2.0; y también anuncio un nuevo proyecto, Neo4j para Android.

Que trae de nuevo Neo4j 1.9?

  • Mejora en tolerancia de fallos.
  • El Cypher (Lenguaje de consulta de Neo4j) creo nuevas funciones: manejo de cadenas, REDUCE y TIMESTAMP.
  • Mejor copia de seguridad para la versión empresarial, que ahora detecta si el total o una copia de seguridad incremental es necesaria.
  • Mejora de la capacidad de memoria y el rendimiento.

Neo4j 1.9 necesita el jre 1.7 para correr.

Es grandioso ver como va creciendo esta base de datos NoSQL.

Dejo link:
http://www.infoq.com/news/2013/05/neo4j-1-9-2-0
http://blog.neo4j.org/2013/05/neo4j-19-general-availability.html
https://github.com/neo4j-contrib/neo4j-mobile-android


jueves, 30 de mayo de 2013

Tour de Go



Mirando GenbetaDev me tope con una nota de recursos de Go y el que más me gusto fue Tour de Go (igual  dejo el link de la nota completa). El Tour de Go esta bueno porque es fácil y te explica con ejemplo como funciona el lenguaje. Recordemos que Go es el lenguaje de Google que esta creciendo día a día.

Dejo links:
http://go-tour-es.appspot.com/#1
http://www.genbetadev.com/lenguajes-y-plataformas/empezar-a-aprender-go-golang

Linux Mint 15 “Olivia” released!



Como sabrán me encanta Mint, y estoy orgulloso de presentales a Olivia la nueva versión de sistema operativo, que hay de nuevo, viejo?

  • Mate 1.6
  • Cinnamon 1.8
  • Dos nuevas herramientas "Software Sources" y "Driver Manager"
  • y un montón de mejoras y bug fixing!

Lo estoy bajando, espero que hagan lo mismo!

Dejo link:
http://blog.linuxmint.com/?p=2366
http://linuxmint.com/rel_olivia_whatsnew.php
http://www.linuxmint.com/

Dejo algunas pantallas:


Y también le dedico una canción:


martes, 28 de mayo de 2013

REFERENCE CARDS for MongoDB


La gente de 10gen nos dejo un resumen sobre su base de datos NoSQL, MongoDB y lo quiero compartir con ustedes.

Dejo link:
http://info.10gen.com/rs/10gen/images/mongodb_qrc_booklet.pdf

Rapid Prototyping with JS



Quiero compartir el siguiente tutorial, casi libro, sobre como hacer prototipos en javascript rápidamente. Utiliza jquery, Underscore.js y Backbone.js que los 2 últimos no los he usado.

Dejo link:
https://leanpub.com/rapid-prototyping-with-js/read

domingo, 26 de mayo de 2013

Continuamos con Erlang

Agner Krarup Erlang (1 de enero de 1878 – 3 de febrero de 1929) fue un matemático, estadista, e ingeniero danés que inventó los campos de Ingeniería de tráfico (Telecomunicaciones) y la Teoría de Colas. En su honor bautizaron al lenguaje de programación Erlang con su apellido.

Se acuerdan del post: http://emanuelpeg.blogspot.com.ar/2013/05/vistazo-erlang.html bueno vamos a seguir dándole un vistazo a Erlang.

Las variables en Erlang son un tanto diferentes que otros lenguajes; al ser un lenguaje funcional solo se le pueden asignar valores a varible solo una vez. Es decir que las variables no pueden variar :P

Si necesitamos asignar otro valor, necesitamos otra variable.

3> Integer = 4.
4
4> Integer = Integer + 5.
** exception error: no match of right hand side value 9
5>

Como se puede ver las variables en Erlang comienzan con mayúsculas y pueden contener letras y números. También es importante notar que no indicamos el tipo sino que el compilador lo infiere. 

12> Double2 = 3.5.
3.5
13> Double4 = 3.5 + Double2. 
7.0
14> 
14> Texto = "hola".
"hola"
15> 

Erlang nos ofrece una estructura de datos compleja para poder representar la realidad. 

15> Programadores = [ {person,"Juan","Gomez", 
15>  {lenguajes, [java,python] }
15> },
15> {person,"Pedro","Gomez",
15> {lenguajes, [java,python,erlang] }
15> }].                        
[{person,"Juan","Gomez",{lenguajes,[java,python]}},
 {person,"Pedro","Gomez",{lenguajes,[java,python,erlang]}}]

Hasta acá llegamos por hoy, pero continuaremos aprendiendo este fascinante lenguaje. 

Martin Odersky esta trabajando en un nuevo curso!

En el blog normalmente no somos cholulos, pero en este caso voy a hacer una excepción. Parece ser que Martin Odersky esta trabajando en un nuevo curso en coursera, sobre scala. La verdad es que es toda la información que tengo; pero ya nos vamos a enterar más.

Martin Odersky escribió en su twitter que esta trabajando en un nuevo curso; dejo la conversación:

 

martes, 21 de mayo de 2013

Elixir un lenguaje que corre en la vm de Erlang



Elixir es un meta-lenguaje de programación, es funcional construido sobre la máquina virtual de Erlang. Se trata de un lenguaje dinámico con una sintaxis flexible y apoyado en macros; que aprovecha las capacidades de Erlang para construir aplicaciones concurrentes y distribuidas, tolerables a fallos, con actualizaciones de código en caliente.

Elixir también soporta pattern matching, el polimorfismo a través de protocolos (similar a Clojure), alias y estructuras de datos asociativos (generalmente conocido como hashes en otros lenguajes de programación).

Por último, Elixir y Erlang comparten el mismo código de bytes y de datos. Esto significa que puede invocar código Erlang de Elixir (y viceversa) sin ningún tipo de transformación o impacto en el rendimiento. Esto permite a los desarrolladores mezclar la expresividad de Elixir con la robustez y el rendimiento de Erlang.

Dejo links:
http://elixir-lang.org/
http://en.wikipedia.org/wiki/Elixir_(programming_language)

domingo, 19 de mayo de 2013

Vistazo a Erlang

Erlang es un lenguaje funcional del cual ya hablamos muchas veces. Por que es tan importante? Porque agrega el concepto de actores, una forma mucho más elegante de resolver el problema de la concurrencia. Hice varios post sobre esto, pero Erlang no es solo importante por los Actores sino por un sin fin de características que lo hacen muy particular.

Erlang no es solo un lenguaje también es una tecnología; dado que cuenta con maquina virtual, un middleware OTP y librerías. Muchas empresas utilizan erlang; pero tal vez se hizo famoso porque se utilizo en el desarrollo de la base de datos NoSQL llamada couchDB.

Erlang es un lenguaje funcional con lo que eso significa por lo tanto tiene transparencia referencial y es declarativo. Erlang fue pensado como un lenguaje que debe correr de forma concurrente y distribuida; eso explica su diseño. A la vez esta basado en convenciones lo que hace que este lenguaje sea muy practico.

Erlang es software libre y se encuentra en los repositorios de linux por lo tanto se puede instalar de la siguiente manera en distribuciones basadas en debian:

apt-get install erlang

En rhel:

yum install erlang

Si vamos a una terminal y ponemos erl vamos a abrir el interprete de erlang. Con el podemos sumar, multiplicar, dividir, etc :

1> 2 + 2.
4
2> (4 + 5) * 2.
18
3> (12 + 3) div 5.
3
4> (12 + 3) / 5.
3.00000
 
En estos ejemplos podemos ver que el delimitador de las sentencias es el “.” como smalltalk. A la vez se puede ver la diferencia de / con div que div nos de vuelve un valor entero.  Podemos seguir jugando  con la consola:

4> 'Hola mundo'.
 'Hola mundo'
5> 1==2.
false
6> not ((1<3) and (2==2)).
false
7> tuple_size({1,{1,2,3},2})
3

Bueno en los siguientes ejemplos podemos ver como se manejan booleanos, similar que otros lenguajes y también podemos ver un ejemplo de tuplas, las tuplas son un conjunto de elementos de igual o distinto tipo similares a las Listas. Las listas en erlang se definen con los corchetes [] vemos ejemplos:

8> []
[]
9> [1, 2, [2, “hola”, 5], 4]
 [1, 2, [2, “hola”, 5], 4]

En Erlang los string son listas de caracteres que se pueden definir con “”. Es decir que “” es igual a []. Los caracteres son representados por medio del simbolo $ y también con el numero del carácter.

10> [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
“Hello Word”
11> [$H, $e, $l, $l, $o, $ , $W, $o, $r, $d]
“Hello Word”

Erlang tienen un conjunto muy amplio de funciones con listas:

12> lists:max([1, 2, 3])
3
13> lists:reverse([1, 2, 3])
[3,2,1]
13> lists:sort([1, 3, 2])
[1, 2, 3]
14> lists:sum([1, 2, 3, 4])
10
15> [1, 2, 3, 4] ++ [5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]
16> [1, 2, 3, 4] -- [3, 4]
[1, 2]

Y eso es todo, los deje con ganas de más?

Dejo link:
http://www.erlang.org/

jueves, 16 de mayo de 2013

Un muy buen blog Pybonacci



El blog aconsejado para esta semana es pybonacci es muy bueno, el centro de este blog es la comunidad cientifica que utiliza python. Muy bueno!!

Dejo link:
http://pybonacci.wordpress.com/

miércoles, 15 de mayo de 2013

Colecciones de datos en Oracle




No me gusta mucho la empresa Oracle, ni su base de datos, pero hay que reconocer que tiene cosas fuera de serie. Ojo esta funcionalidad no es ninguna novedad es de 10g; pero es una novedad para mi. :P

Explico el problema, en ciertos casos tenemos que mostrar datos agrupados pero estos se pueden repetir, por lo tanto generan una nueva fila y nosotros no queremos esto. Los complique! Vamos con un ejemplo que es más fácil  tengo una tabla persona y esta persona tiene mails, uno o muchos. Quiero mostrar la persona y sus mails pero siempre tiene que haber una linea por persona. Ahora si?

En Oracle existe collect esta función nos permite agrupar datos, por ejemplo:


 SELECT p.nombre
    ,      COLLECT(m.mail) AS mails
 FROM   persona p, mails m
 WHERE p.id = m.persona_id
 GROUP  BY p.nombre;

Con esta sencilla query tengo la lista de mail por nombre de persona. Ahora quiero los mails que no se repiten:


 SELECT p.nombre
    ,      COLLECT( DISTINCT m.mail) AS mails
 FROM   persona p, mails m
 WHERE p.id = m.persona_id
 GROUP  BY p.nombre;

Si lo ejecutamos vamos a ver que no se muestra muy lindo, lo que podemos hacer es hacer un tipo y castearlo a ese tipo:

CREATE OR REPLACE TYPE varchar2_ntt AS TABLE OF VARCHAR2(4000);


 SELECT p.nombre
    ,      CAST(COLLECT( DISTINCT m.mail) AS varchar2_ntt) AS mails
 FROM   persona p, mails m
 WHERE p.id = m.persona_id
 GROUP  BY p.nombre;

Bueno ahora se ve mejor pero no esta de diez. Si queremos que quede pippicucu tenemos que hacer uns función. Es raro que oracle no proponga o tenga ninguna:


  CREATE FUNCTION to_string (
                    nt_in        IN varchar2_ntt,
                    delimiter_in IN VARCHAR2 DEFAULT ','
                   ) RETURN VARCHAR2 IS

     v_idx PLS_INTEGER;
     v_str VARCHAR2(32767);
     v_dlm VARCHAR2(10);

  BEGIN

      v_idx := nt_in.FIRST;
      WHILE v_idx IS NOT NULL LOOP
         v_str := v_str || v_dlm || nt_in(v_idx);
         v_dlm := delimiter_in;
         v_idx := nt_in.NEXT(v_idx);
      END LOOP;

      RETURN v_str;

 END to_string;
  /

Con esta función es todo más fácil:


SELECT p.nombre
    ,      to_string(CAST(COLLECT( DISTINCT m.mail) AS varchar2_ntt)) AS mails
 FROM   persona p, mails m
 WHERE p.id = m.persona_id
 GROUP  BY p.nombre;


Y si queremos que quede más cheto agregamos el separador como ', '


SELECT p.nombre
    ,      to_string(CAST(COLLECT( DISTINCT m.mail) AS varchar2_ntt),  ', ' ) AS mails
 FROM   persona p, mails m
 WHERE p.id = m.persona_id
 GROUP  BY p.nombre;

La verdad muy útil!!

Dejo link:
http://docs.oracle.com/cd/E11882_01/server.112/e10592/functions031.htm#i1271564
http://www.oracle-developer.net/display.php?id=306


domingo, 12 de mayo de 2013

Debian 7, un primer vistazo.

Me gusto, me gusto mucho. Lo instale en una virtual para probarlo y anduvo de maravilla a pesar que el hardware no era mucho. Fue fácil de instalar, ya te organiza los volúmenes lógicos, y muy liviano y rápido  Simplemente Debian!

Dejo unas pantallas:





sábado, 11 de mayo de 2013

Python vs. PHP


Las comparaciones son odiosas, pero en el blog siempre comparamos los lenguajes :P

Les quiero dejar un link sobre una comparación entre Python y PHP:

http://wiki.python.org/moin/PythonVsPhp