Giter VIP home page Giter VIP logo

acanohayluz's Introduction

AcaNoHayLuz

AcaNoHayLuz es una aplicación web que recibe reportes sobre cortes de luz en una zona determinada.

Fue desarrollada a partir de una serie de hackatones en diciembre de 2013, una época de muchos cortes de luz en Argentina, en particular en Capital Federal y Gran Buenos Aires. Eventualmente la plataforma se usó en Córdoba y otras ciudades del país.

Luego de que se terminaran estos cortes, la app quedó sin mantenimiento. Creemos que hoy hubiéramos desarrollado un proyecto así de otra manera, pero ante la urgencia de una herramienta para visibilizar una problemática, optamos por una salida rápida y sucia, incompatible con nuestras prácticas actuales de desarrollo. Sentite libre de reimplementarla con un stack moderno.

Acerca de la aplicación

La app fue desarrollada para atender una necesidad concreta: poder visibilizar la magnitud y el alcance de los cortes de luz en la ciudad, que comenzó como una inquietud de Celestineia. La aplicación fue planteada para ser corrida en un hosting económico con facilidad. Está armada en PHP crudo, con algunos scripts adicionales para actualizar el mapa y los reportes. Hay varios scripts y funciones que no sirven para nada también.

Como estaba planteado para correr en un shared hosting con mínima intervención, varias cosas que podrían ser resueltas con nginx o un sistema de caching fueron implementados con cron.

Lo mismo pasa con los mapas de estado de zonas, que son dibujados server-side (por tiles) y puestos como un overlay sobre Google Maps. Esto fue un hack para resolver cuestiones de performance en mobile, ya que la app no funcionaba en smartphones de gama media (en 2013) al dibujar las regiones como SVG, aún con polígonos de baja definición. Si bien la interfaz sufre un poco en consecuencia, con esta implementación el soporte mobile es aceptable.

Instalación

Esta es una guía general de las tareas principales para levantar AcaNoHayLuz.

  • Instalá la DB MySQL: Tenés la DB base para Argentina en DB/db.sql. La configuración está en libs/connect.php
  • Configurá las Zonas y Polígonos: Esto requiere un poco más de trabajo, ya que hay que incluir los polígonos de cada Barrio/Provincia en formato JSON.
  • Configurá el dominio: Todas las URLs figuran como acanohayluz.com.ar. Vas a tener que cambiarlas por el dominio correspondiente.
  • Configurá Google Analytics: Tenés que cambiar las keys de index.php y embed.php por las tuyas (o quitar el tracking). Actualmente figura como UA-XXXXXXXX-1.
  • Configurá Facebook App ID: Hay un App ID que se usa para Facebook y se reemplazó por XXXXXXXXXXXXXXX. Usá el tuyo para ganar acceso a los likes.
  • Configurá las Keys de Google Maps: Registrá una cuenta developer en Google y obtené una Key de Google Maps. La vas a necesitar para el mapa principal.
  • Subí todo a un Hosting/Server: Cualquier shared hosting con PHP5+ y MySQL anda lo más bien. Un VPS con nginx y caching es mucho más conveniente para picos de tráfico. No fue probado en Heroku.
  • Corré procesar_nuevas_zonas.php: Procesa los polígonos de las zonas registradas y registra los tiles que deben dibujarse a la hora de armar los mapas.
  • Corré cachear_zonas.php: Guarda las zonas de la DB en un JSON para el frontend. Se corre con cada actualización de las zonas.
  • Configurá los Cronjobs: Detallados en la siguiente sección. Deben correr cada 5-15' dependiendo de la frecuencia que prefieras.

CronJobs

Es recomendable correrlos uno atrás del otro ya que están puestos por orden recomendado de ejecución.

  • refrescar_metadata.php: Actualiza el estado de cada área en función de los reportes y la duración de los mismos.
  • zona_update.php: Recalcula el estado de cada barrio en función de los cortes.
  • cachear_reportes.php: Separa los reportes en tiles para simplificar la carga de los mismos.
  • generar_tiles.php: Dibuja los tiles del mapa con el color de estado de cada zona y zona de aplicación de los cortes. Esta task suele tomar bastante tiempo.

Embed

Hay un redirect automático a una vista de embed para poder incluir el mapa como un widget en otros sitios. Esto fue un comportamiento emergente de los usuarios (ponían iframes apuntados al sitio) así que se hizo un hotfix para mejorar la experiencia de uso al incluir el mapa en periódicos online.

Twitter

Feature eliminada ya que resultaba muy molesta. Está cubierta con twitter_status.php y twitter_update.php y en libs/__auth.php.

Tu propio AcaNoHayLuz

En _docs/logo/ incluimos un SVG y un .ai con assets de la marca, para que puedas crear tu propia versión de AcaNoHayLuz, localizada. Si hacés un fork de este repositorio, avisanos (o hacé un pull request) para que agreguemos tu plataforma en este documento.

Créditos

AcaNoHayLuz fue desarrollado a partir de la colaboración de Aerolab y celestineia

Licencia

AcaNoHayLuz es software libre. Se distribuye bajo licencia MIT.

acanohayluz's People

Contributors

robertogonzalez avatar valenzine avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

acanohayluz's Issues

Consulta: data historica

Existe la posibilidad de hacer publico algun dump historico de la db que usa acanohayluz.com.ar? Anonimizada por supuesto. Agegada o no. Se me hace interesante "ver" un timelapse de esa data o que otras cosas hay en el dataset.

Dado de baja?

No se puede entrar al dominio y dice que esta en venta, ya no lo mantienen mas?

ZONAS_SELECCIONABLES is not defined

Buenas tardes, espero que se encuentren muy bien. Ante todo los felicito por este desarrollo y por haber publicado el código para que sea utilizado, mejorado y compartido.

Les escribo desde Venezuela. Como todos saben estamos pasando por una situación compleja y considero que sería de gran ayuda adaptar el código a nuestras zonas.

Seguí las instrucciones y logré montar la base de datos y posicionar el mapa en la ciudad de Guatire donde estoy haciendo las pruebas pero aún no logro que funciones la búsqueda ni el dibujo de las zonas.

Estos son los datos que estoy utilizando en las tablas

Tabla zona:

id, nombre, poligono, lat, long, slug, estado, estado_ultimo_tweet, civilizacion, bound_sw_long, bound_sw_lat, bound_ne_long, bound_ne_lat, fecha_update_reportes, seleccionable, fecha_update_estado

'1', 'Guatire', '[[[10.495491892912016,-66.55320167541504],[10.465023915619811,-66.55577659606934],[10.458018389341188,-66.54006958007812],[10.492200483032397,-66.54152870178223]]]', '10.4757', '-66.5487', 'guatire', '1', '0', '1', '-66.562845', '10.46593', '-66.534555', '10.48547', '2019-03-17 16:55:58', '0', '2019-03-17 14:44:21'

Tabla aliaszona:

id, zona_id, nombre

'1', '1', 'Guatire'

Este es uno de los errores que me aparece en la consola del navegador.

scripts.min.js:223 Uncaught ReferenceError: ZONAS_SELECCIONABLES is not defined
at setup_selector_zona (scripts.min.js:223)
at init_mapa (scripts.min.js:344)
at desktop_setup (scripts.min.js:532)
at HTMLDocument. (scripts.min.js:564)
at c (jquery.min.js:4)
at Object.fireWith [as resolveWith] (jquery.min.js:4)
at Function.ready (jquery.min.js:4)
at HTMLDocument.q (jquery.min.js:4)
setup_selector_zona @ scripts.min.js:223
init_mapa @ scripts.min.js:344
desktop_setup @ scripts.min.js:532
(anonymous) @ scripts.min.js:564
c @ jquery.min.js:4
fireWith @ jquery.min.js:4
ready @ jquery.min.js:4
q @ jquery.min.js:4

Gracias de antemano por la colaboración prestada

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.