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

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