martes, 25 de noviembre de 2008

OpenSuse 11.0 plugin qt_pkg error

Sometime ago I downloaded the VM ware image of OPEN SUSE 11.0 that comes with MONO 2.0, but there were some annoying bugs with this version of MONO that was taking me crazy so as soon as the 2.0.1 version of MONO appeared, I wanted to upgrade to that version.

I launch the YAST2 application just to find that this application was not able to be started because it was missing the qt_pkg plugin. It was so annoying!!!!

After some research in google I finally found the solution in an Italian forum:

http://www.suseitalia.org/modules/newbb/viewtopic.php?topic_id=18739&forum=1&post_id=107616

So, basically to make the story short if you are having this problem too, try this, it worked for me!

  1. open a shell terminal
  2. type : sudo zypper in yast2-qt-pkg yast2-qt
  3. Answer yes to the download question.
  4. Wait and lauch Yast2! Now it should work normally!

Really thanks to “Anubis” for the solution to this really annoying error!

jueves, 2 de octubre de 2008

To Validate or not to Validate, XHTML, Dojo and Custom Attributes

Well, I must admit it. Now I really confused, I was validating the XHTML output of the pages of our current project, and because we used some custom attributes to create some widgets using a combination of Javascript and HTML (a custom attribute is an attribute that is not part of the HTML or XHTML specifications, like in <div id=”dialog” custom_type=”dialog”>, the custom attribute is “custom_type”), I realize the pages will fail the validation process, and as I was suspecting they did, they fail. But I remember that a big and popular Javascript toolkit uses custom attributes too, so, I think, mmm, “let’s look how they did to make their html output be valid XHTML”, and what I found has confused me a lot.

Dojo does not produce valid XHTML, they remove the Dojo namespace from their markup, so their pages don’t validate anymore (http://dojotoolkit.org/book/dojo-porting-guide-0-4-x-0-9/widgets/general). Why? I don’t really understand why?, I really want to know it.

Well, I think they’re tired of the war: “The Parser” posts this:

[...]

There's a big religious war about whether pages validating or not is important and I don't want to beat that dead horse anymore.

[...]

Lucky me, Dojo was not my favorite Javascript toolkit, and in my current project I am not using it, I am using JQuery (Dojo fans, sorry, if you need to make your code valid, as far as I know, you will have to make changes to the parser!!).

But, what can I do now? Do I must forget about Validation issues?

Well I was looking deeper and I found a really nice post from Jonh Resig http://ejohn.org/blog/html-5-data-attributes/

It seems that HTML 5 (http://www.w3.org/html/wg/html5) includes some cool features!, like the data-attribute to declare custom attributes, so in the future, I will not have to deal with custom DTDs or custom XHTML Namespaces! (Namespaces are not used to validate XHTML, Thanks for the comment zcorpan!).

But, now I’m more confused! What should I do?.

Should I still try to make the pages validate or not?

Well I think I could use XHTML Namespaces to make it validate.(I will use the approach of the data-attribute in order to keep compatible with the HTML5 specification) So I will have to do some changes now. A little bit more of work, but at the end of the day I will feel better with myself. But seriously I’m already confused, because the future is not as clear as I was thinking... Ok, don’t you believe me? Take a look to these good articles:

http://xhtml.com/en/future/x-html-5-versus-xhtml-2/#x5

http://www.robertnyman.com/2007/02/05/html-5-or-xhtml-2/

Goodbye.

---

Take a look to this post too:

http://marcgrabanski.com/article/5-tips-for-better-jquery-code

miércoles, 1 de octubre de 2008

Regular Expresions

RegularExpressionLogo

Hi, again…

Regular expressions are extremely useful, you can think on them like “wildcards on steroids” (I like that phrase I found it here: http://www.regular-expressions.info/index.html), they save you a lot of time when you do a search inside a string and want to return the matches based on a pattern or when you want to do replacements based on them. I don’t really remember when I started to use Regular Expressions but now I use them quite often. So here are some tips that I’ve found so far, in Javascript:

(If you already know a lot about Regular Expressions, please go directly to my seven tip, maybe you can find it useful).

1. You can match a specific character using its hexadecimal index in the character set: e.g.: \xA9 matches the copyright symbol in the Latin-1 character set.

This one is really useful when you’re working with Unicode, there are several considerations if you plan to work with Unicode, take in mind that Unicode may encode a single grapheme as two different characters, e.g.: “à” could be “a” and “`” so many regular expressions could fail mysteriously, and it could be hard to find why.

2. Use shorthand characters when possible, e.g. : use \d instead of [0-9] and \w to match any word character (alphanumeric characters plus underscore). The regular expression will be more readable.

3. Take in mind that “.” matches (almost) any character. Well this will work different in IE and in Firefox, in IE the “.” Matches even line breaks, and in Firefox line breaks won’t be matched. This difference is really important to remember.

4. Use capture groups if you plan to do something with the results, you can define a group using “(” and “)” like in (q)(u) (this will match q followed by and u and you will have 2 capturing group, to access each group use $1 and $2 for each group. Please note that the groups index begin in “1”, the group 0 contains the entire match not a specific group.

5. Lazy Repetition feature is useful but it can be expensive, like in <.+?> that matches any html tag (invalid tags inclusive!), if you now the exactly set of characters expected is better to use <[^<>]+>, it will perform better that the “.” Character.

6. You can create a regular expression in Javascript in two ways:

a. Using literal notation: /(q)(?=u)(u)/g

b. Using: var regx = new RegExp(“(q)(?=u)(u)”,g);

Take in mind that for the second way you need to be careful when you use the special characters like “\”.

E.g.:

/((ht|f)tp(s?):\/\/)?((W){3}\.)?(\w)+((\.)(([a-zA-Z])+/?)?)+/g

Var reg = new RegExp(“((ht|f)tp(s?): / /)?((W){3}\\.)?(\w)+((\\.)(([a-zA-Z])+/?)?)+”,g)

Please note that the “\.” in the literal notation is translated to “\\.” when you use the constructor notation.

7. Make yourself a big favor (a really big favor, even if you’re a Regular Expression Guru like my friend Paolo, he is really good with Regular Expressions!), and consider use this free tool:

http://www.gskinner.com/RegExr/

gskinnertool

This online tool is as simply as impressive, it is really complete and the regular expressions created there work quite well in Javascript, you can construct your regular expressions and test them on the fly! (this tool comes to you as a courtesy of my good friend Hans who recommended me to use it, and now I simply can’t imagine work with Regular Expressions without it)

There is also a Desktop version located here: http://www.gskinner.com/RegExr/desktop/ (it needs Adobe Air installed)

or use this other tool:

http://osteele.com/tools/rework/

rework-tool

is really impresive too, and had a lot of features and it is programmed in javascript , but i don’t know why I prefer the first one :P, maybe because it looks nicer.

So that’s all so far.

miércoles, 3 de septiembre de 2008

Google Chrome – just another browser? Or "the" one?

chrome
Well, I must admit, it’s still a young project but it looks really nice. The project was keep in secret for more than one year. I cannot wait to try it, so I downloaded it and installed it. It’s a minimalist browser, it has tabs, and a clean UI.
It seems that it is based on Mozilla and Webkit, and it’s really fast when it comes to javascript performance, it is really fast.
They have created an entirely new browser from the scratch. Why? Well they have collected an entire set of reasons into this clear and funny comic style “googlebook”: http://www.google.com/googlebooks/chrome/
What’s new with this browser?
  1. It’s free, open source
  2. It has support for standards.
  3. It’s designed for the today’s demanding web applications
  4. It has a faster Javascript VM (Yes! a Virtual Machine, so it compiles Javascript instead of just interpret it!!, impressive). Developed by the V8 Team
  5. It provides each tab with his own isolated environment called the Sandbox, so the risk from attacks and from malware on the web are minimized (not completed eliminated, that’s really hard to accomplish even for google!!)
  6. Improved Garbage Collection. (No more memory leaks like in IE?, well, I have to test it!!!)
  7. Nice UI, simple and consistent.
  8. A simpler popup blocker.
  9. It has Google Gears included.
So what’s bad with this browser?
1. I can’t find easily my favorites. (well to be honest, my friend Paolo didn’t find them)
2. They say that each tab runs on an entirely separated process, so, having 10 tabs open, we have then 10 process with all the memory and the resources they need to be opened. Mmm, they claim that his memory management does a great job, and can cope with the challenge… but, let’s try it and look what happens.
3. It has a kind of firebug addon integrated, but, It’s not dockable like the firebug plugin for Mozilla, so it’s a little bit hard to work with it.
So, to resume all in just one sentence…
Google Chrome is not only a Web Browser. It’s an application platform to run Web Applications.
Nice, isn’t it? Well, IMHO, the competence is good for the Web and for us.

martes, 24 de junio de 2008

REST

Representational State Transfer

Roy Fielding's explanation of the meaning of Representational State Transfer

"Representational State Transfer is intended to evoke an image of how a well-designed Web application behaves: a network of web pages (a virtual state-machine), where the user progresses through an application by selecting links (state transitions), resulting in the next page (representing the next state of the application) being transferred to the user and rendered for their use"


Basicamente REpresentational State Transfer que podría ser traducido como Transferencia del Estado de Representación, es un estilo de arquitectura, que pretende aprovechar los factores que han hecho que la WWW sea tan exitosa.

La Web puede verse como una serie de recursos, los cuales contienen información directamente consumible y/o enlaces a otros recursos, cada vez que un recurso es pedido al servidor se está accediendo a un Representación del mismo, y esta representación pone a la aplicación cliente en un estado. Por ejemplo, al pedir la página http://fooserver/products/ (la dirección no existe, es solo de ejemplo) estamos accediendo a un recurso que nos muestra un listado de productos y coloca a la aplicación en el estado A, y si al hacer click sobre el link del producto accedemos a su descripción estaríamos siendo transferidos hacia otro Recurso y por tanto cambiando de estado digamos a un estado B. de allí el nombre de REpresentational State Transfer.

En realidad el concepto no es algo totalmente nuevo, se basa en la idea de cada recurso debe poder ser:

  • Único
  • Accesible
  • Humanamente Legible
  • Independiente del Estado, o agnostico de los Estados Anteriores
  • Bookmarkable
  • Usar sustantivos en los recursos en lugar de verbos. por ejemplo ...products/parts/0012, en lugar de ...products/getPart?Id=0012

Hemos venido usando RESTful Services todo el tiempo, pues es la forma inherente en que funciona la web misma.

Habrá que seguir investignado acerca de REST

sábado, 21 de junio de 2008

Zend Framework + Smarty vs Simple Zend View Script

Smarty

Descripción

Smarty es un Template Engine, o más propiamente un Template Framework. Sus características van más allá del simple reemplazo de variables o reemplazo de tags. Su principal característica es que las plantillas (Templates) solo son leídas e interpretadas una sola vez, como resultado de esta lectura se crea un archivo con código PHP el cual es ejecutado durante los subsiguientes pedidos de las plantillas. Esta característica es conocida como Template Compiling.

Beneficios

  • Es rápido, (ellos ponen en este acápite, EXTREMADAMENTE RÁPIDO).
  • Es eficiente dado que las plantillas se compilan a código PHP, reduciendo el overhead después del primer pedido de la plantilla.
  • Las plantillas se recompilan solo si es que estas han sido modificadas
  • Se puede configurar a gusto, desde los delimitadores, hasta las funciones y modificadores de variables, haciendo que su lenguaje sea realmente extensible.
  • Las estructuras de control (Sections, if, etc) pueden estar anidadas y ser tan complejas como se requiera.
  • Se puede incluir código PHP directamente en la plantilla, pero NO ES RECOMENDADO, dado que va en contra del espíritu de la plantilla.
  • Soporte de Cache integrado. Es decir que se guarda el resultado de la ejecución de una plantilla para un request dado, si otro request con los mismos parámetros es hecho luego se devolverá la página que se tiene en Cache. Puede manipularse que secciones de la plantilla no deben guardarse en Cache.
  • Se puede modificar la función de manejo de Cache (Cache Handler Function) por ejemplo para utilizar una base de datos como proveedor de Cache en lugar del Filesystem.
  • Es extensible a través de su arquitectura de Plugins

Desventajas

  • Programar las Plantillas (Templates) (o Diseñarlos) requiere que la persona encargada (usualmente el diseñador) aprenda un lenguaje de tags y expresiones que pueden serle igual de complejos que aprender la sintaxis del mismo PHP.
  • Sin el uso del Cache de Smarty, el rendimiento decae considerablemente. Y aún cuando se use el Cache, la lectura de un template durante un request es una operación costosa (por el acceso al sistema de archivos) lectura que al parecer siempre se hace, para verificar si el archivo de plantilla ha cambiado y por tanto necesita ser recompilado.
  • Aun cuando se separa claramente la lógica de la Vista de la lógica de Negocio los editores de HTML (como el dreamweaver) no siempre hacen un buen trabajo interpretando los tags del Template System. (aunque hay algunas extensiones para el caso del dreamweaver para que soporte Smarty).

 

View Script (Zend View Default)

Descripción

Zend utiliza por defecto para las vistas los View Scripts, que no son otra cosa más que archivos php (con toda la sintaxis del mismo php) que se ejecutan dentro del scope de la instancia de la vista que lo ha llamado (Zend_View instance) por tanto todas las referencias a $this dentro del archivo de scripts hacen referencia a las variables asignadas a la instancia de la vista. Por ejemplo si en el controller tenemos

$ZendView->Something = ‘here is something’ 

En el View Script se accesa a la variable de esta forma

$this->Something 

Beneficios

  • PHP es por si mismo un Template Engine, los View Script están escritos en PHP, por lo que no sería necesario un Template Engine encima de él.
  • Mayor velocidad en la ejecución de los View Scripts, (Son ya código PHP, por lo que no necesitan ser compilados)
  • No se necesita aprender un nuevo lenguaje, si se sabe PHP se sabe programar View Scripts
  • Se tiene acceso a todo y se puede ejecutar todo tipo de código dentro del View Script pues es un archivo .php común. No se depende solo de las funciones que un Template Engine provee o de los plugins que existan para el mismo.

Desventajas

  • El código php puede no ser tan claro como los tags usados dentro de una plantilla
    • Por ejemplo

SMARTY

<body>	<div>{$variable}</div></body>

VIEW SCRIPT

<body>	<div><? $this->variable ?></div></body>
  • Un diseñador común no suele tener conocimientos de PHP y puede parecerle más fácil aprender el lenguaje de los Templates Engines que un lenguaje como PHP.
  • No tiene estructuras de control ni plugins, por lo que hay que escribir bloques de código php para manejar los loops y la generación automática de html.

 

Conclusión

La elección de Smarty como Template Engine para manejar las vistas dentro del Zend Framework, pasará por la evaluación de ítems como:

  • Experiencia de la gente involucrada en el proyecto
  • Necesidad de tiempo de respuesta de la aplicación (Siempre y cuando el tema del tiempo de respuesta sea algo realmente vital) ver enlance: http://template-bench.iliakantor.ru/. De hecho al ser simplemente archivos PHP los View Script tienen la ventaja. Pues integrar Smarty al Zend Framework involucra un overhead que podría evitarse si se utiliza solamente los View Scripts. Aún cuando este overhead podría ser asumible teniendo en cuenta que Smarty provee un diseño de la Vista “más Limpio”.
  • Experiencia de los diseñadores web involucrados en el proyecto.

En particular me inclinaría por recomendar el uso de Smarty, por ser un Template Framework bastante extendido y bastante fiable y que al parecer no representaría mayores inconvenientes integrarlo con el Zend Framework.

La integración podría realizarse de varias formas. Una de las cuales está incluso documentada en la misma página de Referencia del Zend Framework.

Otras implementaciones incluyen la construcción de una clase Factory que permita intercambiar fácilmente entre plantillas de Smarty y View Scripts de Zend, e integrarla haciendo uso de las clases utilitarias del Zend framework.

Fuentes

Vínculos Web

miércoles, 21 de mayo de 2008

jueves, 10 de abril de 2008

xPopUp Control Usando el YUI y compatible con ASP.NET Ajax

Descargar el ejemplo

A las pocas semanas de haber iniciado mi vida laboral, durante el desarrollo de RGen, me encontré frente a un problema que sería recurrente en la mayoría de desarrollos de aplicaciones web a partir de ese momento. El problema de las ventanas PopUp Modales en el Web.

El principal problema es que no hay una manera uniforme de abrir ventanas modales que se comporten igual a través de los diferentes browsers, para el mundo del Internet Explorer existe la posibilidad de abrir ventanas modales haciendo uso del ShowModalDialog, pero este método no funciona en los demás Navegadores. La primera ventana PopUp Modal realmente útil y Cross-Browser que hallé fue la de Submodal, muy buena, pero carecía de las funciones básicas de una ventana, como poder moverla haciendo uso de la barra y otras cosas. Luego escribí una ventana PopUp Modal (xPopUp) basada en las librerías del sitio Cross-Browser y su famosa librería X, (de allí la "x" en xPopUp). Nuevamente era útil pero tenía muchas desventajas, todavía requería que el desarrollador escribiese las líneas de código javascript necesarias para levantar la ventana, lo cual me parecía una sería desventaja (xPopUp basada en Libreria X). Al tiempo que empecé a usar YUI, descubrí que sus Containers y Panels ofrecían un mejor desempeño (y un código más limpio), por lo cual me decidí a escribir una ventana PopUp haciendo uso del YUI, la llamé igual xPopUp, y lo que es mejor la convertí en un Web User Control de .Net, (sé que podría haberlo hecho un Web Control, pero me pareció suficiente para el contexto del proyecto en el que trabajaba que fuera un User Control).

El control funcionó bien, y permite arrastrar un componente al diseñador y setear sus propiedades para levantar la ventana PopUp requerida, la cual puede o no ser modal, además de poder pasarle eventos que se disparan antes y después de mostrar la ventana y poder definir su tamaño, además de poder especificar el elemento que disparará el lanzamiento de la ventana PopUp, por cierto todavía es posible levantar la ventana PopUp directamente por código Javascript.

He preparado un archivo con todo lo necesario para poder levantar un sitio web de ejemplo que contiene al xPopUp Control el archivo lo pueden descargar de aquí.

Aquí se ve el control funcionando en el sitio de prueba tal como se ve en Internet Explorer y en Mozilla Firefox.

Mozilla Firefox Internet Explorer
image image

COMO USARLO

Al Arrastrar el componente al diseñador se verá un tag similar a este:

<uc1:ucPopUpControl 

     ID="UcPopUpControl4" 

     OnShowingScript="f_show" 

     OnHidingScript="f_hide"     

     UrlToLoad="ThePopUp.aspx?Id=32"      

     IsModal="false"      

     WindowTitle="Con Eventos!!!"      

     FixedToCenter="false"     

     TriggerId="ct00_Button1"

     runat="server"

      />

  • ID: El ucPopUpControl Id
  • OnShowingScript: La función Javascript que se ejecuta antes que se muestre la ventana popup.
  • OnHidingScript: La función Javascript que se ejecuta después que la ventana es cerrada.
  • UrlToLoad: La pagina Aspx o cualquier otra URL a cargar
  • IsModal: Flag para decirle al control que muestre la ventana en forma modal
  • WindowTitle: El título que tendrá la barra de la ventana popup
  • FixedToCenter: Si la vetana debe reacomodarse al centro del área cliente del Browser.
  • TriggerId: El ClientID (si lo sé esto debe poder mejorarse!!!!! debería ser el Id del control y el control internamente debería poder ubicar el ClientID del control)

Nota Aparte:

La verdad todavía no sé si es buena idea mezclar ambas librerías, me refiero a las del YUI (developer.yahoo.com/yui) y las del ASP.NET Ajax, básicamente porque hay muchos métodos que se definen 2 veces, como el $addHandler (creo que se llaman así) y el addEvent del YUI, ambos por ejemplo hacen lo mismo y podrían ser utilizados indistintamente. En fin es un tema que tendré que revisar en algún momento.

miércoles, 9 de abril de 2008

IE7 / IE8 a compliant browser???

bueno este post será solo temporal, hasta q lo pueda arreglar, es más que nada un recordatorio, hoy encontré que Dean Edwards había escrito una libreria javacript que hace que el IE se comporte como un "Compliant Browser", el enlace lo dejo aquí IE7 Compliant Patch for Microsoft Browsers

Saludos

martes, 8 de abril de 2008

Lista de Herramientas, Librerías y/o Utilitarios Básicos

Cuando empecé a trabajar con el Visual Studio me di cuenta que el IDE tenía muchas posibilidades y que además brindaba mucha ayuda para la escritura de código, pero pronto me di cuenta que las tareas que me encontraba realizando eran tediosamente repetitivas, tareas como escribir stored procedures CRUD para cada una de las tablas de los sistemas que estabamos desarrollando, (Sí inicialmente no hacíamos mayor análisis de clases y esas cosas, basamos nuestro trabajo en mapear directamente las tablas de la base de datos a TableAdapters, lo cual no es quizá lo recomendado, pero la mayoría de los ejemplos hayados en Internet "enseñaban eso"). Tareas como estas eran un dolor de cabeza y personalmente eran muy aburridas, no aguanté mucho antes de darme cuenta que tenía que haber una mejor manera de hacer esas cosas.

Así es como empecé a investigar y empecé a preguntar a otros amigos sobre la existencia de plugins o utilitarios que valiese la pena revisar. Resultado de estas investigaciones, empecé a construir esta lista.

  1. Plugins para SQL Server 2000 - 2005. Las herramientas de Red Gate son simplemente indispensables para poder desarrollar querys, con todo lo bueno que pueda ser el Sql Server Manager Studio o el Query Analizer, poder utilizar el autocompletado al momento de realizar un query y además de obtener Intellisense durante la escritura de un query se ha vuelto para mi algo simplemente indispensable. Y tener un código un query bien "formateado" también ayuda mucho a la lectura de los queries. En este sentido para el autocompletado voy a recomendar: el SQL Prompt y para el formateado el SQL Refactor. (en la Página de Red Gate se pueden obtener versiones de prueba, de estas herramientas así como de muchas otras que la misma empresa ofrece, como el SQL Compare y el SQL Data Compare, que en verdad merecerían un post completo cada una de ellas y que también son tan buenas como las dos primeras y muy útiles, pero no son necesarias tan frecuentemente como las otras dos).
  2. Para Trabajar con otras bases de datos, como MySQL. En un proyecto de mi actual empresa tuve que utilizar por primera vez Nhibernate (No volvería a dejar de usarlo :P) y además tuve que utilizar MySQL, extrañaba horrores el SQL Query Analyzer que tenía al usar el SQL Server, por eso me puse a buscar una herrmienta similar y gracias a Dios (y a San Google) encontré al SQL Manager for MySQL poderosa herramienta que incluye todo lo que puede tener el SQL Server Managment Studio (bueno quizá no todo, pero al menos todo lo útil) e incluso tiene el autocompletado muy bueno similar al que brinda el SQL Prompt para el SQL Server Managment Studio.
  3. Manejar correctamente el CSS, y verificar que tus sitios web se vean bien en los distintos navegadores. Bueno quizá es un poco exagerado, todavía mucha gente utiliza las tablas para maquetar los sitios web, aún cuando esto es bastante discutible, todo hace indicar que el CSS es el camino correcto a la hora de maquetar un sitio web. Los Layouts basados en puro CSS no son tan difíciles de hallar y hay buenos recursos ya (www.csszengarden.com por ejemplo), las herramientas del YAHOO UI para CSS, los archivos css reset, fonts, base y grids que vienen incluidos con el YUI alivian muchísimo a la hora de desarrollar un sitio web que se comporte bien en varios navegadores. Para el Visual Studio 2005 es muy necesario el CSS Properties Window (que ya viene incluido en la Version 2008 del IDE, o al menos una herramienta muy similar). Y Pues bueno aunque no es completamente necesario para un desarrollador conocer de diseño web, el Dreamweaver es quizá la mejor herramienta para realizar diseño web en el mercado.
  4. NHibernate. Al empezar con NHibernate me di cuenta muy rápido que escribir los mapeos y las clases además de las tablas de la base datos era una tarea simplemente titánica (que exagerado :P) y muy aburrida, lo cierto es que me pareció muy tedioso hacerlo a mano. Sabía de la existencia de generadores de mapeo de las clases para Hibernate, pero no conocía como generar las clases en .Net, quizá utilizando MyGeneration (si es posible pero me pareció muy complicado). Nuevamente me negaba a creer que nadie hubiese escrito un buen plugin para hacerlo desde el Visual Studio, y no estaba equivocado, encontré en Google el Nhibernate Addin para el Visual Studio 2005. Lo recomiendo infiere las relaciones y hace los mapeos bastante bien. Pero es importante notar que hace un mapeo de las tablas a clases, cada tabla a una clase, lo cual desde un punto de vista purista no es lo mejor ni lo más recomendado pero que ayuda a hacer las cosas más rápido ayuda.

To be continued...

lunes, 7 de abril de 2008

Ideas de un proyecto para un Framework Web

Actualmente me encuentro desarrollando proyectos en .Net, como saben (y si no lo saben ahora lo sabrán) soy Ingeniero Informático (está bien, todavía soy Bachiller, porque me estoy demorando en sacar el título por la bendita tesis que no logro terminar).

Al empezar a desarrollar tuve muchos problemas, pues empecé a trabajar y no había mucho de donde aprender, las primeras experiencias con el Framework de .Net fueron sinceramente traumáticas, a pesar de haber empezado mi vida laboral usando .Net 2.0 y el IDE del Visual Studio 2005, (el cual durante un buen tiempo lo he considerado el mejor IDE del mercado, solo posiblemente opacado por el Visual Studio 2008 el cual todavía no es tan difundido como el del 2005); El no conocer patrones y no tener muchas ideas de buenas prácticas terminaron por jugarnos sucio al inicio. Después de un año de trabajo sin embargo habíamos aprendido ya usar muy bien los componentes y herramientas que el Visual Studio 2005 provee...
Aprendimos a usar los TableAdapters, aprendimos a usar los Componentes orientados a Datos del .Net 2.0 como los FormViews, GridViews, Object Data Sources y otros...

Pero como no tuvimos mayor orientación nuestros primeros proyectos Web fueron algo desordenados. Después de un año volví a ver el código que hicimos para nuestro primero proyecto Web y me di cuenta que el tiempo no pasa en vano. Siento que he aprendido mucho desde aquel primer proyecto web que hice. Lo único que sin embargo me hace sentir satisfecho de ese sistema es que aún funciona!!!!, y sigue ayudando a la empresa para la que fue desarrollado.

Al tiempo pasé a otra empresa (en la que actualemente estoy) y me sugirieron (obligaron) a que aprendiera a usar NHibernate, me pusieron a cargo de un proyecto Web interno de la empresa el cual desarrollé con algo más de calma y allí pude plasmar las primeras ideas de lo que podría ser un framework util para desarrollar aplicaciones web con algo más de rapidez, teniendo un código más limpio y tratando (digo tratando porque nunca uno puede ser del todo purista, por practicidad) de seguir ciertos patrones y estándares en el desarrollo web.

Todo Buen Framework debería poder brindarle a un desarrollador lo siguiente al menos:

  1. Una buena arquitectura de desarrollo. Una separación por capas es más que indispensable, teniendo una capa de acceso a datos, una capa de lógica de negocios y una capa de presentación, además de proveer los utilitarios básicos, para las tareas más comunes. El .Net 2.0 usa el Provider Pattern en la mayoría de sus Módulos y/o Servicios que interactuan con el acceso a datos y otras APIs, tenemos por ejemplo los servicios de Membership, Role, Profile, Session State y algunos más. Basándose en esa arquitectura Davide Icardi, (www.devage.com) ha desarrollado un buen cms framework, Eucalypto, el cual es una librería de servidor que ayuda a escribir content management web sites en ASP.NET, además es OPEN SOURCE, y brinda ya un buen grupo de características muy útiles cuando se inicia el desarrollo de un sitio web. El código implementado por Davide es muy bueno y sobre el se basa mi actual trabajo, he modificado parte de su código para que se ajuste a las necesidades particulares de mi framework.
  2. Un buen framework básico para desarrollar código en Javascript. Aún cuando la tendencia actual es a escribir una menor cantidad de código Javascript en los sitios web, es siempre indispensable tener la posibilidad de hacerlo, y hacerlo bien. En este caso empecé a usar inicialmente la libreria X (www.cross-browser.com) por su simplicidad. Posteriormente basé mis librerías propias en el YUI (developer.yahoo.com/yui). Todavía mis librerías básicas se basan casi al 98% en el YUI, un 2% se basan en el ASP.Net Ajax client libraries. La verdad todavía no he podido revisar si mezclar ambas librerías impacta en el performance del sitio web, pues ambas básicamente traen lo mismos métodos y herramientas. Más adelante desarrollaré un poco más en extenso el tema de las librerias Javascript y todo lo que he escrito basandome en las librerias YUI.
  3. Buenas plantillas para el desarrollo de los layouts del sitio web basándose en al menos un 90% en puro CSS, dejando un 10% para el tema de los formularios (donde es más que indispensable por practicidad usar tablas para formatear los formularios) Buenos lugares para empezar en el tema del CSS son www.csszengarden.com, www.brunildo.org/test/ y blog.html.it/layoutgala/ la verdad este último enlace resultó ser muy bueno, e ingenioso, sobre todo porque demuestra la versatilidad del CSS.
  4. Ayudar a Escribir la menor cantidad de código posible. Esto no es necesariamente cierto siempre, en realidad debería poder acelerar la escritura de código al menos en un 80% de los casos, (haciendo alusión tácitamente a la regla del 80-20).
  5. Ser extensible. O al menos no limitar al desarrollador ni forzarlo a trabajar de una manera ajena a la que el desarrollador suele estar acostumbrado, (nuevamente al menos en un 80% de las veces). Las convenciones son siempre buenas, y en el caso del presente framework se han hecho un buen conjunto de convenciones. por ejemplo: Todas las tablas contienen campos de auditoria, los nombres de las tablas son siempre en singular y con la primera letra en mayúsculas, se usa un prefijo para nombrar a las tablas, y algunas más que detallaré a mayor profundidad conforme empiece a publicar posts.

Por lo pronto este Post me servirá de suerte de "roadmap", para poder empezar el desarrollo de mi Tema de Tesis para optar por el grado de Ingeniero y poder decir al fin... "Soy Ingeniero" aunque el título solo me sirva en Perú. Igual será una muy buena experiencia.

Mi tema de tesis... ha empezado

martes, 12 de febrero de 2008

First Time

Lo recuerdo claramente, la visión es aún cada vez más clara cada vez que la recuerdo, más obsesiva. La noche había caído rapidamente y los dos, buenos amigos, amigos con privilegios, amigos cariñosos, o como quieran llamarnos, nos quedamos solos. Peligrosa soledad que invita a pensamientos maliciosos (exquisitamente maliciosos). Habían pasado 5 minutos q la ultima persona abandonó la habitación y se fueron a sus habitaciones. Ahora solos los dos...mi pensamiento ardía, y ya era inevitable, me acerqué con cuidado, no quería hacer movimientos en falso, tenia que tener la certeza de q todo saldría bien...