FastNetMon

Saturday 29 September 2007

Сборка собственнной IDE для С/С++/Perl на основе gVim

Ну что же, слов сказано достаточно много, пора переходить к действиям.
Для начала я буду излагать одно из требований, предъявляемое к нашей среде разработки, а потом перейдём к их реализации.

#1.Табы, табы и ещё раз табы, не знаю как Вы, а я баз них просто не могу жить.

Это решение я нашёл в блоге http://allaboutvim.blogspot.com/2007/07/blog-post_22.html , за что огромное спасибо автору. Табы создаются в Виме командой :tabnew или через меню Файл -> OpenTab.

Поехали далее. Вот, допустим, у нас gvim ассоциирован с файлами типа .txt (.pl/.cpp/.c соответственно) и у нас уже есть один открытый экземпляр Вима с парой табов. Что же произойдёт, если мы откроем ещё файл, но не из вима, а посредством щелчка двойного на файле или вызова через консоль? Совершенно верно, запустится ещё один экземпляр вима, который захламит нам весь рабочий стол. Мы будем бороться с этим безобразием следующим образом:
gvim --remote-tab-silent /etc/vimrc
При таком способе вызова gvim`а, новая копия редактора создаваться не будет (конечно же, если уже открыт один экземляр), а будет открыт отдельный таб для данного файла, что нам и нужно. Но помнить такую длиннющую команду просто нереально, поэтому нам нужно будет сделать своего рода "алиас" к данной команде, назовём мы его tvim (т.е. tab+vim).
su 
cd /usr/bin
vim tvim

В этот файл вбиваем следующий код:
#!/usr/bin/perl
use strict;
use warnings;

my@m=`gvim --serverlist`;
my $q=@ARGV?"\"@ARGV\"":'';
(scalar @m)?
exec "gvim --servername TVIM --remote-tab-silent $q":
exec "gvim --servername TVIM $q";

Сохраняем файл, ставим флаг исполнения: chmod +x tvim и на этом работа со скриптом закончена.


Если Вы немного знакомы с параметрами командной строки gVim`а, то, наверное, догадались, что будет делать данный скрипт, а делает он следующее - проверяет наличие уже загруженной копии редактора и в случае, если проверка увенчалась успехом открывает файл отдельном табе, вместо создания ещё одной копии редактора.

Далее нам нужно будет произвести интеграцию данного решения в КДЕ (если кто-л. опишет, как сделать подобное в Гноме буду благодарен). Во-первых нужно будет связать файлы .pl, .c и .cpp с нашим "новым" редактором tvim. Для этого щёлкаем на файле каждого из представленных типов правой кнопкой, выбираем "Открыть в", а потом "Другое приложение"; в верхней строке вписываем tvim и ставим галочку "Запомнить связь с приложением для этого файла" и щёлкаем ОК. После данной операции все файлы указанных расширений будут открываться в tvim.

Далее вопрос уже скорее косметического характера, а именно появление на десяток секунд окошка с названием tvim в панели задач, которое лично меня просто дико раздражает и создаёт впечатление, что программа ещё грузится, хотя это не так. Для борьбы с данной напастью открываем Центр управления KDE, там выбираем вкладку "Внешний вид и темы", потом "Запуск отчета" и убираем галочку "Уведомление на панели задач", а также я бы советовал поставить поле Курсор занятости в положение "Пассивный курсор занятости" с нулевым временем индикации.

Ну вот и всё) Теперь попробуйте открыть несколько файлов, например .cpp, и последить, как они будут открываться. В итоге этих манипуляций поулчаем нечто подобное вот этому:

Friday 28 September 2007

Выбор IDE или хождения по мукам, фильм первый

Вот в недавнее время занимался выбором удобной среды разработки для С\С++\Perl и в итоге пришёл к выводу, что удобоваримых сред разработки нету как таковых...ну, давайте по порядку.

Сначала пролистал среды разработки заточенные специально под Qt4, среди которых оказались: Edyuk, QDevrlop, MonkeyStudio, все программы собирались напрямую из SVN, дабы получить наиболее полное представление о новых функция и задумках авторов (а иногда это было уже вынужденной мерой, т.к. RPM пакетов под мою 64 разрядную систему не было как таковых).

Общее впечатление от программ весьма неплохое, почти все используют (или пытаются использовать) интеграцию с QDesigner (редактор графического интерфейса для Qt), имеют меню просмотра файлов проекта, а также просмотр структуры классов, описанных в файлах проекта. Настройки редакторов кода достаточно скудны, следовательно, гибкости ожидать не стоит. Очень порадовали шаблоны Qt4 приложений основных видов (Dialog based, Application и Console Applocation) в QDevelop, опция из разряда - мелочь, а приятно).

Ну что в итоге мы имеем, более-менее функционирующие (зависания были достаточно часты, но это не недостаток программ - все же я их брал из репозиториев разработки и этого следовало ждать), со всеми джентльменскими функциями, почти во всех программах (которые внешне были достаточно сильно похожи, что заставляет задуматься об общем их прародителе) присутствовал встроенный отладчик и возможность удобной (без привлечения внешних средств) сборки Qt4 приложений. Хотелось бы ещё отметить, что сборка QDevelop осуществляется посредством универсальной системы сборки CMAKE, что очень меня радует, т.к. я использую именно её в своих проектах, чего и вам советую.

Но все же остаётся какой-то не очень приятный осадок от этих сред разработки - вроде бы все есть, но чего-то всегда не хватает и адекватной возможности расширить функционал не предоставляется (ну, конечно, за исключением вмешательства в исходный код этих сред). Так что на данном этапе данные среды разработки я пока оставляю, хотя не исключаю вероятности вернуться к ним позже.

Пошли далее. Как бы наиболее продвинутыми (чисто субъективное мнение) по части всевозможных фич являются среды разработки на языке Java. Мы рассмотрим Netbeans и Eclipse с плагином CDT (кстати говоря, на момент написания статьи уже вышел плагин интеграции Qt Дизайнера для Eclipse).

Начнём с NetBeans6beta, опять же мы работаем с самой новейшей версией (стабильной версией в данный момент считается версия 5.5.1), список возможностей которой мягко сказать поражает (они в основном ориентированы на Java). Ну вот, поставив JDK6, дополнительные 512 мб оперативной памяти (когда было 512 мб памяти работать было просто невозможно, ибо нетбинс кушал почти всю оперативную память и система вела себя подобно улитке, завязшей в студень) я приступил к изучению данной среды и её возможностей по части разработки на С++.

При создании проекта нам предоставляется выбор из четырёх возможностей - Статическая библиотека, Динамическая библиотека, Консольное приложение и создание проекта из существующих файлов. Присутствует обёртка к отладчику GDB, что похвально, вроде даже есть возможность использовать встроенный профайлер и для проектов на С++. А вместе с достаточно удобным редактором и вовсе получаем чуть ли не требуемый идеал... если бы не одно "но".

Для справки работаю я на достаточно не слабом по современным меркам ноутбуке (Turion Tl52x2,1Гб DDR2) и, казалось бы, о тормозазах и лагах давно должен был забыть, оказывается нет - Джава и иже с ней Нетбинс заставили меня вспомнить о них. Вроде бы лаг не очень большой, но достаёт просто дико, т.к. проявляется почти всегда - при переходе от одного файла проекта к другому, перед сборкой, перед запуском, в итоге по чуть-чуть и набираем лаги, очень сильно действующие на нервы.

При разработке на языке Java c лагами ещё как-то можно мириться, но на С\С++ это, увы, непозволительная роскошь (вполне вероятно, что я слишком придираюсь, но после почти мгновенных сборок посредством связки cmake+Vim, торможение очень заметно).

Далее, Eclipse, на мой взгляд, замечательная среда разработки, но опять же только для Java проектов, по этой причине, все перечисленное для Нетбинса применимо и к ней, увы. В итоге уже пять забракованных сред разработки, неплохо для начала)

KDevelop, тут уже все намного лучше, быстрая, красивая, современная многофункциональная среда разработки с поддержкой многих языков программирования, со встроенным отладчиком. А также с поддержкой моего любимого CMAKE для С\С++ проектов. Казалось бы идеал и предел желаний, но интерфейс изобилует редко используемыми функциями и для некоторых проектов функционал излишен, а также почти всегда требуется заточка под себя. Но в итоге, данной среде разработке из всех вышеперечисленных, я бы дал максимальный балл )

Ну а что в итоге? Где же мой предел мечтаний в унифицированной среде разработки для С\С++ и Перл? Я же ведь так и не сказал ни разу, что какая-либо среда мне идеально подошла. А выбор я свой сделал (и вряд ли его изменю), а именно остановился я на редакторе Vim; "Да какая же это среда разработки, это же текстовый редактор !", - можете воскликнуть Вы, но спокойствие, сейчас объясню. Vim, во-первых, поддерживает подсветку синтаксиса огромного количества языков, во-вторых, имеет собственный язык написания модулей расширения, которые призваны расширить функционал редактора посредством добавления в него новых функции. Далее в Vim есть возможность вызова внешних команд и "забора" результата их исполнения (в идеале это как раз вызов cmake). Ну и ещё очень много всего вкусного, о чём мы поговорим в дальнейших публикациях.

На данный момент стоит несколько проблем, среди них: использование вкладок в Vim (как в FireFox), удобный просмотр файлов проекта, автодополнение имён методов\классов и переменных, вызов cmake, удобный переход в командный режим в случае текущей русской раскладки (лично у меня уже руки болят переключать раскладку), а также ещё некоторые менее важные функции, которые тем не менее будут описаны в далее. В итоге я отказался от полностью интегрированных решений в пользу связки из нескольких программ - Vim, QDesigner, KGDB, cmake и нескольких собственных скриптов, которые будут интегрированы c Vim. Ну вот для введения, пожалуй, достаточно.

P.S.В данной публикации высказано моё субъективное мнение, которое может не совпадать с Вашим, но тем не менее, хотелось бы оговориться, что я никоим образом не пытаюсь выставить в плохом свете указанные программы, я лишь утверждаю, что в условиях решаемой задачи они мне не подходят и ничего более. Сразу же оговорюсь по поводу пропуска в обзоре замечательного редактора Emacs, тут сказывается уже привычка, т.к. после нескольких лет работы на Vim считаю переход на Emacs сверхсложной задачей, хотя в будущем не исключаю возможности изучения и этой платформы.

Sunday 23 September 2007

Установка драйверов на видеокарту ATI, OpenSuSe 10.2 x86_64

Вот решил поставить поддержку 3D, а-то как-то непривычно работать без неё. Наиболее адекватное руководство, которое я нашёл представлено здесь, но оно несколько устрело, поэтому немного модифицируем алгоритм обновления драйвера.

Переходим на этот сайт и скачиваем драйвера под 64 линукс платформу. Либо можно сделать следующее (только учтите, что ссылка со временем может устареть, поэтому лучше воспользуйтесь сайтом) прямая ссылка на драйвер. Потом переходим в папку с драйвером и делаем следующее:
# sh ati-driver-installer-*.run --listpkg
В результате этого видим, что есть пакет для ОпенСусе: "SuSE/SUSE102-AMD64" и нам его нужно собрать, чем мы и займёмся ниже:
# sh ati-driver-installer-*.run --buildpkg SuSE/SUSE102-AMD64
И дожидаемся сборки пакета. После данных манипуляций в текущей папке у нас должен появиться файлик, но он может называться по-разному на различных платформах, поэтому лучше выполнить команду: # ls | grep fglrx -i и тем самым получить имя необходимого нам файла.

Потом выполняем: # rpm -Uhv fglr*.rpm
И далее:
# ldconfig
# aticonfig --initial --input=/etc/X11/xorg.conf
# sax2 -r -m 0=fglrx
Потом перезапускаем икс сервер (выйти -> выйти из системы) и потом тестируем 3D командой # glxgears, если все прошло успешно, она должна выполняться без тормозов.

Saturday 22 September 2007

Монтирование NTFS разделов с возможностью записи

Речь пойдёт о проекте ntfs-3g (он в свою очередь основан на разработке fuse), который уже вышел из стадии бета-тестирования (это произошло в феврале 2007) и считается стабильным. Не буду усложнять и представлю всё в форме пошагового руководства.
  • Из репозитория http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/suse/x86_64/ ставим пакет ntfs-3g (можно вручную скачать пакеты по ссылке выше и поставить от имени рута посредством rpm -ihv ntfs-3g.rpm).
  • Потом от имени рута открываем на редактирование файл /etc/fstab
    Ищем строку (или несколько строк) со словом ntfs, например у меня она имеет вид:
    /dev/sda2 /windows ntfs ro,users,gid=users,umask=0002,nls=utf8 0 0

    Заменяем это на строку:
    /dev/sda2 /windows ntfs-3g umask=0,locale=ru_RU.UTF-8 0 0

  • Потом от имени рута: umount -a (отмонтировать все файловые системы, указанные в файле fstab) и потом mount -a (примонтировать все фс) и радуемся примонтированному на запись нтфс разделу)



Сразу хотелось бы предупредить, что fuse загружает систему сильнее, чем обычный модуль ntfs (который поддерживает только чтение) по причине того, что работает в пользовательском пространстве без привлечения ядра, так что не пугайтесь, это не бага, а фича %)

Thursday 20 September 2007

Небольшой обзор свободных программ и библиотек

MathGL

MathGL project have library and front-end for making wide spectrum of mathematical graphics in platform independent way. The project is used OpenGL library for drawing and can export its graphic to EPS, PNG, JPEG or TIFF formats.
Официальный сайт. В разделе Downloads можете скачать инструкцию для программы на русском языке в pdf.



gambas - простота basic и мощь Qt.

Давно хотел себе в арсенал средство для быстрой визуализации приложений и, кажется, нашел его! Встречайте, gambas. Вот здесь есть подобный мануал по установке, смысла его копипастить не вижу, скажу лишь то, что gambas в данный момен тне работает на 64 разрядных системах, но в будущем, надеюсь, это исправят :)

Генерация паролей с помощью APG

Встала проблема генерации большого количества сложных паролей, вот расспросил народ в irc и получил совет воспользоваться вот этой разработкой: http://www.adel.nursat.kz/apg/download.shtml

Haskell, введение

В качестве введения лучше всего подойдёт статья из википедии, от себя скажу лишь то, что Haskell - функциональный язык программирования с очень широким спектром решаемых задач, что и как на нём лучше решать разберёмся ниже.

Адрес репозитория с необходимыми нам пакетами: http://download.opensuse.org/repositories/devel:/languages:/haskell/openSUSE_10.2/x86_64/

Добавляем этот репозиторий и ставим через Yast (либо качаем вручную и ставим через rpm -ihv) следующие пакеты:
# ghc-6.6.1-10.1.x86_64.rpm - компилятор "Glasgow Haskell Compiler"
# ghc-doc-6.6.1-10.1.x86_64.rpm  - документация 
# ghc-prof-6.6.1-10.1.x86_64.rpm - профайлер

После установки проверяем работоспособность компилятора: "ghc -V"
У меня вывод следующий: The Glorious Glasgow Haskell Compilation System, version 6.6.1
Для теста создадим test.hs файл следующего содержания:
main = putStrLn "Hello, World!"
И потом скомилируем его: ghc test.hs -o hello, exec флаг будет установлен автоматически, так что нам останется лишь выполнить его ./hello, если в ответ нам выводится приветствие, то все отлично и компилятор работоспособен :) Также можете воспользоваться интерпретатором Хаскелла, который также входит в поставку, но вызывается не командой ghci.

Более подробную информацию о данном компиляторе можете найти здесь. Из книг на русском только сегодня приобрёл книгу Душкина Р.В. "Функциональное программирование на языке Haskell" Москва, изд. "ДМК", ISBN 5-94074-335-8, как только прочту сразу опубликую мнение о книге, а пока все)

Sunday 16 September 2007

Отрисовка графов и схем посредством Graphviz и Perl

Считаю задачу визуализации процесса разработки одной из первоочередных, хотя, если признаться, все мы эстеты и никогда не упустим повода блеснуть перед начальством или заказчиком безукоризненно выполненными графами. Перейдем сразу к делу!

Ставим пакет graphviz любым доступным способом (Yast, rpm -ihv), потом устанавливаем модуль поддержки Графвиза для Перла посредством команды cpan GraphViz, ну вот вроде и все, площадка для тестов готова.

Так, а что такое мы наставили, а? ЧТо за графиз и что такое вообще графы? Да, вопросов много, давайте разберём их по пунктам.

graphviz - программа, предназначенная для отрисовки графов и схем, а также для их расположения их на "холсте" (для этого присутствует несколько алгоритмов). На оффсайте приведены различные примеры использования, среди них - визуализация выполнения программ (видел в сети проект, который рисовал все системные вызовы программы, собраных через gcc), блок-схемы, схемы сетей и маршрутов, визуализация конечных автоматов, генетические структуры и многое многое другое.

Вот примеры изображений, полученных с помощью graphviz:




Почти все изображения, генерируемые графвизом, по сути представляют собой графы. Граф - это, грубо говоря, совокупность узлов, соединённых между собой линиями. Линии могут иметь направление - это уже ориентированные (орграфы) графы, а без направления - соответственно неориентированные. Можно, конечно, дать строгие математические определения, но я не буду этого делать, ведь в данный момент практика важнее теории.

Графвиз имеет несколько способов описания графов, среди которых есть специализированные языки описания графов. Но мы пока не будем про них. Ну что? Давайте же рассмотрим пример отрисовки графов (пример взят из man graphviz и я настоятельно советую Вам с ним ознакомиться). Открываем любимый текстовый редактор и набиваем следующее:

#!/usr/bin/perl

use strict;
use warnings;
use GraphViz;

my $g = GraphViz->new();

$g->add_node('Москва');
$g->add_node('Paris', label => 'City of\nlurve');
$g->add_node('New York');

$g->add_edge('Москва' => 'Paris');
$g->add_edge('Москва' => 'New York', label => 'Far');
$g->add_edge('Paris' => 'Москва');

my $fl = $ARGV[0] || 'result.svg';

open my $z, '>', $fl;
print {$z} $g->as_svg; # или $g->as_png; но оно Вам надо?))
close $z;


Потом сохраняем это в кодировке utf8 (иначе на схеме никакой Москвы не будет) под именем graphviz.pl и запускаем:
perl graphviz.pl result.svg


Если никаких ошибок не выведено, любуемся результатом - файлом result.svg, ну вот для начала и все)

Смотреть сие творение очень удобно в программе svgdisplay, входящей в пакет ksvg.

обновлено: Срд Дек 3 06:37:27 SAMT 2008 (исправил ссылки + почистил текст)

Friday 14 September 2007

QSA кроссплатформенный GUI на JavaScript

Давно хотел себе в арсенал средство удобного и быстрого создания графического интерфейса, ведь сами понимаете, что быстрая разработка на связке Qt & C++ весьма проблемный процесс. Первым под скальпель попал gambas - весьма удобный и простой интерпретатор бейсика с неплохой стандартной библиотекой, но его я так и не смог собрать под 64 разрядную платформу и был очень разочарован, прочтя в списках рассылки, что 64 битная платформа в данный момент не поддерживатся. Но поиски продолжались и был обнаружен QSA, а если расшифровать аббревиатуру, то это звучит как Qt Script for Applications. Так что же это за зверь? Это своего рода дополнительный набор инструкций для Qt, позволяющий создавать расширения для С++\Qt программ на JavaScript/ECMAScript, т.е. мы получаем возможность динамически изменять как ход вычислительного процесса в программе, так и саму программу (ну и, конечно же, графический интерфейс в том числе). Вот как раз об этой возможности я и мечтал)

А вот в подкрепление моих слов обзор от авторов http://trolltech.com/products/qt/addon/qsa .
Для использования в образовательных целях и для разработки свободного ПО QSA бесплатен, в чем можно удостовериться на данной странице.

На этой же странице выбираем: QSA compatible with Qt 4 series, т.к. будем писать именно под 4ую версию Qt (вполне очевидно, что 3я версия после выхода КДЕ4 начнёт верно, но медленно уходить в прошлое). Только учтите, что для функционирования QSA необходим уже установленный Qt версии не ниже 4.0.1. А теперь перейдем собственно к сборке.

# mkdir /opt/QSA
# cd /opt/QSA
# wget http://www.trolltech.com/developer/download/qsa-x11-opensource-1.2.2.tar.gz
# tar -xf qsa-x11-opensource-1.2.2.tar.gz
# cd qsa-x11-opensource-1.2.2
# vim INSTALL // информация по установке
# ./configure -prefix /opt/QSA
# make
# make install
# cd /opt/QSA/qsa-x11-opensource-1.2.2/examples/game
# ./game

Но вот снова проблемы с библиотеками: ./game: error while loading shared libraries: libqsa.so.1: cannot open shared object file: No such file or directory

И снова лечим командами:

# cd /opt/QSA/lib
$ cp * /lib64
# ./game

Если хотите попробовать разобраться самостоятельно с данной штукой, то вот документация, там Вы найдёте ответы на все интересующие Вас вопросы. Примеры использования в следующих публикациях.

Установка Parrot и Perl6 из исходников

Многие слышали, но не многие использовали, эти слова как раз про Перл6 (сайт) и платформу Паррот; обзоров, документации и презентаций уже достаточно большое количество, так что пора переходить к практике!

Вот для примера список языков на данный момент поддерживаемых Парротом (заранее предупреждаю, что список очень длинный, так что приготовьтесь морально):
  1. APL. Provides support for a variety of monadic/dyadic operators, character vectors, floats, int, and 1-D vectors. Part of languages smoke testing.
  2. BASIC/compiler и interpreter. Старый добрый васик)
  3. bc. Basic calculator. See http://en.wikipedia.org/wiki/Bc_%28Unix%29 Implemented with the Parrot compiler tools PGE and TGE.
  4. bf. See http://en.wikipedia.org/wiki/Brainfuck.
  5. C99 (не правда ли, предел мечтаний?). PGE grammar for C99.
  6. Cardinal. Implementation of Ruby CVS Head 1.9
  7. Cardinal OLD DEAD. Implementation of Ruby.
  8. Cola. Java like language with some hybrid Perl features like regex operators planned. See also http://en.wikipedia.org/wiki/Cola_programming_language.
  9. Common Lisp. Aspires to implement a significant subset of the Common Lisp language.
  10. .Net To PIR Translator (а как Вам это?). Translates .Net bytecode to PIR.
  11. Jako. C/Perl like language, first compiler for Parrot. The intent is to have a block-structured language that is higher level than IMC, but still exposes the underlying virtual machine rather directly, in the hope that this will eventually be useful for coding extensions to the VM in a language more natural than IMC.
  12. Lua (достаточно популярный встраиваемый язык). Lua 5.1 interpreter implemented with PGE/TGE/Partridge and friends. Lua 5.1 Standard Libraries (a large subset) implemented in PIR.
  13. Perl 5 (что, безусловно облегчит переход на новую платформу).Primarily a repository for some perl5-specific functionality that was heavily used in early parrot development. This code is not slated for use with the Perl 6 implementation, and core parrot PMCs exist that provide much of the functionality here.
  14. Perl 6 parser/compiler (могу поручиться, что возможность компиляции в байт код пригодиться очень многим). This is a Perl 6 parser/compiler, an early version (no version numbers yet). It's still very early, only simple expressions and functions are available. If you're in a hurry to write "real Perl 6" programs, you might try looking at Pugs -- http://www.pugscode.org. Or, you can send patches and contributions to the one being built here!
  15. PJS (а вот это ну просто пальчики оближешь!). PJS is a JavaScript (ECMAScript) implementation. It makes use of flex/bison for parsing. It can only do basic things right now (variables, if-else, loops, try-catch-finally, eval, etc.).
  16. Pugs (а вот об этой разработке должны были слышать почти все, интересующиеся Перлом).Perl6 compiler written in Perl6 and Haskell with multiple backends
  17. Python, уверен, комментарии излишни.)
  18. Tcl, A from scratch implementation of a Tcl 8.5 compiler in parrot.


Вот вроде и закончил, причем учтите, что это примерно половина всего списка поддерживаемых языков (который находится здесь).

Теперь перейдем собственно к установке (все ниже описанное работоспособно для ОС openSUSE 10.2 x86_64, но тем не менее должно отлично работать под любую другие ОС). Небольшая ремарка - если не хотите ставить Паррот в корень системы, то сначала прочитайте самый конец статьи, а потом снова вернитесь сюда.
# mkdir /opt/parrot
# cd /opt/parrot
# wget http://svn.perl.org/snapshots/parrot/parrot-latest.tar.gz
# tar -xf parrot-latest.tar.gz
# cd parrot   
# perl Makefile.PL
# make
# make reallyinstall
# parrot 

В моём случае при запуске вылетело сообщение: error while loading shared libraries: libparrot.so.0.4.15: cannot open shared object file: No such file or directory
Это произошло по той причине, что so файлы (а именно: libparrot.a libparrot.so libparrot.so.0.4.15 parrot pkgconfig) Паррота были помещены в папку /usr/local/lib
Их нужно переместить в /lib64 (в 64 битном случае).
Лечится это очень просто:
# cd /usr/local/lib
# mv  libparrot.a  libparrot.so  libparrot.so.0.4.15  parrot  pkgconfig -r /lib64
# parrot

Если дальше Паррот запуcтился, иначе - отписываемся в комментах. решим совместными усилиями.

И все же я допустил здесь промах - забыл выбрать путь для установки и поставил все в рабочую систему вместо отдельной папки, дабы не повторить мою ошибку перед make install выполните: perl Configure.pl --prefix=/opt/parrot

Немного позже будет вступительный ликбез по Parrot`у.

Wednesday 12 September 2007

Скрипт транслитерации на Perl

=head
Отдельная благодарность alekciy`ю (http://alekciy.ru/projects/translit/) за ликбез по части ГОСТов.
Функа ts, предназначена для транслитерации в соответствии с ГОСТ 7.79-2000 (взамен ГОСТ 16876-71)
Хотя есть некоторые сомнения, как получу печатный вариант ГОСТа, тогда будет абсолютно точная версия.

Автор: nrg
Напиcано: Чтв Сен 13 00:04:14 SAMST 2007
Обратная связь: nrg@jabber.snc.ru, icq: 813-793.
=cut
sub ts($)
{
my%hs=('аА'=>'a' , 'бБ'=>'b'  , 'вВ'=>'v'  , 'гГ'=>'g', 'дД'=>'d' ,
'еЕ'=>'e' , 'ёЁ'=>'jo' , 'жЖ'=>'zh' , 'зЗ'=>'z', 'иИ'=>'i' ,
'йЙ'=>'j' , 'кК'=>'k'  , 'лЛ'=>'l'  , 'мМ'=>'m', 'нН'=>'n' ,
'оО'=>'o' , 'пП'=>'p'  , 'рР'=>'r'  , 'сС'=>'s', 'тТ'=>'t' ,
'уУ'=>'u' , 'фФ'=>'f'  , 'хХ'=>'kh' , 'цЦ'=>'c', 'чЧ'=>'ch',
'шШ'=>'sh', 'щЩ'=>'shh', 'ъЪ'=>''   , 'ыЫ'=>'y', 'ьЬ'=>''  ,
'эЭ'=>'eh', 'юЮ'=>'ju' , 'яЯ'=>'ja');
my$z=shift;
pop@{([\map do{$z=~s|[$_]|$hs{$_}|gi;},keys %hs])},$z;$z
}

Sunday 9 September 2007

Авторизация на ssh серверах без пароля

Вот недавно в сети наткнулся на заметку, повествующую о возможности логиниться на ssh сервер без пароля - используя сертификаты.
Те, кто знаком с алгоритмами шифрования на основе открытых ключей, сразу поймут, что нам нужно сгенерировать два сертификата - закрытый, который будет находить на нашей машине и открытый, который мы положим на сервер.

Создаём ключи посредством запуска утилиты ssh-keygen -t rsa, которой нужно указать место сохранения созданных ключей, нас устроит путь по-умолчанию (/home/имя_вашего_пользователя/.ssh/id_rsa), потом вводим ключевую фразу, которая будет использована при генерации пароля (и при последующем его использовании). В результате всех операций мы получаем два файла: /home/имя_вашего_пользователя/.ssh/id_rsa - это и есть наш закрытый ключ и /home/имя_вашего_пользователя/.ssh/id_rsa.pub - как Вы уже догадались, это открытый ключ, который мы и поместим на наш сервер.

Следует отметить, что эти ключи и есть ваше удостоверение личности для удалённого сервера и хранить их следует подобающим образом, ибо если кто-то заполучит эти ключи в своё распоряжение, то будет очень сложно объяснить руководству, что это были не Вы)

Теперь нам нужно положить файл id_rsa.pub на удалённый сервер, можно это сделать посредством ftp, но я бы все же рекомендовал (ещё бы я не рекомендовал, если учесть тот факт, что у моего провайдера, будь он неладен, толком не работает фтп) воспользоваться шифрованной версией ftp - sftp: sftp имя_пользователя_на_удаленной_системе@хост.
После подключения выполняем команду put id_rsa.pub (соответственно находясь в каталоге ~/.ssh/ клиентской машинки).

Далее переключаемся на ssh на удалённой машине, находим папку, куда загрузили файл id_rsa.pub и перемещаем его в папку ~/.ssh/ под именем authorized_keys (возможно папку ~/.ssh придется создать).

Вот и все готово - устанавливайте соединение с ssh сервером: ssh хост -lлогин и вместо привычного запроса пароля вы получите запрос ввести ключевую фразу, которую указали при генерации ключа, вводите его и, вуаля, Вы в системе! Не правда ли удобно ?)

Данная публикация является лишь моей интерпретацией содержания данной статьи.

Wednesday 5 September 2007

Виртуализация в openSUSE 10.2 x86_64 c помощью QEMU и kvm, практическая реализация

Установка QEMU

С установкой самого QEMU все достаточно просто, вот, например, отличная ссылка по данной теме: тут. Хотя я сам немного схавлявничал, скачав руками с репозитория файлик qemu-0.8.2-22.x86_64.rpm и поставив его командой
rpm -ihv qemu-0.8.2-22.x86_64.rpm


Для проверки правильности установки можете скачать образ freedos c сайта http://fabrice.bellard.free.fr/qemu/download.html и запустить его командой
qemu-system-x86_64 freedos.img
(ну конечно же на забыв распаковать его из архива).

Стоп, а что если мы работает на платформе x86_64 ? Вот как раз по данному поводу есть небольшая ремарка на сайте с документацией к QEMU (http://fabrice.bellard.free.fr/qemu/kqemu-doc.html#SEC7), а именно: "If you use kqemu on an x86_64 host, you must use `qemu-system-x86_64' instead of `qemu'", так что для всех пользователе 64 битной платформы родной становится программа qemu-system-x86_64, которая при запуска того же freedos конастатирует весьма неприятный факт, kvm отключен "Could not open '/dev/kqemu' - QEMU acceleration layer not activated", но тем не менее продолжает отлично работатать, хоть и медлненней, но это не надолго, сейчас мы решим и проблемы со скоростью.

Установка поддерржки kvm

Вот по данной теме есть две отличные статьи: оригинал, перевод, описывающие установку поддержки kvm посредством рпм пакетов.

Сам настраивал по данным мануалам и хотел бы сделать некоторые добавления, а именно то, что для запуска kvm модулей ядра нужно использовать команды:
modprobe kvm и modprobe kvm-amd (или kvm-intel)
и после этого запускать образы ОС посредством команды
qemu-kvm
которая сразу же проинформирует об ошибке, если не найдет модули kvm.

И все же у меня все ещё остались некоторые вопросы, буду рад если кто-то мне пояснит их - мы установили модули kvm и добились их стабильного функционирования, а тогда что такое модуль ядра kqemu, который цепляется как устройство /dev/kqemu и очень любим приложением qemu-system-x86_64?

Ну вот теперь точно все, приятной Вам виртуализации)

Виртуализация в openSUSE 10.2 x86_64 c помощью QEMU и kvm, введение.

Вы должно быть заметили, что последнее время начался бум всевозможных технологий виртуализации и соответственно самих эмлуяторов (Parallels Desktop, QEMU, Xen, vmware, VirtualBox и проч.) это и не случайно, ведь данные технологии предоставляют невиданые ранее удобства в масштабировании и интеграции всевозможных система, чего только стоят решения vmware для корпоративных клиентов, позволяющие создавать в целые виртуальные вычислительные среды на основе кластеров, причём отдельные элементы этих ВС являются виртуальными машинами, которые могут в случае сбоя одного из элементов кластера (уже физического) быть автоматически перемещены на другой физический сервер.

Также учитывая мощности (зачастую 2х и более ядерных) современных систем можно без проблем держать несколько виртуальных машин на некоторой хост операционной системе, например почтовый сервер от MS или сервер 1С можно спокойно держать в виртуальной машине. У меня собственно необходимость в виртуализации встала, когда потребовалось поставить программы, которые работают либо только под виндовс, либо под дос (да, увы, и такие архаизмы встречаются), а сервера (впрочем, как и рабочие станции, находящиеся в моём распоряжении) работают исключительно на Линуксе.

Для начала краткий экскурс по технологиям.
QEMU is a generic and open source machine emulator and virtualizer.

When used as a machine emulator, QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a different machine (e.g. your own PC). By using dynamic translation, it achieves very good performances.

When used as a virtualizer, QEMU achieves near native performances by executing the guest code directly on the host CPU. A host driver called the QEMU accelerator (also known as KQEMU) is needed in this case. The virtualizer mode requires that both the host and guest machine use x86 compatible processors.

Тут вроде итак все понятно, Qemu представляет собой платформу для эмуляции систем (а также других платформ, например Arm).
KVM (for Kernel-based Virtual Machine) is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V). It consists of a loadable kernel module, kvm.ko, that provides the core virtualization infrastructure and a processor specific module, kvm-intel.ko or kvm-amd.ko. KVM also requires a modified QEMU although work is underway to get the required changes upstream.

Using KVM, one can run multiple virtual machines running unmodified Linux or Windows images. Each virtual machine has private virtualized hardware: a network card, disk, graphics adapter, etc.

The kernel component of KVM is included in mainline Linux, as of 2.6.20.

KVM is open source software.

Тут, конечно, как в предыдущем случае двумя словами обойтись нельзя, но я постараюсь - kvm представляет собой модули для ядра Линукса, которые позволяют достичь очень высокой производительности виртуальных систем (до 50% мощности хостовой операционной системы).

Для заинтересовавшихся привожу официальные сайты этих проектов:
- QEMU
- kvm

В следующих публикациях будут пошаговые инструкции по конкретной реализации описанных технологий.

Monday 3 September 2007

Удобная отладка в Перл.

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

Модуль Data::Dumper::Names предоставляет как раз данную возможность; вот пример использования:
#!/usr/bin/perl
use Data::Dumper::Names;
my$suxx="test";
my@arr=qw!val1 тест!;
print Dumper($suxx, \$suxx, \@arr);

В результате получим:
nrg@Dell:~/dev/perl_staff> perl data_dumper_names.pl
$suxx = 'test';
$suxx = \$suxx;
@arr = (
'val1',
'тест'
);


Не правда ли прелестная вещь? Для установки через Цпан используем команду: cpan Data::Dumper::Names