пятница, 16 декабря 2011 г.

Как своровать ресурсы из файла swf

Linux: Ну, во-первых, нужен сам файл. Как его загрузить в один клик в браузере, я так и не разобрался, приходится смотреть в html-код, искать ссылку и тянуть её при помощи wget написано, например, вот тут: в FireFox-е через пункт контекстного меню "Информация о странице" переходим во вкладку "Мультимедиа" и тянем всё, что пожелаем. Ладно. Дальше начинается самое интересное.
Есть такая штука, swftools. В ней присутствует утилита swfextract, при помощи которой всё легко достаётся:
1. Выполняем команду
swfextract myfile.swf

На выходе получаем примерно такое:
Objects in file myfile.swf:
[-i] 2 Shapes: ID(s) 2, 4
[-i] 5 MovieClips: ID(s) 3, 5, 7, 10, 11
[-j] 2 JPEGs: ID(s) 17, 632
[-p] 1 PNG: ID(s) 915
[-s] 7 Sounds: ID(s) 40-45, 584
[-F] 2 Fonts: ID(s) 20, 21
[-f] 1 Frame: ID(s) 0
[-m] 1 MP3 Soundstream

2. Дальше извлекаем нужный ресурс. Например, можно утянуть музыку. Вот только команда с ключом -m дохнет с ошибкой ERROR Soundstream is not mp3 (2), зато, например, командой
swfextract -s 44 myfile.swf -o 6.wav
нужный саундтрек достается без хлопот.

Есть еще полезная утилита, swfdump - она показывает более подробную информацию. Т.е. выполняем
swfdump myfile.swf > 1.txt
и смотрим всякие DEFINESOUND defines id 0044 (...) и т.п. - чтобы было понятно, что достаем.

Основная проблема - эти самые swftools поставить. Вроде как в репозитории убунты такого нет, поэтому ставим из исходников. Тут есть небольшая тонкость: потребуется доустановить пакеты libjpeg-dev и libgif-dev. После этого всё компилируется, правда, с кучей ворнингов, но работает, вроде, нормально...

Windows: а в винде всё, помнится, было просто. Во-первых, с браузером интегрировался Orbit Downloader, который позволяет без проблем сохранять флэшки на диск, и, во-вторых, есть Sothink SWF Decompiler, который, хотя и платный, зато имеет приятный интерфейс 8-)

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

Excel 2007 - недопустимое расположение серверных черновиков

Неожиданно Excel 2007 при попытке сохранить настройки стал выдавать ошибку "Указано недопустимое расположение серверных черновиков для автономного редактирования, либо отсутствуют разрешения на доступ к этому расположению. Укажите расположение на этом компьютере". Ну как неожиданно - просто перенесли папку "D:\Мои документы" в "C:\Documents and Settings\User\Мои документы". При этом, что интересно, хитрая программа отказывается сохранять настройки этих самых черновиков (в группе "Сохранение").

Решение оказалось таким: прописать вручную в реестре следующее:

[HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Offline\Options]
"Local"=dword:00000001
"Location"="C:\\Documents and Settings\\User\\Мои документы\\Черновики SharePoint"

четверг, 8 декабря 2011 г.

postgresql ERROR: permission denied for language c

Ошибка возникла при попытке выполнить uuid-ossp.sql (этот файл содержит набор процедур для работы с uuid). Выяснилось, что хранимые процедуры на си могут создавать только суперпользователи.

Если же хочется, чтобы это было доступно не только суперпользователю, можно сделать так:

1. В базе сделать язык си вызывающим доверие:

psql --single-transaction -c "UPDATE pg_language SET lanpltrusted = true WHERE lanname = 'c';" -d база -U суперюзер


2. Дать нужному пользователю нужные права:

psql -c "GRANT USAGE ON LANGUAGE c TO юзер;" -d база -U суперюзер

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

SSH через прокси

Возник вопрос - как сделать, чтобы работала команда ssh mylogin@my-ssh-server, если сидишь за прокси? Выяснилось, что для этого надо:

1. Прикручиваем на локальной машине утилиту corkscrew

2. В файле ~/.ssh/config пишем следующее:
host my-ssh-server
ProxyCommand /usr/local/bin/corkscrew my-proxy-server my-proxy-port %h %p


3. После этого команда ssh mylogin@my-ssh-server -p 12345 пойдет через прокси.

(вот ещё полезная информация)

UPD 2012-11-02:
Есть ещё одна небольшая тонкость. Некоторые прокси-серверы сбрасывают неактивные подключения по истечении определенного периода времени. Если же в команде подключения указать опцию -o ServerAliveInterval=60 (или прописать это же, только с пробелом вместо знака равенства, в соответствующий раздел host файла ~/.ssh/config), то сессия обрываться не будет.

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


Николай Ге. Портрет О.П.Костычевой, дочери П.А.Костычева, 1891

эту картинку не знаю, как утащить)

добавлено 2012-10-27:

(автор: Леонид Афремов)

добавлено 2013-01-09:


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

Как настроить ejabberd в debian

Вот так.

Вкратце:

1. Ставим сервер apt-get install ejabberd

2. Правим /etc/ejabberd/ejabberd.cfg. Если по минимуму, то:
% задаем админский аккаунт (формат такой: {user, имя, хост})
{acl, admin, {user, "huh-muh", "mydomain.ru"}}.

% задаем имя хоста
{hosts, ["mydomain.ru"]}
и вроде как всё остальное нормально прописывается и "из коробки".

3. Создаем пользователей (по умолчанию регистрация из клиента запрещена. Чтобы включить её, нужно изменить в конфигах deny в строке {access, register, [{deny, all}]} на allow):
sudo /usr/sbin/ejabberdctl register huh-muh mydomain.ru mypassword

UPD 2013-01-02:
Оказалось тут, что истек срок годности сертификата. Продлил так:
openssl genrsa -des3 -out ejabberd.key.secure 1024
openssl rsa -in ejabberd.key.secure -out ejabberd.key
openssl req -new -key ejabberd.key -out ejabberd.csr
openssl x509 -req -days 365 -in ejabberd.csr -signkey ejabberd.key -out ejabberd.crt
cat ejabberd.key ejabberd.crt > ejabberd.pem
sudo cp ejabberd.pem /etc/ejabberd/

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

SAMBA: Невозможно сменить режим доступа целевого файла

Столкнулся с ошибкой: при попытке записать файл на самбовскую шару получаю в mc сообщение Невозможно сменить режим доступа целевого файла: Операция не позволяется (1), причем сам файл записывается.

Решение такое:
sudo mount.cifs //Server/share /mnt/share -o user=юзер_шары,noperm

Установка Debian 6 с USB-флэшки

Как-то с испугу умудрился записать дебиановский установочный исошник на флэшку. По-моему, это было сделано не как советуют мануалы, а командой:
sudo dd if=debian-live-6.0.3-amd64-lxde-desktop.iso of=/dev/sdh bs=10240 conv=sync

Правда, утверждается, что это исошник такой, специальный, пригодный как для флэшек, так и для дисков, так что никакого чуда нет.

Узнать правильное название флэшки (вдруг не /dev/sdh, а что-то другое) можно командой dmesg.

Вообще-то изначально команда была подсмотрена у FreeBSD, но та из коробки почему-то не предложила сделать локаль UTF-8, поэтому ставить её расхотелось.

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

Пока не работает хранилище ссылок...

Анкета (надо попробовать перенести на flex):
http://psylist.net/praktikum/00386.htm

Прикольный курсорчик:
http://s11.radikal.ru/i184/0907/d5/334dd29fe364.gif

http://stackoverflow.com/questions/4991171/auto-line-wrapping-in-svg-text
http://www.w3.org/TR/SVG/text.html#TextElement

Блиииин, как не хватает его!!

Yuu Yuu Hakusho TV
Shigofumi: Letters from the Departed

http://f5.ru/freshf5/post/377615
http://f5.ru/freshf5/post/378947

http://theapplegeek.ru/archives/3817

http://blog.flexexamples.com/2008/01/22/displaying-a-webcams-video-in-a-flex-videodisplay-control/

Ghost wars by Steve Coll

http://www.kodges.ru/87664-samouchitel-yaponskogo-yazyka.html

Atlantis Imperio

http://www.foia.cia.gov/browse_docs.asp?doc_no=0000497186

http://militera.lib.ru/science/vs17/38.html
http://militera.lib.ru/science/vs17/index.html

UPD 2012-07-20: Ура-а, наконец-то восстановил!

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

DHCP в Debian 6

На сервере:

Оказывается, нужно поставить dhcp3-server (командой sudo apt-get install dhcp3-server). После этого слегка поправить конфиги:

1. Необязательный момент, если интерфейс один: в /etc/default/dhcp3-server прописать:
INTERFACES="eth0"


2. Обязательный момент: в /etc/dhcp/dhcpd.conf прописать:
option domain-name "ylsoftware.com";
option domain-name-servers 192.168.2.10;

subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.2 192.168.2.254;
option domain-name-servers 192.168.2.1;
option routers 192.168.2.10;
}


3. Если нужна привязка ip к mac, это делается так:
host first {
hardware ethernet 00:E0:4C:B7:C2:59;
fixed-address 192.168.2.3;
}


После этого перестартуем сервер /etc/init.d/isc-dhcp-server restart

На клиенте:

В /etc/network/interfaces пишем:
auto lo eth0
iface lo inet loopback
iface eth0 inet dhcp


И перестартуем: /etc/init.d/networking restart
(или ifdown eth0, ifup eth0, вроде, тоже канает)

Кстати, для статического адреса нужно в /etc/network/interfaces писать следующее:
auto eth0
iface eth0 inet static
address 192.168.2.4
netmask 255.255.255.0
gateway 192.168.2.1

а в /etc/resolv.conf:
nameserver 192.168.2.10


Проверяется конфигурация сети командой ifconfig.

суббота, 29 октября 2011 г.

Как на Ubuntu 11.10 увидеть приложение X, запущенное на другой машине ?

Предположим, есть удалённая машина AAA, есть локальная рабочая станция BBB под управлением Ubuntu 11.10, за консолью которой сидим мы, и на которой запущен X-сервер, и нам захотелось, чтобы некое приложение выполнялось на AAA, а отображалось на BBB.

В общем случае цепляемся по ssh на удалённую машину AAA и на этой машине выполняем следующую команду:
export DISPLAY=BBB:0.0

После этого запущенная в этой сессии на AAA программа будет пытаться нарисовать себя через иксы рабочей станции BBB. И, конечно, обломится. Потому что линукс, а в нем любая задача - квест.

Иксы заботятся о безопасности, поэтому на локальной машине BBB надо выполнить команду:
xhost AAA

Но этого, разумеется, недостаточно, если машина BBB работает под убунтой, ведь вывод команды ps -ef | grep listen даёт понять: иксы тут стартуют с ключом -nolisten tcp.

Для того, чтобы данный ключ убрать, в Ubuntu 11.10 есть интуитивно понятное решение - прописать в /etc/lightdm/lightdm.conf следующую строчку:
xserver-allow-tcp=true


После перезагрузки всё, наконец, оживает...

среда, 19 октября 2011 г.

Каких только программ не бывает!

С помощью каких программ можно открыть файлы формата xsd и pat?

Файлы с расширением xsd открываются с помощью программы Pattern Maker (PM), а файлы с расширением pat открываются программой PCStitch.

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

Failed to access IIS metabase

Помогло:
aspnet_regiis /u
aspnet_regiis /i
(файл aspnet_regiis находится в папке с фреймворком конкретной версии)

Говорят, ещё действует:
aspnet_regiis -ga "Network Services"

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

Создать animated gif под linux

Попробовал два способа:

1. Короткий.

mplayer video.avi -ss hh:mm:ss.lll -endpos hh:mm:ss.lll -vf scale=160:120 -vo gif89a:fps=3:output=out.gif -nosound

(качество получилось так себе.)

2. Длинный.

выбираем нужный кусок и просматриваем его:
mplayer -ao null -loop 0 -ss 0:11:22 -endpos 5 file.avi
(можно было указывать -endpos не в секундах, а тоже в виде hh:mm:ss)

преобразуем понравившийся кусок в кучку джипегов
mplayer input.avi -ss hh:mm:ss.lll -endpos 5 -vo jpeg:outdir=dirname:quality=80

конвертим джпипеги в гифы
for f in /workdir/*.jpg
do
g="${f%.*}.gif"
convert $f $g
done

собираем анимированный gif:
gifsicle --loopcount=0 --delay 8 --colors 256 -O2 -i --resize 480x_ *.gif > ani.gif

среда, 24 августа 2011 г.

Фильтры в Packetyzer-е

В хелпе написано: ip.addr == xxx.xxx.xxx.xxx
Фигушки. Канает: host xxx.xxx.xxx.xxx

Поставить значение MTU

Windows:
По умолчанию в локалке используется MTU=1500.
Если нужно изменить, следует в разделе
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<AdapterID>
создать параметр MTU типа REG_DWORD нужным значением (говорят, от 68 до 1500)

Linux:
ifconfig eth0 mtu 1412
в /etc/network/interfaces прописать где-то mtu 1400

Excel 2007 - добавление своей кнопки на ленту

Задача оказалась довольно простой. Раньше, в 2003, чтобы добавить кнопку на тулбар, приходилось обрабатывать событие Open рабочей книги. В 2007 делается по-другому.

1. В самой книге открываем редактор VBA, в котором пишем нужную подпрограммку с обязательным параметром:
Sub МояПодпрограмма(control As IRibbonControl)
MsgBox "Кнопку нажали"
End Sub

2. Книгу сохраняем в файл, например, myFile.xlsm. У этого файла меняем расширение на zip и распаковываем его в отдельную папку.

3. В этой папке (можно и не в корне) создаем файл с именем, например, customUI.xml в кодировке utf-8 примерно такого вида:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="CustomTab" label="Моя закладка">
<group id="SampleGroup" label="Моя группа кнопок">
<button id="Button" label="Выполнить мою программу" imageMso="HappyFace" size="large" onAction="МояПодпрограмма" />
</group >
</tab>
</tabs>
</ribbon>
</customUI>


4. В папке _rels есть файл .rels (тоже имеет структуру xml), в котором надо прописать следующую строку:
<Relationship Id="какой-нибудь ID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="местонахождение customUI.xml из п.3" />

5. Весь этот зоопарк запаковываем обратно в файл myFile.xlsm.

суббота, 30 июля 2011 г.

Видеозвонки в pidgin

Ну-у, вот тут полезный мануал:
http://michael.stapelberg.de/Artikel/video_chat_with_pidgin

Вкратце:

тестируем, что камера работает:
mplayer -v tv:// -tv device=/dev/video0:driver=v4l2

устанавливаем gstreamer-tools, тестируем
gst-launch v4l2src ! xvimagesink

В pidgin в меню "Средства" → "Модули" находим "голосовые/видеонастройки" и настраиваем модуль так:
Аудио → Ввод → PulseAudio → Webcam C270 Analog Mono
Видео → Вывод → Plugin → X Window System (XV) → Intel Textured Video
Видео → Ввод → Plugin → Video4Linux2 → UVC Camera

Перезапускаем pidgin. После этого в окне чата с собеседником в пункте меню "Беседа" появляется пункт "Медиа", а там подпункты "видеозвонок" и т.п.

На ubuntu всё нормально (кажется, на ком бы проверить? 8-)), а вот как будет на slackware?

Правда, есть инструкция по прививке дебиановского пакета на другие сборки ^_^:

1. http://packages.debian.org
2. в поле «слово для поиска» вписываете «pidgin»
3. в списке «дистрибутив» выбираете нужный (например, «стабильный»)
4. отмечаете галочкой «искать только точные совпадения»
5. нажимаете «искать»
6. щёлкаете по найденной ссылке
7. в блоке справа находите надпись «исходный код pidgin»
8. щёлкаете по ссылке pidgin_<версия>.orig.tar.bz2 и получаете исходный код pidgin нужной версии (ровно то же самое можно получить и с сайта разработчиков и из репозитории вашего дистрибутива)
9. щёлкаете по ссылке pidgin_<версия>.debian.tar.gz и получаете патч для этой версии исходников
10. ...
11. profit

Надо будет попробовать...

среда, 27 июля 2011 г.

python: Переименовать файлы *.fb2

Возникла задача: переименовать файлы *.fb2 в формат "<Автор> <Название>.FB2"

Так как *.fb2 - это на самом деле xml, то решение простое:
1. Получить список файлов в каталоге
2. Загрузить в парсер каждый файл
3. Найти там имя автора и название книги
4. Переименовать файл

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

import xml.dom.minidom
from xml.dom.minidom import Node

path = os.path.expanduser(u"~/Загрузки/fb2/")

dirList = (file for file in os.listdir(path) if os.path.isfile(os.path.join(path, file)) and file.endswith("fb2"))

for fname in dirList:

    print fname

    doc = xml.dom.minidom.parse(path + fname)

    last_name = ""
    book_title = ""

    for title_node in doc.getElementsByTagName("title-info"):

        for author_node in title_node.getElementsByTagName("author"):
            for node2 in author_node.getElementsByTagName("last-name"):
                for node3 in node2.childNodes:
                    if node3.nodeType == Node.TEXT_NODE:
                        last_name = node3.data

        for book_node in title_node.getElementsByTagName("book-title"):
            for node2 in book_node.childNodes:
                if node2.nodeType == Node.TEXT_NODE:
                    book_title = node2.data

    if last_name != "" and book_title != "":
        new_fname = u'%s %s.fb2' % (last_name, book_title)
        os.rename(path + fname, path + new_fname)
        print "%s = %s" % (fname, new_fname)

пятница, 8 июля 2011 г.

Настройка принтера под Slackware

Ссылка 1 - debian, но тоже хорошо
Ссылка 2
HP Linux imaging and printing

вкратце как расшарить принтер:

1. заводим юзера smbprint с правами на запись в папку /home/smbprint

2. в /etc/samba/smb.conf пишем:
[global]
printcap name = cups
printing = cups
security = share
[printers]
browseable = yes
printable = yes
public = yes
create mode = 0700
guest only = yes
use client driver = yes
guest account = smbprint
path = /home/smbprint

3. в /etc/cups/mime.convs раскомментируем строчку:
application/octet-stream application/vnd.cups-raw 0 -

4. в /etc/cups/mime.types раскомментируем строчку:
application/octet-stream

5. в /etc/cups/cupsd.conf пишем:
<Location /printers>
AuthType None
Order Deny,Allow
Deny From None
Allow From All
</Location>

6. перезапускаем службы:
/etc/rc.d/rc.samba restart
/etc/rc.d/rc.cups restart

UPD 2012-11-07:
А вот с принтером Xerox Phaser 3130 получилась небольшая проблема. Вроде бы с generic драйвером он работает, однако с завидной периодичностью начинает печатать мусор (кракозябры, псевдографику). Попробовал установить splix-2.0.0, может, поможет.

Спликс этот тоже не без проблем, кстати, собрался. Во-первых, собирать пришлось командой make DISABLE_JBIG=1, и, во-вторых, поправить файл /src/ppdfile.cpp в соответствии с http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=565097

суббота, 18 июня 2011 г.

Одновременная работа mod_python.publisher и mod_python.psp

в etc/apache2/sites-available/default пишем следующее:
<Directory /var/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
AddHandler mod_python .py
PythonHandler mod_python.publisher | .py
AddHandler mod_python .psp
PythonHandler mod_python.psp | .psp
PythonDebug On
</Directory>

ну и, конечно, перезапускаем апач:
sudo /etc/init.d/apache2 restart

кстати, настройка mod_python подробно расписана тут и тут (для тех, кто не осилил исходный мануал)

среда, 8 июня 2011 г.

Создание и восстановление образа жесткого диска

Вкратце:

1. сохраняем mbr:
dd if=/dev/hda of=backup-hda.mbr count=1 bs=512

2. сохраняем сведения о разделах:
sfdisk -d /dev/hda > backup-hda.sf

3. создаём образы разделов при помощи partimage

Для восстановления поступаем так:

1. записываем на диск mbr из файла:
dd if=backup-hda.mbr of=/dev/hda

2. записываем на диск сведения о разделах:
sfdisk /dev/hda < backup-hda.sf

3. восстанавливаем разделы из образов при помощи partimage

воскресенье, 29 мая 2011 г.

Проблемы со звуком в wine

Что-то странное произошло со звуком в wine, пока я ковырялся с идеей записать через audacity мелодию с nosefart (проигрыватель музыкальных файлов для nes). Сам-то процесс описан тут, но ничего интересного не получилось.

Попутно оказалось, что /dev/dsp в убунту 11.04 отсутствует, зато можно эмулировать oss через alsa примерно так: поставить из репозитория пакет alsa-oss и запускать программы командой
aoss nosefart myFile.nsf

А с wine помогло следующее: в winecfg во вкладке "Аудио" поставил DirectSound - аппаратное ускорение - эмуляция, и вроде, всё запищало нормально.

пятница, 20 мая 2011 г.

Запись Audio CD под linux

Создать образ аудио-диска:
cdrdao read-cd -v 2 --device /dev/dvdrw --read-raw --datafile imagen.bin imagen.toc

Записать образ на болванку:
cdrdao write -v 2 --device /dev/dvdrw --speed 4 --buffers 64 imagen.toc

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

Установить часовой пояс из командной строки

через GUI:
control.exe timedate.cpl

через командную строку:
rundll32.exe shell32.dll,Control_RunDll timedate.cpl,,/Z Russian Standard Time
rundll32.exe shell32.dll,Control_RunDll timedate.cpl,,/Z N. Central Asia Standard Time
либо
control.exe timedate.cpl,,/Z N. Central Asia Standard Time
(список часовых поясов: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\)

Кстати, посмотреть настройки часового пояса, в частности, можно тут:
HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

под Win7, говорят, вообще есть специальная утилита:
tzutil.exe /l -посмотреть список часовых поясов
tzutil.exe /g -посмотреть настройки часового пояса
tzutil.exe /s "Russian Standard Time" -установить часовой пояс

среда, 4 мая 2011 г.

воскресенье, 1 мая 2011 г.

Обновление Debian с Lenny до Squeeze

Согласно красивой старинной легенде можно обновить свой рабочий, но "морально устаревший" Debian при помощи следующей последовательности действий:
1. меняем в файле /etc/apt/sources.list все вхождения lenny на squeeze (в vim это делается так :%s/lenny/squeeze/gi)
2. обновляем список пакетов: sudo apt-get update
3. обновляем менеджер пакетов: sudo apt install apt dpkg aptitude
4. обновляем систему: sudo apt-get dist-upgrade
и, казалось бы, всё...Фигушки. Есть другая красивая легенда, что на этом всё только начинается.

Перво-наперво, строка:
deb http://volatile.debian.org/debian-volatile squeeze/volatile main contrib non-free
оказывается, не работает, и нужно использовать:
deb http://ftp.debian.org/debian squeeze-updates main

Далее начались чудеса при обновлении. А именно, apt-get чего-то там пошерстил часа два, а потом тихо умер, пожаловавшись на "слишком много ошибок". Выяснилось, что все беды - из-за заглючившего shared-mime-info. Глючил он примерно так:
Unknown media type in type 'all/all'
Unknown media type in type 'all/allfiles'
Unknown media type in type 'uri/mms'
Unknown media type in type 'uri/mmst'
Unknown media type in type 'uri/mmsu'
Unknown media type in type 'uri/pnm'
Unknown media type in type 'uri/rtspt'
Unknown media type in type 'uri/rtspu'
Unknown media type in type 'fonts/package'
Unknown media type in type 'interface/x-winamp-skin'
Окаалось, это - известный баг. Решением было найти в /usr/share/mime/packages/kde.xml все упоминания соответствующих типов и поудалять их. Правда, после этого ошибка всё равно осталась, но зато одна:
update-mime-database.real: undefined symbol: g_malloc0_n
Эту проблему удалось не решить, но обойти, прописав в начало скрипта:
/var/lib/dpkg/info/shared-mime-info.postinst
волшебную команду exit 0
(как оказалось впоследствии, g_malloc0_n свидетельствует о том, что не сработало обновление пакета libglib2.0-0, а старая версия <= 2.24, и эту самую g_malloc0_n не содержит. Пришлось качать пакет вручную, удалять из /usr/lib/ упоминания о libglib и обновляться apt-get -f install новый_libglib.deb)

Зато у меня теперь есть Squeeze! С дикой текстовой консолью при загрузке (в середине процесса перескакивает с tty1 на tty5, говорят, лечится заменой в файле /etc/default/bootlogd строки BOOTLOGD_ENABLE=Yes на строку BOOTLOGD_ENABLE=No - нифига), с какой-то графической байдой в grub (правда, помогает вот эта подсказка), с тормозящим KDE или неработающим Xfce, а так всё хорошо, буду изучать дальше...

И, да! Я научился отключать и восстанавливать загрузку иксов по умолчанию:
update-rc.d -f gdm remove или update-rc.d -f kdm remove
update-rc.d -f gdm defaults или update-rc.d -f kdm defaults
соответственно.

воскресенье, 24 апреля 2011 г.

Отправка SMS через usb-модем с использованием Python

После окончательного перехода на убунту отказалась работать .NET-фреймворковская программка, через которую работала отправка SMS-сообщений. Возникла естественная мысль переписать её, скажем, на питоне. Благодаря подсказкам это оказалось совсем тривиально:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import serial
import time
import random

# процедура для отправки строки в модем и получения ответа
def str_send (ser, textline):
print "<<" + textline
ser.write(textline)

out = ''
N = 10
while N > 0:
time.sleep(1)
while ser.inWaiting() > 0:
out += ser.read(1)

if ('OK' in out) or ('ERROR' in out) or ('>' in out):
print ">>" + out
N = 1

N -= 1

# функция преобразования телефонного номера в формат, пригодный для SMS
def PhoneNumberToSMS(number):
number += 'F'
result = '0B' + '91'
i = 0
while i < len(number):
result += number[i+1] + number[i]
i += 2
return result

# функция, кодирующая юникодную строку в формат SMS
def TextToSMS(text):
b = text
result = ''
i = 0
while i < len(b):
o = ord(b[i])
result += ("%0.2X" % (o/256)) + ("%0.2X" % (o%256))
i += 1
return result

# вводим с консоли сообщение и переводим его в юникод
message = raw_input('Текст сообщения:\n')
message = message.decode('utf-8')

# если сообщение большое - режем его на кусочки для механизма конкатенации SMS
chunks = []

if len(message) > 70:
while len(message) > 66:
chunks.append(message[:66])
message = message[66:]

if len(message) > 0:
chunks.append(message)

# готовим номер группы сообщений и устанавливаем 6-й бит SMS_SUBMIT_PDU
SMS_SUBMIT_PDU = "11"
CSMS_reference_number = ""
if len(chunks) > 1:
SMS_SUBMIT_PDU = "51"
CSMS_reference_number = "%0.4X" % random.randrange(1,65536)

# связываемся с модемом
ser = serial.Serial("/dev/ttyUSB0", 115200, timeout=1)
ser.open()

# устанавливаем нужный формат передачи данных
str_send(ser, 'AT+CMGF=0\r')

# передаем кусочки сообщения
i = 1
for chunk in chunks:
emessage = TextToSMS(chunk)
if CSMS_reference_number != "":
emessage = "06" + "08" + "04" + CSMS_reference_number + \
("%0.2X" % len(chunks)) + ("%0.2X" % i) + emessage
sms = \
"00" + \
SMS_SUBMIT_PDU + \
"00" + \
PhoneNumberToSMS("7383XXXXXXX") + \
"00" + \
"08" + \
"AA" + \
"%0.2X" % (len(emessage)/2) + \
emessage
str_send(ser, 'AT+CMGS=' + str(len(sms)/2-1) + '\r')
str_send(ser, sms + '\x1A')
i += 1

# отвязываемся от модема
ser.close()

NB. import serial заработает только если будет установлен модуль pySerial (aptitude install python-serial)

Python CGI

Полезная информация:
http://www.tutorialspoint.com/python/python_cgi_programming.htm
http://kairblog.ru/post/7033/

Настройка Huawei E1750 в Debian Lenny

Настройка Huawei E1750 в Debian Lenny. Ну, у меня e1550, но тоже проканало ^_^

вкратце:
1. смотрим с помощью команды lsusb, что модем вообще виден
2. устанавливаем libusb в соответствии с рекомендациями:
aptitude install tcl libusb-dev make gcc
3. стаскиваем с http://www.draisberghof.de/usb_modeswitch архивы usb-modeswitch и usb-modeswitch-data, распаковываем их и устанавливаем командой sudo make install
4. перезапускаем udev:
sudo invoke-rc.d udev restart
5. переподключаем модем и смотрим, что получилось, командой:
ls -l /dev/ttyUSB*
(у меня какого-то черта вместо /dev/ttyUSB0 получилось: /dev/ttyUSB_utps_modem)

Кстати, ещё, возможно, придется дать права на этот девайс: в /etc/udev/rules.d/50-udev-default.rules прописать примерно такое:
KERNEL=="ttyUSB_utps_modem", MODE="0666"
И применить правила командой:
udevadm control --reload-rules && udevadm trigger

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

Как получить иконку для wine

Проблема такая: при добавлении на рабочий стол ярлыка для запуска программы через wine не удается сделать для нее красивую иконку.
Решение оказалось следующим:
1. Вытаскиваем файл *.ico:
wrestool -x --output=test.ico myApp.exe
2. перегоняем .ico в .png:
convert test.ico myApp.png
А дальше этот png уже можно прописать в качестве значка в файле *.desktop

воскресенье, 10 апреля 2011 г.

Изменение разрешения экрана по умолчанию в Ubuntu

Добавил в секцию "Screen" файла /etc/X11/xorg.conf подсекцию "Display":
Section "Screen"
Identifier "Default Screen"
DefaultDepth 24
SubSection "Display"
Modes "800x600"
EndSubSection
EndSection

Русификация Ubuntu

А с клавиатурой в Ubuntu 10.10 всё совсем хитро: параметры переключения раскладок хранятся теперь в /etc/default/console-setup. Переключение на русский язык по моему любимому сочетанию клавиш Ctrl+Shift выглядит так:
XKBMODEL="pc105"
XKBLAYOUT="us,ru"
XKBVARIANT=","
XKBOPTIONS="grp:ctrl_shift_toggle"

среда, 6 апреля 2011 г.

Язык входа в систему по умолчанию

Порядок раскладок клавиатуры при входе в систему хранится тут:
HKEY_USERS\.DEFAULT\Keyboard Layout\Preload
1 - 00000409 - английский
2 - 00000419 - русский

среда, 23 февраля 2011 г.

Напильник для mpg123

Если выдается такая ошибка:
mpg123: error while loading shared libraries: libmpg123.so.0: cannot open shared object file: No such file or directory
значит, нужно посмотреть и поправить LD_LIBRARY_PATH:
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/usr/local/lib

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

Отключить автономные файлы WinXP

;Отключить использование автономных файлов в проводнике
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\NetCache]
"GoOfflineAction"=dword:00000001
"SyncAtLogoff"=dword:00000000
"NoReminders"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\NetCache]
"Enabled"=dword:00000000

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

Хранилище ссылок

Так как приходится скакать между несколькими компьютерами (N - дома плюс M - в конторе), на которых установлены разные браузеры - Opera, FireFox, Chrome, возникла мысль сделать "Избранное" доступным для всех этих случаев одновременно.

Идея проста: т.к. браузеры вполне легко обрабатывают javascript в командной строке, то можно в их закладки вместо обычной ссылки http://... добавить кусочек кода, который бы сохранял адрес текущего окна в какой-нибудь базе, т.е. примерно такой скрипт:
javascript:window.location.href='http://myStorage/add?l='+encodeURIComponent(location)+'&t='+encodeURIComponent(document.title);void(0);
Соответственно, по адресу http://myStorage/add лежит программка, которая 1. сохранит ссылку, 2. перекинет пользователя обратно на исходную страницу.
(честно говоря, все эти переброски утомляют, и было бы здорово обойтись ajax-ом, но возникло препятствие в виде запрета межсайтового скриптинга)

Тогда можно прикрутив к этой базе веб-интерфейс получить страницу ссылок, доступную откуда угодно, этакое "сетевое Избранное".

В итоге родилось примерно следующее хранилище. Например, в хроме две его ссылки выглядят так:

четверг, 27 января 2011 г.

Проблема с запуском Windows Vista

Симптомы: Windows Vista долго грузится, доходит до ввода логина-пароля, потом отображает черный экран и зависает, точнее, перестает обращать внимание на пользователя.

Каким-то чудом удалось залогиниться. Выяснилось при помощи ProcessMonitor-а, что виноват сервис, отвечающий за ведение журналов:
%WinDir%\System32\svchost.exe -k LocalServiceNetworkRestricted
Конкретно, всё процессорное время отжирает нитка с wevtsvc.dll.

В статье майкрософта описаны те же самые симптомы и предложено решение - удалить файлы системных логов
%SystemRoot%\system32\winevt\Logs\*.evtx

Помогло.