Архивы: Июль 2011

Установка wget на Mac OS

Скачивай пакет wget от сюда http://ftp.gnu.org/gnu/wget/ (последний пакет wget-1.12.tar.gz)

распаковываем архив и устанавливаем пакет

tar -xvf wget-1.12.tar.gz
cd wget-1.12
./configure
sudo make install

Все wget установлен и работает на ура.

Переопределение методов save() или пишем сигнал post_save() — Django

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

# Модель подписавшихся на рассылку
class Subscrib(models.Model):
    Список объектов

# Модель новостей
class News(models.Model):
    Список объектов

def go_subscrib(sender, instance, created, **kwargs):
    if created and instance.status == 1:
        title = instance.title.encode('utf-8') # у меня на одном из проектов ругался на кодировку
        for item in Subscrib.objects.all():
            to_email = item.email
            subject = 'Новая новость на сайте'
            html_content = '<p><i>Здравствуйте</i></p>'
            html_content += 'Новая новость: <a href="http://developtolive.com/news/%s/">%s</a>' % (instance.id, title)
            html_content +='<p><i>Отписаться от рассылки можно по <a href="http://developtolive.com/send/sub/no/?email=%s">ссылке</a></i></p>' % (item.id)
            html_content += '<p><i>Всего доброго.</i></p>'
            from_email = 'i@developtolive.com'
            msg = EmailMessage(subject, html_content, from_email, [to_email])
            msg.content_subtype = "html"
            msg.send()
signals.post_save.connect(go_subscrib, sender=News)

Или же вот такая задача: произвести рассылку при сохранении новости. Тогда мы переопределяем метод save() в модели News

# Модель новостей
class News(models.Model):
    Список объектов
    def save(self):
        for item in Subscrib.objects.all():
            to_email = item.email
            subject = 'Обновление новостей на сайте'
            html_content = '<a href="http://developtolive.com/news/%s/">%s</a>' % (self.id, self.title)
            from_email = 'i@developtolive.com'
            msg = EmailMessage(subject, html_content, from_email, [to_email])
            msg.content_subtype = "html"
            msg.send()
        super(News, self).save()

Наркомансое группирование по годам — Django

Вот нудно мне сгруппировать новости по году, поле храниться как datetime.date.today. Почему то захотелось по наркоманить и пойти не стандартным способом=) В общем получился python код =)

Запихал все в шаблонный тег, ну и вот, что получилось:

@register.simple_tag
def list_year():
    import itertools
    news = News.objects.filter(status=1)
    years = [str(item.creation_date.year) for item in news]
    dates = list(enumerate(years, start=1))
    result = [key for key,group in itertools.groupby(dates, key=lambda x: x[1][:11])]
    result_html = ''
    for item in result:
        result_html += 'За <a href="?year=%s">%s</a> год<br />' % (item, item)
    result_html += '<br />'
    return result_html

Ошибки и заблуждения заказчиков при разработке корпоративного сайта

Ошибки и заблуждения заказчиков при разработке корпоративного сайта

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

Но зачастую всё бывает иначе. Сайт запущен, а клиентов не прибавляется. В то же время у конкурентов дела идут как нельзя лучше. Заказчик обвиняет во всем разработчиков сайта, обращается к новым разработчикам, сайт переделывается, но история повторяется. В чем же ошибка? Давайте разберемся.

Ошибки и заблуждения заказчиков при разработке корпоративного сайта

Ошибки на этапе проектирования сайта

1. Разработку сайта можно поручить своему системному администратору.
Каким бы не был ваш системный администратор способным кадром, как правило, результат из этой затеи получается плачевным. Профессиональный сайт сделать под силу лишь команде, состоящей из специалистов разных предметных областей — маркетолога, аналитика, проектировщика, дизайнера, верстальщика, программиста, копирайтера, специалиста по продвижению. Сможет ли ваш системный администратор заменить этих специалистов?

2. Я не хочу заполнять ваши многостраничные опросники и анкеты! Я могу сообщить вам название своей фирмы, ее вид деятельности, дать визитку с логотипом. Мне нужен «просто красивый сайт», что тут непонятного?
К сожалению, визитки, или даже корпоративного буклета недостаточно для разработки профессионального сайта. Разработка сайта подразумевает не только графическое оформление, но и проектирование структуры разделов, навигации, представление ваших товаров и услуг в наиболее понятном и привлекательном виде. Поэтому для всех будет лучше, если вы ответите на все вопросы студии, изложенные в опроснике, причем подойдете к этим ответам осознанно. Иначе у студии не будет исходного материала для того, чтобы создать сайт, который будет полезен вам и вашим клиентам.

3. Можно создать качественный сайт в короткие сроки и почти бесплатно — в сети много таких предложений!
Действительно, ваш сайт может появиться быстро и за небольшие деньги, но скорее всего он будет низкого качества. Разработка сайта — это работа нескольких специалистов, у которых за плечами не один год опыта и огромный багаж знаний всех тонкостей этой весьма специфичной работы. Оценивать работу каждого из них в пару тысяч рублей абсурдно. Задумайтесь, кто эти люди, которые Вам предложили создать сайт за такую сумму. Помните, скупой платит дважды!

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

Ошибки при разработке дизайна сайта
5. Самое главное на сайте — это отличный дизайн!
На самом деле дизайн сайта важен только его владельцу, посетителям же намного важнее быстро найти нужный товар или услугу и контакты вашего офиса. Качественный дизайн необходим лишь на промо-сайтах, где ставка делается на презентативность и «вау-эффект».
Поставьте себя на место клиента, будете ли вы обращать внимание на дизайн сайта, если вам нужно быстро найти компанию-подрядчика среди десятка предложений? Клиент скорее всего выберет ту компанию, чей сайт откроется в считанные секунды и с первого взгляда будет понятно, какие товары и услуги предлагает компания.

6. Нарисуйте мне 3 варианта дизайна, а я выберу один!
Чтобы нарисовать дизайн, требуется немалое время дизайнеров, которое должно быть оплачено. Бесплатно рисовать несколько вариантов как правило согласны только непрофессионалы. Но это не означает, что они выполнят свою работу плохо. Любая веб-студия имеет портфолио, по которому вы можете сразу оценить ее уровень и принять решение, работать с этой студией или нет. Профессионалы своего дела обычно создают один вариант дизайна, чему предшествует разработка и утверждение дизайн-концепции будущего сайта. При таком подходе исключается необходимость выполнять несколько вариантов дизайна

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

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

Ошибки на этапе передачи контента

9. У нас нет контента для сайта. Придумайте тексты сами, а мы, если что подкорректируем.
Для того чтобы создать качественный контент для вашего сайта, нужно иметь четкое представление о вашей деятельности. Как правило, эту часть работы заказчик не хочет выполнять, либо у него нет времени. Поверьте, если вы четко не скажете «мы занимаемся тем-то и тем-то», то этого за вас не сделает никто.

10. Возьмите контент с такого-то сайта.
Многие заказчики считают, что можно скопировать информацию с сайтов конкурентов и разместить ее слово в слово у себя на сайте. Раз товары и услуги одни и те же, зачем же изобретать велосипед? Потенциальному клиенту действительно будет безразлично происхождение контента, а вот поисковому серверу будет понятно, что содержание краденное, и ничего хорошего это сайту не принесет. При таком подходе сложно попасть на первые страницы выдачи поисковых систем, а значит, вы будете теряеть значительную часть потенциальных клиентов.

11. Разработчики сайта обязаны знать, чем занимается компания заказчика и легко должны отличить фото нашей последней модели станка СДВ-12 от уже устаревшего СДВ-11А.
К сожалению это не так, для того, чтобы не допустить курьезных ситуаций, заказчику необходимо потратить время на сортировку и обработку информации.

12. Свой будущий сайт мы легко наполним сами!
Если речь идет о крупном корпоративном сайте, то подсчитайте, сколько может уйти времени на сбор информации, обработку изображений и их размещение. Сможете ли вы выделить сотрудника на столь продолжительное время?

Заблуждения относительно поискового продвижения сайта

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

14. Сайт достаточно один раз наполнить контентом.
Поисковые системы устроены так, что сайтам с часто обновляемой информацией отдается большее предпочтение. Информация имеет тенденцию терять свою актуальность. Не стоит удивляться, если позиции сайта в поисковых системах будут снижаться. Делайте сайт интересным, периодически обновляйте контент, и новые посетители не заставят себя ждать.

15. Сайт можно продвинуть на первую страницу поисковика за месяц.
Это заблуждение возникло из-за пестрых рекламных объявлений, которые предлагают вывести сайт в десятку за короткий срок. Как правило, быстрый взлет опасен полным удалением сайта из поисковой системы. Не покупайтесь на рекламу!

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

А теперь подытожим
При грамотном подходе можно создать качественный сайт с оптимальным соотношением составляющих цена, качество, время.

  • Проанализируйте сложившуюся ситуацию на рынке, подумайте о перспективах развития компании на ближайшие годы. Задумайтесь, какие задачи должен решать ваш будущий сайт
  • Запомните — корпоративный сайт делается для ваших клиентов, а не для вас самих, ваших коллег и друзей. Вы должны сформировать четкое представление о том, кто ваши клиенты и чего они хотят.
  • С первого взгляда на сайт должно быть понятно, какие товары и услуги предлагает ваша компания. Поверьте, в век, когда людям дорога каждая секунда, мало кто будет читать длинный текст о компании, всматриваться в фото директора и читать его приветственную речь на главной странице сайта.
  • При подготовке информации для сайта учтите, что копирование материалов с других сайтов может негативно повлиять на дальнейшее продвижение сайта в поисковиках. Пишите уникальные тексты!
  • После запуска сайта не пытайтесь раскрашивать заголовки и текст во все цвета радуги, делать текст мигающим и прочие глупости — это всё признаки дилетантства и снижает уровень доверия к вашему сайту.
  • При продвижении сайта учтите, что оно должно быть плавным и постепенным. Не пользуйтесь услугами горе-продвиженцев, которые обещают продвинуть сайт в считанные дни на первые позиции, иначе это может обернуться полным крахом вашего сайта.
Я надеюсь, что мои советы помогут Вам правильно спланировать свой будущий сайт и сделать правильный выбор подрядчика для разработки сайта.

Добавить литературу в редактор Coda

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

Book Title: Python
Book URL: http://docs.python.org/
Use For Mode: Python
Search URL: http://docs.python.org/search.html?q=*

Book Title: ColdFusion
Book URL: http://www.cfquickdocs.com/cf8/
Use For Mode: CFML
Search URL: http://www.cfquickdocs.com/cf8/%23*

Book Title: HTML Dog
Book URL: http://www.htmldog.com/
Use For Mode: HTML
Search URL: http://www.htmldog.com/search/?sp-a=sp1002e60e&amp;sp-q=*

Book Title: jQuery
Book URL: http://docs.jquery.com/
Use For Mode: Javascript
Search URL: http://api.jquery.com/?ns0=1&s=*

Book Title: MySQL
Book URL: http://dev.mysql.com/doc/
Use For Mode: SQL
Search URL: http://search.mysql.com/search?q=*&amp;ie=&amp;lr=lang_en

Расширение админки Django

Задача: вывести список линков принадлежащие текущему обьекту в административном интерфейсе Django. Клиент просит чтобы выводились перед панелью сохранения и открывались новые страницы по клику в новом окне.

Создаем шаблонный тег:

### templatetags/link_tags.py ###
from django import template
from member.models import Link
register = template.Library()

@register.inclusion_tag('link.html')
def display_link(object_id):
    link = Link.objects.filter(id=object_id)
    return { 'links': link }

Создаем шаблон для тега:

### templates/link.html ####

{% for link in links %}
    <a target="_blank" href="{{ link.url }}">{{ link.title }}</a>
{% endfor %}

Теперь расширяем админку:

### admin/change_form.html ###

{% extends "admin/change_form.html" %}
{% load link_tags %}

{% block after_field_sets %}
    {% if object_id %}
        {% display_link object_id %}
    {% endif %}
{% endblock %}

Блок after_field_sets – один из многих элементов, предоставляющих возможности для расширения приложения администрирования.

Вот такое мы добивались (снимок с другого проекты, тут выводятся линки вакансий):

Оформление шаблонного тега

Многие боятся лесть в дебри шаблонов и фильтров в  Django. А они же так просто создаются. Вот пример примитивного тега с получением в теге request объекта:

@register.inclusion_tag('new/userinfo.html', takes_context = True)
def address(context):
    request = context['request']
    address = request.session['address']
    return {'address':address}

Format DateTime in Django Admin

If you are trying to format a DateTimeField() field in the Django admin you may find it harder than you think. You would think that the DATE_FORMAT and DATETIME_FORMAT in settings.py would apply to the admin BUT it only applies to date formatting in the template.

At present there is no easy way to format the date but the following example of one method of how to do it:

class News(models.Model):
    headline = models.CharField(max_length=100)
    date = models.DateTimeField()
    article = models.TextField()
    published = models.BooleanField()

class NewsAdmin(admin.ModelAdmin):
    list_display = ('headline', 'format_date', 'published')

    def format_date(self, obj):
        return obj.date.strftime('%d %b %Y %H:%M')
    format_date.short_description = 'Date'