суббота, 2 января 2010 г.

Rsync - способ синхронизации файлов

http://blog.jphoude.qc.ca/2007/12/01/simple-incremental-backup-rsync-ssh/
http://www.webnext.ru/blog/2007/07/02/rsync-howto.html

Разберём на примере:

rsync -e ssh --progress -lzuogthvr --compress-level=9 \
--delete-after root@:/home/ /home/

или

rsync -e ssh --progress -lzuogthvr --compress-level=9 \
--delete-after /home/ root@:/home/

зависит от того, в какую сторону синхронизируем файлы

Обратите внимание на последний слеш, так как он имеет значение для rsync. Если на конце исходной директории стоит «/», то это означает копирование содержимого директории; отсутствие слеша означает копирование директории и ее содержимого.

Ключи:

* e — заменяет протокол с rsh на ssh

* progress — вывод хода процесса работы на терминал
* l — пересоздание symlinks, это значит, что символические ссылки будут так же переноситься

* z — использовать сжатие
* u — update. Обновление, он будет пропускать файлы которые новей, чем на удалённом сервере

* o — установить владельца конечного файла таким же, как и у исходного
* g — установить группу конечного файла таким же, как и у исходного

* t — передача времени модификации и его обновление на удаленной системе. Этот ключ должен быть установлен для точной синхронизации
* h — вывод информации на терминал в удобном для чтения (human-readable) виде

* v — verbose. Вывод сообщений в терминал.
* r — рекурсивный режим

* n — отладочный режим
* compress-level — уровень сжатия

пятница, 18 декабря 2009 г.

Ссылки на сравнение Ruby on Rails и Django

http://www.magpiebrain.com/2005/08/14/a-comparison-of-django-with-rails/

http://blogs.ubc.ca/scottmcmillan/2009/02/26/django-vs-ruby-on-rails/


Интервью: новый веб-сервис "Яндекса" построен на языке Python и фреймворке Django
http://soft.compulenta.ru/346012/

понедельник, 7 декабря 2009 г.

nginx vps and related

http://www.youtube.com/watch?v=DB-ikoCnjvk

понедельник, 26 октября 2009 г.

Upload files in Django

http://livedev.org/2009/01/02/django-filefield-upload-to
http://www.nitinh.com/2009/02/django-example-filefield-and-imagefield/

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

пятница, 23 октября 2009 г.

Подборка ссылок на css стили/layout'ы

Layout's

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. Вызывает некие ассоциации, хорошо запоминается. Здесь важно не перестараться. Быть чересчур оригинальным не стоит, потому что скорее всего в думающей о другом голове пользователя останется нечто привычное, что он «где-то уже слышал».