Translate

lunes, 18 de octubre de 2010

TDD Static vs. Dynamic

Interesante video sobre TDD, comparación entre Smalltalk y Java. Es interesante aunque no trabaje es serio con lenguaje débilmente tipado con sistemas mantenibles; pero esta bueno el video. Muy claro.






miércoles, 13 de octubre de 2010

MongoDB

Escuchando un poco de Javier Malosetti, hice un trabajo freelance con mongoDB y ruby. La verdad me costo un toque, no tengo mayor experiencia con estas tecnologías. Pero quede maravillado con mongoDb, una base noSQL que esta de moda, es Open Source y la bautizaron los que saben como la mysql de las bases noSQL, muy simple.

Mongodb es una base documental que guarda los datos con un formato “like json” que se llama bson; este formato es un mapa clave valor el cual se puede representar de diferentes maneras en diferentes lenguajes:

JavaScript: {"foo" : "bar"}
Perl: {"foo" => "bar"}
PHP: array("foo" => "bar")
Python: {"foo" : "bar"}
Ruby: {"foo" => "bar"}
Java: DBObject obj = new BasicDBObject("foo", "bar");

Para instalarlar MongoDb solo hay que descomprimir un tar o zip depende de que sistema operativo elijan luego crear el directorio data

C:\> mkdir data\db

Y listo!! Se van a la carpeta bin y ejecutan mongod.exe/.sh (según el S.O.) y de esta forma levantan el servicio, seria como levantar el motor de base de datos.

Bueno ahora podemos probarlo ejecutando mongo.exe/.sh se abrira un administrador símil a un software de consulta de base de datos. Por defecto mongo se ejecuta sin seguridad y el software de consulta esta en la base test.

C:\> cd \my_mongo_dir\bin 
C:\my_mongo_dir\bin
> mongo
> // the mongo shell is a javascript shell connected to the db
> 3+3
6
> db
test
> // the first write will create the db:
> db.foo.insert( { a : 1 } )
> db.foo.find()
{ _id : ..., a : 1 }
> use mydb
switched to db mydb


Vamos a insertar datos con ruby. Para la próxima lo hacemos con Java.

class MongoDBInsert

def initialize(host, port, db, user_name="", password="")

@db = Mongo::Connection.new(host, port).db(db)

# @db.authenticate(user_name, password)

end


def insert(objetos)

coll = @db.collection("objetos")

objetos.each do |objeto|

coll.insert(objeto.index => objeto.to_str)

end

end

end


if __FILE__ == $0

...

mongoDBInsert = MongoDBInsert.new("localhost", 27017, "test")

mongoDBInsert.insert(objects)

end


Dejo links:

http://www.mongodb.org/

http://www.mongodb.org/display/DOCS/Quickstart

http://www.mongodb.org/display/DOCS/Home

Para la próxima insertamos usando java!!

miércoles, 6 de octubre de 2010

Cuarta Conferencia Internacional de Smalltalk

los dias 11, 12 y 13 de Noviembre se llevará a cabo la Cuarta Conferencia Internacional de Smalltalk - Smalltalks 2010, organizado por la Fundación Argentina de Smalltalk (FAST).

La Fundación Argentina de Smalltalk (FAST) se complace en anunciar la celebración de su 4ª Conferencia Internacional de Smalltalk – Smalltalks 2010, que tendrá lugar en la Universidad Tecnológica Nacional de la ciudad de Concepción del Uruguay (provincia de Entre Ríos) los días 11, 12 y 13 de Noviembre de 2010.

Es un orgullo como Entrerríano, que se hagan estos congresos en nuestra provincia.

Dejos Links:
http://www.frcu.utn.edu.ar/index.php
http://www.clubsmalltalk.org/web/
http://www.fast.org.ar/

martes, 5 de octubre de 2010

Scala Solutions

Copie esta noticia de javahispano, se que eso no se hace. Lo que sucede es que siempre desde el blog se comento los beneficios de scala, y además me gusta mucho. Por lo tanto quiero compartir la siguiente noticia:

El creador del lenguaje Scala ha creado una empresa llamada Scala Solutions para dar soporte empresarial a este lenguaje híbrido entre OOP y Programación funcional.

La empresa dará soporte al lenguaje y ofrecerá productos alrededor de el. Uno de los primeros será una herramienta de migración para resolver incompatibilidades binarias de productos hechos con versiones de Scala anteriores. Esta herramienta estará lista para la versión 2.9 del lenguaje.

Además de eso, la empresa dará consultoría y cursos; ya se anunciaron los primeros en Amsterdam, Londres y Paris.

Scala es uno de los lenguajes para la JVM que están generando mucho ruido ya que es una interesante mezcla entre programación orientada a objetos y los beneficios de la programación funcional; además de que ofrece type safety y un desempeño igual (en algunos casos mejor) al del lenguaje Java. Pero a pesar de que algunas empresas ya apuesta a él como FourSquare y Etherpad antes de la adquisición por Google, seguía teniendo el estigma de ser un lenguaje "académico" por haber sido creado y mantenido por investigadores.

La idea de esta empresa es profesionalizar el lenguaje y dar soporte empresarial que mejore la recepción del mismo. Algo que ya ha funcionado a otros productos open source como Hibernate y Spring.

martes, 28 de septiembre de 2010

Migración a Spring 3

Luego de esperar el tiempo necesario como para saber que todo esta bien migre a Spring 3 y me lleve una grata sorpresa, es fácil y todo funciona joya. Solo tuve un problema con el runtime de junit dado que usaba junit 4.4 y la versión de junit debe ser mayor o igual a 4.5. Cambie la versión de junit y andubo muy bien.

Dejo el POM:









org.springframework
spring-core
${org.springframework.version}





org.springframework
spring-expression
${org.springframework.version}





org.springframework
spring-beans
${org.springframework.version}





org.springframework
spring-aop
${org.springframework.version}





org.springframework
spring-context
${org.springframework.version}





org.springframework
spring-context-support
${org.springframework.version}




org.springframework
spring-tx
${org.springframework.version}




org.springframework
spring-jdbc
${org.springframework.version}





org.springframework
spring-orm
${org.springframework.version}





org.springframework
spring-oxm
${org.springframework.version}





org.springframework
spring-web
${org.springframework.version}




org.springframework
spring-webmvc
${org.springframework.version}




org.springframework
spring-webmvc-portlet
${org.springframework.version}




org.springframework
spring-test
${org.springframework.version}
test










3.0.4.RELEASE


UTF-8




Y dejo Link:
http://blog.springsource.com/2009/12/02/obtaining-spring-3-artifacts-with-maven/

lunes, 27 de septiembre de 2010

Concurrencia en Erlang



Erlang es un lenguaje de programación de propósito general, que como mayor característica es un lenguaje funcional el cual implementa el paradigma funcional por medio del modelo de actores. Como es esto?

Erlang tiene un proceso basado en modelo de concurrencia con pasaje de asíncrono de mensajes.

El modelo de actores es un modelo de concurrencia computacional que trata a los "actores" como los primitivos universal de la computación digital en paralelo: en respuesta a un mensaje que recibe, un actor puede tomar decisiones locales, crear más actores, envía más mensajes, y determinar cómo responder al siguiente mensaje recibido.

Veamos un pequeño ejemplo:

-module(counter).
-export([start/0,loop/1]).

start() ->
spawn(counter, loop, [0]).

loop(Val) ->
receive
increment -> loop(Val + 1)
end.

En este ejemplo se muestra:
  • Un nuevo proceso contador inicia por cada llamada a counter:start/0 . Cada función evalua counter:loop/0.
  • Una función recursiva para generar un proceso permanente que se suspende cuando espera de la entrada. Lazo es una función recursiva de cola, que asegura que un proceso contra evaluará en el espacio constante.
  • Recepción de mensajes selectivos, en este caso el incremento de mensajes.

El modelo de actores también fue tomado por Scala para implementar la concurrencia computacional.

El modelo de Actores de Scala proporciona envios de mensajes síncronos y asíncronos (este último se implementan mediante el intercambio de varios mensajes asíncronos). Por otra parte, los actores pueden comunicarse con el futuro en que las solicitudes se gestionan de forma asíncrona, pero devuelven una representación (el futuro) que queda a la espera de la respuesta.
Lo bueno de scala es que los actores los cuales se puede usar beneficios de la programación orientada a objetos.


Dejo links:
http://www.erlang.org
http://ruben.savanne.be/articles/concurrency-in-erlang-scala

viernes, 24 de septiembre de 2010

Noticias de la JDK en la JavaOne

Todo el mundo Java esta mirando lo que sucede en la JavaOne, para el que no sabe es el evento Java más importante organizado en su momento por Sun ahora por Oracle.

Entre lo más relevante para mi es los cambios y fechas para las nuevas jdks digo jdks que oracle piensa sacar 2 versiones el año que viene una Java 7 el proyecto coin, que ya lo nombramos anteriormente.

http://emanuelpeg.blogspot.com/2009/09/las-novedades-del-jdk-7.html

La otra versión Java 8 proyecto Jigsaw saldrá para fines del año siguiente con Clousures y modularización de la JDK.

Otras novedades es que la OpenJDK esta en un 98% y el 2% que queda son cosas que casi ni se usan. Por lo tanto esta casi a punto caramelo.

Esto es un muy humilde resumen de lo relevante a la JDK. A mi entender es positivo que java siga progresando y que Oracle no deje a Java quedarse en el tiempo.

domingo, 19 de septiembre de 2010

Lift Web Framework


Lift es otro framework web. El cual corre bajo la plataforma java, pero usa Scala como lenguaje. Si miramos la pagina de lift nos indica que es seguro, productivo y fácil de mantener.

Lift nació con las virtudes de frameworks web más famosos como Rails y Django. Lift tiene la ventaja del lenguaje scala que al ser un lenguaje script y multiparadigma permite desarrollar rápidamente, pero como corre en la plataforma java se puede comunicar con librerías jar ya desarrolladas.

Lift puede empaquetarse como un war y funcionar en cualquier servidor web java como Tomcat o Jetty.

Lift es un proyecto open source distribuido bajo licencia Apache V2.0

Dejo, como siempre, links:

http://liftweb.net/

http://lift-example.appspot.com/


miércoles, 15 de septiembre de 2010

SyntaxHighlighter

Luego de un consejo de un importante lector del blog (Roman) , y varios comentarios de diferentes lectores hemos agregado un formateador de código!!

Un esfuerzo más para que los lectores se sientan más cómodos, el plugin que agregamos se llama SyntaxHighlighter, dejo la pagina y una demostración.

http://alexgorbatchev.com/SyntaxHighlighter


package tutorial;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String execute() {
name = "Hello, " + name + "!";
return SUCCESS;
}
}

lunes, 13 de septiembre de 2010

¡Feliz día del programador!

Hoy es el 256º día del año, de modo que –apropiadamente– se celebra el Día del programador. Según parece en Rusia además consiguieron que fuera oficialmente un día festivo para quienes se dedican a ello como profesión.

Aprender a programar en Ruby


Encontré un libro muy recomendable para aprender a programar en Ruby

http://pine.fm/LearnToProgram/

Espero que les sea útil!!!

sábado, 11 de septiembre de 2010

Editor HTML online.

Siempre que tengo que editar algo en HTML, CSS o hacer algo con javascript, jquery, etc dudo, dado que no trabajo todos los días con estas tecnologías la memoria juega una mala pasada. Una practica interesante es ir a un blog de notas probar lo que se quiere hacer y luego aplicarlo en la pagina, esto es muy bueno especialmente cuando se esta probando algo en javascript.

Buscando en internet encontré una pagina que permite editar HTML, javascript, etc. online. Esta muy no necesito más el blog de notas, además se pueden importar librerías como jquery, prototype, dojo, etc.

http://jsbin.com/unuyi/edit#source

Espero que les sea útil!!!

sábado, 4 de septiembre de 2010

FUSE


FUSE es una comunidad que promueve el uso de productos Apache para el uso de SOA. La idea es crear una comunidad Open Source de uso de SOA, de esta forma poder compartir experiencias, conocimiento, etc.

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

viernes, 3 de septiembre de 2010

Apache click y dobleClick


Apache click es un framework web, diseñado para ser eficiente y fácil de desarrollar, si tenemos en cuenta estos objetivos comprobamos que cumple altamente con las expectativas, resumiendo “alto framework”. La única desventaja es que esta muy inmaduro todavía, por ejemplo no trae una forma estándar de integrarse con Spring. Pero no todo esta perdido existe un proyecto llamado doble click que integra Apache click con Spring y ofrece unas anotaciones que nos hacen la vida más fácil aun.
Bueno vamos hacer un ejemplo, creamos un proyecto web con maven.

$ mvn archetype:create -DarchetypeartifactId=maven-archetype-webapp -DgroupId=com.example -DartifactId=example-war-project

Luego agregamos las dependencias al pom:

<!-- Apache Click -->

<dependency>
<groupId>org.apache.click</groupId>
<artifactId>click</artifactId>
<version>2.2.0</version>
</dependency>

<dependency>
<groupId>org.apache.click</groupId>
<artifactId>click-extras</artifactId>
<version>2.2.0</version>
</dependency>

<dependency>
<groupId>org.apache.click.doubleclick</groupId>
<artifactId>inject</artifactId>
<version>1.0</version>
</dependency>

<dependency>
<groupId>org.apache.click.doubleclick</groupId>
<artifactId>injectspring</artifactId>
<version>1.0</version>
</dependency>

<!-- /Apache Click -->

Necesitamos el siguiente repositorio:

<repositories>
<repository>
<id>doubleclick-repo</id>
<url>https://doubleclick.googlecode.com/svn/repo/</url>
</repository>
</repositories>

Ahora debemos configurar web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
<display-name>Web Application</display-name>
<description>Web Application</description>

<servlet>
<servlet-name>ClickServlet</servlet-name>
<servlet-class>org.apache.click.ClickServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>ClickServlet</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>redirect.html</welcome-file>
</welcome-file-list>

</web-app>

Tenemos que crear un html redirect.html dado que el interceptor no puede tomar la pagina de inicio ya que el filtro dice *.htm entonces hacemos el redirect.htm:

<html>
<head>
<meta http-equiv="Refresh" content="0;URL=home/home.htm">
</head>
</html>

Ahora todas las paginas van a ir a home/home.htm, las paginas de apache click estan formadas con 2 archivos un htm y una clase java. Pero antes de crear estos archivos veamos el archivo click.xml necesario para que funcione apache click:

<?xml version="1.0" encoding="UTF-8"?>
<click-app>

<pages package="com.example.web"/>

<page-interceptor classname="org.apache.click.doubleclick.inject.DependencyInjectorPageInterceptor"
scope="application"/>

<controls>
<control classname="org.apache.click.doubleclick.injectspring.SpringControl" />
</controls>

</click-app>

Ahora veamos la HomePage.java :

/**
*
*/
package com.example.web.home;


/**
* Home Page
*
* @author emanuel
*
*/
public class HomePage extends Page {

private static final long serialVersionUID = -2868696724309671438L;

@InjectBean
private String title;

private String titlePage

@Override
public void onInit() {
this.titlePage = "Home";
}

}

Veamos home.htm :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="keywords" content="blog" />
<meta name="description" content="Blog Website" />

<title>Example - $titlePage </title>

</head>

<body>

<h1> $title </h1>

</body>
</html>

Buenísimo, ahora vamos a configurar applicationContext.xml de Spring :

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


<bean id="hola" class="java.lang.String" >
<constructor-arg index="0" value="HOLA MUNDO!!" />
</bean>

</beans>

Y con esto terminamos, como ven doble click injecta el bean hola por medio de inferencia por tipo.

Espero que les guste el ejemplo, dejo links como siempre:

http://click.apache.org/
http://code.google.com/p/doubleclick/wiki/clickspring
http://emanuelpeg.blogspot.com/2010/02/apache-click.html

sábado, 28 de agosto de 2010

Firebug para jquery


Firebug es un plugin para firefox imprescindible para un desarrollador web, dado que nos permite entre otras funcionalidades debugear javascript.

Existen diferentes extenciones de firebug, entre ellas encontré fireQuery, que nos facilita el debug para cuando usamos JQuery.

Dejo los links:

http://firequery.binaryage.com/