El equipo de Ingenet asistió la semana pasada a la Reunión de Enero de Grupo de Ruby de la UNAM (La siguiente reunión es abierta, es el 24 de Febrero, ve más detalles en la página del grupo en meetup.com).
¿Qué es Ruby? Según wikipedia:
Ruby es un lenguaje de próposito general dinámico, reflectivo y orientado a objetos que combina la sintáxis inspirada en Perl, con sabor a Smalltalk. Ruby nació en Japón a mediados de los 90s, diseñado originalmente por Yukihiro “Matz” Matsumoto. Esta basado en Perl, Smalltalk, Eiffel, Ada y Lisp. Ruby proveé de soporte a diversos paradigmas de programación, incluyendo programación funcional, orientada a objetos, imperativa y reflectiva. También tiene un sistema de tipado dinámico y administración automática de memoría; en estos y otros aspectos, es muy similar a Python, Perl, Lisp, Dylan y CLU.
Ruby es grátis y se puede obtener directo de la página web, para prácticamente cualquier sistema operativo común, como Windows, Mac OS X y Linux. Ruby se puede baja aquí.
Veamos ahora la sintáxis del lenguaje, con el típico programa “hola mundo”:
puts "Hello World!"
Para correrlo en su computadora, baje Ruby como arriba se indica.
En Ruby todo, absolutamente todo, es un objeto, aun los valores literales. Por ello, se puede hacer magía como:
-199.abs => 199
"cinco".length => 5
Ruby además es un lenguaje rico qu epermite desde hacer estos programas (cosa que podrian haber leido en perl o python):
puts "What's your favorite number?"
number = gets.chomp
output_number = number.to_i + 1
puts output_number.to_s + ' is a bigger and better favorite number.'
o cosas tan complejas como funciones lambda:
proc {|arg| print arg}
Proc.new {|arg| print arg}
lambda {|arg| print arg}
Uno decide que tanto del lenguaje desea aplicar. Una de las razones por las cuales Ruby se ha convertido en un lenguaje importante en el medio de la web 2.0 es la facilidad con la que se pueden crear aplicaciones web 2.0 con la ayuda de Ruby on Rails (también conocido como RoR).
RoR es un framework (un conjunto de herramientas) que permite al programador crear una aplicación orientada a la arquitectura MVC para organizar la programación de la aplicación. Ruby on Rails incluye herramientas que hace que las tareas comunes de desarrollo sean faciles, tal como una herramienta de “scaffolding” que genera automáticamente los modelos y vistas básicos para un sitio web. También incluye WEBrick, un web server simple en Ruby (aunque hoy por hoy se usa más Mongrel); también incluye Rake, un sistema de build para construir la aplicación. Junto con Rails, estas herramientas proveen un ambiente básico de desarrollo. Ruby on Rails requiere un servidor web para funcionar, y funciona con casi todos los servidores web modernos. Ruby on Rails también es famoso por el uso que le da a bibliotecas/frameworks como Prototype y Script.aculo.us para AJAX. Ruby on Rails ofrece como salida por omisión el HTML y XML, siendo este ultimo muy util para servicios RESTful. Ver más información en la wikipedia.
Puede bajarse Ruby on Rails aquí.
Existen diversos recursos en línea para aprender Ruby. Una pequeña lista a continuación:
Este post también fué publicado en Ingenet: El lenguaje de programación Ruby.
El Schedule. Estamos aqui, en el campo, escuchando banda.
UPDATE0:
- El enfoque de la platica de “Freelancers” no me va gustando. Habla más de branding que de otra cosa. En realidad, es una combinación de factores mas complicado que eso: Calidad minima en tu trabajo, conexiones, social skills.
- IRC es mi Pivotal tracker. Interesante llevar el número de puntos/hora para la cotización.
- Interesante el enfoque para poder hacer contratos en línea: https://rightsignature.com/. Digno de echarle el ojo.
- Y el bonito tipico ejemplo, usen control de versiones: http://github.com/.
- Usen Amazon S3: Amazon S3.
- Usen google apps para sus clientes.
- Dos lugares interesantes para hacer temas: http://themeforest.net/, http://www.templatemonster.com/.
- Tengan Tarjetas de presentación.
- Que usen facturas electronicas: Enlace Fiscal.
- Oficinas virtuales: IZABC.
- Invita a tus clientes a las chelas: el alcohol lubrica las relaciones.
- Checa RMM – o el como hacer apliaciones de Ruby “maduras” (best practices).
- Presentar prototipos pronto ayuda mucho. Prototipos son Mucho mas sencillos que hacer todo el trabajo
- Nota personal (@mauropm): No, las universidades publicas solo te enseñan a hacer la talacha, las privadas a hacer fiestas y vender hamburguesas y las gringas a chupar. asi es la vida: no importa donde estudies, tendras que desaprender todo al final de tu educación. (con salsa spicy de Wulfrano en esta nota)
- Va saliendo el pedo de los cerdos capitalistas. ¿que quieres hacer? ¿programas o dinero? Se pueden hacer las dos
- Comentario basico: paguen lo de su seguridad social o al menos cosas de seguro de gastos medicos mayores.
UPDATE1: Quiero jugar con los scripts generadores de imagenes para moblin, con mi linux a la medida, basado en openSUSE, claro.
UPDATE2: “Upload de archivos con Nginx”.
- Puedes servir multiples archivos con mongrel. Interesante.
- Esta madre funciona como pluing para que después le pases el archivo que subiste como local y tu app de rails no se “amarre”.
- Existe un pequeño codigo de jquery que puede ir mostrando el avance del download.
- La gran ventaja es que no haces un FORK completo levantando una nueva instancia de mogrel. Solo haces un light fork con el chiqui programa de Nginx.
- De preferencia manejen todo desde el mismo sistema, cuando usan cosas como FlashMedia Mamada, pues son dos sistemas distintos los que estan moviendole y es un pedo.
UPDATE3 “acts_as_magic_model, acts_as_catalog y real_fk: Tres plugins simples para toda ocasión”
- Crear catalogos, en lugar de poner numeros magicos en todos lados del codigo.
- Cada vez que usen algo en mas de un proyecto, haganlo plugin para Ruby/RoR.
- Thing.collection ayuda mucho para ordenar y preprocesar cosas.
- i18N esta en el codigo de gunnar, puedes hacerlo con los “nombres cualificados”. Otra opción mas “profesional” es usar gettext, como “hombres verdaderos”.
- Note que la idea de RoR es que la base de datos es tonta, la estructura esta en el lenguaje (ruby). Inicialmente se usaba mysql y la gente pensaba que estaba chido, pero bueno, ahora se puede usar sqlite; eso hacee que la gente tenga poco mas cuidado.
- En RoR no se tiene cuidado en la integridad de la bd, es necesario tener cuidado, use ActiveRecord.
- Puedes tener referencias sencillas, de has_many, belongs_to.
- Usar “Constrait” en la base de datos, como postgresql, por ejemplo.
- Este plugin ayuda a las migraciones, pero falta integraarse a la logica de la aplicacion.
- Rais nos ha malacostumbrado que las cosas son faciles.
- En RoR hay introspección en cuanto a las relaciones dentro de la bd.
- Automatic models crea todos las tablas de los catalogos de forma automagica, sin poner las conexiones aun.
- Reconoce maneja correctamente tablas de relacion sin hacerlos explicitos.
UPDATE4: Chillicoder da una conferencia acerca de como generar pdfs.
- Me encanta como genera los registros de una mini base de datos de forma casi magica. Al parecer son las magias de los RoR.
- format.pdf implemente “que haremos cuando te pidan el pdf”.
- Use PDF::Writer, escoja fonts, linea en blanco para division, texto, ponga el tamaño de letra, recorre cada candidato, se genera una linea bonita, se escuepe la linea al pdf. Finalmente genera el pdf con pdf.render. Marcarlo como “Application/pdf” para que el cliente sepa como procesarlo.
- Añadir la conveersion de latin1 a utf8, para que el encoding no se joda. Usar Iconv.iconv
- Interesante pregunta de Gunnar, acerca de la codificacion y desarrollo de aplicaciones de manejo de personal en la UNAM, que procesa letras como å.
- Revisen http://mexicoonrails.com.mx/, http://railscasts.com/
UPDATE5: Analisis de activewarehouse
- Integrar muchas bases de datos y mostrar resultados.
- Muy chido ejemplo de el sistema para buscar autos robados de Jalisco
UPDATE 6: Message queues en Rails.
- Soporte de mensajes asincronos, entre distintas entidades. Por ejemplo. WebSphere MQ, Oracle Advanced Queuing, etc.
- Sirve para procesos en background, comunicaciones entre procesos, independencia de publicadores y consumidores, envio tarde, es asincrono, puede balancear cargas y escalar
UPDATE7: Prototipos rapidos en Ruby y Jruby
- JRuby quiere traer Ruby a java.
UPDATE8: MacRuby
- Ruby coquetea con objetive-c
- Mensajes entre objetos de ruby y de objective-c.
- Integración con Interface Builder
UPDATE9: Groundwork, Github and other niceties.
- Generas el template con groundwork.
- Creas tu modulo en github y asi.
UPDATE10: Metaprogramación.
- Metaprogramación – generar código desde rails en ruby.
- por ejemplo, belongs_to, genera más código detrás de bambalinas.