Pull to refresh
26
0
Send message

Offline-first приложение с Hoodie & React. Часть вторая: авторизация

Reading time5 min
Views7.1K

Наша цель, написать offline-first приложение — SPA которое загружается и сохраняет полную функциональность в отсутствии интернет-соединения. В первой части повествования мы научились пользоваться браузерной базой данных. Сегодня мы настроим синхронизацию с серверной бд и подключим авторизацию. В результате мы получим возможность редактировать наши данные на разных устройствах даже в оффлайне с последующей синхронизацией при появлении соединения.

Читать дальше →
Total votes 9: ↑8 and ↓1+7
Comments8

Offline-first приложение с Hoodie & React. Часть первая: браузерная база данных

Reading time4 min
Views10K

Современный веб позволяет решать часть задач которые раньше были прерогативой нативных мобильных приложений. Мы с вами создадим веб-приложение (сайт) которое будет загружаться и сохранит полную функциональность даже в отсутствии интернета, а при его появлении автоматически синхронизируется с сервером. На мобильном устройстве для такого приложения достаточно создать ярлык и в плане автономности мы получим аналог нативного приложения.


Мы напишем подобие todo-листа, с одним отличием: "выполненные" задачи будут не удаляться, а переноситься в конец списка и по мере решения остальных задач всплывать вверх. Такой список удобно использовать для повторяющихся вещей, таких как различные спортивные активности, развлечения, еда и т.п. Одна моя социально-реализованная знакомая использует его, чтобы равномерно поддерживать контакт с многочисленной популяцией своей френдзоны.


То, что получится в результате можно посмотреть тут. Попробуйте внести некоторые изменения, закрыть вкладку, отключить интернет и снова открыть сайт. Вы обнаружите, что он открывается и сохраняет полную функциональность. Если вы залогинитесь на разных устройствах и внесёте изменения в оффлайне, по восстановлении соединения изменения синхронизируются интуитивно ожидаемым образом.


Вы удивитесь насколько мало кода нам потребуется для реализации этого функционала.

Удивиться
Total votes 15: ↑14 and ↓1+13
Comments6

Окружение для разработки на aiorest (asyncio) + angular.js

Reading time4 min
Views6.3K
В этой статье мы соберём вместе aiorest + jinja2 + angular.js + gulp.js + bower.js + nginx. В результате мы получим:
  • авто-перезапуск сервера при изменении python-кода и jinja-шаблонов
  • сборка, минификация и автоматическая пересборка при изменении клиентского js-кода
Начнём с главного — как пользоваться, а затем я подробнее опишу некоторые моменты реализации. Если вам легче читать код — вот ссылка на репу.

Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments6

Современный торнадо, часть 2: блокирующие операции

Reading time5 min
Views16K
Улучшаем наш распределённый хостинг картинок. В этой части мы поговорим о конфигурировании приложения и подключим защиту от csrf. Затем, на примере создания миниатюр картинок, научимся работать с блокирующими задачами, запускать корутины параллельно и обрабатывать возникающие в них исключения.
Читать дальше →
Total votes 32: ↑31 and ↓1+30
Comments8

Современный Торнадо: распределённый хостинг картинок в 30 строк кода

Reading time3 min
Views35K
Впервые слышите о tornado? Слышали, но боялись асинхронности? Смотрели на него более полугода назад? Тогда я посвящаю эту статью вам.
Там будут: gen.coroutines, обработчики, роутинг, шаблоны, motor, gridfs
Total votes 100: ↑89 and ↓11+78
Comments16

Выбор смс-биллинга под рутраф

Reading time2 min
Views6.9K
В процессе выбора смс-биллинга под рутраф наткнулси на этот обзор: allpublication.ru/sms
Удобная штукенция, однако графа «комиссия биллинга или сколько получает партнер» вообще ни о чём.
Решил глянуть тарифы и сравнить.

Читать дальше →
Total votes 14: ↑8 and ↓6+2
Comments8

Рестарт демона mod_wsgi

Reading time1 min
Views2K
Долго откладывал разобраться, так и релоадил апач целиком :)

@never_cache
def restart(request):
    ''' Перезапуск демона '''
    if request.META['mod_wsgi.process_group'] != '':
        import signal, os
        os.kill(os.getpid(), signal.SIGINT)
        ret = 'restarted'
    else:
        ret = 'not find porcess_group'
        
    return HttpResponse(ret, mimetype='text/plain')


UP: touch yourfile.wsgi
Total votes 9: ↑6 and ↓3+3
Comments6

Information

Rating
Does not participate
Location
Таиланд
Registered
Activity