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

miércoles, 8 de mayo de 2013

The Structure of Spring (Core)


Les dejo un link que es una joyita, muestra la evolución de spring y su estructura; muy bueno!

Dejo link:
http://java.dzone.com/articles/structure-spring-core

Try Objective-C

Placeholder

Un nuevo curso gratuito de la gente de codescholl, el titulo lo dice todo, no? El curso nos enseña sobre el lenguaje de la empresa Apple que no permite programar para la plataforma IOS.

Dejo link:
http://www.codeschool.com/courses/try-objective-c

Que tiene que tener el lenguaje de programación perfecto?

Esta es una pregunta que se me ocurrió mientras leía sobre modularidad de Ceylon y me parece una gran idea. Que más se les ocurre?

Anoto mi lista y después voy agregando:

Modularidad similar a Ceylon
Funcional y objetos similar a Scala
Actores similar a Erlang o Scala
Closures,  Objetos, Reflexion similar a SmallTalk, Ruby, Scala, etc...
Inyección como noop
Recolector de basura
Interpolación de String: "Hello ${foo}"
Doctest de python
Bytecode como Java o SmallTalk o ...
Comprehensiones como Python
Contratos como Eiffel
Sintaxis muy limpia como python
Código se pueda leer y entender fácil y rápido
Fácil de aprender
Generador de documentación automático

Que más? que más? Me ayudan a organizar las características del mejor lenguaje?

Módulos en Ceylon

Ya hablamos bastante de Ceylon, para los que no se acuerdan; es un lenguaje creado por la empresa Red Hat que corre en la plataforma Java.

Porque puede ser tan especial este lenguaje? Por muchas razones, hoy vamos a ver una que me parece que es una de las mejores ideas de los Lenguajes que corren en la plataforma Java. Y es la módularidad, esto lo tenemos en java por medio de herramientas o frameworks, nosotros en java podemos indicar con maven o Ivy por ejemplo la versión de la librería que vamos a utilizar.

Ceylon en cambio nos permite hacer esto a nivel lenguaje por medio de los módulos  El código es organizado dentro de paquetes y módulos. Con Ceylon obtenemos una módularidad real independiente de la herramienta que utilicemos para construir nuestra aplicación.  

Veamos un ejemplo de modulo:


module com.osintegrators.example.ceylon.hello '1.0.0' {

import ceylon.net '0.5';

import ceylon.dbc '0.5';

import java.jdbc '7';

import java.base '7';

}

Dejo link:
http://ceylon-lang.org/features/
http://m.infoworld.com/d/application-development/first-look-gavin-kings-ceylon-217197

Libro gratuito de PHP




Para la gente que comienza con php un libro gratuito que los puede ayudar:

http://ocapunay.blogspot.com.ar/2013/04/libro-de-php.html

martes, 7 de mayo de 2013

Objects and functions, conflict without a cause?

Quiero compartir con ustedes este video que esta muy bueno. Martin Odersky nos explica como podemos llevar de la mano dos paradigmas que son totalmente distintos el funcional y el orientado a Objetos.


Dejo el link:
http://parleys.com/play/51704efce4b095cc56d8d4b5/chapter0/about

domingo, 5 de mayo de 2013

Llego Debian 7!


No estoy siendo muy original con la noticia, ya todos se hicieron eco de que Debian 7 fue liberado. Si bien esta versión no trae grandes sorpresas, si trae novedades muy buenas. Por ahí la que me pareció importante es que ahora permite instalar paquetes de diferentes arquitecturas, esto permite instalar software de 32 y 64 bits en la misma máquina, sin problemas de dependencias. Esto entre otras novedades, dejo las nuevas versiones:


  • Apache 2.2.22
  • Asterisk 1.8.13.1
  • GIMP 2.8.2
  • el entorno de escritorio GNOME 3.4
  • la colección de compiladores GNU 4.7.2
  • Icedove 10 (una versión sin marca de Mozilla Thunderbird)
  • Iceweasel 10 (una versión sin marca de Mozilla Firefox)
  • el entorno de escritorio KDE Plasma y las aplicaciones de KDE 4.8.4
  • Los núcleos kFreeBSD 8.3 y 9.0
  • LibreOffice 3.5.4
  • Linux 3.2
  • MySQL 5.5.30
  • Nagios 3.4.1
  • OpenJDK 6b27 y 7u3
  • Perl 5.14.2
  • PHP 5.4.4
  • PostgreSQL 9.1
  • Python 2.7.3 y 3.2.3
  • Samba 3.6.6
  • Tomcat 6.0.35 y 7.0.28
  • Hipervisor Xen 4.1.4
  • El entorno de escritorio Xfce 4.8
  • X.Org 7.7



A Descargar:

Migration Manager for Scala



Seguimos recorriendo el stack tecnológico de typesafe, ahora le toca a Mima (Migration Manager for Scala)   esta es una herramienta que nos permite verificar la compatibilidad entre librerías.

Mima analiza todos los archivos .class en el proyecto, detectar incompatibilidades. Con esta herramienta los programadores de librerías y frameworks pueden estar seguros de que las nuevas características se pueden integrar rápida y fácilmente en sus proyectos sin romper la compatibilidad con versiones anteriores. Además Mima puede trabajar como un plugin de SBT.

Migration Manager está actualmente bajo desarrollo, y ha sido publicado por Typesafe bajo la licencia Apache 2.0.

Dejo links:
http://typesafe.com/platform/tools/scala/mima
https://github.com/typesafehub/migration-manager#migration-manager-for-scala


jueves, 2 de mayo de 2013

Cambiamos a linux?

Si te preocupan tus aplicaciones windows, no te preocupes vas a encontrar mejores:

miércoles, 1 de mayo de 2013

Entendiendo a Debian

Se viene una nueva versión de Debian y es bueno entender un poco más para ello una infografía:


FoundationDB. NoSQL. YesACID.


Leyendo InfoQ me encuentro con esta base NoSQL llamada FoundationDB, que tiene de especial? es que nos promete transacciones! Es decir cumple con el conjunto de características ACID (Atomicity, Consistency, Isolation and Durability).  Como sabemos NoSQL normalmente no soporta ACID pero como beneficio nos brinda la posibilidad de escalar a muchos datos.

Como trabaja FoundationDB para ser NoSQL y ACID? Es por medio de lo que ellos llaman Layers (capas) Una capa puede proporcionar un modelo de datos nuevo, la compatibilidad con los sistemas existentes, o incluso servir como un marco completo.

Varias capas se pueden utilizar al mismo tiempo, lo que permite una base de datos única para consolidar varios almacenes de datos. FoundationDB soporta diferentes maneras de guardar datos o modelo de datos, pero todo termina siendo objetos clave valor.

Luego de buscar como una hora el licenciamiento, porque es su pagina no esta muy claro. Les dejo el link: http://foundationdb.com/BetaLicenseAgreement.pdf pero lejos de ser open source.

Dejo link:
http://www.infoq.com/news/2013/04/foundationdb-nosql-database
http://www.foundationdb.com/

Javascript y java un solo corazón



Leyendo InfoQ me tope con una interesante noticia, sobre javascript y java. Se ha anunciado una nueva implementación de javascript a la plataforma Java que utiliza la potencia de InvokeDynamic. Esta implementación se llama Dynjs.


Mientras tanto Oracle anuncio otra implementación llamada Nashorn y con la implementación ya conocida Rhino suman 3 y como se puede ver javascript se viene con todo y la plataforma java no quiere quedarse afuera. InvokeDynamic permite que se ejecute javascript con mayor performance utilizando closures de forma nativa.



Dejo links:
http://www.infoq.com/news/2011/10/dynjs
http://openjdk.java.net/projects/nashorn/
https://developer.mozilla.org/es/docs/Rhino
http://dynjs.org/

SLICK, accediendo a almacenes de datos con scala


Seguimos recorriendo el stack tecnológico de typesafe, y es hora de presentarles a Slick. Que es Slick? The Scala Language Integrated Connection Kit (Slick). Queda clarisimo, y para que sirve?  Bueno Slick sirve para conectarnos a bases de datos relacionales o NoSQL de forma fácil desde scala. Slick integra bases de datos en Scala, lo que permite almacenar, datos remotos consultados y procesados ​​de la misma manera que los datos en memoria.

Esto da la sensación de que trabajamos con colecciones, pero en realidad estamos trabajando con base de datos. Por lo tanto tenemos un mayor control de lo que sucede en la base de datos y no necesitamos escribir sql, sino que todo lo hacemos en scala.

Como Slick genera sql debe generarlo para una base en particular, es similar a lo que sucede en hibernate con los dialectos. Slick soporta actualmente las siguientes bases de datos:


  • DB/2
  • Derby/JavaDB
  • H2
  • HSQLDB/HyperSQL
  • Microsoft Access
  • Microsoft SQL Server
  • MySQL
  • Oracle
  • PostgreSQL
  • SQLite
Debido Slick proporciona una capa frontal que integra las consultas de manera transparente utilizando tipos Scala ordinarias, las consultas pueden ser procesadas ​​y validadas en tiempo de compilación. Usando Slick, los programadores pueden escribir directamente las consultas de base de datos en Scala, beneficiándose de la comprobación estática, seguridad en tiempo de compilación y composicionalidad de Scala. Slick también permite escribir consultas SQL y ejecutarlas con un API optimizado para Scala en lugar de utilizar JDBC.

Veamos un pequeño ejemplo:

object Coffees extends Table[(String, Int, Double)]("COFFEES") {
    def name = column[String]("COF_NAME", O.PrimaryKey)
    def supID = column[Int]("SUP_ID")
    def price = column[Double]("PRICE")
    def * = name ~ supID ~ price
  }
 
  Coffees.insertAll(
    ("Colombian",         101, 7.99),
    ("Colombian_Decaf",   101, 8.99),
    ("French_Roast_Decaf", 49, 9.99)
  )
 
  val q = for {
    c <- Coffees if c.supID === 101
    //                       ^ comparing Rep[Int] to Rep[Int]!
  } yield (c.name, c.price)
 
  println(q.selectStatement)
 
  q.foreach { case (n, p) => println(n + ": " + p) }

Se ve genial!!

Dejo link:

SBT, haciendo fácil la construcción de proyectos en scala


SBT es Simple Build Tool, una herramienta que permite crear proyectos Scala o java. Seria como el querido Maven. Es necesario para utilizarlo java 1.6 o superior entre sus características podemos destacar:


  • Creación fácil de proyectos simples
  •  .sbt que es como el pom.xml de maven, es el archivo de definición del proyecto y esta basado en DSL
  • Compilación continua y testing con triggered execution
  • Genera documentación con scaladoc
  • Genera y publica jars
  • Soporta proyectos que mezclan java y scala
  • Soporta subproyectos
  • Soporta correr tareas en diferentes hilos al mismo tiempo. Esto es genial!
  • Soporta diferentes administradores de librerías, se puede configurar con Apache Ivy o maven, etc.

Si hicieron el curso de programación funcional en scala seguro lo utilizaron. Y se puede ver que es muy fácil de usar.

Dejo link:
http://www.scala-sbt.org/#features