Translate
sábado, 1 de junio de 2013
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>
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:
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/
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:
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
Suscribirse a:
Entradas (Atom)