Translate

miércoles, 14 de noviembre de 2012

Oracle quiere saber tu opinión sobre qué hacer con Java EE 7


Leyendo javahispano y también en infoQ me entere sobre la encuesta que realiza Oracle sobre JEE 7   Me parece un paso importante de Oracle para motivar a la comunidad, dejo el link de la encuesta y las noticias:

https://www.surveymonkey.com/s/javaee7
http://www.infoq.com/news/2012/11/ee7-early-draft-review
http://www.javahispano.org/portada/2012/11/14/oracle-quiere-saber-tu-opinion-sobre-que-hacer-con-java-ee-7.html

FlashBack en Oracle


Todos los días se aprende algo nuevo y hoy aprendí algo muy útil! FlashBack en oracle, que en resumen es como una papelera de reciclaje de nuestras tablas.

La idea es que con el lenguaje DDL puedo destruir o crear tablas; cuando borro una tabla, indice o secuencia no tengo rollback, es decir no puedo volver atrás; por suerte existe FlashBack que permite recuperar los objetos como si fueran de una papelera.  También Oracle Flashback Technology provee varias alternativas para ver el estado pasado de los datos, “rebobinando” los datos hacia atrás y adelante sin necesidad de un restore de la base desde un backup.

En este articulo voy a mostrar como deshacer borrados de tablas, veamos un ejemplo. Supongamos que hago un drop de una tabla y me doy cuenta que me equivoque, esto queda en la papelera de reciclaje.

drop table prueba;


select * from recyclebin;

Con este select nos mostrara la tabla que borramos, ahora vamos a restaurarla:

 flashback table prueba to before drop;

Con  flashback table le decimos que queremos recuperar la tabla y con  to before drop que la queremos recuperar después que la borramos.

Si borramos con purge no la envía a la papelera de reciclaje y se borra totalmente.

drop table prueba purge;

Cuando un usuario lanza la orden DROP sobre una tabla, en realidad, lo que hace Oracle es renombrar ese objeto y todas sus dependencias, tales como triggers, índices, constraints etc. El nombre que recibe el objeto es generado automáticamente por Oracle pero siempre está prefijado por BIN$. Como sólo se produce un renombrado, los objetos siguen existiendo y ocupando espacio sus correspondientes tablespaces. El objeto sólo se borra definitavemente si el usuario o el administrador usan el comando PURGE o el espacioocupado por ese objeto es necesario para acomodar una nueva extensión de un objeto vivo (por esto último, se dice que FLASHBACK DROP no es intrusivo ya que si el espacio ocupado por la papelera es necesario se libera automáticamente).Por el contrario, cuando se borra un tablespace sus objetos no son pasados a la papelera sino que son borrados definitivamente, incluyendo los objetos que estén en la papelera de ese tablespace. Lo mismo ocurre cuando se borra un usuario con opción CASCADE.

Dejo link:
http://docs.oracle.com/cd/B28359_01/server.111/b28310/tables011.htm

domingo, 11 de noviembre de 2012

Código fuente más legible con Interfaces Fluent

Cuando hablamos de interfaces fluent (nombre acuñado por el propio Eric Evans y Martin Fowler), es hablar de un tipo de implementación de la programación orientada a objetos que nos ayuda a crear código fuente más legible. Se basa en crear métodos dentro de objetos que nos devuelven al propio objeto que las usa. De esta forma podemos encadenar varias llamadas encadenadas por puntos. Pero mejor vamos a ver un ejemplo en C# :

public class FluentClass
{
    private int value;
 
    public FluentClass WithValue(int value) { this.value = value; return this; }
 
    public FluentClass AddOne() { this.value += 1; return this; }
 
    public FluentClass SubstractTwo() { this.value -= 2; return this; }
 
    public FluentClass MultiplyThree() { this.value *= 3; return this; }
 
    public FluentClass DrawValue() { Console.WriteLine(this.value); return this; }
}
 
static void Main(string[] args)
{
    var fluent = new FluentClass()
                        .WithValue(9)
                        .DrawValue()
                        .AddOne()
                        .DrawValue()
                        .SubstractTwo()
                        .DrawValue()
                        .MultiplyThree()
                        .DrawValue();
 
    Console.ReadLine();
}

En la wikipedia existen ejemplos en Ruby, java, scala y c++.

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

Microsoft Open Sources Reactive Extensions


Para ser sincero no tengo idea de Reactive Extensions de Microsoft, lo interesante de la noticia es como Microsoft entendió para donde va el mercado y tiene cada vez más productos open sources.

Reactive Extensions (Rx) es una tecnología de Microsoft Open Technologies. Esto aumenta las posibilidades de que este framework este disponibles con Mono pronto.

Rx es un framework que permite componer programas de forma asíncrona y basados eventos usando Secuencias y consultas el estilo LINQ.

Dejo links:
http://www.infoq.com/news/2012/11/rx-net-open-source
http://www.microsoft.com/en-us/openness/default.aspx
https://rx.codeplex.com/

Libro de Spring data



Dejo el link del libro sobre spring Data:

viernes, 9 de noviembre de 2012

Firefox, el navegador “open source” de Mozilla, cumple 8 años


Aunque nació en 2003 como una rama experimental del proyecto Mozilla, con el objetivo de encontrar una alternativa viable a Mozilla Application Suite, y a pesar también de que hubo una primera tentativa con Phoenix, no fue hasta el 9 de noviembre de 2004 que la primera versión del navegador Firefox vio la luz.

Feliz Cumpleaños Firefox!!

miércoles, 7 de noviembre de 2012

Infografía para emprendedores pobres...


Como arreglar cualquier computadora??

Es muy bueno!!

Sinatra, rápida creación de aplicaciones web en Ruby con el mínimo esfuerzo



Sinatra es un framework para aplicaciones web de software libre y código abierto. La idea es interesante es un dsl para hacer paginas webs. Utilizando Ruby se puede hacer paginas webs muy rápidamente.  Sinatra es pequeño y flexible. Sinatra no sigue el típico patrón modelo vista controlador que se ve en otros frameworks, como Ruby on Rails. En su lugar, Sinatra se enfoca en la "rápida creación de aplicaciones web en Ruby con el mínimo esfuerzo."

Me imagino que se puede utilizar en prototipos desechables o en hacer sitios poco complejos.





Veamos un ejemplo de una pagina simple:


#!/usr/bin/env ruby -I ../lib -I lib
require 'sinatra'
get('/') { 'this is a simple app' }

Y ya esta una pagina simple pero completa con 2 lineas de código. Esta filosofia se extendio a otras tecnologias y se puede usar framework similares a Sinatra en muchos lenguajes; saco la lista de la wikipedia:


PHP

JavaScript

Python

Erlang

Groovy

Scala

.NET

Perl

Java

Tengo muchas ganas de probar la version de scala, scalatra.

Dejo link:
http://es.wikipedia.org/wiki/Sinatra_(software)
http://www.sinatrarb.com

martes, 6 de noviembre de 2012

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