miércoles, enero 31, 2007

Un buen comienzo

Ayer se llevó a cabo la primera reunión de este año de la Comunidad .NET de la Cd. de México en el ya acostumbrado espacio en Intersoftware. Llegué casi desde el inicio. Me dió harto gusto ver que el aula que nos asignaron estaba casi llena. Rául Guerrero ya había iniciado su presentación sobre WPF, sin embargo no me perdí mucho de sus explicaciones.

Como todo un desarrollador, Raúl estuvo demostrando XAML e iba aplicando los cambios que nos iba explicando a manita. Real Man. Hasta la fecha ha sido la mejor demo de WPF que he visto, alcance a entender varios conceptos y la analogía que hizo sobre CSS ayudo bastante para aligerar el concepto.

Después, Octavio Télis en su acostumbrada exposición de temas avanzados (entry level diría él), continuo con el tema de delegados, eventos, métodos anónimos y su mezcla con tipos genéricos.

Y finalmente, un nuevo miembro en el equipo de expositores, Juan José Karam, se aventó una práctica introducción al manejo de versiones de código con VSTS.

Al lo largo de las exposiciones fueron llegando más personas a la reunión, al grado que tuvimos que salir a pedir sillas adicionales para acomodarlos. Raúl tomo algunas fotos de los expositores y la concurrencia, así que pronto nos verán en línea. Se repartieron varios souvenirs y al final hubo la esperada rifa de dos libros de Microsoft Press.

También tuve el gusto de encontrarme con Alfonso Lara, un excelente desarrollador y amigo y platicar un rato junto con los demás expositores en "after-hours". Espero que para la próxima reunión nos puedan asignar un aula más grande. Seguramente se va a necesitar con tanta demanda.

Finito.

viernes, enero 26, 2007

Pluralizando

Una de las cosas más excitantes de Rails son los generadores. Son scripts Ruby que generan (¡oh sorpresa!) código Ruby con diferentes fines. Existen varios tipos de generador: controller, migration, model, view, etc. Cada uno crea varios scripts y directorios con las funciones mínimas del tipo escogido y con las referencias a los módulos necesarios.

Así, tenemos que al usar el generador de modelos, le pasamos un parámetro que es el nombre y genera una clase, un conjunto de pruebas y la correspondiente migración para crear la tabla en la base de datos.

Para generar todos estos archivos, se usan plantillas y además algunas funciones del framework para nombrar clases y archivos. Recordemos que Rails tiene un principio

Convention over Configuration


Esto significa que se prefiere usar estándares para los nombres de clases, tablas, objetos, referencias y demás items en lugar de estar generando mega-archivos de configuración (web.config o web.xml por ejemplo). Por ejemplo, al usar

./script/generate model account

se crea un modelo Account que se compone de los siguientes archivos y directorios:

Modelo: app/models/account.rb
class Account <>

Prueba: test/unit/account_test.rb
require File.dirname(__FILE__) + '/../test_helper'

class AccountTest <>

Fixture: test/fixture/accounts.yml

Migración: db/migrate/XXX_add_accounts.rb
class CreateAccounts <>

Si observamos un poco el código generado se verá que a partir del nombre del modelo "account" se han derivado varias etiquetas para cada uno de los items:





Mi modeloaccount
Nombre de claseAccount
Clase de pruebaAccountTest
Tabla en la BDaccounts

Se puede ver que el nombre de modelo se le aplica el estilo Pascal (CamelCase) para obtener el nombre de la clase y que se hace en plural para el nombre de la tabla en la base de datos. Y esto aplica incluso en sustantivos irregulares, por ejemplo:





Mi modeloperson
Nombre de clasePerson
Clase de pruebaPersonTest
Tabla en la BDpeople

"Person" => singular, "People" => plural. Brillante ¿no?

Pero..... todo se maneja en inglés :( Yo no spiko spaniol.

Como siempre el gran dios google tiene varias respuestas. La primera la encontré en HackerDude que nos habla de algo llamado "Inflector" (¿alguien cursó latín o alemán?) y encontré todavía más detalle en BlogOnRails. De inicio es algo harto sencillo: expresiones regulares. Se tienen que agregar o sustituir varias expresiones regulares para que Rails sepa como hacer plurales o singulares, algo como esto:

Inflector.inflections do |inflect|
inflect.plural /$/, ‘es’
inflect.plural /s$/, ’s’
inflect.plural /z$/i, ‘ces’
inflect.plural /([aeiou])$/i, ‘\1s’
inflect.plural /_(.*)$/, ’s_\1′
inflect.singular /s$/i, ‘’
inflect.singular /ces$/i, ‘z’
inflect.singular /(.*)s_(.*)/i, ‘\1_\2′
inflect.irregular ‘user’, ‘users’
inflect.irregular ‘estado_civil’, ‘estados_civiles’
inflect.uncountable %w( pantalones )
end


Y ¡listo!. A probar con:





Mi modeloorganizador
Nombre de claseOrganizador
Clase de pruebaOrganizadorTest
Tabla en la BDorganizadores

Este esquema no es perfecto, pero es pragmático ;)

En otro orden de ideas, ya está agendada la siguiente reunión de la Comunidad .NET de la Cd. de México, la orden del día es la siguiente:

Utilizando Delegados (Segunda Parte) - Octavio Telis
Estilos y Control Templates en WPF - Raúl Guerrero
Source Control en Team Foundation Server - Juan Karam
Por Confirmar Tema - Héctor Obregón

El lugar y la hora:
Fecha: Martes 30 de Enero
Horario: 7:00 a 9:50 p.m.
Lugar: Intersoftware Training
World Trade Center - Piso 35
Mexico D.F.

Y todavía pa'que se animen, habrá rifa de libros entre los asistentes. ¡Qué esperan! Nos vemos el próximo martes.

Finito.

martes, enero 09, 2007

Yo quiero uno asi

Después de varios rumores y chismes y demás, apareció finalmente el mentado iPhone.

Como es común, el anunció se hizo durante el CES de este año. El CES es el evento que aprovechan la mayoría de los fabricantes de productos electrónicos para anunciar las novedades que estarán comercializando a partir de este año y las maravillas que ya están probando para seguir extrayendo dinero de los pobres consumidores.

He aquí que Steve Jobs aprovechó el espacio para anunciar el iPhone.

Recuerdo que alguna vez se hizo una encuesta/discusión acerca de que item te sería más útil se te quedarás en un país extranjero sin maletas, ni nada a cuestas. Las opciones eran:
  • Tu PDA
  • Tu laptop
  • Tu teléfono celular
Finalmente, el ganador en la encuesta y la discusión fue el teléfono celular. Es increíble el grado de dependencia que puede llegar a tener uno en semejante dispositivo y es que es algo muy, muy, muy personal. Casi como el cepillo de dientes. Al menos, el mío así lo veo.

Y además, creo que bien usado (y equipado) en el perfecto companion de casi cualquier persona. La industria de los teléfonos celulares ha venido haciendo ofertas cada vez más interesantes pero definitivamente nada como lo que se presenta con el iPhone.

Es que eso de mezclar comunicación, entretenimiento, movilidad, integración, facilidad de uso y además ser internet-enabled no es nada fácil. Y una vez más Apple da el primer golpe: el que pega primero, pega dos veces (iPod (!) vs. Zune (?)).

Inmediatamente se me vino a la memoria el monito (Allard?) que dirige la nueva serie de productos de consumo en Microsoft, el papá conceptual de Zune que usa como motivación el video ese de Steve Jobs donde más o menos dice algo así:
El problema con Microsoft es que simplemente no tienen buen gusto. Simplemente no lo tienen.

Y vaya que si tiene razón.

Finito.

jueves, enero 04, 2007

And the winner is...

Curt Hibbs ha publicado en su blog, la referencia al índice TIOBE en la cual declaran como lenguaje de programación de 2006 a Ruby.

We are glad to announce that Ruby has become "Programming Language of the Year 2006". Ruby has the highest popularity increase in a year of all programming languages (+2.15%). Runner up this year is JavaScript with +1.31%. Both languages are boosted by their corresponding frameworks, Ruby On Rails and Ajax.
Voy terminando de leer Ruby on Rails: Up and Running y si bien el libro puede mejorar significativamente, lo que me sorprende completamente es Rails. Rails es un marco de desarrollo basado en Ruby, se conoce por casi increible capacidad de generar una aplicación "completa" en minutos. En lo particular me parece una perfecta implementación de una fábrica de software. Tendré que preparar un post más completo para sustentar el último dicho.

Todavía falta que lo vea en un sistema en producción, no conozco ninguno todavía y también explorar Rails al grado de ver que más puede generar aparte de aplicaciones web (¿servicios web? ¿integración?) y también, seguramente debe existir algo similar implementado con .NET o Mono (¿Monorail?).

Ruby es un lenguaje interesante. Todavía no lo entiendo del todo, como que no aplica el clásico ejemplo del "Hello World!" sin embargo tiene una simplicidad aparente que con Rails raya en lo ridículo. Pa'muestra un botón:

class Photo < ActiveRecord::Base
  has_many :slides
end

class Slide < ActiveRecord::Base
  belongs_to :photo
end

Con este par de declaraciones se ha realizado una relación uno-a-muchos. Así nomás. Y funciona ¡eh!. Tienes una consola que carga tu modelo de dominio, o sea tus clases, y puedes ir probando al vuelo tus objetos.

Hasta miedo tengo de voltear a .NET y Mono. Ahora los veo de manera distinta.

Finito.

martes, enero 02, 2007

Numeralia

Mes con más visitas: Noviembre (450+)

Los tres links más visitados:
  1. http://chilli-coder.blogspot.com/2006/07/fbricas-de-software-la-otra-visin.html
  2. http://chilli-coder.blogspot.com/2006/05/da-vergenza.html
  3. http://chilli-coder.blogspot.com/2006_09_01_archive.html
Estadística en imágenes



Visitantes a la fecha: 2,421 desde el 1 de agosto de 2005.

Visitantes por venir: 1'000,000,000 :D

Finito.