Translate

sábado, 11 de julio de 2015

Lisp en python = Hy

Imaginen programar en Lisp en la plataforma python, bueno eso es Hy. Hy transforma código Lisp en python y lo ejecuta en su plataforma. 

Algo que me llamo la atención es lo maduro que esta el proyecto y a la vez que han creado un nuevo lenguaje ya que tiene muchas cosas de python.

Veamos un ejemplo:

=> (print "Hy!")
Hy!
=> (defn salutationsnm [name] (print (+ "Hy " name "!")))
=> (salutationsnm "YourName")
Hy YourName!

Como ven tiene un RELP y tambien se puede probar código desde una pagina web.

Y como están pensando tiene interoperabilidad con python:

=> (import [sh [cat grep wc]])
=> (-> (cat "/usr/share/dict/words") (grep "-E" "^hy") (wc "-l"))
210

En el ejemplo importa python-sh y utiliza los comandos como si fueran del propio lenguaje. Claro todo termina siendo python.

Dejo link:
https://hy.readthedocs.org

Strongtalk


Strongtalk es un lenguaje derivado de smalltalk que promete mayor performance, según la pagina es la implementación más rápida de smalltalk.

Strongtalk es una vuelta de tuerca a smalltalk que como ventajas podemos enumerar:

  • Performance: StrongTalk es mucho más rápido dado que se ejecuta con tecnología type-feedback originalmente desarrollada por Sun Microsystem Labs
  • Type System: Utiliza un sistema de tipos estáticos, sisi estáticos de hay su nombre. 


Strongtalk es totalmente open source.

La desventaja es  que esta un tanto descontinuado. Pero creo que fue una gran idea :P

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

Certificar tus conocimientos en Mongo


Me llego este mail departe de la gente de MongoDB University:



Hi Pablo,

The July certification exams are coming up – don’t miss your chance to become a MongoDB certified professional! When you get certified, it proves that you’re a MongoDB expert. Sign up now to make sure you have time to prepare with our free resources!
Regards,

The MongoDB University Team
Share on FacebookShare on TwitterShare on LinkedInShare on Google+
MongoDB Inc., 2015. All rights reserved.
229 West 43rd Street 5th Floor New York, NY 10036
To view the online version click here.
To unsubscribe from future MongoDB emails or to update your MongoDB email preferences click here.


Como pueden leer, MongoDB University tuvo una gran idea, dar la posibilidad de certificar tus conocimientos en MongoDB. Al parecer haciendo un examen.

Lo unico que no me gusto fue que en los requerimientos de sistema dice:
Mac OS 10.6 or later or Windows 7 or later. Linux is not currently supported.

Como que no soporta Linux? Bajo examen y Baja actitud.

Sin más dejo los links:
https://university.mongodb.com/exams/C100DBA/about
https://university.mongodb.com/exams/C100DEV/about


jueves, 9 de julio de 2015

Seven More Languages in Seven Weeks: Languages That Are Shaping the Future

Alguna vez les hable del libro 7 lenguajes en 7 semanas, bueno las editorial The Pragmatic Bookshelf ha lanzado un nuevo libro con la misma temática. Los lenguajes a analizar son  Lua, Factor, Elm, Elixir, Julia, MiniKanren y Idris.

Y hasta tiene video y todo: 




Ya saben que regalarme!!

Dejo el link:
https://pragprog.com/book/7lang/seven-more-languages-in-seven-weeks


Una mirada a F#


Como ustedes saben microsoft dio un vuelco importante a su mirada al open source y yo dispuesto a evolucionar tambien me anime a cambiar y a mirar de forma diferente sus productos.

Por lo tanto hoy voy a probar F#. F# es supuestamente un derivado de ML, pero la verdad que por lo que vi es una involución.

Entre las ventajas podemos nombrar, es open source, es multiplataforma, fuertemente tipado y multiparadigma (objeto y funcional) aunque es sobre todo funcional. Por lo tanto se puede utilizar el modelo de objetos para mantener estados, y en las situaciones que es más fácil resolver el problema de forma funcional, se puede utilizar.

Mi primera impresión con el lenguaje es que es similar a C# pero se escriben las cosas de forma diferente, nada más pero es mi opinión.

Estoy hablando demasiado, veamos algo de código:

let mutable sum = 0
for i = 0 to 100 do
if i%2 <> 0 then sum <- sum + i
printfn "the sum of odd numbers from 0 to 100 is %A" sum

Este pedazo de código se puede apreciar que no es un lenguaje funcional puro sino que permite sentencias for y mutables.

Otros detalles:

  • el operador de asignación es el <- 
  • usa el if then como Pascal
  • el for tiene un inicio y final (o desde hasta) como pascal!
  • Con let declaramos los mutables (variables) o inmutables 

También tiene listas por compresión, veamos un ejemplo

let list2 = [for i=0 to 4 do yield i*i]

A la vez tiene secuencias y arreglos.

let array0 = [| 1 .. 10 |]

Los arreglos son bastante inteligentes:

 // get slice from element 2 through 6
array0.[2..6]
// get slice from element 4 to the end
array0.[4..]
// get the slice from the start to element 6
array0.[..6]
// get all the elements (copy the whole array)
array0.[*]

Una cosa muy interesante es  el operador |> que es similar al operador | de unix. Lo que permite es que el resultado de una función sea la entrada de otra de forma que componer funciones sea simple, veamos un ejemplo:

seq { 0..100 }
|> Seq.filter (fun n -> n%2<>0)
|> Seq.sum
|> printfn "the sum of odd number from 0 to 100 is %A"

Es hora de ver una clase en F#:

// define a Point2D class
type Point2D() =
     // define field x
     let mutable x = 0.0
   
     // define X property
     member this.X with get() = x
          and set(v) = x <- v

     // define Y property using an auto-implemented property
     member val Y = 0.0 with get, set

     // define a function to get the distance from the current point
     member this.GetDistance(point:Point2D) =
          let xDif = this.X - point.X
          let yDif = this.Y - point.Y
          let distance = sqrt(xDif**2. + yDif**2.)
          distance

La primera impresión es "como extraño los {} y el punto y coma. Y hace minutos los odiaba. Luego de esto podemos ver que se esta definiendo un nuevo tipo, es decir una clase en un tipo. Luego creo que todo es bastante entendible, se define una propiedad y sus geters y seters y luego la función que calcula la distancia.

También tiene monad y patter matching, mira:

type MyClass() =
          member this.PrintValue(?value:int) =
          match value with
                    | Some(n) -> printfn "value is %A" n
                    | None -> printfn "sorry, no value"

Muy a vuelo de pájaro fue una primera probada de F#

Dejo link:
http://fsharp.org/

miércoles, 8 de julio de 2015

Brython, Una implementación de Python para la programación web del lado del cliente


Como saben hoy en día existe una tendencia de hacer todo con un mismo lenguaje y cuando me refiero todo es todo, de esta forma nacen proyectos como Brython, que nos permite programar en javascript en el cliente.

Este framework permite utilizar python entre los tags </script> ingresando en tipo como "text/python".

Veamos un ejemplo:



<html>
<head>
<script src="/brython.js"></script>
</head>
<body onload="brython()">
<script type="text/python">
from browser import document, alert

def echo(ev):
    alert(document["zone"].value)

document['mybutton'].bind('click',echo)
</script>
<input id="zone"><button id="mybutton">click !</button>
</body>
</html>




Como podemos ver este lenguaje nos permite trabajar con HTML de forma transparente.

La mayor ventaja que tiene el uso de esta técnica es que sabiendo python podemos programar todo un proyecto.

Dejo link: http://www.brython.info/index.html

lunes, 6 de julio de 2015

¿Cómo Hacer una Tesis?


Este post esta bien fuera de tópico, pero quería comentarles que estoy leyendo el libro de Sabino, ¿Cómo Hacer una Tesis? Y se los recomiendo, es de muy fácil lectura, cortito y al pie.

Un buen resumen, se puede leer en sus primeras paginas:

"La primera versión de este libro, aparecida ya hace más de diez años, tuvo inmediatamente una acogida muy favorable entre estudiantes y
profesionales, pues estaba concebido para responder a las expectativas y preocupaciones de estudiantes y profesionales en general, sin limitaciones geográficas o de especialidad. Su lenguaje claro y su accesible redacción, la profusión de ejemplos y el modo ordenado en que se han dispuesto los materiales lo hacen especialmente indicado para las personas que no poseen mayor experiencia en el campo de la redacción o que, como es frecuente, tienen demasiadas experiencias frustrantes y negativas.

El propósito de la obra es ofrecer una guía práctica para elaborar tesis, trabajos científicos y, en general, todo tipo de escritos que no
pertenezcan a los géneros de ficción. Sus capítulos van llevando al lector paso a paso por todas las
numerosas etapas que hay que transitar para culminar con éxito la redacción de un libro, una tesis o una monografía."

Dejo link:
http://www.catedranaranja.com.ar/taller5/notas_T5/Como_hacer_una%20tesis-Sabino.pdf

sábado, 4 de julio de 2015

Community-driven documentation for Scala



Encontré un sitio muy interesante, tal vez es viejo y famoso, pero yo recién lo veo. Tiene un motonaso de recursos, hasta tutoriales en castellano.

Esta muy bueno!!


Dejo link:
http://docs.scala-lang.org/

miércoles, 1 de julio de 2015

Vert.x construyendo aplicaciones reactivas en jvm

Vert.x es un framework java para la construcción de aplicaciones asíncronas, basadas en eventos y no bloqueantes. Esto significa que con Vert.x podemos obtener aplicaciones concurrentes con un mínimo de complejidad, y un hardware mínimo.

Para ser más explicativo se compara Vert.x con Node.js, por lo que se puede inferir que Vert.x fue pensado para ser concurrente, asíncrono y barato.

Otra ventaja de este framework es que es poliglota es decir podemos escribir aplicaciones en varios lenguajes, veamos un ejemplo:

Java:

public class Server extends AbstractVerticle {
  public void start() {
    vertx.createHttpServer().requestHandler(req -> {
      req.response()
        .putHeader("content-type", "text/plain")
        .end("Hello from Vert.x!");
    }).listen(8080);
  }
}

Ruby:

vertx.create_http_server().request_handler() { |req|
  req.response()
    .put_header("content-type", "text/plain")
    .end("Hello from Vert.x!")
}.listen(8080)

Javascript:

vertx.createHttpServer()
  .requestHandler(function (req) {
    req.response()
      .putHeader("content-type", "text/plain")
      .end("Hello from Vert.x!");
}).listen(8080);

Groovy:

vertx.createHttpServer().requestHandler({ req ->
  req.response()
    .putHeader("Content-Type", "text/html")
    .end("Hello from Vert.x!")
}).listen(8080)

Como vemos Vert.x proporciona una API en varios lenguajes que da soporte.

Dejo link:
http://vertx.io/
http://vertx.io/docs/


lunes, 29 de junio de 2015

Introducción a la Programación con Python, Andrés Marzal & Isabel Gracia

Quiero recomendar el siguiente libro gratuito, con el siguiente me refiero a :Introducción a la Programación con Python de los autores: Andrés Marzal y Isabel Gracia.

A la vez aprovecho a recomendarles, el sitio www.freelibros.org que tiene muy buenos libros gratuitos, muy buenos.


Dado este consejo, les dejo el link:
http://www.freelibros.org/libros/introduccion-a-la-programacion-con-python-andres-marzal-isabel-gracia.html


viernes, 26 de junio de 2015

Esta disponible Eclipse Mars!!


Estoy bajando eclipse mars por lo que esta disponible!!
Entre otras cosas hay una mejora importante en la performance, sin más dejo los links:

http://www.eclipse.org/
https://projects.eclipse.org/releases/mars

miércoles, 24 de junio de 2015

ECMAScript 2015 esta aprobado

La Asamblea General de Ecma International ha anunciado la aprobación de ECMA-262 sexta edición, que es la especificación del lenguaje ECMAScript de 6 (ES6), también conocido como ECMAScript 2015.

JavaScript fue creado por Brendan Eich en el 95, pero necesitó 20 años para evolucionar algunas de las características que son populares en otros idiomas modernos. JavaScript no era un gran lenguaje para empezar, pero fue una gran idea: un lenguaje para el navegador. JavaScript llamar la atención de inmediato, que se somete a la estandarización del año siguiente, con la versión 1.0 que sale de Ecma en 1997, seguido por 2,0, con algunos cambios de menor importancia, en 1998, y luego 3,0, con algunas novedades, en 1999.

La noticia es porque se acaba de aprobar una nueva versión de este estandard, con lo que van a llegar nuevas funcionalidades a javascript.

dejo link: http://www.infoq.com/news/2015/06/ecmascript-2015-es6

sábado, 20 de junio de 2015

Cabal


Cabal es como maven pero para Haskell. Bien resumido...

Cabal es el sistema de paquetes estándar para el software de Haskell. Ayuda a la gente para configurar, compilar e instalar el software de Haskell y para distribuir fácilmente a otros usuarios y desarrolladores.

Es una herramienta de línea de comandos para trabajar con paquetes. Ayuda con la instalación de paquetes existentes y también ayuda a las personas que desarrollan sus propios paquetes. Se puede utilizar para trabajar con paquetes locales o instalar paquetes en línea, incluyendo la instalación de dependencias automáticamente. Por defecto está configurado para utilizar Hackage que es archivo paquete central de Haskell que contiene miles de bibliotecas y aplicaciones en el formato de paquete de Cabal.

Todo muy lindo pero como empezamos? bueno un buen comienzo es instalando cabal y luego cabal init ...

Dejo link:
https://www.haskell.org/cabal

viernes, 19 de junio de 2015

Traducción de Haskell a JavaScript de algunas partes de la mejor introducción a mónadas que jamás he leído


Que buen titulo!! y que real!!

Costo mucho conseguir esta explicación pero sin duda es la mejor. Si estas deseoso de saber que es un monad y para que se utiliza, por favor lee este articulo que lo deja más que claro.

Dejo link:
http://www.programania.net/diseno-de-software/traduccion-de-haskell-a-javascript-de-algunas-partes-de-la-mejor-introduccion-a-monadas-que-jamas-he-leido/

javascript.com


A la gente de codeschool, se les ocurrió hacer una pagina para promocionar javascript y así nació javascript .com

Que es una pagina para aprender este lenguaje, por ahora tiene un tutorial que se parece a un "try" pero seguramente que más adelante incorporen cosas más avanzadas.

Por ahora si no tenes ni idea de javascript y te gusta aprender este sitio es para vos!!

Dejo link:
https://www.javascript.com/


domingo, 14 de junio de 2015

Apache Parquet es Top-Level Apache Project


Leyendo infoQ, me entero que Apache Parquet es un top-level project. Para el que no sabe que es un top-level project, es como que la organización Apache nos aconseja que le demos importancia y que la organización le va a dar mayor prioridad.

Pero que es Apache Parquet? Básicamente es una base de datos o mejor dicho un almacén de datos basado en columna. Tiene la particularidad de que esta disponible para cualquier proyecto en el ecosistema Hadoop, independientemente de la elección del framework de procesamiento de datos, modelo de datos o lenguaje de programación.

Parquet está construido para soportar esquemas de compresión y codificación muy eficientes. Parquet permite esquemas de compresión que se especificarán a nivel de columna, y se pueden agregar más esquemas.


Dejo link: 

sábado, 13 de junio de 2015

La belleza del código bien escrito

qsort1 :: Ord a => [a] -> [a]
qsort1 []     = []
qsort1 (p:xs) = qsort1 lesser ++ [p] ++ qsort1 greater
    where
        lesser  = [ y | y <- xs, y < p ]
        greater = [ y | y <- xs, y >= p ]

Cuando uno ve este algoritmo en Haskell nota claramente que programar de forma declarativa tiene sus recompensas. Este algoritmo (para el que no se dio cuenta) es el quicksort.

El algoritmo nos indica (usando pattern matching) que si viene una lista vacía, retorne una lista vacía. Si no es el caso, retorne una lista conformada por los menores del primer elemento ordenados con
quicksort, el primer elemento y los mayores al primer elemento tambien ordenados con quicksort.  

Entre otros detalles podemos ver que se utiliza pattern matching, recursividad y listas por compresión.

Es muy claro lo que hace tanto que no es necesario documentar en lo más mínimo. No es necesario ningún comentario.

Comparto esto para que comulguen con mi idea que todo se puede mejorar y vale la pena seguir estudiando para hacer código bonito.


viernes, 12 de junio de 2015

Learn AngularJS


Codecademy creo un curso de Angular.js. Angular esta tomando el lugar de todos los demás frameworks javascript, por lo que es casi obligatorio aprenderlo.

Dejo link:
http://www.codecademy.com/en/learn/learn-angularjs

jueves, 11 de junio de 2015

Opal el nuevo lenguaje Orientado objeto con aires Funcionales


Opal el nuevo lenguaje Orientado objeto (es nuevo para mi) que tiene como objetivo remplazar a C, C++, Java, C#, Eiffel, Simula, and SmallTalk, y tambien:

  • Mejorar la implementación de la programación orientada a objetos
  • Introducir ideas del paradigma funcional
  • Ser de bajo nivel y de alto nivel. 
  • Usar técnicas avanzadas de compilación para hacer programas más eficientes. 


Entre sus características podemos destacar que es un lenguaje multiparadigma (procedural, orientado a objeto y Funcional) se pueden utilizar inmutables, clausuras, object, ASAP Garbage Collection, ect.

Como se ve un programa en Opal? bueno veamos un hola mundo:


IMPLEMENTATION GCD
   IMPORT Nat COMPLETELY
   DEF GCD(a,b) == IF a % b = 0 THEN b
                       ELSE IF a-b < b THEN GCD(b,a-b)
                           ELSE GCD(a-b,b)
                       FI
                   FI

Dejo link:
http://www.cs.oberlin.edu/~jwalker/opal/

Swift 2.0, ahora es open source y con soporte para Linux




Si como lo escuchan Swift es open sorce. Como lo notan se están moviendo la cosa a para nuestro lado.

Swift es el lenguaje nuevo de apple que nos va  a permitir escribir aplicaciones para IOS.

Dejo link:
http://www.applesfera.com/general/swift-2-0-ahora-es-open-source

JDK 8 Massive Open and Online Course: Lambdas and Streams Introduction

Oracle nos brinda un un curso masivo y gratuito basado en lambda y sobre Streams.

Lambda es la nueva característica más importante y al parecer oracle nos quiere capacitado en esta características.











Dejo link:
https://apexapps.oracle.com/pls/apex/f?p=44785:145:0::::P145_EVENT_ID,P145_PREV_PAGE:4887,143 


jueves, 4 de junio de 2015

Elm

Elm es un lenguaje funcional basado en Functional Reactive Programming.

Con características bien funcionales como inmutabilidad, funciones de primer orden y otras ventajas de los lenguajes funcionales, se hace fácil escribir código fácil de mantener y corto.

Elm compila a HTML, CSS y JavaScript. No es fácil crear aplicaciones web pero con este framework podemos generar el maquetado de forma automática.



Dejo link: http://elm-lang.org/

Lazy evaluation y Enfoque declarativo en Python

Cuando un lenguaje tiene un déficit, nace una librería que soluciona el problema pero si el lenguaje cubre todos los frentes se vuelve muy complejo. Por lo tanto lo mejor es tener un equilibrio.

Python es un ejemplo de equilibrio y elegancia. Pero no tiene tanto soporte para el paradigma funcional pero existen librerías que permiten extender el lenguaje.

Quiero compartir una presenta
ción que nos explica como obtener caracteríasticas de lenguajes funcionales en python:

http://kachayev.github.io/talks/kharkivpy%236/index.html#/

martes, 2 de junio de 2015

El Dr. Erik Meijer dicta Functional Programming Fundamentals en chanel 9


Mire lo que encontré, un excelente curso de programación funcional por el Dr. Erik Meijer :

http://channel9.msdn.com/Series/C9-Lectures-Erik-Meijer-Functional-Programming-Fundamentals/Lecture-Series-Erik-Meijer-Functional-Programming-Fundamentals-Chapter-1

Para el que no conoce al Dr Meijer, es un groso entre otras cosas responsable de Reactive programming framework (Reactive Extensions) para .NET, tambien dicta el curso de reactive en coursera.  Lo que más me interesa saber es donde compra esas remeras locas :P



domingo, 31 de mayo de 2015

Con que lenguaje de programación gane dinero?


Este es un post autoreferencial, hice un ejercicio mental. Me puse a pensar con cual lenguaje realmente gane dinero y cual no. Es como para evaluar el mercado, el que paso no el que vendrá y poder poner las cartas en la mesa, que si opino de esta forma es porque esto me dio trabajo. Es decir ver porque no soy objetivo.

Tengo en mi legado código en :

  • Java (la mayor cantidad de trabajos)
  • php (si si y el bug fixing me dio muchoo trabajo, debe ser que gracias a este lenguaje odie el tipado dinámico)
  • sql, pl/sql y Tsql (hice solo reportes y algun que otro store procedure)
  • javascript y HTML (cuando ajax se hacia sin frameworks, tuve mucho trabajo solo en javascript)
  • C++, Object Pascal (solo dando clases)
  • y otros pero muy poco, como Action script, C#, Ruby

Que lenguaje estudie más y trabaje menos? C# sin duda, es tan así que me rendí, lo deje en el C# 4; ahora tengo que retomar :(

Que lenguaje me gustaría trabajar en el futuro? Muchos Ruby, Groovy, Scala, Haskell y me da mucha curiosidad Go (aun que lo critico mucho)

Conclusión: billetera manda, no tengo la barita mágica pero estoy estudiando un poco python, scala y voy a retomar C#, que para mi, se van a utilizar más, hago bien?

jueves, 28 de mayo de 2015

R vs Python

Sigo con la disyuntiva R o Python para procesar datos en ambientes científicos.

R nació para manipular datos estadísticos, el lenguaje tiene muchas funcionalidades pero python esta ganando espacio de a poco y por alguna razón debe ser.

Les dejo una infografìa:



Dejo un link:
http://www.kdnuggets.com/2015/05/r-vs-python-data-science.html?utm_content=bufferf72a4&utm_medium=social&utm_source=plus.google.com&utm_campaign=update



SQL Server 2016 soporta JSON

Por fin! No es por comparar pero postgres hace 1 año o más que soporta json como tipo de dato nativo en su base de datos. Ahora la gente de Microsoft tiene el agrado de anunciar que Sql server 2016 siguiendo una natural corriente soporta JSON como un tipo de datos.

Es una muy buena noticia, las cosas de a poquito se van regulando, dado que a mi entender esto debería estar hace rato pero llego que es lo importante.

Como es esperable podemos importar datos con este formato y tambien exportar o extraer. A la vez podemos hacer consultas a estos datos.

Dejo link:
http://www.infoq.com/news/2015/05/SQL-Server-JSON

R vs Python vs SAS

Muchas veces comparamos lenguajes en el blog y hoy no va a ser diferente, les quiero dejar una comparativa de python vs r v SAS

SAS vs R vs Python infographic datascience

Dejo link;
http://www.analyticsvidhya.com/blog/2015/05/infographic-quick-guide-sas-python/


lunes, 25 de mayo de 2015

Java cumple 20 años, casi tan joven como yo!

Java cumple 20 años, existe un tecnicismo importante es la fecha del primer release que tiene poco que ver con java como lo conocemos, pero bueno siempre es ocación valida para festejar.

Les dejo una infografía:

domingo, 24 de mayo de 2015

Les presento a Debian 8

Sin palabras, que bueno que esta Debian 8 y viendo la nueva versión de gnome creo que encontraron el camino. Debian 8 nos demuestra que un sistema operativo pensado de forma robusta y para servidores tambien puede ser utilizado por usuarios finales.

Empece instalándolo, la instalación es igual a cualquier Debian, pero me sorprendió que me de a elegir que escritorio quería instalar, esto es muy bueno!!


Finalizada la instalación me encontré con un entorno intuitivo, mira:







Dejo link;
https://www.debian.org/index.es.html


viernes, 22 de mayo de 2015

Contratos en C#

Leyendo sobre C# en infoQ parece ser que quieren agregar contratos, pero que serían los  contratos? En un momento de mi vida yo escribí sobre contratos, escribí algo como esto:

"Eiffel es el lenguaje pionero en el diseño por contrato. Diseño por contrato es un concepto basado en la calidad del software.

Diseño por contrato es una metafora de como los objetos deben colaborar entre ellos. La metafora se puede explicar como un cliente que debe contratar un servicio; lo cual lo hace por medio de un contrato.

El proveedor debe proporcionar un producto determinado o servicio y tiene derecho a esperar hasta que el cliente pague.

El cliente debe pagar y tiene derecho a obtener el producto o servicio.
Ambas partes deben cumplir con ciertas obligaciones, tales como las leyes y reglamentos, aplicables a todos los contratos."

Volviendo a C# han decidido implementar un mecanismo de programación basada en contratos de la siguiente manera:

public int Insert(T item, int index)
    requires index >= 0 && index <= Count
    ensures return >= 0 && return < Count
{ … }

Lo que esta haciendo acá es asegurarse de que index sea mayor a 0 y menor a count.

Dejo link: http://www.infoq.com/news/2015/05/CSharp-7-contract

WCF es Open Source

Ya esta no? mucha publicidad a microsoft para este humilde blog. Pero que más decir para mi es impensable lo que esta pasando con microsoft y disculpen que sea tan entusiasta, si no soy entusiasta con esto, con que? WCF open source, no lo veía ni en figuritas.

Para el que no conoce, Windows Communication Foundation (WCF) es un marco de trabajo para la creación de aplicaciones orientadas a servicios. Con WCF, es posible enviar datos como mensajes asincrónicos de un extremo de servicio a otro. Un extremo de servicio puede formar parte de un servicio disponible continuamente hospedado por IIS, o puede ser un servicio hospedado en una aplicación. Un extremo puede ser un cliente de un servicio que solicita datos de un extremo de servicio.

La verdad es que desconozco las partes técnicas de WCF pero me atrevo a copiar las librerías que han liberado:

  • ServiceModel.Primitives
  • ServiceModel.Http
  • ServiceModel.NetTcp
  • ServiceModel.Duplex
  • ServiceModel.Security


Dejo link: http://www.infoq.com/news/2015/05/WCF-Open-Source

jueves, 21 de mayo de 2015

Si los lenguajes fueran autos.


En el blog hubo varias comparaciones de lenguajes de programación y comparándolo con varias cosas. Ahora llega una comparación con autos.

Dejo el link: http://crashworks.org/if_programming_languages_were_vehicles/

lunes, 18 de mayo de 2015

RabbitMQ, una cola de mensajería open source


Ya he hablado ciento de veces JMS en resumen podemos decir:

Cuando necesitamos comunicar 2 aplicaciones por medio de una red, se hace prioritario que las dos aplicaciones estén disponibles, por ejemplo cuando una aplicación se comunica con otra por medio llamados a procedimientos remotos (COM, CORBA, DCE y EJB) la aplicación receptora del mensaje debe estar activa, si esto no es así no recibirá nunca el mensaje. En ocasiones es poco probable poder realizar una comunicación sincrónica. La mensajería asíncrona es una forma de enviar mensajes indirectamente de una aplicación a otra sin esperar una respuesta.

JMS ofrece a las aplicaciones Java la opción de comunicarse de forma asíncrona. Cuando los mensajes se envían de forma asíncrona, el cliente no tiene que esperar a que el servicio procese el mensaje, ni a que el mensaje sea entregado. El cliente envía si mensaje y después continua con la suposición de que el servicio finalmente lo recibirá y procesará.

Cuando nosotros enviamos una carta no la enviamos por nuestros propios medios sino que la enviamos por medio del servicio postal. Ponemos la dirección la estampilla y listo. De forma similar, la vía indirecta el la clave de JMS. Cuando una aplicación envía información a otra mediante JMS, no hay vinculo directo entre ambas aplicaciones. En su lugar, la aplicación emisora coloca el mensaje en manos de un servicio que garantiza su entrega a la aplicación receptora. Hay dos conceptos principales en JMS: corredores de mensaje (message brokers) y destinos.

Cuando una aplicación envía un mensaje, lo entrega a un corredor de mensajes. El corredor de mensajes es la respuesta JMS a la oficina de correos. EL corredor de mensajes se asegurará de que el mensaje sea entregado en el destino especificado, dejando que el emisor siga con sus asuntos.

Cuando enviamos un correo es importante poner la dirección para que el servicio postal sepa dónde debe ser entregada. De igual forma, en JMS, los mensajes tienen una dirección con un destino. Los destinos son como los buzones donde se colocan los mensajes hasta que alguien llega a recogerlos.

No obstante, a diferencia de las direcciones postales, que indican una persona especifica o una calle, los destinos son menos específicos. A los destinos solo les incumbe donde sera recogido el mensaje, no quien lo recogerá. De esta forma los destinos son como enviar una carta dirigida “al residente”.

En JMS, hay dos tipos de destinos: colas y temas. Cada uno de estos está asociado a un modelo de mensajería concreto, bien de punto a punto (para colas) o bien de emisor a suscriptor (para temas)

Punto a Punto: cada mensaje tiene exactamente un emisor y un receptor. Cuando se entrega el mensaje al corredor de mensajes, este lo pone en una cola, cuando el receptor pide el mensaje este es eliminado de la cola.

Emisor a suscriptor: El mensaje es enviado a un tema todos los suscriptores del tema recibiran una copia del mensaje.

La comunicación asíncrona a través de JMS ofrece diversas ventajas sobre la comunicación sincrónica:

  • La comunicación sincrónica implica una espera.
  • El cliente no esta acoplado a la disponibilidad del servicio
  • El cliente no esta acoplado a la ubicación del servicio
La implementación más utilizada en java es ActiveMQ pero leyendo sobre RabbitMQ, quede sorprendido, entre sus características podemos decir:
  • Robusto
  • Fácil de utilizar
  • Multiplataforma
  • Soporte comercial y open source
Ojo no es solo utilizable desde Java, podemos utilizarlo desde multiples plataformas: Ruby, .net, python, erlang, haaskell, Go, C++, Node.js, PHP y todos los lenguajes java (scala, groovy, etc) 

Veamos un ejemplo, vamos a tener 2 aplicaciones una que envía hecha en python y la otra que recibe hecha en java;


#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(
               'localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
                      routing_key='hello',
                      body='Hello World!')
print " [x] Sent 'Hello World!'"


Ahora vamos a hacer un cliente en java: 

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.QueueingConsumer;

public class Recv {

  private final static String QUEUE_NAME = "hello";

  public static void main(String[] argv)
      throws java.io.IOException,
             java.lang.InterruptedException {

    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    
    QueueingConsumer consumer = new QueueingConsumer(channel);
    channel.basicConsume(QUEUE_NAME, true, consumer);

    while (true) {
      QueueingConsumer.Delivery delivery = consumer.nextDelivery();
      String message = new String(delivery.getBody());
      System.out.println(" [x] Received '" + message + "'");
    }

    }
}

Muy bueno!!

Dejo Link:

martes, 12 de mayo de 2015

ATOM, A hackable text editor for the 21st Century


Hace tiempo que utilizo ATOM pero nunca se me ocurrió hacer un post a este excelente editor.

Entre sus características podemos nombrar:

  • Multiplataforma
  • Integrado con node.js
  • Con un diseño modular, se pueden instalar más de 50 plugins
  • Bueno, tenemos un montón de cosas que son esperables de un editor, Snippets, File system browser, Code folding... 


Simplemente se baja y se instala y en pocos minutos se van a sentir como en casa.

Dejo link: https://atom.io/


lunes, 11 de mayo de 2015

Una nueva edición del ranking de lenguajes TIOBE

Se publico una nueva versión del ranking TIOBE, en este ranking se publican los lenguajes más utilizados y Java volvió a tomar la punta. Pero lo sigue bastante cerca C. Para ver más detalle:



Dejo link: