• Как сделать сортировку полей?

    alternativshik
    @alternativshik
    Ну наверное надо бы в модели добавить дату, категорию, а потом прочитать доку по Джанге и посмотреть в ней, как делать сортировку.
    Ответ написан
    1 комментарий
  • Как принимать события одновременно от несколько устройств?

    itertools.izip объединяет два итератора так как вы хотите, но вероятно вам нужно не это, ведь события из разных файлов устройств могут идти с разной частотой. Лучше посмотрите в сторону select.

    UPDATE: даже пример имеется python-evdev.readthedocs.org/en/latest/tutorial.ht...
    Ответ написан
    1 комментарий
  • Как организовать разработку reusable app для Django?

    qnub
    @qnub
    Наёмный разработчик
    Мы активно используем собственные батарейки для Django. Вот типичная структура одной:
    e1d7f88ef94248248ed02367d13fb1dd.png
    scr — корень Python пакета (как для PyPi)
    dvhb_docs — сама батарейка
    testproject — минимальный проект Django для тестирования батарейки

    Пример setup.py:
    # -*- coding: utf-8 -*-
    
    import os
    
    from distutils.core import setup
    
    __version__ = "0.1.0"
    
    README = open(os.path.join(os.path.dirname(__file__), 'README.md')).read()
    os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
    
    tests_require = [
        'Django>=1.5',
        'model-mommy',
        'south',
        'pyelasticsearch',
        'elasticsearch',
        'django-haystack>=2.1.0',
        'djangorestframework',
        'django-appconf',
        'webtest',
        'django-webtest',
        'django-celery',
        'django-mptt'
    ]
    
    setup(
        name='dvhb_docs',
        version=__version__,
        packages=['dvhb_docs'],
        include_package_data=True,
        license='private',
        description='Django application for document store and management.',
        long_description=README,
        url='https://github.com/dvhb/dvhb_docs',
        author='Vadim Lopatyuk',
        author_email='qnub@example.com',
        classifiers=[
            'Environment :: Web Environment',
            'Framework :: Django',
            'Intended Audience :: Developers',
            'Operating System :: OS Independent',
            'Programming Language :: Python',
            'Programming Language :: Python :: 2.7',
            'Topic :: Internet :: WWW/HTTP',
            'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
        ],
        install_requires=[
            'Django>=1.5',
            'south',
            'pyelasticsearch',
            'elasticsearch',
            'django-haystack>=2.1.0',
            'djangorestframework',
            'django-appconf',
            'django-celery',
            'django-mptt'
        ],
    )


    MANIFEST.in
    recursive-include dvhb_docs *.py *.html *.css *.js *.gif *.png *.jpg *.xap *.swf


    requirements.txt файл зависимостей для виртуального окружения — по желанию (там можно включать что-то для разработки пакета, что нет смысла указывать в setup.py).

    К слову новая (после 1.4) структура проекта Django способствует удобному отделению батареек. Т.е. testproject может быть обычным Вашим проектом и на том же уровне каталога будут лежать разрабатываемые модули, которые потом удаляются и ставятся уже из репозитория.

    В миграции South надо вносить правки в слепок таблиц, чтобы не было конфликтов с кастомными моделями пользователей. Если нет каких-то хитрых действий с юзером то типичную версию:
    {
    …
            u'auth.user': {
                'Meta': {'object_name': 'User'},
                'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
                'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
                'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
                'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
                u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
                'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
                'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
                'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
                'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
                'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
                'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
                'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
                'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
            }
    }


    мы меняем на:
    from django.conf import settings
    …
    {
    …
            settings.AUTH_USER_MODEL.lower(): {
                'Meta': {'object_name': settings.AUTH_USER_MODEL.split('.')[-1]},
                u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            }
    }


    А всякие указания на неё в ключах других моделей вроде:
    'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'author'", 'blank': 'True', 'to': "orm['auth.User']"}),


    на:
    'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'author'", 'blank': 'True', 'to': u"orm['{0}']".format(settings.AUTH_USER_MODEL)}),


    Ну и последнее, ставим мы их таким образом (теперь мы работаем со своим GitLab, но для примера приведу GitHub):
    pip install git+ssh://git@github.com/dvhb/dvhb_docs.git@0.1.0#egg=dvhb_docs==0.1.0


    Тут есть пара нюансов:
    git+ssh://git@github.com/dvhb/dvhb_docs.git — линк для установки пакета с помощью pip из git (отличается от обычного линка на репу для самого git: git@github.com:dvhb/dvhb_docs.git).
    @0.1.0 — это обычный tag в git репозитории. Так можно устанавливать необходимую версию пакета.
    #egg=dvhb_docs==0.1.0 — это то, как пакет будет предствален в окружении python. Т.е. в этом случае он будет записан как dvhb_docs версии 0.1.0.

    В начале мы пытались и юзерский фронтенд засовывать в батарейку, но он очень сильно меняется от случая к случаю в итоге с этой затеей завязали и стали просто делать общие библиотеки на JS, которые ставятся через Bower (по аналогии с питоноим). Остальные нюансы уже дописываются в самом проекте.
    Ответ написан
    Комментировать
  • Continuous Integration для Django, кто чем пользуется?

    Rrooom
    @Rrooom
    Свой jenkins. Плюс django-jenkins.
    Ответ написан
    Комментировать
  • Какие существуют русскоязычные онлайн университеты?

    Вот здесь есть список отдельных курсов.

    А так тоже прохожу курсы на Coursera (там есть и на русском) и Edx. Сертификаты с этих курсов, имхо, скоро будут котироваться больше, чем дипломы наших средненьких ВУЗов.
    Ответ написан
    Комментировать
  • Как правильно считать часы при «почасовой оплате»?

    fear86
    @fear86
    Developer
    Можно просто умножить рейт на 2 или на 3 и продолжить работать так же.

    Лично я корректирую время на свое усмотрение, особенно если у меня уже есть готовое решение (ну или большая часть нужного функционала). Это такая же торговля как любая другая.
    Ответ написан
    2 комментария
  • Курсовая разница при получение валюты

    alekciy
    @alekciy
    Вёбных дел мастер
    Я вот как ИП на УСН во избежании этих танцев с бубном вообще не делаю продажу валюты. Пришло на транзитный счет, по курсе ЦБ РФ считаю сумму в рублях и именно её и отражаю в налогах. А с основного валютного счета перевожу валюту же на счет физлица в другой банк. Поэтому ни каких курсовых разниц не возникает. Но я так понимаю, используется не УСН?
    Ответ написан
  • Первая книга по программированию

    DarthRamone
    @DarthRamone
    SICP -> HtDP -> TaPL
    Ответ написан
    Комментировать
  • Может ли кто-нибудь поделиться кусочком сервера?

    Cactus
    @Cactus
    Форменное жлобство
    Ответ написан
    Комментировать
  • Выбор случайного значения

    @skomoroh
    import random
    import bisect
    
    # наш список
    l = list(range(12,50))
    
    # задаем веса, например: вес=70-позиция, можно любой
    lw = [(i, 70-i) for i in l]
    
    # суммируем веса
    tw = 0
    wd = dict()
    for i, w in lw:
        tw += w
        wd[tw] = i
    wk = sorted(wd.keys())     
    
    # получаем наше значение
    value = wd[wk[(bisect.bisect_right(wk, random.random()*tw))]]
    
    Ответ написан
    1 комментарий
  • Первая книга по программированию

    @aNDREIQA
    Структура и интерпретация компьютерных программ.
    Начните с нее и вы обязательно добьетесь высот в программировании.
    Ответ написан
    Комментировать
  • Принцип построения моделей БД для PHP?

    aldigit
    @aldigit
    Здравствуйте, Владислав

    У Вас в профиле ссылка на очень хорошую книжку Мартина Фаулера: martinfowler.com/books.html#eaa

    Из неё про Active Record: martinfowler.com/eaaCatalog/activeRecord.html
    Data Table Gateway: martinfowler.com/eaaCatalog/tableDataGateway.html
    Data Mapper: martinfowler.com/eaaCatalog/dataMapper.html

    Теперь немного рассуждений из личного опыта.

    Привязка доменной модели к реляционной сложна исходя из следующих факторов:

    * Гранулярность (доменная модель часто имеет большую детализацию)
    * Наследование (нужно выразить в реляционной схеме данных)
    * Идентичность (определяется равенством но коде и ID в БД)
    * Ассоциации (один ко многим в коде выражается массивом, в схеме БД через внешние ключи)
    * Навигация по данным (в коде — ссылки, в схеме БД joins)

    В случае, если доменная модель сложна, и мы сталкиваемся со множеством перечисленных трудностей, то рекомендуется использовать Data Mapper. Это позволит доменным объектам не беспокоиться о существовании БД.

    Если предметная область не слишком сложная, то может быть удобным добавить Persistence методы к классам доменной модели (Active Record). Это облегчит программистам процесс написания сервисного кода.

    В случае, если доменная модель удобно ложится на реляционную схему, но мы всё равно хотим обособить SQL для соблюдения принципа персональной ответственности, то рекомендуется использовать Data Table Gateway

    Это довольно общие слова. Если уточните вопрос, буду рад уточнить и ответ :)
    Ответ написан
    Комментировать
  • Функционал vs Функциональность?

    Weageoo
    @Weageoo
    Считаю «функционал» программерским жаргонизмом-сокращением, таким же, как «комп», «клава» (вики согласна); сам обычно это слово не употребляю, но всегда, в зависимости от контекста, понимал под ним либо синоним «функциональность», «функциональные возможности», «функциональное наполнение», «набор возможностей»; либо функцию, принимающую вектор и возвращающую скаляр. Сейчас вот узнал, что есть и третье значение сексологического характера, что, тем не менее, никоим образом не уничижает жаргонного значения данного слова.

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

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

    «Уважаемые хабраюзеры! По возможности, старайтесь не использовать в своих статьях жаргонизмы и обсценную лексику. Старайтесь, чтобы любое слово/фраза в Вашей статье не допускало множественного толкования (с учётом контекста) при условии использования только общепринятых значений слова/фразы.»

    Вообще говоря, на данный случай предусмотрен пункт 8 правил.
    Ответ написан
    2 комментария
  • На чем писать проект сегодня? На PHP(Zend, Symfony) или Python(Django)?

    tripiz
    @tripiz
    На Джанге работает много порталов Яндекса — это о чем да говорит. Однако, если вам надо что-то поаскетичнее, пошустрее, то pylons (тоже на питоне). Рельсы считаю слишком тормозными, хорошо для интрасетевых порталов где нет напряга в скорости, и можно использовать чистый ООП руби во всей красе, но на нагруженных проектах за это придется заплатить.
    Ответ написан
    5 комментариев