Discourse

Figura 1: Portada de https://www.discourse.org/

Discourse es la plataforma de debate 100% de código abierto, construida para la próxima década de Internet. Úsalo como una lista de correo, un foro de discusión, una sala de chat de larga duración y mucho más.

Texto original: Discourse is the 100% open source discussion platform built for the next decade of the Internet. Use it as a mailing list, discussion forum, long-form chat room, and more!

Metadatos

Nombre

Discourse

URL

https://www.discourse.org/

URL repositorio

https://github.com/discourse/discourse

Resumen (Inglés)

A platform for community discussion. Free, open, simple.

Resumen (Castellano)

Una plataforma para el debate en comunidad. Libre, abierta, simple.

Lenguaje

Ruby

Framework

Ruby on Rails

Fecha primer commit

Octubre de 2011

Versión analizada

1.9.0.beta7

Nº de versiones

233

Nº de tablas en la BBDD

129

Nº de contribuidores

600

Nº de stars

22777

Licencia

GPLv2

Mantenido

Diseño responsivo

Funcionalidades

Las principales funcionalidades son:

  • Conversaciones continuadas en la misma página (sin paginación).

  • Sistema de notificaciones y alertas de forma granular (por categorías, por hilos, sólo cuando se mencione al usuario, en ningún momento, etc).

  • Interfaz simple con todas las publicaciones de la misma conversación ordenadas cronológicamente y a su vez permitiendo guardar el anidado de las respuestas.

  • Diseño adaptado a portátiles, tablets y móviles

  • Al agregar un enlace en un post se expande automáticamente dando información contextual de forma similar a como lo hacen en Facebook y Twitter.

  • Inicio de sesión único permitiendo integrar Discourse con el registro de usuarios de otros sistemas. Inicio de sesión a través de Google, Facebook, Twitter, Yahoo, GitHub, y otras redes sociales comunes.

  • Los usuarios pueden obtener más permisos a traveś de un sistema de confianza y dependiendo de las acciones que vayan realizando.

  • Moderación a demanda de la comunidad

  • Protecciones anti-spam heurísticas y a través del servicio externo de Akismet

  • Resumen automático de posts largos mostrando solo los más interesantes y populares

  • Insignias: promueve los comportamientos positivos de la comunidad a través de insignias por defecto a ciertas acciones (por ejemplo al reportar una publicación, al realizar máś de 10 publicaciones, al darle cierta cantidad de likes, etc.). Se pueden definir insignias nuevas.

  • Emoji: cuenta con cuatro diferentes conjuntos y se pueden definir Emojis propios.

  • Permite responder/participar por correo electrónico.

  • API exhaustiva. Por su propia arquitectura, al ser una aplicación Javascript, todos los contenidos mostrados se consiguen a través de una API.

  • Actualizaciones en un click a través del administrador web.

  • Traducido a 25 idiomas

  • Optimizado para SEO para indexación por buscadores

  • Distintas opciones de formateo en las publicaciones: Markdown, BBCode, y formateo HTML

Además cuenta con:

  • Backups automáticos

  • Soporte para CDN (Content Delivery Network)

  • Avatares

  • Uso del correo electrónico para:

    • Invitaciones.

    • Listas de correo.

    • Notificaciones.

  • Publicación anónima

  • Adjunto de ficheros

  • Encuestas embebidas

  • Notificaciones de escritorio y alertas a los usuarios de acciones

  • Autoguardado de borradores

  • Historial de revisión de publicaciones

  • Mensajería privada

  • Subida de imágenes a través de arrastrar y soltar

  • Edición colaborativa de publicaciones (wiki)

  • Permite la moderación en masa y la moderación previa (por aprobación manual) de publicaciones.

  • Espacios privados

  • Panel de control de estadísticas

  • Posibilidad de promocionar las publicaciones (“pin”)

  • Seguimiento de enlaces de entrada y salida

  • Versatilidad a través de las configuraciones de su administración

  • Extensión a través de plugins creados por la comunidad

  • Personalización de la interfaz a alto nivel (colores y tipografías) y a bajo nivel (HTML, CSS, Javascript)

  • Instalación automatizada a través de imágenes docker

  • Sistema de backups integrado en el sistema

  • API de todo el sistema

  • Estadísticas en el administrador

  • Memoria de que publicaciones ha leído cada usuario

Se trata pues de uno de los aplicativos que cuenta con más funcionalidades, destacando aquellas orientadas la versatilidad en la configuración global y granular, el sistema de backups automatizado, así como la facilidad de instalación a través de imágenes docker y otras características que hacen de este aplicativo uno de los más ambiciosos en su género.

Las amplias funcionalidades del aplicativo hacen que pueda ser usuado en entornos muy diversos más allá de los estrictamente relacionados con la participación ciudadana.

Implantación

Cuenta con más de 600 instalaciones de distintas comunidades, desde Videojuegos (Gearbox Software, Turtle Rock Studios), Educación (Udacity, Codecademy), Programación (Facebook React, Twitter Developers, Github Atom, Docker), Productos (Samsung SmartThings, Patreon, Bank of New Zealand ), Media (Imgur, BoingBoing) entre otros tipos.

Arquitectura

Es una aplicación javascript escrita con el framework Ember.js, con un backend escrito en Ruby on Rails para la persistencia de contenidos en la base de datos. Cuenta con un instalador que facilita todo el proceso, a través de scripts que descargan y configuran imágenes docker para la instalación del sistema. Cuenta con un asistente de instalación en el que se preguntan las principales opciones.

/var/discourse$ sudo ./discourse-setup Ports 80 and 443 are free for use Found 3GB of memory and 2 physical CPU cores setting db_shared_buffers = 768MB setting UNICORN_WORKERS = 4 Hostname for your Discourse? [discourse.example.com]: Email address for admin account(s)? [me@example.com,you@example.com]: SMTP server address? [smtp.example.com]: SMTP port? [587]: SMTP user name? [user@example.com]: SMTP password? [pa$$word]: Let’s Encrypt account email? (ENTER to skip) [me@example.com]: Does this look right? Hostname : discourse.example.com Email : me@example.com,you@example.com SMTP address : smtp.example.com SMTP port : 587 SMTP username : user@example.com SMTP password : pa$$word ENTER to continue, ‘n’ to try again, Ctrl+C to exit:

Los desarrolladores han optado por no incluir en el aplicativo un servidor SMTP para el envío de correo electrónico, debiéndose por tanto proveer ese servicio externamente.

Figura 2: Esquema de arquitectura de Discourse

Modelo de datos

Modelos relevantes

Sus principales modelos son Categories, Groups, Posts y Topics.

Tablas

Cuenta con 129 tablas:

  1. api_keys

  2. application_requests

  3. badge_groupings

  4. badge_types

  5. badges

  6. categories

  7. categories_web_hooks

  8. category_custom_fields

  9. category_featured_topics

  10. category_featured_users

  11. category_groups

  12. category_search_data

  13. category_tag_groups

  14. category_tags

  15. category_users

  16. child_themes

  17. color_scheme_colors

  18. color_schemes

  19. custom_emojis

  20. developers

  21. directory_items

  22. draft_sequences

  23. drafts

  24. email_change_requests

  25. email_logs

  26. email_tokens

  27. embeddable_hosts

  28. facebook_user_infos

  29. github_user_infos

  30. given_daily_likes

  31. google_user_infos

  32. group_archived_messages

  33. group_custom_fields

  34. group_histories

  35. group_mentions

  36. group_users

  37. groups

  38. groups_web_hooks

  39. incoming_domains

  40. incoming_emails

  41. incoming_links

  42. incoming_referers

  1. instagram_user_infos

  2. invited_groups

  3. invites

  4. message_bus

  5. muted_users

  6. notifications

  7. oauth2_user_infos

  8. onceoff_logs

  9. optimized_images

  10. permalinks

  11. plugin_store_rows

  12. post_action_types

  13. post_actions

  14. post_custom_fields

  15. post_details

  16. post_replies

  17. post_revisions

  18. post_search_data

  19. post_stats

  20. post_timings

  21. post_uploads

  22. posts

  23. queued_posts

  24. quoted_posts

  25. remote_themes

  26. scheduler_stats

  27. schema_migration_details

  28. schema_migrations

  29. screened_emails

  30. screened_ip_addresses

  31. screened_urls

  32. search_logs

  33. single_sign_on_records

  34. site_settings

  35. stylesheet_cache

  36. tag_group_memberships

  37. tag_groups

  38. tag_users

  39. tags

  40. theme_fields

  41. themes

  42. top_topics

  1. topic_allowed_groups

  2. topic_allowed_users

  3. topic_custom_fields

  4. topic_embeds

  5. topic_invites

  6. topic_link_clicks

  7. topic_links

  8. topic_search_data

  9. topic_tags

  10. topic_timers

  11. topic_users

  12. topic_views

  13. topics

  14. translation_overrides

  15. twitter_user_infos

  16. unsubscribe_keys

  17. uploads

  18. user_actions

  19. user_api_keys

  20. user_archived_messages

  21. user_auth_token_logs

  22. user_auth_tokens

  23. user_avatars

  24. user_badges

  25. user_custom_fields

  26. user_emails

  27. user_exports

  28. user_field_options

  29. user_fields

  30. user_histories

  31. user_open_ids

  32. user_options

  33. user_profile_views

  34. user_profiles

  35. user_search_data

  36. user_stats

  37. user_visits

  38. user_warnings

  39. users

  40. versions

  41. watched_words

  42. web_hook_event_types

  43. web_hook_event_types_hooks

  44. web_hook_events

  45. web_hooks

Gráficos UML

Figura 3: Tablas de la base de datos de Discourse

Figura 4: Tablas de la base de datos de Discourse

Figura 5: Tablas de la base de datos de Discourse

Figura 6: Tablas de la base de datos de Discourse

Figura 7: Tablas de la base de datos de Discourse

Figura 8: Tablas de la base de datos de Discourse

Figura 9: Tablas de la base de datos de Discourse

Figura 10: Tablas de la base de datos de Discourse

Figura 11: Tablas de la base de datos de Discourse

Figura 12: Tablas de la base de datos de Discourse

Figura 13: Tablas de la base de datos de Discourse

Figura 14: Tablas de la base de datos de Discourse

Figura 15: Tablas de la base de datos de Discourse

Figura 16: Tablas de la base de datos de Discourse

Figura 17: Tablas de la base de datos de Discourse

Conclusiones

Se trata de un aplicativo que incorpora una gran variedad de funcionalidades que lo convierten en uno de los aplicativos más versátiles en el ámbito de las ‘aplicaciones de debate’.

Esa versatilidad y amplitud de las funcionalidades del aplicativo hacen que pueda ser usado en entornos muy diversos más allá de los estrictamente relacionados con la participación ciudadana en cuestiones de gobierno.

Se destaca especialmente la cantidad de información y presentación visual que cuenta en el panel de control de administración, facilitando la revisión y moderación de contenidos nuevos así como de información general de la plataforma:

Figura 18: Administrador: Panel de control

Por otro lado algo especialmente útil es la explicación que cuenta cada uno de sus configuraciones en un panel de administración especialmente completo:

Figura 19: Administrador: Configuraciones

Al mismo tiempo, la amplitud y alcance de las funcionalidades del aplicativo pueden suponer una dificultad para integrarlo en procesos integrales de participación ciudadana, a los que puede, si acaso, complementar en el ámbito estricto del debate como uno de los componentes claves de dichos procesos.

Destaca por último la integración en el aplicativo de las propias explicaciones de uso del mismo en los contenidos iniciales de la plataforma una vez instalada, facilitando así tanto la visualización del aspecto final de la misma una vez dotada de contenidos como el aprendizaje en el uso de la configuración de la plataforma.

Figura 20 (D.1 Discourse): Página principal con sesión de administrador iniciada

A nivel de captación de usuarios es especialmente destacable el uso de respuestas a las publicaciones de forma directa a través de correo electrónico, sin necesidad de tener que abrir la aplicación para responder, así como el uso de Emojis, al igual que Loomio, la otra aplicación de este tipo en este análisis.

Se recomienda su revisión por parte del equipo Decidim por la cantidad de funcionalidades ya calendarizadas para su futuro desarrollo, especialmente destacables:

Funcionalidades a destacar:

  • Inicio de sesión integrado con sistemas externos

  • Versatilidad a través de las configuraciones de su administración

  • Extensión a través de plugins creados por la comunidad

  • Personalización de la interfaz a alto nivel (colores y tipografías) y a bajo nivel (HTML, CSS, Javascript)

  • Sistema de notificaciones y alertas de forma granular (por categorías, por hilos, sólo cuando se mencione al usuario, en ningún momento, etc)

  • Permisos a nivel de grupos y categorías

  • Emojis

  • Responder a través de correo electrónico

  • Mensajería privada

  • Instalación automatizada a través de imágenes docker

  • Sistema de backups integrado en el sistema

  • API de todo el sistema

  • Estadísticas en el administrador

  • Memoria de que publicaciones ha leído cada usuario

Capturas de pantallas

Figura 21: Pantalla de registro inicial post-instalación

Figura 22: Registro inicial con correo dado durante la instalación

Figura 23: Página inicial

Figura 24: Página de un Tema

Figura 25: Creación de cuenta

Figura 26: Inicio de sesión

Figura 27: Página principal con sesión de administrador iniciada

Figura 28: Guía de Inicio Rápido para Administradores I

Figura 29: Guía de Inicio Rápido para Administradores II

Figura 30: Guía de Inicio Rápido para Administradores III

Figura 31: Guía de Inicio Rápido para Administradores IV

Figura 32: Guía de Inicio Rápido para Administradores V

Figura 33: Guía de Inicio Rápido para Administradores VI