miércoles, 28 de noviembre de 2007
El foro de Ruby on Rails
pues a partir de ahora ya tenemos un foro donde encontrarnos y discutir temas sobre Ruby y resolver dudas entre todos.
http://www.foros.net/index2.php?mforum=fororuby
Saludos
miércoles, 21 de noviembre de 2007
Tema 11: Send & Method_Missing
Característica avanzada de Ruby que
permite invocar un método a partir de su
nombre.
class Persona
def saludar
puts "Hola soy una persona"
end
end
p = Persona.new
p.saludar
p.send(:saludar)
p.send("saludar")
Permite escribir código que invoque a
métodos que no existen todavía.
El identificador del método puede
obtenerse de diversos sitios, entrada de
teclado, base de datos, fichero...
method_missing
Cuando una clase en Ruby no implementa
un método se llama al método
method_missing.
Por defecto lanza una excepción(NoMethodError), pero se
puede sobreescribir este comportamiento(ver ejemplo).
Recibe dos parámetros, el identificador del
método invocado y la lista de argumentos.
Ejemplo:method_missing
class Persona
def saludar
puts "Hola soy una persona"
end
def method_missing(id, *args)
puts "Yo no puedo #{id}"
end
end
method_missing
p = Persona.new
p.saludar # Hola soy una persona
p.caminar # Yo no puedo caminar
Tema 10: XMLBUILDER
-Su nombre viene de eXtenseble Markup Language (lenguaje de
marcas extensible)
Un lenguaje de marcado o lenguaje de marcas es una forma de
codificar un documento que, junto con el texto, incorpora etiquetas o marcas que contienen información adicional acerca de la estructura del texto o su presentación. El lenguaje de marcas más extendido es el
HTML
XML fue desarrollado por un Grupo de Trabajo SGML (originalmente
conocido como "SGML Editorial Review Board") formado bajo los
auspicios del Consorcio World Wide Web (W3C), en 1996.
Los objetivos de diseño de XML son:
• Debe ser directamente utilizable sobre Internet.
• Soportar una amplia variedad de aplicaciones.
• Debe ser fácil la escritura de programas que procesen
documentos XML.
• Los documentos XML deben ser legibles por humanos y
razonablemente claros.
• El diseño debe ser preparado rápidamente, además, de ser
formal y conciso.
• Los documentos XML deben ser fácilmente creables.
Instalando rubygems y builder
Se nos ofrece una librería que nos ayuda a construir esto de forma
sencilla. La librería en cuestión es 'builder', y tenemos que instalarla, ya que no viene con el paquete básico de ruby.
Para instalarla, debemos utilizar rubygems, que es un gestor de librerías que nos sirve para instalar, eliminar y actualizar las librerías que tengamos instaladas en el equipo.
Para saber si tenemos instalado rubygems, abrir un terminal y escribir
gem –version
Si da un error, debemos intalar rubygems en nuestro equipo.
La instalación desde linux es bastante fácil.
En un terminal escribir lo siguiente:
sudo aptget install rubygems
Saldrán unas cuantas cosas en la consola y al final un mensaje que indica que se ha instalado correctamente.
A continuación se debe escribir lo siguiente para instalar el paquete builder:
gem install builder
Igual que antes, saldrán unas cuantas cosas en la pantalla. Salvo que se lea un mensaje de error, quedará bien instalado en nuestro ordenador.
En el caso de que falle algún paquete escribir la siguiente linea:
export RUBYOPT=rubygems
Crear un documento xml con builder:
Lo primero de todo es crear una variable que represente al documento xml que vamos a escribir.Para ello utilizamos el método Builder::XmlMarkup.new Este método recibe como parámetro el destino, (identificado por la clave :target ) donde se escribirá lo que vayamos haciendo con el objeto que acabamos de crear (debe responder al método <<) Se pueden especificar más parámetros, como el número de espacios que se incluirán al anidar elementos o el margen inicial en el que se empezará a escribir.
Ejemplo x= Builder::XmlMarkup.new:target => $stdout
Con esto, todo lo que se escriba en la variable x se escribirá por la salida estándar.
Escribiendo etiquetas:
Con todo lo anterior, ya tenemos el documento preparado para empezar a escribir la información que queramos en ella.
Para crear una etiqueta, simplemente llamamos al método:
x.h1 "Encabezado h1Generará lo siguiente:
Encabezado h1Especificando atributos en una etiqueta
Para especificar algun tipo de atributo, se hace mediante un hash, en el que la clave será el nombre del atributo y el valor de dicha clave, el valor que tomará el atributo.
x.h1 "Encabezado h1", :id => 'encabezado' escribirá
Encabezado h1
Anidando etiquetas
Podemos anidar etiquetas a base de abrir bloques:
x.ul {
x.li 'Manzana', :class => 'fruta'
x.li 'Fresa', :class => 'fruta'
x.li 'Albaricoque', :class => 'otra_clase'
}
Daría como resultado
- Manzana
- Fresa
- Albaricoque
Otra forma de hacerlo seria:
x.tag!(:ul, :id => 'lista_frutas'){
x.li 'Manzana', :class => 'fruta'
x.li 'Fresa', :class => 'fruta'
x.li 'Albaricoque', :class => 'otra_clase'
}
Daría como resultado
- Manzana
- Fresa
- Albaricoque
require "persona"
require "builder"#incluida en libraria
p1=Persona.new("Pepito","Gonzalez","29")
p2=Persona.new("Raquel","Blanco","31")
p3=Persona.new("Rodrigo","Fernandez","32")
personas=Array.new
personas<< < f, :indent => 2)
x.personas{
personas.each do |elemento|
x.tag!(:persona, :edad => elemento.edad){
x.nombre elemento.nombre
x.apellido elemento.apellidos
}
end
}
end
Este código generaría la siguiente salida en un fichero:
Pepito
Gonzalez
Raquel
Blanco
Rodrigo
Fernandez
Tema 9: Ficheros
Introducción
Definición de fichero (o archivo): Es un conjunto de información que se almacena en algún medio de escritura que permita ser leído o accedido por un equipo informático.
Un fichero es identificado por un nombre y la descripción de la carpeta o directorio que lo contiene. Los ficheros informáticos se llaman así porque son los equivalentes digitales de los ficheros en tarjetas, papel o microfichas del entorno de oficina tradicional. Los ficheros informáticos facilitan una manera de organizar los recursos usados para almacenar permanentemente información dentro de un equipo informático.
Ficheros en Ruby
Ruby define una sola clase base, IO, para gestionar toda la entrada y salida. De esta clase base heredan File y BasicSocket, para dar un comportamiento más especializado, pero los principios se mantienen iguales para todos.
La clase File
Permite trabajar con los ficheros.
Como era de esperar, se puede crear un nuevo objeto de fichero con
File.new
unFichero=File.new("ficheroprueba","r")
#...procesar el fichero
unFichero.close
Parámetros:
File.new(nombre_del_fichero,modo_de_acceso)
Debemos especificar qué es lo que queremos hacer con el fichero. Por defecto abren en modo lectura.
Los modos de acceso al fichero son los siguientes:
r Sólo lectura, poniendo el puntero de lectura al principio (por defecto).
r+ Lectura/escritura,empezando por el principio del fichero.
w Sólo escritura. Borra el contenido del fichero si existe o crea uno nuevo en caso contrario
w+ Lectura/escritura. Borra el contenido del fichero si existe o crea uno nuevo en caso contrario
a Sólo escritura. Sitúa el puntero al final del fichero si existe. Si no, lo crea.
a+ Lectura/escritura, poniendo el puntero al final del fichero si existe. Crea uno nuevo en el caso de que no exista
b (Sólo en DOS/Windows) Modo binario. Puede aparecer con cualquiera de los anteriores.
Otra forma de especificar los modos de acceso:
La clase file tiene declaradas las siguientes constantes para poder abrir el fichero de forma que se ajuste más a nuestras necesidades:
APPEND Abre el fichero en modo 'añadir'. Lo que se escriba, será al final del fichero.
CREAT Crea el fichero al abrirlo si no existe.
EXCL Al usarlo con CREAT, se lanzará una excepción si existe el fichero.
NONBLOCK Abre el fichero, pero no lo bloquea.
RDONLY Abre el fichero en modo sólo lectura
RDWR Abre el fichero en modo lectura/escritura
TRUNC Abre el fichero y borra su contenido si existe
WRONLY Abre el fichero en modo sólo lectura
Estos modos se pueden combinar mediante el operador '|' que hace un or a nivel de bit
ejemplo: file.new(“nombre”, File::APPEND|File::WRONLY)
Métodos varios
Los mismos métodos que has estado usando para la E/S “simple'' están disponibles para todos los objetos de tipo fichero. Así, gets lee una línea de la entrada de la terminal, y unFich.gets lee una línea del objeto fichero unFich.
Sin embargo, los objetos de E/S tienen una serie de métodos de acceso adicionales, pensados para hacer nuestra vida más fácil:
Por ejemplo el método File.open también abre un fichero. En su uso normal, hace lo mismo que File.new . Sin embargo, si hay un bloque asociado a la llamada, open se comporta de manera diferente: en vez de devolver un nuevo objeto File, invoca al bloque, pasándole el fichero acabado de abrir como parámetro. Cuando el bloque termina, el fichero se cierra automáticamente.
Como responsables programadores, cerramos el fichero para asegurarnos de que todos los datos que hay en memoria se escriben y que todos los recursos relacionados se liberan.
Abrir/crear ficheros:
new
open
Tratamiento de cadenas:
readline: lee una línea del fichero. Lanza una excepción si se llega al final.
gets: lee una línea del fichero. Si se llega al final de fichero devuelve nil.
puts: Escribe una línea en el fichero. Termina con un salto de línea.
write: Escribe una línea, sin introducir el salto de línea.
print: Igual que write.
Iteradores:
each_line( separador ){ bloque }: Ejecuta el bloque para cada una de las líneas. El separador se usa para identificar cada línea. Por defecto \n
IO.foreach( ruta_fichero ){ bloque }: Abre el fichero en modo lectura y ejecuta el bloque para cada línea.
IO.readlines( ruta_fichero ): Devuelve el fichero en un array
#La clase Alumno implementa las caracteristicas de un alumno, junto con la posibilidad de almacenar dicho alumno en un fichero.
class Alumno
def initialize n, a, dni
@nom = n
@ape = a
@dni = dni
end
def almacena
#El fichero se abre en modo lectura y escritura,
#poniendo el puntero al final del fichero
f = File.new("Alumnos.txt", "a+")
cadena = "#{@nom}, #{@ape}, #{@dni.to_s}"
f.puts(cadena)
f.close
end
end
#MAIN
#Creamos tres alumnos y los almacenamos en el fichero
a = Alumno.new("Ivan", "Alvarez", 53534512)
b = Alumno.new("Laura", "Nuevo", 53534512)
c = Alumno.new("Diego", "Perez", 53534512)
a.almacena
b.almacena
c.almacena
#Cargamos alumnos del fichero, y los mostramos por pantalla
puts "\nCargamos los alumnos del fichero: "
IO.foreach( "Alumnos.txt" ) do |a|
array = a.split(", ")
alumno = Alumno.new(array[0], array[1], array[2])
print "#{alumno.nom}, #{alumno.ape}, #{alumno.dni}"
end
Tema 8: Excepciones
En un programa en ejecución pueden suceder acciones inesperadas. Las excepciones tienen como función solucionar los problemas que dicahs acciones pueden ocasionar.
En Ruby podemos decir que una excepción es un objeto, que se crea cuando se da una situación
anómala durante la ejecución de nuestro código.
Sentencia rescue:
begin
# código susceptible de generar una excepción
rescue [tipo de excepción]
# código que trata el error producido
else
# Se ejecuta si no se produce la excepción
end
El bloque de código marcado con begin se ejecutará hasta que haya una excepción, lo que provoca que el control se transfiera a un bloque con el código de gestión de errores, aquel marcado con rescue.
Sentencia ensure:
begin
#código
rescue
#mas código
ensure
#codigo que se ejecutará siempre
end
El bloque de código de ensure se ejecuta independientemente de si se produce o no la excepción. tiene como finalidad realizar ciertas acciones cuando el método termina su ejecución.
Ensure debe colocarse al final de los rescues.
Sentencia retry:
begin
...
rescue
retry
end
Se puede utilizar la sentencia de control retry para repetir la iteración del código del bloque begin.
Sentencia raise:
begin
raise(ArgumentError, "error en el argumento")
rescue
puts $!
end
La sentencia raise es la encargada de lanzar las excepciones. La cadena que describe la excepción se le pasa como argumento. El argumento es opcional y en caso de no llevarlo crea una excepción RuntimeError o relanzaría la excepción capturada si nos encontraramos dentro de un rescue.
Tema 7: Herencia
La herencia en Ruby se simboliza mediante el operador < .
#La clase "Luchador" contiene los datos que debe tener todo luchador, por ejemplo vida, fuerza,... De igual forma define acciones comunes a todos los luchadores, es decir, los metodos golpear, recibir_golpe,...
class Luchador
def initialize v, f, d, p, n
@vida = v
@fuerza_ataque = f
@defensa = d
@prob_ataque = p
@nombre = n
end
def golpear
(...)
end
def recibir_golpe x
(...)
end
def vivo?
(...)
end
end
#Todo boxeador es un luchador, por lo tanto tiene todas las características de un luchador, y a parte, características específicas de un boxeador. La herencia se denota con el operador "<", de modo que la clase "Boxeador" hereda de "Luchador": class Boxeador <>
En este caso, un boxeador se comporta de un modo determinado al recibir un golpe, por ese motivo se redefine el método "recibir_golpe".
class Boxeador < Luchador
def initialize n
#super llama al constructor de la clase Luchador
super 90, 15, 2, 0.3, n
end
def recibir_golpe x
(...)
end
end
#Todo karateca es un luchador, igual que en el caso anterior, tiene todas las #características de un luchador, y a parte, características específicas de un karateka.
En el caso del karateka, el modo de golpear es diferente, por eso se redefine el método "golpear".
class Karateka < Luchador
def initialize n
super 100, 10, 4, 0.5, n
end
def golpear
(...)
end
end
Tema 6: Bloques e iteradores
-Un bucle para recorrer el array
-Saber la longitud del array
-Recuperar cada elemento para saber si es el que buscamos
Ejemplo:
for i in 0..a.length-1
a[i] += 1
end
En ruby existe una manera más facil de hacer esto, utilizando los iteradores.
Un iterador es un método capaz de invocar a un bloque de código de forma repetida.
El metodo "each" es un ejemplo de iterador:
a.each{|elemento| elemento += 1}
Otros ejemplos de iteradores: find, collect,select...
Esto nos libera de código y lo hace más sencillo, ya que el propio iterador implementa el blucle, y se le puede pasar cualquier operación que queramos hacer con el array.
¿Que son los bloques?
En Ruby es un modo de agrupar sentencias, dando una mayor flexibilidad pero con algunas particularidades:
- Un bloque puede aparecer solamente en el código adyacente a la
invocación de un método
-No se ejecuta cuando se encuentra
-Dentro del método se le hace una llamada "yield" y se ejecuta.
Vamos a verlo con un ejemplo sencillo:
yield
yield
yield
end
"tenemos un metodo, que mediante el yield llama al bloque, invocando el contenido del bloque"
"Bloque simple que muestra Hello"
El resultado por pantalla sería:
Hello
Hello
Ejemplo:
def find
for i in 0...size
value = self[i]
return value if yield(value)
end
return nil
end
end
[1, 3, 5, 7, 9].find {|v| v*v > 30 } >> 7
Los bloques pueden definirse mediante llaves:
o mediante los elementos do .. end:
v*v > 30
end
Por último los bloques pueden usarse para definir una porción de código que
debe ejecutarse bajo algún tipo de control transaccional, por ejemplo
operaciones con ficheros.
Ejemplo:
def File.openAndProcess(*args)
f = File.open(*args)
yield f
f.close()
end
end
File.openAndProcess("testfile","r") do |aFile|
print while aFile.gets
end
Tema 5: Expresiones
Caracteristicas:
- Posibilidad de encadenar expresiones.
- Contiene un paquete basico de operacion (+, , *, /, etc), estas operaciones son en realidad llamadas a metodos.
- Podemos encadenar igualdades, cosa que en otros lenguajes no es posible, por ejemplo:
Asignacion paralela:
- La simplicidad de ruby hace posible el intercambio de valores de variables, sin necesidad del uso de auxiliares:
- Si una asignación contiene mas valores izquierdos que derechos, los valores izquierdos excendentes contendran nil.
- Si una asignación mútiple contiene más valores derechos que izquierdos, los valores derechos sobrantes seran ignorados.
- Si el último valor izquierdo esta precedido por un asterisco, todos los valores derechos sobrantes seran asignados como un array, por ejemplo:
b, *c = a » b == 1, c == [2, 3, 4]
Expresiones boleanas:
- Todo lo que no sea false o nil, es true
Tema 4: POO
Tradicionalmente, un problema informático se ataca produciendo algún tipo de representación de datos y procedimientos que operan sobre esos datos. Bajo este modelo, los datos son inertes, pasivos e incapacs. Completamente a merced de un gran cuerpo procedimenta, que es activo, lógico y todopodero.
A medida que crece el proyecto, empiezan a surgir interacciones complejas e inintencionadas dentro del núcleo. Existen políticas de porgramación que ayudan a minimizar y localizar errores dentro de este paradgnma pero existe una solución mejor que pasa fundamentalmente opr cambiar la forma de trabjar.
La programación orietada a objetos, es delegar la mayoría del trabajo mundano y repetitio a los propios datos; modifica el concepto de los datos que pasan de pasivos a activos. Es decir:
-Dejamos de tratar cada pieza de dato como una caja en la que se puede abrir su tapa y arrojar cosas en ella.
-Empezamos a tratar cada piexa de dato como una máquina funcional cerrada con uno pocos interruptores y diales bien definidos.
El patrón es lo que se conoce como clase y lo obtenido por ese patrón se conoce como objeto. La mayoría de los lenguajes OO necesitan una clase para tener un nuevo tipo de objeto pero Ruby no.
Conviene resaltar que la utilización de un lenguaje OO no obliga a un diseño OO válido. Lo que permite Ruby es que la práctica de la programación OO sea lo suficientemente natural para qeu, incluso, tabajando a pequeña escal no se sietna la necesidad de recurrir a un código mal estructurado por evitar.
En esta programación no se piensa en operar sobre los datos directamente desde el exterior de un objeto. Podríamos decir que se pasa un mensaje al objeto y este mensaje obtiene algún tipo de acción o respuesta significativa. las tareas qeu podemos pedir que un objeto realice son los métodos. En Ruby, se llama a un método con la notación punto. Este puede variar dependiendo del objeto con el que nos comunicamos, las piezas de datos llevan consigo ese conocimiento por lo que las solicitudes que se les hace se pueden satisfacer en las diferentes formas adecuadas. Esta característica de los lenguajes OO, se conoce com polimorismo, cuando un objeto recibe un mensaje que no conoce, "salta" un error.
En ruby existe una variable especial self que referencia al objeto que llama a un método.
La definición de los metodos es la regíon de codigo que se encuntra entre def seguido del nombre del método y la clave end.Ruby no utiliza llaves para delimitar los cuerpos de sentencias y definiciones compuestas, se finaliza siempre con la palabra clave end.
En terminología OO, una categoría de objetos se denomina clase y cualquier objeto determinado que pertenece a un aclase se conoce como instancia de esa clase.
Generalmente, se define primero las características de una clase, luego se crean las instancias. Un ejemplo
class Perro
def ladra
print "guau guau \n"
end
end
El método new de cualquier clase, crea una nueva instancia. La creación de una instancia de una clase se conoce, como instanciación.
Las propiedades o atributos son las características de los objetos. Hay tres formas de declarar un atributo:
escritura -> attr_writter :nombre
lectura -> attr_reader :nombre
ambos -> attr_accessor :nombre
Cuando declaro un atributo me genera su getter y su setter de forma automática. Si el atributo es declarado de modo de lectura solo genera getter. Para sobreescribir el método getter o setter:
def nombre_atributo
...
end
def nombre_atributo=(parámetro)
...
end
El método initialize si esta definido se ejecutara al crear una instancia de la clase. Esto nos da la oportunidad de escribir código que establezca el estado del objeto
def initialize
...
end
Tema 3: Métodos
En OO no se piensa operar sobre los datos directamente desde el exterior de un objeto, si no que los objetos tienen algún conocimiento de cómo se debe operar sobre ellos. Por lo tanto, las tareas que podemos pedir que un objeto realice son los métodos.
En el caso de Ruby deberemos saber que si se le pasan parámetros a un método estos pueden llevar o no paréntesis (si su ausencia no provoca ambigüedad). Además, cuando un método retorna un valor no es necesario la utilización de "return" ya que Ruby devuelve la última expresión evaluada; en caso de querer devolver más valores si se utilizará.
Los métodos y llamadas a los mismos tiene la siguiente estructura:
def nombre_del_metodo (parametros)
...
...
end
#Para invocarlo
self.nombre_metodo ó nombre_metodo
Tema 2: Ruby.new
Consideraciones generales
- Ruby puede tratar números tan grandes como lo permita la memoria del ordenador.
- No es necesario el punto y coma al final de cada orden
- Los comentarios comienzan con '#'
- Podemos ahorrarnos los paréntesis a la hora de pasar parámentros si no incurrimos en ambigüedades.
- Todo método acabado en '?' devuelve true o false.
- Todo método acabado en '!' modifica el invocador.
- Clase String
Algunos métodos importantes son:
- chop: elimina el último carácter del string
- chomp: elimina el salto de línea al final del string.
- split(a): devuelve un array de strings considerando el parámetro pasado como separador.
- reverse: da la vuelta al string.
- upcase | downcase: devuelve la cadena en minúsculas o mayúsculas.
- Clase Symbol
- Clases Array y Hash
- if / elsif / else
puts "Mayor"
elsif a > 3
puts "Menor"
else puts "Igual"
end
- case: Igualito al switch de Java pero más potente
case a
when String
puts "Es un string"
when Integer
puts "Es un entero"
end
- while: El bucle por excelencia, su negado es until.
a = 5
while a <10
puts a
a +1
end
- for
...
end
Existe cuatro formas de interrumpir de un bucle desde su interior.
next: Salta al principio de la siguiente iteración del bucle.
redo: Reinicia la iteración en curso.
return: Produce la salida no solo del bucle si no también del
método que lo contiene.
Temas 0 y 1: Intro e instalación
Ruby on Rails es un framework de desarrollo para aplicaciones web de código abierto escrito en el lenguaje de programación Ruby, siguiendo el patrón MVC (Modelo Vista Controlador).
Rails fue creado por en 2004 David Heinemeier Hansson. Los principios fundamentales de Ruby on Rails incluyen No te repitas (del inglés Don't repeat yourself, DRY) y Convención sobre configuración; eso significa que las configuraciones deberían definirse una sola vez y que el programador sólo necesita definir aquella configuración que no es convencional.
Ruby es un lenguaje de programación completamente orientado a objetos(lenguaje interpretado), creado por el programador japonés Yukihiro "Matz" Matsumoto en 1993. Combina una sintaxis (sencilla y consistente) inspirada en Python, Perl y Smalltalk. Comparte también funcionalidad con otros lenguajes de programación como Lisp, Lua, Dylan y CLU. Ruby es un lenguaje de programación interpretado en una sola pasada y su implementación oficial es distribuida bajo una licencia de software libre. La última versión estable es la 1.8.6, aunque la 1.9 se encuentra ya en desarrollo.
Funciona tanto en Linux, Windows y Mac.
El lenguaje de programación Ruby permite la metaprogramación, de la cual Rails hace uso.
Algunas páginas que usan Ruby on Rails:
> http://lacomunidad.elpais.com/
> http://www.lacoctelera.com/
> http://www.blogs.telecinco.es/
> http://www.vorago.es
INSTALACIÓN en Linux
Ruby
> Abrir terminal
Ejecutar comando: sudo aptget install ruby
Radrails
> Paso 1:
Descargarse zip radrails: http://www.aptana.com/download_radrails.php
cd > instaladores >radrails0.7.2linuxgtk.tar.gz > linux
> Paso 2:
Descomprimir en: desarrollo > ruby > install
Dejar una copia del instalador en: desarrollo > ruby > instaladores
Configurar Radrails
Debemos indicar a radrails donde esta el interprete de ruby
Opciones de menu run > run...
viernes, 9 de noviembre de 2007
El blog de tod@s y entre tod@s
La principal función de este blog es describir nuestros avances a lo largo de las semanas que dura el curso, incluyendo apuntes, direcciones de interés y por supuesto opiniones.
Aceptamos cualquier sugerencia sobre la mejora del blog comunal y por supuesto, comentarios de cualquiera de los temas que tratamos.
Un saludo de todo el grupo de Ruby on Rails 2007.
WEB 2.0
En la Web 2.0 nos encontramos aplicaciones web con un alto grado de personalización por parte del usuario y orientado principalmente a la interacción.
Con la web 2.0, aparecen nuevos conceptos en el mundo de la red, comunidades, blogs, portales 2.0, mashup, etc en donde el dinamismo y la interacción cobra un papel importante.
¿Que es RSS?
Es un tipo de formato XML desarrollado para sitios web donde la actualización de datos, información, etc es constante.
El RSS no es solo utilizado por el usuario para recibir la información que otros le ofrecen, sino que también le resulta útil para mostrar los contenidos novedosos de su web a otros internautas.
Existen tres tipos de formato RSS cuyas siglas adquieren un significado diferente según la especificación usada:
- Rich Site Summary (RSS 0.91)
- RDF Site Summary (RSS 0.9 y 1.0)
- Really Simple Syndication (RSS 2.0)
El hecho de compartir y usar esta información en otras web se conoce como Sindicación Web.
Como ejemplo de la utilización de RSS hemos incluido en nuestro blog un feed de noticias de Vorago.
¿Que son los Portales 2.0?
Un portal es un sitio web que ofrece al usuario una serie de servicios y recursos. Un portal está destinado para ser el lugar de partida del usuario en su viaje por internet.
La "evolución" de los portales tradicionales de Internet ha dado paso a los denominados portales 2.0 gracias al concepto de WEB 2.0 el cual se caracteriza por la participación activa de los usuarios.
La principal característica de los portales 2.0 es el alto grado de personalizacion por parte del usuario. Puede escoger qué tipo de información, cómo y dónde se muestra dicha información al acceder al portal. Otra caracteristica es el alto grado de accesibilidad y el uso de nuevas tecnologías, por ejemplo las mecionadas RSS.
Ejemplos de portales 2.0:
Fotolog : Nacido como Fotolog.net, es el sitio web más grande del mundo dedicado a los blogs fotográficos, conocidos genéricamente como fotologs.
Wikipedia : Enciclopedia libre plurilingüe basada en la tecnología wiki. Wikipedia se escribe de forma colaborativa por voluntarios, permitiendo que la gran mayoría de los artículos sean modificados por cualquier persona con acceso mediante un navegador web.
Youtube : Sitio web que permite a los usuarios compartir vídeos digitales a traves de internet.
Infojobs : La bolsa de empleo online líder en España.
Meneame : Clon de Digg, los usuarios crean la portada con noticias sindicadas de otras webs.
Tagzania : Es un geolocalizador social.
Barrapunto : Noticias de interés relacionadas con la informática y la tecnología.
Zoho : Conjunto de aplicaciones web desarrolladas por la empresa norteamericana AdventNet.
La suite de Zoho se compone de:
- Zoho sheet: Hoja de cálculo
- Zoho meeting: Mantener conferencias
- Zoho show: Editor de diapositivas
- Zoho writter: Procesador de texto
- Zoho notebook: Similiar a Zoho wiki pero con alguna posibilidad más.
- Zoho creator: Creación de aplicaciones web pequeñas
- Zoho planner: Agenda
- Zoho wiki: Creacion de wikis
- Zoho chat: Chat
Las wikis
Una wiki es un sitio web en el que el contenido puede ser creado , modificado y eliminado por los propios usuarios. El principal ejemplo de wiki es la wikipedia.
Como experiencia del grupo en el tema de las "wikis" se ha diseñado :
http://www.wiki-site.com/index.php/Cursoruby
¿Que es un mashup?
Es un sitio o servicio web que usa código o contenido de otras fuentes. Este contenido se suele obtener principalmente mediante RSS, usando una API o Screen scraping.
Software Libre (definicion)
Licencias de software libre
- Licencia GPL
- Ventajas:
- Distribuye copias y modifica el software libre
- Es posible recibir un beneficio económico por distribuir copias.
- Puede mezclarse con software no libre
- Desventajas:
- No puede transformarse en software privado.
- No se pueden añadir más restricciones a la licencia.
- No hay garantía sobre el correcto funcionamiento del software.
- Las modificaciones realizadas deben publicarse en forma de código fuente.
- Licencia estilo BSD
- Ventajas:
- Puede trasformar el software en software privado.
- No es necesario publicar las modificaciones en forma de código fuente.
- Desventajas:
- No hay garantía sobre el correcto funcionamiento del software.
- Al permitir transformar el software en software privado no contribuye al desarrollo de software libre.
- No puede mezclarse con software no libre
- Licencia estilo MPL y derivadas
- Ventajas:
- Mejora algunos puntos de las licencias GPL y BSD
- Desventajas:
- Las empresas que contribuyan al código deben renunciar a derechos sobre el código fuente.
- No puede mezclarse con software no libre
- Licencia Copyleft
- Ventajas:
- Permite la copia, distribución y en ciertos casos, modificación de los contenidos
Introducción a Ruby on Rails
Se trata de un lenguaje de programación interpretado no compilado, creado en 1993 por el japonés Yukihiro “matz” Matsumoto. Surge a partir de otros lenguajes ya conocidos como Python y Perl.
www.37signals.com es la empresa creadora del paquete Ruby on Rails.
Principales caracteristicas:
- Es un lenguaje Interpretado.
- Sintaxis sencilla y consistente.
- Completamente orientado a objetos
- Clases, herencia, metodos.
- Dinamismo.
- Recoleccion de basura.
- Manejo de Excepciones.
- Tratamiento de expresiones regulares.
- Capacidades de introspeccion, reflexion y metaprogramación.
- Portable (Windows, Linux y Mac).
Rails:
Es un framework(1) para el desarrollo de aplicaciones web. Nace en las manos del danés David Heinemeier Hansson en 2004.
Se basa en la arquitectura MVC (Modelo, Vista, Controlador).

Sigue dos principios básicos:
- Convention over configuration (CoC).
- Don´t Repeat Yourself (DRY).
- Prototype : www.protoypepejs.org
- scriptaculous: http://script.aculo.us/
Ventajas:
- La productividad aumenta debido a la rapidez de desarrollo
- Menor cantidada de código
- No hay ficheros de configuración
- Todo está en su sitio.
- ¿Escalabilidad?
- ¿Rendimiento?
Alternativas a Ruby:
- Python:
- Django: www.djangoproject.com
- Turbo Gears: http://turbogears.com
- PHP:
- Cake PHP: www.cakephp.org.
- Zend: http://framework.zend.com
- Symfony: www.symfony.com
Ejemplos del uso de Ruby on Rails:
- En España:
- The cocktail
- ASPgems
- Otros lugares:
- 37signals
- www.37signals.com ---> Desarrollador del framework
- www.basecamphq.com ---> Gestión de proyectos
- www.highrisehq.com ---> Gestión de contactos
- twitter
- www.twitter.com ---> red social de mensajes cortos
- jobster
- www.jobster.com ---> Página de trabajo
- www.odeo.com ---> Videos, música
- www.yellowpages.com ---> Paginas amarillas
- www.magnolia.com
Información de Ruby on Rails:
- http://pickaxe.ruby.org.es
- http://ruby-lang.org/es
- http://ruby-lang.org/es/documentacion
- http://www.rubyonrails.org
- http://www.ruby-forum.com
(1) Framework: Es una base que contiene una serie de clases y elementos ya definidos necesarios para la creacion de un programa. Es como un esqueleto o una estructura base que sirve como ayuda para el desarrollo de un programa.
Rails es el framework de Ruby mientras que Structs es el framework de java.