Translate
miércoles, 12 de diciembre de 2012
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.
viernes, 7 de diciembre de 2012
E-Book Gallery for Microsoft Technologies
Toma tu torta, otra vez Microsoft me sorprende publicando varios libros de forma gratuita.
A leer!!
Dejo el link:
http://social.technet.microsoft.com/wiki/contents/articles/11608.e-book-gallery-for-microsoft-technologies.aspx
A leer!!
Dejo el link:
http://social.technet.microsoft.com/wiki/contents/articles/11608.e-book-gallery-for-microsoft-technologies.aspx
miércoles, 5 de diciembre de 2012
martes, 4 de diciembre de 2012
El libro Programming Google App Engine Gratuito!!
Sip, el libro Programming Google App Engine totalmente gratuito en el siguiente link:
http://netoearth.com/book/
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
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
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:
Visit Open Source University Meetup at: http://osum.sun.com/?xg_source=msg_mes_network
|
Suscribirse a:
Entradas (Atom)