суббота, сентября 08, 2007
"Состояния клавиатуры" в ion3
STATE=0
function toggle_state(ws)
if STATE==1 then
STATE=0
ioncore.exec_on(ws,"xset -led 3")
else
STATE=1
ioncore.exec_on(ws,"xset led 3")
end
end
function exec_on_if(ws,prog_true,prog_false)
if STATE==1 then
ioncore.exec_on(ws,prog_true)
else
ioncore.exec_on(ws,prog_false)
end
end
function exec_if(prog_true,prog_false)
return "exec_on_if(_,'"..prog_true.."','"..prog_false.."')"
end
....
kpress("Scroll_Lock","toggle_state(_)"),
kpress("XF86AudioPlay", exec_if('audacious -t', GIMP)),
kpress("XF86AudioStop", exec_if('audacious -s', 'mypaint')),
kpress("XF86AudioNext", exec_if('audacious -f', 'gedit')),
kpress("XF86AudioPrev", exec_if('audacious -r', 'gqview')),
kpress("XF86AudioMute", exec_if('xvolume toggle', 'inkscape')),
kpress("XF86AudioRaiseVolume", exec_if('xvolume 5+%', 'liferea')),
kpress("XF86AudioLowerVolume", exec_if('xvolume 5-%', 'f-spot')),
Как это работает.
В режиме "0" (по умолчанию) "аудио" клавиши запускают приложения. В режиме "1" - управляют плеером. Переключение между режимами - клавишей ScrollLock. Индикация режима - соответствующей лампочкой на клавиатуре.
Конечно, постоянно переключать режимы - не очень удобно, но изредка - в самый раз.
среда, сентября 05, 2007
LiveMath: Продолжаю штамповать LiveCD.
Системы компьютерной алгебры:
Maxima (http://maxima.sourceforge.net) - полнофункциональная система аналитических вычислений;
Axiom (http://axiom-developer.org) - мощная система компьютерной алгебры;
YaCas (http://yacas.sourceforge.net) - еще одна система компьютерной алгебры;
PARI/GP (http://pari.math.u-bordeaux.fr/) - широко используемая компьютерно-алгебраическая система, разработанная для быстрых вычислений в теории чисел (факторизации, алгебраическая теория чисел, эллиптические кривые...);
GAP (http://www.gap-system.org/) - свободно распространяемый, открытый и расширяемый программный комплекс для применения в области вычислительной дискретной математики, в частности, теории групп;
Mathomatic (http://www.mathomatic.org/) - переносимая, универсальная программа, которая может решать, упрощать, группировать, дифференцировать, интегрировать и сравнивать алгебраические выражения;
Системы автоматизации доказательств:
ACL2 (http://www.cs.utexas.edu/users/moore/acl2/) - язык программирования для моделирования компьютерных систем и средство, помогающее доказывать свойства этих моделей;
Coq (http://coq.inria.fr/) - система автоматизированного построения доказательств, с помощью которой, кроме всего прочего, была решена проблема четырех красок;
HOL (http://hol.sourceforge.net) - система автоматизации доказательств для логики высших порядков;
Системы численных вычислений:
SciLab (http://www.scilab.org/) - пакет научных программ для численных вычислений, предоставляющий мощное открытое окружение для инженерных и научных расчетов;
GNU Octave (http://www.octave.org/) - язык высокого уровня, предназначенный для выполнения математических вычислений;
Tela (http://www.geo.fmi.fi/prog/tela.html) - "интерактивный тензорный язык" для численных вычислений;
Разное:
Yorick (http://yorick.sourceforge.net/) - компактная программная среда, предназначенная для комплексного решения научно-инженерных вычислительных задач;
GNU R (http://r-project.org/) - мощный язык статистических вычислений, используемый профессиональными статистиками;
GRETL (http://gretl.sourceforge.net/) - система эконометрического анализа;
Kig (http://edu.kde.org/kig/) - интерактивная геометрия;
Инструменты построения графиков - geg, kmplot, gnuplot;
Визуализация данных:
Mayavi (http://mayavi.sourceforge.net/) - открытый пакет научной 2D и 3D визуализации данных;
OpenDX (http://www.opendx.org/) - программное средство для анализа данных в графическом виде, визуализации научных данных;
GGobi (http://www.ggobi.org/) - среда визуализации многомерных данных;
LabPlot (http://labplot.sourceforge.net/) - программа для анализа и визуализации различных данных;
Grace6 (http://plasma-gate.weizmann.ac.il/Grace/) - программа для подготовки двумерных графиков по численным данным;
PAW (http://cern.ch/paw/) - интерактивная программа анализа и графического представления результатов. Может применяться для анализа большого и очень большого объёма данных;
Научные редакторы:
teTeX (http://www.tug.org/tetex/) - полноценный дистрибутив TeX;
TeXmacs (http://texmacs.org) - текстовый редактор для набора математических и прочих научных текстов, также позволяет включать в документ сессии Axiom, Maxima, Octave, SciLab и других систем компьютерной математики;
Kile (http://kile.sourceforge.net/) - интегрированная среда подготовки документов с помощью TeX;
Texmaker (http://www.xm1math.net/texmaker/) - интегрированная оболочка для LaTeX;
LyX (http://www.lyx.org/) - WYSIWYM (What You See Is What You MEAN) редактор который работает как front end to LaTeX;
Здесь не упомянуты пара текстовых редакторов, браузер, почтовик, а также фронт-енды к упомянутым системам, ну и еще кучка дополнительных программ. Все основные программы с встроенным хелпом, а также на CD есть еще подборка документации по ним.
пятница, августа 31, 2007
Пара слов о Xorg
Это я на самом деле в продолжение темы о LiveCD. Ибо там традиционно вставал вопрос - как написать универсальный xorg.conf ?
Сейчас это практически не проблема. Указываем
Driver "vesa"
Этого вполне достаточно на большинстве видух (ну да, 3Д ускорением и не пахнет, но зачем оно на LiveCD?). Для всех остальных добавляем куда-нибудь в startup-скрипты такой код:
DRIVER=$(egrep -o 'x11=[a-z0-9]+' /proc/cmdline | cut -d'=' -f2)
if [ "$DRIVER" ]
then sed -i -e "s/vesa/$DRIVER/" /etc/X11/xorg.conf
fi
Это позволяет указать нужный драйвер при запуске livecd (в приглашении isolinux вводим, например: "linux x11=sis").
Опции VertRefresh и HorizSync (которые в свое время, помнится, могли стоить испорченной видухи или монитора) не указываем вообще. Xorg их сам спросит у монитора и выставит максимальную рабочую частоту. Аналогично, можно не указывать строчку Modes. Или указать, перечислив возможные разрешения: Modes "1024x768" "800x600" "640x480".
четверг, августа 16, 2007
Сборка из исходников в Debian.
Но оба этих механизма берут исходники из репозитариев debian. Хорошо это или плохо - зависит от ситуации. В том случае, если мы пересобираем пакет с тем, чтобы улучшить оптимизацию или включить какую-то возможность - это хорошо. А в случае, если нам нужна последняя версия программы (вплоть до svn), это плохо - в репозиториях оказываются только более-менее протестированные версии.
Итак, задача - собрать программу из исходников, полученных прямо с оф.сайта (или даже из svn). Скачали, распаковали. По логике, сейчас надо делать ./configure, make, make install. Только обновлять или удалять потом все файлы этой программы - будет целая история. Не говоря уж о том, чтоб быстро и просто перенести скомпиленное на другой комп. Отсюда возникает идея сделать некую обёртку над make install, которая будет сразу собирать deb-пакет и устанавливать его в систему.
Идея эта не нова, такие обертки уже есть. Самой известной является checkinstall. Она отслеживает, куда какие файлы пытается копировать make install, и все их записывает потом в deb-пакет. Я долго пользовался checkinstall, но это как оказалось не универсально и тем более не гибко. Так что я решил изобрести очередной велосипед ;) Правда, этот мой велосипед работает только для программ, которые понимают переменную DESTDIR (она должна указывать make install-у, куда копировать файлы) или другую с тем же смыслом. Но, насколько я понимаю, к этому классу относится большинство программ, использующих autotools. Зато он с точки зрения устанавливаемой программы выглядит "более естественно", и не требует рутовых привелегий вплоть до установки пакета (используется sudo).
Итак, вот обертка над make install (у меня называется /usr/local/bin/debinstall):
#!/bin/bash
# Установить пакет из исходников.
# Управляющие переменные:
# $DSTVAR - имя переменной, используемой make install в качестве префикса;
# по умолчанию - DESTDIR.
# $INSTALL - команда, устанавливающая программу; по умолчанию - make install.
set -e
DDIR=${DSTVAR:-DESTDIR}
INSTALL=${INSTALL:-make install}
IDIR=install_dir
if [ -d $IDIR ]
then mv $IDIR/DEBIAN .DEBIAN
rm -rf $IDIR
mkdir $IDIR
mv .DEBIAN $IDIR/DEBIAN
else mkdir $IDIR
fi
$INSTALL $DDIR=$(pwd)/$IDIR
mkdir -p $IDIR/DEBIAN
if [ -e $IDIR/DEBIAN/control ]
then :
else cp ~/.control.template $IDIR/DEBIAN/control
fi
${EDITOR:-vim} $IDIR/DEBIAN/control
cd $IDIR
echo -n "Enter the name of .deb package: "
read NAME
dpkg-deb -b . ../$NAME
sudo dpkg -i ../$NAME
Ну и тогда уж пусть будет обертка над всем заклинанием "configure; make; make install" (у меня называется /usr/local/bin/debuild):
#!/bin/bash
# Скомпилировать и установить программу из исходников.
# Управляющие переменные:
# $OPTIONS - опции сборки, передаваемые ./configure;
# Если существует файл build-options, дефолтные опции берутся из него.
# $CFLAGS, $CPPFLAGS, etc - как обычно, параметры компилятора
# Также см. описание в скрипте debinstall.
set -e
if [ -e build-options ]
then OPTIONS="$(cat build-options) $OPTIONS"
fi
if [ -x configure ]
then ./configure --prefix=/usr $OPTIONS
else if [ -x autogen.sh ]
then ./autogen.sh
./configure --prefix=/usr $OPTIONS
fi
fi
make
debinstall
Т.о. , обновление некоторых программ у меня теперь выглядит так:
cd ~/src/../
svn update
debuild
суббота, августа 11, 2007
FAQ: что такое Linux?
Q. Что такое эта Linux?
A. Linux - это свободная операционная система.
Q. Так. А что такое операционная система?
A. Это комплекс программ, запускающий все остальные программы, и необходимый им (программам) для 1) работы с оборудованием компьютера, 2) для взаимодействия с пользователем. Кроме того, операционная система (как правило) позволяет запускать несколько программ одновременно и обеспечивает их взаимодействие между собой. Коротко говоря, операционная система (ОС) - это главная программа на компьютере. Примерами операционных систем являются: UNIX, Linux, Solaris, Windows, DOS.
Q. Так. А что означает "свободная"?
A. Термин "свободная" применительно к программе означает, что лицензия на эту программу гарантирует вам как минимум четыре основных свободы: 0) Свобода запускать программу в любых целях; 1) Свобода изучения работы программы и адаптация ее к вашим нуждам; 2) Свобода распространять копии, так что вы можете помочь вашему товарищу; 3) Свобода улучшать программу и публиковать ваши улучшения, так что все общество выиграет от этого.
Q. Кто создает Linux и другие свободные программы?
A. Огромное количество разработчиков по всему миру.
Q. Ну как эта компания называется?
A. Это не компания. Это то, что люди называют _сообществом_. Просто большое количество людей, которых объединяют только общие взгляды на IT-индустрию и общее дело.
Q. А какая им от этого выгода?
A. Большинство из этих людей работает ради собственного удовольствия (Just for fun). Многим их работу оплачивают компании, которые хотят иметь более высококачественное ПО. Более того, есть компании, специализирующиеся на разработке свободного ПО.
Q. А какая выгода компаниям, раз эти программы бесплатные?
A. Во-первых, программы эти не бесплатные, а свободные. Разница примерно как между "халявным пивом" и "свободным словом". В частности, это означает, что эти программы можно продавать и покупать, но при этом любой желающий может получить их свободно. Но все равно не бесплатно - придется платить за носитель (диск) или за интернет-трафик. Так что многие компании зарабатывают, распространяя свободные программы - например, рассылая диски по почте. В России самая известная из таких компаний - это LinuxCenter. Во-вторых, многие компании зарабатывают в основном не на продаже программ, а на их поддержке. Ведь скачать программу - это только начало, дальше нужно научиться ее использовать. Для организаций это выливается в издержки по обучению персонала, издержки по внедрению, и издержки на поддержку пользователей. Неудивительно, что существуют компании, специализирующиеся на решении таких проблем. Это составляет основной доход таких гигантов, как RedHat и Novell. В Магнитогорске этим занимается компания RTFM.
Q. И много их, этих энтузиастов?
A. Точной статистики нет ни у кого. Однако есть оценки, согласно которым над одной свободной программой _в среднем_ работают 3 человека. А общее количество свободных программ оценивается в 378000. Простым перемножением получаем свыше миллиона разработчиков.
Q. А много ли людей пользуются Linux?
A. Опять же, точной статистики нет. Но, как минимум, известно, что Linux используется во всех государственных учереждениях в Бельгии, Франции, Норвегии, Китае. Это уже многие миллионы человек. У нас в стране многие ВУЗы используют Linux - в частности, Московский государственный технический университет им.Н.Э.Баумана. Кроме того, очень многие используют Linux, не зная об этом. Linux стоит на миллионах серверов в Интернете. Linux используется в автоматизации производства. Linux установлен на множестве небольших устройств - это ADSL-модемы и другое сетевое оборудование, смартфоны и КПК, DVD-плейеры и многое другое. Многие миллионы человек, использующие эти устройства, тем самым используют Linux.
Q. Как давно существует Linux?
A. Собственно Linux появилась в 1991 году. Однако часто, говоря "Linux", подразумевают операционную систему, от которой Linux берет все основные идеи - UNIX. UNIX появилась в 1969 году.
Q. Раз эти программы создают мало кому известные люди, какие гарантии того, что они не встроят в программы вредоносный или шпионский код?
A. Одно из ключевых свойств свободных программ - они распространяются в исходных кодах. Каждый сомневающийся может свободно взять (в Интернете или на дисках) эти исходные коды, изучить их, обнаружить и исправить ошибки и скомпилировать для себя.
Q. Что за слова такие - "исходный код", "скомпилировать" ?
A. Программисты пишут программы на специальных языках, называемых языками программирования. Эти языки более-менее близки к обычным, естественным языкам, на них вполне может читать и писать человек (при соответствующей подготовке, разумеется). Вот эти тексты, которые пишут программисты, и называются "исходными кодами". Однако компьютер сам по себе "не понимает" этих языков программирования, он понимает только так называемый "машинный код", образно говоря - единицы и нули. Для перевода с языков программирования на машинный язык созданы программы - трансляторы, или, иначе, компиляторы. Так что чтобы получить из исходных кодов нечто, что можно запустить, нужно эти исходные коды _скомпилировать_.
Q. И чем же так замечательно распространение программ в исходных кодах?
A. Коммерческие программы (обычно) распространяются без исходных кодов, в виде уже скомпилированного машинного кода. Весь фокус в том, что обратное преобразование - из машинного кода в исходный - технически очень сложно, а юридически - запрещено лицензией. А машинный код человеку все равно не понять. Таким образом, производитель может встраивать в свои (коммерческие, закрытые) программы все что ему вздумается - вредоносный или шпионский код, например - пользователь об этом даже не узнает. А при наличии исходных кодов их может прочитать и понять любой программист, и он быстро выявит любые несуразности. Если вы не программист, вы можете просто позвать знакомого программиста…
Q. Но это все не означает, что я должен… как его… компилировать все программы?
A. Конечно, не означает. Свободные программы распространяются не только в исходных кодах, но и в скомпилированном виде. Огромное количество свободных программ поставляется на дисках с дистрибутивом операционной системы Linux.
вторник, июля 03, 2007
Купил мультимедийную клавиатуру
Давно хотел, ибо у обычной клавиатуры клавиш банально не хватает. Ну действительно, алфавитные клавиши заняты просто алфавитом, Ctrl-буква используются во многих приложениях, Alt-буква - используются для вызова меню итп. Остаются только сочетания Win+что-то. Но все их я давно уже занял на операции с окнами, запуск основных программ итп. Так что в последнее время у меня начали появляться всякие "емаксерские" комбинации, вроде "Win-X,L" для управления разными named scratchpad-ами. Что не есть удобно :)
Купил клаву Defender Virtuoso какую-то. Появился лишний десяток кнопок, половину из них занял сразу под управление скратчпадами.
Клавиатура, видимо, использует нестандартные коды клавиш для XF86Play итп., так как иксы их сходу не узнали, пришлось дописывать в ~/.Xmodmap:
keycode 148 = XF86Cut
keycode 202 = XF86Copy
keycode 101 = XF86Paste
keycode 162 = XF86AudioPlay
keycode 164 = XF86AudioStop
keycode 144 = XF86AudioPrev
keycode 153 = XF86AudioNext
keycode 160 = XF86AudioMute
keycode 174 = XF86AudioLowerVolume
keycode 176 = XF86AudioRaiseVolume
keycode 229 = XF86Search
keycode 178 = XF86HomePage
keycode 236 = XF86Mail
keycode 230 = XF86Favorites
keycode 233 = XF86Forward
keycode 234 = XF86Back
keycode 231 = XF86Refresh
keycode 161 = XF86Calculator
Тогда запахало почти всё, кроме XF86Cut,Copy,Paste - их иксы не видели, а ядро в логах ругалось на неопределенные сканкоды. Совет ядра воспользоваться утилитой setkeycodes помог. Написал в /etc/init.d/rc.local:
setkeycodes e025 222
setkeycodes e026 223
setkeycodes e023 224
Только вот приложения, как выяснилось, по умолчанию такие клавиши (Cut,Copy,Paste) не понимают. Ну мне-то все равно, я на них скратчпады повесил в ion-е, но хочется, чтобы у родни они работали соответственно иконкам на них (вырезать-копировать-вставить). Долго мучался, нашел решение в виде xbindkeys+xvkbd. В .xbindkeysrc пишем:
"xvkbd -xsendevent -text '\Cx'"
Mod2 + XF86Cut
"xvkbd -xsendevent -text '\Cc'"
Mod2 + XF86Copy
"xvkbd -xsendevent -text '\Cv'"
Mod2 + XF86Paste
Откуда Mod2 и почему именно Mod2 - не спрашивайте, не знаю :) Именно так определил эти клавиши xbindkeys -k.
И заодно, раз уж взялся настраивать клавиатуру, решил осуществить еще одно давнее желание - чтоб стандартные комбинации клавиш (напр., вимовские hjkl, башевские Ctrl-A,Ctrl-E и пр.) работали во всех приложениях. Понятно, что в чистом виде это неосуществимо - каждое приложение работает с клавиатурой по-своему. Поэтому пришлось добавить "модификатор" на CapsLock и работать с ним. Делается это так: в /usr/share/X11/xkb/symbols/addkeys пишем:
partial alphanumeric_keys
xkb_symbols "en" {
include "us"
name[Group1]= "US - Additional";
key.type[group1]="FOUR_LEVEL";
key <ac01> { [ a, A, Home, Home ] };
key <ad03> { [ e, E, End, End ] };
key <ac05> { [ g, G, Home, End ] };
key <ac06> { [ h, H, Left, Left ] };
key <ac07> { [ j, J, Down, Down ] };
key <ac08> { [ k, K, Up, Up ] };
key <ac09> { [ l, L, Right, Right ] };
key <ac03> { [ d, D, Delete, Delete ] };
include "addkeys(caps_switch)"
};
partial alphanumeric_keys
xkb_symbols "ru" {
include "ru(winkeys)"
name[Group1]= "Russia - Winkeys - Additional";
key.type[group1]="FOUR_LEVEL";
key <ac01> { [ Cyrillic_ef, Cyrillic_EF, Home, Home ] };
key <ad03> { [ Cyrillic_u, Cyrillic_U, End, End ] };
key <ac05> { [ Cyrillic_pe, Cyrillic_PE, Home, End ] };
key <ac06> { [ Cyrillic_er, Cyrillic_ER, Left, Left ] };
key <ac07> { [ Cyrillic_o, Cyrillic_O, Down, Down ] };
key <ac08> { [ Cyrillic_el, Cyrillic_EL, Up, Up ] };
key <ac09> { [ Cyrillic_de, Cyrillic_DE, Right, Right ] };
key <ac03> { [ Cyrillic_ve, Cyrillic_VE, Delete, Delete ] };
include "addkeys(caps_switch)"
};
default partial modifier_keys
xkb_symbols "caps_switch" {
key <caps> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
modifier_map Mod5 { ISO_Level3_Shift };
};
И в /etc/X11/xorg.conf заменяем
Option "XkbLayout" "us,ru(winkeys)"
(ну или что там у вас) на
Option "XkbLayout" "addkeys(en),addkeys(ru)"
Все. Теперь Caps+hjkl - это стрелки, Caps+A - это Home, Caps+E - End, Caps+g - Home, Caps+Shift+g - End, Caps+D - Delete. При желании можно добавить и другие клавиши.

