Haciendo un Impacto: La Historia de una Migración del Mapa de Baños

This ad is not shown to multipass and full ticket holders
React Summit US
React Summit US 2025
November 18 - 21, 2025
New York, US & Online
The biggest React conference in the US
Learn More
In partnership with Focus Reactive
Upcoming event
React Summit US 2025
React Summit US 2025
November 18 - 21, 2025. New York, US & Online
Learn more
Bookmark
Rate this content

El Gran Mapa de Baños Públicos Británico es un proyecto de código abierto impulsado por la comunidad y dedicado a ayudar a las personas a encontrar baños en todo el Reino Unido, con alrededor de 14,000 baños registrados y contando. En 2021 asumimos el desafío de migrar el proyecto de una aplicación React SPA escrita en JavaScript a NextJS y TypeScript. Juntos descubriremos por qué decidimos que era hora de migrar, los numerosos desafíos técnicos que enfrentamos en el camino, cómo este trabajo beneficia a nuestros usuarios y los emocionantes planes que tenemos para el futuro.

This talk has been presented at React Advanced 2022, check out the latest edition of this React Conference.

FAQ

El Gran Mapa de Baños Públicos Británicos es un proyecto destinado a proporcionar información accesible sobre la ubicación de baños públicos en el Reino Unido. Inicialmente cubría solo Londres y estaba diseñado para ser utilizado en dispositivos móviles.

La migración a Next.js se realizó para modernizar el proyecto, aprovechando características como el renderizado del lado del servidor y la precarga de raíz, lo que mejora significativamente la velocidad de carga y la experiencia del usuario en el mapa interactivo.

Los usuarios pueden contribuir añadiendo información sobre nuevos baños públicos a través de un pequeño diálogo en el sitio web del proyecto. Además, pueden participar en programas de acceso comunitario que permiten a los negocios registrar sus baños en el mapa.

Con la adopción de Next.js y TypeScript, se logró optimizar la carga de baños en el mapa, agrupar los marcadores para facilitar la visualización y se mejoró la caché de las páginas. Además, se simplificó la experiencia de desarrollo y se mejoró la experiencia de usuario general.

La situación de los baños públicos en el Reino Unido no es ideal, con una reducción de más del 10% en ocho años. El proyecto busca abordar esta problemática proporcionando información accesible sobre la ubicación de baños públicos, incluyendo aquellos ofrecidos por negocios.

Además de los baños públicos tradicionales, el mapa busca incluir baños públicos accesibles proporcionados por todo tipo de negocios. Estos son registrados a través de programas administrados por consejos locales para facilitar el acceso a personas que realmente necesitan utilizar un baño.

Originalmente, el mapa se construyó utilizando jQuery, una tecnología considerada anticuada hoy en día. Más tarde, se migró a una aplicación Create React antes de finalizar en Next.js para aprovechar las ventajas del renderizado del lado del servidor y otras funcionalidades modernas.

Oliver Barnwell
Oliver Barnwell
24 min
24 Oct, 2022

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla discute la migración del Proyecto del Mapa de Baños desde la aplicación Create React a Next.js, con planes de llevarlo a nivel internacional. El proyecto tiene como objetivo abordar la insuficiente provisión de baños públicos en el Reino Unido. Incluye baños de acceso público, esquemas de acceso comunitario y contribuciones de los usuarios. La migración a Next.js ofrece beneficios como renderizado en el lado del servidor y precarga de raíz. La charla también cubre la migración a TypeScript, mejoras en la velocidad de carga y almacenamiento en caché, páginas dinámicas, migración de API, geohashing, agrupamiento de marcadores, carga por fragmentos, superposición de accesibilidad y planes futuros de expansión y contribuciones de los usuarios.

1. Introducción al Proyecto Toilet Map

Short description:

Hola, mi nombre es Oliver y hoy estoy aquí para hablarles sobre una migración de Create React app a Next.js. El proyecto en cuestión es el mapa de baños. Anteriormente se conocía como el Gran Mapa de Baños Públicos Británicos, pero tenemos planes de expandirlo internacionalmente. Cubriré por qué es importante que estemos realizando este trabajo. Aquí está el logo y la URL. La situación de los baños públicos en el Reino Unido no es buena. Hemos perdido más del 10% de los baños públicos en el Reino Unido en ocho años. Como proyecto, estamos tratando de solucionar esta situación.

Hola, mi nombre es Oliver y hoy estoy aquí para contarles una historia interesante que ha tenido lugar en el último año, o quizás un poco más. Y se trata de una migración de Create React app a Next.js. El proyecto en cuestión es el mapa de baños. Anteriormente se conocía como el Gran Mapa de Baños Públicos Británicos. Pero tenemos planes para expandirlo internacionalmente en el futuro. Así que es un proyecto bastante emocionante. He estado involucrado en él durante aproximadamente dos años en diferentes grados de participación. Pero durante el último año, como mencioné, este ha sido un proyecto bastante concentrado para modernizarlo por completo.

Así que les contaré una historia, básicamente por qué lo hicimos. Veremos algunos de los aspectos más destacados interesantes de ese viaje. Y también explicaré brevemente por qué es importante que estemos realizando este trabajo. Así que sin más preámbulos, vamos a sumergirnos directamente en ello. Aquí está el logo y la URL, si les apetece visitarlo. Y así es como se veía en la primera iteración. Esto habría sido alrededor de 2010, 2012, mucho antes de mi primera participación en el proyecto. Y creo que se construyó utilizando jQuery, una tecnología bastante anticuada según los estándares de hoy en día, pero ya estaba cumpliendo su función. Y creo que solo cubría los municipios de Londres. Pero rápidamente surgieron estas cosas, y se adaptó para dispositivos móviles. Así que comenzamos a tener diseños más adaptables. Y en su última iteración, se parece un poco a esto. Realmente nos esforzamos en hacerlo adaptable y fácil de usar, especialmente cuando están en movimiento. Entonces, ¿cuál es la situación actual de los baños públicos en el Reino Unido? Desafortunadamente, no es buena. La persona que fundó el proyecto, Gayle Ramster, es investigadora senior asociada en el RCA, y es bastante crítica con la situación de los baños públicos en el Reino Unido, no es una situación ideal. Y a partir de esa cita, probablemente puedan darse cuenta de que para una gran parte de las personas, esto es bastante importante. Justo antes de armar estas diapositivas, estuve navegando por la web en busca de otras citas sobre esto. Esta en particular me llamó mucho la atención, en ocho años hemos perdido más del 10% de los baños públicos en el Reino Unido, lo cual es bastante importante. Esto ha sido cubierto por varios medios de noticias. Y realmente, aunque se haya cubierto, probablemente se podría hacer mucho más para ayudar en esta situación. Y como proyecto, eso es lo que realmente estamos tratando de hacer. Estamos tratando de solucionar la situación de la mejor manera posible, dado que nosotros

2. Baños Públicos e Integración de Datos

Short description:

Existen baños públicos accesibles proporcionados por varios negocios que incluimos en el mapa. También tenemos programas de acceso comunitario donde los negocios pueden registrarse. El conjunto de datos consta de 14,000 ubicaciones activas, siendo las contribuciones de los usuarios la principal fuente de expansión. Durante el confinamiento, nos fusionamos con Lucations UK y enfrentamos desafíos al integrar sus datos. La migración a Next.js ofreció características como el renderizado del lado del servidor y la precarga de raíz.

en realidad no ayudan a mantener los baños en el Reino Unido. Sí, así es como se ven. Es una situación bastante mala. Afortunadamente, hay otro tipo de baño que aún no he mencionado, conocido como baños públicos accesibles. Estos son proporcionados por todo tipo de negocios. Y estos son los que buscamos incluir en el mapa. Así que no solo son baños públicos Son baños de una variedad de negocios y cualquier persona puede contribuir. Además de eso, también tenemos programas de acceso comunitario. Entonces, estos negocios pueden registrarse a través de programas administrados por los consejos locales para registrarse, de modo que las personas que realmente necesitan un baño puedan buscar en varios conjuntos de datos, pero también en nuestro mapa, donde hemos tomado estos datos y los hemos trazado Así que puedes averiguar fácilmente dónde puedes ir localmente. Entonces, ¿cómo se ve estedata? Tenemos alrededor de 14,000 ubicaciones que se han marcado como activas y con el tiempo hemos visto que alrededor de 2,000 de ellas se han eliminado o actualizado. Los datos abiertos para esto en parte son proporcionados por el gobierno y varias otras fuentes a lo largo de los años. Pero las contribuciones de los usuarios, especialmente en el pasado reciente, han sido la principal forma en que hemos ampliado nuestro conjunto de datos. Las personas contribuyen yendo a esta página en el sitio web y tenemos un pequeño diálogo allí donde puedes ingresar toda la información sobre el baño. También tenemos esta herramienta de exploración para que puedas consultar el conjunto de datos, ver qué se ha actualizado recientemente y volver al principio. Así que puedes ver en 2014 cuando esto se creó por primera vez. Brevemente durante el confinamiento, hubo un esfuerzo increíble por parte de una organización llamada Lucations UK para hacer algo bastante similar a lo que hacemos nosotros. Así que se volvieron muy activos, ganaron mucha tracción en las redes sociales y muchas personas contribuyeron. Fue un esfuerzo increíble y después de aproximadamente, creo que alrededor de un año de actividad, decidieron fusionarse con nosotros. Así que nos han dado sus datos y tenemos un desafío técnico muy interesante entre manos para tomar sus datos e integrarlos con lo que tenemos en el proyecto. Definitivamente no es simple porque algunas de estas ubicaciones podrían contener duplicados, algunas de ellas no son muy precisas. Es un conjunto interesante de problemas.

Así que pasemos a la migración en sí. ¿Cómo se veía desde una perspectiva técnica? Bueno, como mencioné, el proyecto era una aplicación Create React. Muy orientada al cliente, con muchoJavaScript, sin renderizado del lado del servidor. Y yo y Rupert, mi colaborador en el proyecto, echamos un vistazo a lo que estaba disponible en 2021 en términos de frameworks a los que podríamos migrar y NextJS destacó. Las características realmente hablan por sí mismas y, como se enumeran aquí, las que realmente nos llamaron la atención fueron el renderizado del lado del servidor y la capacidad de admitir la precarga de raíz, lo cual fue especialmente interesante porque tenemos muchos marcadores en un mapa, sería genial poder precargar algunos de estos marcadores con un framework como este. Entonces, sí, comenzamos por aquí. Pensamos, bueno, la tendencia comienza a subir, eso probablemente sea algo bueno, vamos a intentarlo. Esto es de lo que partimos.

3. Migración a TypeScript y Next.js

Short description:

Nos mudamos a TypeScript, mejorando la experiencia de usuario, la velocidad de carga y el almacenamiento en caché de las páginas. Los desarrolladores encontrarán más fácil contribuir. El renderizado del lado del servidor mejora el tiempo de carga. Las consideraciones de migración incluyeron enlaces, imágenes y optimización de imágenes.

Así que logramos migrar a TypeScript durante el transcurso del proyecto, y aprovechamos al máximo el hecho de que TypeScript está diseñado teniendo en cuenta la adopción incremental. También logramos mejorar significativamente la experiencia de usuario, hicimos que los baños se cargaran más rápido, agrupamos los marcadores para que fuera más fácil verlos en el mapa, y comenzamos a almacenar en caché las páginas utilizando algunas de las increíbles características que Next ofrece.

Además, para los desarrolladores, cualquiera que desee contribuir al proyecto ahora encontrará una experiencia mucho más fácil, porque hemos adoptado un lenguaje que posiblemente sea uno de los más populares en el planeta en estos días. Además, el renderizado del lado del servidor, por lo que ya no se ve eso más, ya no tienes JavaScript por alguna razón, ahora ves eso. Las cosas se cargarán un poco más rápido porque no tienes que cargar un paquete masivo de JavaScript y ejecutarlo, en su lugar, solo obtienes el HTML de la página.

Entonces, hagamos un recorrido rápido de algunas de las cosas que tuvimos que considerar cuando hicimos esa migración. Los enlaces, principalmente un trabajo de copiar y pegar, no tan malo. Las imágenes, también bastante copiables. También pudimos aprovechar algunas de las características que Next ofrece en torno a las imágenes, por lo que manejan muchas de las cosas que tendríamos que manejar manualmente, como el tamaño de imagen receptiva, y lo que realmente me interesó fue en torno a los marcadores de posición. ¿Podríamos cargar una versión borrosa de la imagen u otros tipos de optimizaciones, porque, al final del día, lo que impulsa nuestro trabajo aquí es ayudar a las personas a encontrar un baño.

4. Páginas Dinámicas y Migración de API

Short description:

Páginas dinámicas, migración de la API, arquitectura GraphQL, capa de caché Redis, Aloo, ejecución del servidor GraphQL, autenticación, mejora de la experiencia de usuario, optimización de filtros, representación mediante bits.

Páginas dinámicas, una característica bastante interesante. Aquí hay un pequeño fragmento de cómo generamos una de estas páginas. Obtenemos una conexión a la database y renderizamos la página. Al finalizar ese método, deberías tener un panel de detalles de Lou completamente renderizado para tu dispositivo móvil.

En cuanto a la migración de la API, originalmente se ofrecía utilizando el framework express. Afortunadamente, Next hace que sea muy sencillo llevar algo así a su plataforma. En cuanto a GraphQL, que utilizamos como una capa superior de nuestro Mongo database, en su mayoría se mantuvo sin cambios, por lo que así es como se ve ahora la arquitectura. Donde se encontraban el GraphQL y las partes de Next.js solía estar el servidor express, pero ahora Next ha absorbido ese Create React app y hemos logrado ponerlo todo en el mismo nivel de pila. También hemos añadido esta agradable adición de una capa de caché Redis, lo que significa que cuando un usuario solicita un mosaico de mapa, primero verificamos en nuestra caché y, si está allí, se lo proporcionamos en lugar de generar uno nuevo. Así es como se ve Aloo. Ha evolucionado a lo largo de muchos años, por lo que su estructura no es perfecta, pero cumple su función. Y así es como obtienes Aloo desde nuestro resolutor de GraphQL, y en cuanto a la ejecución del servidor GraphQL, nos conectamos a nuestra database, iniciamos el servidor Apollo y tienes tu API principal. En cuanto a la autenticación, originalmente estábamos utilizando Auth0, y todavía lo estamos haciendo. De hecho, Next hace que sea muy fácil manejarlo. Proporcionan un componente de alto nivel y pudimos envolver una de nuestras rutas con eso, y todo funcionó como se esperaba. Por lo tanto, otra parte clave de este trabajo fue mejorar la experiencia de usuario general del proyecto. Así que eso se centró en la mecánica de pasar de la aplicación create react a Next. Estas son algunas cosas que hicimos además de eso para realmente mejorar el sitio para todos. Lo primero que hicimos fue reducir el tamaño de un objeto de un bucle individual desde un gran bloque de JSON, alrededor de 260 bytes, a una sola cadena. Y vamos a ver rápidamente la anatomía de esa cadena y cómo podemos representar prácticamente la misma información en un espacio reducido.

Si desglosamos esa cadena, verás que está compuesta por el ID del bucle, que es único, un geohash y un filtro. Antes de comenzar esto, no tenía idea de qué era un geohash, y vamos a profundizar en eso brevemente. Pero primero, vamos a ver cómo optimizamos estos filtros. Como usuario del mapa, tienes estos interruptores que te permiten filtrar según varios criterios. Es una característica bastante útil. Estos se pueden representar fácilmente utilizando solo bits. Parte de un número binario con el que seguramente estás familiarizado. Y eso fue un gran descubrimiento, porque significaba que de repente podíamos representar el estado de estos interruptores utilizando esos bits. Y eso es importante, porque pasamos de una pieza de información bastante grande a un solo número para representar cualquier combinación de esos filtros que quisiéramos. Así que, en esta demostración, tenemos lo siguiente:

5. Mejorando Filtros con Operaciones de Bits

Short description:

Realizamos una operación OR en las opciones y utilizamos una máscara para determinar el estado de cada bit. Esto mejoró los filtros.

se resalta el primer bit, lo que significa que es un baño sin pago. Y el quinto también está resaltado, lo que significa que también tiene cambiador para bebés. Entonces, realizamos una operación OR en ambas opciones. Y el resultado de esa operación es el número 17, o una palabra binaria con esos dos bits establecidos. Y una vez que se ha enviado al lado del cliente, todo lo que tenemos que hacer es tomar la máscara y realizar una operación AND entre el primer y el quinto bit para determinar si están encendidos o apagados. Así que, como puedes ver, hemos recorrido cada uno de los bits y hemos determinado que es gratuito y tiene cambiador para bebés.

6. Geohash y Agrupación de Marcadores

Short description:

Veamos qué es un geohash. Es una forma de representar una ubicación utilizando una cadena de caracteres. Al cambiar la longitud del hash, podemos hacerlo más preciso. Esto nos permite convertir la latitud y longitud en una cadena de tamaño constante. Utilizamos una biblioteca llamada MarketBuster para agrupar nuestros marcadores y mejorar la velocidad de carga.

Entonces, así es como mejoramos un poco los filtros. Veamos qué es un geohash. Sabes, encontré esto realmente emocionante, pero primero vamos a hablar rápidamente sobre what3words. Es un producto que quizás hayas oído hablar y es una forma de representar una ubicación utilizando, lo adivinaste, solo tres palabras. Esto es algo similar de alguna manera, pero diferente en un sentido muy importante. ¿Y en qué se diferencia? Entonces, esta es una descripción bastante concisa de lo que hace. Creo que es del creador, no puedo recordar exactamente. Pero lo importante aquí es que al cambiar la longitud de nuestro hash, podemos hacerlo más preciso. Entonces, si solo tiene un carácter, representará una parte bastante amplia del mundo. Pero a medida que aumenta la precisión de esos caracteres, ese algoritmo muy inteligente, que no podría entender, une esos caracteres en una representación cada vez más precisa de una ubicación en la Tierra. Entonces, esto es lo que esa cadena representa en Londres. Un pequeño trozo de tierra, justo al lado de Trafalgar Square. Así que fue un descubrimiento bastante asombroso para nosotros. Significaba que podíamos tomar una latitud y longitud bastante largas y convertirlas en una cadena de tamaño constante de bastante buena precisión. Es suficiente para poder encontrar el baño que está listado. Y, por supuesto, con cualquier esquema de compresión, siempre se puede llevar aún más lejos. Entonces, el ID todavía es bastante largo. Probablemente podríamos convertir esto en una secuencia de números. Así que solo nos referimos secuencialmente a cada bucle o algún otro tipo de operación de mapeo. Pero la vida es corta, y hicimos un buen trabajo. En cuanto a la longitud fija, podríamos haber eliminado esas barras porque conocemos la longitud de esta cadena. Realmente no necesitamos separarla. Eso fue solo para desarrollo. Así que todo eso fue bastante emocionante. Realmente disfruté trabajando en eso. Eso fue, si acaso, solo satisfactorio poder reducir la cantidad de data. Y en el aspecto técnico, bastante crítico, porque significaba que de repente estábamos enviando mucha, mucha menos información al cliente. Y lo que esto nos permite hacer es pasar de algo que se veía así, donde cargábamos todo de manera bastante desordenada, a un sistema de agrupación. Entonces, en lugar de eso, utilizamos una biblioteca llamada MarketBuster, con un nombre muy apropiado. Y nos permite agrupar nuestros marcadores existentes, renderizar el grupo y, mágicamente, de repente se ven así, lo cual es mucho mejor si quieres tener una imagen de un área más amplia, como si fueras de vacaciones a algún lugar. El problema con eso,

7. Carga de fragmentos y Superposición de accesibilidad

Short description:

Implementamos un sistema de carga de fragmentos para evitar que el mapa se congele en dispositivos más antiguos. Al solicitar baños dentro de geohashes específicos, podemos cargar marcadores para cada cuadro y renderizarlos en el lado del cliente. Con un mayor nivel de detalle a medida que te acercas, el mapa ahora ofrece una mejor experiencia de usuario. Una superposición de accesibilidad permite a los usuarios con discapacidades visuales acceder a los datos de los baños al proporcionar una lista de baños dentro del área visible. También agregamos una consulta para cargar por lotes los nombres de ubicación según la demanda.

aunque es genial, es que agrupar 13,000 marcadores es lento cuando se carga la página por primera vez. Es una operación de bloqueo. Podría congelar el mapa en un dispositivo más antiguo durante unos cinco segundos, lo cual no es para nada genial. Así que pensamos en un sistema de carga de fragmentos. Es bastante simple en concepto. Miramos todos los geohashes dentro de la ventana gráfica. Estos son algunos geohashes de baja resolución, y dentro de esas cajas, podemos solicitar todos los baños. Entonces aquí tenemos la operación, y aquí tenemos el código para obtener esa información en el lado del servidor. No voy a repasarlo ahora, pero si estás interesado, está todo en GitHub. Y como resultado de esa operación, obtienes una lista de todas las cargas en la caja. Y luego, en el lado del cliente, tenemos otro código de React, que se utiliza para cargar los marcadores para cada caja específica, y para visualizarlo, se ve algo así. Entonces, cada una de esas cajas es otra instancia de ese componente. Y este es uno de esos hooks generados automáticamente, que mencioné, que se genera a partir de nuestro esquema de GraphQL, y podemos llamarlo Apollo almacenará en caché el resultado. Ahora las cosas son bastante rápidas. Y en cuanto a los marcadores, tenemos dos hooks, que nos permiten dejar de renderizar los marcadores cuando salen de la ventana gráfica, para que solo podamos renderizar lo que está en la pantalla. Entonces, ahora cuando estás usando el mapa, se ve algo así. Entonces, detrás de escena, aumentamos el nivel de detalle a medida que te acercas, utilizando un método como este. Y como demostración, esto es lo que se ve para un usuario en estos días. Mucho mejor de usar. Una experiencia mucho más agradable y espero que ayude a muchas personas necesitadas a encontrar un baño donde nadie vaya. Entonces, otra cosa emocionante fue una superposición de accesibilidad que proporcionaba la capacidad para que las personas que tal vez no pudieran ver bien cuando usan la aplicación puedan usar un diálogo que aparece sobre el mapa. Simplemente se superpone en la parte superior. Y proporciona una lista de los primeros cinco baños dentro de esa caja que ves en el medio. Entonces, mientras te desplazas por el mapa, incluso sin poder ver, aún puedes acceder a los datos que proporcionamos. Bastante importante para la accesibilidad. Entonces, realmente no agregamos el nombre a la cadena comprimida. Así que solo tuvimos que agregar otra consulta que nos permite cargar por lotes los nombres de los lugares según la demanda. Se superpondrá a un bot. Mueves el bot y encuentras nuevos nombres. Esto es cómo se ve. Entonces, puedes tocar con tus RPs.

8. Planes futuros y llamado a contribuciones

Short description:

Implementamos pruebas exhaustivas de Cypress para integración continua. Recopilamos activamente comentarios de los usuarios y planeamos expandir el proyecto a otros países. Tenemos preguntas sobre internacionalización, almacenamiento de datos y financiamiento de infraestructura. El proyecto es un esfuerzo grupal y da la bienvenida a contribuciones desde diversas perspectivas. Gracias por escuchar y apoyar nuestra misión.

Y acceder a los mismos data que cualquier otra persona podría. En cuanto a testing y GitHub actions, esto era bastante nuevo para el proyecto. Y nos movimos, básicamente, de no tener integración continua, aparte de algunas pruebas de extremo a extremo muy, muy deficientes, a una suite muy completa de pruebas de Cypress, lo cual ha sido bastante increíble para nosotros como colaboradores, porque significa que podemos avanzar más rápido y con más confianza, especialmente porque somos solo nosotros dos.

Así que muy rápidamente, quiero contarles sobre el futuro. ¿Qué más tenemos planeado para este proyecto? Hay bastante, si soy completamente honesto. Lo que sucede con un producto como este es que todos necesitan usar el baño, todos tienen una opinión sobre lo que se podría cambiar. Todos quieren, pueden relacionarse inmediatamente con el tipo de problemas que estamos tratando de resolver. Nunca he tenido una conversación con alguien que haya ido y no haya tenido una sugerencia para una nueva función. Y llevamos un registro de esto en GitHub. Así que creamos problemas cada vez que surge algo.

También recopilamos activamente comentarios de los usuarios. Tenemos un pequeño cuadro de comentarios de los usuarios en el sitio web. Y todo el tiempo, las personas simplemente escriben sus pensamientos mientras usan la aplicación y nos dan una idea de lo que se podría mejorar. Y a menudo, son cosas que nunca hubiéramos notado nosotros mismos. Además de eso, actualmente está limitado al Reino Unido. Hay algunos baños mapeados en otros países. Pero definitivamente no es compatible oficialmente por el proyecto. Así que tenemos un trabajo muy interesante que se avecina. Y nos encantaría recibir ayuda con respecto a la pregunta de cómo llevar esto a otros países. ¿Necesitamos pensar en problemas de internacionalización? ¿Cómo almacenamos los datos? En este momento, funcionamos con un presupuesto muy limitado de alrededor de 40 libras al mes. ¿Cómo permitimos que alguien que quiera iniciar su propia versión del mapa en Francia pague por esa infraestructura? ¿Podría ser sindicado tal vez? Estas son todas preguntas bastante interesantes de las que podría hablar durante otra hora.

Pero voy a terminar la charla con este pequeño logotipo del mapa de baños impreso en 3D que hice para Rupert para Navidad. Pensé que sería un lindo regalo para él. Y un agradecimiento rápido a todos los demás que han contribuido al proyecto a lo largo de los años. Ha sido un esfuerzo grupal real. Y definitivamente sigue en marcha. Y con todo este trabajo que hemos estado haciendo, realmente esperamos recibir más contribuciones de personas interesadas ya sea desde la perspectiva técnica, el lado de la experiencia del usuario, o simplemente desde un punto de vista de defensa si estás interesado en ayudar a las personas a encontrar un baño, este proyecto es para ti. Muchas gracias por escuchar. Espero que hayas aprendido algo. Y si algo, espero que me alegre mucho poder crear conciencia sobre el proyecto porque creo que está haciendo un verdadero bien social. Gracias.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Una Guía del Comportamiento de Renderizado de React
React Advanced 2022React Advanced 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Construyendo Mejores Sitios Web con Remix
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Construyendo Mejores Sitios Web con Remix
Top Content
Remix is a web framework built on React Router that focuses on web fundamentals, accessibility, performance, and flexibility. It delivers real HTML and SEO benefits, and allows for automatic updating of meta tags and styles. It provides features like login functionality, session management, and error handling. Remix is a server-rendered framework that can enhance sites with JavaScript but doesn't require it for basic functionality. It aims to create quality HTML-driven documents and is flexible for use with different web technologies and stacks.
Compilador React Forget - Entendiendo React Idiomático
React Advanced 2023React Advanced 2023
33 min
Compilador React Forget - Entendiendo React Idiomático
Top Content
Joe Savona
Mofei Zhang
2 authors
The Talk discusses React Forget, a compiler built at Meta that aims to optimize client-side React development. It explores the use of memoization to improve performance and the vision of Forget to automatically determine dependencies at build time. Forget is named with an F-word pun and has the potential to optimize server builds and enable dead code elimination. The team plans to make Forget open-source and is focused on ensuring its quality before release.
Uso efectivo de useEffect
React Advanced 2022React Advanced 2022
30 min
Uso efectivo de useEffect
Top Content
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured Workshop
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Next.js para Desarrolladores de React.js
React Day Berlin 2023React Day Berlin 2023
157 min
Next.js para Desarrolladores de React.js
Top Content
Featured WorkshopFree
Adrian Hajdin
Adrian Hajdin
En esta avanzada masterclass de Next.js, profundizaremos en conceptos clave y técnicas que permiten a los desarrolladores de React.js aprovechar al máximo Next.js. Exploraremos temas avanzados y prácticas prácticas, equipándote con las habilidades necesarias para construir aplicaciones web de alto rendimiento y tomar decisiones arquitectónicas informadas.
Al final de esta masterclass, serás capaz de:1. Comprender los beneficios de los Componentes del Servidor React y su papel en la construcción de aplicaciones React interactivas, renderizadas por el servidor.2. Diferenciar entre el tiempo de ejecución de Edge y Node.js en Next.js y saber cuándo usar cada uno en función de los requisitos de tu proyecto.3. Explorar técnicas avanzadas de Renderizado del Lado del Servidor (SSR), incluyendo streaming, fetching paralelo vs. secuencial, y sincronización de datos.4. Implementar estrategias de caché para mejorar el rendimiento y reducir la carga del servidor en las aplicaciones Next.js.5. Utilizar Acciones React para manejar la mutación compleja del servidor.6. Optimizar tus aplicaciones Next.js para SEO, compartir en redes sociales, y rendimiento general para mejorar la descubrabilidad y la participación del usuario.
Aventuras de Renderizado Concurrente en React 18
React Advanced 2021React Advanced 2021
132 min
Aventuras de Renderizado Concurrente en React 18
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
Con el lanzamiento de React 18 finalmente obtenemos el tan esperado renderizado concurrente. Pero, ¿cómo va a afectar eso a tu aplicación? ¿Cuáles son los beneficios del renderizado concurrente en React? ¿Qué necesitas hacer para cambiar al renderizado concurrente cuando actualices a React 18? ¿Y qué pasa si no quieres o no puedes usar el renderizado concurrente todavía?

¡Hay algunos cambios de comportamiento de los que debes estar al tanto! En esta masterclass cubriremos todos esos temas y más.

Acompáñame con tu portátil en esta masterclass interactiva. Verás lo fácil que es cambiar al renderizado concurrente en tu aplicación React. Aprenderás todo sobre el renderizado concurrente, SuspenseList, la API startTransition y más.
Consejos sobre React Hooks que solo los profesionales conocen
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
Consejos sobre React Hooks que solo los profesionales conocen
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
La adición de la API de hooks a React fue un cambio bastante importante. Antes de los hooks, la mayoría de los componentos tenían que ser basados en clases. Ahora, con los hooks, estos son a menudo componentes funcionales mucho más simples. Los hooks pueden ser realmente simples de usar. Casi engañosamente simples. Porque todavía hay muchas formas en las que puedes equivocarte con los hooks. Y a menudo resulta que hay muchas formas en las que puedes mejorar tus componentes con una mejor comprensión de cómo se puede usar cada hook de React.Aprenderás todo sobre los pros y los contras de los diversos hooks. Aprenderás cuándo usar useState() versus useReducer(). Veremos cómo usar useContext() de manera eficiente. Verás cuándo usar useLayoutEffect() y cuándo useEffect() es mejor.
Presentando FlashList: Construyamos juntos una lista performante en React Native
React Advanced 2022React Advanced 2022
81 min
Presentando FlashList: Construyamos juntos una lista performante en React Native
Top Content
Featured Workshop
David Cortés Fulla
Marek Fořt
Talha Naqvi
3 authors
En esta masterclass aprenderás por qué creamos FlashList en Shopify y cómo puedes usarlo en tu código hoy. Te mostraremos cómo tomar una lista que no es performante en FlatList y hacerla performante usando FlashList con mínimo esfuerzo. Usaremos herramientas como Flipper, nuestro propio código de benchmarking, y te enseñaremos cómo la API de FlashList puede cubrir casos de uso más complejos y aún así mantener un rendimiento de primera categoría.Sabrás:- Breve presentación sobre qué es FlashList, por qué lo construimos, etc.- Migrando de FlatList a FlashList- Enseñando cómo escribir una lista performante- Utilizando las herramientas proporcionadas por la biblioteca FlashList (principalmente el hook useBenchmark)- Usando los plugins de Flipper (gráfico de llamas, nuestro perfilador de listas, perfilador de UI & JS FPS, etc.)- Optimizando el rendimiento de FlashList utilizando props más avanzados como `getType`- 5-6 tareas de muestra donde descubriremos y solucionaremos problemas juntos- Preguntas y respuestas con el equipo de Shopify
React, TypeScript y TDD
React Advanced 2021React Advanced 2021
174 min
React, TypeScript y TDD
Top Content
Featured Workshop
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.