Posted by & filed under django, python.

Создаем 2 файла настроек:

settings_local.py
settings_server.py

которые будут включать спецификации локально и для сервера.
Заводим главный файл
settings.py
и в нем прописываем:

import socket
ip=socket.gethostbyname(socket.gethostname())
server_ips=['88.88.88.88',]
if  ip in server_ips:
    from settings_server import *
else:
    from settings_local import *

Posted by & filed under python.

Экспорт данных из mongodb за определенный промежуток времени:

mongoexport -h localhost --db mydbname --collection mycollection -o myout -q '{mydatetimefield:{"$gte": new Date(1330059600000),"$lt":new Date(1330146000000)}}'

где 1330059600000 и 1330146000000 — даты полученные через js как:

new Date(2012,01,24).valueOf();
и
new Date(2012,01,25).valueOf();

где new Date(2012,01,24) это 24 февраля(!)
Имеют значения одинарные и двойные ковычки, если бы всё взяли в двойные то пришлось бы экранировать доллар:

mongoexport -h localhost --db mydbname --collection mycollection -o myout -q "{mydatetimefield:{'\$gte': new Date(1330059600000),'\$lt':new Date(1330146000000)}}"

Posted by & filed under python.

Хочу обратить внимание на различия в работе с mongodb напрямую и через pymongo.

Работа с конcолью с mongodb:

db.banners_shows.mapReduce(showMap,showReduce,{out:{reduce:'joined'},'query':{'options':{'$exists':'true'}}});

где banners_shows — наша коллекция,
showMap — map функция
showReduce — reduce функция
joined — коллекция куда выводится результат
options — ключ который может существовать в полях нашей коллекции

Сначала по аналогии делал так и для pymongo

show_result=banner_shows.map_reduce(map_func,reduce_func,out=bson.son.SON({out:{reduce:'joined'},{'options': {'$exists': 'true'}}}

и получал такую ошибку

… collection names must not contain ‘$’ …

Правильный вариант

show_result=banner_shows.map_reduce(map_func,reduce_func,out='joined',query=bson.son.SON({'options': {'$exists': 'true'}} ))

Posted by & filed under css.

В общем, много спецификаций, под каждый почтовый клиент приходится подстраиваться, очень помог ресурс http://premailer.dialect.ca/
который из обычной верстки делает оптимизированную и указывает какие CSS элементы не поддерживает тот или иной почтовый клиент

Posted by & filed under Linux.

xmodmap

позволяет просматривать таблицу соостветствий клавиш.
Пример результата:

xmodmap: up to 4 keys per modifier, (keycodes in parentheses):

shift   Shift_L (0x32), Shift_R (0x3e)
lock    Caps_Lock (0x42)
control    Control_L (0x25), Control_R (0x69)
mod1    Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2    Num_Lock (0x4d)
mod3
mod4    Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5    ISO_Level3_Shift (0x5c), Mode_switch (0xcb)

Posted by & filed under django, python.

Пример работы (делаем масштабирование картинки по ширине и высоте, но не превосходящее width_max, height_max):

from django.db import models
from django.forms.fields import CharField
from imagekit.models import ImageSpec
from imagekit.processors import resize, Adjust
from django.forms import ModelForm, forms

class FormatImage(object):
    def process(self, image):

        # масштабируем до width_max, height_max
        width_max=605
        height_max=475
        c=resize.Fit(width_max,height_max,True)
        image=c.process(image)
        return image

class Photo(models.Model):
    original_image = models.ImageField(upload_to='photos')
    formatted_image = ImageSpec([FormatImage()],image_field='original_image', format='JPEG',
            options={'quality': 90},cache_to='photos/formatted/')
    thumbnail = ImageSpec([Adjust(contrast=1.2, sharpness=1.1),
            resize.Crop(50, 50)], image_field='original_image',
            format='JPEG', options={'quality': 90},cache_to='photos/thumbnail/')
    info=models.TextField()