2009-06-18

Программа для изучения Библии в Linux. Часть 2.

В одном из предыдущих постов я упоминал о пишущейся программе для изучения Библии в Linux. Разобравшись с упаковкой вышеупомянутого в deb-пакет, наконец-то создал готовое к употреблению блюдо. Если что-то будет не так - строго не судите, это супер-пупер альфа, и вообще, судить нехорошо. Тестировалось на Ubuntu 8.10 и 9.04.
Вот что мы имеем на начальном этапе: http://files.mail.ru/45YLQ0

UP
Этап 2: http://files.mail.ru/A5XDRT
Этап 3: http://files.mail.ru/OP5535

2009-06-14

Подключение Стрим ТВ. Последовательность действий.

В процессе подключения этой услуги от Стрима возникают некоторые вопросы, и все не так очевидно и просто, как хотелось бы. Я опишу последовательность действий и проблемы, с которыми я столкнулся, может быть, поможет хоть кому-нибудь. Когда я искал, подробной инструкции не встретил.
Итак, подключение Стрим ТВ возможно или с вызовом мастера на дом (тогда вам больше ничего не потребуется, только банальные деньги). Кроме того, если вы живете за кольцом, то придется выложить 600 р только за то, что вы неудачно выбрали место жительства. За каждый метр прокладываемого по дому кабеля с вас возьмут 60 р. Итого, в моей ситуации, когда нужно в Зеленоградской квартире провести 25м кабеля в другую комнату, все это выливается в приличную сумму. Вывод: обойдемся своими силами.
В конторе Стрима берем в аренду тв-декодер. Там же есть сетевые кабели, но максимум 15 м. - не мой вариант. Наверняка еще и дорого, но я не спрашивал. Кабель покупаем в компьютерном магазине (в Компстаре нам обжали 25 м витой пары меньше чем за 300 р) или берем у знакомых сисадминов.
Модем должен иметь несколько LAN интерфейсов. У меня - Echolife HG520 с 4-мя. Для подключения телевидения предназначен LAN-2. Итак, барабанная дробь: включаем в него сетевой шнур, тянем-потянем по квартире до тв-декодера, включаем все по инструкции, и видим на экране телевизора шедевр Малевича с надписью "Loading...". Это неправильно, значит, все не так просто...
В чем причина? Дело в том, что Стрим ТВ не позволит вашему модему динамически раздавать IP-адреса, когда он работает в режиме роутера (как было у меня). Поэтому, чтобы телевидение успешно начало работать, выполняем следующие действия.
1) В управлении модемом (в браузере набираем 192.168.1.1, логин и пароль по умолчанию "admin") в разделе "Base - DHCP" Выключаем DHCP (DHCP = None, Submit).
2) В настройках сетевых соединений компьютеров, выходящих в интернет, нужно указать статические IP типа 192.168.1.x, где x - от 2 до 255. Маска подсети - 255.255.255.0, шлюз - 192.168.1.1, адреса DNS - 212.188.4.10, 195.34.32.116.
3) Звоним в службу поддержки Стрим ТВ, и сообщаем о том, что подключили услугу. Они производят шаманские манипуляции и увеличивают скорость, чтобы телевидение не тормозило.
После этого все должно заработать как часы. Жаль, что этого не указывают сразу в какой-нибудь прилагающейся документации или в личном кабинете, и нужно сначала устроить допросы с пристрастием сотрудников службы поддержки Стрим.

P.S. Были и еще проблемы, и звонил я много раз, но это уже чисто мои сложности, из которых я вынес один вывод: телефонный шнур от щитка до модема ДОЛЖЕН БЫТЬ ИСПРАВЕН, и всякие там кое-как скрученные лапшовые проводочки могут привести к значительному снижению стабильности работы как интернета, так и телевидения. Мои регулярные обрывы соединения исчезли без следа, когда я уладил вопрос с еле-держащимися скруточками за шкафом.
Удачного ТВ!

2009-05-18

Python и аутентификация в Windows-домене

Собственно, задача: компьютер в Windows-домене, на нем есть некий сервер, при обращении к которому он должен определить, зарегистрирован ли представившийся пользователь в домене. Для этого нужно иметь определенный инструментарий, и у нас он есть. Я использую ActivePython 2.6 от ActiveState, там всё комплекте.
[ файл win32test.py ]
-----------------------------------------------------------

# -*- coding: utf-8 -*-

import win32security
import win32net
import win32netcon

def authentication(user, password, domain):
"""
Аутентифицировать пользователя в домене
user - Имя пользователя в домене
password - Пароль пользователя
domain - Имя домена
"""
try:
htoken = win32security.LogonUser(
user, domain, password, win32security.LOGON32_LOGON_NETWORK,
win32security.LOGON32_PROVIDER_DEFAULT
)
if htoken:
return u"Пользователь %s успешно зарегистрирован в домене %s " % (user,domain)
except win32security.error, err:
return u"Номер ошибки: %i\nОшибку вернул %s\nОшибка: %s" % (err[0], err[1], err[2].decode('cp1251'))
except:
return u"Пользователю %s не удалось зарегистироваться в домене %s " % (user,domain)

print authentication("Kawaikunee","secretpassword","DOMEN")

def existuser(user, server, verbose=0):
"""
Проверить существование пользователя в домене.
user - Имя пользователя в домене
server - Имя Domain Controller NetBIOS. Можно указать DNS
verbose - Флаг, печатать ли информационное сообщение
"""

try:
users = win32net.NetUserEnum(
server, 0,
win32netcon.FILTER_NORMAL_ACCOUNT, 0
)
"""
users[0] - список словарей пользователей домена в Unicode, в формате
[{'name', u'Username1'},{'name', u'Username2'},{'name', u'Username3'}]
users[1] - их общее количество
"""
print users[0]
except win32net.error, err:
if verbose:
return u"Номер ошибки: %i\nОшибку вернул %s\nОшибка: %s" % (err[0], err[1], err[2].decode('cp1251'))
else:
return None
for userinfo in users[0]:
if user.decode('utf8').lower() == userinfo['name'].lower():
return u"Такой пользователь существует: %s" % user
print existuser("Kawaikunee","192.168.1.1",1)

-----------------------------------------------------------

Вот такой пример кода. Программирование - это творчество, и оно сродни поэзии. Вот так бы это описал, возможно, какой-нибудь древнерусский сказитель:

Ой ты гой еси, server-батюшка,
Ты скажи-расскажи, не утаивай!
Есть ли в списках твоих добрый молодец,
Что по логину user захаживал?

Отвечал скрипту server ласково:
Посмотри-ка милок, весь мой списочек
Молодыми да острыми глазками.
Да и выбери, кто тебе надобен.

Ну а коли ты в гости надумаешь,
То password отведет стражу лютую.
Заходи скрипт-python, в светлу горницу,
Будем мы разговор разговаривать.

2009-05-07

Открываю Gedit

Кто из программистов не искал для себя идеальный редактор кода? А сколько их развелось на свете! Платных и бесплатных, IDE и простых, под разные OS, просто глаза разбегаются.
И я не избег этой участи. В итоге из IDE первое место в моем багаже прочно заняла Aptana, ну а из простых...
Кто-то пользуется vi или emacs и вполне доволен. А некоторые привыкли в GUI-редакторам и отучить их уже сложно. Вот возьмем, к примеру, меня. Однажды я набрел на SciTE, и был впечатлен: писать в нем в целом неплохо, но вот настройки - это надо знать, что менять в конфигурационых файлах, как прописывать. С кодировкой cp1251 вообще практически никак, а иногда без нее не обойтись. Пользовался им за простоту и легкость, но самое прекрасное - это кнопка F5, по которой выполняется код открытого документа и выводится результат.
А кто из пользователей Gnome не знает такого замечательного приложения, как "Текстовый редактор" gedit? Эта программа проста и незатейлива, годится лишь чтобы изредка поправить конфигурационный файл... так кажется на первый взгляд.
Вся прелесть кроется в его плагинах. Среди них есть поистине шедевры. С их помощью можно легко реализовать клавишу F5 из SciTE - и это только поверхность айсберга. Установите пакет gedit-plugins (входит в стандартный репозитарий Ubuntu, но по умолчанию не установлен) - и посмотрите в Gedit "Правка - Параметры - Модули". Обширное поле для деятельности! О модулях можно прочесть, если нажать в этой вкладке кнопку "Справка", поверьте, это того стоит. Наиболее впечатляющими выглядят "Фрагменты текста" и "Внешние инструменты". Да и в "Правка - Параметры" тоже можно пройтись по чекбоксам, и сделать среду еще более приятной для работы.
Нужны пояснения и подробности? Если будет интересно - напишу еще, но думаю, что вы разберетесь и сами. Поверьте, ничего сложного - творите с удовольствием!

2009-05-05

Чистка файлов на хостинге от сторонних включений с помощью связки grep+sed

Вот уже который раз на хостинге наблюдаю работу некоего зловреда, который включает в файлы сайтов, в названии которых есть слова "main", "index" и "default" сторонний код, подгружающий на компьютеры посетителей зараженные файлы с использованием iframe. Пользователей Linux это не касается, поэтому они могут спать спокойно, для них этот код означает просто очень долгую загрузку страницы, связанную с загрузкой в кэш зараженного файла. Зато пользователи Windows, особенно бороздящие просторы интернета с помощью (если это так можно назвать) IE, подвергаются атаке по полной программе. Я об этой заразе узнал от такого пользователя. Много файлов, много строк, поди найди там всё!
Приступим к решению!
1) Подключаемся к серверу по протоколу ssh и получаем командную строку.
2) Проверяем наличие бяк в файлах php и html, получив список файлов с внедренным кодом (одной строкой):
find . -name '*.php' -o -name '*.html' -exec grep -l -E '^<iframe src=.+></iframe>$' '{}' \;
3) Массово заменим эти включения на пустоту (одной строкой):
find . -name '*.php' -o -name '*.html' -print0 | xargs -0 sed -i -e 's/^<iframe src=.*><\/iframe>$//g'
Конечно, это все временное решение, но хотя бы до следующей атаки пользователи не будут страдать.
Если у кого-то на хостинге случилось подобное, расскажите как боролись!