Translate

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.