Monica v3 llega antes de que acabe 2026. Reconstruida desde cero. Sigue siendo de código abierto. Ver lo que viene
Monica

Blog

Notas sobre la construcción de Monica, sobre mantener privados los datos personales y sobre la pequeña mecánica de seguir en contacto.

Fuente RSS

Página 4 de 5

2 min de lectura
Llegan los campos de contacto múltiples
Regis Freyd

Hay quien tiene una dirección postal y una cuenta de Twitter. Otros tienen varias direcciones, nada de Twitter y una cuenta de Quora. Es difícil contemplar todos los casos, pero queremos que cada persona organice sus contactos como prefiera.

Una dirección postal, una cuenta de Twitter... a todas esas formas de contactar con alguien las llamamos campo de contacto.

A partir de ahora puedes añadir tantos campos de contacto por contacto como quieras. Antes solo podías tener 5 campos predefinidos.

La ficha de un contacto con el correo, la dirección, cómo os conocisteis y los datos laborales en un lateral.

Cada campo de contacto tiene un tipo: puede ser un correo, una cuenta de Facebook, un número de fax. Cada cuenta viene con 6 tipos genéricos de campo de contacto:

  • Correo electrónico
  • Número de teléfono
  • Facebook
  • Twitter
  • Whatsapp
  • Telegram

Puedes añadir o quitar tipos de campo de contacto en tu cuenta cuando quieras, y ponerles el nombre que prefieras, en la nueva pestaña Personalización dentro de Ajustes.

Cada tipo de campo de contacto puede tener además un protocolo asociado. Un protocolo indica qué debe hacer el navegador cuando haces clic en un campo de contacto. Por ejemplo, para un número de teléfono, el protocolo tel: le dirá al navegador que abra el programa que usas en tu ordenador para llamar.

La pantalla de ajustes con los tipos de campos de contacto, cada uno con el protocolo que usan sus enlaces.

La API se ha actualizado para admitir esos dos conceptos nuevos (campos de contacto y tipos de campo de contacto).

También hemos reordenado un poco la barra lateral de la ficha de contacto. La información sobre parejas e hijos está ahora arriba, porque creo que es mucho más importante que saber la dirección del contacto, por ejemplo.

Estos cambios están en la versión 1.1.0, que ya está en producción y, como siempre, puedes instalarla en un servidor propio.

Que la disfrutes.

4 min de lectura
Monica 1.0.0 con API, presentaciones y contactos fallecidos
Regis Freyd

Monica por fin está lista para la v1.0.0.

En Monica intentamos seguir el enfoque SemVer. Cambiar el número de versión mayor indica cambios importantes en la API. Por eso me hace mucha ilusión anunciar el lanzamiento de la v1.0.0. Añade muchas funcionalidades y servirá de base para todas las cosas estupendas que pienso publicar en los próximos meses. Hablemos primero de las funcionalidades y después de los cambios técnicos que trae esta versión.

La API

Monica por fin tiene API. Todavía no está todo disponible a través de ella, pero sí la mayor parte de los datos de los contactos. Una versión futura traerá también los ajustes y los datos de la cuenta. Mi objetivo es que todo esté disponible mediante la API. Admitimos OAuth 2.0 y tokens personales. Por dentro, Laravel Passport se encarga de todo lo relacionado con OAuth.

Nada ayuda tanto a los desarrolladores a meterse en un proyecto como una buena documentación. Por eso también hemos publicado un nuevo portal de documentación que intenta ser lo más exhaustivo posible. En cada página indicamos además la fecha de la última actualización, para que sepas cómo de reciente es.

La portada de la documentación de la API de Monica.

Ahora les toca a los desarrolladores ser creativos con los datos de Monica y hacer cosas estupendas con ellos. Por nuestra parte, estamos trabajando en la primera aplicación móvil oficial de Monica, tanto para Apple como para Android, pero tendrás más detalles a finales de año.

Cómo conociste a alguien

El propósito de Monica es ayudarte a recordar información importante sobre las personas que te importan, en privado y solo para tus ojos. Cuando tienes muchos contactos, a veces cuesta recordar cómo y dónde los conociste. Por eso ahora puedes indicar cómo conociste a alguien o si te presentó otro contacto. Incluso puedes pedir que te recordemos el aniversario de ese encuentro.

El panel de cómo conociste al contacto: quién os presentó, cuándo y dónde.

Marcar un contacto como fallecido

A veces la vida es injusta y la gente muere. Hemos añadido la posibilidad de marcar un contacto como fallecido e indicar una fecha opcional para ese triste suceso. Además, puedes pedir que te lo recordemos si así lo prefieres. Cuando un contacto está marcado como fallecido, aparece un pequeño ⚰ junto a su nombre en toda la aplicación.

Un contacto marcado como fallecido, con un ataúd junto al nombre y la fecha en la ficha.

Una pantalla de alta de contactos más rápida

Nuestro objetivo es ayudarte a conseguir lo que quieres lo antes posible. Por eso hemos añadido un pequeño botón en la pantalla de alta de contactos que guarda el contacto actual y te permite añadir otro justo después. Te ahorrará segundos valiosos.

Grandes cambios internos

Para la v1.0.0 hemos actualizado el código a Laravel 5.5, con el fin de aprovechar para nuestra API la estupenda funcionalidad de Resources introducida en esa versión.

Gracias a @mauricew también hemos sustituido el antiguo sistema de compilación del front-end basado en Gulp y Bower por mix, el sistema que Laravel incluye ahora por defecto. Hemos podido eliminar muchas dependencias, limpiar el código y, sobre todo, asegurarnos de que en el futuro no haya conflictos en los archivos CSS y JS de nuestras pull requests.

Para terminar

La versión 1.0.0 ya está en producción y, como siempre, puedes instalarla en un servidor propio.

La v1.0.0 tiene literalmente miles de líneas de código nuevas. Es el producto de una comunidad sana. En lo personal, me siento muy afortunado de que Monica ayude a tanta gente. Vuestros comentarios continuos me ayudan enormemente a seguir trabajando todo lo que puedo en este producto. Los próximos meses serán muy intensos: muchas funcionalidades nuevas, una aplicación móvil y otras sorpresas. El futuro será brillante para nuestra comunidad.

Que la disfrutes.

2 min de lectura
Estado del proyecto, septiembre de 2017
Regis Freyd

He estado algo menos activo en la comunicación durante los últimos 40 días. También tardo más en responder incidencias y en integrar pull requests. No es una situación que me guste, pero me será difícil cambiarla en el próximo mes. Después irá mejor.

¿Qué demonios estoy haciendo ahora mismo?

Trabajo en el proyecto todo lo que puedo. Cada hora libre que tengo la invierto en Monica. Para tranquilizar a toda la gente que me escribe sobre mi compromiso con el proyecto y sobre el temor de que lo deje morir: sigo tan motivado como antes y esto sigue siendo una prioridad para mí.

Sin embargo, ahora mismo estoy trabajando en la API y asegurándome de que funciona como debe. También estoy construyendo su documentación, porque la documentación tiene que ser excelente para que la gente use la API. Por esas razones, y también porque esto sigue siendo un proyecto paralelo hasta que encuentre la manera de convertirlo en mi trabajo a tiempo completo, no quiero distraerme ahora con comentarios, errores o funcionalidades nuevas. En cuanto esté lista la API, volveré a atender a la comunidad. Por desgracia, sencillamente no tengo tiempo material para hacer todo lo que me gustaría, y necesito concentrarme de forma muy estricta si quiero terminar las cosas.

Qué viene después

En los próximos días se publicará un primer borrador de la API, con más métodos añadidos después.

Una vez terminada la API, tenemos que dar cariño a la noción de actividades compartidas con tus contactos. También deberíamos hacer el panel más útil y cambiar el diario para que sea algo realmente aprovechable. Además, hay que implementar el protocolo CardDAV, aunque a estas alturas no sé hasta qué punto encajará bien en la pila actual.

Estoy convencido de que este proyecto tiene un potencial enorme. Si ya eres usuario, sigo buscando comentarios y testimonios. Gracias por tu ayuda.

2 min de lectura
Monica 0.6.3 con mejor gestión de contactos y Markdown
Regis Freyd

La funcionalidad más pedida en Monica (desde la anterior) era poder designar a un contacto existente como pareja o como hijo. Con la 0.6.3 ya es posible.

Cómo funciona

Cuando añades una pareja o un hijo, tienes acceso a dos cosas nuevas:

  • Puedes crear un contacto parcial o un contacto real al añadir a esa persona. Un contacto parcial es la forma antigua de hacerlo: esos contactos no aparecen en la lista de contactos y no puedes añadirles recordatorios ni notas propias. Un contacto «real» crea de verdad una ficha nueva para esa persona, a la que podrás añadir sus propios hijos o parejas.

El formulario para añadir la pareja de un contacto, con la opción de darle su propia ficha.

  • En lugar de crear un contacto nuevo, puedes simplemente vincular un contacto existente como hijo o pareja de este contacto.

El mismo formulario en su otra pestaña, que enlaza un contacto existente como pareja.

Este cambio ha sido el mayor del código hasta la fecha y el que más tiempo ha llevado. Quienes alojáis Monica por vuestra cuenta, tened cuidado al actualizar la instancia: haced una copia de seguridad de la base de datos antes de actualizar.

Otros cambios importantes de esta versión

  • Para quienes gusten de la poligamia, cada contacto puede tener más de una pareja.
  • Nuevas traducciones: italiano y alemán. Gracias a la comunidad.
  • Compatibilidad con Markdown en las notas y en las llamadas registradas. Así puedes usar listas, por ejemplo.
  • Ahora admitimos todas las monedas del mundo.
  • Muchas correcciones de errores, incluidas algunas de seguridad.
  • Hemos empezado a usar Tachyons como nuevo framework CSS. Sustituirá poco a poco a Bootstrap.

Para terminar

La versión 0.6.3 ya está en producción y, como siempre, puedes instalarla en un servidor propio.

Que la disfrutes.

1 min de lectura
50 000 contactos
Regis Freyd

Acabamos de alcanzar un hito increíble.

Globos delante de una pared, con el pie de foto: 50 000 contactos se gestionan con Monica.

Es fantástico y es un hito que quería compartir con todos vosotros. Los usuarios han registrado más de 50 000 contactos en Monica hasta ahora, y la cifra crece cada día. Eso no incluye las instancias que se han descargado e instalado en servidores propios.

En el plano personal, me asombra la comunidad que rodea al proyecto. En GitHub hemos recibido más de 200 pull requests de la comunidad y la gente parece compartir el proyecto por todo internet para difundir la noticia.

Estoy deseando ver dónde estaremos dentro de un año. Gracias a todos por vuestra confianza.

3 min de lectura
Monica 0.5.0 con aviso de versiones y búsqueda
Regis Freyd

Si instalas Monica en un servidor propio, lo más probable es que quieras enterarte cuando haya una versión nueva. Con Monica 0.5.0 tienes exactamente eso.

Cómo funciona

En resumen, tu instancia de Monica envía un ping diario a https://version.monicahq.com. El ping contiene tres datos:

  • un UUID: el identificador único y anónimo de tu instancia,
  • la versión actual de tu instancia,
  • el número de contactos de tu instancia.

El último dato sirve para conocer el tamaño de las instancias de quienes se descargan Monica. Necesito ese dato (y solo ese) para avanzar sabiendo mejor cómo se usa Monica. Además, no hay manera de saber quién eres: el UUID es aleatorio, único y anónimo.

El código de https://version.monicahq.com es de código abierto y está en GitHub, como todo lo que hacemos.

Como respuesta a esa llamada, recibes un JSON con:

  • un booleano que indica si hay una versión nueva,
  • cuál es la última versión disponible,
  • todas las notas de publicación de cada versión lanzada desde la versión del ping,
  • el número de versiones publicadas desde la versión del ping.

Esta información se usa en la interfaz. En el pie de página aparece un enlace nuevo si hay una versión disponible. Al hacer clic se abre una ventana con las notas de la nueva versión.

El pie de página de Monica, con el número de versión y un aviso de que hay una versión nueva disponible.

Cómo desactivar esta función

Toda función que cambie el funcionamiento esencial de Monica puede desactivarse, y esta no es una excepción. Si no quieres enviar ninguna información a https://version.monicahq.com, simplemente añade esto a tu archivo .env:

  • CHECK_VERSION=false

Y ya está. Nunca saldrá información alguna de tu servidor. El inconveniente es que no recibirás avisos automáticos cuando salga una versión nueva.

Buscar entre tus contactos

Ahora puedes buscar entre tus contactos con un nuevo cuadro de búsqueda en la cabecera. La búsqueda tiene en cuenta los siguientes datos:

  • Nombre y apellidos
  • Correo electrónico
  • Calle
  • Ciudad
  • Código postal
  • Provincia
  • Preferencias alimentarias
  • Puesto
  • Empresa

Las búsquedas deberían ser además bastante rápidas. Nos hace mucha ilusión esta función.

Los resultados de búsqueda que aparecen al escribir, con los contactos cuyo nombre coincide.

Para terminar

La versión 0.5.0 ya está en producción y, como siempre, puedes instalarla en un servidor propio.

Que la disfrutes.

1 min de lectura
Monica 0.4.0 con llamadas telefónicas
Regis Freyd

Recordar lo que has hablado con las personas que te importan es importante. Ya era posible guardar notas sobre tus contactos. Ahora también puedes registrar una llamada telefónica, lo que resulta muy cómodo para saber cuándo llamaste por última vez a alguien y de qué hablasteis.

El panel de llamadas de un contacto, vacío, ofreciendo registrar una llamada.

La ventana para registrar una llamada, que pregunta de qué hablaste.

Una llamada registrada en la ficha de un contacto, con su fecha y lo que se dijo.

La versión 0.4.0 ya está en producción y, como siempre, puedes instalarla en un servidor propio.

Que la disfrutes.

6 min de lectura
¿Por qué Laravel?
Regis Freyd

Nota: este es un artículo técnico.

Después de presentar Monica en Hacker News, recibí muchas preguntas sobre por qué había escrito la herramienta con PHP y con Laravel en particular. Me sorprendió recibir tantas preguntas sobre el tema, porque considero que el lenguaje no importa: solo cuenta lo que haces con él.

En este artículo explicaré por qué elegí PHP y Laravel y qué dificultades tuve que superar para construir la primera versión del producto. Este texto no pretende iniciar una guerra entre lenguajes.

PHP tiene una historia interesante. Muchos grandes desarrolladores web, que probablemente ya no usan PHP, aprendieron con él las bases de la programación. Era sencillísimo de usar y de empezar y, aunque no era un lenguaje elegante, abrió el camino a muchas carreras en desarrollo web. Con el tiempo PHP fue perdiendo cariño, hasta el punto de que casi daba vergüenza usarlo o incluso decir en un meetup que tu empresa lo utilizaba. Otros lenguajes, sin duda más elegantes, ganaron mucha popularidad (Python, Ruby) gracias a frameworks estupendos construidos sobre ellos. Al mismo tiempo aparecieron nuevos frameworks PHP. Symfony, por ejemplo. Pero Symfony seguía siendo difícil de aprender y de usar. Y entonces PHP murió. O eso decía la gente, ignorando al parecer que muchísimas empresas seguían usándolo y disfrutándolo. Después llegó PHP 5.5, seguido de PHP 7, y apareció un framework con un nombre raro: Laravel. Y la mentalidad cambió por completo. PHP sigue sin ser tan elegante como otros lenguajes populares, pero las cosas mejoraron mucho. Además se volvió rápido.

Aun así, PHP sigue siendo el lenguaje que la gente adora odiar, sobre todo en Hacker News. Dicen que PHP no escala. Probablemente por eso Facebook y Mailchimp, entre otros grandes nombres, usan PHP hoy, y a gran escala.

Con ese contexto en mente, ¿por qué elegí PHP y Laravel?

  • PHP es sencillo de aprender y sencillo de usar.
  • Hay muchísimos desarrolladores de PHP y, si alguien quiere trabajar conmigo en el proyecto, el grupo potencial de desarrolladores de PHP es mayor, al menos donde yo vivo, que el de desarrolladores de Ruby o Python. Además, hay mucha gente en GitHub que usa PHP y, si quería que este proyecto de código abierto tuviera recorrido, tenía que escribirlo en un lenguaje en el que personas con niveles muy distintos pudieran contribuir con facilidad.
  • Lo más importante al elegir una pila tecnológica para un proyecto nuevo es lo fácil que será mantenerlo a largo plazo. PHP es simple. Es fácil de depurar (aunque podría serlo más) y fácil de escalar (aunque ahora mismo no es mi preocupación en absoluto).
  • Laravel es con diferencia el mejor framework PHP que he usado. Hace que las cosas complejas resulten muy sencillas. Se nota que se creó para arrancar aplicaciones web muy rápido y es un verdadero placer usarlo. Pero su gran diferencia es la calidad de la documentación, comparada con otros frameworks PHP e incluso con muchos frameworks de otros lenguajes. Todo está documentado de forma excelente. No puedo insistir lo suficiente en lo importante que es una buena documentación (lo que me recuerda que debería documentar Monica todavía más).
  • Hay una enorme comunidad alrededor de PHP y de Laravel en particular: Laracasts, Forge, Envoyer y una comunidad de Slack muy activa, por citar solo algunos. Si necesitas ayuda, hay mucha gente dispuesta a echarte una mano.

¿Qué retos me encontré durante el desarrollo del proyecto?

En general no tuve demasiados retos al desarrollar la versión actual de Monica. No es una aplicación compleja y no tengo problemas de escalado, ya que la base de usuarios sigue siendo pequeña (unos 7800 usuarios en total y 4300 activos). Pero hay detalles de implementación que hice mal, no por mala práctica, sino porque mis conocimientos técnicos no daban para resolver esos problemas a corto plazo. Espero que enumerar esos errores ayude a otros a no cometerlos, o que gente amable me escriba para contarme cómo podría haberlos arreglado.

  • En versiones anteriores usaba muchos eventos y listeners. El concepto es estupendo, pero por su culpa tuve muchos problemas para hacer pruebas unitarias de las clases base. Además, cuanto más los usaba, más magia ocurría entre bastidores. Pensé que quien entrara en el código tendría dificultades para entender por qué pasaban ciertas cosas al crear un objeto, por ejemplo. En mi cabeza, los eventos y los listeners hacían la aplicación más difícil de entender, así que decidí quitarlos todos (bueno, el 99 %, todavía quedan dos listeners de los que tengo que deshacerme).
  • Al principio la base de datos estaba cifrada por completo. Por razones que todavía no entiendo, de vez en cuando había errores en el descifrado que dejaban datos que no podía recuperar. Como no quería lidiar con ese problema en esa etapa, decidí quitar el cifrado. Además, tener los datos cifrados hacía imposible cualquier ordenación o búsqueda en mis consultas, lo que habría sido problemático a la larga. Seguro que hay soluciones para ambos problemas, pero quería centrarme en crear funcionalidades nuevas en lugar de arreglar ese único asunto.
  • No escribí pruebas unitarias antes de lanzar la aplicación. Eso me dolió de verdad. No creo que haya que aspirar al 100 % de cobertura, pero al menos hay que tener alguna prueba de las funcionalidades principales de tu sitio. Si no, acabas con un montón de errores en los que no habías pensado y, mientras intentas arreglarlos, tu solución afecta a otras partes de la aplicación. Eso se convierte rápidamente en una pesadilla. Laravel hace que las pruebas unitarias sean muy fáciles: debería habérmelo tomado más en serio. A partir de la próxima versión, no se fusionará ninguna pull request si no trae pruebas unitarias y quizá incluso funcionales.

Conclusión

Estas son algunas razones por las que elegí Laravel. Como decía al principio, tu proyecto no va del lenguaje. A menos que tu proyecto consista precisamente en aprender un lenguaje nuevo, no deberías pasar semanas eligiendo lenguaje o framework. Quédate con lo que conoces y construye algo. A tus usuarios no les importa que tu código sea feo o que hayas elegido Python en lugar de Ruby.

1 min de lectura
Monica 0.3.0 con etiquetas
Regis Freyd

Solo 5 días después de la v0.2.0 y ya llega otra versión importante. Tan importante que ha merecido un número nuevo.

Cuando tienes muchos contactos en tu cuenta, ahora puedes clasificarlos con etiquetas. Las etiquetas funcionan como carpetas, salvo que un contacto puede tener varias. Así conservas la máxima flexibilidad para organizar tus contactos como quieras.

La pantalla de gestión de etiquetas de Monica, vacía, explicando que las etiquetas funcionan como carpetas.

Las etiquetas se escriben justo debajo del nombre del contacto.

Etiquetas escribiéndose en la ficha de un contacto, justo debajo de su nombre.

Una vez que los contactos tienen etiquetas, las ves en la lista de contactos y puedes hacer clic en ellas para filtrar la lista.

La lista de contactos filtrada a los dos contactos con la etiqueta familia.

Por último, puedes borrar etiquetas desde la vista del contacto o desde un nuevo panel de ajustes creado para ello.

Los ajustes de etiquetas, con cada etiqueta y el número de contactos que la usan.

La versión 0.3.0 ya está en producción y, como siempre, puedes instalarla en un servidor propio.

Que la disfrutes.

1 min de lectura
Monica 0.2.0 con vCard
Regis Freyd

Una de las funcionalidades más pedidas es poder importar los contactos desde Google. Google permite exportar los datos de tus contactos en formato vCard, el estándar universal para intercambiar información de contacto. Monica 0.2.0 añade la posibilidad de importar tus datos desde un archivo vCard (.vcard o .vcf), para llenar tu cuenta con la mayoría de tus datos en lugar de ir añadiendo a tus amigos uno a uno.

La pantalla de importación de Monica antes de cualquier importación, ofreciendo traer contactos desde un archivo vCard.

Justo después de importar tus contactos, se te redirige a un panel donde puedes ver el estado de la importación. Como algunos usuarios pueden tener miles de contactos, Monica los importa de forma asíncrona. Tendrás que esperar un poco hasta que estén todos.

Una lista de importaciones vCard anteriores, cada una con el número de contactos importados y omitidos.

Puedes hacer clic en una importación concreta para ver qué ha pasado.

Un informe de importación que marca cada contacto del archivo como importado u omitido.

También hemos añadido una función para restablecer tu cuenta, muy útil si importas miles de contactos y algo sale mal. Restablecer una cuenta lo borra todo, excepto a ti.

La versión 0.2.0 ya está en producción y, como siempre, puedes instalarla en un servidor propio.

Que la disfrutes.