Translate

domingo, 4 de noviembre de 2012

Spring Data, accediendo fácilmente a cualquier almacén de datos

Spring Data es un proyecto SpringSource cuyo propósito es unificar y facilitar el acceso a diferentes tipos de almacenes de persistencia, tanto en los sistemas de bases de datos relacionales y almacenes de datos NoSQL.

Cada subtipo de proyecto dependiente del alamacen de datos se caracterizan por ofrecer CRUD (Create-Read-Update-Delete), métodos de búsqueda, clasificación y paginación. Spring Data proporciona interfaces genéricas para estos aspectos (CrudRepository, PagingAndSortingRepository), así como implementaciones de persistencia específica.

Podemos extender las interfaces como lo hacemos para nuestros daos de hibernate o jpa:


public interface UserRepository extends MongoRepository<User, String> {
        @Query("{ fullName: ?0 }")
        List<User> findByTheUsersFullName(String fullName);
        List<User> findByFullNameLike(String fullName, Sort sort);
}
...

Para los proyectos Neo4J y MongoDB; spring data nos ofrece Templates. Que nos permiten hacer operaciones de CRUD, busquedas Pero todos estos métodos funcionan sólo para el almacén de datos configurado. Spring Data JPA no ofrece Templates dado que EntityManager es como un template.

Para configurar un template lo podemos hacer de este modo:


 



   




Dependiente de la tecnología que utilicemos para almancenar datos podemos anotar nuestros objetos. Cada tipo de almacén de datos viene con su propio conjunto de anotaciones para proporcionar la meta información necesaria para la asignación. Vamos a ver cómo un usuario de dominio objeto simple se pueden asignar a los almacenes de datos:

JPA MongoDB Neo4j
@Entity
@Table(name="TUSR")
public class User {

  @Id
  private String id;

  @Column(name="fn")
  private String name;

  private Date lastLogin;

...
}
@Document(
collection="usr")
public class User {

  @Id
  private String id;

  @Field("fn")
  private String name;

  private Date lastLogin;

 ...
}
@NodeEntity
public class User {

  @GraphId
  Long id;


  private String name;

  private Date lastLogin;

...
}



Todo aquel que este familiarizado con las anotaciones de de JPA puede, utilizar sin problemas las anotaciones de los otros almacenes de datos. 

Algo muy importante es que Spring Data provee QueryDsl para las consultas a repositorios JPA, MongoDb y Neo4J. QueryDsl permite generar consultas por medio de un dsl de forma muy fácil.

No hay ninguna API general a todos los almacenes de persistencia. Las diferencias son demasiado fundamentales. Pero el proyecto de datos Spring proporciona un modelo de programación común para acceder a sus datos.

Dejo link:

http://www.infoq.com/articles/spring-data-intro
http://www.springsource.org/spring-data



Fancy es un nuevo lenguaje de programación de propósito general inspirado en Smalltalk, Ruby, Erlang y Io


Fancy es un nuevo lenguaje de programación de propósito general  inspirado en Smalltalk, Ruby, Erlang y Io, que se ejecuta en la máquina virtual de Rubinius. Tiene integración total con Ruby y las librerías de Ruby utilizadas en Rubinius.

Fancy es dinámico, orientado a objetos puro, basado en clases con soporte integrado para futures y actores (como Erlang). La sintaxis es fácil de aprender, consistente y está inspirada en Ruby y Smalltalk.



Veamos unos ejemplos:

"Hello, World!" println

El objeto String lanza un mensaje println, esto es muy similar a Smalltalk.


class Fixnum {
  def fib {
    match self {
      case 0 -> 0
      case 1 -> 1
      case _ -> self - 1 fib + (self - 2 fib)
    }
  }
}

15 times: |x| {
  x fib println
}

En este caso utiliza pattern matching.


class Greeter {
  def initialize: @name
  def greet {
    "Hello, #{@name}" println
  }
}

g = Greeter new: "World!"
g greet # => "Hello, World!"

Me parece un lenguaje por demás interesante, sería buena idea llevarlo a la plataforma Java. Que opinan?

Dejo links:
http://www.fancy-lang.org/
http://en.wikipedia.org/wiki/Fancy_(programming_language)


Libro gratuito de Git

Git es un sistema rápido de control de versiones escrito en C y que se ha hecho popular sobre todo a raíz de ser el elegido para el kernel de Linux.

Todo el libro Git Pro, escrita por Scott Chacon y publicado por Apress, está disponible en web. Todo el contenido está bajo la licencia Creative Commons, no comercial. Este libro es una gran ayuda para los que comenzamos con Git.

Dejo el link:
http://git-scm.com/book

jueves, 1 de noviembre de 2012

GNU/Linux Distribution Timeline 12.10


Les dejo una actualización del Timeline de Linux. Tantas distribuciones hace a gente muy diferente, con propósitos y usos muy diferentes y feliz!

Dejo link:
http://futurist.se/gldt/wp-content/uploads/12.10/gldt1210.png

sábado, 27 de octubre de 2012

Redline, corriendo Smalltalk en la plataforma Java


Si se junta un lenguaje orientado a objeto puro y la maquina virtual más usada del mercado, junto a la plataforma más robusta nos da redline. Redline es una gran idea, programar en smalltalk en la plataforma Java.

Proporcionar una implementación viable Smalltalk para la JVM puede ayudar a revitalizar la comunidad haciéndola llegar a la mayor audiencia posible. La máquina virtual de Java es sin duda la más utilizada y la plataforma de implementación más popular. Poder ejecutar Smalltalk en la JVM trae Smalltalk un público mucho más amplio posible.

Los desarrolladores que trabajan con Java y otros lenguajes de la JVM puede tener la oportunidad de trabajar con Smalltalk en un entorno en el que se sienta cómodo y aprovechar la productividad que trae Smalltalk.

Dejo link:
http://www.redline.st/

Haskell se va a las nubes!!

Cloud Haskell es un lenguaje de dominio específico (DSL) para el desarrollo de programas para un entorno de computación distribuida.  Proporciona un modelo de comunicación de paso de mensajes, inspirados en Erlang, sin introducir incompatibilidades con memoria compartida de concurrencia de Haskell.

Es una herramienta para escribir aplicaciones que deben ejecutarse en forma paralela en computadoras o máquinas virtuales. Esto nos provee confiabilidad, capacidad para ejecutar en paralelo así como para la creación de aplicaciones de cálculo intensivo que pueden beneficiarse de un montón de hardware.

Dejo link:
http://www.haskell.org/haskellwiki/Cloud_Haskell

jueves, 25 de octubre de 2012

Liberado JRuby 1.7.0!!

JRuby es el compilador de Ruby que compila en bytecode.

Tenemos una nueva versión! JRuby 1.7.0 fue liberado. Esta nueva versión nos permite correr Ruby 1.9 y soporta todas las características del lenguaje.

Otra característica muy importante es que usa el InvokeDynamic de la maquina virtual de Java 7, lo que le permite usar clousures en bytecode; aumentando notablemente el rendimiento de lenguajes que usan clousures y compilan a bytecode.

Un gran paso para la comunidad de JRuby!!

Dejo links:
http://jruby.org/2012/10/22/jruby-1-7-0.html
http://www.infoq.com/news/2012/10/jruby-17

lunes, 22 de octubre de 2012

InfoQ nos regala un libro: The Culture Game




InfoQ nos regala un librito llamado:  The Culture Game. De que se trata? Bueno, es un tutorial y guía de referencia para la creación de la agilidad del negocio en su organización. Este es el manual para quien desee desarrollar rápidamente una cultura de aprendizaje dentro de sus equipos.

Es gratuito y lo pueden bajar del siguiente link:

http://www.infoq.com/minibooks/Mezick-Culture-game


sábado, 20 de octubre de 2012

Endulzando javascript con Mozilla Sweet.js


Mozilla Sweet.js es un desarrollo de Mozilla que lo que permite es extender Javascript por medio de un sistema de macros. Con este framework podemos hacer un dsl en javascript o mejorar la sintaxis del lenguaje o agregar funcionalidad.

Vamos con un ejemplo, no quiero usar function por que es muy largo, quiero usar def:


macro def {
  case $name:ident $params $body => {
    function $name $params $body
  }
}

y ahora puedo hacer:


def add (a, b) {
  return a + b;
}

Es muy bueno!! También podemos definir clases y hacer muchas cosas más...

Dejo links:
http://sweetjs.org/
http://www.infoq.com/news/2012/10/Mozilla-Sweetjs
https://github.com/mozilla/sweet.js/wiki/Example-macros

Prueba kotlin!


Kotlin es el nombre del lenguaje de la empresa jetbrains del que ya hablamos.

Existe una pagina para probar este lenguaje; dejo link:

http://kotlin-demo.jetbrains.com/

Lo que viene, lo que viene en Scala


Han anunciado el el release candidate de Scala (Scala 2.10.0 RC1) entre las características más importante puedo nombrar:

La verdad que están a full, muchas características nuevas que hacen más potente el lenguaje.

Dejo link:
http://www.scala-lang.org/downloads#RC
https://groups.google.com/forum/#!topic/scala-language/eRYM3-SIAso/discussion


jueves, 18 de octubre de 2012

Groovy o Scala esa es la cuestión?


Dos lenguajes están haciendose famosos en la plataforma Java, Groovy y Scala; los dos son similares pero tienen diferencias importantes; que son buenas saberlas antes de elegir uno o otro.

Lo principal a mi entender que impulso a Groovy fue Grails fue el caballo de batalla y que le hizo muy buena publicidad al lenguaje. En cambio Scala no tenia un framework de desarrollo ágil que lo impulsara hasta el framework Play! 2. Si bien Grails esta super maduro, play tiene una comunidad muy buena, Por lo tanto podemos decir que en este punto es empate.


Como semejanza los dos lenguajes corren sobre la JVM, con interoperabilidad con toda la plataforma. Los dos son orientados a objetos pero Scala también es funcional y los dos tienen closures. Además los dos permiten un sistema de reutilización con mixins.  

Los dos lenguajes soportan aplicación parcial de una función y curring, pero el uso de estas caracteristicas es más natural en Scala. 

Groovy es un lenguaje dinámicamente tipado, esto puede ser bueno o malo depende de como lo veamos; además Groovy soporta dynamic meta-programming. 


Scala es un lenguaje estáticamente tipado por lo tanto no soporta dynamic meta-programming, es este punto Scala es más parecido a Java pero Scala cuenta con un sistema de tipos más sofisticado que Java. Algo que también hace la curva de aprendizaje más empinada.


Groovy es sintácticamente más parecido a Java pero semánticamente se ve la influencia que tuvo Ruby.

Scala  sintácticamente se ve la influencia de Java y Ruby, pero semánticamente fue influido por Java, SML, Haskell y gBeta.

Scala optimiza las funciones recursivas esto tiene gran importancia en el paradigma funcional pero no tiene tanta importancia en la programación imperativa.

Los dos tienen por defecto evaluación ansiosa o  eagerly; sin embargo Scala permite call-by-name y lazy evaluation. En Groovy se puede emular call-by-name con clousures.

Scala no tiene el concepto de campos o clases estáticas, utiliza singletones; en cambio groovy, si utiliza statics.

Estas son las diferencias más importantes, que tenemos que tener en cuenta cuando escogemos uno o el otro...




miércoles, 17 de octubre de 2012

Prueba Ceylon !!

Ceylon es un lenguaje que corre sobre jvm. Es un lenguaje hecho por Jboss/Red Hat ; el principal impulsor es ni más, ni menos Gavin King el creador de Hibernate. Ya hable en varias oportunidades del lenguaje: http://emanuelpeg.blogspot.com.ar/2011/08/ceylon.html

En este post les quiero recomendar que pasen por esta pagina donde van a poder probar el lenguaje y  van a comprobar la gran potencia de este lenguaje.

Dejo link:
http://try-ceylon.rhcloud.com/

martes, 16 de octubre de 2012

Advanced Linux Programming


Quien no quiere programar en Linux? Este es un libro gratuito para gente que esta familiarizado con el ambiente de programación Linux y quiera mejorar; es de libre distribución y a simple vista esta muy bueno.


Dejo links:
http://www.advancedlinuxprogramming.com/
http://www.advancedlinuxprogramming.com/alp-folder/
http://www.advancedlinuxprogramming.com/alp-folder/advanced-linux-programming.pdf

domingo, 14 de octubre de 2012

Cual es el futuro lenguaje de la plataforma Java?


Como sabrán en la plataforma Java se esta trabajando para hacer que la JVM sea políglota, por que? Porque el lenguaje Java no siempre es bueno, es decir, pensar que un lenguaje sea bueno para resolver todos los problemas es tirar a la basura mucha teoría, por ejemplo de paradigmas y mucha investigación. Y además para se sincero Java esta un poco viejo, no por tiempo si no por nivel de abstracción, por ejemplo si vamos a hacer algo a nivel hardware esta bueno pode acceder a la memoria, pero si vamos hacer un software de administración no esta bueno tener que preocuparnos por la memoria o cuestiones de hardware, este nivel de abstracción es bueno tener en cuenta cuando hay que elegir un lenguaje. En Java existen muchas cosas que hoy no tienen sentido por ejemplo los datos primitivos; que ventaja nos da el int comparándolo con el Integer?

Por estas razones se busca que otros lenguajes permitan correr sobre bytecode con la misma eficiencia que Java. Pero existe un lenguaje que va a remplazar a Java o van a ser varios? Sin duda que existe una guerra fría de lenguajes para quedarse con la plataforma. Scala, groovy, clojure, Ceylon,  jruby, jython, Kotlin, etc... ofrecen soluciones validas y diferentes formas de encarar una solución; hasta diferentes paradigmas.

En mi opinión Java como lenguaje no va a desaparecer, dado que Android le tiro un salvavidas. Para Android, java es un buen lenguaje; con un nivel de abstracción adecuado; ya que hay que cuidar los recursos dado que se ejecuta desde un celular o tablet. Además cuenta con muchos desarrolladores que esto es muy importante para una nueva plataforma.  

Creo que con los años Java va entrar en desuso en su plataforma pero va a tener larga vida en Android. La plataforma java va ser tomada por otros lenguajes; lo que no estoy seguro es si va a ver un único ganador o va ser un triunfo compartido.

Coinciden con mi opinó? Que lenguaje les gusta? Que lenguaje tiene más futuro?

jueves, 11 de octubre de 2012

Cursos a distancia

Este no es un post para solo informáticos ya que existen varias herramientas para hacer e-learning y diferentes cursos para tomar, de diferentes materias, la herramienta que más me gusta es coursera; pero hay otras que tienen presencia en internet.

Dejo link de la 5 más renombradas:
https://www.coursera.org/
http://www.udacity.com/
http://www.ck12.org/
https://www.edx.org/
http://www.khanacademy.org/

miércoles, 10 de octubre de 2012

Curso Gratuito de Ruby on Rails!!

La nueva entrega de Rails for Zombis se llama Rails for Zombis Redux que es como una reedición; en fin por lo que vi esta bueno.

Dejo link:
http://railsforzombies.org

Nuevo curso de Ruby en Codecademy


Todavía no hice el curso de Python y ahora lanzan uno de Ruby; están con todas las pilas. Vamos a tener que echarle un ojo a este curso.

Dejo link:
http://www.codecademy.com/es/tracks/ruby

javafxcommunity.com

Oracle abrió un sitio para compartir información y hacer comunidad sobre JavaFX, dejo el link:  http://community.java.net/community/javafx

martes, 9 de octubre de 2012

WebPlataform.org

WebPlataform.org es una gran idea la W3C junto a las empresas grandes como Google, Facebook, Microsoft, Opera, Mozilla, Nokia, HP, Adobe y Apple, abrieron una comunidad para desarrolladores  con el objetivo de hacer una web mejor.

"Somos una comunidad abierta de desarrolladores que crean recursos para una web mejor, sin importar la marca, el navegador o plataforma. Cualquiera puede contribuir y cada persona que lo hace, nos hace más fuertes. Juntos podemos seguir impulsando la innovación en la Web para servir a un bien mayor. Se inicia aquí, contigo."

De esta forma se presenta esta web que promete tener muchos recursos para desarrolladores web, dejo un video:


lunes, 8 de octubre de 2012

Nuevo libro gratuito sobre Big Data y Cloud Computing


"Acaba de ser editado este nuevo material/libro académico con licencia commons 3.0 en ES y CAT por la Universitat Oberta de Catalunya (UOC). Mi humilde aportación para ayudar a personas con ganas de emprender, permitiéndoles hacer una entrada rápida a estas nuevas tecnologías que ya están aquí y que quizás puedan ser una herrramienta más en su viaje hacia nuevos retos. Pero junto con la UOC esperamos también que sea útil para todos aquellos alumnos (y personas en general) que quieran tener una visión introductoria de estos temas que son de tanta actualidad. Esperamos que sea un buen punto de partida y en el documento encontrarán referencias en cada apartado para poder profundizar más en el tema si se desea."

Así comienza su post Jordi Torres, en el cual nos deja un link a su libro gratuito de big data y cloud computing:

http://www.jorditorres.org/nuevo-libro-sobre-big-data-y-cloud-computing/


JSON-LD (JavaScript Object Notation for Linking Data)

JSON-LD es una extensión de JSON que le da la capacidad de representar datos semánticos de nuestras paginas. JSON-LD es un método de transporte de Linked Data con JSON. Ha sido diseñado para ser tan simple y conciso posible, sin dejar de ser legible. Además, era una meta que requiere el menor esfuerzo posible de desarrolladores para transformar su JSON simple y llano a semánticamente rica JSON-LD.

Es muy simple, veamos un ejemplo:


{
  "@context": {
    "name": "http://xmlns.com/foaf/0.1/name",
    "homepage": {
      "@id": "http://xmlns.com/foaf/0.1/workplaceHomepage",
      "@type": "@id"
    },
    "person": "http://xmlns.com/foaf/0.1/Person"
  },
  "@id": "http://me.markus-lanthaler.com",
  "@type": "person",
  "name": "Markus Lanthaler",
  "homepage": "http://www.tugraz.at/"
}

Dejo un video:




Dejo links:
http://json-ld.org/
http://en.wikipedia.org/wiki/JSON-LD
http://en.wikipedia.org/wiki/Linked_data

JSONiq: The JSON Query Language


JSONiq es un nuevo lenguaje de consulta construido sobre xquery, como SQL o LinQ tiene funcionalidad de let, for, group by, where, etc. Veamos un ejemplo:


let $stats := db:find("stats")
for $access in $stats
where $access("response_time") > 5
group by $url := $access("url")
return
{
    "url": $url,
    "avg": avg($access("response_time")),
    "hits": count($access)
}

También permite updates:


let $dbj := collection("users")[ .("name") = "Deadbeat Jim" ]
return insert json { "status" : "credit card declined" } into $dbj


Esta muy bueno que se estandarice la forma de consultar datos json, este estándar esta en pañales pero ya tiene una implementación en el producto Zorba. Promete gran futuro!!

Fuente:
http://www.infoq.com/news/2012/10/JSONiq

Links:
http://www.jsoniq.org/
http://jsoniq.org/docs/spec/en-US/html-single/index.html
http://jsoniq.org/grammars/jsoniq.xhtml
http://www.zorba-xquery.com/html/index

domingo, 7 de octubre de 2012

Currying


Currying es una técnica de transformación de una función con múltiples argumentos de tal manera que se puede llamar como una cadena de funciones cada uno con un único argumento.

Vamos a explicarlo con un ejemplo, supongamos que tenemos una función f(x,y) para evaluar esta función la llamamos de la siguiente forma f(2,3) por ejemplo. Suponiendo que no tenemos el valor de y se podría definir una función g(y) = f(2,y). De esta forma cuando llamamos a g(3) = f(2,3)

No parece una técnica muy potente, simplemente definimos una función como una segunda función con parámetros fijos, pero esta técnica con clousures puede ser muy útil y nos permite componer funciones a partir de otras.

Oficialmente cada función de Haskell solo puede tomar un parámetro.  Todas las funciones que aceptan más de un parámetro hacen uso de currying. Cuando tenemos una función con dos parámetros en realidad por ejemplo:

max 4 5

es igual que llamar

(max 4) 5

(max 4) es una función que devuelve el parámetro si es mayor a 4 o 4 si es menor.

Por ejemplo en Haskell se puede definir una función double de la siguiente manera:


mult :: Int -> Int -> Int
mult x y = x * y



double = mult 2


En la pagina de scala podemos encontrar el siguiente ejemplo:


object CurryTest extends Application {

  def filter(xs: List[Int], p: Int => Boolean): List[Int] =
    if (xs.isEmpty) xs
    else if (p(xs.head)) xs.head :: filter(xs.tail, p)
    else filter(xs.tail, p)

  def modN(n: Int)(x: Int) = ((x % n) == 0)

  val nums = List(1, 2, 3, 4, 5, 6, 7, 8)
  println(filter(nums, modN(2)))
  println(filter(nums, modN(3)))
}


Noten que la función modN es llamada con un parámetro por lo tanto devuelve una función del tipo Int => Boolean que luego se utiliza en la función filter.

Currying es una técnica que nos facilita la vida y cobra gran potencia junto a el uso de clousures.

Dejo links:
http://www.scala-lang.org/node/135
http://www.engr.uconn.edu/~jeffm/Papers/curry.html
http://blog.gnucom.cc/2010/currying-in-f/
http://www.haskell.org/haskellwiki/Currying
http://en.wikipedia.org/wiki/Currying

sábado, 6 de octubre de 2012

VOTE!!! Give JBoss Application Server a new name!


Me llego un mail de la gente de Red Hat al parecer van a cambiar el nombre de su producto estrella JBoss y quieren consultar a la comunidad cual es el mejor nombre para el servidor Open Source. Ojo van a cambiar el nombre de su servidor pero la versión de la comunidad; el servidor comercial va seguir llamándose JBoss.

Creo que Red Hat esta haciendo el mismo movimiento que hizo con Red Hat en su momento, tener una versión para la comunidad Fedora y otra para facturar Red Hat.

Vamos a ver como sigue esta historia, por ahora a votar el mejor nombre!

Dejo el link:
https://sso.jboss.org/login?service=https%3A%2F%2Fwww.jboss.org%2Frename.html

miércoles, 3 de octubre de 2012

Tipando Javascript con TypeScript


TypeScript es un lenguaje que corre sobre javascript; muy similar a javascript pero con la salvedad de que TypeScript es un lenguaje fuertemente tipado. Es decir esta librería nos da un sistema de tipado para el lenguaje Javascript, además nos da clases; para poder utilizar la orientación a objetos por medio de clases como estamos más acostumbrados, no por prototipado.

En la pagina oficial de TypeScript se puede ver el siguiente ejemplo:


class Greeter {
greeting: string;
constructor (message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}  

var greeter = new Greeter("world");

var button = document.createElement('button')
button.innerText = "Say Hello"
button.onclick = function() {
alert(greeter.greet())
}

document.body.appendChild(button)



A la vez, permite que las IDEs nos ayuden a escribir en código.  Esta librería/lenguaje (no se como llamarlo) es gratuita y open sources.

Dejo links:
http://www.infoq.com/news/2012/10/typescript
http://www.typescriptlang.org/

5 editores de código online y gratuitos (IDEs)


Ya hable anteriormente de las IDES online, las cuales nos permiten tener nuestro código en la nube y nos facilita la comunicación con servicios en la nube. Anteriormente hable de Cloud 9 (la ide de George Harrison)  ahora quiero compartir este link con 5 IDES en la nube:

http://www.elwebmaster.com/general/5-editores-de-codigo-online-y-gratuitos-ides

Play Framework + Eclipse + Postgresql + Mercurial

Simplemente quiero compartir este tutorial que esta muy completo: http://www.welinux.cl/notas/public/alawelinux.html

Que pasaría si no existiría el Null??


Es una pregunta tonta, ya que el null nació como una forma de representar la nada misma. Es decir el null es necesario pero, no creen que esta sobre valorado? ¡esta en todos lados! En javacript por ejemplo se tiene que preguntar si esta definida la variable; porque una variable puede no estar definida; pero además la variable puede ser nula por lo tanto tengo que preguntar si es distinta de null. Para citar otro ejemplo  en java la lucha diaria contra NullPointerException...

No es un problema de la tecnología sino que no nos tomamos el tiempo de definir que puede ser nulo y que no, si existen valores por defecto, etc. Pero la tecnología nos puede ayudar y en este caso me parece correcto el camino que tomo C# o .net; en el cual se puede definir que una variable no puede ser nula (non-nullable)  o se puede definir un valor por defecto cuando no se asigna nada; cosa que se puede hacer en las bases de datos hace años.

Es interesante como en Eiffel se puede definir un contrato en el cual queda claro que por ejemplo para que esta función funcione es necesario que el parámetro no sea nulo y que sea mayor a 0. Dandole seguridad y tranquilidad a los desarrolladores. Me debo un buen post sobre Eiffel.

En conclusión cuando tenemos más tiempo hacemos las cosas mejor; por eso es importante tomarse el tiempo de definir que campos pueden ser nulos y cuales pueden tener datos por defecto. Y esta bueno que la tecnología nos ayude a definir estas restricciones y mejor sería que nos obligue a definirlo.

Dejo links:
http://www.infoq.com/news/2012/10/Null-CSharp
http://twistedoakstudios.com/blog/?p=330

lunes, 1 de octubre de 2012

Python 3.3.0 fue lanzado oficialmente


Python, un lenguaje de programación multiplataforma que permite a los usuarios trabajar con más rapidez e integrar los sistemas más eficazmente, acaba de alcanzar la versión 3.3.0.

Dejo links:
http://www.python.org/
http://www.python.org/download/releases/3.3.0/

Jenkins para Google App Engine



"Integración continua en la nube para aplicaciones Java y Python" Esta es la premisa del nuevo servicio de  CloudBees, básicamente lo que proveen es un Jenkins en la nube para nuestras aplicaciones app engine.

Desarrollado por Jenkins y más de 600 plugins de la comunidad, CloudBees ofrece el servicio se  integración continua en la nube para ayudar a construir y entregar rápidamente software de calidad.

Abra que probarlo dejo el link: https://appengine.cloudbees.com/

BackTrack, el Linux para los chicos malos


BackTrack es una distro Linux para la auditoria de seguridad y relacionada con la seguridad informática en general. Es un Linux con muchas herramientas para auditar la seguridad de tus aplicaciones, tu red, etc.

 Fue incluida en el puesto 7 de la famosa lista "Top 100 Network Security Tools" de 2006.

Dejo un video:


sábado, 29 de septiembre de 2012

Lazy evaluation, la ventaja de los perezosos

Lazy evaluation o evaluación perezosa permite que un bloque de código sea evaluado luego, esto nos permite realizar código más performante en ciertas situaciones. Vamos con un ejemplo, supongamos que tengo la función multiplicación

mult(a, b) = a * a

Si llamara a esta función de la forma mult(8, 5+2) se ejecutaría así:

mult(8, 5+2)
mult(8,7)
8*8
64

Pero si ejecutamos el código de forma perezosa
mult(8, 5+2)
8 * 8
64

En este caso la ejecución perezosa fue más eficiente que la normal.

Para poner otro ejemplo si tengo la función loop

loop(x) = loop(x)

Esta función nunca termina, veamos que pasa si ejecutamos mult(2, loop(2))

mult(2, loop(2))
mult(2, loop(2))
mult(2, loop(2))
mult(2, loop(2))
... hasta el infinito y más allá...

Pero si ejecutamos de forma perezosa

mult(2, loop(2))
2 * 2
4

Termina y nos da el resultado.

La evaluación perezosa viene del paradigma funcional, es una característica de Haskell y también de Scala. Dándole gran potencia al lenguaje.  

Dejo link:
http://en.wikipedia.org/wiki/Lazy_evaluation

miércoles, 26 de septiembre de 2012

Como nos ven desarrolladores de otros lenguajes y como los vemos nosotros?


Citas celebres del mundo informático.

EL sitio variable not found publico citas sobre el mundo informático; les dejo las que más me gustaron:


“El código nunca miente, los comentarios sí”
-- Ron Jeffries


“El uso adecuado de los comentarios es compensar nuestra incapacidad para expresarnos mediante el código”
-- Robert C. Martin

“La documentación es como el sexo; cuando es bueno, es muy, muy bueno, y cuando es malo, es mejor que nada”
-- Dick Brandon


“Hasta ahora, nuestro ordenador nunca ha tenido un error no detectado”
-- Weisert


“No automatices un flujo de trabajo indisciplinado. El ordenador no va a resolver lo que los directivos del cliente no pueden”
-- Larry Bernstein


“Simplicidad: el arte esencial de maximizar la cantidad de trabajo no realizado”
-- Manifiesto Ágil

“El reto principal de los científicos informáticos es no confundirse con la complejidad de su propia creación”
-- E. W. Dijkstra


“La principal causa de complejidad en el software es que los fabricantes implementan casi todas las características que solicitan los usuarios”
-- Niklaus Wirth


“Una mala gestión puede incrementar los costes del software más rápidamente que cualquier otro factor”
-- Barry Boehm


“Una organización que trata a sus programadores como idiotas conseguirá pronto tener programadores dispuestos y capaces para comportarse como sólo como idiotas”
-- Bjarne Stroustrup


“Gran parte de la excitación que nos produce nuestro trabajo se debe a que realmente no sabemos lo que estamos haciendo”
-- E. Dijkstra

“Los programadores de verdad pueden escribir código ensamblador en cualquier lenguaje”
-- Larry Wall


“Si haces una afirmación, un programador dice ‘Sí, pero…’, mientras que un diseñador dice ‘Sí, y…’”
-- André Bensoussan


“La industria informática es la única que se mueve por la moda más que la ropa de señora”
-- Larry Ellison


“Nada es más permanente que una solución temporal”
-- Primera ley de Thomas


“Si no he podido ver tan lejos como otros es porque tenía gigantes subidos en mis hombros”
-- Hal Abelson


“Sólo hay una cosa más dolorosa que aprender de la experiencia, que es no aprender de la experiencia”
-- Archibald McLeish


“Lo peor de leer citas en Internet es que no puedes estar cien por cien seguro de su autoría”
-- Abraham Lincoln

Dejo link:
http://www.variablenotfound.com/2012/09/101-nuevas-citas-celebres-del-mundo-de.html

lunes, 24 de septiembre de 2012

Curso gratuito de MongoDB


La gente de 10gen nos ofrecen un curso gratuito de MongoDB. El curso se divide en 2 perfiles uno es desarrollador "MongoDB for Developers" y el otro para DBAs "MongoDB for DBAs". MongoDB esta ganando cada vez más un espacio en mercado, estos cursos facilitan su adopción y nos ahorran tiempo.

Dejo link:
http://education.10gen.com/

viernes, 21 de septiembre de 2012

Nuevo curso en codeschool llamado "Assembling Sass"



Me he enrolado en el nuevo curso de codeschool es sobre Sass; para los que no saben Sass (Syntactically Awesome Stylesheets)  es un lenguaje de hoja de estilo inicialmente diseñado por Hampton Catlin y el desarrollador Nathan Weizenbaum.

Sass es un metalenguaje de  Cascading Style Sheets (CSS). Es un lenguaje de scripting que se interpreta en CSS. lo que permite generar CSS dinámicos, facilitando la mantenibilidad y dinamismo de los CSS.

Sass es una forma diferente de trabajar con las CSS, que nos permite mantener un código limpio y fácil de leer.

Dejo los links:

Por que es bueno que aprenda programación funcional??


Los orígenes de la programación funcional pueden rastrearse al matemático Alonzo Church, que trabajaba en la Universidad de Princeton, y, al igual que otros matemáticos de allí, estaba interesado
en la matemática abstracta, particularmente en el poder computacional de ciertas máquinas abstractas. Las preguntas que se hacía eran por ejemplo: si dispusiésemos de máquinas de un ilimitado poder de cómputo, ¿qué tipos de problemas se podrían solucionar?, o ¿se pueden resolver todos los problemas?

Para contestar este tipo de preguntas, Church desarrolló un lenguaje abstracto, denominado Cálculo Lambda, que el cual sólo realizaba evaluación de expresiones usando funciones como mecanismo de cómputo. Este lenguaje abstracto no tenía en cuenta limitaciones concretas de implementación de ningún tipo.

La programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raíces en el cálculo lambda.

La historia estuvo muy linda, pero que agrega a mi vida? Existen muchos conceptos que es bueno saber a la hora de abordar un problema; además estos conceptos no se encuentran solo en lenguajes funcionales.

En la programación funcional, todo es una función, no existen variables, if, while o for o otra estructura de control de flujo de ejecución; solo funciones. Veamos  características de los lenguajes funcionales:

  • Transparencia referencial : Como se apoya en el concepto de función matemática, una función siempre va a devolver el mismo resultado para los mismos parámetros, es decir el resultado de una función no se va modificar a lo largo de la ejecución por algún estado del programa.
  • Evaluación perezosa (Lazy evaluation), permite decirle a una función que se ejecute en otro momento, puedo pasar la una función con sus parámetros por parametro a otra función y cuando la otra función necesite realmente ese valor ejecutar la función.  
  • Closures, es la capacidad de guardar en una variable una función para luego ejecutarla; esto permite que sea más fácil. 
  • Etc...

Hoy en día existen diversos lenguajes funcionales. Se podría considerar como uno de los primeros lenguajes funcionales al LISP, que actualmente sigue en uso, sobre todo en áreas de la inteligencia artificial. También un pionero de este paradigma es APL desarrollado en los años 60 (Iverson 1962). El linaje funcional se enriqueció en los años 70, con el aporte de Robin Milner de la Universidad de Edimburgo al crear el lenguaje ML. Éste se subdividió posteriormente en varios dialectos tales como Objective Caml y Standard ML. A fines de los años 80, a partir de un comité, se creó el lenguaje Haskell, en un intento de reunir varias ideas dispersas en los diferentes lenguajes funcionales (un intento de estandarizar el paradigma). Este año Microsoft Research ha incluido un nuevo lenguaje (funcional), denominado F#, a su plataforma .NET.

Si queres aprender Haskel acrodate de este post:

Y si queres probar Haskell:

miércoles, 19 de septiembre de 2012

No hay nada más fecundo que la ignorancia consciente de sí misma.


Dice José Ortega y Gasset:  No hay nada más fecundo que la ignorancia consciente de sí misma.
Y esto es una realidad, dado que en especial no somos cocientes de nuestra ignorancia hasta que adquirimos conocimiento.

Por lo tanto el conocimiento es esa luz que nos muestra las cosas como son y nos hace ver los espacios que había oscuridad. La luz esta incapacitada para mostrarnos todo lo que no sabemos pero si al tener mas cuartos iluminados podemos calcular un poco mejor los espacios en oscuras o poco iluminados.

En cambio la ignorancia no nos muestra nada y desde la ignorancia no podemos ni siquiera medirla. A mi me paso que cuando estaba en tercer año de la facultad pensé, ya se base de datos y un lenguaje de programación; no debe quedar mucho más que aprender y desde esos días no hago más que aprender.

Lo paradójico es que cuanto más sabemos, más somos cocientes de nuestra ignorancia; como el agua salada del mar que cuanto más se toma más sed da. Pero la consciencia de la ignorancia produce más curiosidad; y con un poco de voluntad más conocimiento. Esto es un motor imparable si se lo sabe alimentar.

 En fin cuando se realiza una actividad y es necesario estimar, es necesario reconocer nuestra ignorancia y cuantificarla lo mejor posible.

domingo, 16 de septiembre de 2012

Convertir Java a Object-C con J2ObjC


Los productos de Applet no me apasionan mucho pero es innegable que están tomando cada vez más relevancia. Por lo tanto cuando es necesario hacer aplicaciones nativas a IOS, podemos tomar nuestra aplicación java y llevarla a Object-C con J2ObjC.

J2ObjC es un producto open source de google. Según la wiki J2ObjC, el proyecto fue iniciado por la frustración frente a las aplicaciones de Android que tuvieron que ser reescritos para iOS desde cero. J2ObjC resuelve parte del problema de ser capaz de convertir la lógica de negocio de código Java en su correspondiente object-C.

La herramienta no genera código iOS de interfaz de usuario, ya que sus autores creen que "La unica manera de tenes código eficiente para IOS es escribirlo"  y debido a la complejidad que se ocupan de dicho código.


Dejo links:
http://code.google.com/p/j2objc/
http://google-opensource.blogspot.com.ar/2012/09/j2objc-java-to-ios-objective-c.html

sábado, 15 de septiembre de 2012

The Best Cross Platform Java Tool For Mobile App Developers!

Codename One  promete ser el mejor framework para desarrollar aplicaciones java para todas las plataformas de celulares y tablets, de forma fácil y desplegando nuestras aplicaciones en la nube.

Se puede escribir aplicaciones One en 5 pasos:

  • Bajar el plugin
  • Escribir código en Java
  • Diseñar la aplicación con la herramienta gráfica.
  • Testear la aplicación con el simulador de Codename One
  • Generar aplicaciones nativas



Dejo video:


Dejo link:
http://www.codenameone.com/

miércoles, 12 de septiembre de 2012

martes, 11 de septiembre de 2012

La Universidad de Berkeley ofrece 14 cursos gratuitos en línea sobre tecnología

Otra buena al parecer la Universidad de Berkeley ofrece cursos gratuitos en línea sobre tecnología. Hay cursos para todos los gustos al parecer estan buenos, vamos a tener que tomar alguno.



Dejo el link:
http://geeksroom.com/2012/09/la-universidad-de-berkeley-ofrece-14-cursos-gratuitos-en-linea/66218


domingo, 9 de septiembre de 2012

Apache Wicket 6.0

Una nueva versión de Apache wicket se ha liberado las novedades son que ahora toda la librería ajax se basa en JQuery lo que va a hacer más fácil de usar y más flexible. Otra mejora es que ahora esta empaquetado de tal forma que hace muy fácil la integración con OSGI.

La verdad que me parece excelente la noticia y me parecen cambios esperados por la comunidad. Nunca me gusto el manejo de ajax de wiket, me parece poco flexible; con esta cambio se gano un seguidor más.

Dejo links:
http://wicket.apache.org/
http://wicket.apache.org/2012/09/05/wicket-6.0.0-released.html

sábado, 8 de septiembre de 2012

Cloud 9 una IDE en la nube


Cloud 9 es una IDE online para Javascript y Node.js además de HTML, CSS, PHP, Java, Ruby y  otros 23 lenguajes. Lo que permite es programar en cualquier lugar donde haya internet y acceder a servicios en la nube más fácilmente. Es una interesante propuesta, existe una versión free y otra de pago que vale 12 dolares al mes. 

Dejo un video:



Dejo link:
https://c9.io/

Crea Aplicaciones Desktop en HTML5, CSS3 y JavaScript

Interesante framework que nos permite crear aplicaciones multiplataforma con HTML 5, CSS 3 y Javascript. La verdad todavía no lo he probado pero pinta lindo.

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

viernes, 7 de septiembre de 2012

SolusOS, una distribución Linux que brinda elegancia y comodidad.

SolusOS esta ganando mucho mercado, porque? Por su interfaz, SolusOS trabaja sobre Gnome 3 pero brinda las mismas comodidades que Gnome 2. Con la llegada de Gnome shell; Gnome perdio algunos adictos, los cuales eligieron este gran sistema operativo basado en Debian.



Dejo link:
http://solusos.com/