Ok, ya estoy usando Community Server 1.0. Ya cambié Weblogs @ UNIVA a Cofradía UNIVA y Nazul .NET a su "nueva versión". Pero, ¿qué tan fácil es? ¿Valió la pena?

Bueno, pues lo primero es que CS 1.0 como cualquier versión 1.0 es muy bueno pero deja muchas cosas para futuras versiones. Hay muchos puntos de mejora pero gracias a que es el resultado de la unión de productos ya existentes (y exitosos) se volvió un gran producto y muy bien integrado. Tiene todavía partes donde uno da muchos "brincos" para llegar a donde uno desea pero uno se acostumbra (bueno, yo si, no se si Blu lo llegue a hacer ). Lo bueno de todo es que tenemos el código fuente y las opciones para personalizar esto.

Ok. Vamos con cómo migré, recomendaciones para quienes quieran hacerlo en el futuro, ventajas que veo y luego desventajas y cambios que he realizado al código fuente.

Migración

Primero, Telligent, los creadores de CS, dijeron que ellos liberarían las herramientas de migración en el momento que la versión 1.0 se publicaría. Igualmente mencionaron que el código fuente se pondría a la disposición de todos en la misma fecha. Sin embargo, pasaron varios betas y RCs y por fin llegó el RTM pero sin código fuente ni herramientas de migración. Algunos pacientemente esperamos las herramientas oficiales, otros no tan pacientes (e increíblemente buenos programando y descifrando código) comenzaron a trabajar en sus propias utilerías de migración. Cuando llegó el código fuente unas semanas después ya había varias herramientas de migración así que decidí probarlas. Ninguna de ellas me funcionó correctamente ya que requerían ciertas cosas que yo no podía hacer. Pregunté que onda con la herramienta oficial y me comentaron que como ya había varias herramientas no oficiales y que eran bastante buenas creían que no era necesario hacer una más. Estaba de acuerdo aunque yo seguía con el problema. Fue cuando vi que Kevin Harder también creó su propia herramienta de migración y sus requerimientos si los podía cumplir.

Comencé a hacer pruebas con su versión 1.1 de su herramienta para migrar Weblogs @ UNIVA y resultó que iba bien con ciertos detalles. Les pregunté a los bloggers de Weblogs @ UNIVA si deseaban migrar pese a los inconvenientes y estuvieron de acuerdo. Iba a realizar una migración de prueba cuando vi que ya estaba la versión 1.2 del convertidor en cuestión y me facilitó un poco las cosas. Migré con éxito quedando pendientes algunos detalles (por ejemplo, no migraba las galerías de .Text a las de CS).

Aproveché que IIS (al igual que cualquier otro servidor Web que implemente el estándar de HTTP) soporta HTTP 301 Redirect e implementé unos cuantos para que donde antes estaba un weblog se moviera a donde ahora estaría. Esto ayudó a que los buscadores y las personas que ya tenían registrado el sitio lo siguieran encontrando en lugar de encontrar puros 404 Not Found.

Sin embargo, pese a los 301 Redirect los posts en específico si estarían marcados como 404's. ¿Por qué? Porque el ID de cada post sería diferente al que se tenía antes. Ahora, .Text (y CS) soportan ponerle un nombre al post para que en lugar de verse como 1234.aspx se vea como Nombre.aspx. Yo si usaba estos nombres pero la herramienta no los migraba. Le pregunté a Kevin y resultó que ya estaba trabajando en la versión 2.0 y que esta versión la incluía (más otras cosas como migrar galerías) así que esperé a que la terminara y me permitió probarla antes de liberarla. La probé y le encontré unos detalles y gracias a que Kevin siempre incluyó el código fuente los pude corregir. Le notifiqué a Kevin y los incluyó en su nueva versión 2.0 y liberó el producto. Yo migré y encontré después de la migración unos detalles que Kevin también vió después (o se los hicieron notar). Ahora ya los corrigió y sacó la versión 2.1 la cual pueden ver que incluye y descargarla de aquí.

Ahora, para probar la migración y para tener fuera de línea mi sitio el menor tiempo posible utilicé Virtual PC para crear una máquina virtual con toda la configuración que tiene mi servidor Web donde esta el hosting de Nazul .NET. Instalé Windows Server 2003 con IIS y FPSE, SQL Server 2000 y le puse VS.NET 2003 para probar los cambios que le hiciera al código fuente. Bajé un respaldo de la base de datos y de los archivos del sitio Web y probé que todo fuera como debiera estar en el sitio Web real. Modifiqué el archivo hosts de Windows para que el nombre www.nazul.net apuntara al equipo local (la máquina virtual) y probara todo. Todo listo, a migrar.

Migré y probé varias veces hasta que todo estuvo listo. Migré en el sitio real y aún así me encontré con detalles. A final de cuentas ya quedó lo más grande y dejaré para después los detalles menores que poco a poco arreglaré. Me hubiera gustado tener la versión 2.1 en ese momento pero pues no existía aún. Espero que ustedes puedan usarla y les ayude.

Recomendaciones Para Futuras Migraciones

Mis recomendaciones para las migraciones que quisieran hacer serían las siguientes:

  • Instalen CS 1.0 en su máquina local y pruébenlo antes de migrar a este producto. Vean la interfase de administración, el como queda la base de datos y cosas así antes de migrar. El familiarizarse con el producto antes de migrar ayuda mucho porque así sabemos hacia donde vamos.
  • Hagan un respaldo de todo lo que tengan y pongánlo dentro de una máquina virtual. Así podremos hacer varias migraciones de prueba y equivocarnos sin problemas. Una vez que aprendamos a como funciona la herramienta de migración sabremos que se migra y que no, como se migra y como quedan ahora las cosas.
  • Ya que migraron lo que pudieron, personalicen el sitio para tener el sitio como lo desean. Recuerden que aunque CS soporta galerías, blogs y foros no es indispensable tener todo. Pueden tener nada más uno o dos componentes. Cuestión de que desactiven los que no desean. Adicionalmente recuerden que aunque CS soporta múltiples blogs, este producto puede funcionar para un solo blog. Para ello sigan los pasos que recomienda Ken, uno de los miembros de Telligent.
  • Si pueden, tengan dos bases de datos diferentes, una con la información de .Text y otra con la de CS. Yo así le hice, tenía una, creamos otra, migramos y borramos la anterior. También recuerden que antes de migrar hay que instalar CS y crear la comunidad a la que se va a migrar la información. Si pueden creen de una vez los usuarios (aunque la herramienta de migración lo hace) y hagan un respaldo así. Si algo fallara no tendrán borrar todo y crearlo de nuevo, nada más restauran la base de datos al punto de inicialización y adelante de nuevo.
  • Por último, respalden antes de hacer la migración real.

Ventajas

CS tiene galerías (digo, por si no sabían o no se los había dicho ya ) y .Text también. Sin embargo las galerías de CS son mucho mejores que las de .Text ya que están basadas en nGallery, un producto especializado para ello mientras que las de .Text nada más eran un feature más.

El manejo de usuarios es bastante bueno. La integración fue muy buena y es extensible tanto agregándole addins de terceros como modificando el código fuente.

Desventajas

Por otro lado, .Text tenía un problema serio en el manejo de las horas. CS sigue teniéndolo. Aunque uno tenga el horario con cierta configuración para el servidor y con cierta configuración para los usuarios, usualmente uno ve los posts con horarios incorrectos. Principalmente si el servidor tiene una zona horaria diferente a la de los usuarios.

No hay mucha documentación. La mayoría de la información quieren agregarla en el wiki que tienen en http://docs.communityserver.org pero es muy escasa. Ahora, muchas preguntas que uno se haría ya se han hecho y resuelto en los foros de CS.

Con .Text había pocos skins (o temas), pero había. Con Community Server sólo hay los que trae más uno que hay por ahí y los que existían para .Text requieren modificaciones para que ahora funcionen. Ahora, hay un buen tutorial de como funciona eso de los skins que les podrá ayudar a migrar el que usaban. Claro, esto esperamos que cambie con el tiempo.

Cambios que he Realizado al Código

Primero, ni .Text ni CS agregan una imagen a los feeds de RSS que generan. Este elemento es opcional y no afecta su funcionalidad. De hecho pocos lectores de RSS que conozco lo usan. Pero yo quería tener una imagen con el feed . ¿Qué hice? Cambié el código para agregar una imagen. Sin embargo hacerlo para cada blog no es tan simple. Además hay otras partes (como las galerías y los foros) donde hay feeds y ponerles imágenes a cada una me dio flojera. Así que lo que hice fue ponerle una imagen a todos los feeds del sitio. La misma a todos.

En CommunityServer.Components.BaseRssWriter.BuildChannel(string link, string description, string lang), al final del método, agregué lo siguiente:

// NAZUL: Custom-made code - Adding image
this.WriteStartElement("image");
this.WriteElementString("url", BaseUrl + @"/channel_logo.jpg");
this.WriteElementString("title", Title);
this.WriteElementString("link", FormatUrl(link));
this.WriteEndElement();
// END_NAZUL: Custom-made code - Adding image

El otro cambio fue arreglar un problema nuevo que trajo CS y que no tenía .Text: el manejo de los caracteres especiales para HTML (letras acentuadas, <, >, etc.). Lo que pasa es que usan HTMLEncode y HTMLDecode como locos así que luego terminaban haciéndolo de más o de menos. Más información en http://www.communityserver.org/forums/476179/ShowPost.aspx.

No he realizado todos los cambios para arreglar esto pero cuando los tenga completos les aviso.

Quise arreglar lo del horario pero no pude encontrar donde corregirlo (más bien fue más complicado de lo que pensé) y pues salí de vacaciones y ya no quise moverle. Se me hace que terminaré dejándolo así y esperar que la siguiente versión lo arreglen.

Comentarios Adicionales

Si quieren ver como funciona el HTTP 301 Redirect en IIS visiten este post y este artículo.

Por otro lado, me encontré un artículo donde pueden ver que se puede hacer algo así con ASP.NET. El código sería más o menos así:

private void context_BeginRequest(object sender, EventArgs e) {

  HttpContext context = HttpContext.Current;

  context.Response.Status = "301 Moved Permanently";
  context.Response.AddHeader("Location", newUrl);
  context.Response.End();
}

En resumen, me fue bien, es un buen producto, pero tomó más tiempo y esfuerzo de el que esperaba.

¿Usan .Text y ya migraron? Me gustaría saber como les fue.