Falta de conocimiento en el mundo del desarrollo

Esto es una reflexión que hago sobre el mundo del desarrollo. Lo que voy a comentar aquí no lo generalizo, pero si que es algo que está presente.


Os contaré la historia y luego os doy mi opinión… Ultimamente he publicado bastantes post sobre Asp.Net y Atlas, además de ser el tema central de mi blog, son debidos que un amigo me lleva haciendo consultas sobre Asp.Net  (no se lo estoy reprochando, ya que me gusta que me den temas para escribir en el blog), el caso es el siguiente, esta desarrollando una aplicación web y actualmente está desarrollando la seguridad y la personalización de la página (de ahi las publicaciones sobre el Profile y los Themes), él ha copiado las tablas de Asp.Net en su propia base de datos, y al proveedor del MemberShip le ha incluído como cadena de conexión su propia base de datos.


Hasta aquí todo bien, pero el no sabe que Asp.Net 2.0 se basa en los proveedores, de tal forma que para el MemberShip, el Profile y los Roles hay proveedores diferentes. Así que, el leyo mi post sobre donde se guardaban el Profile y se fue a su base de datos y esa carpeta estaba vacía.


¿A qué se debe esto?


Pues se debe a que no ha configurado el proveedor del Profile por lo que se guarda en la base de datos por defecto, la de Asp.Net. Le dije que mirase la de Asp.Net y efectivamente tenía las propiedades de su aplicación.


Aprovecho este post para quejarme de 2 cosas, la primera es la falta de una herramienta para la configuración de los proveedores, me refiero a una ampliación de la de adminitración de sitio, ya que no contempla la configuración de un proveedor, como por ejemplo del MemberShip que tipo de contraseñas tiene, que complejidad, que acciones están habilitadas, etc. Y la segunda es un error del Web.Config que comentaban hace poco por aquí, en geeks.ms, que se trata de que el Visual Web Developer no importa el schema del Web.Config por lo que no funciona el Intellisense, os recuerdo que eso se puede corregir quitando la importación del schema, el problema es que cada vez que modificamos el Web.Config con la herramienta de Asp.Net se vuelve a importar.


Ahora sigamos con el hilo principal, y llego a lo que creo que es más importante. ¿Cómo alguien que está desarrollando con Asp.Net no tiene los conomientos de ello? Y no estoy hablando de cosas avanzadas, sino de las novedades más importantes de esta última versión.


Pero no creo que la culpa la tenga él, ya que si tenía los conocimientos de Asp.Net 1.x y ahora le han mandado trabajar con la 2.0 normal que no tenga conocimiento de los cambios. 


Y esto me recuerda al lanzamiento aquí, en Galicia de Visual Studio 2005, aunque me imagino que en el resto de España habrá sido igual, los ponentes de Microsoft y los que no eran de Microsoft (como Álvaro Rodríguez de Softgal y José Manuel Alarcón MVP de Asp/Asp.Net de Krasis) estuvieron todo el evento recordandonos que los más importante es el capacitación del desrrollador.


Creo, sinceramente, que si a un empleado lo pones a trabajar con una nueva versión le debes dar los conocimientos necesarios, ya que si han sacado una nueva versión es porque tendrá cambios (esto entra en conflicto con el tema de WinFX y .NET 3.0… pero  ya sabéis mi opinión) importantes, y os recuerdo que empresas como Plain Concepts y Campus MVP, tienen entre sus servicios cursos presenciales para empresas.


Y os recuerdo que un desarrollador bien capacitado es más productivo y eficiente.


Recuerdo lo que he dicho anteriormente, esto no lo generalizo y es una opinión.


En próximos post seguiré con temas de los proveedores y las novedades de Asp.Net 2.0…

Más sobre el Profile

Siguiendo el tema del post anterior, el profile o, si preferís el termino en español, el perfil, vamos a ver donde se guardan las propiedades del usuario.


Lo primero que haremos será abrir la base de datos de Asp.Net. La podemos abrir en el explorador de servidores como muestro en la figura 1.


Profile - Figura 1
Figura 1 – La base de datos de Asp.Net


La tabla que nos interesa para nuestro ejemplo es aspnet_Profile, en la figura 2 os muestro cual es.


Profile - Figura 2
Figura 2 – La tabla en la que se guardan los perfiles


En este ejemplo vamos a ver como se guardan los datos, por lo que vamos a ver los datos de la tabla. Para ello haremos click dereco sobre la tabla , como se indica en la figura 3.


Profile - Figura 3
Figura 3 – Click derecho sobre la tabla


Y seleccionamos Mostrar datos de tabla, como se muestra en la figura 4.


Profile - Figura 4
Figura 3 – Mostrar datos de tabla


Por último, se abrirá una venta que contiene los datos de la tabla, podéis ver los datos en la figura 5.


Profile - Figura 5
Figura 5 – Los datos de la tabla


Com podéis observar la tabla contiene 5 campos:



  • UserId: Es el id único del usuario

  • PropertyNames: Es el nombre de la propiedad

  • PropertyValues: Es el valor de la propiedad

  • PropertyValuesBinary: Es el valor de la propiedad en binario

  • LasUpdateDate: Es la última fecha de publicación

Espero que os sea útil 😉

Páginas personalizadas

Hoy me preguntaban como tener páginas personalizadas para cada usuario, y la verdad si usáis el MemberShip de Asp.Net es algo muy sencillo. Os explico lo que debéis hacer.


Para empezar debéis tener creados diferentes Themes, lo que vamos a hacer es guardar en el profile (perfil) del usuario que theme tiene escogido y hacer la siguiente configuración en el Web.Config:







1
2
3
4
5
6
      <!—En el Web.Config, dentro de System.Web–>
<profile>
<properties>
<add name=”Theme” type=”String” allowAnonymous=”true”/>
</properties>
</profile>

Web.Config


Ahora vamos a ver como guardar esa configuración el perfil. Os recuerdo que es necesario que el usuario haya iniciado sesión, si a que usuario se lo vamos a guardar¿?.


Para guardarlo debemos usar el siguiente código:







1
2
3
        ‘Editar perfil, es necesario tener iniciada la sesión
Profile.SetPropertyValue(“Theme”, “Nombre del theme”)
Profile.Save()

Guardar el perfil


Ahora lo que nos queda es obtener esa propiedad del perfil y usarla en la página, aviso muy importante, las selecciones de themes se deben hacer en el evento PreInit, ya que una vez que la página sea renderizada no se podrá cambiar el aspecto total de la página:







1
2
        ‘Cambiar theme, en el evento PreInit, es necesario tener iniciada la sesión
Me.Theme = Profile.Item(“Theme”)

Código del evento PreInit


Espero que os sea útil y si necesitáis ayuda con temas, membership, etc… bueno cualquier tema de asp.net, no dudéis en mandarme un email y yo os ayudo.


 

Excepciones en Atlas

Hoy estaba preparando unas demos para enseñaros el funcionamiento de atlas, bueno en realidad estaba haciendo las demos que se enseñan en los videos que Fran nos enseño sobre Atlas (los del MSDN Media Center), cuando me encontré con la siguiente pantalla:

Excepciones en Atlas

 


Lo de menos es el error en si, aunque la verdad aun no lo conseguí resolver, luego os lo cuento para ver si me podéis ayudar…, la curiosidad es la forma en la que se mostro la excepción, no se generó la típica pantalla de excepción de Asp.Net sino que se genero el error encima de la página y la página se seguía ejecutando, menos en el momento donde salía la excepción… lógico.


Ya sabéis… con Atlas hasta las excepciones se generan al más puro estilo Atlas!!!


Ahora fuera de bromas, debemos tener cuidado con esa característica debido a que un mal funcionamiento de la página puede poner en peligro la aplicación.


Si queréis ayudarme con mi error, estaba configurando para que Atlas guarde valores en el profile del usuario, y tenía que configurar el siguiente código:







1
2
3
<microsoft.web>
<profileService enabled=”true” setProperties=”Position” getProperties=”Position” />
</microsoft.web>


Y en tiempo de compilación me decia que microsoft.web no era un espacio reconocido… la verdad en el video de MSDN Media Center viene así… como me daba error eliminé ese fragmento de código y claro luego Atlas no funcionaba… algo no configurado no puede funcionar.

De vuelta al pasado… WinFX o .NET 3.0?

La noticia nos la contaba ayer el Guille, Una petición para que no cambien el nombre de WinFX a .NET 3.0, así que no os la voy a volver a contar, lo que si voy a contar desde mi punto de vista cuales son los errores de la decisión de Microsoft.

Hace un tiempo (en concreto dos meses y 16 días), Somasegar, en su blog, nos informaba del cambio de nombre de los WinFX Components a .NET Framework 3.0. El cambio quedaba como en el siguiente gráfico nos mostraba:

En ese gráfico veíamos que solamente cambiaba el nombre.

Aquí empezó toda la polémica, se comento mucho el cambio de versión. Ya que al mismo tiempo nos informaban de una nueva versión de esta plataforma, la 3.5 que incluía LINQ.

De tal forma que las versiónes nos quedaban de esta forma:

.NET 3.0 = CLR 2.0 + WinFX Components

.NET 3.5 = CLR 2.0 + WinFX Components + LINQ

Y hasta la versión 4.0 no tendríamos nuevas versiones de los lenguajes (lo que serían el VB 10 y C# 3)

Como nos comentó Guillermo en la noticia citada una comunidad de programadores han creado una petición para que Microsoft cambie el nombre de nuevo, podéis leer las razones en la página de la petición. Hasta el día de hoy tienen 480 firmas.

Hasta aquí los hechos reales.

Debido a que Microsoft quiere instalar los WinFX Components con el Framework y que el CLR sigue siendo el 2.0 al .NET 2.0 + WinFX le llamaría .NET 2.1, ahora si le añadimos LINQ pasaría a ser o la 2.2 o la 2.5 (ya que junto con el se publica el Visual Studio “Orcas”) y el siguiente con las nuevas versiones de los lenguajes el .NET 3.0, si no quedo claro quedaría de la siguiente forma:

.NET 2.1 = CLR 2.0 + WinFX

.NET 2.5 = .NET 2.1 + LINQ

.NET 3.0 = ¿¿¿???

Según mi punto de vista, el cambio de WinFX a .NET es un cambio correcto, lo que no veo tan bien es como han puesto las versiones. Otra cosa que no he leído sobre ello, pero que también haría es incluír Atlas a partir de .NET 2.1:

.NET 2.1 = CLR 2.0 + WinFX + Atlas

La verdad sobre eso no se si lo harán, si lo tienen pensado o algo, pero yo lo haría.

Otra cosa que yo haría es esperar a que LINQ este terminado y pasar directamente a la 2.5, pero dado el próximo lanzamiento de Windows Vista, creo que Microsoft debe publicar el WinFX ya se llame de una forma u otra.

En resumen, esta decisión de Microsoft ha traído mucha polémica, y con razón, espero vuestros comentarios.

Cambiar el copiado automático de las bds en el VS 2005

 

Hoy Emilio Verladiez me comentaba que no sabía que al depurar una aplicación la base de datos se copiaba en Bin/Debug, de paso se quejo de la falta de información sobre el tema en la documentación de Visual Studio, el problema es el siguiente.

Si tú en una depuración generas datos para probarlo en la próxima depuración esos datos se borran, de tal forma que tienes que volver a generarlos para poder depurar lo que acabas de modificar. En si no es un problema, pero si una perdida de tiempo.

Para cambiar este comportamiento seguid los siguientes pasos:

Selecciona la base de datos en el explorador de soluciones:

Ahora fijaros en las propiedades de la base de datos:

Como veréis al depurar y generar la aplicación copiará siempre la base de datos, para cambiar este comportamiento debéis cambiar la propiedad Copiar en el directorio de resultados a Copiar si es posterior:

Ahora solo se copiará hemos hecho modificaciones en nuestro archivo.

Como siempre, espero que os sea útil 😉

Documentación sobre Atlas


Debido al interés generado por Atlas y AJAX, voy a mantener está página donde se encuentre toda la documentación de Atlas y AJAX (desde el punto de vista de .NET)





Documentación en español:


Teoría:



Instalación y configuración:



Artículos:



Videos:



Libros:



  • Hasta el momento no existe ningún libro en español sobre Atlas

Documentación en inglés:


Instalación y configuración:



Videos:



Libros:



  • Programing Atlas – Christian Wenz – ISBN: 0596526725
  • Foundations of Atlas: Rapid Ajax Development with ASP.NET 2.0 – Laurence Moroney – ISBN: 1590596471
  • Introducing Microsoft Code Name Atlas for AJAX Development – Dino Esposito – ISBN: 0735623457 (DISPONIBLE A PARTIR DEL 26 DE NOVIEMBRE DEL 2006)
  • Pro Ajax and the .NET 2.0 Platform – Daniel Woolston – ISBN: 1590596706
  • Beginning Ajax with ASP.NET – Wallace B. McClure, Scott Cate, Paul Glavich, Craig Shoemaker – ISBN: 047178544X

Componentes Ajax



Alternativas a Atlas:


Ajax.NET Professional



MagicAjax.NET: The Magic Ajax Engine for .NET



Documentación fuera de .NET


¿Qué son AJAX y Atlas?

A estas alturas de la película parece que esta pregunta sobra, pero la gran confusión con la que me he encontrado hace que me encuentre con muchas dudas… Después de que varias personas me hagan la misma pregunta (ver más abajo la pregunta) y tras hablarlo con Bruno, he quedado un poco confundido sobre el tema. Ambos conceptos son de estos conceptos que sabes lo que son, pero no en que se diferencian, y no me refiero a diferencias técnicas (de tipo, ¿Cuál funciona mejor?, ¿Qué ventajas tiene cada una?, etc.) ya que son conceptos diferentes que debemos diferenciar, de echo la pregunta en cuestión, la que me han hecho numerosas veces, es:


¿Qué es mejor AJAX o Atlas?


Pues… La verdad, si os soy sincero, quien haga esa pregunta es que aun no sabe qué es AJAX y qué es Atlas.


Para empezar con esta reflexión (últimamente ando muy filosófico…), voy a contaros cuales eran los conceptos que tenía “claros”.


AJAX: Es el acrónimo de Asynchronous JavaScript And XML, se trata de una metodología de desarrollo web que engloba a los estándares publicados, consiguiendo así una UI con un mejor rendimiento, eliminando los Postbacks y actualizando parcialmente la aplicación.


Atlas: Es la tecnología de Microsoft que implementa la metodología AJAX de desarrollo Web en ASP.NET. Gracias a esta tecnología la actualización de la página y los datos son gestionados por un framework que hace que esto sea transparente para el usuario y el programador.


Cuando le dije esto a Bruno, el me dijo que él lo creía al revés:


AJAX: Es tecnología debido a que es la agrupación de las tecnologías.


Atlas: Es un método de implementar AJAX en nuestras aplicaciones.


Llegados aquí pongo en duda todo mi pensamiento anterior porque Bruno tiene razón según su punto de vista.


En este momento es en el que decido consultar Wikipedia y la definición que encuentro es la siguiente:


“AJAX, acrónimo de Asynchronous JavaScript And XML (JavaScript y XML asíncronos), es una técnica de desarrollo web para crear aplicaciones interactivas. Éstas se ejecutan en el cliente, es decir, en el navegador del usuario, y mantiene comunicación asíncrona con el servidor en segundo plano. De esta forma es posible realizar cambios sobre la misma página sin necesidad de recargarla. Esto significa aumentar interactividad, velocidad y  usablidad en la misma.”


Si seguimos leyendo nos encontramos con esto:


“…, AJAX no constituye una tecnología en si, sino que es un término que engloba a un grupo de éstas que trabaja conjuntamente.”


Podemos decir que yo no iba tan mal encaminado. Pero Bruno tampoco, debido a que Atlas, y en general cualquier framework que lo implemente, lo podemos dividir en varios niveles:


Esquema Atlas-Ajax


 


De tal forma que Altas es un framework que evita que el programador tenga que implementar “manualmente” (o como dice José Manual Alarcón, a pelo) la técnica AJAX que agrupa una serie de tecnologías estándar comunes a la mayoría de navegadores actuales (excluyendo IE para Mac, basados en texto como Lynx y Links o para incapacitados visuales, braille).


Espero, que esto haya aclarado las dudas de todos los que os venís haciendo la misma pregunta, por mi parte, a no ser que hay algo que rectificar, el tema de las definiciones, nomenclatura y todas esas cosas que al fin y al cabo no nos afectan al desarrollo de nuestras aplicaciones queda TOTALMENTE ZANJADO.


Y a partir poder centrarme en la teoría de AJAX y Atlas para poder contároslo de un modo lo más ameno posible.


Mientras tanto podéis ir viendo una serie de 3 artículos muy interesante que José Manuel Alarcón está preparando, la serie se llama “AJAX con ASP.NET 2.0 (The “a pelo” series)”, de la que ya ha publicado el primero: “Script Callbacks (I)” y el segundo: “Script Callbacks (II): La interfaz ICallbackEventHandler