• 16Apr

    elite-board Давно хотел переделать сайт своего отца, выдалась свободная минутка и… Это первый мой Django проект, увидевший мир.www.elite-board.net.ua доска объявлений. Ну и пока неделя работы, полет нормальный. Единственное, дизайн, рисовать я не умею, так что особо не стебайтесь, но критику в любом случае выслушать готов.

    Что внутри:

    • I18N — но этим уже никого не напугаешь
    • openid авторизация — почти самописная. Это помимо базовой.

    • Поиск — django-sphinx.
    • Вложеная навигация по тегам.
    • Автодогрузка объявлений при переходе в конец страницы.
    • предпросмотр заотаченых к объявлению картинок

    • Ну и контроль ошибок и CSV логи. Если на сайте происходит сбой, пользователю предлагают самому дополнить информацию о том, как он её получил.

    Хочу услышать вашу критику.

    Rating 3.00 out of 5
    [?]

    Tags: , , ,

  • 15Apr

    crashtestdummyКоротенько изложу идею. И как всегда, уверен, что она не нова, т.к. ничего особенного в ней нет.

    Итак. Тестирование. Для меня синоним закрепления функционала. И тесты я как правило пишу, когда у меня утряслась бизнес логика и архитектура проекта, и даже отчасти написана документация ( в тех местах, где было не лень). Когда у вас просто класс, который супирует 2 числа и выдает результат, то написать автоматические тесты – не проблема. У меня стала задача написание автоматических тестов для сетевого приложения.

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

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

    Вот и все. Ваше мнение?

    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 15Apr

    govnoblog

    Rating 3.00 out of 5
    [?]

    Tags: ,

  • 10Apr

    patient-monitoring-connectivityПосмотрел его доклад, впечатлился, решил вынести некоторые сноски.

    Сравнение большого числа баз данных

    Системы мониторинга и анализа:

    Contrib/pgbanch
    – простая программа для запуска benchmark тестов PostgreSQL
    Cacti(www.cacti.net)/Nagious (www.nagios.org) – системы мониторинга различных параметров системы
    Bonnie++(sourceforge.net/projects/bonnie) тестирование винта и файловой системы
    pgFouine(pgfouine.projects.postgresql.org) – анализатор логов. Написан на пхп

    Статьи

    PostgreSQL Hardware Performance Tuning
    Performance Tuning
    Настройка производительности
    Инструкция по оптимизации
    GUCs: A Three Hour Tour

    Также упоминался connection pooler from Skype pgBouncer

    Если у кого то есть еще интересные ссылки по теме, то кидайте, буду только рад. Спасибо.

    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 07Apr

    Если вы хотите пользоваться всеми переменными окружения Django, но при это “находится” не врутри какой либо вьюхи, т.е. код запускается не через Http запрос, а к примеру – через крон, то начинаться этот скрипт у вас должен такими словами, и лежать он должен в коре вашего проекта:

    1. #!/usr/bin/python
    2. # coding: utf-8
    3. from django.core.management import setup_environ
    4. import settings
    5. setup_environ(settings)

    Успехов…

    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 02Apr


    Мои результаты мне давно известны,
    я только не знаю, как я к ним приду.
    К. Гаусс

    У меня плохая память, я конечно над ней работаю, но все же она плохая. Вообще все говорят, что это отличная отмазка, и снятие любой ответственности. По сути да, отмазка конечно супер, но отвечать все равно приедается. Собственно одна из причин того, что я завел этот блог и есть моя плохая память, т.к. до многих вещей необходимо доходить по нескольку раз. Пока ты просто не возьмёшь это и где то не запишеш. Главное не забывать в нем писать :)

    Доделал один сайт, и поиск к нему решил прикрутить не стандартный фуллтекст индекс из PostgreSQL а прицепить сюды енджин сторонний. Выбор мой остановился на Shinx ( сразу скажу, я не проводил углублённых анализов, на тему какой же движок заюзать. Это не надо пока. ) . Да, и есть маленькое затруднение в поиске инфы — я когда гуглил, то все время переципался через генератор документации для питона, с таким же названием.

    Так. От слов к делу.

    на форуме у них нашёл описание настройки под Debian. Так что ниже кратко:

    1. adduser –system –home /var/sphinx –uid 999 –disabled-password –disabled-login sphinx
    2.  
    3. mkdir /var/shpinx/bin
    4. mkdir /var/shpinx/etc
    5. mkdir /var/shpinx/log
    6. mkdir /var/shpinx/lib
    7. mkdir /var/shpinx/run
    8.  
    9. cd /tmp
    10. wget http://sphinxsearch.com/downloads/sphinx-0.9.7-rc2.tar.gz
    11. tar -xzvf sphinx-0.9.7-rc2.tar.gz
    12. cd sphinx-0.9.7-rc2
    13. ./configure –with-pgsql –with-pgsql-includes=/usr/include/postgresql/ –with-pgsql-lib=/usr/lib/postgresql/8.3/lib/
    14. make
    15.  
    16. wget http://www.klaus.gr/pub/sphinx
    17. mv sphinx /etc/init.d/
    18. chmod 755 /etc/init.d/sphinx
    19. ln -s /etc/init.d/sphinx /etc/rc2.d/S92sphinx
    20. chown -R sphinx /var/sphinx
    21. chmod -R 711 /var/sphinx/
    22. cd /var/spinx/etc
    23. cp -p sphinx.conf.dist sphinx.conf
    24. vim sphinx.conf

    Далее в секции searchd должно быть:

    1. pid_file = /var/sphinx/run/searchd.pid
    2. query_log = /var/sphinx/log/query.log
    3. log = /var/sphinx/log/searchd.log
    4. address = 127.0.0.1

    В секции index:

    1. path = /var/sphinx/lib/sphinx

    И запуск

    1. /etc/init.d/sphinx start

    На этом месте должен уже работать демон.

    Вот скрипт пепеиндексирования всех индексов

    1. /var/sphinx/bin/indexer –all –rotate –config /var/sphinx/etc/sphinx.conf

    Далее добавляем свой индекс:

    1. source board_posts
    2. {
    3.     type                = pgsql
    4.     sql_host            = 127.0.0.1
    5.     sql_user            = oduvan
    6.     sql_pass            = gravicapa
    7.     sql_db              = eliteboard
    8.     sql_port            =
    9.     sql_query_pre       =
    10.     sql_query_post      =
    11.     sql_query           = \
    12.         SELECT id, title, text, tags, location, to_contact, how_contact, owner_id, count_files_other, count_files_images, create_time FROM board_posts
    13.     sql_query_info      = SELECT * FROM `board_posts` WHERE `id` = $id
    14.     # ForeignKey's
    15.     sql_attr_uint       = owner_id
    16.     # DateField's and DateTimeField's
    17.     sql_attr_timestamp   = create_time
    18. }
    19.  
    20.  
    21. index board_posts
    22. {
    23.     source          = board_posts
    24.     path            = /var/sphinx/data/board_posts
    25.     docinfo         = extern
    26.     morphology      = none
    27.     stopwords       =
    28.     min_word_len    = 2
    29.     min_prefix_len  = 0
    30.     min_infix_len   = 0
    31.     charset_type    = utf-8
    32. }

    после этого создаем папку /var/sphinx/data/, переиндексируем, разрешим демону пользоваться нашими файлами

    1. chown -R sphinx /var/sphinx

    и передерним демона:

    1. /etc/init.d/sphinx restart

    Теперь надо рассказать джанге, как им надо пользоваться. Инсталим django-sphinx

    1. cd /tmp
    2. svn checkout http://django-sphinx.googlecode.com/svn/trunk/ django-sphinx
    3. cd django-sphinx
    4. sudo python setup.py install

    я ставил 0.9.8, так что в settings.py вашего проекта прописываем :

    SPHINX_API_VERSION = 0×113

    в моделе, по которой вы хотите вести поиск привязываем свойство, с указанием весов полей.

    1. class MyModel(models.Model):
    2.  search = SphinxSearch('board_posts',weights={
    3.                     'title': 100,
    4.                     'tags': 80,
    5.                     'description': 40,
    6.                 })

    Вот и все. Последнее — это выполнить поиск:

    1. queryset = MyModel.search.query('query')

    Вот так кратко, сухо, критикуйте!

    Rating 3.00 out of 5
    [?]

    Tags: , , , , , ,

  • 01Apr

    pakye_veshi
    в этот знаменательный день :)

    Rating 3.00 out of 5
    [?]

    Tags:

   

Recent Posts

Recent Comments

  • Я просто оставлю это тут: ...
  • спасибо...
  • Если вдуматься в каждое слово, то время беСконечно в русском...
  • Спасибо, Евгений, исправленно.P.S.: перехал на диску...
  • за опечатку - спасибо...