суббота, 12 ноября 2011 г.

vim - нежадные (non greedy) регулярные выражения (regexps)

Нежадные регулярные выражения в vim'е реалуются очень легко. Достаточно просто заменить * на \{-}. Это аналог перловского *?.

среда, 2 ноября 2011 г.

Converting 32bit RRD to 64bit RRD (This RRD was created on other architecture)

Такая ошибка вываливается тогда, когда на одной архитектуре (скажем, 64bit), вы пытаетесь использовать rrd-шки, созданные на другой (32bit).
Починить можно, перегнав rrd-шку в xml на старой системе, а затем обратно - на новой.
Например, на старой системе выполняем:
rrdtool dump sometest.rrd > sometest.xml
На новой:
rrdtool restore sometest.xml sometest.rrd
Если же файлов много, то можно сделать это так:
На старой системе:
for i in `find -name "*.rrd"`; do rrdtool dump $i > $i.xml; done
На новой:
for i in `find -name "*.xml"`; do rrdtool restore $i `echo $i |sed s/.xml//g`; done

воскресенье, 30 октября 2011 г.

fdisk - Partition table entries are not in disk order, или восстанавливаем порядок разделов


Иногда может случиться так, что порядок разделов в таблице разделов меняется. Таким образом, что раздел (партиция) с номером x+2 оказывается физически между разделом x и x+1. Например, так, как это показано ниже:

$ sudo fdisk -l /dev/sda 
 ...
Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e3147
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    58593279    29295616   83  Linux
/dev/sda2        58595326   625141759   283273217    5  Extended
/dev/sda5        58595328   373270527   157337600   83  Linux
/dev/sda6       615235584   625141759     4953088   82  Linux swap / Solaris
/dev/sda7       373272576   615225239   120976332   83  Linux
Partition table entries are not in disk order
Как видно, раздел /dev/sda7 на самом деле расположен между /dev/sda5 и /dev/sda6.
В принципе, это не критично. Однако, если вы всё же хотите восстановить правильный порядок разделов, надо выполнить следующие простые действия:
1) Запускаем fdisk для требуемого раздела
$ sudo fdisk /dev/sda
2) Включаем расширенные команды:
Command (m for help): x
3) Правим порядок:
Expert command (m for help): f
Done.
4) Записываем изменения на диск:
Expert command (m for help): w
The partition table has been altered!
Собственно, всё, порядок разделов исправлен:
Command (m for help): p
Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytesU
Disk identifier: 0x000e3147
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    58593279    29295616   83  Linux
/dev/sda2        58595326   625141759   283273217    5  Extended
/dev/sda5        58595328   373270527   157337600   83  Linux
/dev/sda6       373272576   615225239   120976332   83  Linux
/dev/sda7       615235584   625141759     4953088   82  Linux swap / Solaris
Однако, если в вашем /etc/fstab прописаны диски по их названиям типа /dev/sdaX, а не по UUID, то вам следуем не забыть поправить  fstab, так как названия поменялись. UUID же остались прежними.

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

вторник, 18 октября 2011 г.

Ubuntu - возвращаем F10 в MC (Midnight Commander)

К сожалению, в Ubuntu 11.04 и 11.10 нажатия кнопки F10 перехватываются Unity. Это очень разжражает, так как в Midnight Commander'е эта кнопка часто используется, например, для выхода.
Избавиться о перехватов Unity просто. Для этого надо выполнить следующие действия:
1) Устанавливаем compizconfig-settings-manager:
$ sudo aptitude install compizconfig-settings-manager
2) Далее, запускаем его (в меню приложений находим compizconfig-settings-manager)
3) Вводим в фильтре Unity и находим Ubuntu Unity Plugin:
4) Снимаем галочку либо нажимаем на него и переназначаем клавишу вызова. Я выбрал Ctrl+Shift+F10

воскресенье, 25 сентября 2011 г.

PHP MongoDB - получаем _id только что созданной записи (MongoID)

Ситуация: мы хотим получить _id только что созданной нами записи. То есть, например, мы создали юзера и хотим знать айдишник, который MongoDB присвоила ему. Делается это очень просто:
Добавляем элемент:
$x = array('foo' => 'bar');
$c->insert($x); 
Проверяем внутренности $x:

var_dump($x);
array(2) {
  ["_id"]=>
  object(MongoId)#2 (0) {
  }
  ["foo"]
  string(7) "bar" 

Таким образом, для того, чтобы узнать _id, достаточно вывести $x['_id']

суббота, 28 мая 2011 г.

Javascript - расшифровка htmlEntities

function decodeHtml(decoded){
var ta = document.createElement("textarea");
ta.innerHTML = decoded;
return ta.value;
}

понедельник, 9 мая 2011 г.

Простой скрипт для бэкапа MySQL баз

#!/bin/bash

# Variables
CNF=/etc/mysql/debian.cnf
BACKUPDIR=/var/backups/mysql/
DATE=`date +%F`
OLDDAYS=7

# Main part
for DATABASE in `echo SHOW DATABASES | mysql --defaults-file=${CNF} --skip-column-names`;do
BACKUPNAME=${BACKUPDIR}${DATABASE}.sql.${DATE}
BZBACKUPNAME=${BACKUPNAME}.bz2
echo Dumping ${DATABASE} into ${BZBACKUPNAME}
mysqldump --defaults-file=${CNF} ${DATABASE} > ${BACKUPNAME}; bzip2 -f ${BACKUPNAME}
done

# Deleting old backups

find ${BACKUPDIR} -mtime +${OLDDAYS} -delete


Дампит и сжимает базы данных.
Можно (и нужно) добавить его в крон, например:
00 05 * * * root /usr/local/sbin/mysqlbackup.sh

P.S. Ах да, это юбилейный, сотый пост в моём бложике:) 

вторник, 26 апреля 2011 г.

Ubuntu (Debian) - устанавливаем VirtualBox 4.0.6

VirtualBox 4.0.6 устанавливается в Ubuntu очень просто. Все описано вот здесь: http://www.virtualbox.org/wiki/Linux_Downloads . Если вкраце, то должны быть следующие действия:
Выбираем нужную строчку по версии операционной системы из этого списка:

deb http://download.virtualbox.org/virtualbox/debian maverick contrib non-free
deb http://download.virtualbox.org/virtualbox/debian lucid contrib non-free
deb http://download.virtualbox.org/virtualbox/debian karmic contrib non-free
deb http://download.virtualbox.org/virtualbox/debian hardy contrib non-free
deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free
deb http://download.virtualbox.org/virtualbox/debian lenny contrib non-free
Например, для Ubuntu 10.04 нужна строка

deb http://download.virtualbox.org/virtualbox/debian lucid contrib non-free
Добавляем ее в конец файла /etc/apt/sources.list.
Затем скачиваем ключ репозитория и добавляем его в apt:

wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
После чего обновляем репозитории и устанавливаем VirtualBox:

sudo apt-get update
sudo apt-get install virtualbox-4.0

четверг, 21 апреля 2011 г.

Linux - меняем кодировку для всех файлов в директории

for file in `find . -type f`; do iconv $file -f cp1251 -t utf8 -o ${file}_tmp; mv ${file}_tmp $file; done

Рекурсивно меняет кодировку для всех файлов в текущей директории из cp1251 в utf8.

понедельник, 14 марта 2011 г.

Linux MTA - настройка своего сервера для борьбы со спамом

Вот еще одна отличная статья про настройку своего MX сервера: ссылка на статью. Описывается фильтрация на уровне SMTP протокола, а не на основе спам-фильтров и т.п.

Linux MTA - как не попасть в спам, или настройка PTR и DKIM.

Вот в этой статье на Хабре подробно и понятно всё описано. Сделал как там рекомендовалось - и Google стал рад моим письмам:)

Linux MTA - настройка отправки писем через smarthost для exim4 и sendmail

Вот замечательная статья, в которой описывается, как это делать:
http://blog.sozinov.eu/2007/10/smarthost.html

вторник, 8 марта 2011 г.

Настройка и установка МФУ (принтера и сканера) HP F4100 в Linux Debian Wheezy (и Ubuntu)

Предыстория: Понадобилось отсканировать несколько фотографий из книжки типа "Лучшие советские фотографы". А для этого нужен был сканер. У меня как раз завалялся МФУ Hewlett Packard F4100. Вот такой вот зверек:

Настраиваел я его на Linux Debian Wheezy. В принципе, инструкция ничем не отличается и для других Дебианов. В Убунту, скорее всего, тоже так получится, но там наверняка можно всё тоже самое еще и через гуи натыкать.
Здесь же я выполнил следующие действия:
Во-первых, воткнул его в сеть и в USB моего нежного любимого Lenovo U350.
Во-вторых, посмотрел вывод dmesg:
# dmesg
[10537.432045] usb 6-1: new full speed USB device using uhci_hcd and address 3
[10537.631039] usb 6-1: New USB device found, idVendor=03f0, idProduct=7e04
[10537.631045] usb 6-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[10537.631049] usb 6-1: Product: Deskjet F4100 series
[10537.631053] usb 6-1: Manufacturer: HP
[10537.631056] usb 6-1: SerialNumber: CN75R3H2D004TJ
[10537.631183] usb 6-1: configuration #1 chosen from 1 choice
[10537.810588] usblp0: USB Bidirectional printer dev 3 if 1 alt 0 proto 2 vid 0x03F0 pid 0x7E04
[10537.810619] usbcore: registered new interface driveи usblp
Вроде как и нашлось, однако в lsusb я устройства не увидел:
# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 5986:0241 Acer, Inc BisonCam, NB Pro
Bus 002 Device 004: ID 8086:1406 Intel Corp. WiMAX Connection 2400m
Bus 006 Device 002: ID 0458:0056 KYE Systems Corp. (Mouse Systems) Ergo 300 Mouse
Bus 007 Device 002: ID 0a5c:2150 Broadcom Corp. BCM2046 Bluetooth Device
В-третьих, установил sane b гую для него - xsane.
# aptitude install sane xsane
sane поставился, однако пользы от этого особой не было. Xsane настойчиво пытался получать изображение с веб-камеры, и никак не видел HP. Немного погуглив, я выяснил, что HP делает драйвера специально под линукс, и можно поискать ссылку на них на официальном сайте. Там меня редиректнуло на такой вот сайт: http://hplipopensource.com/hplip-web/index.html. Тут я подумал, у меня же Debian, а не Слака какая-нибудь, и нашёл пакет hplip в репозиториях. Установил:
# aptitude install hplip
, и подумал, что все, готово.
Однако, всё не так просто, мне понадобилось еще перевтыкнуть usb-шнурок, и после этого xsane уже отлично видел МФУ-шку и был готов сканировать:
Вот теперь уже всё:) Кстати, GIMP умеет сразу создавать файл через xsane: Файл - Создать - Xsane...
Если обобщать, то надо выполнить следующие действия:
# aptitude install xsane hplip
и после этого воткнуть шнурок сканера.

пятница, 18 февраля 2011 г.

bash - обращение к нужной команде из history

Как известно, список использованных команд в bash'e можно посмотреть, набрав команду history:
$ history
   1  echo "test"
   2  echo "Hello World"
   3  find . -mtime +5
   ..
.
Периодически, приходится искать в history длинные и сложные команды, например, такие как вот эта:
find . -mindepth 1 -maxdepth 1 -type d -exec du -bs {} \; | sort -n -r | awk '{print $2}' | head -10 | xargs du -hs
Выводит список самых тяжелых директорий в текущей.
Раньше я искал ее так:
$  history | grep find
  231  find . -mindepth 1 -maxdepth 1 -type d -exec du -bs {} \; | sort -n -r | awk '{print $2}' | head -10 | xargs du -hs
Копировал мышкой и взаново вбивал в адресную строку. Однако все изменилось, когда я узнал, что можно все делать намного проще. Достаточно лишь набрать ![номер команды], и она отрабатываает заново:
$ !231
find . -mindepth 1 -maxdepth 1 -type d -exec du -bs {} \; | sort -n -r | awk '{print $2}' | head -10 | xargs du -hs
.....

понедельник, 31 января 2011 г.

Python - генерация случайного числа с заданной вероятностью

Представим, что нам потребовалось создать на Питоне генератор случайных чисел, который выводит 1 или 0, причем 1 он выводит с вероятностью 0,2.
Это можно сделать следующим образом:
>>> import random
>>> for i in range(20):
...     x = random.random()
...     if x <= 0.2:
...             print 1
...     else:
...             print 0
...
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
Что мы здесь сделали?
Во первых, первой строкой подключили модуль random, затем сгенерировали случайное число с плавающей точкой в пределах от 0 до 1. В зависимости от того, меньше это число 0.2, или больше, мы вывели 1 или 0. Таким образом, задачу можно считать выполненной.

Python - сложение строк или конкатенация

В питоне складывать строки очень просто, вот примеры, из которых все понятно:
Пример №1
>>>print 'Привет! ' + 'Как дела?'
Привет! Как дела?
Пример №2
>>> a = 'Хорошо'
>>> b = ' А у тебя как?'
>>> c = a + b
>>> print c
Хорошо А у тебя как? 
Пример №3 (c преобразованием числа  в строку)
 >>> x = 12
>>> y = 6
>>> print '12 * 6 = '+str(x*y)
12 * 6 = 72

понедельник, 17 января 2011 г.

Устанока OpenTTD в Debian или Ubuntu

Решил я поставить себе OpenTTD на свой ноутбук с Debian Squeeze. Так как компилировать и ставить из исходников - это не Debian-way, то выполнил следующую команду:
$ sudo aptitude install openttd
Поставился и сам OpenTDD, и нужные зависимости типа liblzo2-2 и т.д.
Всё, OpenTTD установлен на компьютер, можно с удовольствием поиграть, запустив его командой
$ openttd
Получаем окно игры:

Linux - подсчет количества определенных символов в строке

Делается сабж вот такой командной:
echo -n $string | sed s/[^SYMBOL]//g | wc -c
Где $string - наша строка, SYMBOL - тот самый символ, количество которых мы хотим посчитать.
Например:
$ echo -n aaabac | sed s/[^a]//g | wc -c
4