• Sublime Text и Language Server Protocol

    Sublime Text и Language Server Protocol (LSP)

    Language Server Protocol (LSP)

    Language Server Protocol (LSP) - протокол для общения между IDE и языковым сервером. Сервер предоставляет такие функции, как автокомплит, переход к функции (goto) и прочее. Т.е. когда IDE нужно показать автокомплит на языке, скажем, python - происходит запрос к специальному серверу. В ответе возвращаются необходимые данные, которые IDE уже может отобразить. Радует то, что это инициатива крупной компании - Microsoft.

    Коментарии Читать далее
  • Ловушка при подсчете связанных объектов в Django

    Ловушка при подсчете связанных объектов в Django

    Задача: для каждого объекта подсчитать количество связанных объектов, удовлетворяющих определенному условию.

    Коментарии Читать далее
  • Django: сигнал или метод модели?

    Django: сигнал или метод модели?

    Когда нужно написать какой-либо функционал, который должен быть выполнен при сохранении django модели, у меня всегда возникал вопрос - где его лучше реализовать. В сигнале или в методе save() модели? Давайте разберемся, что и в каких ситуациях более удобно.

    Коментарии Читать далее
  • Пробуем JSON в Django и PostgreSQL (и сравниваем с MongoDB)

    Пробуем JSON в Django и PostgreSQL

    В Django 1.9 будет добавлено поле JSONField, его можно использовать с базой данных PostgreSQL >= 9.4. Давайте попробуем с ним поработать и оценить, насколько оно удобно.

    Коментарии Читать далее
  • OAuth и django rest framework

    Star

    OAuth и django rest framework

    Тема избитая, но мне не удалось найти готового решения, которое полностью бы меня устроило. Поэтому пишу сам :).

    Итак, у нас есть “одностраничный” веб сайт, который общается с бекендом посредством REST API. Клиентская часть может быть написана с помощью ember, angularjs или чего-то подобного. Бекенд - django rest framework (DRF). И есть тривиальная задача - добавить вход через социальные сети (OAuth протокол).

    Коментарии Читать далее
  • Tornado and pgettext

    Tornado and pgettext

    Недавно (26 мая 2015 года) вышел релиз tornado 4.2. В него вошли разные дополнения, пожалуй основные из них - модули tornado.locks и tornado.queues. Они перекочевали из пакета Toro, подробное описание процесса от Jesse Jiryu Davis в его блоге.

    Здесь же хочу рассказать о другой маленькой функции, которая была добавлена с моей помощью - pgettext.

    Коментарии Читать далее
  • OAuth step by step

    OAuth step by step

    OAuth протокол бывает двух версий: 1.0 и 2.0.

    Большинство сервисов сегодня используют версию 2.0, вероятно потому что ее проще реализовать. Так же версию 2.0 можно относительно безопасно использовать в standalone-приложениях (те, которые без сервера).

    Для понимания протоколов очень полезно взглянуть на их реализацию. Тут я приведу несколько скриптов, которые общаются с OAuth-провайдерами разных версий. Т.е. все скрипты реализуют функционал клиента (не сервера). Используются только стандартные python библиотеки. Вот почему глядя на них лучше понимаешь сам протокол OAuth - все перед глазами и все более-менее знакомое. Конечно, для реальной работы нужно использовать только готовые и проверенные временем пакеты. Эти скрипты только для понимания процесса. Разбираться с готовыми библиотеками порой бывает сложно, они разбиты на много модулей, могут использоваться разные сторонние пакеты, и в итоге общая картина ускользает из виду.

    Коментарии Читать далее
  • Python tips & tricks

    Python tips & tricks

    Недавно прочитал книгу Марка Лутца “Learning Python”, 5-ое издание. Привожу список самых интересных фишек (по моему мнению) оттуда, что-то вроде конспекта.

    Коментарии Читать далее
  • Слушаем wifi с помощью wireshark

    Слушаем wifi с помощью wireshark

    Всегда знал, что можно посмотреть сетевые пакеты, которые передаются по wifi сети. Но на практике этого не делал (на работе анализировал сетевые пакеты, но то был не HTTP протокол). Решил восполнить этот пробел, ведь это интересно и полезно. Более стройно выстраивается понимание протоколов TCP-IP и HTTP. Видно, как летят наши пароли и сессии, после такого опыта поневоле начинаешь относиться к безопасности сайта с большим трепетом.

    Коментарии Читать далее
  • Отладка SQL в django тестах

    Отладка SQL в django тестах

    В django тестах можно замерять количество сделанных SQL запросов:

    def test_home(self):
        with self.assertNumQueries(1):
            response = self.client.get('/')
        self.assertEqual(response.status_code, 200)
    

    Если код в контексте assertNumQueries сделает иное количество обращений к БД, чем ожидается (здесь 1), то тест выдает ошибку. Но когда такой тест не проходит, бывает трудно определить лишний отправленный запрос. Для отладки такого случая удобно вывести в консоль отправленные SQL запросы. Далее опишу, как этого добиться.

    Коментарии Читать далее
  • Tornado i18n и l10n

    Star

    Tornado i18n и l10n

    Статья о том, что такое i18n и i10n и как это реализовать в приложении на tornado. Получилось довольно много букв, но хотелось рассказать доступно обо всем процессе. Сама пошаговая инструкция - во второй половине статьи.

    Коментарии Читать далее
  • Timestamp и ObjectId в mongoDB

    Timestamp и ObjectId в mongoDB

    У каждой записи в mongoDB есть поле _id, которое должно быть уникальным в коллекции. По умолчанию тип этого поля - ObjectId, и оно присваивается автоматически, если поле не заполнено при сохранении.

    Давайте рассмотрим, что из себя представляет тип ObjectId.

    Коментарии Читать далее
  • Задание url для обработчиков Tornado

    Задание url для обработчиков Tornado

    В tornado, для привязки обработчиков к url’ам, можно передать список из кортежей (url regex, handler) при инициализации приложения:

    application = tornado.web.Application([
        (r"/", MainHandler),
        (r"/some/path/page/(?P<pk>[0-9]+)$", PageHandler),
    ])
    

    Но не секрет, что гораздо удобнее использовать обертку tornado.web.url, которая позволяет присваивать имена для путей (похожа на django’вский url).

    Коментарии Читать далее
  • Подключение celery к django

    Подключение celery к django

    Для подключения celery к новому проекту так или иначе приходится подглядывать в предыдущие, чтобы вспомнить необходимые шаги: какие настройки задавать, как запускать, как останавливать и т.д.

    Хочу собрать все в одном месте.

    Коментарии Читать далее
  • Вложенные SQL запросы в Django

    Вложенные SQL запросы в Django

    Вы знали, что Django ORM умеет делать вложенные SQL запросы? К своему стыду я узнал это не так давно.

    Коментарии Читать далее
  • Бесплатная футболка от New Relic

    Бесплатная футболка от New Relic

    New Relic - сервис для мониторинга веб приложения. Позволяет в подробных деталях смотреть статистику работы, где программа тратит больше всего времени, как часто обращается к базе данных и много всего прочего. Для описания этого прекрасного сервиса следует уделить отдельный пост. Здесь же хочу рассказать о другом - как я получил бесплатную футболку от New Relic.

    На самом деле, для этого нужно лишь зарегистрироваться и настроить New Relic на работающем сайте. Как и сказано в их предложении.

    Коментарии Читать далее
  • Внешний url для localhost сервера

    Внешний url для localhost сервера

    Есть замечательная тулза под названием ngrok. Она позволяет привязать URL для вашего localhost сервера!

    Коментарии Читать далее
  • Отправка писем в django проекте с помощью сервиса mandrill

    Отправка писем в django проекте с помощью сервиса mandrill

    Отправлять email сообщения с сервера можно просто по SMTP протоколу. Но есть другой способ - через специальные сервисы рассылки. Про один такой, mandrill.com, я немного расскажу.

    Коментарии Читать далее
  • Что нужно знать об индексах в mongodb

    Что нужно знать об индексах в mongodb

    Недавно закончил курс “M101P: MongoDB for Developers” (он периодически повторяется, например следующий стартует в апреле). В процессе прохождения натолкнулся на некоторые интересные моменты.

    Коментарии Читать далее
  • Асинхронный Bitcoin RPC клиент на python

    Star

    Для работы с Bitcoin RPC на python’е есть библиотека Python-BitcoinRPC.

    Но недавно мне понадобилось обратиться к API из приложения на tornado. Указанная библиотека работает в синхронном, т.е. блокирующем режиме. Для торнадо было бы намного лучше использовать асинхронную версию. Готовой найти не удалось, поэтому написал свой форк - асинхронный, который использует торнадовский AsyncHTTPClient: https://github.com/st4lk/python-bitcoinrpc-tornado.

    Коментарии Читать далее

Atom feed