15 июл. 2011 г.

Частные фото дедушек

Немножко фактуры для нового супер-проекта:









13 июл. 2011 г.

Джордж Карлин - спасем планету

Яндекс.Похер

В очередной раз убеждаюсь, что Яндексу просто похер. Похер рекламодатели, деньги, работники. Похер все, что может быть похер.
Сперва я пытался подружить несколько сайтов с партнеркой по передаче контента. Недвижимость не подошла, потому что к моменту пока они собрались обработать мою заявку (почти 2 месяца), эти заявки уже не могли быть посланы от имени агентства недвижимости. Видимо, Яндекс знает что-то такое, что позволяет ему предполагать, что все квартиры в России только от собственников.
Пусть так. Я потратил кучу времени на эту херню, но ладно. Далее я попытался подключить интернет-магазин жены к Яндекс.Маркету - они нашли 10 причин, почему магазин не подходит.
Последняя капля - я попытался добавить сайт в платный каталог Яндекса и получил в ответ этот шедевр:
"
Уважаемый/ая Маркеев Иван!

Ваш заказ на платную регистрацию в каталоге сайта "Квартиры посуточно в Тюмени ООО Риконе." (http://www.realtor-tyumen.ru/) не принят. Причина: Сайт не соответствует требованиям каталога.

--
С уважением,
Администрация Яндекс.Каталога
support@catalog.yandex.ru
http://www.yandex.ru
"

Каким требованиям? Это платный каталог. Я собираюсь отдать Яндексу 12 с половиной тысяч рублей, а он не может мне объяснить почему он не может их взять? Что за херня?
Обращение в письме и сама формулировка выдает, что какой-то мудо-сотрудник не глядя толком на сайт ткнул кнопку "отклонить" и пошел срать.


UPD Мне ответили, притом, довольно быстро, что сайт не принят в связи: "поисковый спам (использование определённых технических приёмов для искусственного воздействия на рейтинг сайта в поисковых системах)". Да, каюсь, грешен. Но по другому конкурировать сейчас не возможно. Кто пробовал, знает ;).
Видимо, кармический посыл поноса в ноосферу имеет свои положительные результаты чуть реже чем всегда. Теперь хотя бы понятно, что дальше делать.

Давно не писал...

Что-то давненько я ничего не писал. Дети растут, работа работается, свободного времени нет вовсе.
Возможно, скоро запустим с Костей Павловским в Линктопе нечто совершенно особенное. Ну а пока посмотрите отличнейшее live видео Foo Fighters, которое мне напоминает о том, как все было 10 лет назад ;).



UPD. Недавно Дейв выгнал из зала кого-то, кто пытался драться у него на концерте. Также помнится БИ-2, на концерте в Тюмени, пригрозили ментам прекратить шоу если они (менты) не перестанут до**ываться до пришедших на концерт фанатов.


Солист группы Foo Fighters выгнал фаната с концерта из-за драки

20 июн. 2011 г.

Хорошей Тюменской компании нужен хороший администратор

Парк из 50+ компьютеров, ЛВС, несколько серверов (видимо, платформа windows).

От вас - в комментариях или в письме на markeev@gisi.ru указать свое ФИО и номер контактного телефона. Ответить крайне желательно до 13 часов 21 июня 2011 (т.е. до завтра).

12 июн. 2011 г.

Скриншотить питоном (selenium)?


#!/usr/bin/env python
from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://www.ubuntu.com/')
browser.save_screenshot('screenie.png')
browser.close()

10 июн. 2011 г.

django-tinymce + django-filebrowser

Пара файлменеджер+wysiwyg - удобный набор для привлечения к генерации контента пользователей совсем уж низкого уровня технической подготовки.
Сейчас, чтобы подключить к любимой CMSке на django загрузку картинок, уже не нужно ничего велосипедить. Решение проблемы сводится к поиску нужного форка на github. И это же правило справедливо для большинства plugable-приложений.
В случае с заявленными в сабже приложениями нужно:
1. Настроить tinymce (отобрать у пользователя все не нужные ему возможности. Меньше можешь - меньше накосячишь). Файл настроек django-tinymce может выглядеть так:

# -*- coding: utf8 -*-

from settings import STATIC_ROOT

#TinyMCE widget configuration
TINYMCE_JS_URL = "/static/tiny_mce/tiny_mce.js"
TINYMCE_JS_ROOT = STATIC_ROOT + "/tiny_mce"
TINYMCE_SPELLCHECKER=False
TINYMCE_PLUGINS = [
    'safari',
    'table',
    'advlink',
    'advimage',
    'iespell',
    'inlinepopups',
    'media',
    'searchreplace',
    'contextmenu',
    'paste',
    'wordcount'
]

TINYMCE_DEFAULT_CONFIG={
    'theme' : "advanced",
    'plugins' : ",".join(TINYMCE_PLUGINS), # django-cms
'language' : 'ru',
    'theme_advanced_buttons1' : "bullist,numlist,|,link,unlink,anchor,image",
    'theme_advanced_buttons3' : "table,|,delete_row,delete_table,|,row_after,row_before",
    'theme_advanced_buttons4' : "styleselect,formatselect,fontselect,fontsizeselect",
    'theme_advanced_buttons2' : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,undo,redo,|,link,unlink,cleanup",
    'theme_advanced_buttons4' : "",
    'theme_advanced_toolbar_location' : "top",
    'theme_advanced_toolbar_align' : "left",
    'theme_advanced_statusbar_location' : "bottom",
    'theme_advanced_resizing' : True,
    'table_default_cellpadding': 2,
    'table_default_cellspacing': 2,
    'cleanup_on_startup' : False,
    'cleanup' : False,
    'paste_auto_cleanup_on_paste' : False,
    'paste_block_drop' : False,
    'paste_remove_spans' : False,
    'paste_strip_class_attributes' : False,
    'paste_retain_style_properties' : "",
    'forced_root_block' : False,
    'force_br_newlines' : False,
    'force_p_newlines' : False,
    'remove_linebreaks' : False,
    'convert_newlines_to_brs' : False,
    'inline_styles' : False,
    'relative_urls' : False,
    'formats' : {
        'alignleft' : {'selector' : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', 'classes' : 'align-left'},
        'aligncenter' : {'selector' : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', 'classes' : 'align-center'},
        'alignright' : {'selector' : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', 'classes' : 'align-right'},
        'alignfull' : {'selector' : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', 'classes' : 'align-justify'},
        'strikethrough' : {'inline' : 'del'},
        'italic' : {'inline' : 'em'},
        'bold' : {'inline' : 'strong'},
        'underline' : {'inline' : 'u'}
    },
    'pagebreak_separator' : ""
}
#FILEBROWSER_URL_FILEBROWSER_MEDIA = STATIC_URL + 'filebrowser'
FILEBROWSER_DIRECTORY = 'filebrowser'
2. Найти и установить тот самый, правильный форк. Сегодня для меня это https://github.com/smacker/django-filebrowser-no-grappelli-for-django13 (чтоб установить нужно прописать в INSTALLED_APPS tinymce и добавить url(r'^tinymce/filebrowser/',include('filebrowser.urls')),).
Django-filebrowser-no-grappelli-for-django13 нуждается в https://github.com/tstone/django-uploadify (необходимые настройки сводятся к добавлению uploadify в INSTALLED_APPS и добавлению урл-паттерна  (r'^uploadify/', include('uploadify.urls')), ).

Ну и все, если не считать мануальной терапий по переносу каталогов медиа файлов из подкаталогов приложений (1.3 умеет коллекционировать статику, потому для многих уже и не актуально).