FastNetMon

Sunday, 23 December 2007

Возвращаюсь :)

Давно ничего не писал, творческий кризис своего рода был, но, думаю, уже кончился :)
В скором времени выхожу на новую работу, в связи с этим будет много публикаций по лезвийным http серверам (nginx, lighthttpd и проч), по MVC (в частности Catalyst {Perl}, RoR {Ruby}) и прочей мистической атрибутике крупных web разработок. С линуксом на пользовательском уровне уже наигрался вдоволь, так что публикации низкого-среднего уровня сложности уже вряд ли можно будет наблюдать в моём блоге, ибо решения уже решённых задач не так интересны :)

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

Искренне Ваш, Одинцов Павел.

Sunday, 18 November 2007

Джаббер, пошаговое руководство по настройке клиента Psi версии 0.11 в ОС Windows


  1. Для начала переходим на страницу загрузки официального сайта PSI: http://psi-im.org/download/, там выбираем "Official Psi 0.11 Downloads Microsoft Windows", после щелчка на указанной ссылке нас перебросит на страницу загрузки и закачка начнётся автоматически (если этого не произошло, нажмите там ссылку"this direct link")

  2. После окончания загрузки клиента, устанавливаем его, тут всё тривиально и никаких специализированных настроек не требуется.

  3. При первом запуске нам будет предложено зарегистрировать новый (Register New account) или использовать существующий (use existing account) аккаунт джаббера, выбираем первый пункт, т.к. мы регистрируемся впервые.



  4. Перед нами появляется вот такое окно:



  5. В соответствующее поле вводим имя сервера (name of server), на котором будем регистрироваться.



  6. Поле "encrypt connection" управляет шифрованием данных при работе с сервером (это делает задачу перехвата вашей личной переписки почти неразрешимой). Здесь можно выставить значение либо "Always" (т.е. шифровать всегда), либо When Available (когда доступно). Я бы советовал поставить Always, дабы не допустить открытой передачи.



  7. *Прокси* Если в Вашей сети используется прокси сервер, то щёлкните кнопку Edit, которая справа от поля выбора прокси сервера. После этого пред нами предстанет следующего вида окошко:



  8. *Прокси* После этого нажимаем кнопку New и появляется новый пункт для ввода информации о нашем прокси сервере. Требуется ввести его имя (Name), хост (в моём случае 192.168.155.2), порт (чаще всего 3128) и выбрать его тип (чаще всего HTTP "Connect")



    После этого жмём кнопку Save.



  9. Теперь выбираем наш прокси из списка на главной странице:



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



  11. Вот мы и добрались до регистрации аккаунта, тут нужно ввести требуемое имя (name@jabber.ru, где name и есть наше имя в джаббере) и пароль для регистрации в системе:



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



  13. Поздравляю! Вы стали пользователем джаббера!



  14. Вот общий вид окна PSI:



  15. А при щелчке на панели выбора статуса (жёлтая звёздочка) показывается вот такое меню:



  16. Выбираем "Online", снова вылетает сообщение о том, что сертификат самоподписан, выбираем "Continue" и мы в Сети!

  17. Сразу после подключения Вам будет предложено заполнить информацию о себе (после заполнения нажмите Publish, это отправит все указанные данные на сервер) %)

  18. Можно начинать общаться!

  19. А для теста можете добавить меня в свой Ростер ("Roaster" или иными словами, "Контакт Лист"), для этого щёлкните по кнопке, которая располагается внизу слева (на ней нарисована буква "Пси"), потом выбираем Add Contact (добавить контакт) и там вводим мой JID (JID, он же Jabber ID - идентификатор в системе), который имеет вот такой вид nrg[собака]jabber.snc.ru и жмём Add. Потом дважды щёлкаем по моему JID в списке и отправляем сообщение %)))

  20. Всем спасибо за внимание и удачного использования замечательной сети джаббер!


C уважением, Одинцов Павел aka энерджи.

Создание сервера для раздачи инета в локалку на базе Opensuse 10.3

Материальная база:
  1. Имеем две машины на базе OpenSuSe Linux 10.3.
  2. В каждой машине имеем по сетевому интерфейсу (в моём случае он ещё и беспроводной, но это картины не меняет) eth0.
Сетевая конфигурация машин:
  1. Первый компьютер, далее именуемый как "сервер" подключен к провайдеру ДомРу (замените на имя Вашего провайдера) через PPPoE (IP адрес вида 10.x.x.x выдаётся динамически, но каждый раз один и тот же, адреса DNS серверов также получаются при подключении) и в моём случае имеет внутренний IP 192.168.155.2 (в Вашем случае пропишите ему адрес 192.168.0.1, так будет привычнее) .
  2. Второй компьютер, далее именуемый как "клиент" соединён сетью с первым через свитч (с серверной стороны и ДомРу и локалка подключены через один интерфейс) и имеет внутренний IP 192.168.155.1 (Вы же выберите лучше 192.168.0.2)
Требуется:
  1. Обеспечить прозрачный доступ в интернет через NAT для клиентской машины
  2. Обеспечить поддержку внутреннего ДНС сервера в качестве ретранслятора (далее поймёте зачем это)
Некоторые данные, которые нам пригодятся:
  1. IP адрес яндекса 213.180.204.8
  2. IP адрес гугла 64.233.187.99
  3. Утилита "ping", предназначенная для проверки сетевого соединения между узлами
  4. DNS сервер bind для удобной работы с DNS
  5. Прозрачный прокси на squid (факультативно), позволяющий кешировать весь хттп трафик для его экономии и увеличения скорости доступа к ресурсам.
  6. Suse Firewall 2, обертка для Iptables, предназначенная для удобного конфигурирования фаервола.
  7. Немного бутербродов и чая \ кофе, т.к. процесс не очень-то и быстрый
Для начала предположим, что у нас уже есть настроенное и исправно функционирующее PPPoE соединение. Убедиться в этом можно командой: ping ya.ru и есть в ответ будет выдано нечто вида:
nrg@dell:~> ping google.com
PING google.com (72.14.207.99) 56(84) bytes of data.
64 bytes from eh-in-f99.google.com (72.14.207.99): icmp_seq=1 ttl=244 time=171 ms
64 bytes from eh-in-f99.google.com (72.14.207.99): icmp_seq=2 ttl=244 time=173 ms
64 bytes from eh-in-f99.google.com (72.14.207.99): icmp_seq=3 ttl=244 time=184 ms
64 bytes from eh-in-f99.google.com (72.14.207.99): icmp_seq=4 ttl=244 time=172 ms
64 bytes from eh-in-f99.google.com (72.14.207.99): icmp_seq=5 ttl=244 time=170 ms
То все отлично, можно идти дальше. Далее проверим соединение между машинами наберём на сервере команду ping 192.168.155.1, а на клиенте соответственно ping 192.168.155.2 и в ответ должны посыпаться ответы, указанные выше. Насчёт IP, как я уже сказал выше, используейте 192.168.0.1 вместо 192.168.155.2 и 192.168.0.1 вместо 192.168.155.1. Сеть работоспособна. Шаг первый, настроим трансляцию пакетов с Локальной сети в Интернет.
  1. Открываем Yast2 -> "Пользователи и безопасность" -> "Брандмауэр".
  2. Переходим на вкладку "Интерфейсы", выбираем там наше ДСЛ соединение (так зовётся PPPoE), щёлкаем кнопку изменить и выбираем "Внешняя зона", а для сетевой карты, подключённой к Локальной Сети (далее "ЛВС"), выбираем соответственно "Внутренняя зона"
  3. Переходим на вкладку "Трансляция сетевых адресов", в верху ставим галочку "Трансляция сетевых адресов".
  4. Далее щёлкаем кнопку "Добавить" и вводим следующее: сеть источника 192.168.155.0/24, протокол TCP, в полях "Требуемый порт" и "Перенаправление в порт" прописываем нули, требуемый IP вводим "0.0.0.0/0", т.е. любой. А в поле "Перенаправить в транслированный IP" наш IP, который выдаётся для dsl соединения (ifconfig dsl0 и смотрите поле inet addr:). В моём случае это адрес вида 10.65.0.x.
  5. Применяем настройки Брандмауэра.
  6. Переходим к клиентской машине.
На клиентской машине в Yast2->"Сетевые устройства" -> Сетевая плата вбиваем IP сервера (192.168.155.2) как шлюз по умолчанию на вкладке Маршрутизация. Далее опять же на клиентской машине вбиваем ping 64.233.187.99 и смотрим %) Если полетели пакетики, то ура, ибо роутинг уже работает! Далее нам нужно сделать, чтобы вместо ping ip можно было сделать ping ya.ru. Установка локального DNS сервера
  1. Ставим через Yast2 пакет bind и пакета для конфигурирования Бинда через yast2 (вбейте в поиске bind он будет показан)
  2. Открываем Yast2 -> "Сетевые службы" -> "Сервер DNS"
  3. Ставим галочку "PPP Демон устанавливает направление запроса", это означает, что если наш локальный ДНС сервер не обнаружит в своей базе IP адреса требуемого домена, то он попросит его у ДНС провайдера, а в случае указанной конфигурации он автоматически определит ДНС провайдера и будет использовать его. Щелкаем далее.
  4. ничего не трогаем на странице "Установка DNS сервера: DNS зоны" и щелкаем далее.
  5. В поле "Запуск службы" ставим галочку "При загрузке системы" и жмем завершить, тем самым применяя настройки.
Возвращаемся к клиентской машине.И снова Yast2 -> "Сетевые настройки" -> "Сетевая карта" -> Имя узла DNS и там ставим галочку "Изменить /etc/resolv.conf вручную", после этого в поле Сервер имён №1 вбиваем IP нашего сервера - 192.168.155.2 и применяем. Теперь делаем ping ya.ru и радуемся увиденному %) Всё, мои поздравления, сервер настроен, можете открывать браузер на клиентской машине и юзать Инет %) Добавление прозрачного прокси на базе squid (опционально). Теперь можно улучшить скорость доступа к ресурсам и уменьшить потребляемый трафик посредством кэширующего прокси на базе squid. Установите прокси сервер squid и запустите его командой service squid start (или поместите в автозагрузку на 3й либо 5й уровень запуска). После этого нам требуется немного модифицировать его конфигурацию, открываем любым текстовым редактором файл /etc/squid/squid.conf Потом отыскиваем там строку "http_port 3128" и меняем её на "http_port 3128 transparent", тем самым мы указали, что прокси теперь может использоваться как прозрачный. Далее нам нужно указать, что подсеть 192.168.155.0/24 (а в Вашем случае 192.168.0.0/24) является доверенной, чтобы клиенты из данной подсети смогли использовать прокси. Находим текст:
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
И изменяем на следующее следующее:
acl our_networks src 192.168.155.0/24
http_access allow our_networks
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
Тем самым мы как раз и добавили нашу подсеть в список допустимых и перезапускаем squid командой service squid restart дабы применить произведённые настройки. И, наконец, укажем SuSe Firewall`у, что для портов 80 и 8080 нужно использовать прокси. Для этого открываем /etc/sysconfig/SuSEfirewall2 Там ищем строку вида FW_REDIRECT="" и заменяем её на
FW_REDIRECT="192.168.155.0/24,0/0,tcp,80,3128"

Далее перезапускаем Suse Firewall2 через Yast2 и наблюдаем через команду tail -f /var/log/squid/access.log ,что теперь все запросы на указанные порты перекидываются на прокси :)

Чуть позже дополню все скриншотами и выправлю текст.
Благодарность, критика, вопросы по теме принимаются и приветствуются за исключением случаев, когда собеседник хочет, чтобы все сделали за него ("быстро и шоп работало") и ведёт себя бестактно, тогда в помощи я буду вынужден отказать, т.к. ценю своё время.

Автор: Одинцов Павел ака энерджи. Ноября 2007г. Общее время написания статьи: 1 час.

Monday, 5 November 2007

How-to: Джаббер - сеть мгновенного обмена сообщениями. Введение в предмет.

Ну вот и пришла пора немного поговорить не только об операционных системах семейства Linux, но и об ОС компании Майкрософт, т.к. инструкции будет предоставлены для обоих платформ. Цель данной серии статей достаточно проста, хочется написать добротную инструкцию по настройке джаббера для обычных пользователей, т.к. народ интересуется этой системой обмена сообщениями очень живо, но каждому рассказывать, что это такое и почему это хорошо, никакого времени не хватит.

Для начала небольшой экскурс. Так что же такое джаббер? Проще говоря - это сеть мгновенного обмена сообщениями, такая же как ICQ, Майл.Агент, MSN и прочие. Так зачем нам этот непонятный джаббер, если есть другие протоколы? У джаббера есть множество преимуществ, среди которых следует отметить следующие:

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

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

2) Децентрализованность (ух ты, какое сложное слово!), а если говорить проще, то серверов джаббера не один, и не 10, и даже не 100, а намного больше, что объясняется довольно просто - любой желающий при соответствующей квалификации может сделать свой собственный сервер джаббера и разрешить пользователям на нем регистрироваться (а может и не разрешить, если это, допустим, корпоративный чат). "Ну подумаешь, много серверов и открытый протокол что из этого? " - можете возразить Вы и будете совершенно правы. Но давайте рассмотрим довольно простую ситуацию, которая имела место в феврале прошлого года, когда корпорация Америка Онлайн (владелец сети ICQ) изменила протокол передачи сообщений в своей сети, в результате чего пользователи многих "альтернативных" клиентов (Miranda-im.com, например) данной сети на протяжении одного-двух дней не могли войти в сеть.

А если вспомнить, что уже многие фирмы ведут коммерческую деятельность посредством ICQ, то убытки от пары дней простоя тоже можно примерно оценить. В случае с джаббером такое в принципе невозможно, т.к. протокол уже устоялся и его изменения не планируются. Далее рассмотрим уже гипотетическую ситуацию (несмотря на то, что она вымышленная, не стоит отрицать и такой вариант), что владелец ICQ собирается закрыть сеть, тем самым лишая пользователей возможности общаться. В случае с джаббером такое опять же невозможно, если даже ваш сервер закрылся или сломался (но полностью вся сеть не сломается никогда!), Вы всегда можете воспользоваться другим сервером.

4) Довольно широкий выбор клиентов для данной сети, среди которых: PSI, Kopete, QIP Infium, Miranda c jabber, Bombus (для сотовых телефонов на платформе J2ME)

5) Возможность работы с другими сетями непосредственно через джаббер используя т.н. механизм транспортов (даже если Ваш jabber сервер не поддерживает определённый транспорт, то Вы всегда можете воспользоваться транспортом с другого jabber сервера, протокол позволяет и это), который предоставляет возможность общаться с клиентами из других сетей (например - icq, mail agent, yahoo, msn и даже smtp и rss) через привычный интерфейс своего любимого джаббер клиента.

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

Автор: Одинцов Павел. Ноябрь 2007.

Saturday, 3 November 2007

How-to: Установка OpenSuSe 10.3 без повреждения MS Windows

Мне довольно часто спрашивают, как безболезненно для Виндовса поставить Сусе, так что пора бы уже на данный вопрос ответить развернуто. В установке есть некоторая специфика, которую я постараюсь изложить в данном посте.
  1. Ну, во-первых, о расположении и размерах разделов. Лично я бы советовал отдать Сусе гигов 15 места на диске, из них 200 мегабайт под /boot раздел(отсюда будет осуществлять загрузка), 8 гигов под / (тут будет система) и 6 под /home (здесь будут пользовательские данные), в дальнейшем можно будет безболезненно переформатировать остальные разделы в ext3 и использовать их в Линуксе.
  2. При первом знакомстве с линуксом лучшим решением будет отрезать (тем же партишен меджиком) от жёсткого диска гигов 15 в конце и оставить их пустыми (строго говоря, это можно сделать и из инсталлятора Сусе, но т.к. мы только начинаем знакомство с линуксом, лучше сделать привычным для себя путём).
  3. Потом при установке Суси щёлкнуть на последнем экране по пункту "разбиение" и выбрать "ручное разбиение", а потом "пользовательское разбиение".
  4. Там уже создать указанные мной разделы с указанным размером (в качестве файловой системы настоятельно рекомендую выбрать ext3, т.к. она является наиболее оптимальной для среднестатистической настольной системы), а в пунктах точка монтирования указать соответственно /boot, / и /home.
  5. Всё остальное (поиск раздела с MS Windows и добавление его в загрузчик) сделает установщик Суси.


Если у вас остались вопросы, милости прошу nrg [собака]jabber.snc.ru :)

How-to: настройка PPPoE (ДомРу) в OpenSuse 10.3

  1. Открываем конфигурационный центр Yast2 (yast2 в консоли), вводим пароль рута, указанный при установке.
  2. Слева выбираем вкладку сетевые устройства.
  3. Справа выбираем пункт DSL (не смущайтесь названию, это подходит не только для ADSL, но и для PPPoE)
  4. Далее создаём подключение, тут все довольно прозрачно. Выбираем сетевую карту, к которой подключён кабель от провадера, потом добавляем нового провайдера в соответствующем пункте меню и вводим свои логин и пароль (только убираем галочку "всегда запрашивать пароль"), других настроек производить не нужно (там много всяких галочек - их не трогайте) !
  5. После того, как соединение создано, ищем значок knetworkmanager (нечто прямоугольное и белое или синяя лесенка в случае беспроводного соединения) в системной области, жмём правой кнопкой мыши и выбираем пункт "Коммутируемые подключения", далее выбираем нашего провайдера и соединяемся :)
  6. Если не нашли значок, значит выбран метод управления сетевыми соединениями через ifup нужно это исправить.
  7. Заходим в подпункт Сетевых устройств "Сетевая карта" и во вкладке "общие параметры" выбираем "Управляемый пользователем knetworkmanager" и применяем, значок должен появиться.
  8. Соединяемся и пользуем все блага Интернета %)

Monday, 29 October 2007

Сборка Live CD на основе OpenSUSE Linux 10.3 и ядра с linux-live.org

Сборка Live CD на основе OpenSUSE Linux 10.3 и ядра с linux-live.org

Ну так вот, встала такая необходимость - до понедельника собрать загружаемый Livecd с Линуксом и некоторым набором своего софта.
Давно на примете было статейка: http://mydebianblog.blogspot.com/2007/09/1-livecd.html , по которой мы и будем собирать наш LiveCd, только я буду поподробнее описывать сам процесс установки линукс-системы в эмулятор qemu.

Собирать дистрибутив мы будем на основе OpenSUSE Linux 2007.0, а не на основе Дебияна, что объяснить довольно просто - Сусю я знаю немного получше (т.к. это моя рабочая ОС). Собираться все это будет под 32 разрядной SuSe Linux 10.3 (в итоге первая часть была собрана на 32 разрядной машине под 10.3, а сам дистрибутив уже под 64 разрядной 10.2, вот так вота), но лайвсиди будет 32 разрядный %)
Для начала небольшой ликбез по qemu: http://phpsuxx.blogspot.com/2007/09/opensu...c-qemu-kvm.html и http://phpsuxx.blogspot.com/2007/09/opensu...emu-kvm_04.html.
При сборке дистрибутива будем придерживаться т.н. Linux-way, то есть не будем изобретать велосипед и соберём все на основе уже готовых и достаточно хорошо отлаженных компонентов.

Для начала сольём весь необходимый софт:
  1. http://www.linuxdevcenter.com/linux/2007/07/05/examples/hello_printk.tar.gz - пример модуля ядра.
  2. ftp://ftp.slax.org/source/slax/kernel/2.6.21.5/src-core/config - конфиг для Лайв ядра.
  3. ftp://ftp.slax.org/Linux-Live/linux-live-6.1.5.tar.gz Linux Live scripts, т.е. скрипты для создания Live дистрибутива
    сайт: http://www.linux-live.org
  4. Качаем Linux Live Scripts и Linux Kernel c сайта: http://www.linux-live.org
  5. Весь софт (а он весьма увесистый) немного позже выложу на наш локальный ФТП (справедливо только для абонентов провайдера ЭрТелеком в г. Самара).

    Набор софта:
    • Не будет графической оболочки в принципе, т.к. задача написать свой аналог Кноппикса и прочих не стоит.
    • GCC
    • VIM
    • MC (Файловый менеджер)
    • Консольные браузеры
    • Исходники патченного ядра, т.к. будет необходима сборка модулей
    • Perl, не, а Вы что хотели лишить меня любимого языка программирования ? И не стыдно, а ?
    • Пакеты поддержки PPPoE, дабы сборку можно было использовать как Rescue CD.
    • Ну это... я ещу думаю
    Energy Live! v2 В связи с тупиковостью предыдущей попытки создать Live CD, пойдем немного другим путем и уже с OpenSUSE 10.3, на которой qemu чувствует себя намного лучше, т.к. kqemu (модуль ядра для поддержки виртуализации) ставится из пакетов. Теперь нам понадобится инсталляционный dvd диск OpenSuSe 10.3 под платформу i386 1штука. Ядро, сорцы ядра и скрипты с linux-live.org
  6. Создаём виртуальный диск:
    #qemu-img create vdisk.img 5G
  7. Запускаем инсталляцию
    modprobe kqemu # грузим модули поддержки
    qemu -hda vdisk.img -cdrom путь_к_исо_образу_суси.iso -boot d -m 128
    либо непосредственно с DVD диска, вставленного в привод хостовой машины:
    qemu -hda vdisk.img -cdrom /dev/sr0 -boot d -m 128, где /dev/sr0 - имя вашего DVD привода.

    При использовании OpenSuSe 10.2 грузим модули kvm вот в данном случаеж
    Запускаем установку от имени рута:
    qemu-kvm -hda vdisk.img -cdrom install-x86-minimal-2007.0-r1.iso -boot d -m 128
    Если в ответ получаем следующее:
    QUOTE
    open /dev/kvm: No such file or directory
    Could not initialize KVM, will disable KVM support

    То делаем modprobe kvm и modprobe kvm_amd (или kvm_intel в зависимости от процессора) и повторяем операцию, все должно заработать и Вы увидите окошко запуска инсталляции.
    Чтобы загружать модули kvm автоматически при старте openSUSE отредактируйте /etc/sysconfig/kernel и добавьте модули kvm в строку MODULES_LOADED_ON_BOOT=”…” . Или настройке их загрузку с помощью yast2 sysconfig.

    А также в данном случае везде используейте qemu-kvm, вместо qemu.

  8. Ставим Сусе, убирая все лишее.В моём случае список необходимых пакетов имеет примерной такой вид
    • tar
    • bzip2
    • mkisofs
    • GCC
    • nano
    • kernel-sources (хотя можно их и не ставить)
    • mc
    • G++
    • Perl
    • vim
    Ещё небольшая тонкость - я советую всю систему ставить на один раздел (и форматировать его в файловой системе ext3)!
  9. Ждём окончания установки системы...
  10. Загружаем установленную систему: qemu -hda vdisk.img -cdrom /dev/sr0 -boot c -m 128
  11. Кофигурируем параметры системы, задаём пользователю root пароль SSAU, а пользователю student пароль 1.
  12. Ставим имя узла energy-live.
  13. Настройку сети пропускаем.
  14. Потом, после окончания всех установочных процедур отключаем сусе командой shutdown -h now
  15. Создаём папку cdrom и монтируем к ней наш образ:
    # mount vdisk.img cdrom/ -t ext3 -o loop,offset=32256
    cp linux-live-6.1.5.tar.gz linux-2.6.21.5.tar.bz2 linux-2.6.21.5-i486-1.tgz hello_printk.tar.gz config cdrom/
    umount cdrom

    Тем самым мы скопировали требуемые файлы в наш виртуальный образ.
  16. Грузим систему: # qemu -hda vdisk.img -cdrom /dev/sr0 -boot c -m 128
  17. Открываем файл /etc/fstab любым текстовым редактором и там видим в первой строчке запись вида вида: "/dev/disk/by-id/....part1", так вот меняем это безобразие на /dev/hda1.
  18. Так, насчет этого пункта у меня большие сомнения, лучше этого не делайте. Открываем файл /boot/grub/menu.lst ищем там подобную штуку и меняем её везде на /dev/sda1.
  19. Перезагружаемся командой reboot (о ура, новый qemu научился-такие подхватывать рестарты системы и адекватно их обрабатывать), чтобы проверить работоспособность системы.
  20. Распаковываем наше бинарное ядро в систему (находясь в корневой папке /) tar -xvzf linux-2.6.21.5-i486-1.tgz
  21. Ядро будет распаковано в папку /boot под именем vmlinuz, переименуем его до адекватного имени: mv vmlinuz vmlinuz-2.6.21.5
  22. Открываем /boot/grub/menu.lst и добавляем внизу следующее:
    title Energy Live!
    root(hd0,0)
    kernel /boot/vmlinuz-2.6.21.5 root=/dev/hda1 #именно hda1 %)

    А в верху default 0 исправляем на default 2 и перезагружаемся с новым ядром.
  23. Вылезет пачка ошибок по поводу модулей и куча ругани на modules.dep , это решаем командой #depmod и последующей перезагрузкой для проверки.
  24. Проверка сборки модулей. берём файл hello_printk.tar.gz и переносим его в папку /root, распаковываем командой tar -xzf hello_printk.tar.gz, переходим в его папку и выполняем make, но получаем ошибку, т.к. исходников данного ядра у нас нету!
  25. Берем файл linux-2.6.21.5.tar.bz и переносим в папку /usr/src/, потом распаковываем его там командой tar -xjvvf linux-2.6.21.5.tar.bz
  26. переносим файл config в папку /usr/src/linux-2.6.21.5 под именем .config (#mv /config /usr/src/linux-2.6.21.5/.config)
  27. Переходим в папку с ядром: /usr/src/linux-2.6.21.5 и выполняем команды make oldconfig && make prepare && make modules_prepare Эти команды генерирую платформозависимые участки кода ядра, которые и будут использоваться при сборку модулей.
  28. Возвращаемся в нашу папку с модулем и повторяем процедуру сборки, посредством вызова команды make
  29. Модуль должен собраться успешно, после этого подгружаем его в ядро вызовом команды: insmod hello_printk.ko
  30. Если в самом низу вывода команды dmesg появилис строки Hello, World! то можно очень сильно радоваться , т.к. модули функционируют успешно !
  31. Переносим скрипты для лайвсиди в папку /tmp уомандой mv /linux-live-6.1.5.tar.gz и распаковываем их там. После этого переходим во вновь созданную папку и открываем файл .config , ищем в нём пункт "KERNEL=$(uname -r)" и заменяем его на "KERNEL=2.6.21.5"
  32. Запускаем скрипт сборки ./build сначала вводим "Energy Live!", потом /boot/vmlinuz-2.6.21.5, а потом ждем сжатия основных папок, что довольно не быстро... каково же ваше "двольно небыстро?" я хз, но у меня на настольнике (П4-1600\1Гиг оперы это потребовало бы около 5 часов, почему "бы", а потому, что я прерывал на 4м часу). А на ноуте с процессором Турион (у которого виртуализация на железном уровне) управился за где-то полтора часа.
  33. Следуя информационным надписям, можете либо создать загрузочную флешку, либо iso образ.
  34. Потом монтируем виртуальную ФС к хостовой машине и вытаскиываем оттуда образ исо, а также радуемся ;)
У меня получился 400 меговый образ )

Friday, 26 October 2007

D-Link G-520 OpenSUSe, вайфаизация

После появления в моём арсенале ноутбука с встроенным Wi-Fi меня с завидной регулярностью стала посещать идея перевода всего домашнего парка ПК (а это не много, не мало целых два компьютера) на исключительно беспроводную сеть.

И вот, после приобретения сетевого адаптера D-Link G520 моя задумка наконец-то осуществилась, чему я сам безмерно рад. Вы, наверное, помните те сложности, с которыми я столкнулся при установке драйверов на встроенный в ноутбук WiFi адаптер, в случае с G520 все было намного проще и решилось в буквально десятком кликов мышкой и парой команд с терминала.

Ну давайте по порядку. После установки сетевой карты Суся обнаружила сетевое устройство, но ругнулась, что нету на него драйвера. Шерстим инет на факт поддержки чипсета карточки (он смотрелся по lspci) каким-либо свободным пакетов драйверов и находим проект madwifi.org, который довольно успешно занимается данными моделями. Совершенно логично переходим на страницу загрузки, и видим там сие чудо:

Repository URLs are:
openSUSE 10.1: http://madwifi.org/suse/10.1
openSUSE 10.2: http://madwifi.org/suse/10.2
openSUSE 10.3: http://madwifi.org/suse/10.3
Что же это такое? Это рмп репозитории со скомпилированными (да, да, да! наконец-то никаких лишних телодвижений и извращений в консоли) под конкретное ядро модулями (точнее драйверами) !
Поехали:

rpm -ihv madwifi-0.9.3.3-0.1.i586.rpm
rpm -ihv madwifi-kmp-default-0.9.3.3_2.6.22.9_0.4-0.1.i586.rpm
# нижний пакет устанавливать лишь в том случае, если Вы используете виртуализацию на основе XEN.
rpm -ihv madwifi-kmp-xen-0.9.3.3_2.6.22.9_0.4-0.1.i586.rpm


Если у Вас стояло самое новое ядро на данный момент (madwifi достаточно оперативно обновляется), то все должно быть гладко, в противном случае вы получите сообщение о неудовлетворённой зависимости, а точнее о неподходящей версии ядра; эта проблема решается обновлением до нового ядра через встроенное в Yast обновление, также сделал и Ваш покорный слуга.

Ну вот, впрочем, и все, после установки перезагружаемся (хотя вполне возможно, что оно заработает сразу) и видим в сетевых устройствах наш опознанный вайфай. Далее конфигурируем через Kinternet и выкидываем на помойку все мешающиеся провода.

В итоге после т.н. вайфаизации у меня освободилось: два куска витой пары по 5 метров и 20 сантиметров соответственно, а также 8ми портовый свитч DES1008D. Кабель от интернет провайдера был подключён непосредственно в точку доступа.

Закончим на бодрой ноте слоганом "Долой провода! Даешь свободу передвижения по квартире!" %)

Wednesday, 17 October 2007

OpenSuSe 10.3, тест драйв

Вот сегодня - через две недели после официального релиза - я все же обновил тестовую машину на i386 на ОпенСусе 10.3, впечатления на твёрдую пятёрку, глюков пока не замечено.
Сразу заметил:

* Абсолютно гладкое обновление с 10.2
* Намного быстрее загружается и выключается, чем 10.2
* Новый ОпенОфис 2.3
* Поддержка мп3 включается парой очевидных кликов.
* Красивая зеленая тема smile.gif
* Намного быстрее работает система управления репозиториями
* Новое 22е ядро (а-то что-то надоело сидеть на 18ом)
* Дрова (и сразу с поддержкой 3Д !!!) на мой радеон 9600XT встали сходу
* Поправлено очень много багов и шероховатостей в софте
* Новый Yast
* Куски КДЕ4 просто потрясающие!
* Не слетела раскладка, хотя народ жаловался на это
* Полный мануал по ОпенСусе на русском (вбиваем в Yast2 opensuse-manual_ru) !! После установки ищите его вот тут: /usr/share/doc/manual/opensuse-manual_ru
* Компиз сразу работать не захотел, будем мучать дальше

Tuesday, 9 October 2007

Немного рутины на...Perl !

Встала довольно банальная задача - скачать список файлов, прямые ссылки на которые указаны на некоторой веб странице. Задача банальная, но какая реализация!)

Сразу пробуем wget -r http://download.videolan.org/pub/videolan/vlc/SuSE/10.2/x86_64/, но получаем только два файла, которые не являются требуемыми (robots.txt и index.html, вместо полутора десятков rpm-ок), при нормальном стечении обстоятельств подкоманда -r wget`а скачивает все файлы, но тут что-то она заработать не захотела. Видимо из-за того, что указаны не абсолютные ссылки, а относительные (ffmpeg-debuginfo-0.4.9.8723-2.1.x86_64.rpm).

Но лень на выдумки хитра, поехали:
wget http://download.videolan.org/pub/videolan/vlc/SuSE/10.2/x86_64/ -Olist.txt
cat list.txt|perl -e 'map{print join"\n",($_="@$_")=~m/href=\"(.+?)\"/sg}[<>]' > list1.txt
cat list1.txt|perl -e 'print "http://download.videolan.org/pub/videolan/vlc/SuSE/10.2/x86_64/", $_ for<>' > links.txt
rm list*
wget -i links.txt

Мало, не спорю, но время большего не позволяет. Если кто-то подскажет более простой способ, буду благодарен.

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

Monday, 27 August 2007

Установка ndiswrapper 1.47 из исходников на OpenSuse 10.2

Установка ndiswrapper 1.47 из исходников

Окончательно достали меня проблемы с Ндисвраппером (а точнее - мертвые зависания), что сейчас сижу из винды(!!!) и вот что нашёл на оффсайте ндисвраппера:
1.47 released
Written by Giri
Wednesday, 13 June 2007
Version 1.47 has been released. Short summary of changes since 1.46:

* Fixed random (occassional) crash issues with 64-bit drivers (observed with Broadcom driver)
* Fixed compilation issues with version 1.46

У меня как раз Броадком и 64 разрядная машинка) Сейчас будем патчиться.
Вот ссылка на сайт: http://ndiswrapper.sourceforge.net/joomla/

Установка предельно проста и сводится к слудующим шагам:
1) Скачиваем последнюю стабильную версию ndiswrapper c сайта, указанного выше.
2) Распаковываем содержимое архива в папку в папку.
3) Удаляем предыдущую установку ndiswrapper через yast2 (что предпочтительно)
4) После этого делаем с правами суперпользователя следующее: переходим в папку с распакованным драйвером, делаем make uninstall (эта цель сборки сносит все остатки ндиса, если они остались после удаления через яст). Отмечу, что этой же командой при необходимости вы можете полностью стереть драйвер из системы.
5) Выполнить команду make.
6) Выполнить команду make install, которая поместит модуль ndiswrapper в папку /lib/modules/`uname -r`/misc/
7) Переконфигурируем ндисвраппер: ndiswrapper -l служит для вывода всех установленных драйверов, ndiswrapper -r имя_установленного_драйвера служит для удаления дров, ndiswrapper -i служит для установки дров завново. Лично я советую, удалить Ваш драйвер и поставить его заново.
8) Загружаем модуль ядра ndiswrapper от имени суперпользователя посредством команды modprobe ndiswrapper.

Радуемся, хотя у меня вроде баг сохранился, но надеюсь Вам повезёт больше!
Более подробную инфу по второму этапу установки можете найти на: http://tomachinsky.blogspot.com/2007/06/wi-fi.html
-----
Баг полностью побежден обновлением через Йаст на ядро 2.6.18.8-0.5-default вместе с последующей пересборко данного модуля уже под новое ядро! // дико радостное, эх, как много крови мне попортил это баг

Sunday, 26 August 2007

Обновление ядра для OpenSuse 10.2 и немного про Firefox2

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

Вот адрес репозитория: ссылка, прописываем его как источник обновления и благополучно обновляемся, хотя предварительно все же советую свернуть содержимое раздела/папки /boot в архив, дабы себя застраховать от падения ядра. На этом все)



Огнелис

Нашел просто потрясающе удобный плагин для Firefox!
Вот ссылка: https://addons.mozilla.org/ru/firefox/addon/2410
Плагин занимается ни чем иным, как сохраняет ваше избранное на сайте, для доступа со многих компьютеров! Не правда ли, прелестная вещь ?

If you use Firefox on more than one computer, you'll want Foxmarks. Install Foxmarks on each computer, and it will work silently in the background to keep your bookmarks synchronized. You can also log in to my.foxmarks.com to manage your bookmarks from any computer.

A simple wizard guides you through the startup process. After that, just forget about it. It's simple and solid.

Миграция с Windows на Linux #2

Сочтем первую часть серии некоторым лирическим отступлением.
Форма изложения следующая - сначала список бесплатных программ, а потом в скобочках их аналог для платформы виндовс (программ немного, тут только те, которые использую сам).

  1. Просмотр и редактирование изображений - Gimp, Picasa, Gwenview (Photoshop, ACDSee)
  2. Jabber/ICQ клиент: PSI с транспортом icq.jabber.org.ru{хранит конфиг в: ~/.psi/} (Miranda, qip)
  3. ICQ клиент, серия 2. Вот буквально вчера сменил PSI на Kopete (есть поддержка как ICQ, так и jabber) и рад, функционал его намного шире, чем у того же PSI. {конфиг: ~/.kde/share/apps/kopete}
  4. Браузеры: Opera/Firefox/Konqueror(IE)
  5. Видеоплеер: Kaffeine (PowerDVD и проч)
  6. Аудиполеер с медиабиблиотекой: Amarok (Winamp)
  7. Запись CD\DVD - K3B (Nero)
  8. Качалки: KGet {на мой взгляд он весьма кривой, поэтому Gwget предпочтительней, KGet конфиг: ~/.kde/share/apps/kget}, Gwget (FlashGet, ReGet и проч.)
  9. Текстовые редакторы Vim, Emacs (среди аналогов под вин32 только порты этих же редакторов)
  10. Офисный пакет - OpenOffice 2.2 (M$ Office)
  11. Торрент клиент - KTorrent (bitTorrent)
  12. Шифрование данных: GPG (PGP)
  13. Словарь: StarDict (Lingvo)
  14. Ирц клиент: XChat {конфиг: ~/.xchat2/}(mirc)
  15. Чтение групп новостей: kNode {конфиг: ~/.kde/share/apps/knode}

Ну пока вроде все, как буду осваивать новые программы до уровня, когда я смогу их советовать всем остальным, буду редактировать этот список. P.S. вы, наверное, заметили, что я упоминаю место расположения конфигов всех, используемых мной программ, это, конечно же, не случайно, у меня есть дерзкая идея написать скрипт на shell для бэкапа всей моей системы и конфигов софта)

Миграция с Windows на Linux #1

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

В данный момент работаю уже около месяца на openSUSE 10.2, но тем не менее новичком себя называть не имею желания, т.к. раньше имел некоторый опыт работы на Линукс системах, но он был эпизодическим - основной рабочей платформой был виндовс, а линукс запускался крайне редко.

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

1) отсутствие винампа под линукс
2) отсутствие вменяемого icq клиента под линукс, который бы мог заменить мою любимую миранду
3) сложности с дровами к ноутбучному железу

Возможно, кто-то скажет, что это бред и рюшечки (да, подумаешь, какой-то там аськушный клиент!), но смею поспорить - я очень придирчив к прогам, которые использую 99% времени проводимого за компьютером и первой попавшейся "красноглазой поделкой" пользоваться не буду.

Но время шло и мне подкинули идею попробовать плеер Amarok {amarok.kde.org}, (тогда я ещё работал на Генту 2006.1), внимая всяческим эпитетам в сторону данной софтинки я её поставил, чему теперь безмерно рад, ибо винамп просто отдыхает на фоне мощи амарока.

Ну а теперь пункт #2, перепробовав добрый десяток icq клиентов (licq, kopete, sim, pidgin, gaim и пр.) я так и не нашёл подходящий. Но через некоторое время все же нашёл - это джаббер клиент PSI {psi-im.org}c подключеным icq транспортом на основе pyICQ (считаю его лучшим в данном классе).

Ну вот вроде и решили почти все мои проблемы за исключением железных, остнановимся теперь как раз на них. "Из коробки" {т.е. только после установки ОпенСьюз} у меня была поддержка системы энергосбережения (в т.ч и управление частотой микропроцессоров), проводной сетевой карты, тачпада, звук также установился нормально и система меня встретила приятной мелодией.

Не установились автоматически - драйвера для видео {вообще говоря с ними никаких проблем нету, тут дело несколько другого характера - они не поставляются вместе с ОС по причине того, что этого не приемлет лицензия}, также не определился вайфай.

Порывшись в инете, я поставил драйвера на все данные компоненты и получил полнофункциональную систему) Хотя все не совсем гладко - имеют место зависания системы при работе с ДВД и вайфаем, но они не сильно мешают работе, ибо происходят не очень часто, но тем не менее я намерен и с этими багами разобраться.

Friday, 24 August 2007

Настройка прокси сервера squid в openSUSE 10.2

Довольно обыденная задача, но тем не менее есть некоторые тонкости, которые я и постараюсь изложить.

Для начала нам требуется запустить Yast и установить пакет squid. Сразу после установки его можно запустить: /etc/init.d/squid start
Но настройки по-умолчанию блокируют все соединения из внутренней локальной сети. Это исправить можно следующим образом:

1) Открываем в текстовом редакторе конфиг файл Squid`а vim /etc/squid/squid.conf
2) Ищем строку: http_access deny all, как вы можете догадаться, эта строка блокирует весь траффик на прокси, но нас это категорически не устраивает, поэтому комментируем эту строчку посредством постановки символа # в самом начале строки.
3) Допустим, в вашей домашней локальной сети используются адреса вида 192.168.155.x, в этом случае пишем следующее (возможно, что-то непонятно будет в этих строках, можете поискать в гугле или подождать моих новых статей, в которых я постараюсь описать все в подробностях):
acl my_home_network src 192.168.155.0/24
http_access allow my_home_network
4) Сохраняем файл конфигурации.
5) Перезапускаем сквид: /etc/init.d/squid restart
6) Проверяем работоспособность прокси с другого компьютера, лог доступа к прокси можно в реальном времени просмотреть командой: tail -f /var/log/squid/access.log

Wednesday, 22 August 2007

Решение проблем с kdesu в openSUSE 10.2

Сегодня ограничимся небольшой заметкой об излечении одной забавной "фичи", которая мне портила целую неделю нервы. А именнно, о баге в kdesu, который проявлял себя следующим образом - при попытке запустить с помощью меню приложение, требующее прав рута (например yast2), выскакивало окошко "введите пароль рута", но особенность в том, что она на заведомо верный пароль она отвечала "ошибочный пароль" и закрывалась.

Лечится так:
1) Открываем консоль.
2) Логинимся суперпользователем посредством команды su
3) Переходим в папку: /home/nrg/.kde/share/config, где "nrg" - соотвественно имя вашего пользователя.
4) Открываем текстовый редактор (ну я, например, очень люблю Vim) и создаем файл kdesurc следующего содержания:
[super-user-command]
super-user-command=su
5) Сохраняем файл, меняем на него права командой chmod 777 kdesurc (это, чтобы он не ругался на невозможность записи в данный файл)
6) Радуемся избавлению от бага)
Решение взято вот отсюда: ссылка
P.S. Хм, а мне понравилось выделять команды и пути жирным шрифтом, значит так и буду делать, если Вы, конечно, не против.

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

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

  • Qt (C++), а также на него же море биндингов по типу pyQt, perlQt. Но следует упомянуть, что для коммерческого использования Qt платный. Также скажу, что это не просто библиотека для создания графического интерфейса пользователя, а очень большая платформа с огромными возможностями. Оффсайт: http://trolltech.com


  • Perl, идеальная платформа для веб приложений и всевозможных парсеров (как пример очень удачного фреймворка к нему - Catalyst). В данный момент я как раз занимаюсь многопоточными приложениями на Перле и хотел бы отметить, что реализация потоков начиная с версии 5.8.8 заслуживает очень лестных отзывов. Сайт: http://perl.org


  • Gtk(С++), GUI библиотека и к ней тоже, как и к Qt, создано море биндингов на те же PHP, Python и Perl.


  • Java и среды разработки на ней под Линукс - Eclipse, Netbeans. Для многих крупных проектов вообще идеальное решение. Сайт: http://java.com


  • Компиляторы С/С++, gcc - идеальное решение для разработки приложений любого масштаба. (вы ещё пишете под MSVC ?))))


  • Питон... ну про него последнее время сказано уже столько, что я почти ничего не могу добавить. Скажу, что для него существует огромное число фреймворков (чаще всего построенных по принципу MVC), например Django, Pylons. Сайт: http://python.org/


  • PHP, достаточно простой в изучении язык с большим количеством плагинов и фреймворков. Сайт: http://php.net


  • Для разработки баз данных идеальное решение MySQL\PostgreSQL. Вы ещё используете MSSQL для своих проектов?) Долгое время про MySQL можно было слышать, что это игрушка для мелких проектов, но после выхода кластерных версия этe СУБД почему-то никто уже не называет поделкой, странно, не правда ли?)))



  • В заключение, хотелось бы упомянуть отличную платформу для веб приложений - LAMP, которая расшифровывается как Linux Apache MySQL Perl PHP Python (в связи с популярностью Питона, считаю, что он имеет полное право находиться в этом списке).

    И это ничтожная часть реально существующих платформ. Так что можно с полной уверенностью в своих словах сказать, что Линукс для программиста поистине безграничен)


    Изначальная версия этого небольшого очерка была написана мною на одном из форумов поддержки пользователей SuSe Линукс, в ответ на вопрос о том, как настроить .net (поддерживается проектом Моно) под Линукс платформу. Но мою статью не стоит воспринимать как критику данной платформы (ведь нам не нужен холивар в комментариях, так ведь ?), это просто повод указать, что мир не сошёлся клином на ДотНете)

    Tuesday, 21 August 2007

    Мьютексы

    What is a mutex and how does it work?

    Imagine a big office (your program), with many assets (shared resources)
    and many employees (threads). As an example, all employees share one common
    resource - a toilet. All employees have agreed to use a label on a
    toilet's door (mutex).

    When employee wants to use a toilet, he checks a label on a door
    (locks a mutex): if it is "engaged", he waits (blocks on a mutex),
    then when it is "free", he enters the toilet and changes the label to
    "engaged" (mutex lock succeeded). When employee had finished his business
    in the toilet, he goes out and changes the label to "free" (unlocks mutex).

    If there are many people in the office, it even may be a queue (many threads
    blocked on a mutex). Then it is up to a manager (threads implementation
    algorithm), who gonna enter the toilet next. Usually, it is the first person
    in the queue (FIFO algorithm).

    So, in order to pee safely, following rules must apply:
    1. Everybody who wants to pee, MUST use a label - enter only when it is "free"
    and set the label to "engaged" (lock mutex). Otherwise confusion guaranteed.
    2. After peeing, the label must be set to "free" (unlock mutex).

    These rules, as you see, is just an agreement in the office (program logic).
    The label on the toilet's door (mutex) and a toilet itself (resource) are
    totally independent. The label can be anywhere, for example, at the helpdesk.
    The main thing is that everybody knows where it is and how it should be used.

    What happens if somebody in the office does NOT follow the agreement
    (some thread does not use mutex when accessing a resource)? That person enters
    the toilet paying no attention to the label. Somebody may be sitting
    there already, and as you can imagine, BAD things may happen.

    Authors: Denis Kozadaev, Sergey Lyubka. June 2007.


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