Discussion:
[pyar] [Django] Accesibilidad a Sistema Web Offline
Emiliano Cugno
2018-08-07 19:34:10 UTC
Permalink
Hola lista, mi nombre es Emiliano. Me surgió un problema de requerimientos
en un proyecto el cual, cuando se corta internet, debe seguir operando la
app de pagos. El sistema debe ser web por el 90% de los otros
requerimientos, y acceder mediante navegador.

Para solucionar el problema, mi idea es correr en local la web. Si hay
internet, funcionar normalmente. Si no lo hay, entrar al sistema de manera
local, y persistir en local dichos pagos. Cuando vuelva internet, pegarle
al sitio web con todos los pagos efectuados y procesarlos. Estuve viendo
que lo podría implementar mediante un esquema de tenants, aunque sería una
solución muy rústica la cual quiero evitar a toda costa.

¿Que les parece? ¿Se les ocurre algo mejor? Hace muy poquito que estoy
desarrollando y sinceramente no consigo encontrar una solución que me
convenza.

Desde ya, muchas gracias!
Matías Bellone
2018-08-07 19:53:45 UTC
Permalink
Si es algo web, probablemente te convenga revisar Progressive Web Apps que
usan Service Workers para proveer funcionalidad offline al conectarte a una
web.

https://developers.google.com/web/fundamentals/codelabs/offline/

Saludos,
Toote
Post by Emiliano Cugno
Hola lista, mi nombre es Emiliano. Me surgió un problema de requerimientos
en un proyecto el cual, cuando se corta internet, debe seguir operando la
app de pagos. El sistema debe ser web por el 90% de los otros
requerimientos, y acceder mediante navegador.
Para solucionar el problema, mi idea es correr en local la web. Si hay
internet, funcionar normalmente. Si no lo hay, entrar al sistema de manera
local, y persistir en local dichos pagos. Cuando vuelva internet, pegarle
al sitio web con todos los pagos efectuados y procesarlos. Estuve viendo
que lo podría implementar mediante un esquema de tenants, aunque sería una
solución muy rústica la cual quiero evitar a toda costa.
¿Que les parece? ¿Se les ocurre algo mejor? Hace muy poquito que estoy
desarrollando y sinceramente no consigo encontrar una solución que me
convenza.
Desde ya, muchas gracias!
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
Ariel Gerardo Ríos
2018-08-07 20:07:42 UTC
Permalink
Emiliano:

Tu enunciado es la definición de un sistema distribuido. Tanto tu
sistema local como el remoto tienen que ser considerados como partes
independientes, porque de otra manera vas a tener mucho acoplamiento entre
los componentes y te puede traer dolor de cabeza en el futuro; mejor
separados y que evolucionen individualmente.

* Si tenés la libertad de tomar decisiones de arquitectura: yo pondría una
API del lado remoto y localmente usaría un storage (una bd o una cola) para
procesar los datos pendientes de envío de forma asincrónica y que reintente
hasta que tengas un OK. Para implementar un esquema de workers asincrónicos
se suele usar Celery <http://www.celeryproject.org/> con Django.

* Si no: también separaría la lógica que guarda localmente y la que hace el
guardado remoto, así tenés una separación de responsabilidades y es más
fácil de probar; usaría una db o una cola de mensajes.

[ web local ] ------guarda localmente -------> [ DB local o cola ]
<-------- [ worker lee y guarda en la DB remota ] ----------> [ DB remota ]

Saludos!

El mar., 7 de ago. de 2018 a la(s) 16:54, Matías Bellone (
Post by Matías Bellone
Si es algo web, probablemente te convenga revisar Progressive Web Apps que
usan Service Workers para proveer funcionalidad offline al conectarte a una
web.
https://developers.google.com/web/fundamentals/codelabs/offline/
Saludos,
Toote
Post by Emiliano Cugno
Hola lista, mi nombre es Emiliano. Me surgió un problema de
requerimientos en un proyecto el cual, cuando se corta internet, debe
seguir operando la app de pagos. El sistema debe ser web por el 90% de los
otros requerimientos, y acceder mediante navegador.
Para solucionar el problema, mi idea es correr en local la web. Si hay
internet, funcionar normalmente. Si no lo hay, entrar al sistema de manera
local, y persistir en local dichos pagos. Cuando vuelva internet, pegarle
al sitio web con todos los pagos efectuados y procesarlos. Estuve viendo
que lo podría implementar mediante un esquema de tenants, aunque sería una
solución muy rústica la cual quiero evitar a toda costa.
¿Que les parece? ¿Se les ocurre algo mejor? Hace muy poquito que estoy
desarrollando y sinceramente no consigo encontrar una solución que me
convenza.
Desde ya, muchas gracias!
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
--
Ariel Gerardo Ríos
linkedin <http://www.linkedin.com/pub/ariel-gerardo-rios/33/158/227> | *blog
<http://www.ariel17.com.ar>*
Emiliano Cugno
2018-08-07 20:28:29 UTC
Permalink
Muchas gracias Matías y Ariel por las respuestas. No conocía sinceramente
sobre Progressive Web App, por lo que ví (muy por arriba) es lo que
necesito, voy a investigarlo.

Ariel, creo que mi idea se asemejaba en cierta forma a la tuya, aunque sigo
sin darme cuenta cómo "mostrar" online la página cuando no haya Internet.
Ese es mi principal problema, y la única solución que se me ocurrió es
correr esa app en local, y cuando haya internet pegarle con un worker de
Celery al sitio online. Tal vez es una pavada lo que planteo.

En fin, muchas gracias. Me voy a poner a investigar estas dos opciones que
me dieron, que desde ya parecen mucho más eficientes que la mía.

El 7 de agosto de 2018, 17:07, Ariel Gerardo Ríos <
Post by Ariel Gerardo Ríos
Tu enunciado es la definición de un sistema distribuido. Tanto tu
sistema local como el remoto tienen que ser considerados como partes
independientes, porque de otra manera vas a tener mucho acoplamiento entre
los componentes y te puede traer dolor de cabeza en el futuro; mejor
separados y que evolucionen individualmente.
* Si tenés la libertad de tomar decisiones de arquitectura: yo pondría una
API del lado remoto y localmente usaría un storage (una bd o una cola) para
procesar los datos pendientes de envío de forma asincrónica y que reintente
hasta que tengas un OK. Para implementar un esquema de workers asincrónicos
se suele usar Celery <http://www.celeryproject.org/> con Django.
* Si no: también separaría la lógica que guarda localmente y la que hace
el guardado remoto, así tenés una separación de responsabilidades y es más
fácil de probar; usaría una db o una cola de mensajes.
[ web local ] ------guarda localmente -------> [ DB local o cola ]
<-------- [ worker lee y guarda en la DB remota ] ----------> [ DB remota ]
Saludos!
El mar., 7 de ago. de 2018 a la(s) 16:54, Matías Bellone (
Post by Matías Bellone
Si es algo web, probablemente te convenga revisar Progressive Web Apps
que usan Service Workers para proveer funcionalidad offline al conectarte a
una web.
https://developers.google.com/web/fundamentals/codelabs/offline/
Saludos,
Toote
Post by Emiliano Cugno
Hola lista, mi nombre es Emiliano. Me surgió un problema de
requerimientos en un proyecto el cual, cuando se corta internet, debe
seguir operando la app de pagos. El sistema debe ser web por el 90% de los
otros requerimientos, y acceder mediante navegador.
Para solucionar el problema, mi idea es correr en local la web. Si hay
internet, funcionar normalmente. Si no lo hay, entrar al sistema de manera
local, y persistir en local dichos pagos. Cuando vuelva internet, pegarle
al sitio web con todos los pagos efectuados y procesarlos. Estuve viendo
que lo podría implementar mediante un esquema de tenants, aunque sería una
solución muy rústica la cual quiero evitar a toda costa.
¿Que les parece? ¿Se les ocurre algo mejor? Hace muy poquito que estoy
desarrollando y sinceramente no consigo encontrar una solución que me
convenza.
Desde ya, muchas gracias!
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
--
Ariel Gerardo Ríos
linkedin <http://www.linkedin.com/pub/ariel-gerardo-rios/33/158/227> | *blog
<http://www.ariel17.com.ar>*
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
Daniel
2018-08-07 20:42:43 UTC
Permalink
La vez que me enfrenté a ese tipo de problemas me salió mucho (mucho) menos
costosa la opción de tener una conexión de backup (con 3G/4G por ejemplo)
Post by Emiliano Cugno
Muchas gracias Matías y Ariel por las respuestas. No conocía sinceramente
sobre Progressive Web App, por lo que ví (muy por arriba) es lo que
necesito, voy a investigarlo.
Ariel, creo que mi idea se asemejaba en cierta forma a la tuya, aunque
sigo sin darme cuenta cómo "mostrar" online la página cuando no haya
Internet. Ese es mi principal problema, y la única solución que se me
ocurrió es correr esa app en local, y cuando haya internet pegarle con un
worker de Celery al sitio online. Tal vez es una pavada lo que planteo.
En fin, muchas gracias. Me voy a poner a investigar estas dos opciones que
me dieron, que desde ya parecen mucho más eficientes que la mía.
El 7 de agosto de 2018, 17:07, Ariel Gerardo Ríos <
Post by Ariel Gerardo Ríos
Tu enunciado es la definición de un sistema distribuido. Tanto tu
sistema local como el remoto tienen que ser considerados como partes
independientes, porque de otra manera vas a tener mucho acoplamiento entre
los componentes y te puede traer dolor de cabeza en el futuro; mejor
separados y que evolucionen individualmente.
* Si tenés la libertad de tomar decisiones de arquitectura: yo pondría
una API del lado remoto y localmente usaría un storage (una bd o una cola)
para procesar los datos pendientes de envío de forma asincrónica y que
reintente hasta que tengas un OK. Para implementar un esquema de workers
asincrónicos se suele usar Celery <http://www.celeryproject.org/> con
Django.
* Si no: también separaría la lógica que guarda localmente y la que hace
el guardado remoto, así tenés una separación de responsabilidades y es más
fácil de probar; usaría una db o una cola de mensajes.
[ web local ] ------guarda localmente -------> [ DB local o cola ]
<-------- [ worker lee y guarda en la DB remota ] ----------> [ DB remota ]
Saludos!
El mar., 7 de ago. de 2018 a la(s) 16:54, Matías Bellone (
Post by Matías Bellone
Si es algo web, probablemente te convenga revisar Progressive Web Apps
que usan Service Workers para proveer funcionalidad offline al conectarte a
una web.
https://developers.google.com/web/fundamentals/codelabs/offline/
Saludos,
Toote
Post by Emiliano Cugno
Hola lista, mi nombre es Emiliano. Me surgió un problema de
requerimientos en un proyecto el cual, cuando se corta internet, debe
seguir operando la app de pagos. El sistema debe ser web por el 90% de los
otros requerimientos, y acceder mediante navegador.
Para solucionar el problema, mi idea es correr en local la web. Si hay
internet, funcionar normalmente. Si no lo hay, entrar al sistema de manera
local, y persistir en local dichos pagos. Cuando vuelva internet, pegarle
al sitio web con todos los pagos efectuados y procesarlos. Estuve viendo
que lo podría implementar mediante un esquema de tenants, aunque sería una
solución muy rústica la cual quiero evitar a toda costa.
¿Que les parece? ¿Se les ocurre algo mejor? Hace muy poquito que estoy
desarrollando y sinceramente no consigo encontrar una solución que me
convenza.
Desde ya, muchas gracias!
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
--
Ariel Gerardo Ríos
linkedin <http://www.linkedin.com/pub/ariel-gerardo-rios/33/158/227> | *blog
<http://www.ariel17.com.ar>*
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
--
Daniel Malisani
Agustin Toledo
2018-08-09 14:49:45 UTC
Permalink
Podes usar PWA para mostrar la "interfaz" del sistema cuando esté offline,
y usar como "base de datos local" IndexedDB que esta bastante bien
soportada, con un loop en el ServiceWorker de la progressive que chequee si
hay conexión, o enviar un mensaje push desde el servidor cuando se pierda
la conexión, y, al estar online de nuevo, el SW la recibe y manda lo que
tenga guardado en el IndexedDB.
Post by Daniel
La vez que me enfrenté a ese tipo de problemas me salió mucho (mucho)
menos costosa la opción de tener una conexión de backup (con 3G/4G por
ejemplo)
Post by Emiliano Cugno
Muchas gracias Matías y Ariel por las respuestas. No conocía sinceramente
sobre Progressive Web App, por lo que ví (muy por arriba) es lo que
necesito, voy a investigarlo.
Ariel, creo que mi idea se asemejaba en cierta forma a la tuya, aunque
sigo sin darme cuenta cómo "mostrar" online la página cuando no haya
Internet. Ese es mi principal problema, y la única solución que se me
ocurrió es correr esa app en local, y cuando haya internet pegarle con un
worker de Celery al sitio online. Tal vez es una pavada lo que planteo.
En fin, muchas gracias. Me voy a poner a investigar estas dos opciones
que me dieron, que desde ya parecen mucho más eficientes que la mía.
El 7 de agosto de 2018, 17:07, Ariel Gerardo Ríos <
Post by Ariel Gerardo Ríos
Tu enunciado es la definición de un sistema distribuido. Tanto tu
sistema local como el remoto tienen que ser considerados como partes
independientes, porque de otra manera vas a tener mucho acoplamiento entre
los componentes y te puede traer dolor de cabeza en el futuro; mejor
separados y que evolucionen individualmente.
* Si tenés la libertad de tomar decisiones de arquitectura: yo pondría
una API del lado remoto y localmente usaría un storage (una bd o una cola)
para procesar los datos pendientes de envío de forma asincrónica y que
reintente hasta que tengas un OK. Para implementar un esquema de workers
asincrónicos se suele usar Celery <http://www.celeryproject.org/> con
Django.
* Si no: también separaría la lógica que guarda localmente y la que hace
el guardado remoto, así tenés una separación de responsabilidades y es más
fácil de probar; usaría una db o una cola de mensajes.
[ web local ] ------guarda localmente -------> [ DB local o cola ]
<-------- [ worker lee y guarda en la DB remota ] ----------> [ DB remota ]
Saludos!
El mar., 7 de ago. de 2018 a la(s) 16:54, Matías Bellone (
Post by Matías Bellone
Si es algo web, probablemente te convenga revisar Progressive Web Apps
que usan Service Workers para proveer funcionalidad offline al conectarte a
una web.
https://developers.google.com/web/fundamentals/codelabs/offline/
Saludos,
Toote
Post by Emiliano Cugno
Hola lista, mi nombre es Emiliano. Me surgió un problema de
requerimientos en un proyecto el cual, cuando se corta internet, debe
seguir operando la app de pagos. El sistema debe ser web por el 90% de los
otros requerimientos, y acceder mediante navegador.
Para solucionar el problema, mi idea es correr en local la web. Si hay
internet, funcionar normalmente. Si no lo hay, entrar al sistema de manera
local, y persistir en local dichos pagos. Cuando vuelva internet, pegarle
al sitio web con todos los pagos efectuados y procesarlos. Estuve viendo
que lo podría implementar mediante un esquema de tenants, aunque sería una
solución muy rústica la cual quiero evitar a toda costa.
¿Que les parece? ¿Se les ocurre algo mejor? Hace muy poquito que estoy
desarrollando y sinceramente no consigo encontrar una solución que me
convenza.
Desde ya, muchas gracias!
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
--
Ariel Gerardo Ríos
linkedin <http://www.linkedin.com/pub/ariel-gerardo-rios/33/158/227> | *blog
<http://www.ariel17.com.ar>*
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
--
Daniel Malisani
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
--
Que tengas un excelente día!
Saludos.


*Ing. Agustín Toledo*

*agroads.com.ar
<http://links.agroads.com.ar/wf/click?upn=1gmVyW3hIIR9x6v1jhDEilQHbYMcntn6SE-2FniPoLGTo-3D_Mq4tZjgB8vpxws9uvJ3TiBzVKbupb-2B9FzHugw8k1JOCEGLh63MxpiJXzCtSwwvPSZ6RvrbTU6GmKj00vdCzr8uO6L2b6Rlpio8jm4Q-2FEnGlwqvS4TdUA4xdnDvAGylWrGyry7n9SaZB2puLH6L6hF-2Bi6fdy9QXoaR-2F4ER-2BGLwfn8psLPzNTTU2X0vIYJzns-2FkFiw-2FaAIFO65wQw4XUww2ad6x2zLJMeLcbaxcO4saU4-3D>**Facebook
<http://links.agroads.com.ar/wf/click?upn=WsUa-2Bc86EC6e69sySDnSzUPLqtRd30hNo8BBn5kYppkNG7te-2Fd873-2FXZWGWeX-2FhL_Mq4tZjgB8vpxws9uvJ3TiBzVKbupb-2B9FzHugw8k1JOCEGLh63MxpiJXzCtSwwvPSz-2FV11lVIUicRC0FsyvWC7Bb15hYAWTc2mbQ41CQFuO03r5Ox0385kNvbCkvrnmBQCyGkoV0wBuBQod-2F0mgSowq7C4ywyGLoSWQE-2FPsPmUrygVGyh0mIk1HxLIg62Vi-2F-2F8AQuC9yFHYa-2Be4CRvETcKNly0muoEazLFt9eAsnq8wM-3D>*
I *Twitter
<http://links.agroads.com.ar/wf/click?upn=EaqpCH3og-2BSqrvt6As12wdgIkfF5gAwxuyaSsnDjR2b-2FWoHvRMMn6whBrGdVj2Kw_Mq4tZjgB8vpxws9uvJ3TiBzVKbupb-2B9FzHugw8k1JOCEGLh63MxpiJXzCtSwwvPSeiSaBMWdfDfWr9KblPjE7jRrxHaS-2FVRVcfw9EF7BKXCXtZAYbYj5rVyzW8Ewm0pIU4QSaOtjHTh9XPuc6v3rgJDLs73gSGfCP3A-2B5zUi6tBgPuuRXHE6j1rTV7FP35SEF-2Fp3b10WQxtZO-2F-2Fj6ro5v2YdUA9HHnXPR2TR-2BDEaJC4-3D>
*
I *Youtube
<http://links.agroads.com.ar/wf/click?upn=WsUa-2Bc86EC6e69sySDnSzXM9Y-2FREH2SEcllCmjW0LvsC7HeNbFsjbuEujYJr1EHnm-2B-2BD7u-2FZUdzKsOEmk0R8zA-3D-3D_Mq4tZjgB8vpxws9uvJ3TiBzVKbupb-2B9FzHugw8k1JOCEGLh63MxpiJXzCtSwwvPS2irb5Z3TSgN-2BhA7rmcz1Hid-2BBUTRfHBrHlQyqOmO5Ta26fEbI4uoOrqlycOsMEQeZD5NJ4BKb5xxl5kWLCn0qOiqgXa2oh5Z2e-2BwOcPUtQT74AEfNLNLxyDx2kTPQ8cbPaK3xzs1HJ-2BNPnbTBsRqrMyM3DuZjsg-2FX7ADU6-2BLUig-3D>*
Loading...