четверг, июня 22, 2006

винды маст дай!

вчера пытался винды поставить...
ох и извращенная операционка.
у меня два винта, на одном линуха, другой запасной.
На основном таблица разделов исторически сложилась в беспорядке: hda1, hda9, hda10, hda5,....
Стал ставить винды на второй винт. Она говорит - чтоб я нормальна грузилась, надо пометить тот раздел, который сейчас активный, как неактивный.
Ну я говорю хрен с тобой, груб с любого загрузит.
и что она сделала - перенумеровала (!) разделы на основном (! не том куда ставлю !) винте, и стерла из его МБР груб!
после чего после перезагрузки выяснилось, что винда не умеет грузиться со слейва.
каким бы словом БГ назвать...

понедельник, июня 19, 2006

Наконец-то я приделал к ion3 то, что давно хотел: теперь, во-первых, в строке состояния показывается имя текущего десктопа, а во-вторых, по Win-B можно быстро переключиться на десктоп, на котором только что были.
Есть, оказывается, такой писатель - Василий Звягинцев. Фантаст. Пишет вполне ничего, тока сюжет придумать мог бы и поинтереснее...

вторник, июня 13, 2006

Новые возможности Vim 7

Тут попросили написать обзор новых возможностей в Vim 7. Ну что ж, получите… :)

Вкладки

Теперь Vim умеет работать со вкладками, как многие GUI текстовые редакторы. Конечно, и раньше можно было открыть два xterm с экземпляром vim в каждом. Но теперь можно нажать yy в одной вкладке, а p - в другой! Вместе с уже традиционной для vim возможностью разбивать каждое окно на два по вертикали или горизонтали вкладки дают потрясающую гибкость интерфейса.

Все команды, предназначенные для работы со вкладками, начинаются с :tab. Перечислю основные из них:

Команда Что делает
:tabnew Новая вкладка
:tabclose Закрыть вкладку
:tabn Перейти к вкладке
:tabnext Следующая вкладка
:tabprevious Предыдущая вкладка

Конечно, набирать такие длинные последовательности символов каждый раз не очень-то удобно. Спасает возможность vim определять для любых действий комбинации клавиш командой map. Например, в большом количестве программ создание новой вкладки назначено на комбинацию Ctrl-T. В vim эта комбинация традиционно используется для возврата по ссылке (а переход по ссылке - Ctrl-]). На мой взгляд, это не самый удачный выбор клавиатурной комбинации. Поэтому можно написать в ~/.vimrc следующее:

map g  :pop      " Вернуться по ссылке

map g " Перейти по ссылке

map :tabnew " Новая вкладка

map :tabclose " Закрыть вкладку

Теперь переход по ссылкам вперед-назад повешен на сочетания g, g, новая вкладка создается по Ctrl-T, а закрывается по Ctrl-A (традиционное во многих программах сочетание Ctrl-W в vim занято - это префикс для операций с окнами).

А я, например, предпочел для операций с вкладками выделить отдельный префикс Ctrl-T, подобно тому как для операций с окнами выделен префикс Ctrl-W:

map n :tabnew      " Новая вкладка

map c :tabclose " Закрыть вкладку

map h :tabprevious " Предыдущая вкладка

map l :tabnext " Следующая вкладка

Кроме перечисленных команд, есть еще целый ряд команд, образованных дописыванием к обычным командам vim префикса :tab. Они делают то же, что и обычные, но - в новой вкладке. Так, например, по команде :tabe filename файл filename откроется для редактирования в новой вкладке.

Еще одна важная команда, работающая со вкладками - :tabdo <команда>. Она выполняет указанную команду сразу во всех открытых вкладках. Это можно использовать, например, для замены текста сразу в нескольких открытых файлах.

Проверка орфографии

Теперь проверка орфографии встроена в vim. Чтобы она заработала, нужно взять с ftp://ftp.vim.org/pub/vim/runtime/spell/ файлы ru.koi8-r.sug и ru.koi8-r.spl (или другие, соответствующие вашей локали) и положить их в ~/.vim/spell. Теперь, чтобы включить проверку орфографии в текущем буфере, нужно дать команду :setlocal spell spelllang=ru (или en, или en,ru, в зависимости от языков вашего текста). Для выключения - :setlocal spell spelllang=. Ошибочные слова в консольном vim подсвечиваются красным фоном, а в gvim - подчеркиваются волнистой красной линией.

Приведу основные клавиатурные команды, относящиеся к проверке орфографии:

Команда Что делает
]s Перейти к следующей ошбке
[s К предыдущей ошибке
z= Выдать список возможных замен
zG Добавить слово в словарь
zW Пометить слово как ошибочное

Умное автодополнение

Vim теперь умеет автодополнение в стиле MS Visual Studio - с выпадающими списками. При редактировании исходного текста, скажем, на C++, находясь в режиме вставки, наберите первые буквы идентификатора, нажмите Ctrl-X,Ctrl-P - и получите выпадающий список с возможными вариантами продолжения (или идентификатор будет дополнен сразу, если продолжение единственно)! Самое удивительное, что выпадающие списки работают даже в консоли.

Умные отмены

Если предыдущие описанные возможности представляли собой перенос идей из других редакторов, то новая система отмен в vim - это пока что уникальная возможность, практически прорыв в нашем представлении о возможностях операции Undo.

Мы уже привыкли представлять себе последовательность действий в редакторе как обычный линейный список. Движение назад по нему возможно только с помощью отмены последнего действия. А если мы сделали действия 1, 2, 3, 4, 5, потом отменили действия 4 и 5 и сделали 6 и 7, то действия 4 и 5 безнадежно забыты.

Vim 7 изменяет это представление. Теперь действия в редакторе образуют не список, а дерево. И в упомянутой только что ситуации мы можем вернуться к состоянию, когда сделаны действия 1, 2, 3 и 4, одной командой :undo 4. А потом можем передумать и сказать :undo 7.

Разберем более наглядный примерчик. Пусть в файле у нас есть слово one. Мы добавляем к нему слово too. Потом исправляем слово too на two. Потом отменяем последнее действие, снова получаем one too. Теперь меняем слово one на me и получаем me too. Добавляем восклицательный знак. Эту последовательность действий можно представить такой диаграммой:

          'one'

|

change 1

|

'one too'

/ \

change 2 change 3

| |

'one two' 'me too'

|

change 4

|

'me too!'

Хотите теперь вернуться к ситуации, когда у вас было one two? Пожалуйста - наберите :undo 2. Передумали и хотите получить me too - наберите :undo 3.

Команда :undo с числовым аргументом полезна, когда вы помните номер изменения, к которому вы хотите вернуться. Посмотреть список последних операций с их номерами можно по команде :undolist. А можно двигаться вперед-назад по дереву отмен, нажимая g+ и g-.

Vim 7 запоминает время, когда было произведено каждое действие. И благодаря этому появляется еще одна инновационная возможность - отмена и отмена отмены по времени. Скажем, вы редактируете большой файл. Например, пишете статью. И вдруг решаете, что все, что вы изменили в ней за последние 30 минут, было сделано неправильно. Наберите :earlier 30m - и получите текст, который был у вас полчаса назад. Решили, что все-таки первые несколько правок за эти 30 минут были правильными - наберите :later 5m.

Ну что я могу сказать?

Воистину, у Vim 7 есть только один конкурент - Emacs с его ELisp-ом (правда, дерева отмен нет и там). И создатели Vim в очередной раз показали, что самый классический редактор в *nix является самым современным.


Last updated 13-Jun-2006 20:32:15 YEKST

Набор латентного виндузятника

Набор латентного виндузятника

В этой заметке я хочу рассказать о нескольких небольших программах, которые в совокупности могут сильно облегчить начинающему линуксоиду переход с Windows. Предположим, нужно "секретарше" (собирательный образ офисного работника, причем сюда же, к сожалению, попадают зачастую и школьные учителя информатики) установить Linux, да так, чтобы по возможности избежать "культурного шока".

Предположим, "большой" софт выбрали (OpenOffice и пр.), систему установили. Иксы поставили, а вот над DE/WM не грех задуматься. Конечно, если машины мощные и памяти до…пояса, можно поставить KDE или GNOME (не зря же этой памяти пропадать ;)). Однако такая ситуация встречается не часто. Чаще имеем (в офисе, скажем) что-то вроде Celeron 1.7G и 256Mb RAM на материнке знаменитой фирмы NoName (или, что еще лучше, SiS). KDE на такой машине, конечно, работает, но как-то свиста (как летает) не слышно. Хотелось бы чего-то полегче. При этом это "что-то" должно по возможности сильнее походить на Windows. И есть такая партия…тьфу, программа, товарищи! Называется она IceWM. Это очень легкий оконный менеджер, при этом, во-первых, в умолчальном виде сильно похожий на Windows, а во-вторых, довольно хорошо настраиваемый. Т.к. пользователь у нас предположительно никогда не работал ни с Linux, ни с X Window System, ни с виртуальными рабочими столами, предлагаю первым делом виртуальные рабочие столы в IceWM отключить. Иначе постоянно придется бегать на мольбы "а у меня все куда-то делось!" (правильно, на другой десктоп переключилась одним кликом мышки). Далее, устанавливаем по умолчанию тему "xp", и вуаля!

Я предлагаю по возможности использовать софт из GNOME или просто gtk2-based. Это, конечно, влечет за собой немало геморроя с зависиостями и прочим, но ведь устанавливаем-то один раз, а работать пользователю придется постоянно! Почему GNOME? Дело в том, что большая часть софта, написанного для GNOME, следует заветам HIG (Human Interface Guides). Которые составлялись профессиональными юзабилистами. В KDE, правда, тоже недавно появились собственные HIG, но только недавно, и софта, написанного с их учетом, пока мало.

Для Gtk2 есть замечательная тема SmoothXP. В сочетании с темой "xp" в IceWM выглядит, во-первых, довольно юзабельно, а во-вторых - весьма похоже на WindowsXP.

Ну, чего еще не хватает до полного windows-подобия? Во-первых, иконок на рабочем столе, во-вторых, explorer-подобного файл-менеджера. И оба эти качества сочетает в себе замечательная софтина по имени rox-filer (очень рекомендую прочитать документацию, там много полезного). Будучи запущен без параметров, rox-filer показывает в explorer-подобном виде содержимое текущей директории. Чтобы заставить его работать с иконками на рабочем столе, нужно запустить его с опцией "-p", например, так:

$ rox -p 0

Что замечательно, rox-овский десктоп работает почти как в Windows, т.е. на него можно вытаскивать документы и прочее. Отличие состоит в том, что в Windows десктоп - это просто папка с файлами, а у rox - это папка со _ссылками_ на файлы. Поэтому в Windows перетаскивание файла из окна "мои документы" на рабочий стол переместит этот файл, а в rox - оставит документ на месте, создав на рабочем столе ссылку на него. Поэтому-то и называется в оригинальной документации rox рабочий стол не "desktop", а "pinboard", на который можно "приколоть" нужные файлы.

Еще бы побороть вечный вопрос начинающего линуксоида - "а где тут мой компьютер?". Делается это, на самом деле, очень просто. Создаем где-нибудь директорию (например, ~/.mycomp), в которую кладем симлинки на нужные нам директории (/, /mnt/floppy, /mnt/cdrom, /mnt/flash и пр.). Вытаскиваем эту директорию на рабочий стол и присваиваем ей подходящую иконку и подпись "мой компьютер". Открываем ее rox-ом и меняем иконки нашим симлинкам, заодно переименовывая их по образу и подобию Windows.

Да, упомянули "мой компьютер" - сразу вспоминается другая вечная проблема начинающего линуксоида - монтирование сменных носителей - флэшек и прочих там дискет. Ну, fstab-то правильно написать мы не забудем, но заставлять секретаршу делать mount/umount… И тут нас выручает rox! Директории, прописанные в fstab как точки монтирования, он помечает серым кружком, если устройство не примонтировано, и зеленым - если примонтировано. При входе в "непримонтированную" точку монтирования rox делает mount. При выходе из нее (по кнопке "вверх" или при закрытии окна) rox спрашивает: желаете ли вы отмонтировать носитель? Достаточно нажать "Отмонтировать", и rox сделает umount. Таким образом, работа со сменными носителями в rox еще более прозрачна, чем в Windows.

При всем при этом rox не является просто копией explorer-а. Я еще не упоминал, что

  • иконки можно легко менять как для отдельных файлов/папок, так и для всего типа файлов сразу,

  • по одной кнопке можно увеличить/уменшить размер иконок,

  • можно легко привязать к одному типу файлов несколько возможных приложений для открытия,

  • работает меню Send To, причем можно сделать так, чтобы определенные приложения показывались в этом меню только для некоторых типов файлов, или только в случае, когда выбрано более одного файла,

  • типы файлов устанавливаются общесистемным способом MIME-type, но при этом есть возможность для конкретных файлов жестко задать тип файла вручную, для этого надо только, чтобы ФС поддерживала User Extended Attributes (XFS поддерживает их по умолчанию, для Ext3 и ReiserFS нужно включить поддержку в ядре и указать опцию user_xattr в fstab),

  • поддерживается меню закладок и меню последних просмотренных директорий,

  • rox умеет показывать превьюшки вместо иконок для картинок (с кешированием),

  • rox поддерживает не только drag-to (это когда перетаскивание файла из окна rox в окно OO Writer влечет открытие этого файла), но и drag-from, т.е. можно из Gimp-a перетащить изображение в окно rox, и оно будет сохранено в соответствующей папке… ?

Неплохой списочек получился, не правда ли? Более того, в rox есть подручные средства, сильно упрощающие работу с explorer-подобным интерфейсом. Например, по нажатию клавиши "`" (на которой "~" и буква "Ё" в русской раскладке) открывается терминал в текущей директории. По нажатию "/" внизу окна появляется панелька, предлагающая ввести текущий путь вручную (причем работает автодополнение). По нажатию "." появляется панель для выбора файлов по маске. По нажатию "?" - панель для выбора по условию - например, можно ввести "size > 30 kb", или "mtime after 1 day ago and size > 10 Mb". В меню "Показать (Show)" есть опция "Filter Files…", позволяющая отобразить только файлы, подходящие под шаблон.

И все бы хорошо… Но есть у rox-а пара недостатков. Первый - при клике правой кнопкой на файле появляется почти то же меню, что и при клике на пустом месте, и чтобы что-то сделать с этим файлом, нужно зайти в подменю. Лечится это легко - нужно в настройках, в разделе "Меню" поставить галочку "File menu on right-click". Второй недостаток более серьезный. Состоит он в том, что rox не дружит с не-unicode локалями. В итоге (при локали, скажем, ru_RU.KOI8-R) русские имена файлов показываются красным цветом с всплывающей подсказкой, сообщающей, что лучше бы файл переименовать. Хотя работать с такими файлами можно. А при создании файлов/директорий с русскими именами он пишет эти имена в кодировке utf-8, что (при локали, отличной от ru_RU.UTF-8) делает их нечитабельными в других программах. Слава богу, для версии rox 2.2.0 есть патч, практически полностью решающий эту проблему. Вот линк на патч: http://dissolution.nm.ru/nix/files/patch-locale-2.2.0 . К сожалению, я не знаю, где надыбать аналогичный патч для более поздних версий rox-filer-a. (при локали ru_RU.UTF-8, насколько мне известно, все нормально).

Ну, будем считать, с файл-менеджером разобрались. Могу еще подсказать аналог ACDSee. Точнее, два аналога. Первый - GQView. Это смотрелка картинок со всеми необходимыми функциями - просмотр сразу по директориям и выбранного изображения отдельно, запуск внешних инструментов и пр. Есть минимальные средства для каталогизации изображений. Отличается от ACDSee тем, что отводит бОльшую часть окна под показ выбранного изображения, а под показ списка файлов в директории (который легко можно заменить на превьюшки) - напротив, меньшую. Во многих случаях так действительно удобнее. Второй аналог - gimageview. Эта программа по умолчанию больше напоминает ACDSee (т.е. большая часть окна отведена под тумбнэйлы). Замечательна она тем, что можно открыть сразу несколько вкладок с превьюшками (из разных директорий). Все необходимые функции, в т.ч. вызов внешних инструментов, здесь также есть.


Last updated 23-Apr-2006 12:49:10 YEKST

Linux для математика

Сегодня DropC спросил меня о математическом софте в Linux. Это тема настолько объемна, что я решил ответить небольшой обзорной статьей. Тем более, что математический софт бывает нужен далеко не только математикам. Более того, большинство пользователей того же MatLAB-a - вовсе не математики, а физики и инженеры. Да и программисту такой софт бывает необходим…

Итак, вопрос: есть ли для Linux (*nix) аналоги известных коммерческих математических пакетов? Ответ: есть, более чем.

Небольшая табличка аналогов:

Коммерческий пакет для Windows Аналог для Linux Лицензия Homepage Комментарии
MathCAD Symaxx/2 GPL symaxx.sf.net К сожалению, не очень интуитивный интерфейс. Является графическим front-end-ом к Maxima. Написан на Perl/Tk.
MuPAD Коммерческий www.mupad.de Не видел ;)
Mathematica, Maple maxima GPL maxima.sf.net Прародитель Mathematica и Maple.
axiom GPL axiom-developer.or g До 2001г. - самая дорогая система компьютерной алгебры (по слухам, порядка $200k).
Mathematica Linux Коммерческая wolfram.com Практически полный аналог своей сестры для Windows, только бывают проблемы со шрифтами
Maple Linux Коммерческая maplesoft.com
MatLAB SciLAB Своя, типа GPL scilab.com Почти совместим с MatLAB 5/6 на уровне исходников.
Octave GPL octave.org Нет своего аналога Simulink. Почти совместима с MatLAB.
MatLAB Linux Коммерческая mathworks.com Дороже своей Windows-версии
Statistica R GPL r-project.org Мощный язык для статистических вычислений + куча модулей.
OpenDX GPL opendx.org Одна из мощнейших в мире систем визуализации данных.

И здесь еще не все перечислено… Математического софта под *nix просто море.

Причем интересна его история.

В 50-60-х годах в США на волне интереса к компьютерам начали создавать системы компьютерной алгебры. (в смысле, программы, способные сообразить, что (a+b)2 = a2+2ab+b^2, не зная, что такое a и b). И, конечно, такая софтина нужна была одному мирному американскому ведомству. И это ведомство объявило конкурс на лучшую CAS (Computer Algebra System) для своих нужд, пообещав всяческую поддержку. Конкурс этот выиграл мало кому известный тогда проект Macsyma (CAS, написанная на Lisp). И, получив поддержку, очень неплохо развивался как коммерческий проект года так до 1984. А в 1984 году небезызвестный Richard Stollman объявил о создании FSF и опубликовал первую версию GPL. Услыхав про это, один из отцов-основателей проекта Macsyma заявил руководству (и Пентагону) ультиматум: "либо а) мне передают все наработки проекта, и я паралельно развиваю GPL-версию Macsyma, либо б) я ухожу из проекта". Так как второй вариант означал быстрый распад проекта, Пентагон вынужден был согласиться на первый. Так появилась свободная CAS под названием Maxima. Она развивалась паралельно с Macsyma до начала 1990-х. А в 1991 СССР распался, холодная война кончилась, и Пентагон прекратил финансирование проекта. В 1994 Macsyma прекратила свое развитие. Исходники были частично распроданы, и на их основе вскоре появились Mathematica и Maple. А Maxima продолжает развиваться до сих пор.

С axiom вышла тоже интересная история. Этот проект развивался самостоятельно, и развился в очень мощную и очень дорогую CAS. Однако, организаций, способных заплатить несколько сот тысяч баксов за копию программы, не так уж много. Так что к началу XXI века продажи резко упали (рынок был насыщен), и проект стал коммерчески нерентабельным. Тогда авторы axiom выпустили ее под лицензией GPL.

Maxima и Axiom замечательны уровнем абстракции, который они предоставляют пользователю. Они поддерживают так называемые Rule-based преобразования. Например, можно задать, что "f(A and B)" переходит в "f(A) or f(B)", и CAS сделает преобразование, не задумываясь ни о том, что такое A и B, ни о смысле операций and или or. Это позволяет производить преобразования не только над математическими выражениями, но над чем угодно, что может быть записано в виде формулы.

Изюминка Maxima состоит в большой гибкости синтаксиса. Например, объявив "f(x,y):= x2-y2", можно объявть f инфиксным оператором и писать далее вместо "f(x,y)" - "x f y".

У Axiom тоже есть свои изюминки. Во-первых, это язык с очень мощной и простой системой типов. Например, можно объявить "A: List Matrix Rational Polynomial Complex" - "пусть А - это список матриц из дробей, числителями и знаменателями которых являются многочлены над комплексными числами". Во-вторых, поддерживаются весьма абстрактные операции из области абстрактной алгебры и теории чисел. "Приведение многочленов над полем Галуа" - слышали про такое? Криптоаналитики слышат каждый день. А в Axiom для этого есть встроенная функция. В-третьих, Axiom имеет очень интересный алгоритм вычисления интегралов. Большинство CAS, встретив слишком сложный для них интеграл, просто оставляют его как есть. Это у них означает "Либо интеграл не берется в элементарных функциях вообще, либо я просто не знаю, как его брать". Axiom выдаст интеграл как был только в том случае, когда может математически доказать, что взять его в элементарных функциях невозможно.

Из CAS под Linux можно упомянуть еще yacas, yorick и GAP. Все это свободный софт.

GAP - совершенно замечательная система. Ее название - аббревиатура, расшифровывается как "Groups, Alghorithms and Programming". Это изначально свободный (GPL) проект создания модульной системы для абстрактной алгебры. На сегодняшний день это мощнейшая из систем такого рода (в том числе и коммерческих). Здесь "поле", "кольцо", "группа" - это типы данных, а "вычисление идеала банаховой алгебры" - стандартная функция.

Ну ладно, CAS обсудили, поехали к "числодробилкам" (системам численных вычислений). Из коммерческих продуктов здесь на ум сразу приходит MatLAB. Это очень дорогая система. В том составе, в котором мы привыкли видеть ее на пиратских дисках, она стоит что-то от $40k "студенческая лицензия" (т.е. с правом установки на один компьютер один раз, без тех.поддержки) до $60k Enterprise Edition.

Проект SciLAB появился как коммерческий, но более дешевый конкурент MatLAB-a. Коммерчески проект себя не оправдал, и исходники открыли. Лицензия - "почти GPL", но с изменениями, направленными на то, чтобы затруднить появление многочисленных мало совместимых версий. Эта программа почти полностью совмекстима с MatLAB на уровне исходных текстов (m-файлов). Здесь есть даже аналог Simulink - средства визуального проектирования математических моделей.

Octave появился как "чисто GNU GPL" конкурент SciLAB-a. На сегодняшний день во многом совместима с MatLAB-ом, но нет аналога Simulink.

Из этой же серии можно отметить Tela - "interactive tensor language". Замечателен pascal-подобным синтаксисом.

Остались только программы для статистиков.

В качестве функциональной замены системы Statistica можно посоветовать язык статистических вычислений R. Это очень мощный язык, плюс к нему написаны десятки модулей для конкретных задач (кластерный анализ, финансовый инженеринг, распределенные вычисления…).

Для визуализации численных данных ученые всего мира используют OpenDX. Изначально это недешевый продукт IBM (dx - data explorer), однако исходники открыли, сейчас это GPL-проект. Считается мощнейшей системой в своем классе.

Материалы собраны по всему Интернету, плюс личный опыт общения с CAS и числодробилками.


Last updated 02-May-2006 21:51:13 YEKST