• Чем плох ajax чат?

    @bromzh
    Drugs-driven development
    Подумай, как в случае с AJAX сервер будет отдавать сообщения.
    В случае с websocket всё просто: список подключённых пользователей известен. Подключился новый пользователь, на сервере вызвался callback, соединение создалось и добавилось в список всех соединений. При получении сообщения от клиента сервер просто пройдёт в цикле по этому списку соединений, отправит данные и забудет про них. Пользователь отключился, вызвался callback, соединение удалилось из списка на сервере.

    А как в случае AJAX? Сервер не знает, сколько пользователей активно в данный момент. Клиент отправил запрос, создалось соединение, запрос пришёл на сервер, сервер ответил на него, соединение разорвалось. Если юзер уйдёт с сайта, то сервер просто не будет получать запросы. Как он определит, ушёл ли юзер или просто таймаут ещё не сработал? Можно, конечно, на сервере хранить список с пользователями, которые что-то прислали и раз в N секунд выкидывать протухших. Но это дополнительная нагрузка на серв, который и так будет нагружен огромным количеством периодических запросов (выгоднее держать 1000 открытых соединений, чем раз в секунду открывать и закрывать по тысячи соединений).
    Вот тебе ещё простой пример: есть 3 пользователя. Один ничего не пишет и каждые 3 секунды отправляет запрос на получение сообщений. 2 других каждые полсекунды отправляют сообщения. Сервер может только догадываться, в сети ли необщительный юзер, или у него таймаут не вышел. А до тех пор, он хранит все сообщения от 2-го и 3-го пользователей. Но они уже получили сообщения друг от друга, поэтому надо где-то хранить инфу для каждого пользователя, какие сообщения он уже получал, а какие - нет. Можно, конечно, и сообщения хранить только некоторое время, и отправлять на клиент всё, что есть, а уже на клиенте пропускать дубликаты. Но это, опять же, доп. нагрузка на сервер и клиент.

    В итоге, надо придумать довольно сложную логику хранения информации, которую надо отправить пользователям, да и список самих пользователей как-то хранить и мониторить. В итоге, куча малких запросов. которые будут просаживать сервер и нетривиальная система оповещений, которая, скорее всего, будет часто выдавать ошибки.
    Ответ написан
    5 комментариев
  • Совет начинающему программисту. Как следует подходить к приобритению навыка OOP?

    @veitmen
    Почитал ответы.

    Могу только посоветовать еще развивать объектное мышление. Да, книги - хорошо. В них вы начнете понимать как использовать инструменты ООП и для чего они нужны. Но проектировать ваши типы вы научитесь только после того, когда четко начнете использовать объектное мышление. Пробуйте идя по улице смотреть на то, что вас окружает. И думайте о том, как любой окружающий объект переложить на код. Как сделать потом так, что бы эти объекты было проще создавать с минимальным количеством кода (научитесь использовать наследовани и полиморфизм). Почему что то из реализации нужно скрывать от пользователя (инкапсуляция). Начните думать какую можно создать иерархию классов для нематериальных вещей (процессы, связи, чувства). Когда вы смотря на задачу (подчеркну, что задача любая), будете видеть какие объекты вам нужны и как они взаимодействуют, то значит вы научились ООП.

    ООП - лишь еще один инструмент, не думайте что это золотая пуля. Состояние, в целом - зло.
    Ответ написан
    2 комментария
  • Как правильно сделать выборку через ORM django?

    winordie
    @winordie
    Лучшая документация -- исходники
    Element.objects.filter(data__showing=2, data__useractive=user.id).aggregate(sum_weight=Sum('weight'))
    Ответ написан
    1 комментарий
  • Как сделать случайное число не случайным?

    @vilgeforce
    Раздолбай и программист
    Первый вызов rand показывает в какие "проценты" попадает следующее число, а потом дергается второй раз rand с нужными границами для получения самого числа, причем границы в зависимости от первого.

    Касательно же случайности-неслучайности, rand в вашем случае наверняка не выдает случайной (!!!) последовательности.
    Ответ написан
    3 комментария
  • Как вывести в админке ImageField Django?

    crazyzubr
    @crazyzubr
    Python backend-developer
    В классе админки нужно добавить:

    def icon_tag(self, obj):
        if not (obj.pk and obj.icon):
                return ''
        return u'<img src="%s" />' % obj.icon.url
    icon_tag.short_description = 'Icon'
    icon_tag.allow_tags = True


    И добавить в ридонли:
    readonly_fields = ('icon_tag',)
    Ответ написан
    Комментировать
  • Как в Django передать JavaScript-ом токен для метода POST при динамическом обновлении страниц?

    barker
    @barker
    Миллион же ответов в инете гуглится. Я чаще всего в таких случаях (т.е. во внешних каких-то более-менее повторно используемых скриптах) тупо выношу токен в основную страницу, потом использую просто как JS-переменную: dark-barker.blogspot.ru/2013/10/django-csrftoken-a...
    Ответ написан
    5 комментариев
  • Общие вопросы по Flask?

    zasqer
    @zasqer
    4) по поводу батареек:
    Flask-Login - аналог Django'вской модели User'a.
    Flask-SQLAlchemy - аналог Django ORM, только круче, хотя подключать немножечко сложнее.
    Flask-WTF - аналог Django Forms, не берусь сказать, что лучше.
    Flask-Script - аналог Django manage.py, который нужно допиливать самому, но мне нравится.
    Flask-Admin - аналог админки Django, очень простенький. Тут Django на голову выше.
    Flask-Restless - для создания REST API, аналогом у Django не пользовался, не могу сравнить.
    Flask-DebugToolbar - аналог дебаг панели Django, но попроще.

    Кроме того Armin Ronacher делает https://github.com/pocoo/metaflask , проект, который должен немного навести порядок в екосистеме Flask. Пока ещё в разработке.

    Если кто знает и пользовал путёвые расширения для тестирования и интеграции с соц-сетями - напишите плиз здесь в коментах.
    Ответ написан
    Комментировать
  • Как имитировать клик по элементу на JQuery?

    cha-cha
    @cha-cha
    trigger("click") на самом деле просто стреляет клик-эвент.
    Используйте .click().

    $('#new a')[0].click();
    Ответ написан
    3 комментария
  • Где посмотреть видео про использование Git?

    @ATreitjak
    githowto.com/ru - по шагам описано что к чему
    Ответ написан
    Комментировать
  • Как правильно составить запрос для ManyToMany в Django?

    @denizen
    У вас избыточная модель получается: класс Member - совершенно лишний. many-to-many можно делать сразу для соотношения User<->Group. А sql-таблица, подобная вашему классу Member, будет сделана в Django ORM автоматически.
    Ответ написан
    1 комментарий
  • Как правильно составить запрос для ManyToMany в Django?

    pavel_salauyou
    @pavel_salauyou
    Symfony2 & Angular разработчик
    Не совсем понимаю что у вас должно быть, но если юзер должен быть в группе то нужно так

    class User(AbstractUser):
        groups = models.ManyToManyField(User, through='Group')


    потом

    user = request.user
    groups = user.groups.all()
    Ответ написан
    3 комментария
  • Python и XML

    @Ano
    Ну вы все даете. Вы в курсе, что у python есть документация? С примерами.

    docs.python.org/library/xml.dom.minidom.html

    Вы в курсе, что принципы DOM везде одинаковые, и есть текстовые узлы?

    >>> dom = parseString('<doc><name>Non nom</name><hobby>python</hobby></doc>')
    >>> textnode = dom.getElementsByTagName('name')[0].childNodes[0]
    >>> print textnode
    <DOM Text node "u'Non nom'">
    >>> textnode.nodeType == textnode.TEXT_NODE
    True
    >>> textnode.nodeValue
    u'Non nom'
    
    Ответ написан
    6 комментариев
  • Python и XML

    @shsmad
    вуаля

    from xml.dom.minidom import *
    
    xml = parse('document.xml')
    name = xml.getElementsByTagName('name')
    
    for node in name:
    	print node.childNodes[0].nodeValue
    
    Ответ написан
    3 комментария
  • Разделение монитора на "рабочие" области?

    если бы речь шла про линукс\бсд, то посоветовал бы xmonad :)
    Ответ написан
    Комментировать