domingo, 30 de diciembre de 2012

Feliz 2013!!



Feliz año nuevo 2013 para todos, en especial a todas las persona que nos siguen, comentan o simplemente leen cada tanto.

Mis mejores deseos para todos!!

jueves, 27 de diciembre de 2012

JEdit versión 5 soporta Scala y Dart


Si no conocen JEdit, que les puedo contar? Es un editor de texto hecho en Java por lo tanto es multiplataforma. Es muy bueno, soporta plugins y más de 200 lenguajes, es configurable y de licencia GPL; lo único que le falta es que cebe mate.

Yo lo uso mucho en linux porque en linux no esta el notepad++ que personalmente me parece muy bueno también.

Lo interesante de la noticia es que ahora en su versión 5 va a soportar Scala y Dart. Se puede ver el crecimiento de este editor pero tambien de estos dos lenguajes que cada vez más se van haciendo espacio.

Dejo links:
http://www.infoq.com/news/2012/12/jedit5
http://www.jedit.org/

miércoles, 26 de diciembre de 2012

Nuevo Grupo de Scala en español

Invito a toda la gente que le interese el lenguaje Scala que se sume al nuevo grupo de Scala de Google+
La idea es formar la comunidad de Scala de habla hispana y compartir información, dudas, discusiones, etc...

Dejo link:
https://plus.google.com/u/0/communities/108530613408854767618

Mapa de Linux

Una forma muy graciosa de ilustrar el mundo linux:


martes, 25 de diciembre de 2012

Test-drive data visualization in the R language.

La gente code school ha publicado un curso gratuito sobre el lenguaje R. El lenguaje R es un lenguaje funcional en realidad R es un lenguaje y entorno de programación para análisis estadístico y gráfico.

Si vemos la wiki, nos dice: Se trata de un proyecto de software libre, resultado de la implementación GNU del premiado lenguaje S. R y S-Plus -versión comercial de S- son, probablemente, los dos lenguajes más utilizados en investigación por la comunidad estadística, siendo además muy populares en el campo de la investigación biomédica, la bioinformática y las matemáticas financieras. A esto contribuye la posibilidad de cargar diferentes bibliotecas o paquetes con finalidades específicas de cálculo o gráfico.

R se distribuye bajo la licencia GNU GPL y está disponible para los sistemas operativos Windows, Macintosh, Unix y GNU/Linux.

Es buenisimo!

Dejo el link:
http://tryr.codeschool.com/

domingo, 23 de diciembre de 2012

ATDD By Example


Le gente de InfoQ nos regalan un libro de TDD. Se preguntan porque la A, es de Acceptance

Recordemos que Acceptance Test Driven Development es una práctica que se logra teniendo una madurez utilizando TDD. ATDD dice que los criterios de aceptación pueden ser llevados a pruebas unitarias y de esta forma el proceso garantiza que el cliente dispone de un mecanismo automático para decidir si el software cumple con sus requisitos.

Con ATDD, el equipo de desarrollo tiene un objetivo específico satisfacer las pruebas de aceptación, que los mantienen continuamente dentro de lo que el cliente realmente quiere

Dejo el link:
http://www.infoq.com/articles/atdd-by-example-book

jueves, 20 de diciembre de 2012

¿Te atreves a soñar?

Un buen video para emprendedores, muy bueno:


7 base de datos en 7 días



Se acuerdan que hable de un libro muy bueno llamado 7 lenguajes en 7 días, bueno Eric Redmond y Jim R. Wilson lanzaron un nuevo libro llamado 7 base de datos en 7 días. En el recorre base de datos relacionales y NoSQL. Las bases que se muestran son Redis, Neo4J, CouchDB, MongoDB, HBase, Riak, y Postgres. La idea es no saber todas, pero si sus particularidades y porque elegir una o la otra.

Dejo el link:
http://pragprog.com/book/rwdata/seven-databases-in-seven-weeks

martes, 18 de diciembre de 2012

Guía práctica sobre el software libre




Quiero compartir la "Guía Práctica sobre Software Libre su selección y aplicación local en américa LATINA y el Caribe" con ese nombre debe ser un libraso.

El libro empiza algo así:

"En 2001, al comenzar UNESCO a brindar apoyo al movimiento de software libre,se cumplieron 18 años desde que lanzamos el movimiento y empezamos a desarrollar el sistema operativo GNU. Hemos recorrido un largo camino.

En 1984 era imposible usar un sistema moderno de computadora sin instalar un sistema operativo propietario, que hubiera sido entonces obtenido bajo una licencia de uso restrictiva. Nadie tenía permiso para compartir libremente el software con otros usuarios y prácticamente todos los usuarios tenían bloqueado el acceso que les hubiera permitido ajustar el software a sus propias necesidades. Los propietarios del software habían levantado paredes para dividirnos.

El Proyecto GNU fue fundado para cambiar esto. Su primera meta: desarrollar un sistema operativo portable compatible con Unix que fuera hecho 100% de software libre. Ni 95%, ni 99.5%,sino 100%, de manera que los usuarios fueran libres de distribuir el sistema completo y de  cambiar y contribuir con cualquier parte de él. El nombre del sistema, GNU, es un acrónimo recursivo que significa "GNU no es Unix"­­ como manera de rendir homenaje a Unix y a la vez indicar que GNU es algo diferente. Técnicamente GNU es como Unix. Pero GNU le da a sus usuarios libertad, y Unix no.."

Lo que no sabia es que la UNESCO brindaba apoyo al software libre.

Dejo link:

http://unesdoc.unesco.org/images/0015/001560/156096s.pdf

Libro de CSS avanzado gratuito.


Quiero compartir el siguiente libro de css avanzado, entre los temas estan:
Parece bueno, a leerlo entonces.
http://www.librosweb.es/css_avanzado/pdf/css_avanzado.pdf

lunes, 17 de diciembre de 2012

Yield en scala y en ruby


Yield es una palabra reservada en diferentes lenguajes por ejemplo en Ruby, podemos definir un código, dejando una definición a medias para poder ampliarla en el momento el que sea llamada, por ejemplo:


def ordena( vector )
     (0..(vector.size-2)).each do |i|
         k = i
         (i+1..(vector.size-1)).each do |j|
             k=j if yield(vector[k], vector[j])
         end
         if k!=i
             tmp = vector[k]
             vector[k] = vector[i]
             vector[i] = tmp
         end
     end
end

vector = [ 5, 3, 2, 4, 6, 1 ]

ordena(vector) do |e1, e2|
    (e1 > e2)
end

puts vector  # [1, 2, 3, 4, 5, 6]

ordena(vector) do |e1, e2|
    (e1 < e2)
end

puts vector  # [6, 5, 4, 3, 2, 1]

Como se ve en el ejemplo a ordena se le pasa un vector y también un pedazo de código o closure, y este se ejecuta donde se encuentra la palabra yield. Como se puede ver se aprovecha mucho que ruby es dinámicamente tipado.

Pero en Scala es diferente, yield es usado para retornar resultados múltiples desde una iteración. Por ejemplo:

val range = 1 to 5
for(val i <- range) yield i+1 //RandomAccessSeq.Projection[Int] = RangeM(2, 3, 4, 5, 6)

Como podemos ver con el for se itera y con yield es como se van acumulando los resultados.

Por lo visto, cambia mucho el uso de Yield desde Ruby a Scala. Cuidado con esto puede ser causa de muchas errores!


domingo, 16 de diciembre de 2012

Tu código va a cambiar el Mundo!


Esta pagina es una iniciativa muy buena, lo que nos permite es ayudar a proyectos sin fines de lucro que se conciben para ayudar.


Colaborar es algo más que habitual en nuestro sector: desde quien participa en algún proyecto de software libre hasta quien libera sus propios trabajos cediéndolos a la comunidad, pasando por los que realizan desinteresadamente alguna web para una asociación que conozca.

Pues precisamente ese lado solidario es el que se quiere emplear en esta página creada por la Fundación hazloposible, aunando a las ONG que requieran ayuda y a los profesionales que quieren ofrecerla pero quizá no saben muy bien cómo.

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

Infografía: historia de la virtualización




10 años de Creative Commons


Antes que nada que es Creative Commons, si vemos la wikipedia nos dira:


"Creative Commons Corporation (Creative Commons o CC) (en español: «bienes comunes creativos») es una organización sin ánimo de lucro, cuya oficina central está ubicada en la ciudad de Mountain View en el estado de California en los Estados Unidos de América, que permite usar y compartir tanto la creatividad como el conocimiento a través de una serie de instrumentos jurídicos de carácter gratuito.

Dichos instrumentos jurídicos consisten en un conjunto de "modelos de contratos de licenciamiento" o licencias de derechos de autor (licencias Creative Commons o licencias "CC") que ofrecen al autor de una obra una forma simple y estandarizada de otorgar permiso al público en general de compartir y usar su trabajo creativo bajo las términos y condiciones de su elección. En este sentido, las licencias Creative Commons permiten al autor cambiar fácilmente los términos y condiciones de derechos de autor de su obra de "todos los derechos reservados" a "algunos derechos reservados"."


Creative Commons lanzó su primera licencia pública el 16 de diciembre de 2002, y desde aquel 2002 se han liberado miles de documentos, fotografías, archivos audiovisuales, canciones, y demás obras culturales, bajo las distintas formas posibles que permiten estas licencias. Desde instituciones hasta individuos particulares, la cantidad de adherentes de CC crece todos los años.

Durante 9 días (del 7 al 16 de diciembre), se desarrollará la campaña
“#cc10”, a la que se puede aportar publicando noticias, liberando obras, anunciando actividades o cualquier otro tipo de idea que contribuya a destacar la importancia de la cultura libre en la sociedad actual.

Dejo links:
http://www.creativecommons.org.ar/article/10-anos-de-creative-commons-en-el-bar-orsai/
http://creativecommons.org/

jueves, 13 de diciembre de 2012

No estamos grande para jugar a la lucha Spring vs JEE??


A raíz de un articulo de InfoQ  me quede pensando, cuanto cuesta que spring respete el estándar JEE? Recordemos que Spring nació como un framework que proveía un montón de características para no utilizar JEE.  Spring se ha popularizado en la comunidad de programadores en Java al ser considerado como una alternativa y sustituto del modelo de Enterprise JavaBeans. Por su diseño el framework ofrece mucha libertad a los desarrolladores y soluciones muy bien documentadas y fáciles de usar para las prácticas comunes en la industria.

Pero JEE aprendió de sus desaciertos fue acercándose a un modelo más flexible. Y yo veo que con el tiempo se fue springizando. EL GAP que existía entre Spring y JEE es cada vez más pequeño. Cuesta mucho hacerlo nulo? O optar por hacer Spring JEE y otro no JEE?

Si, ya se la respuesta es: "A mi me gusta solo usar tomcat o jety y no quiero usar JBoss o Glashfish". Creo que se puede modularizar y en los servidores solo cargar lo que usamos. Por ejemplo si solo necesito servicios web, jetty. Si necesito servicios web y un servicio como JMS uso jetty + modulo de ActiveQ o el que sea. Hoy en día es como que no existe punto medio o jetty o tomcat o JBoss  o otro servidor JEE. Algo super liviano o algo pesado. Por esto también aplaudo a soluciones como TomEE que implementa Java EE 6 Web Profile.

Que opinan matamos a JEE como un estándar cerrado y lo rompemos en cajitas modulares? Hacemos que spring respete ese orden y cumpla el estándar? No estamos grande para jugar a la lucha Spring vs JEE?

miércoles, 12 de diciembre de 2012

Corriendo clases java en una base de datos oracle


Cuando tenemos que hacer un store procedures en oracle, automáticamente pensamos en pl/sql, y automáticamente nos duele la cabeza.

Porque no hacerlo en Java?

Es fácil, vamos a hacer un ejemplo rápido y otro día hacemos algo más complejo.

Primero creamos una clase java algo así:


public class Hello
{
  public static String world()
  {
    return "Hello world";
  }
}

Ya tenemos nuestra clase un hola mundo común y corriente. La compilamos con javac o podemos usar algún IDE como eclipse y obtenemos Hello.class

Ahora cargamos nuestra clase en la base de datos oracle:

loadjava -user scott/tiger Hello.class

En el ejemplo lo cargamos en esquema de scott pero puede ser cualquiera.

Y ahora creamos el store con plsql o el TOAD:


SQL> CONNECT scott/tiger
connected
SQL> CREATE OR REPLACE FUNCTION helloworld RETURN VARCHAR2 AS
  2  LANGUAGE JAVA NAME 'Hello.world () return java.lang.String';
  3  /
Function created.


Por ultimo llamamos a nuestro store:


SQL> VARIABLE myString VARCHAR2(20);
SQL> CALL helloworld() INTO :myString;
Call completed.
SQL> PRINT myString;

MYSTRING
---------------------------------------
Hello world

No puede ser más fácil!!


Dejo link:
http://docs.oracle.com/cd/B19306_01/java.102/b14187/chthree.htm

Spring Social

Spring Social es una extensión de Spring Framework que permite conectas sus aplicaciones con Software-as-a-Service (SaaS) como Facebook o twitter.

Sin rodeos es una exención que nos permite interactuar con Apis de redes sociales, para por ejemplo que el usuario se autentique con su usuario de facebook o twitter o linkedin ...

Es una muy buena idea se sufre mucho interactuando con las Apis de las redes sociales.

Dejo link:
http://www.springsource.org/spring-social/

Ceros y unos


Les quiero recomendar un blog, que esta muy bueno; su presentación es:

"Un repaso a la historia de la informática, desde los primeros intentos de automatizar los cálculos a los éxitos de Google y Wikipedia de hacer la información accesible a todos los puntos del globo."

La verdad muy bueno blog, historias interesantes de la informática; para alimentar nuestra cultura general.



Dejo link:
http://historia.libertaddigital.com/ceros-y-unos.html

lunes, 10 de diciembre de 2012

Mixins, Mixins y más Mixins...


En el post anterior vimos la tecnica de Mixins en Scala, pero no solo Scala tiene esta técnica. Muchos lenguajes denominados modernos utilizan Mixins un ejemplo claro es Ruby. En Ruby definimos módulos y podemos importar estos módulos en nuestras clases.


module Debug
   def who_am_i?
      "#{self.class.name} (\##{self.id}): #{self.to_s}"
   end
end

class Phonograph
  include Debug
  # ...
end

class EightTrack
  include Debug
  # ...
end

ph = Phonograph.new("West End Blues")
et = EightTrack.new("Surrealistic Pillow")

ph.who_am_i? #Phonograph (#935520): West End Blues
et.who_am_i?  #EightTrack (#935500): Surrealistic Pillow

El caso de groovy resuelve el mixins con anotaciones, es como una fusión de java y ruby.


class Dog {
  def talk() {
    "Woof, woof"
  }
}


@Mixin(Dog)
class Talk {
  // other stuff here
}

Y listo! Pero a la vez groovy permite hacer mixins con instancias no solo con clases de la siguiente manera:

someoneElsesClass.mixin(Dog)

Como es dinámicamente tipado, no hay problema si hacemos:

someoneElsesClass.talk()

Si recuerdan el post anterior en Scala si queríamos hacer esto usábamos with en el constructor tipando de esta manera al objeto:


val snowy = new Cat("Snowy" ) with Friend
val friend : Friend = snowy
friend.listen

El método mixin de Groovy tiene la ventaja que se puede utilizar en cualquier momento, no como la palabra reservada de Scala with que solo se puede utilizar en el constructor.

Por ejemplo Dart implementa el mixins muy similar a scala, es decir tiene trait que pueden ser agregados a las instancias o a las clases. Lo que agrega es que también tiene interfaces, veamos un ejemplo:


interface Shape {
   num perimeter();
}

trait Rectangle implements Shape {
   final num height, width;
 
   Rectangle(num this.height, num this.width); // Compact constructor syntax.
 
   num perimeter() => 2*height + 2*width; // Short function syntax.
}

class Square extends Rectangle {
   Square(num size) : super(size, size);
}

En Ceylon existen las interfaces que al igual que Scala pueden contener código; es decir una interface de Ceylon es igual a un trait de Scala:

shared interface Writer {
    shared formal Formatter formatter;
     
    shared formal void write(String string);
     
    shared void writeLine(String string) {
        write(string);
        write(process.newLine);
    }
     
    shared void writeFormattedLine(String formatString, Object... args) {
        writeLine( formatter.format(formatString, args) );
    }
     
}

shared class ConsoleWriter()
        satisfies Writer {
     
    formatter = StringFormatter();
     
    shared actual void write(String string) {
        writeLine(string);
    }
     
}


Uff, como podemos ver la idea es la misma cambia un poco la forma de implementarla, cambia un poco más si el lenguaje es dinámicamente tipado o estáticamente tipado.

Mixins es una característica de los lenguajes modernos que esta bueno ir aprendiendo.

Que implementación les gusto más?

domingo, 9 de diciembre de 2012

Mixins en scala




El Mixins es una técnica para la reutilización de código. Como funciona? En scala existen entidades llamadas traits. Los traits son características, similares a las interfaces de java, pero pueden contener código. Código que va a ser reutilizados por las clases que utilicen esta característica. Por supuesto una clase puede utilizar varias características.

Voy a tomar el ejemplo del libro programming scala.  Supongamos que queremos modelar la amistad entonces vamos hace un trait llamado Friend.

trait Friend {
val name : String
def listen() = println("Your friend " + name + "is listening")
}

Como se puede ver se declaro el val name, el cual debe ser proveído por la clase que vamos a mixiar. Ahora tenemos que utilizar a Friend, si la clase que utiliza este trait no extiende de ninguna clase podemos utilizar extends, por ejemplo:

class Human(val name: String) extends Friend

Human podría reescribir los métodos de Friend, por ejemplo si extendemos a Human en Man y Woman, estos también pueden reescribir estos métodos.

Cuando una clase extiende de otra clase se debe utilizar la palabra clave with. Con with podemos utilizar varios trait. Veamos la clase Dog:

class Dog(val name:String) extends Animal with Friend {
      override def listen = println(name + "'s listening quietly")
}

En el ejemplo reescribimos el método solo para mostrar que se puede reescribir, pero si no es necesario no se debe reescribir.

Ahora podemos utilizar el trait heredado y es más podemos tipar por ese trait como lo hacemos en java con las interfaces:


val john = new Man("John" )
val sara = new Woman("Sara" )
val comet = new Dog("Comet" )

john.listen
sara.listen
comet.listen

val mansBestFriend : Friend = comet

mansBestFriend.listen

También podemos utilizar el Mixins en instancias no solo en clases por ejemplo una clase gato, el gato por naturaleza no es muy amistoso:


class Cat(val name: String) extends Animal

Pero existe un gato llamado snowy que es muy amigable, entonces podemos hacer lo siguiente:

val snowy = new Cat("Snowy" ) with Friend
val friend : Friend = snowy
friend.listen

Mixins es una técnica de reutilización de código que nos provee gran flexibilidad en Scala.

lunes, 3 de diciembre de 2012

La Google Developers Academy está disponible en español

En realidad el titulo de la noticia es "La Google Developers Academy está disponible en España" pero lo que me importa a mi es que este en español. Por favor no se ofenda ningún español.

Google para potenciar el uso de sus plataformas ha decidido crear la Google Developers Academy donde ofrecerá clases online, tutoriales, ejemplos y en definitiva todo lo necesario para que usar sus distintas plataformas nos resulte fácil y atractivo.

Dejo la fuente: http://www.genbetadev.com/formacion/la-google-developers-academy-esta-disponible-en-espana

y dejo el link: https://developers.google.com/academy/?hl=es


Utilizando ExpandoMetaClass con Groovy




En el post anterior hablamos de categorías, ahora vamos a utilizar ExpandoMetaClass para agregar un método a una clase:

import org.apache.commons.lang.StringUtils

String.metaClass.capitalize = {
   StringUtils.capitalize(delegate)
}

assert "Groovy" == "groovy".capitalize()

Hemos agregado el método capitalize pero esto no es temporal como cuando usabamos "use". Este método va a quedar en la clase, dado que lo registramos. Con esta técnica se puede agregar métodos nuevos o sobrecargar métodos existentes.

ExpandoMetaClass incluye alguna extension / hooks que se puede utilizar para cambiar la forma en que se comporta una clase o un objeto, podemos hacer lo siguiente:

  • getProperty / setProperty: control de acceso
  • invokeMethod: podemos escribir este método y cada vez que necesite un método se va a llamar la función que necesitamos. Se puede implementar algo como AOP. 
  • methodMissing y propertyMissing: Podemos escribir escribir estos métodos para que se comporten de forma más amable.  


ExpandoMetaClass es una gran mejora sobre lo que ya ha proporcionaba Groovy pero también tiene sus peculiaridades, por ejemplo, la herencia no está activado por defecto (porque va a causar un impacto en el rendimiento)

Dejo link:
http://groovy.codehaus.org/ExpandoMetaClass

Metaprogramación en Groovy, hoy categorías


Groovy es un lenguaje estáticamente tipado por lo tanto no necesitamos definir los tipos; esta característica sumada a la metaprogramación puede ser muy potente.

Todos los objetos en groovy tienen una metaclass responsable de mantener la informacion de las clases. Siempre que llames a un método de un objeto, groovy utiliza un mecanismo de despacho que utiliza esta metaclass. Este mecanismo se puede modificar, groovy ofrece formas de modificarlo, por ejemplo categorías.

Las categorías es un mecanismo muy simple que sigue las siguientes reglas:

  • Los métodos estáticos son candidatos para ser métodos de categorías 
  • No es necesario implementar nuevas clases o interfaces
  • El tipo del primer parámetro, es el tipo del objeto que va a recibir el método.   

Veamos un ejemplo:

class Pouncer {
       static pounces( Integer self ){
                 (0..<self).inject("") { s, n -> s += "boing! " }
        }
}  

use( Pouncer ) {
       assert 3.pounces() == "boing! boing! boing! "
}

La magia sucede con la palabra clave use, donde decimos que la clase integer puede ejecutar pounces. El metodo se puede utilizar solo en scope de use.   Con este mecanismo podemos darle un metodo a una clase por un corto tiempo. Se podria utilizar pafra darle logica a objetos livianos.

sábado, 1 de diciembre de 2012

Calligra, suitte ofimática multiplataforma y libre!



Calligra es una suitte ofimática multiplataforma creada a partir de KOffice, es totalmente libre y de carácter Open Source, creada en un principio para KDE aunque es totalmente independiente de este.


Calligra Suite utiliza el formato de documento abierto y estándar OASIS OpenDocument de forma nativa. Además, incluye filtros de importación para poder trabajar con algunos formatos de fichero de otras suites ofimáticas.

Calligra Suite tiene en cuenta parcialmente la internacionalización: los documentos usan la codificación unicode y permite escribir textos en lenguas que escriben de derecha a izquierda (árabe o hebreo), aunque todavía no en lenguas que escriben de arriba a abajo.

Para automatizar procesos Calligra Suite permite hacer scripts en varios lenguajes de programación como Python, Ruby y JavaScript.


Calligra acaba de ser actualizada a la versión 2.5.4 la cual corrige errores de importancia de Calligra 2.5.3, así que se aconseja aplicar esta actualización lo antes posible.

Dejo link:
http://www.calligra-suite.org/

martes, 27 de noviembre de 2012

Cual es el próximo lenguaje java?

InfoQ realiza una encuesta preguntando, cual va ser el próximo lenguaje que va a triunfar en la JVM. A votar!

Que piensan? Cual es el próximo lenguaje? que lenguaje hay que ir estudiando?

Dejo link:
http://www.infoq.com/research/next-jvm-language?utm_source=infoqresearch&utm_campaign=lr-homepage

domingo, 25 de noviembre de 2012

Implementando la orientación a objetos con prototipos con Self




Self es un lenguaje orientado a objetos, pero sin clases. Self esta basado en el concepto de prototipos, es decir que un objeto se construye a partir de otro. Ya hablamos de IO un lenguaje prototipado, inspirado en Self. Conocen otro lenguaje prototipado? Si, javascript!

Pero continuemos con Self fue creado por David Ungar y Randall Smith en 1986  mientras trabajaban en la empresa Xerox Parc. Ellos siguieron su trabajo en la universidad de Stanford donde publicaron el primer compilador en 1990 para luego irse a la empresa Sun Microsystems. Self se puede considerar un dialecto de SmallTalk. También tiene un entorno de maquina virtual y esta basado en la simplicidad.

Self inspiro a todos los lenguajes basados en prototipos como NewtonScript, JavaScript, Io, Cel, Lisaac y Agora.

Tradicionalmente los lenguajes orientados a objetos definen clases que son como plantillas de objetos a partir de estas clases se van creando las instancias. En lenguajes dinámicos como Smalltalk las clases pueden cambiar en la ejecución del programa afectando las nuevas instancias. De esta forma si eliminamos las clases y tomamos este ultimo concepto podríamos crear objetos y dinámicamente agregándole métodos y propiedades.

Lenguajes basados en prototipos creamos un objeto a partir de otro objeto, es una copia y a esta copia se le pueden agregar o modificar métodos y propiedades de forma dinámica.  Todo es objeto y sin clases!

Dejo link: http://selflanguage.org


jueves, 22 de noviembre de 2012

Try Clojure


Una buena pagina para probar el lenguaje derivado de Lisp que corre en la maquina virtual java también en la clr de .net y compila a javascript!

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

lunes, 19 de noviembre de 2012

Oracle cierra OSUM Community!



OSUM Community va ser clausurado este primero de diciembre, para el que no sabe OSUM Community era la apuesta de Sun por la comunidad educativa; era una plataforma web 2.0 con el objetivo de impartir cursos y que las universidades se sumen.

Con la muerte de Sun el proyecto se fue entibiando hasta perder fuerza, ahora Oracle quiere deshacerse de ese proyecto y quiere lanzar un sitio Oracle Academy en 2013.

Lo malo de esta movida es que no se va archivar nada de la comunidad OSUM, es decir lo van a eliminar completamente. La verdad es que me parece muy poco profesional, a una empresa como Oracle no le cuesta nada migrar foros, usuarios, post, etc. Otra movida mala de Oracle!!

Les dejo el mail que me llego con la noticia:

Dear OSUM Community,
We would like you to know that we will decommission the OSUM.sun.com community on December 1, 2012. The community content will not be archived.  Secure your content by saving it externally.
You can continue to tap into the current, industry-relevant educational resources on Java and other Oracle related topics by joining Oracle’s premiere developer communities: Oracle Technology Network (OTN) and Java.net.
As an Oracle Technology Network member, you can:
  • Choose from among hundreds of discussion forums comprising nearly 10 million messages to get crowd-sourced, actionable advice from Oracle engineers and other OTN members.
  • Download and use free software under our Developer License, with no limit. (Some downloads may have other license terms.)
  • Attend free hands-on workshops (physical and virtual): Oracle Technology Network: Developer Days, Architect Days and Admin Days.
  • Explore product and technology documentation, including the official Java APIs.
  • Get exclusive discounts and offers on books and other valuable resources.
  • And much more! 
Is Java more your main interest? Then, participation in Java.net is for you!
Java.net is a premier web-based, open community created to facilitate Java™ technology collaboration in applied areas of technology and industry solutions.
  • It is a central gathering place for Java™ technology enthusiasts and existing communities across industries, platforms, and interest groups.
  • Java developers can find and post material related to their specialized needs.
  • Access a variety of collaborative tools such as wikis, weblogs, discussion forums, mail lists, and RSS newsfeeds, as well as traditional open source tools like Subversion, Mercurial, Git, and JIRA.
  • It is the one place to find out the latest news and opinions, have conversations with other developers who share specific interests, and ultimately engage in efficient development efforts using Java™ technology.
Join Java.net today! https://java.net/people/new
Lastly, the Oracle Academy will be launching its new website in 2013, so be sure to visit www.oracle.com/academy to find out the latest Oracle and Java technology offerings for students worldwide.

Thank you for your support and continued participation!
The Oracle Academy
Visit Open Source University Meetup at: http://osum.sun.com/?xg_source=msg_mes_network
 

sábado, 17 de noviembre de 2012

Elementary Os, Linux con sabor a Mac OS X


En un post anterior hablamos de Linux Pear que era un linux que seguía el lineamiento de Mac OS X el sistema operativo de apple, ahora les presento Elementary OS. Que sigue el mismo concepto.

La principal diferencia de elementary OS en relación a la multitud de distribuciones derivadas de Ubuntu, más allá de su apariencia visual o configuraciones de escritorio, son las aplicaciones propias que se han creado: cliente de correo electrónico, gestor de archivos, calendario, reproductor de música… y unas cuantas más.

A grandes rasgos, elementary OS es una clon de Mac OS X a nivel de diseño, gratuito y libre.


Dejo un video:



Dejo link:
http://elementaryos.org/

miércoles, 14 de noviembre de 2012

Porque tantos cambios??

No se preguntaron porque tantos cambios climáticos o terremotos??


Si escribiésemos ensayos con lenguajes de programación


Apache se sube a la nube con CloudStack


Apache CloudStack es el caballito de batalla de Apache, como producto para hacer clouds privadas o publicas. Apache no tenia ningún producto de este tipo; me parece que esta llegando tarde dado que productos como Nebula o OpenStack, ya tienen un nicho en el mercado. Pero Apache es un sello de calidad.

Este proyecto es resultado de código que Citrix donó a Apache en abril de este año. Aunque se encuentre en la incubadora imagino que Apache le va a dar mucha fuerza; dado que la tecnologías relacionadas con la nube tienen mucho futuro.


Apache CloudStack es un software diseñado para implementar y administrar grandes redes de máquinas virtuales, como una alta disponibilidad, infraestructura altamente escalable como Servicio (IaaS). CloudStack es utilizado por un número de proveedores de servicios publicos y por muchas empresas para proporcionar un control sobre sobre servidores locales como una nube privada o como una solución híbrida.

CloudStack es una solución que incluye toda la "stack" de las características que esperan las organizaciones de una solución IaaS: compute orchestration, Network-as-a-Service, usuario y cuentas administradas, una API nativa completa y abierta, contabilidad de los recursos, y una interfaz de usuario (UI).

CloudStack es compatible actualmente con los hipervisores más populares: VMware, KVM, XenServer y Xen Cloud Platform (XCP).

Los usuarios pueden gestionar su nube con una interfaz Web  fácil de usar, herramientas de línea de comandos, y / o una API RESTful con todas las funciones. Además, CloudStack proporciona una API que es compatible con AWS EC2 y S3 para las organizaciones que desean implementar nubes híbridas.


Dejo link:
http://incubator.apache.org/cloudstack/

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

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