Thursday 15 November 2007

Paranoid Android SDK

No, no me voy a poner a hablar de Radiohead ahora, aunque no lo descarto para otro momento. Ya hace 3 días que se publico el SDK de ANDROID, el antiguamente conocido como Google Phone, y, después del revuelo del primer día, están empezando a aparecer opiniones enfrentadas sobre la apuesta de Google.

El punto en el que aparece la controversia es la no utilización de un sistema JAVA estándard tal y como está definido por SUN en cualquiera de sus versiones tanto JSE, como JME. El problema radica en que Google no ha mencionado en ningún momento que Android sea una plataforma JAVA. Se indica claramente que es una plataforma LINUX, basada en el kernel 2.6, con licencia Apache que tiene un application framework que se programa en lenguaje JAVA. Esto es un truco de Google para no tener que verselas con SUN en un juicio por modificaciones de la maquina virtual, tal y como le pasó a Microsoft. Además, usa una máquina virtual propia llamada DALVIK que genera su propio codigo interpretado a partir de los Bytecodes compilados de JAVA, asi que tampoco es Java puro al 100%.

Vaya, que es un sistema propio que se programa en JAVA y punto. A mi me mola. Estoy un poco cansado de que MIDP limite tanto los desarrollos, sobre todo en cuanto a las APIs más avanzadas o interesantes y que solo están disponibles en cierto número de terminales.

Se está acusando a Google de fragmentar el mercado aún mas (es eso posible??) con el lanzamiento de esta plataforma, pero como hemos comentado tantas veces (Angel, Luis), teniendo una única entidad controlando la plataforma es la mejor forma de hacer que esta vaya adelante, sea innovadora y, en definitivas cuentas, triunfe.

De todos modos, el exito de esta plataforma estará siempre condicionado por el número de terminales que saquen, el número de aplicaciones que se desarrollen y la cantidad de capacidades que los operadores capen. Pq pueden capar todo lo que quieran, para eso es licencia Apache. Esto desde luego es lo que menos me gusta de todo. Que los operadores tengan poder suficiente para limitar las capacidades de este sistema puede hacer que todo se quede en un monton de humo.

Tuesday 30 October 2007

Nike + y varias cosas

Ah, no me he olvidado ya del Nike+. Es que la semana pasada tuve un accidente en la planta del pie (que apropiado) y no he podido correr en toda la semana.

También ha sido mi cumpleaños y me han regalado un iPod nano 3G de 8Gigazos, pero eso se merece un post aparte.

je je je.

La importancia del entorno

Parece una moda y hasta un "hype" como dice mi amigo Sancle, pero estoy completamente convencido de que el entorno de trabajo importa mucho. Y no me estoy refiriendo a lo a gusto que estamos con los compañeros, o si de nos vamos a echar cañas con el jefe. Me refiero al entorno físico en el que trabajamos.

Las oficinas "cubiculares" que estamos acostumbrados a ver en algunos lugares de trabajo (ejemplo, oficina donde trabajan Hiro y Ando de la serie "Heroes", toma frikada) no ayudan a trabajar.
Bien, pues revisando mi larguíiiiisima lista de suscripciones en Google Reader, me he encontrado con este artículo del blog de Google Code donde cuentan como decoraron la oficina para hacerla "Super Mario Bros" compliant. :P. Alucinante, solo faltan los sonidos de las monedas y musica de fondo.

Nosotros hacemos nuestros pinitos, con nuestra "Lifestyle room" donde tenemos la TV LCD 42" y la Wii para echar unas partiditas en las horas de reposos. Ah, acabamos de descubrir el Tiger Woods Golf y estamos alucinando.

Os pongo el enlace de Google Code para que veais el resultado de la decoración

Friday 12 October 2007

Nike +

Dicen que lo que diferencia a los niños de los hombres es el precio de los juguetes. Pues si, la verdad, y el que os diga lo contrario miente como un bellaco. Me he comprado un Nike+ y estoy alucinando. ¿Que es Nike+? Es un pequeño sensor que te pones en las zapatillas de correr y que envia mediciones de distancia recorrida a un receptor que pones en el iPod Nano. Asi de simple.

Parece una tonteria, pero no lo es. Lo bueno viene después. Tu sales, haces tu entreno, vuelves a casa, sincronizas el iPod con iTunes y automáticamente te mete los datos del entreno a tu web personal dentro de la comunidad Nike+. Aqui es donde sigue la diversión. Os voy a contar las cosas que podeis hacer:

  • Hacer seguimientos y comparativas de los entrenos realizados
  • Control de distancia recorrida semanal, mensual...
  • Control de calorias consumidas
  • Control de velocidad de carrera
  • Crear Mapas de rutas con Google Maps y compartirlos
  • Crearte retos personales
  • Enfrentarte a ti mismo comparando tus mediciones con un entreno anterior
  • Apuntarte a los retos de la comunidad
  • etc....
La verdad es que me lo paso como los tontos. A cualquiera que le guste correr se lo recomiendo encarecidamente, la va a gozar. Ah, si no te importa gastarte pasta, en iTunes puedes comprar listas de canciones creadas por atletas profesionales para entreno. Aunque también puedes usar la tuya propia. Os voy a poner la mia para que la valores. Es dura, muy dura.
  1. Rob Dougan - Furious Angel
  2. Garbage - Push it
  3. Fat Boy Slim - The Rockafeller skank
  4. Blur - Song 2
  5. Apollo 440 - Lost in Space theme
  6. Linkin Park - Faint
  7. Apollo 440 - Stop the rock
  8. The Cardigans - My Favourite Game
  9. Guns 'N Roses - Paradise City
  10. Smashing Pumpkins -Zero
  11. Jamiroquai - Cosmic Girl
  12. Steppenwolf - Born to be wild
  13. Rammstein - Du Hast
  14. Linkin Park - Session
Si conoceis las canciones, va de menos a mas mu rápidamente, tiene una pequeña etapa estable entre la 7 y la 11 y un pico final con el Du Hast de los Rammstein. Finaliza tranquila. El que se atreva a seguir los cambios de ritmo, ya sabe......

Ah, en el widget que he puesto en el blog podeis seguir mis entrenos. A partir del 27 de octubre, que es mi cumpleaños, estarán mas actualizados pq tendré mi propio iPod Nano, que ahora uso el de mi mujer y no me lo deja siempre.

Lo dicho, juguetes caros.

Link Nike+

Wednesday 10 October 2007

Nike + iPod

Estoy alucinado con el Nike+. Me lo pillé ayer y laverdad es que es una pasada. En cuanto tenga un rato, retomaré el blog.

Ah si, voy a pasar del inglés. Ya escribo en mi blog de SevenClick en Inglés y cambiar a Castellano es la unica forma de que continue este.

http://blog.sevenclick.com

Friday 10 August 2007

How would I look like in Springfield?


I know, I know. This is supposed to be a technology blog. But It's summertime. I've been playing with The Simpsons Avatar Creation Tool. You can find it here. This is the result, not too bad, uh?

Ja ja ja.

< Mind Note > Back to Test definition.

Tuesday 31 July 2007

My toys

We have just received the MSDN Welcome kit with the software DVDs. It has made my think about myself. More concretely, about how do I behave in my job. Do you realize that we could be the only people that get exited when a new job tool is received?

Technicians (developers, programmers, software enthusiasts, etc...) get exited with a new mobile phone, new DVDs, new Software, a new Beta Relase (Visual Studio 2008), etc..
It has to be very strange for non-technical people to accept these behaviors, don't they?

Nevertheless, it feels like turning back to childhood. It feels like Christmas day with all those brand new toys waiting to be opened. Exciting. Sometimes frustrating, sometimes not. The day you receive a new "toy" is a different day. Everybody is more relaxed, happier and more productive. Fortunately, we are enjoying the start up of a new company, with plenty of new toys to open. Lucky us.

Just to conclude. If someday I lose this feeling about new things, tell me so. I'll probably have to change my job or go on holidays.

Monday 16 July 2007

Wii at the office!!!!!!!!


I'm not lying. We have bought a Philips 42" LCD TV 1080p and a Nintendo Wii. Both came last Friday. To be honest, I thought that this kind of initiatives were only possible in certain companies (e.g. Google, as they're happy to say). I used to think that having a videogames console at the office was not very interesting because there is so much work to do that the last thing you think about is playing videogames.

Obviously, I was wrong. We have spent little time playing Wii Tennis, and the results are interesting. I think people work happier. We only play on spare time, not on working time, so the benefits are obvious. Sometimes people argue about the long spare time reserved for meals. I do. But If I can waste my spare time playing Wii with the rest of the colleagues, those death times are less boring and more "productive". At least in terms of happiness.

Just one picture to illustrate the post.



Oh, I'm looking forward to receive the sofas!!!!!!

Thursday 12 July 2007

Microsoft Partner Program

No, I'm not crazy. One of the multiple tasks I must face in my new job is to evaluate software licenses. As long as we are in the first phase of the company, we are evaluating different alternatives regarding Microsoft Software.

I'd like to say that I'm not an Open-Source or Free Software fanatic or, as I like to call them, "Taliban". I think that every companies aims to earn money, and even Open Source oriented companies have a business model.

Microsoft Partner Program is a very interesting initiative for small companies. In our case, a Mobile oriented ISV, it allows us to obtain software licenses for a very small amount of money, which enormously helps to start the activity. This way, Microsoft takes advantage from this situation because companies define their processes based on microsoft products. In my opinion, it is very difficult and rare to change those processes once they have been started.

Intelligent move.

Saturday 7 July 2007

Safari for windows

What's the point in releasing Safari for Windows? Several answers come into my mind. Anyway, I think that this is just a movement made by Apple to take advantange of the continuous hype surrounding this company.

Somebody told me once that Apple designs its products just for "poshes". Well I don't agree completely with this affirmation, I own an iPod nano, but in some cases its true. iPhone is actually the poshiest mobile phone in the world (appart from those mobiles that cost upto 3000€). The same can be said about Apple TV.

Another thing that comes into my mind is that Apple customers can be better described as "fans". My iMac, my MacBook, my iPhone and my iPod. All of them with the same appearance and very fashionable.

So, with this two things in mind, Who are the target customers for Safari for Windows? Just wannabes unable to afford "real" Mac Products?

I think that most people use Internet Explorer because of laziness. You know, it is integrated with windows, it does its job and most websites work properly with iExplorer. People using FireFox loves it because of the plugins, the configuration capabilites, and the extensions. Some sites refuse to load properly with Firefox. Well, that's a price to pay. I don't know much people using Opera. I know its an option, but few people seems to love it.

I think that the penetration of Safari will finally be residual, negligible. Of course, this is just an opinion. I haven't tested it yet, but I'll do during the weekend.

Monday 2 July 2007

Business Card



No comments!!!!

Wednesday 27 June 2007

Apple's iPhone Programming

With some delay, I'd like to rant about Apple's iPhone Programming Environment. As you may know, two weeks ago Steve Jobs made one of his worst presentations ever. He gave little new information to the world. But one of the pearls he throw out was the new programming environment for the iPhone. This one and a port of Safari for Windows (full of bugs, by the way).In fact call it programming environment is a bit pretentious.

Apple, following their tendency of "wallet gardens", has created a mobile phone without programming capabilities. When Steve Jobs first presented iPhone, there were no programming functionality planned. No native programming, no java. But everything changed two weeks ago. They have created a programming environment for the iPhone. It is a solution based on Safari, the web browser, and AJAX as a platform. Impressive.

The first think that comes into my mind when I think in such environment is security. AJAX is not the quintessence of security. The combination web + AJAX is dangerous. They are based on a connected environment and if you allow a web site to access phone capabilities such as contacts, personal information, etc... the risk of appearance of malicious software increases exponentially.

In order to add capabilities to access phone's functionality through Javascript, they must extend ECMA Script with propietary functionality. Do you find the irony in this point? You use an standard tecnology (web+javascript in this case) in order to attract a big development base, but you add your own extensions to that technology making the software created for iPhone not standard.

I hope, for their own good, that the iPhone will limit that capabilities to remote applications, but on the other hand, all the benefits of an application accessed remotely (distribution cost, ease of access, less error prone) are missed. It's difficult to set up an environment with an adequate balance between security and functionality. At least when we are considering a web based environment.

Tuesday 12 June 2007

New Course

My blog has been very quiet during the last weeks. No, I haven't quit my blog but from now on updates will be less common. The reason why is I have changed my job. I've left my old company, Vodafone, where I was working for 4 years and a half and I've started a new adventure.

My new company's name is TB Solutions Sevenclick. Well, Sevenclick is the actual name and TB Solutions is the mother company's name. I have assumed the role of CTO (Chief Technical Officer) which is a great opportunity for my career.

Sevenclick is a mobile focused start-up. We don't depend on a single product or idea. Our focus is customers. Currently we are just 3 people (we'll be six in one month time) with great excitement and willing to succeed.

As soon as I have more time (we are currently configuring servers, network, workstations and so on and so forth) I'll update my blog. Probably the main theme will change, as long as I'm going to be involved in lot of different subjects, but I will get back to Rails once in a while.

Thursday 31 May 2007

Surface Computing

Microsoft have just presented a new product (technology?) named Surface Computing. I have to say that this is awesome. The possibilities are enormous. This video shows up several applications developed by Microsoft along with partners like T-Mobile, Sheraton and Caesar's Palace to demostrate several concepts able to be implemented with Microsoft Suface Computer.


Microsoft mentions hotels, casinos, etc.. as the target consumers for this technology. Anyway, I we just think about the possibilites, we can find easily tons of applications. The first thing that comes to my mind is a bunch of people working together in a software project. An analysis or design meeting with several people contributing to define an architecture. Ease of use, collaborative, impact, impressive.

Please, take a look at the videos. You won't regret.

Thanks to Larry Larsen's blog for the information. http://on10.net/Blogs/larry/first-look-microsoft-surfacing-computing/

Tuesday 29 May 2007

New Language

Hi all

After one month and a half, I have decided to switch the blog's language from Spanish to English. There are several reasons, but the main one is the Ruby on Rails community. Most Ruby on Rails blogs are written in English and all the documentation is generated also in Shakespeare's language.

Last friday, one of my posts was replied in english. That was awesome because the reader didn't know a word in spanish but he managed to translate the post and reply giving me very useful information (thanks Jeremy).

So, welcome English, Bye Spanish.

ActiveRecord - Multiples Bases de datos

Durante un seminario acerca de Rails, alguien me pregunto sobre la posibilidad de acceder a una fuente de datos que fuera la configurada por defecto en el entorno en el que nos encontremos, a saber, desarrollo, test y producción. Tengo que confesar que la pregunta me cogió un poco por sorpresa, pero pensando en ello, y con la confianza que te dan las buenas ideas que se desprenden de todo lo que rodea a Rails, supusimos entre todos que si que se podría. Efectivamente, asi es. De hecho, es realmente sencillo.

Tendremos que llamar al método establish_connection del modelo que apunte a la BD externa con una sintaxis como esta.

Class_name.establish_connection(
:adapter => "mysql",
:host => "host_name",
:username => "username",
:password => "password",
:database => "db_name"
)

De este modo, tanto esta clase, como el resto de subclases harán uso de la nueva conexión. El resto de clases del modelo seguirán usando la BD configurada por defecto en el archivo database.yml

Friday 25 May 2007

Documentación de Rails

Este va a ser el primer post en el que critique un aspecto de Rails: su documentación. Y es que si bien el Framework en si mismo es genial, la documentación no llega al mismo nivel de excelencia. Siempre bajo mi punto de vista, claro esta.

Y es que yo, que he sido los últimos años un enamorado de Java, soy de esas personas raras dentro del desarrollo de software que valoran mucho la documentación, tanto de los productos finales, como de las APIs.

Si yo me enfrento a documentación en JAVA DOC, se exactamente que tipo de parámetros necesita un método para funcionar, las excepciones que lanza, el tipo de retorno, etc... en cambio en Rails no es asi.

Algunos de los métodos (ActiveRecord::Base.find() por ejemplo) si que están correctamente documentados, con ejemplos, etc... De echo, muchas de las clases tienen información buenísima al comienzo del documento sobre como utilizarlas. Lamentablemente esto no pasa en todas ellas. El módulo de vistas tiene algunos métodos con explicaciones de este estilo.

check_box_tag(name, value = "1", checked = false, options = {})

Creates a check box.

Esto no ayuda mucho. Personalmente me cuesta averiguar que puedo meter en options.... en este sentido, creo que es necesario progresar en la redación de la ayuda de ciertos métodos.

Bueno, no voy a seguir más, ya que no quiero criticar demasiado a Rails.

Tuesday 22 May 2007

Active Record = Join Tables

En uno de los primeros POSTs de este blog, hablaba de las relaciones entre tablas a través de los modelos de ActiveRecord e intentaba (conseguía?)explicar un modo para entender como definir correctamente estas relaciones. Me gustaría ampliar un poco esto para analizar una de las relaciones que creo que no he tratado correctamente, las relaciones N a N a través de Join tables.

Estas relaciones se dan cuando tenemos dos tablas relacionadas entre si a través de una tercera tabla. En esta tabla, se suele sustituir la clave primaria por la unión de los índices de las dos tablas relacionadas, si bien esto no es obligatorio.

Rails permite definir estas relaciones de una manera muy sencilla usando en ambos modelos la relación has_and_belongs_to_many :tabla (vaya nombrecito). Usando esta sencilla fórmula, seremos capaces de acceder desde un objeto de uno de los modelos a la lista de elementos del otro modelo de una forma muy sencilla. Por ejemplo, si relacionamos Authors y Articles a través de la Join Table Publication, podremos hacer algo así.

autor = Author.find(:first)
lista_articulos = autor.articles

En lista_articulos tendremos un array de objetos Article que se han asociado a Author a través de la tabla Publication. Tendremos que seguir ciertas convenciones que rails nos indica como que el nombre físico de la join table este compuesto por los nombres de las tablas enlazadas en minúscula y en orden alfabético. Si queréis ver la especificación, visitad el API. Facil no???

Pero hay un problema. Imaginemos que esta tabla Publication tiene campos adicionales que no son los índices de las tablas referenciadas. Rails no nos pone ninguna pega para acceder a esta información. De hecho, la incluye en el array que hemos obtenido anteriormente. El problema es que estos campos son de solo lectura. No se pueden modificar. La aproximación que se tomaba era la utilización de delete para borrar una entrada antigua y del método push_with_attributes(object, attributes) para introducir una tupla nueva en la join table. PERO ESTE METODO ESTA DEPRECATED. NO LO USEIS.

Afortunadamente, este problema ya esta resuelto. El truco (no es un truco, pero vaya) es usar una doble relación has_many en ambas tablas a relacionar usando el modificador :through. Ah, y creando un nuevo modelo que nos identifique la join table. Esto es muchísimo mejor, ya que recuperamos toda la funcionalidad que nos proporciona el tener una tabla identificada por un modelo. También eliminamos la necesidad de llamar a la tabla con nombres raros (autor_articulo en el caso anterior)

Bueno, como definiríamos esto en la relación anterior???? Marchando.

class Author << ActiveRecord::Base
has_many :publications
has_many :articles, :through => :publications
end

class Publication << ActiveRecord::Base
belongs_to :author
belongs_to :article
end

class Article<< ActiveRecord::Base
has_many :authors
has_many :authors, :through => :publications
end

Que os parece??? tenemos ahora acceso a tooooodos los métodos de inserción, etc... De la tabla Publication y podemos trabajar de un modo mucho más sencillo.

Thursday 17 May 2007

NetBeans 6 Preview Milestone 9

Como anunciaron en la JavaONE, ya tenemos disponible el Milestone 9 de NetBeans 6 con soporte Ruby, JRuby y Ruby on Rails. url.

En varios videos que han publicado en NetBeans.tv, he visto una integración de Rails muy avanzada. Llevaba tiempo esperando una versión estable para poder probarla y detallar como avanza esta nueva alternativa dentro de los IDEs para el desarrollo Rails.

En estos momentos estoy terminando de descargar el software (pesa unos 166 megas). En cuanto lo instale y lo pruebe, pondré un post comentando mis impresiones. De todas formas, si se confirma lo que mostraban estos videos, es un rival muy fuerte para Aptana. Muy, muy fuerte.

El link al software. http://bits.netbeans.org/download/6.0/milestones/latest/

Wednesday 16 May 2007

Ruby on Rails VS JEE

Os acordais de los anuncios Mac VS PC de los tios gordo y bajito??? Pues aqui tenemos una versión del mismo enfrentando a RoR y JEE. Me ha echo muchísima gracia. Supongo que por el tiempo que me he pegado peleandome con JEE (Antes J2EE), sus config.xml, sus ear de 5 megas, etc... Espero que os guste tanto como a mi.

Wednesday 9 May 2007

Active Record find

Actualmente me encuentro desarrollando una aplicación WEB que dispone de un API REST y una parte estándard. A la hora de desarrollar las consultas a los modelos, me he encontrado con que algunas de estas son muy complejas y tiendo a pensarlas en SQL directamente, ya que es un lenguaje que da un gran rendimiento y flexibilidad.

ActiveRecord::Base nos proporciona dos métodos para realizar estas consultas, find y find_by_sql. En el caso del segundo la opción está clara: insertar directamente el SQL que he pensado para obtener solo lo que yo quiero obtener y con el formato que yo necesito. En el caso del primero, solo con echar un vistazo al API podemos ver que tiene un gran número de posibilidades, parámetros, etc.. que lo convierten en una opción muy poderosa para realizar las consultas. Asi pues, me surge una duda ¿Cual de ellas usar?

Esta pregunta, que en principio parece muy sencilla, no lo es tanto. Si controlas SQL tenderás a hacer uso de find_by_sql ya que te abstraeras de aprender las opciones y posibilidades de ActiveRecord y trabajarás con algo conocido. Pero precisamente esto es algo que no deberíamos hacer. Bajo mi punto de vista, tendríamos que usar las ventajas que nos da Rails evitando usar SQL directamente.

Diseñamos la BD, definimos los modelos de las tablas, declaramos las relaciones entre ellos. CONTROLAMOS la estructura de nuestros datos. Imaginemos que tenemos una tabla Articles y otra tabla Tags. Definimos una relación n-to-n con sendas directivas :has_and_belongs_to. Bien, pues en el caso en que queramos obtener todas las tags de un artículo, podemos bien escribir un SQL que obtenga la información de las distintas tablas o podemos dejar hacer a ActiveRecord, ya que por el hecho de tener esta relación, es capaz de proporcionarnos esta información automáticamente con el siguiente código.

article = Article.find(article_id)
article.tags.each do |tag|
puts tag.tag_name
end

Mantenemos el código sencillo. Usamos los convencionalimos de Rails. Resulta extremadamente sencillo de interpretar. EVITAMOS MEZCLAR LENGUAJES.

Tuesday 8 May 2007

Aptana (I) : Debug

Hace unas semanas, comentaba en una entrada del blog que me había decidido finalmente por el plugin Ruby in Steel para visual Studio. Bueno, pues desde hace muy poco tiempo, exactamente desde el 1/5/2007, tenemos disponible la primera versión de Aptana que integra RadRails. Si y no. De "serie" no incluye esta funcionalidad, pero es muy sencillo descargarnosla siguiendo los pasos que se indican en la página de descargas.

Las versiones night-build de este entorno que incluían RadRails era demasiado inestables para ser usadas para desarrollo, sobre todo la parte de Debug. Pero todo esto ha cambiado. Y de que manera!!! Me voy a atrever a afirmar que el debug de aplicaciones de Rails está casi conseguido al 100% en la versión actual de Aptana. Voy a enumerar las que, a mi modo de ver, son las principales funcionalidades de que disponemos para debug.

  • Botón Script/Console. Nos lanza una consola o símbolo de sistema dandonos acceso a todos los componentes de la aplicación. Imprescindible para debugear cuando estamos creando los Modelos. Podemos comprobar las relaciones que hemos establecido, el resultado de las consultas, como se producen las excepciones al intentar eliminar cuando tenemos recursos protegidos, etc... Todo aquel que se inicie en Rails tiene que pasar un tiempo con la consola para adaptarse al lenguaje y al API. Aptana nos permite realizarlo dentro del propio IDE, sin tener que tener varias consolas de sistema abiertas y lo que es más importante, pudiendo introducir pequeños scripts y ejecutarlos de vez sin tener que soportar el tedio de la consola de sistema.
  • Botón Debug. Le indicamos que nos lance un Debug de Ruby para nuestra aplicación. De este modo, nos abre la perspectiva de Debug permitiendonos poner puntos de ruptura, hacer una ejecución paso a paso, etc... Para poder hacer debug necesitamos tener instalado el gem ruby-debug. La siguiente imagen nos muestra la página de propiedades tal y como tiene que estar configurada.
Vemos que nos indica que tenemos que tener instalada la gem ruby-debug-ide. Con Ruby-gems podemos instalarla ejecutando gem install ruby-debug-ide

Esta es una captura de la perspectiva de Debug en Aptana con puntos de interrupción activados.

Espero con impaciencia que permitan poner puntos de interrupción, en definitiva debugear, no solo en el modelo y los controladores, sino también en las vistas. Hasta este momento, los archivos .rhtml no permiten activar los puntos de interrupción para ver paso a paso como se van generando. No obstante, la velocidad de carga del servidor interno es muy buena, la respuesta del entorno en debug inmejorable y la sensación general es que esto esta avanzando a pasos agigantados.

Voy a ir diseccionando poco a poco que añade esta versión de Aptana al desarrollo Rails. Espero que en cosa de unos meses, dispongamos de un IDE tan avanzado que el no usarlo sea casi pecado!!!!!!!!

Thursday 3 May 2007

Fiddler

Hoy quiero alejarme un poco de Rails, aunque no mucho y más adelante vereis por qué, para hablar acerca de una utilidad genial que he descubierto esta misma semana. Fiddler.

Lo primero de todo, que es Fiddler? Pues Fiddler es un Proxy HTTP para Debug. Es decir, un Sniffer especializado en HTTP pensado para que la tarea de rastrear una conexión HTTP no sea un quebradero de cabeza. Si habeis utilizado Ethereal estareis de acuerdo conmigo en que, a pesar de ser una gran utilidad con muchas opciones y muy util, a la hora de acceder al contenido de los paquetes y de rastrear una conexión en periodo de Debug, esta herramienta muere de exito. Nos perdemos en las opciones y no es sencilla.

Fiddler incorpora un generador de peticiones HTTP genial que nos permite configurar la URL, el verbo HTTP a usar (GET, POST, PUT, DELETE...) los parámetros, cabeceras, etc... y también permite por medio de un pequeño plugin el renderizar correctamente contenido xml para su visualización. Lo cual es genial cuando estamos desarrollando un API REST ya que vamos a poder lanzar tests funcionales muy facilmente, rastreando los resultados inmediatamente y todo con la misma herramienta. Aqui incluyo unas cuantas capturas de las pantallas de Fiddler.


Request Builder


Session Inspector

Si usais Internet Explorer, comprobareis que todas las peticiones que lanceis automáticamente son capturadas por Fiddler. Bien, yo uso Firefox y aunque en principio esta funcionalidad no está configurada, es tan sencillo como seguir los pasos que se indican en esta pagina para configurar la dirección de configuración del proxy. Es muy sencillo y muy intutitivo.

Ah, se me olvidaba, la dirección de la página principal de Fiddler. http://www.fiddlertool.com/

Friday 27 April 2007

AOP en Rails???? Marchando!!!!!!!

Observers. Si conoces como funciona AOP te vas a maravillar con lo sencillo que va a ser añadir control de aspectos a nuestras clases Model en Rails. De echo, si lo pensamos un momento es el punto más obvio del modelo Rails en el que añadir esta funcionalidad. Nos va a permitir añadir control a los puntos de entrada y salida de las operaciones CRUD que nos proporciona ActiveRecord::Base, es decir, new, create, update, delete, save.

Lo que nos propone ActiveRecord::Observer es el poder crear metodos que se ejecuten antes o después de las invocaciones a cada uno de estos métodos. La forma es muy sencilla. Estos son los pasos para hacer un log para cada operación de guardado. Haremos un pre-log y un post-log.

  1. Creamos una clase que herede de ActiveRecord::Observer y la nombraremos con el nombre del Modelo a observar seguido de Observer, es decir, si nuestro modelo es Shop la llamamos ShopObserver.
  2. Guardamos el archivo en la carpeta app\model con el nombre shop_observer.rb
  3. definimos un método before_save en el que ponemos la funcionalidad a ejecutar ANTES de guardar. En nuestro caso, el log.
  4. definimos un método after_save donde incluimos funcionalidad para DESPUES de guardar.
  5. Editamos el archivo config/environment.rb modificando la entrada config.active_record.observers = :shop_observer
El codigo fuente final

class ShopObserver < ActiveRecord::Observer def before_save(a_shop) a_shop.logger.info("PRE-LOG - Shop name = #{a_shop.name}") end def after_save(a_shop) a_shop.logger.info("POST-LOG - Shop name = #{a_shop.name}") end end Y ya esta todo. Ahora podemos ejecutar la consola del entorno con ruby script/console para testear lo que hemos creado. Si ejecutamos
shop = Shop.new(:name=>"ebay")
shop.save

vamos a ver que el archivo development.log va a contener dos entradas de log ejecutadas antes y después de llamar al método save.

Yo estoy cada vez más encantado con la funcionalidad que me proporciona este framework DE SERIE, y sin necesidad de añadirle plugins o librerías externas.


Thursday 26 April 2007

Active Records (II)

Siguiendo con el manualillo que voy escribiendo sobre como entender el concepto de ActiveRecord, voy a poner una ayuda para entender mejor como se realizan relaciones. Las relaciones se establecen usando palabras clave y un punto de relación. El problema es con los puntos de relación. Según el tipo de relación tenemos que definirlo como plural o como singular. Alguien me djo una vez que lo que mas le gustaba de Ruby era el lenguaje en si, ya que se parece mucho al lenguaje natural. Estas son las formas de relacion posible.

  • Relaciones singulares
    • has_one :other
    • belongs_to :other
  • Relaciones plurales
    • has_many :others
    • has_and_belongs_to :others
Mejor todavía, vamos a verlas desde el punto de vista de un modelo entidad relacion.

  • One-to-One
    • has_one :other (TABLA REFERENCIADA)
    • belongs_to :other (TABLA CON LA FOREIGN KEY)
  • One-to-Many
    • has_many :others (TABLA REFERENCIADA)
    • belongs_to :other (TABLA CON LA FOREIGN KEY)
  • Many-to-Many (Join table)
    • has_and_belongs_to :others (AMBAS TABLAS REFERENCIADAS)
Siguiendo la guia que di en el anterior articulo podemos entender mejor las referencias que hacen las palabras reservadas. Solo queda un detalle más a esclarecer. el uso de singulares y plurales.

Nuestras tablas estan en plural, nuestras clases Model estan en singular (customers, Customer) y aqui, ¿Como la ponemos? pues depende. Nos tenemos que olvidar de la convención de nombrado de la BBDD y el Modelo y pensar como lo hariamos si tuvieramos que describirlo.

Ej.

En una relacion 1 a N entre unas tablas Writers - Novels la relación sería

class Writer
has_many :novels
end

class Novel
belongs_to :writer
end

Es un poco extraño ya que no tenemos una identificación directa para novels en las clases Model pero, ¿No os parece intuitivo? Este ejemplo es demasiado obvio, en otras ocasiones los elementos que almacenamos en las BBDD no son tan sencillos de identificar por sus referencias, pero creo que es suficientemente explicativo.

Tuesday 24 April 2007

Active Records

Siguiendo con el tema de moda (de momento único, lo se..... paciencia) me apetece hablar un poco del Modelo, implementado por Active Record, y más concretamente de las relaciones entre tablas. Bajo mi punto de vista, la situación mas normal que nos vamos a encontrar es una en la cual la BBDD nos sea impuesta y necesitemos modelar el diagrama Entidad-Relación de esta a través de clases Model (clases que heredan de ActiveRecord).

A parte de crearnos los modelos de las tablas con los scripts, es necesario que los relacionemos para crear un modelo lógico de nuestra BBDD. Aquí es donde empiezan los problemas, pq si bien es sencillo crear las relaciones, no es demasiado intituitivo a causa de las palabras reservadas que se utilizan. Voy a poner una serie de trucos que son interesantes para entender correctamente el modo de realizar esta relacion.

  • foreign keys= cuando definamos en la tabla los campos que van a actuar como foreign key tenemos que hacerlo con la formula modelo_id. Ejemplo: Tabla = customers Modelo = Customer Foreign key en otra tabla = customer_id
  • belongs_to = es muy poco intutitivo . Se pone en la clase Model que representa a la tabla que tiene la Foreign key. Mi recomendación -> entiendelo como referencia_a.
  • has_many / has_one = La pondremos en la tabla relacionada por una Foreign key. Se entiende mejor si la interpretamos por es_referenciada_por.
Volvere a este tema más adelante ya que tiene mucha miga.

Thursday 19 April 2007

Ruby In Steel

Después de muchos quebraderos de cabeza para conseguir debugear en RoR, me he decantado por la opción de Ruby In Steel Personal Edition. Este plugin para Visual Studio 2005, en su versión gratuita, incluye toda la funcionalidad necesaria para desarrollar RoR. Es cierto que faltan algunas cosas importantes como el CodeInsight pero hasta que Aptana saque una release de RadRails que permita debugear a una velocidad aceptable, voy a seguir con este IDE. Además, esta basado en Visual Studio 2005, que también ayuda.

De todos modos, espero con impaciencia la siguiente release de RadRails. Les falta poco. Cosas que tendrían que mejorar (y me consta que estan trabajando en ello a raiz de lecturas en los foros)

  • Debug. Es catastrofico. Tarda unos 5 minutos en lanzar WEBrick que se carga en 5 seg en la consola de sistema.
  • Tests. Cuesta también demasiado. El script de ruby en la consola de comandos tarda del orden de 14 seg, y en el IDE unos 3 minutos. Eso si, la integración con Eclipse es genial.
  • Code Insight. O la-ventana-de-ayuda-que-sale-con-Ctrl-Espacio. Funciona en las Nightly Build, pero faltan algunos métodos y tiene algunos bugs.
Actualizado.

Enlace al plugin para Visual Studio.

http://www.sapphiresteel.com/Steel-Download-and-Change-Log

Wednesday 18 April 2007

Debug con RadRails

Rails es genial...............hasta que entras en la fase de Debug. Llevo todo el día probando diferentes opciones para realizarlo. Hasta ahora, había usado RadRails como IDE y más o menos era suficiente. Pero hasta que no saquen la versión nueva ahora que se han integrado con Aptana el debug por defecto no funciona. He encontrado varias soluciones que voy a contar.

  • Configurar script/server como punto de Debug. Funciona, pero le cuesta un mundo arrancar el servidor (y digo un mundo por no decir una burrada).
  • Descargarte una night build de RadRails como plugin para Eclipse usando RDT. Funciona mucho mejor, más rápido y siempre engancha al llegar a los puntos de interrupción. Me ha parecido demasiado Buggy. Aún tienen que mejorar bastante.
  • Usar Ruby in Steel Personal Edition. Es un plugin para el Visual Studio 2005 que añade soporte Ruby y RoR. Es una version gratuita del mismo Software versión Developer y funciona bastante bien......salvo pq no me deja editar ficheros (estoy actualizando ahora mismo el Visual Studio con el SP1 para solucionar esto)
Creo que actualmente esta última será la mejor, por velocidad y pq esta basada en el VS2005. Si con el SP1 no me funciona voy a instalarme la versión en Inglés, pq estoy casi seguro que el problema viene por incompatibilidades de los editores por los paquetes de idioma instalados.

Bueno, no voy a desanimarme por esto!!!! Sigo opinando que Rails es muy interesante y las herramientas seguro que van a evolucionar a lo largo de los próximos meses que se prometen apasionantes.

Friday 13 April 2007

Hello World

Bueno, un blog dedicado a la programación, a la tecnología, a la movilidad y a internet no podía empezar de otra forma que con un Hola Mundo no?????.

He estado pensando mucho el lenguaje a usar, y al final va a ser.........castellano. Entre tanto, ahí lo dejo también en Ruby, mi último lenguaje en aprender (todo por el Rails).


puts "Hello World"


Me he quedado ancho...........