http://livedev.org/2009/01/02/django-filefield-upload-to
http://www.nitinh.com/2009/02/django-example-filefield-and-imagefield/
понедельник, 26 октября 2009 г.
Django amazon s3 storage
From: http://code.welldev.org/django-storages/wiki/Home
From: http://www.sourceguru.net/177/
Code:
from django.conf import settings
import S3
from django.core.files.storage import Storage
class S3Error(Exception):
"Misc. S3 Service Error"
pass
class S3Storage(Storage):
options = None
def __init__(self, options=None):
if not options:
options = settings.S3_SETTINGS
self.options = options
self.perm_tuple = (
'private',
'public-read',
'public-read-write',
'authenticated-read'
)
if self.options['default_perm'] not in self.perm_tuple:
self.options['default_perm'] = 'private'
self.connect()
def connect(self):
self.conn = S3.AWSAuthConnection(self.options['aws_key'], self.options['aws_secret_key'])
res = self.conn.check_bucket_exists(self.options['bucket'])
if res.status != 200:
res = self.conn.create_bucket(self.options['bucket'])
if res.http_response.status != 200:
raise S3Error, 'Unable to create bucket %s' % (self.options['bucket'])
return True
def exists(self, filename):
contents = self.conn.list_bucket(self.options['bucket'])
if filename in [f.key for f in contents.entries]:
return True
else:
return False
def size(self, filename):
contents = self.conn.list_bucket(self.options['bucket'])
for f in contents.entries:
if f.name == filename:
return f.size
return False
def url(self, filename):
server = self.options['bucket']
if not self.options['vanity_url']:
server += '.s3.amazonaws.com'
return 'http://' + server + '/' + filename
def save(self, filename, content):
try:
data = open(content.temporary_file_path()).read()
except IOError, err:
raise S3Error, 'Unable to read %s: %s' % (filename, err.strerror)
if not content.content_type:
content_type = mimetypes.guess_type(filename)[0]
if content_type is None:
content_type = 'text/plain'
else:
content_type = content.content_type
perm = self.options['default_perm']
res = self.conn.put(
self.options['bucket'],
filename,
S3.S3Object(data),
{
'x-amz-acl': perm,
'Content-Type': content_type
}
)
if res.http_response.status != 200:
raise S3Error, 'Unable to upload file %s: Error code %s: %s' % (filename, self.options['bucket'], res.body)
content.filename = filename
content.url = self.url(filename)
return filename
def delete(self, filename):
res = self.conn.delete(self.options['bucket'], filename)
if res.http_response.status != 204:
pass
#raise S3Error, 'Unable to delete file %s' % (filename)
return (res.http_response.status == 204)
def path(self, filename):
raise NotImplementedError
def open(self, filename, mode):
from urllib import urlopen
return urlopen(self.url(filename))
def get_available_name(self, filename):
import os
basefilename = os.path.splitext(filename)
i = 1
while self.exists(filename):
filename = '%s-%d%s' % (basefilename[0], i, basefilename[1])
return filename
From: http://www.sourceguru.net/177/
Code:
from django.conf import settings
import S3
from django.core.files.storage import Storage
class S3Error(Exception):
"Misc. S3 Service Error"
pass
class S3Storage(Storage):
options = None
def __init__(self, options=None):
if not options:
options = settings.S3_SETTINGS
self.options = options
self.perm_tuple = (
'private',
'public-read',
'public-read-write',
'authenticated-read'
)
if self.options['default_perm'] not in self.perm_tuple:
self.options['default_perm'] = 'private'
self.connect()
def connect(self):
self.conn = S3.AWSAuthConnection(self.options['aws_key'], self.options['aws_secret_key'])
res = self.conn.check_bucket_exists(self.options['bucket'])
if res.status != 200:
res = self.conn.create_bucket(self.options['bucket'])
if res.http_response.status != 200:
raise S3Error, 'Unable to create bucket %s' % (self.options['bucket'])
return True
def exists(self, filename):
contents = self.conn.list_bucket(self.options['bucket'])
if filename in [f.key for f in contents.entries]:
return True
else:
return False
def size(self, filename):
contents = self.conn.list_bucket(self.options['bucket'])
for f in contents.entries:
if f.name == filename:
return f.size
return False
def url(self, filename):
server = self.options['bucket']
if not self.options['vanity_url']:
server += '.s3.amazonaws.com'
return 'http://' + server + '/' + filename
def save(self, filename, content):
try:
data = open(content.temporary_file_path()).read()
except IOError, err:
raise S3Error, 'Unable to read %s: %s' % (filename, err.strerror)
if not content.content_type:
content_type = mimetypes.guess_type(filename)[0]
if content_type is None:
content_type = 'text/plain'
else:
content_type = content.content_type
perm = self.options['default_perm']
res = self.conn.put(
self.options['bucket'],
filename,
S3.S3Object(data),
{
'x-amz-acl': perm,
'Content-Type': content_type
}
)
if res.http_response.status != 200:
raise S3Error, 'Unable to upload file %s: Error code %s: %s' % (filename, self.options['bucket'], res.body)
content.filename = filename
content.url = self.url(filename)
return filename
def delete(self, filename):
res = self.conn.delete(self.options['bucket'], filename)
if res.http_response.status != 204:
pass
#raise S3Error, 'Unable to delete file %s' % (filename)
return (res.http_response.status == 204)
def path(self, filename):
raise NotImplementedError
def open(self, filename, mode):
from urllib import urlopen
return urlopen(self.url(filename))
def get_available_name(self, filename):
import os
basefilename = os.path.splitext(filename)
i = 1
while self.exists(filename):
filename = '%s-%d%s' % (basefilename[0], i, basefilename[1])
return filename
пятница, 23 октября 2009 г.
Подборка ссылок на css стили/layout'ы
Layout's
http://matthewjamestaylor.com/blog/ultimate-3-column-holy-grail-pixels.htm
http://matthewjamestaylor.com/blog/ultimate-3-column-holy-grail-pixels.htm
понедельник, 19 октября 2009 г.
Подбор доменного имени
http://www.vashdomen.ru/?rid=1847
Хорошее доменное имя:
1. Отличается краткостью. Лучше, если количество символов в имени Вашего домена не превышает 5, например, www.artus.ru. Длинные названия наподобие http://www.mtu-net.ru/korona/html.htm хуже запоминаются, их труднее набирать в строке броузера, а пользователи, как известно, чаще всего идут по пути наименьшего сопротивления.
2. Однозначно пишется. *** Доменные имена набираются латиницей, а ведь большой процент пользователей не знаком с английским языком и не может знать правил спеллинга. Значит, слово insurance (страхование) кто-то напишет как inshurans, кто-то – как enshoorance, да мало ли есть вариантов написания. Что уж говорить о транслитерации русских слов! Если Вы занимаетесь разведением кур, а имя Вашего домена www.kuriza.ru, будьте готовы, что искать Ваш сайт будут и на www.curitza.ru, и на www.kuritsa.ru, и на www.cooriza.ru. Плюс к тому, не надо забывать, что многие просто не знают, как пишется то или иное слово, поэтому «словарные слова» не стоит делать частью доменного имени.
3. Воспринимается на слух. Представьте себе муки Ваших сотрудников, уставших от переспрашиваний собеседника «как-как?» и вынужденных в телефонном разговоре диктовать адрес сайта по буквам. Не стоит регистрировать домен “www.onomatopoeia.ru”, если можно каким-то образом этого избежать, заменив слово на более привычное среднестатистическому уху.
4. Связано со сферой деятельности компании. Хорошо, если это название Вашей компании или бренда (www.danone.ru, www.danissimo.ru ). Можно также использовать общие для отрасли слова, как, например, слово «мебель» www.mebel.ru – домен, принадлежащий компании “Mr. Doors”.
5. Вызывает некие ассоциации, хорошо запоминается. Здесь важно не перестараться. Быть чересчур оригинальным не стоит, потому что скорее всего в думающей о другом голове пользователя останется нечто привычное, что он «где-то уже слышал».
Хорошее доменное имя:
1. Отличается краткостью. Лучше, если количество символов в имени Вашего домена не превышает 5, например, www.artus.ru. Длинные названия наподобие http://www.mtu-net.ru/korona/html.htm хуже запоминаются, их труднее набирать в строке броузера, а пользователи, как известно, чаще всего идут по пути наименьшего сопротивления.
2. Однозначно пишется. *** Доменные имена набираются латиницей, а ведь большой процент пользователей не знаком с английским языком и не может знать правил спеллинга. Значит, слово insurance (страхование) кто-то напишет как inshurans, кто-то – как enshoorance, да мало ли есть вариантов написания. Что уж говорить о транслитерации русских слов! Если Вы занимаетесь разведением кур, а имя Вашего домена www.kuriza.ru, будьте готовы, что искать Ваш сайт будут и на www.curitza.ru, и на www.kuritsa.ru, и на www.cooriza.ru. Плюс к тому, не надо забывать, что многие просто не знают, как пишется то или иное слово, поэтому «словарные слова» не стоит делать частью доменного имени.
3. Воспринимается на слух. Представьте себе муки Ваших сотрудников, уставших от переспрашиваний собеседника «как-как?» и вынужденных в телефонном разговоре диктовать адрес сайта по буквам. Не стоит регистрировать домен “www.onomatopoeia.ru”, если можно каким-то образом этого избежать, заменив слово на более привычное среднестатистическому уху.
4. Связано со сферой деятельности компании. Хорошо, если это название Вашей компании или бренда (www.danone.ru, www.danissimo.ru ). Можно также использовать общие для отрасли слова, как, например, слово «мебель» www.mebel.ru – домен, принадлежащий компании “Mr. Doors”.
5. Вызывает некие ассоциации, хорошо запоминается. Здесь важно не перестараться. Быть чересчур оригинальным не стоит, потому что скорее всего в думающей о другом голове пользователя останется нечто привычное, что он «где-то уже слышал».
понедельник, 5 октября 2009 г.
nice designs
http://thisweekindjango.com/twid/episode/32/this-week-in-django-32/
http://www.truviso.com/
http://www.truviso.com/
deployment tools
http://lethain.com/entry/2008/nov/04/deploying-django-with-fabric/
http://www.lag.net/paramiko/ (paramiko is a module for python 2.2 (or higher) that implements the SSH2 protocol for secure)
http://stackoverflow.com/questions/1233655/what-is-the-simplest-way-to-ssh-using-python
http://lincolnloop.com/blog/2009/sep/22/easy-fabric-deployment-part-1-gitmercurial-and-ssh/ есть пример cms котороая использует django geo
http://www.lag.net/paramiko/ (paramiko is a module for python 2.2 (or higher) that implements the SSH2 protocol for secure)
http://stackoverflow.com/questions/1233655/what-is-the-simplest-way-to-ssh-using-python
http://lincolnloop.com/blog/2009/sep/22/easy-fabric-deployment-part-1-gitmercurial-and-ssh/ есть пример cms котороая использует django geo
суббота, 3 октября 2009 г.
Понижение bitrate, Lame mp3 encoding decoding
Понижение bit rate для mp3 файлов (http://ubuntuforums.org/showthread.php?t=537208 - convert mp3 bitrate) до 128 (по умолчанию)
for f in *.mp3 ; do lame --mp3input "$f" /"$f" ; done
Также lame конвертирует wav -> mp3, пример перекодирования всех файлов каталога:
for f in *.wav; do lame --preset standard "${f}" "${f%wav}mp3"; done
for f in *.mp3 ; do lame --mp3input "$f" /"$f" ; done
Также lame конвертирует wav -> mp3, пример перекодирования всех файлов каталога:
for f in *.wav; do lame --preset standard "${f}" "${f%wav}mp3"; done
Подписаться на:
Сообщения (Atom)