Архив за [undefined]

Онлайн тренинг по фрилансу

Мой товарищ, Алексей Кандауров, начинает онлайн тренинг по фрилансу. Всем очень рекомендую. Сам буду читать с огромным интересом. Человек с большим опытом в этой сфере и знает о чем говорит. Хотя он и дизайнер, а не программист, но общие подходы во фрилансе одинаковы для всех специализаций.

Присоединяйтесь и вы!

Exception #07. Как это было

Небольшой рассказ про то как я съездил на Exception #07

Дорога

Это была моя первая поездка заграницу, поэтому впечатлений только от дороги получилось много, уже не говоря о самой конференции. Поскольку, билеты на поезд я покупал много заранее, почти за месяц, то места в плацкарте мне достались хорошие. Ночь толком поспать не удалось, но всё-равно утром я ступил на вокзал в хорошем настроении. Поменял деньги и отправился в гостиницу "Русь".

Киев

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

Увы толком посмотреть город у меня не получилось. За-то есть повод приехать опять, но уже просто туристом, чтобы всё детально изучить.

Одно хочу отметить: поразило метро - очень красивые станции в центре, но жуткое количество рекламы как на станциях, так и в вагонах. То что в вагонах реклама клеится на скотч, от чего стены очень грязные - вообще повергло культурный шок:) Не меньший шок вызвало осознание того, что проезд стоит всего 2,5 рубля в пересчете. Да, в Москве таких цен же давно нет:(

До

промо Плазма у входа в гостиницу

К 11 часам в холле гостиницы ...

Кеширование. Инвалидация сигналами. Десерт

Всегда приятно видеть отзыв на своё творение. А особенно, когда он исходит от очень уважаемого мною человека - Ивана Сагалаева. Спасибо. В своём посте он высказал несколько очень точных замечаний по теме моего поста об инвалидации кеша сигналами. Изложу своё видение тезисов Ивана.

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

Ситуация с многоэтажными декораторами меня тоже напрягает, и сейчас например файл, где хранятся шаблонные теги для этого блога, напоминает действительно urls.py в случае массового использования generic views.

Решение одно - разделить функционал и мета информацию инвалидации. Т.е. грубо говоря принудительно применять декоратор в старом синтаксисе "функция=декоратор(функция)". Тут то как раз и идея с одним "инвалидационным" файл пригодится.

В конце концов, моя реализация лишь proof of concept идеи сигнальной инвалидации. Как мне кажется, вот этот самый "proof" получился. Оно работает! Понятно, что в отдельных конкретных проектах, она может оказаться неудобной или не очень полезной. Но тут каждый сам волен обтесать её под свои нужды и условия.

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

"Python и Django - платформа для фрилансера"

Это тема моего доклада на грядущей конференции Exception #07 в Киеве 15 марта.

Exception #07

Расскажу о том, почему выбрал именно эту связку для работы. Поделюсь своим опытом. Приведу примеры из жизни в том где эта платформа помогает, а где немного мешает. Так что, будет очень интересно.

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

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

Приходите обязательно! Хочу со всеми, а особенно с неравнодушными к джанге, познакомиться и пообщаться.

До встречи!

Кеширование. Инвалидация сигналами. Трапеза

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

Итак, у нас есть приложения блога и в нем такие модели:

class Post( models.Model ):
    title = models.CharField(max_length=100)
    date = models.DateTimeField(default=datetime.now)
    text = models.TextField()

class Comment( models.Model ):
    post = models.ForeignKey( Post, related_name = "comments" )
    text = models.TextField()

Теперь как полагается в хорошем блог движке, мы хотим получить последние 5 постов для того чтобы сообщить о них постетителю. Для этого напишем простую функцию

def get_latest_posts():
    return Post.objects.all().order_by( "-date" )[ :5 ]

Отлично, функция готова и мы её можем применять в нужном нам месте. Но зачем каждый раз мучить базу и просить её вернуть последние посты? Ведь пишу то я не часто (ну так получается:)), поэтому можно это дело закешировать и не тратить ресурсы попусту, т.к. они не часто обновляются.

Но классический вариант с таймаутом тут не очень удобен: если сделать маленький таймаут, то падает эффективность кеширования, если же учитывая большие интервалы между добавлением новых постов, то можно и таймаут побольше поставить, но тут сразу появляется проблема. Я добавил новый пост, а кеш обновится только через сутки (ну реально большие интервалы ...