domingo, 30 de diciembre de 2007

Definiendo la arquitectura general

Supongamos que queremos desarrollar un wiki desde cero, en lugar de partiendo de algunos existentes. Teniendo en cuenta que se trata de una aplicación web y la propia idiosincrasia de los wikis, lo más lógico sería que su arquitectura estuviese separada en capas. El motivo es que así podremos repartir las responsabilidades de la aplicación entre las diferentes capas, favoreciendo un bajo acoplamiento y una facilidad de reutilización en el futuro.
Por otro lado, teniendo en cuenta las ventajas inherentes al uso de patrones de diseño, lo más lógico sería utilizar el patrón de diseño MVC (Modelo-Vista-Controlador).
Pues bien, ya que si desarrollásemos el wiki desde cero lo haríamos organizando la arquitectura (a alto nivel) por capas mediante el patrón MVC, sería ideal escoger como base para la arquitectura un wiki que estuviese implementado siguiente dicho patrón de diseño. En nuestro caso tenemos 2: JSPWiki y bitweaver. El primero, como ya se señaló en entradas anteriores, está mejor construido que el segundo, que aprovecha lo poco estricto que es PHP en muchos sentidos para realizar un desarrollo mezclando paradigmas estructurado y orientado a objetos, por poner un ejemplo.
En conclusión, considero que la arquitectura "general" de JSPWiki es la más idónea de todos los wikis que son objeto de estudio.
Por otro lado, ahora el trabajo consistirá en "entrar" dentro de cada capa y tratar de estructurarla mediante patrones de diseño.
¡A trabajar!

sábado, 22 de diciembre de 2007

Vuelta al trabajo

Ayer, tras una clarificadora reunión con el director del proyecto, comprendí mejor en qué consistía realmente dicho proyecto. Por ello, veo necesario replantear parcialmente el proceso de selección. Principalmente me refiero a las últimas fases, donde escogía los wikis con los que trabajaría definitivamente. Así pues, tras repasar mis notas, he tomado varias decisiones que repaso a continuación.
En primer lugar, he decidido mantener la decisión de utilizar JSPWiki. Para justificar esta decisión, diré a modo de resumen (para saber más detalles recomiendo leer las entradas anteriores del blog) que se trata de uno de los más interesantes.
Por otro lado, descarto ScrewTurn Wiki, que si llegó tan adelante fue por ser el más indicado dentro de su lenguaje.
Sin embargo, el wiki bitweaver sí considero que tiene la calidad suficiente como para continuar trabajando con él (más detalles en las entradas anteriores).
En cuanto a los wikis descartados, Daisy wiki es, teniendo en cuenta el proyecto que se pretende desarrollar uno de los más interesantes. Esto es así debido a su arquitectura interna, que, como expliqué en entradas anteriores, está dividida en dos partes: un respositorio accesible a través de servicios web REST y una interfaz web.
XWiki parece también un wiki interesante tras el análisis, todavía no muy profundo realizado. Además, a estas alturas, ya tienen actualizado el servidor de documentación, que era la única pega que le encontré en estudios anteriores al wiki.
En conclusión, éstos son los wikis que considero más interesantes desde el punto de vista de la arquitectura interna:

  • bitweaver

  • Daisy wiki

  • JSPWiki (Java)

  • XWiki


Ahora el trabajo consistirá en encontrar los puntos fuertes de cada uno en cuanto a su arquitectura, la manera de aunarlos todos en uno, analizar el posible uso de patrones de diseño para resolver ciertos problemas,...
¡A por ello!

domingo, 9 de diciembre de 2007

MI decisión final

Arquitectura externa


Lo primero que hice cuando me decidí a elegir uno de los tres candidatos "finalistas" fue volver a realizar la comparación de wikimatrix. Tal y como era de esperar la comparación dio como resultado que todos son bastante parejos en características, especialmente en las más relevantes (lógico, pues habían pasado la criba inicial en función de estas características). En cuanto a las menos relevantes, cabe destacar que ScrewTurn wiki es el traducido a más lenguas, mientras que los otros dos, sólo disponen de interfaz en inglés. Por otra parte, en el resto de aspectos están en general más fuertes JSPWiki y bitweaver, aunque las características peores de uno suelen coincidir con las mejores del otro de manera que, por decirlo de alguna manera, se compensan y ninguno destaca por encima del otro. Conclusión: si cabe, el peor hasta ahora es ScrewTurn.

Arquitectura interna


En primer lugar, cabe destacar la poca versatilidad que le confiere al wiki ScrewTurn la necesidad del framework .NET (teóricamente paliable a través del ya citado Proyecto Mono.
Por otro lado, si entramos a estudiar someramente la arquitectura de los 3 wikis, veremos que es el único que no utiliza el patrón de diseño MVC, lo que lo relega casi irremediablemente a la tercera plaza. Continuemos con los otros dos. Sabmos que ambos están implementados siguiendo el patrón de diseño MVC, lo que los hace relativamente parecidos. Sin embargo, tal como se puede comprobar si se examina el código detalladamente, los desarrolladores de bitweaver aprovechan la manga ancha que da PHP a la hora de codificar para codificar algunas partes de manera digamos que menos limpia/elegante (como muestra algunos archivos de la carpeta users). Esto no puede ocurrir en Java, por lo que me decantaría más a favor de JSPWiki.

Aspectos personales


Dado que tendré que trabajar durante algún tiempo con el wiki seleccionado, opino que es importante tenerme en cuenta como un factor más a la hora de llevar a cabo la elección.
Como se especificó al principio del proceso de selección todos los lenguajes me son familiares, aunque unos más que otros. El orden de familiaridad, de mayor a menor sería: Java, PHP y ASP.NET. En este último es en el que menos experiencia tengo puesto que sólo he desarrollado algunos proyectos académicos de tamaño pequeño-medio. En el caso de PHP, he desarrollado varios proyectos por mi cuenta y alguno académico, aunque, de nuevo, todos eran de tamaño pequeño-medio. En el caso de Java, he desarrollado varios proyectos académicos, de diversa envergadura, desde pequeños hasta medianos-grandes.
Así pues, MI orden de preferencia de los wikis sería JSPWiki, Bitweaver y ScrewTurn.

Conclusiones


Las conclusiones extraídas de toda esta entrada se pueden resumir en que JSPWiki es el candidato más firme en todos los sentidos, seguido de Bitweaver y, por último, ScrewTurn, que parece el menos indicado para el proyecto.

viernes, 7 de diciembre de 2007

Casting de wikis escritos en Java

Después de un trabajo intensivo he terminado el proceso de selección de wikis escritos en Java. Tal y como había previsto, el trabajo ha sido más complicado que en el caso anterior. Probablemente se deba a las peculiaridades de cada lenguaje. Todos sabemos que PHP es un lenguaje un poco "caótico", por así decirlo, cosa que no le ocurre a Java. Para entendernos, escribir código claro en PHP requiere cierta voluntariedad, sobre todo en cuanto al uso de elementos como patrones de diseño y demás refinamientos del mundo de la programación. Esto es así porque este lenguaje se suele usar/asociar más para cosas pequeñas por lo que no se suelen atender todo este tipo de detalles. Sin embargo, el lenguaje Java ya se considera algo más "serio", por así decirlo. Además de tener una sintaxis más clara, obliga al uso del paradigma de la orientación a objetos, lo que hace que haya que pensarse más las cosas antes de ponerse a programarlas.
Por otra parte, pude observar que la gran mayoría de los wikis seleccionados para esta fase del proceso de selección, independientemente del lenguaje de programación en que estaban escritos, eran proyectos muy serios, cuyo código respondía a las espectativas que su funcionalidad externa había generado.
Así las cosas, presento a continuación las conclusiones del estudio de los wikis escritos en Java.

Daisy


Este wiki es bastante curioso por su arquitectura, ya que está divido en 2 partes bien diferenciadas:

  • Un repositorio accesible a través de HTTP/XML (usando servicios web REST).

  • Una interfaz web para edición y publicación.


Esto hace que me plantee qué sería lo que podríamos aportar debido a la idiosincrasia del proyecto que pensamos desarrollar. Aparentemente no tendríamos nada que hacer pues ya está todo desarrollado, no obstante sería necesario profundizar en el estudio del código para estar seguros de ello.
Por otra parte, cabe destacar también una documentación bastante buena y el hecho de estar construido utilizando el framework MAVEN.

JAMWiki


En este caso se trata de un wiki pensado para ofrecer las mismas características que MediaWiki pero desarrollado en Java. De nuevo, está construído utilizando el ya citado framework MAVEN y a simple vista parece una opción interesante.
Sin embargo, hay un par de detalles preocupantes, como son la escasa documentación y el hecho de tratarse de una versión 0.x,con lo que ello conlleva (no obstante, en la página www.wikimatrix.org el autor asegura que se trata de un software en etapa madura).

JSPWiki


Hay poco que decir sobre este wiki, pero la verdad que todo es bueno. Además de estar implementado utilizando el patrón de diseño MVC y todo lo que ello conlleva en muchos sentidos (como ya he dicho, queda fuera de los objetivos de este blog hablar de las ventajas del uso de patrones de diseño, aunque a lo mejor un día me animo :D), está el hecho de contar con una documentación de calidad, que permitirá comprender mejor y más rápidamente el sistema.

SnipSnap


Este wiki no tiene nada especialmente interesante que comentar. Parece interesante y tiene una documentación relativamente amplia. Nada más.

VQWiki


En este caso los desarrolladores se han "olvidado" de documentar lo desarrollado. El wiki parece interesante. Nada más.

XWiki


Se trata de un wiki bastante interesante. Posee abundante documentación, que, según me indican no está obsoleta a pesar de lo que se indica en su sitio web. No obstante, me dicen que el próximo lunes estará disponible el nuevo servidor de documentación, así que habrá que echar un ojo.

yaWiki


Este wiki está tan falto de documentación que me ha sido imposible averiguar nada más sobre él.

Teniendo todo lo anterior en cuenta, opino que el mejor candidato es JSPWiki, aunque en este caso la diferencia ya no es nada ostensible. Sin embargo, las razones expuestas en su favor me parecen tan importantes que, mientras no sea necesario el cambio tras un estudio más profundo, considero que es el único wiki escrito en Java que continúa con el proceso. De este modo, las listas quedarían de la siguiente manera:

C#/ASP.NET



  • ScrewTurn wiki


JAVA



  • JSPWiki


PHP



  • bitweaver


En este momento, creo que lo mejor sería consultar con el director del proyecto para definir la dirección a tomar, aunque es posible que escriba una nueva entrada con el que considero el mejor wiki para trabajar.
¡Hasta pronto!

jueves, 6 de diciembre de 2007

Casting de wikis en PHP

Tras varios días, por fin he terminado (hace breves instantes) el casting realizado entre los wikis escritos en PHP. El proceso ha consistido principalmente en un estudio somero del código fuente y la documentación de cada wiki, pues la calidad de la arquitectura externa era muy similar en todos los casos. El proceso me ha resultado más sencillo de lo que en un principio había pensado, aunque no por ello fácil. De hecho en algunos casos encontrar algo de documentación me ha requerido algo de tiempo. Y ya sin más preámbulos, paso a comentar los resultados del estudio, en orden alfabético.

Bitweaver


En principio parece el mejor wiki de todos los escritos en PHP y, además, con bastante diferencia. Dicha diferencia se debe principalmente en el hecho de que está implementado basándose en el patrón de diseño Modelo-Vista-Controlador. Además de lo apropiado del patrón para el problema que plantea el desarrollo de wikis, están todas las ventajas inherentes al uso de patrones de diseño. Creo que a estas alturas, hablar de dichas ventajas sería prolongar innecesariamente esta entrada, por lo que remito a aquellos que las desconozcan a alguno de los muchos sitios web especializados en el tema.
Por otra parte la documentación me ha parecido bastante buena. En principio parece extensa y de calidad. Además, los ficheros están autodocumentados con un sistema parecido al javadocs.
Además el código es orientado a objetos, lo que, en mi opinión, supone una ventaja importante a la hora de trabajar con el wiki (suponiendo, claro, que el diseño sea apropiado).
Por todo ello, si tuviera que quedarme con un wiki escrito en PHP sería con éste sin lugar a dudas.

DekiWiki


Se trata de un wiki externamente muy interesante, aunque su arquitectura interna me ha parecido un poco extraña. Tiene varias características muy originales y es un buen candidato, bien documentado además, pero me lo pensaría un poco si tuviera que trabajar con él.

MediaWiki


Probablemente ha sido el wiki que ha contado con mejores recursos para su desarrollo (ojo porque no hablo de recursos económicos necesariamente) y tiene algunas características en las que sobrepasa con creces a sus competidores, como por ejemplo su interfaz traducida a 100 lenguas (el siguiente debe estar traducido a 20 ó 30). Sin embargo su arquitectura es bastante farragosa y no está especialmente bien documentado. A simple vista da la impresión de ser un sistema diseñado ad hoc en su día para unas circunstancias concretas y al ir creciendo no se ha modificado, sino más bien parcheado.
Por ello,no creo que sea la mejor opción para trabajar con él.

PhpWiki


Este wiki tiene una arquitectura un tanto extraña. Su sitio web es un poco pobre en cuanto a recursos y la documentación del sistema es bastante mejorable.
No creo que sea tampoco una opción interesante puestos a trabajar como desarrollador sobre él.

TikiWiki


Se trata de un wiki con una documentación extensísima, que dispone además de un buen sitio web (aunque algún diagrama se agradecería). En principio parece una opción más "apetecible" que algunas de las anteriores, pero lo considero peor que Bitweaver.

WikkaWiki


Se trata de un wiki muy ligero y rápido, que dispone de bastante documentación y de bastante calidad. Está implementado utilizando el paradigma de orientación a objetos lo que lo convierte en un candidato serio, pero no tanto como Bitweaver.

WikyBlog


Este wiki está implementado usando también el paradigma de la orientación a objetos, pero me parece perfectamente descartable debido a que no dispone de documentación alguna.


Por todo lo dicho considero que el wiki más interesante escrito en PHP es Bitweaver y, de momento, es el único que sigue en el proceso de selección.
Por tanto, las listas quedarían así:

C#/ASP.NET



  • ScrewTurn wiki


JAVA



  • Daisy

  • JAMWiki

  • JSPWiki

  • SnipSnap

  • VQWiki

  • XWiki

  • yawiki


PHP



  • bitweaver


Ahora "sólo" resta hacer lo mismo con los wikis escritos en JAVA, cosa que ya de por si es más complicada puesto que están a un nivel muy similar entre ellos.
¡A trabajar!

lunes, 3 de diciembre de 2007

Último descarte (+ Lista 12)

Como no quiero empezar una vez más diciendo que la calidad de tal wiki es buena pero lo descarto, iré directamente a las características.
He decidido descartar el wiki Wiclear, aún a pesar de sus virtudes, como generar xhtml 1.0 strict o soporte para contenidos en varios lenguajes, porque me ha parecido ligeramente inferior a sus competidores (menos flexible, peor documentado,...) y he encontrado algunos inconvenientes al usarlo (sobre todo con el navegador Mozilla Firefox) como el menú de contenidos que se superpone al de herramientas y al de feeds, impidiendo su uso mientras no lo desplacemos de nuevo, entre otros. También he encontrado algún pequeño inconveniente, como el uso de un plug-in para la conversión a UTF-8, cosa que podría causar algun problema en algunos sistemas (en realidad lo ideal sería probarlo en varios sistemas y ver el resultado, pero hacerlo con todos los wikis sería demasiado costoso a nivel temporal).
Por todo lo dicho, elimino el wiki de la lista, dejándola como sigue:

  • bitweaver

  • Daisy

  • DekiWiki

  • JAMWiki

  • JSPWiki

  • MediaWiki

  • PhpWiki

  • ScrewTurn wiki

  • SnipSnap

  • TikiWiki

  • VQWiki

  • WikkaWiki

  • WikyBlog

  • XWiki

  • yawiki


En este momento, con sólo 15 wikis candidatos, comienzo el proceso anteriormente citado de seleccionar los mejores para cada lenguaje, contando con 7 wikis escritos total o parcialmente en PHP, 7 en JAVA y 1 en C#/ASP.NET. Por ello, éste último (ScrewTurn wiki) estaría automáticamente clasificado y solamente haría falta realizar el proceso con los wikis en PHP y en JAVA.

C#/ASP.NET



  • ScrewTurn wiki


JAVA



  • Daisy

  • JAMWiki

  • JSPWiki

  • SnipSnap

  • VQWiki

  • XWiki

  • yawiki


PHP



  • bitweaver

  • DekiWiki

  • MediaWiki

  • PhpWiki

  • TikiWiki

  • WikkaWiki

  • WikyBlog

PmWiki descartado (+Lista 11)

Llegados a estas alturas uno siente que se excede descartando wikis de una calidad muy alta por detalles insignificantes. Sin embargo, cuando esos detalles no son ajenos a la competencia, se viene a demostrar quién es bueno y quién excelente. En el caso de PmWiki me ha sucedido eso mismo: la calidad del wiki es buena, aunque quizás sea necesario instalar demasiados plug-ins para muchas funcionalidades básicas (como el uso de bases de datos) cosa que puede causar algún contratiempo, pero tiene algunos detalles que hacen que sea mejor su competencia. Uno de ellos es la documentación, que es bastante pobre. Las personas que desarrollan software libre tienden a pensar que, al disponer del código fuente, no es necesaria la documentación y nada más lejos de la realidad, pues la documentación facilita enormemente la tarea del programador. También se puede decir que, en general, es levemente inferior a sus competidores, pero casi no me atrevería a decir los motivos que me llevan a pronunciarme en este sentido, pues podría ser tachado de excesivamente puntilloso (llegados a este punto es dificilísimo escoger).
Por otra parte, una característica que me sorprendió positivamente de PmWiki fue el hecho de que la interfaz estuviera traducida a más de 20 idiomas, tan sólo superado de manera clara por MediaWiki.
Por todo lo dicho, he tomado la decisión de eliminarlo de la lista y, por tanto, ésta queda de la siguiente forma:

  • bitweaver

  • Daisy

  • DekiWiki

  • JAMWiki

  • JSPWiki

  • MediaWiki

  • PhpWiki

  • ScrewTurn wiki

  • SnipSnap

  • TikiWiki

  • VQWiki

  • Wiclear

  • WikkaWiki

  • WikyBlog

  • XWiki

  • yawiki


Para finalizar, decir que ahora sí que creo que es prácticamente imposible eliminar ningún otro wiki de la lista por lo que, sería interesante agruparlos por lenguajes y tratar de elegir los 2 ó 3 mejores de cada lenguaje.
¡Mañana más!