sudo vi /etc/aliases # задать алиас root: <мой e-mail> sudo newaliases echo "hello from `hostname`" | mail -s "test" root
пятница, 17 декабря 2010 г.
CentOS: почтовые алиасы. Установка е-майла для root.
Django | Стандартные цвета оповещений
Часто в каких-то своих проектах приходится писать свою систему оповещений (notifications) на сайте. И лучше использовать стандартное оформление, например из Django:
.information {
background: #dedfff;
color: #406299;
border-color:#5b7299;
}
.error {
background: #ffe1da;
border-color: #f34f4f;
color: #be0b0b;
}
.success {
background: #e2f9e3;
border-color: #9c9;
color: #080;
}
.warning {
background:#fff8bf;
border-color: #ffd324;
color:#eb830c;
}
.information {
background: #dedfff;
color: #406299;
border-color:#5b7299;
}
.error {
background: #ffe1da;
border-color: #f34f4f;
color: #be0b0b;
}
.success {
background: #e2f9e3;
border-color: #9c9;
color: #080;
}
.warning {
background:#fff8bf;
border-color: #ffd324;
color:#eb830c;
}
вторник, 14 декабря 2010 г.
clodo.ru | Виртуальный сервер. Порты.
q: CentOS. Как открыть порт?
a:
a:
iptables -I INPUT -p tcp --dport 81 -j ACCEPT
суббота, 23 октября 2010 г.
Amazon. Виртуальные машины. Про дисковое пространство.
Оказалось, что в описании машин устаревшая информация о размерах дисков. Я долго ломал голову и пробовал уменьшать образы (к слову - это были тестовые образы по 20 - 40 гиг, и использовал я micro-instance, т.к. это самый дешевый вариант для тестов)... Но после уменьшения - машина либо не стартовала, либо не отвечала по ssh (что скорее всего означало то, что опять таки не запустилась).
Вобщем я рискнул и создал High Memory Extra Large, в инфо о котором написано о 420 Гиг диске. Выбрал образ Amazon 64bit. Ну и к моей радости после добавления я увидел, что к машине подключен образ всего то 10 Гиг! Ура!
Смысл в том, что мне не нужно было указанных 420 Гиг, а нужно было всего то 100-200. И очень не хотелось платить за излишек. Так что теперь и не придется.
Однако стоит упомянуть и про увеличение размера диска. Так вот - увеличение работает! Шаги :
Все! После - нужно перезапустить машину. Да, кстати, увеличивать можно даже тот образ, с которого загрузилась машина.
Вобщем я рискнул и создал High Memory Extra Large, в инфо о котором написано о 420 Гиг диске. Выбрал образ Amazon 64bit. Ну и к моей радости после добавления я увидел, что к машине подключен образ всего то 10 Гиг! Ура!
Смысл в том, что мне не нужно было указанных 420 Гиг, а нужно было всего то 100-200. И очень не хотелось платить за излишек. Так что теперь и не придется.
Однако стоит упомянуть и про увеличение размера диска. Так вот - увеличение работает! Шаги :
- Сделать snapshot с нужного образа
- Сделать новый образ из snapshot`а, при этом будет возможность изменить размер
- Заменить исходный образ или подключить новый к машине
- Подмонтировать новый диск в lunix`e (странно, но при использовании образа амазоновского линукса, диски монтируются как xvda вместо sda)
- Воспользоватся resize2fs утилитой
Все! После - нужно перезапустить машину. Да, кстати, увеличивать можно даже тот образ, с которого загрузилась машина.
среда, 13 октября 2010 г.
MongoDB. Составные индексы.
Только что, играясь с запросами, обнаружил, что mongo использует составной (из нескольких полей) индекс для поиска по одному полю (это одно поле есть в составном)!
Т.е. нет нужды как в SQL делать по несколько индексов (по разному составленных)!
UPDATE:
Пример:
Есть индекс A,B,C. Так вот, в запросах по A или A,B - будет работать индекс! А вот для B или B,C - нет.
Т.е. нет нужды как в SQL делать по несколько индексов (по разному составленных)!
UPDATE:
Пример:
Есть индекс A,B,C. Так вот, в запросах по A или A,B - будет работать индекс! А вот для B или B,C - нет.
вторник, 12 октября 2010 г.
1gb.ru + SSH = UTF-8? Решение
Что бы при работе через SSH правильно работала кодировка UTF-8 - нужно в ~/.bashrc добавить:
export LANG=ru_RU.utf8
VIM. Меню для смены кодировки
В vim можно создавать свои меню и если добавить в .vimrc следующие строки:
То по нажатию F8 можно будет выбрать из меню, в какой кодировке редактировать текущий файл. По-моему, очень удобная фича.
Оригинал
set wildmenu set wcm=<Tab> menu Encoding.koi8-r :e ++enc=koi8-r ++ff=unix<CR> menu Encoding.windows-1251 :e ++enc=cp1251 ++ff=dos<CR> menu Encoding.cp866 :e ++enc=cp866 ++ff=dos<CR> menu Encoding.utf-8 :e ++enc=utf8 <CR> menu Encoding.koi8-u :e ++enc=koi8-u ++ff=unix<CR> map <F8> :emenu Encoding.<TAB>
То по нажатию F8 можно будет выбрать из меню, в какой кодировке редактировать текущий файл. По-моему, очень удобная фича.
Оригинал
среда, 29 сентября 2010 г.
Ubuntu-server | Cherokee web-server & RRDTool
В последних версиях (>1) замечательно интегрированы графики. Только вот при установке через apt-get почему то не устанавливается libplugin_rrd.so. Решение простое
sudo apt-get install libcherokee-mod-rrd
четверг, 26 августа 2010 г.
CouchDB | Если вдруг падает и не запускается...
... замечал на версии до 1.0.0, что при большом размере лог-файла - не запускается. Решение - затирать лог.
CenoOS 5 + CouchDB 1.0.1. Как скомпилировать.
Удалось скомпилировать CouchDB 1.0.1 на CentOS 5.
Основная сложность была в том, что бы найти js библиотеку SpiderMonkey. А она - тут.
Компилировать так:
CouchDB компилируется как обычно
Основная сложность была в том, что бы найти js библиотеку SpiderMonkey. А она - тут.
Компилировать так:
make BUILD_OPT=1 -f Makefile.ref && cp *.{h,tbl} /usr/include/ && cd Linux_All_OPT.OBJ && cp *.h /usr/include/ && mkdir -p /usr/{bin,lib}/ && cp js /usr/bin/ && cp libjs.so /usr/lib/
CouchDB компилируется как обычно
./configure make make install
вторник, 10 августа 2010 г.
Ура! Удалось на Centos 5 запустить cherokee + uwsgi
Наконец то получилось запустить это связку под Centos 5 (2.6.27.41-170.2.117.fc10.i686.PAE).
Версии:
Все скомпилировано из свежих репозиториев. Ранее у меня не получалось настроить чероки - визард не находил uwsgi. Сейчас в новой версии - все супер!
Версии:
- Cherokee: 1.0.8
- uwsgi: uWSGI 0.9.6-dev (скомпилировано под Python 2.6)
Все скомпилировано из свежих репозиториев. Ранее у меня не получалось настроить чероки - визард не находил uwsgi. Сейчас в новой версии - все супер!
FaceBook. fb:comments и страницы с русскими УРЛами.
Столкнулся с добавлением на сайт комментариев через API Facebook`а. В результате - пришлось прикрутить их javascript-API код.
Но получилась большая проблема - на страницах с русским УРЛом комментирование не работало. После нажатия на кнопку "Отправить" вылезало сообщение "Temporary error". Случайно обнаружил, что на страницах с английским УРЛом все работает. Стал копать описание. И смотреть, что отрисовывает API. И заметил, что в скрытом инпуте "xid" - мой русский урл! Ага! Почитав документацию понял, что это - уникальный ID страницы.
Так что решение простое - в fb:comments добавить xid="[тут_английский_id]". На моем примере - id получился article_134.
Но получилась большая проблема - на страницах с русским УРЛом комментирование не работало. После нажатия на кнопку "Отправить" вылезало сообщение "Temporary error". Случайно обнаружил, что на страницах с английским УРЛом все работает. Стал копать описание. И смотреть, что отрисовывает API. И заметил, что в скрытом инпуте "xid" - мой русский урл! Ага! Почитав документацию понял, что это - уникальный ID страницы.
Так что решение простое - в fb:comments добавить xid="[тут_английский_id]". На моем примере - id получился article_134.
вторник, 3 августа 2010 г.
Ubuntu 10.04 Восстановление оконного менеджера и иконок на рабочем столе
Вчера "прошел квест" - восстанавливал оконный менеджер и иконки на десктопе. Так как в результате удаления какого-то софта, что то важное отвалилось. И я остался без десктопа - не было ни иконок, ни меню по правой кнопке. И у окон пропало оформление - рамка и кнопки с заголовком.
Как оказалось, оконный менеджер в последних версиях - это compiz. А декстоп - это наутилус, просто загруженный в стартапе.
Решение - добавить в "запускаемые программы" compiz и nautilus. Я думаю, что при первой инсталяции они прописаны где-то еще на запуск. Но и такой способ - вполне оправдан.
Как оказалось, оконный менеджер в последних версиях - это compiz. А декстоп - это наутилус, просто загруженный в стартапе.
Решение - добавить в "запускаемые программы" compiz и nautilus. Я думаю, что при первой инсталяции они прописаны где-то еще на запуск. Но и такой способ - вполне оправдан.
пятница, 9 июля 2010 г.
dot.Net c# - Подрезка и изменение размера изображения.
System.Drawing.Image image = System.Drawing.Image.FromFile(src); int srcWidth=image.Width; int srcHeight=image.Height; int thumbHeight=(srcHeight/srcWidth)*thumbWidth; Bitmap bmp = new Bitmap(thumbWidth, thumbHeight); System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp); gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality ; gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, thumbWidth, thumbHeight); gr.DrawImage(image, rectDestination, 0, 0, srcWidth, srcHeight, GraphicsUnit.Pixel); bmp.Save(dest); bmp.Dispose(); image.Dispose();
четверг, 17 июня 2010 г.
пятница, 23 апреля 2010 г.
MSSQL Managment studio - ошибка 0xc0010014 при добавлении нового плана
Понадобилось мне добавить новую задачу на MSSQL сервер. Решил воспользоваться графическим редактором студии. Элемент бросается перетаскиванием, но при попытке его редактировать - вылезает ошибка 0xc0010014.
Нашел лечение:
Нашел лечение:
%windir%\syswow64\regsvr32 "%ProgramFiles(x86)%\Microsoft SQL Server\90\dts\binn\dts.dll"
среда, 14 апреля 2010 г.
IIS6+ nginx на одной машине
В связи с хайлоадом (перегрузкой) сервера с IIS6, решил посмотреть, что будет, если закрыть iis nginx`ом. И статичные файлы отдавать тоже nginx`ом. Однако что то не срослось - и iis не сбавил темпов загрузки процессора. Nginx вообще его не кушал.
пятница, 2 апреля 2010 г.
nginx под win32 как сервис
Nginx - штука гордая. Особенно под windows. Запускать нужно через start, чтоб отдельный процесс запустился. Озадачился запускать nginx как сервис. Проще всего через утилитку cygrunsrv.exe.
Тут тоже свои шаманства:
Ключ --neverexits нужен, т.к. nginx "форкается" (порождает отдельный процесс).
Ключ -a нужен что бы передать путь, где находится сам nginx. Иначе не найдет куда писать логи.
А вот прикрутить ротацию логов пока не получилось, ругается, что не может найти какой-то файл (смутно думаю, что пид-файл)
reload_logs.bat:
Тут тоже свои шаманства:
cygrunsrv.exe --install nginx -p c:\nginx\nginx.exe --neverexits -a "-p c:\nginx"
Ключ --neverexits нужен, т.к. nginx "форкается" (порождает отдельный процесс).
Ключ -a нужен что бы передать путь, где находится сам nginx. Иначе не найдет куда писать логи.
А вот прикрутить ротацию логов пока не получилось, ругается, что не может найти какой-то файл (смутно думаю, что пид-файл)
reload_logs.bat:
cd c:\nginx\logs\ ren access.log access-%DATE%.log ren error.log error-%DATE%.log cd .. nginx -s reopen
четверг, 11 марта 2010 г.
XSL - ужас!
XSL - шаблоны. Вроде удобно, понятно. Циклы, проверки, подгрузка шаблонов. Но... как сделать обычный HTML-комментарий? Шаблонизатор съедает его!
Оказалось нужно
Омг! И скрипты... тоже... нужно мутировать...
Оказалось нужно
<!-- я коммент -->мутировать в ужас:
<xsl:text disable-output-escaping="yes"><!-- я коммент --></xsl:text>
Омг! И скрипты... тоже... нужно мутировать...
среда, 3 марта 2010 г.
Python 2.6 в CentOS5
Подсмотрено тут.
Теперь 2.6 версия вызывается через python2.6
Установка easy_install:
Соответственно вызывать через easy_install-2.6
wget http://python.org/ftp/python/2.6.4/Python-2.6.4.tar.bz2 tar -xjf Python-2.6.4.tar.bz2 cd Python-2.6.4 yum install -y gcc make zlib-devel bzip2-devel openssl-devel readline-devel sqlite-devel gdbm-devel ncurses-devel ./configure --prefix=/opt/python26 --with-zlib=/usr/include make make install ln -s /opt/python26/bin/python2.6 /usr/bin/python2.6 python2.6 -V
Теперь 2.6 версия вызывается через python2.6
Установка easy_install:
wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg#md5=bfa92100bd772d5a213eedd356d64086 sh setuptools-0.6c11-py2.6.egg ln -s /opt/python26/bin/easy_install-2.6 /usr/bin/easy_install-2.6 easy_install-2.6 --help
Соответственно вызывать через easy_install-2.6
Настройка работы с MSSQL с линукса (CentOS 5)
Столкнулся с написанием скриптов для работы на линукс-сервере с MsSQL-базой на питоне. Основная проблема - сообщение типа
Как же так? Просто нужно настроить использование правильной версии драйвера.
Итак. Первое - запись о драйвере в /etc/odbcinst.ini
Второе - добавить запись о сервере в /etc/freetds.conf
Третье - добавить DSN-запись в /etc/odbc.ini
Теперь код для работы с бд выглядит так:
Успехов!
pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL Server]Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (4004) (SQLExecDirectW)')
Как же так? Просто нужно настроить использование правильной версии драйвера.
Итак. Первое - запись о драйвере в /etc/odbcinst.ini
[FreeTDS] Description=TDS driver Driver=/usr/lib/libtdsodbc.so Setup=/usr/lib/libtdsS.so FileUsage=1
Второе - добавить запись о сервере в /etc/freetds.conf
[myServer] host=192.168.0.2 port=1433 tds version=8.0Особенно прошу учесть "табы" перед параметрами! У меня без них запись не срабатывала!
Третье - добавить DSN-запись в /etc/odbc.ini
[myDNS] Description=my dsn Driver=FreeTDS Database=my_db Servername=myServer
Теперь код для работы с бд выглядит так:
import pyodbc conn = pyodbc.connect("dsn=myDSN;UID=%s;PWD=%s;" % ('sa','pass')) cursor=conn.cursor() cursor.execute("select 'test' as x;") row=cursor.fetchone() if row: print row
Успехов!
четверг, 18 февраля 2010 г.
CouchDB | Тонкости map-функции
Никогда не пишите в map-функции
т.к. при вызове view на жестком диске создается индекс-файл, который будет содержать значения doc._id и doc!
UPDADE: doc - т.е. будут все поля документа.
Возвращайте только новые, просчитанные данные. Ибо есть ключик include_docs=true, при наличии которого БД отдаст кроме того, что в emit ещё и сами документы!
emit(doc._id, doc);
т.к. при вызове view на жестком диске создается индекс-файл, который будет содержать значения doc._id и doc!
UPDADE: doc - т.е. будут все поля документа.
Возвращайте только новые, просчитанные данные. Ибо есть ключик include_docs=true, при наличии которого БД отдаст кроме того, что в emit ещё и сами документы!
среда, 3 февраля 2010 г.
CouchDB | Простенький скрипт для keep-alive
CouchDB запускается как фоновый процесс. Но он не умеет подниматься в случае ошибки.
Вот пример простого скрипта, который через curl проверяет - активен ли процесс и если нет - перезапускает его:
Скрипт можно усложнить - например, после рестарта проверить - запустился ли. Если нет - отсылать письмо админу :-)
Вот пример простого скрипта, который через curl проверяет - активен ли процесс и если нет - перезапускает его:
#!/bin/bash echo "Checking, is CouchDB is alive..." #замените адрес на свой! ANSWER=$(curl http://192.168.0.5:5984 -s) if test $ANSWER then echo "CouchDB is alive!" else echo "Trying to restart..." /etc/init.d/couchdb restart fi
Скрипт можно усложнить - например, после рестарта проверить - запустился ли. Если нет - отсылать письмо админу :-)
вторник, 26 января 2010 г.
Python + Psycopg2 + Win32 | Ошибка при большом кол-ве подключений к БД
Написав простецкий скрипт на питоне для копирования данных таблицы с MSSQL в PostgreSQL (+ конвертация некоторых полей) напоролся на ошибку - "psycopg.OperationalError, could not connect to server: Address already in use". Запускал скрипт я на Win32, Python2.6, Psycopg2 2.0.13. Долго ковырял гугль. Нашлась тема. И хотя она оказалась решенной ещё в 2006 году - я эту ошибку всё равно получал. Да, библиотека у меня судя по её номеру - намного "новее"...
Помучав мозг и посмотрев на код работы с psql, я увидел, что для вставки каждой строки данных я каждый раз открываю и закрываю соединение... Вот оно! А что, если открыть соединение 1 раз и кидать инсерты? Да, так и быстрее и не получаю ошибку! (вот в фоне уже 80К строк обработано, только нужно учесть, что я соединился с pgBouncer).
Ну или можно вставить time.sleep(3*60) после каждых 2К строк...
Помучав мозг и посмотрев на код работы с psql, я увидел, что для вставки каждой строки данных я каждый раз открываю и закрываю соединение... Вот оно! А что, если открыть соединение 1 раз и кидать инсерты? Да, так и быстрее и не получаю ошибку! (вот в фоне уже 80К строк обработано, только нужно учесть, что я соединился с pgBouncer).
Ну или можно вставить time.sleep(3*60) после каждых 2К строк...
четверг, 21 января 2010 г.
Genius NetScroll 220 Laser | Мышь. Понижение чувствительности.
OMG! Все мучался - мышь ЛЕТАЕТ! Оказалось есть переключение dpi (влияет на чувствительность). Знаете как? ХАХА! Нажатием лк+пк+колеса!
УРА!
УРА!
MSSQL | Подлость. Никогда не доверяйте!
Был обычный день. Настал момент в базе данных у одной таблицы сменить тип с text на ntext. А таблица на 500к строк. И важная - жуть! Ок, Sql managment studio создала скрипт. Интересно, но скрипт создавал временную таблицу, копировал в неё оригинальную, потом дропал оригинальную и переименовывал временную в название оригинала. Вроде - все нормально, все обернуто транзакциями.
Да вот только обернуто то не все вместе, а каждая команда по отдельности! Ну в результате - сначала мешали внешние ключи. А потом просто - оригинальная таблица дропнулась и временной не видно!? ВСЁ!
Прощайте данные!
Да, есть бекап. Ночной. Общий на 50Гиг. Шутки в сторону. Микрософт не научил студию восстанавливать таблицы по одной. Финиш. А точнее - пипец!
Но я умный. У меня есть машина-дублер. Правда она - на постгресе!
В общем поимел я секса с sqlcmd и конвертированием ~300Мегового бекапа в стиле INSERT INTO TABLE. Хорошо что была линукс-машина и хвала vim! Особенно его комманде глобальной замены %s/что_искать/на_что_менять/gn.
Для интереса - sqlcmd работает по стандарту. Т.е. каждая команда должна завершатьсяпинком командой GO. Но кроме того из-за огромного размера - каждый инсерт пришлось обернуть в транзакцию.
Типа:
Ну и конечно же вызов sqlcmd с флагом кодировки -f 65001 (это utf-8).
Всё. Живем.
Да вот только обернуто то не все вместе, а каждая команда по отдельности! Ну в результате - сначала мешали внешние ключи. А потом просто - оригинальная таблица дропнулась и временной не видно!? ВСЁ!
Прощайте данные!
Да, есть бекап. Ночной. Общий на 50Гиг. Шутки в сторону. Микрософт не научил студию восстанавливать таблицы по одной. Финиш. А точнее - пипец!
Но я умный. У меня есть машина-дублер. Правда она - на постгресе!
В общем поимел я секса с sqlcmd и конвертированием ~300Мегового бекапа в стиле INSERT INTO TABLE. Хорошо что была линукс-машина и хвала vim! Особенно его комманде глобальной замены %s/что_искать/на_что_менять/gn.
Для интереса - sqlcmd работает по стандарту. Т.е. каждая команда должна завершаться
Типа:
begin tran; insert into ...; commit tran; go
Ну и конечно же вызов sqlcmd с флагом кодировки -f 65001 (это utf-8).
Всё. Живем.
Подписаться на:
Сообщения (Atom)