Translate

lunes, 27 de febrero de 2012

Udacity, la primea universidad online gratuita para todo el mundo


El renombrado profesor de Stanford, Sebastian Thrun, ha dejado la docencia en el centro y ha anunciado un proyecto revolucionario: Udacity, una “universidad” online gratuita e interactiva para cualquier persona en el mundo. El primer curso: cómo construir un motor de búsqueda.

En la pagina web dice:
Creemos que la enseñanza universitaria puede ser a la vez alta calidad y bajo costo.

La verdad es que estoy totalmente de acuerdo con esta premisa, y voy a aprovechar haciendo estos cursos.

Dejo el link:
http://www.udacity.com/

sábado, 25 de febrero de 2012

Agile Open Paraná 2012




En el contexto de los exitosos eventos del Agile Open Tour, se organizará un nuevo Agile Open Paraná 2012 "Compartiendo Metodologías Ágiles" el Viernes 30 de Marzo.


No tengo ni una sola palabra para agregar. En realidad 2... 


Ha inscribirse!!

Dejo el link:



jueves, 23 de febrero de 2012

Hyperpolyglot


Cuando alguien hace un buen trabajo no queda otra que sacarse el sombrero y si es licito compartir ese trabajo a la comunidad. Por esta razón quiero compartir una pagina que encontré que tiene diferentes comparaciones de lenguajes de programación. Estas comparaciones son muy completas y tienen una buena calidad.

Las comparativas son:


Interpreted Languages:PHP, Perl, Python, Ruby
Interpreted Languages:Tcl, Lua, JavaScript, Io
Operating System Automation:POSIX Shell, AppleScript, PowerShell
C++ Style Languages:C++, Objective C, Java, C#
Pascal Style Languages:Pascal, Ada, PL/pgSQL, MySQL
Lisp Dialects:Common Lisp, Scheme, Clojure, Emacs Lisp
Type Inference Languages:Standard ML, OCaml, Scala, Haskell
Untyped Declarative Languages:Prolog, Erlang, Oz
Concatenative Languages:Forth, PostScript, Factor
Tabular Data Selection:SQL, Awk, Pig
Computer Algebra Software:Maxima, Mathematica
Numerical Analysis Software:Fortran, MATLAB, R, NumPy


Dejo el link:
http://hyperpolyglot.org/

miércoles, 22 de febrero de 2012

Code Hero

"Code Hero" es el video juego que fue diseñado para aprender a programar en javascript. Es un juego en primera persona y usa la api Unity3D.
Lo realmente malo es que se descarga para windows o mac solamente; pruebo si mi wine lo tira!

Dejo el video:



Dejo link:
http://primerlabs.com/codehero

LungoJS



Quiero compartir un screencast sobre LongoJS un framework que aprovecha las caracteristicas de HTML 5, CSS 3 y javascript para desarrollar aplicaciones moviles.

LungoJS - RESTful + Templating + Cache (Spanish) from LungoJS on Vimeo.


Dejo la fuente y links:
http://www.genbetadev.com/desarrollo-aplicaciones-moviles/lungojs-usando-restful-templating-cache-screencast
http://vimeo.com/37014134
http://www.lungojs.com/

Apache celebra su 17 aniversario con un release de su servidor

Leo en infoq que el servidor Apache cumple 17 añitos y para festejarlo libera su versión 2.4 de su servidor http.


Dejo mis felicitaciones!!


Y dejo links:
http://httpd.apache.org/
http://www.infoq.com/news/2012/02/Apache-HTTP-Server-2-4


martes, 21 de febrero de 2012

Infografía sobre HTML 5

Comparto una Infografía sobre HTML 5 y sus nuevos tags y propiedades:

Pinned Image

viernes, 17 de febrero de 2012

Spring data y mongodb parte 2

Spring data nos brinda muchos beneficios para poder utilizar MongoDB entre los cuales ya nombramos en este post:

http://emanuelpeg.blogspot.com/2012/02/mongodb-spring-data.html

Pero vamos a empezar?

Spring MongoDB requiere MongoDB 1.4 o superior y JDK 1.5 o superior. Obiamente que lo ideal seria utilizar Spring MongoDB en un proyecto que use Spring.

Antes que nada debemos iniciar MongoDB como lo explica el siguiente post:

Podemos hacer un proyecto Spring con maven y agregar las siguientes dependencias:


    org.springframework.data
    spring-data-mongodb
    1.0.0.M5
  


y el siguiente repositorio:


  
    spring-milestone
    Spring Maven MILESTONE Repository
    http://maven.springframework.org/milestone
  



Debemos agregar un archivo log4j.properties si necesitamos ver el log. El archivo va a contener lo siguiente:

http://emanuelpeg.blogspot.com/2012/02/instalar-mongodb-en-linux.html

log4j.category.org.springframework.data.document.mongodb=DEBUG
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %40.40c:%4L - %m%n


Para el siguiente ejemplo vamos hacer una clase persona:

package org.spring.mongodb.example;

public class Person {

  private String id;
  private String name;
  private int age;
   
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  
  //Getters and setters
  
  @Override
  public String toString() {
    return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
  }
  
}


Buenisimo, ahora hacemos un main para probar:

package org.spring.mongodb.example;

import static org.springframework.data.mongodb.core.query.Criteria.where;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;

import com.mongodb.Mongo;

public class MongoApp {

  private static final Log log = LogFactory.getLog(MongoApp.class);

  public static void main(String[] args) throws Exception {

    MongoOperations mongoOps = new MongoTemplate(new Mongo(), "database");

    mongoOps.insert(new Person("Joe", 34));

    log.info(mongoOps.findOne(new Query(where("name").is("Joe")), Person.class));

    mongoOps.dropCollection("person");
  }
}


Es magia.

En 4 lineas de código se guarda en la base de datos NoSQL MongoDB y se consulta con una consulta con where y se logea el resultado y al terminar la prueba se borra los datos; en 4 lineas.

En este pequeño ejemplo se pueden ver 4 cosas:

  • Se puede instanciar MongoTemplate con el objeto estandar de MongoDB com.mongodb.Mongo y el nombre de la base.
  • Se puede guardar un POJO así de simple sin metadata, ni herencia, ni nada raro.
  • MongoDB sabe el ObjectID por convensión, se maneja el campo id por convesión
  • La clase Persona puede tener solo getters, dado que asigna los datos por convensión. Si los nombres de los parametros del contructor coinciden con los datos usa estos datos para construir el objeto.



Para la proxima un ejemplo más copado. Continuara...

miércoles, 15 de febrero de 2012

Apache Apollo la nueva generación de mensajería!





ActiveMQ Apollo es más rapido, seguro, confiable y facil de mantener broker de mensajería. El cual fue construido a partir de Apache ActiveMQ. Los ingenieros de Apache le dieron una vuelta de rosca a ActiveMQ.

Apollo sólo soporta el protocolo STOMP pero al igual que ActiveMQ, ha sido diseñado para correr sobre varios protocolos. En futuras versiones se añadirá soporte OpenWirepor lo que puede ser compatible con ActiveMQ 5.x clientes JMS.

Entre los cambios de arquitectura podemos nombrar:


  • Refactor basado en Thread Model
  • Implementación para scala 2.8
  • Protocolo agnóstico
  • Administración basada en REST



Dejo links:
http://activemq.apache.org/apollo/
http://activemq.apache.org/apollo/documentation/architecture.html
http://activemq.apache.org/apollo/documentation/getting-started.html

martes, 14 de febrero de 2012

Documentación completa de Play Framework disponible en español


Me llego el siguiente mail de la gente de play, una gran noticia:

"Finalmente hemos concluido la traducción de la documentación de Play
Framework. Pueden consultarla en http://playdoces.appspot.com/

Hace apenas tres meses anunciábamos en esta lista que junto con varios
colegas iniciábamos la traducción de la documentación de Play
Framework, y al mismo tiempo invitábamos a todos los usuarios de este
framework a sumarse a la tarea.

Hoy, mientras nos preparamos para el lanzamiento de play 2.0, gracias
a la colaboración de colegas de América Latina y España ya podemos dar
por concluida la traducción de toda la documentación del sitio de play
Framework.

Aquí tienen los links:

Página principal: http://playdoces.appspot.com/

Si vives en alguno de los países a quienes google restringe el acceso
a las aplicaciones de Google Application Engine (¿qué habrá pasado con
el lema de “No seas malo”?), también tenemos una copia del sitio
alojada en openshift: http://playdoces-opensas.rhcloud.com/

Anuncio de la versión 2.0 de play: http://playdoces.appspot.com/2.0

Hola mundo en play: http://playdoces.appspot.com/documentation/latest/firstapp

Tutorial completo de play: una aplicación completa paso a paso:
http://playdoces.appspot.com/documentation/latest/guide1

y muchos artículos más que pueden encontrar en
http://playdoces-opensas.rhcloud.com/documentation/latest/home

También pueden ver el anuncio en el blog:
http://playlatam.wordpress.com/2012/02/14/documentacion-completa-de-play-framework-disponible-en-espanol/

Queremos agradecer a @rodriguezlaurag y @mfmontanari de Argentina,
@gualtrapa de España, @pjquero de Venezuela and @alfonsokim de México,
y también a los desarrolladores de la traducción japonesa del sitio de
Play, @garbagetown y @ikeike443, cuyo trabajo forkeamos
descaradamente.

Esperamos que nos ayuden a difundir esta noticia y que esta iniciativa
ayude a impulsar el uso de Play en los países de habla hispana.

Saludos

Sas (@develsas)"



Felicitaciones!! 

lunes, 13 de febrero de 2012

Más de Spring Data y MongoDB

Sigo leyendo sobre spring-data un proyecto que se las trae. Ahora vamos analizar el proyecto Spring Data con MongoDB.

Repository es la interfaz más general de Spring Data; CRUDRepository extiende esta y agrega metodos basicos para hacer las operaciones CRUD.


public interface CrudRepository
    extends Repository {
                                                                                         
    T save(T entity);
                                                                                         
    T findOne(ID primaryKey);
                                                                                         
    Iterable findAll();

    Long count();
                                                                                         
    void delete(T entity);
                                                                                         
    boolean exists(ID primaryKey);
                                                                                         
    // … more functionality omitted.
}



PagingAndSortingRepository nos provee los metodos de busqueda:


public interface PagingAndSortingRepository extends CrudRepository {

    Iterable findAll(Sort sort);

    Page findAll(Pageable pageable);
}





Donde Pageable es una clase que sirve para paginar; por ejemplo si quisieramos ir a 2 pagina y la pagina va cada 20 filas se debe instanciar de la siguiente manera: new PageRequest(1, 20)

Seteamos spring para que cree los proxys de nuestra interfaces:


  






Luego inyectamos el objeto a la clase que lo deberia usarlo:

public class SomeClient {

  @Autowired
  private PersonRepository repository;

  public void doSomething() {
    List persons = repository.findByLastname("Matthews");
  }
}




Tambien se pueden definir implementaciones para las interfaces por ejemplo si tenemos un metodo particular. Simplemente hay que definir la implementación:


interface UserRepositoryCustom {

  public void someCustomMethod(User user);
}


class UserRepositoryImpl implements UserRepositoryCustom {

  public void someCustomMethod(User user) {
    // Your custom implementation
  }
}


Como se puede ver no hay que extender de ninguna clase de Spring data, ni hay que hacer algo raro. Ahora hacemos la interfaz posta, la cual va tener los metodos que provee Spring Data y el metodo custom:


public interface UserRepository extends CrudRepository, UserRepositoryCustom {

  // Declare query methods here
}



Esa es una primera parte de Spring Data con MongoDB. Mientras voy aprendiendo escribo algo acá!

Dejo link:
http://static.springsource.org/spring-data/data-document/docs/current/reference/html/

viernes, 10 de febrero de 2012

Instalar MongoDB en Linux

No es el super tutorial, no por culpa mía sino que es muy fácil instalar mongoDB. 
Empezamos bajando la base de este link: http://www.mongodb.org/downloads 
Una vez que hallamos bajado el archivo nos logeamos como root en el directorio que se bajo la base y movemos el archivo a opt (o a la que quieran ustedes)


# mv mongodb-linux-x86_64-2.0.3-rc0.tgz /opt/
# cd /opt


Ahora vamos a descomprimir el archivo y de paso borramos el tgz:


# tar -xvf mongodb-linux-x86_64-2.0.3-rc0.tgz 
# rm mongodb-linux-x86_64-2.0.3-rc0.tgz 

Se crea la carpeta data

# mkdir -p /data/db/
# chown `id -u` /data/db

Luego de crear el directorio de datos dado que MongoDb usa una carpeta para datos con el path configurable pero nosotros vamos usar el path por defecto.

Y ahora a levantar:

# cd mongodb-linux-x86_64-2.0.3-rc0/bin
# ./mongod

Ahora podemos jugar un rato: 

#db.foo.save( { a : 1 } )
#db.foo.find()

Dejo links:

miércoles, 8 de febrero de 2012

NoSQL

Dejo un gráfico que muestra en que conceptos se basaron para desarrollar las bases NoSQL.

Los puntos son: Consistencia, distribuido o capacidad de distribuirse y disponibilidad. En El grafico se puede ver por ejemplo que Voldemort es una base clave-valor que se apoyo sobre los conceptos de disponibilidad y capacidad de distribuirse.


NoSQL y SQL amigos?


Xeround esta brindando un servicio donde mezcla base de datos NoSQL con bases de datos SQL de forma híbrida. En front-end se trabaja con una base MySQL pero el corazón del servicio es una base NoSQL distribuida de 50 gigas.

Xeround provee base de datos como servicio para aplicaciones MySQL en la nube. De esta forma el desarrollador trabaja con una base MySQL sin tener que lidiar con detalles de bases NoSQL.

El servicio se ejecuta en la nube proporciona la alta disponibilidad (99,9%) y la escalabilidad en general,asociado a un almacén de datos NoSQL, que se puede implementar en Amazon EC2 y Rackspace, y puede ser utilizado como un add-on de Heroku para bases de datos de hasta 500 MB.

Dejo links:
http://www.infoq.com/news/2012/02/Hybrid-SQL-NoSQL
http://xeround.com/
http://xeround.com/developers/