27 мая 2010 г.
Сотмаркет наглишен бабкен пиздунг. Батарейка 2.
В итоге, батарейка оплачена (4500), но в наличии появиться в лучшем случае через 2 недели, при том никто мне не гарантирует, что через 2 недели она будет. Никаких извинений по этому поводу мне никто не приносил. Все (онлайн консультант, тетя на телефонной линии софтмаркета, персональный менеджер) считают, что все произошедшее в порядке вещей.
Посылаю лучи поноса этой “замечательной” организации и никому не советуют покупать в sotmarket’е.
UPD 18.04.2012 Позвали работать в сотмаркете php-программистом. Блин, что с это конторой не так? Я python-программист, не php.
Django 1.2 и 1.2.1. Проблемы с контекстом?
После переезда с 1.1.1 на 1.2, а затем и на 1.2.1, заметил одну особенность: в некоторых ситуация в шаблонах теперь нет привычного контекста user’а. У меня это проявляется в следующем случае. Есть базовый шаблон (base.html), от него наследуется шаблон, в который подставляется (include’ом) шаблон-кусок. Так вот в последнем (шаблоне-куске) не видится user. В 1.1.1 таких проблем 100% не было.
Не знаете в чем тут может быть дело? Я тут threadlocals’ом выкручиваюсь…
26 мая 2010 г.
Параллели с методами разработки через тестирование
Есть такой принцип разработки продукта – через тестирование. Программист создает продукт с минимальным набором функции, отдает его заказчику для эксплуатации и ждет от заказчика замечаний. В процессе эксплуатации, программист продолжает добавлять новые функции и не забывает реагировать на замечания, которые теперь могут касаться ещё и новых ошибок, возникших в следствии добавления новых функции.
Теперь вопрос: можно ли аналогичным способом поступить при проектировании программного продукта? Взять, да и написать руководство пользователя до окончательного написания программного кода, реализующего функции описанные в руководстве? Пользователь сможет сравнить то, что написано в руководстве с собственными представлениями о правильном, красивом и удобном ПО.
Бред, или эту идею можно использовать?
19 мая 2010 г.
Ширина Django-tinymce редактора в django-cms
Столкнулся с очередной неприятностью – в django-cms с подключенным tinymce редактор по умолчанию фиксированной ширины. Решение много проще, чем я в начале думал. Оказывается, django-tinymce использует переопределение дефолтного конфига через Ваш файл настроек проекта. Пример моего конфига:
TINYMCE_JS_URL = MEDIA_URL + 'js/tinymce/jscripts/tiny_mce/tiny_mce.js'
TINYMCE_JS_ROOT = MEDIA_ROOT + 'js/tinymce/jscripts/tinymce/jscripts/tiny_mce'
TINYMCE_DEFAULT_CONFIG = {
'theme': "advanced",
'width': "100%",
'height': "500px",
}
16 мая 2010 г.
Как определить раздел в django-cms?
На одном из django-сайтов, активно использующих django-cms, понадобилось менять флэшку в зависимости от раздела. Не придумал ничего лучше смотреть кусок пути:
{% ifequal request.path_info|slice:":10" '/ekologiya' %}
...
{% endifequal %}
Дело в том, что в джанго-цмс у страниц может быть множество потомков, потому то и приходиться смотреть на кусок uri.
Может быть Вам известен более правильный путь? (более, т.к. этот тоже работает :) )
ЗЫ. Конкурс на угадывание сайта, для которого это понадобилось: приз – ссылка с 3 моих сайтов (кому только они нужны?) на сайт угадавшего.
15 мая 2010 г.
О-оу-и-я-и-е! Батарейка
У моего рабочего Dell XPS M1330 давненько уже сдохла батарея (был перепад напряжения). Нашел в России только одно более-менее вменяемое место для покупки:
http://www.sotmarket.ru/product/akb_dell_xps_m1330_pov_emk.html
4500 – цена, кончено, убийственная, но что делать?
Заказал, жду теперь…
Скрипт для раскрутки twitter аккаунта на python (tweepy)
Привет, друзья!
Недавно начал писать сайт для автораскрутки в twitter. В основе скрипт, который фоловит друзей друзей. Написано отвратно, но при соблюдении рекомендации результат дает:
import tweepy
for user in TwiAccount.objects.all():
auth = tweepy.BasicAuthHandler(your_user_name, your_user_password)
def follow_his_friends(username):
user = tweepy.api.get_user(username)
for friend in user.friends():
try:
tweepy.API(auth).create_friendship(friend.id)
except:
follow_his_friends(friend.screen_name)
follow_his_friends('markeyev')
Tweepy, кстати, невероятно хорош - когда я искал python-библиотеку он был лучшим по соотношению понятность/возможности.
Функциональности у него тоже хватает – есть даже авторизация по openid. Собственно openid я и планирую использовать для сайта, т.к. не каждый доверить не знакомому сервису свой аккаунт.
Подобные скрипты очень востребованы на зарубежных сайтах фриланса и будут продаваться до тех пор пока твиттер присылает уведомления о новых фоловерах и не уведомляет об отписавшихся. Стратегия продвижения благодаря этой особенности проста как мычание: фоловить по 50-100 аккаунтов в день (чтоб не забанили за strange activity) и затем быстренько от них отписываться.
Опыты показали, что strange activity наступает при 700 новых фоловингах в день (то есть когда Вы фоловите кого-либо).
Стали бы Вы пользоваться таким сервисом, который я пишу, или может мне бросить эту дурацкую затею?
14 мая 2010 г.
www.russned.tv
Вот и подошел к концу первый этап разработки www.russned.tv – это видеохостинг на django. Из названия ясно, что сайт сделан для наших друзей - Русской недели. При разработке использована куча всяких django-приложений:
- django-cms (с кучищей плагинов)
- django-profile (понадобиться для регистрации и, поздней, для добавления роликов пользователями)
- django-ratings
- django-ajaxcomments
- + набор собственных приложений, которые теперь переносятся из проекта в проект.
У некоторых роликов есть полная avi-версия.
Django-сообществу возможно, будут интересны следующие куски кода этого проекта:
1. Список последних просмотренных роликов
videos = MyVideo.objects.annotate(last=Max('videoview__when')).order_by('-last')[:limit]
Между прочим, универсальный вариант GROUP BY средствами django ORM’а.
2. Ролики отсортированные по соотношению рейтинга к кол-ву голосов:
videos = MyVideo.objects.extra(select={
'a_rating': 'rating_score/rating_votes'
}).order_by('-a_rating')[:limit]
Это специфика использования djangoratings – кто использовал поймет ;)
3. Ролики с сортировкой по кол-ву комментариев (только откомментированные):
videos = MyVideo.objects.annotate(comments_count=Count('comments')).\
exclude(comments_count=0).order_by('-comments_count')[:limit]
В основе файл models:
class MyVideo(models.Model):
...
title = models.CharField(_(u'название'), max_length=250, unique=True)
desc = models.TextField(_(u'описание'), max_length=250, null=True, blank=True)
category = models.ForeignKey(Category, verbose_name=_(u'категория'), blank=True, null=True)
tags = TagAutocompleteField()
rating = RatingField(range=5, weight=1, can_change_vote=True, allow_anonymous=False)
comments = generic.GenericRelation(Comment, content_type_field="content_type", object_id_field="object_pk")
class VideoView(models.Model):
video = models.ForeignKey(MyVideo)
when = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, null=True, blank=True, editable=False)
Смотрите, качайте, советуйте друзьям! www.russned.tv.
Яша и мой блог
Яндекс уверен, что на страницах моего блога полно скрытого текста. Я.Вебмастер мне об этом давно говорит, но вот что странно: с момента наступления санкций со стороны Яши к моему блогу кол-во подписчиков в RSS увеличилось с 22 до 107 (107 появился сегодня), а кол-во постоянных читателей с 14 до 28. Может быть кто-то знает в чем тут разгадка?
13 мая 2010 г.
О пользе мозга
Пришёл забавный спам:
Здравствуйте!
Я составил коммерческое предложение на продвижение вашего сайта - gmail.com
Пожалуйста ознакомитесь:
Схема работы:
…бла…бла..бла..Если у вас возникнут какие либо вопросы, обращаетесь:
…С уважением, Владислав.
Владислав, спасибо кончено, но gmail’у Ваша раскрутка не нужна.