20 декабря 2012 г.

Novena -- ноутбук, создаваемый по принципам OSHW

Novena -- это ноутбук, создаваемый по принципам открытого аппаратного обеспечения, или аппаратного обеспечения с открытыми исходниками (open source hardware, OSHW). Все схемы и документация открыты и доступны для скачивания. Так же ожидается, что Nouvena будет работать полностью на свободном программном обеспечении -- включая драйверы устройств и прошивки. Ещё обратите внимание на замечательное решение: для хранения BIOS'а используется обычная карта памяти (microSD), которая вставляется в слот на системной плате:

http://www.opennet.ru/35639/

Думаю, можно будет использовать CoreBoot в качестве BIOS.

- Артём

16 декабря 2012 г.

Vegan pancakes

Отработал технологию выпечки веганских блинов (без продуктов животного происхождения). Теперь по выходным пеку блины. Вот фотография того, что получилось сегодня:

vegan pancakes
(license: CC-BY-SA)

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

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

Муку и воду беру "на глаз", добавляя по мере приготовления теста для получения нужной консистенции.

Готовится всё легко, единственная проблема -- время приготовления. В общем виде, весь процесс можно разделить на следующие этапы:

  1. Приготовление каши из хлопьев
  2. Приготовление теста
  3. Собственно выпечка
  4. Употребление

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

Больше всего времени занимает второй и третий этап. Конечно, пока тесто поднимается, можно заняться какими-нибудь другими делами. А вот на третьем этапе от плиты уйти надолго не получится.

Для приготовления использую специальную сковороду для блинов (блинницу) -- это гораздо удобнее, чем использовать обычную сковороду с высокими краями (по собственному опыту).

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

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

Приятного аппетита.

- Артём

8 ноября 2012 г.

Расшаренные журналы LinuxFormat в офисе Меры

На этой неделе кто-то расшарил журналы LinuxFormat в офисе компании Мера на ул. Деловой. К сожалению, я не успел сфотографировать их тогда, когда они красиво лежали веером со стопкой прилагающихся дисков, так что вот фотография разбросанных по столу журналов:

28 октября 2012 г.

Object oriented Lazy GTK Cat

Загрузил в репозиторий LazyCat на GitHub последние изменения, являющиеся результатом почти месяца работы. Суть изменений заключается в том, что Lazy GTK Cat (текущий и пока единственный GUI для LazyCat) переведён на объектно-ориентированную модель.

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

Поскольку решаемая мной задача (GUI и некоторая высокоуровневая логика) хорошо поддаётся на разбиение на ясно определённые объекты, перевод на объектно-ориентированную модель позволил упростить код, сделать его ясным и удобным для понимания. А значит, дальнейшее добавление необходимых возможностей в GUI будет проще.

Я изучаю Scheme и GNU Guile по ходу работы над проектом и по мере решения возникающих проблем. И в этот раз много времени ушло на чтение документации и эксперименты с GNU Guile -- чтобы понять, как же реализовать объекты в языке. Сначала попробовал создавать объекты с помощью closures -- механизм, который "из коробки" присутствует в Scheme.

Вариант с closures оказался простым и достаточно удобным. Но я на этом не остановился и решил попробовать сделать то же самое с использованием Guile Object Oriented Programming System (GOOPS) -- модуля, который приносит объектно-ориентированность в язык. После того, как переписал готовые объекты с использованием GOOPS, я продолжил разделение того большого куска кода, которым являлся Lazy GTK Cat, на небольшие и относительно простые объекты. Стало ясно, что GOOPS является более мощным и удобным механизмом для создания объектов в языке.

Работу методов для некоторых объектов я проверил по отдельности, через написание скриптов на GNU Guile (одна из возможностей этого интерпретатора -- использование вместо shell-интерпретатора для написания скриптов на Scheme, которые можно выполнить прямо из консоли). После тестирования нужно было собрать всё воедино и заставить работать. Далее -- тестирование Lazy GTK Cat и дописывание оставшихся частей основного класса приложения. Всё это было сделано за несколько дней.

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

Я по-прежнему ищу разработчиков для проекта. Важна не только помощь, но и интересен опыт совместной работы над проектом через GitHub. Если вам интересен проект -- go ahead, буду рад помощи.

- Артём

14 октября 2012 г.

cowsay for Android

Сегодня к своему удивлению обнаружил в репозитории F-Droid порт Unix-утилиты cowsay для Android. Разумеется, я тут же установил такую полезную утилиту на свой коммуникатор:

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

Кроме коровы доступно множество других персонажей, так же можно менять отображение сообщения и некоторые параметры персонажа. Рекомендую вам установить эту утилиту в вашем дистрибутиве GNU/Linux (если вы ещё не сделали этого) и поэкспериментировать с ней.

Как и большинство утилит Unix, cowsay может быть использована в конвейере команд. Кроме того, существует вариант утилиты cowthink, который отличается тем, что выводит сообщение в "облаке мыслей":

$ cat hello.c | cowthink -W 80 -n
 _______________________________________________ 
( #include <stdio.h>                            )
( #include <string.h>                           )
( #define S "Hello, World\n"                    )
( main(){exit(printf(S) == strlen(S) ? 0 : 1);} )
 ----------------------------------------------- 
        o   ^__^
         o  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

27 сентября 2012 г.

Проект LazyCat

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

Идея, которая стоит за данным проектом достаточно проста - если у вас есть много компьютеров, то иногда возникает потребность выполнить какие-то однотипные действия на всех ваших ПК. Или же бывает полезно получить "общую картину" происходящего. Это достаточно просто, когда у вас есть доступ к компьютерам (физический и/или сетевой), и когда компьютеров не много. С ростом количества компьютеров такая задача, как развёртывание программного дистрибутива, становится нетривиальной.

Возьмём наглядный пример.

Университет. Пятница. Вечер. Системный администратор по имени Боб допивает свой кофе и готовится уйти домой. И в тот момент, когда он уже накинул сумку на плечо и собрался уходить, к нему прибегает преподаватель и просит сегодня же установить на все компьютеры в классе номер 21 пакеты Inkscape и Gimp, так как только что стало известно, что в субботу будут проходить курсы по компьютерной графике.

Предположим, в классе 30 компьютеров. На каждый нужно установить необходимые программы и (возможно) произвести некоторую настройку - например, добавить учётные записи для новых пользователей. Итого - требуется выполнить порядка 60 одинаковых действий. Что в такой ситуации может сделать Боб? Он может, во-первых, пойти в класс номер 21 и поставить программы на каждый компьютер в отдельности. Но, поскольку за плечами Боба - годы системного администрирования, то он знает пару полезных трюков. Например, он может со своей машины зайти по SSH на каждый из компьютеров и выполнить установку. Но ему по-прежнему нужно залогиниться на каждый компьютер, выполнить установку и настройку вручную. Лучше, чем бегать от компьютера к компьютеру, но всё ещё не слишком удобно.

Было бы гораздо удобнее, если бы Боб мог отправить команду установки сразу всем компьютерам в классе 21, и получить обратно отчёт, если что-то пошло не так - например, если пакет уже был установлен в системе, или же во время установки произошла ошибка.

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

LazyCat - один из таких инструментов. Он написан на языке C и на Scheme (диалекте Lisp) с использованием Guile. На языке C написано ядро проекта и прокси-сервисы. Под прокси в данном контексте я понимаю процессы, которые непосредственно пересылают сообщение по сети конечному хосту. Графический интерфейс пользователя и высокоуровневая логика написаны на Scheme.

По сути, базовая часть LazyCat является интерпретатором Scheme с дополнительным API. Благодаря использованию Scheme, LazyCat можно легко расширить - например, написать другой интерфейс, добавить функциональность или же использовать его в автоматическом режиме.

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

  • Графический интерфейс пользователя на GTK.
  • Выполнение команд на хостах через TCP- и SSH-подключения.
  • Базовый режим "Raw", в котором lazycat отправляет команду на все хосты из списка и отображает необработанный вывод команд.
  • Режим "Diff", при котором результат выполнения команды с каждого хоста сравнивается с результатом выполнения этой же команды с эталонного хоста.
  • Группировка хостов в списке (пока имеет чисто эстетический характер).
  • Сохранение и восстановление списка хостов между сессиями.

В ближайших планах:

  • Отладка.
  • Возможность выбора эталонного хоста перед отправкой команды в Diff-режиме (сейчас выбирается первый хост из списка).
  • Возможность изменять информацию о хосте из графического интерфейса (пока реализовано только API для этого).
  • Возможность отправки сообщений только выбранным хостам из списка, или же группе хостов.
  • Организация списка хостов по типу контакт-листа IM-клиента (за образец думаю взять Pidgin) - статусы, состояния (online/offline) и т.п.
  • Периодический опрос состояния хостов (для отображения их статусов в списке).

Сейчас над проектом работаю я один, just for fun, в свободное от работы время. В связи с этим прогресс идёт достаточно медленно, и проекту не хватает тестирования. Если вас заинтересовал LazyCat и вы можете и хотите поучаствовать в разработке - то вот страница проекта на GitHub, откуда вы можете получить исходный код (под GPLv3) и дополнительную информацию о проекте:

https://github.com/artyom-poptsov/lazycat

- Артём

20 сентября 2012 г.

Сентябрьский месяц над городом N^2

Осенний вечер, сентябрьское небо
Темнеет быстро - вот зажглись огни,
Весь горизонт теперь мерцает светом,
Лишь месяц отрешённо смотрит с высоты.

18 сентября 2012 г.

История Computer Science: Системы с разделением времени

Нашёл крайне интересную документальную видео-запись из MIT, которая относится к тем временам, когда компьютеры были большими и их время стоило несравненно дороже, чем сегодня:

http://hackaday.com/2012/09/17/retrotectacular-time-sharing/

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

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

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

Для того, чтобы понять, насколько важным был этот шаг, представим работу пользователя по имени Алиса с системой пакетной обработки данных:

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

Теперь Алисе нужно ждать, пока задание будет выполнено (возможно, это займёт пару часов, если на ЭВМ много других заданий). Когда задание будет выполнено, Боб отдаст Алисе распечатку с результатами вычислений. Или же распечатку с программной ошибкой (если что-то пошло не так). Если в программе обнаружилась ошибка, то Алисе нужно будет внести необходимые изменения, создать новое задание, отдать его на выполнение и т.п.

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

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

Правда здорово?

- Артём

10 сентября 2012 г.

X-сервер в Debian GNU/Hurd и особенности системы

В комметарии к скриншоту из этого [1] поста мне задали два вопроса касательно текущего статуса GNU Hurd. Я решил опубликовать ответ здесь, так как он получился достаточно длинным и он может быть интересен ещё кому-нибудь (кого волнуют эти же вопросы).

Итак, вопрос первый:

> А X сервер на нем заводится?

На сайте Debian GNU/Hurd есть инструкция по запуску X-сервера [2] - судя по всему, сервер должен запускаться без особых проблем. У меня пока не получилось его запустить. Надо будет ещё раз попробовать - возможно, я что-нибудь упустил из виду при настройке.

В качестве подтверждения, что X-сервер действительно работает - вот обсуждение [3] Debian GNU/Hurd, где можно найти скриншоты иксов, работающих на Hurd, запущенном в QEMU.

> Ощущаются ли особенности архитектуры?

Во-первых, надо сказать, что система работает достаточно стабильно (по сравнению с тем, что я видел в Arch Hurd в начале года). Например, исправлена досадная ошибка с "замораживанием" консоли при простое системы (патч оказался достаточно тривиальным [4]).

Однако, в плане производительности Hurd всё ещё отстаёт от Linux - по собственным ощущениям, по крайней мере. При работе с разделами ext2 очень активно нагружает процессор ext2fs сервер (транслятор, в терминологии Hurd), который обеспечивает доступ к разделам с этой ФС - скажем, при aptitude upgrade он ест иногда более 40% CPU.

Вот скриншот с рабочей системы, на котором видно, что ext2fs заметно нагружает CPU (htop запущен через SSH-подключение):

Что интересно, по сути ext2fs представляет собой переписанный драйвер ext2 из Linux (насколько я понимаю), который отражает особенности Hurd - например, его i-node хранят так же информацию о трансляторах, которые являются частью Hurd. В системе даже привычный mount является ни чем иным, как скриптом, который запускает соответствующий транслятор для обслуживания запросов к монтируемому разделу.

Так что ты можешь видеть в ps/top/htop, что творится "под капотом" ОС - работу серверов, которые по сути и превращают микроядро Mach в Hurd.

На тему данную тему есть интересный обзор GNU Hurd с оценкой производительности, который был опубликован в прошлом году на Phoronix [5].

Ссылки:

9 сентября 2012 г.

По поводу концепции микроядерной ОС

Продолжаю наблюдать за развитием GNU Hurd. Напомню, что Debian GNU/Hurd стоит на одном из моих ПК как основная система. Мне интересна концепция микроядерной ОС - разработчики микроядер обещают высокую надёжность и возможность легко расширять и изменять систему под свои нужды.

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

Эта концепция напоминает деловые связи, которые возникают в обществе людей. Вот пример: Боб выращивает помидоры в теплицах. Он получает каждую неделю удобрения для помидор от Мэлори. Так же раз в месяц к нему приходит электрик Дэйв, который обслуживает автоматическую систему полива. Если, например, Мэлори заболеет и не сможет обеспечивать какое-то время Боба удобрениями, то Боб может обратиться к Джону (другому поставщику) и тот доставит ему удобрения. То есть, бизнес Боба почти не пострадает от того, что Мэлори заболел, так как он является внешним "сервисом", который Боб использует. С другой стороны, некоторая часть работы выполняется самим Бобом - например, сбор и упаковка помидор перед продажей. Так же в небольшой фирме Боба работает его супруга, Элис - она отвечает за учёт средств и поддержку web-сайта фирмы Боба.

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

Следущим важным моментом является то, что микроядра гораздо меньше по размеру (да, приставка микро- здесь используется не просто так). Так, например, ядро MINIX3 - одной из широко известных микроядерных ОС - содержит примерно 10000 строк кода [1]. Чем меньше кода, тем проще его поддерживать и вылавливать ошибки. Меньше кода, меньше ошибок, надёжнее ОС.

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

Здесь стоит заметить, что ядро Linux, хотя и монолитно по своей природе, предоставляет механизм "модулей ядра", благодаря которому функциональность ядра может быть расширена "на лету" путём загрузки модулей. Вам не нужно включать в ядро драйверы для _всех_ устройств - вы можете собрать ядро с драйверами только для тех устройств, которые у вас есть. Большинство драйверов так же позволяют скомпилировать их, как модули, которые могут быть загружены в ядро при загрузке или во время работы ОС (как правило, без перезагрузки) - например, при появлении нового устройства.

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

Одним из замечательных примеров надёжности микроядерных ОС явлется так называемый сервер реинкарнации (reincarnation server), который является частью ОС MINIX3, и который автоматически перезапускает серверы, если они по каким-то причинам сбоят и аварийно завершают свою работу [2].

Тем не менее, микроядерные ОС обладают своими недостатками - например, их намного сложнее разрабатывать, и обычно они обладают более низкой производительностью (хотя, например, микроядро L4 достаточно быстро[3]).

Исследования в области микроядер ведуться десятки лет, но на данный момент можно назвать лишь несколько успешных проектов в этой области. Микроядро MINIX и микроядро Mach (третья версия которого лежит в основе GNU Hurd и Darwin) - пожалуй, самые известные.

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

Ссылки:

GNU Emacs на Debian GNU/Hurd

Сегодня наконец-то запустил GNU Emacs на Debian GNU/Hurd. Emacs версии 23 при запуске у меня выдавал следующую ошибку

$ emacs -nw
emacs: Not a tty device: /dev/tty

Различные попытки запустить Emacs 23 не увенчались успехом.

В списке рассылки нашёл патч [1], который должен был устранить эту проблему. Далее мне нужен был исходный код GNU Emacs, чтобы собрать его с данным патчем.

Однако сначала я решил попробовать более простой путь. Ранее я читал, что данная ошибка была устранена версиях Emacs старше 23.4 (у меня на тот момент была установлена версия 23.2). Поэтому я решил первым делом проверить, не появилась ли более новая версия в репозитории - и обнаружил Emacs версии 24, где ошибка была устранена.

Для меня запуск Emacs на GNU/Hurd был важным рубежом - ведь если у вас есть работающий Emacs в системе, то у вас есть практически всё, что может потребоваться - даже текстовый редактор.

Источники:

  1. http://lists.debian.org/debian-hurd/2011/01/msg00023.html

18 августа 2012 г.

Много работаю. Чтож, мне нравится работать.

Много работаю. Чтож, мне нравится работать. Нравится отдача, которую получаю от текущей работы - вижу, как растёт опыт, накапливаются знания. И проблемы, которые казались когда-то сложными, теперь решаются легко. Нет, не легко, но решаются.

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

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

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

Фотоаппарат с собой не брал, однако теперь каждый более-менее современный телефон - ещё и фотоаппарат, и видеокамера, и плеер. Так что я даже сделал пару снимков. Как вы, возможно, знаете, я люблю индустриальные пейзажи - все эти дымовые трубы, заводские здания дизайна прошлого века и т.п. И я просто не мог не остановится, чтобы сфотографировать это:

Я думаю, автосервис - вещественное доказательство тому, что на той стороне реки тоже есть жизнь (на случай, если вы вдруг сомневались.)

8 июля 2012 г.

ClusterGen: Кластерный генератор трафика.

Доброго времени суток,

я хочу рассказать о проекте, над которым сейчас работаю в компании Мера. Проект называется ClusterGen. Репозиторий ClusterGen'а находится на SourceForge, исходный код доступен под свободной лицензией GNU GPLv3.

http://sourceforge.net/projects/clustergen/

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

Для начала - что же из себя представляет генератор трафика? Это некий узел в сети, который может генерировать пакеты (например, TCP- или UDP-пакеты) с заданной конфигурацией. Этим узлом может быть специальная (и очень дорогая) железка, или же специальное программное обеспечение, работающее на обычном компьютере. Рассмотрим преимущества и недостатки каждого из вариантов.

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

Эффективность второго (программного) варианта ниже, чем аппаратной реализации, и сильно зависит от того, где находится процесс, генерирующий трафик - в пространстве пользователя или в пространстве ядра операционной системы. [Turull] Очевидно, что чем ближе к аппаратной части ПК находится генератор, тем меньше требуется накладных расходов на генерацию каждого пакета, и тем выше эффективность генератора. Поэтому генераторы, работающие в пространстве пользователя (проще говоря, как обычные пользовательские процессы) не могут генерировать пакеты с той же скоростью, что генераторы, расположенные в пространстве ядра.

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

Управление pktgen'ом осуществляется через файловую систему procfs, путём операций записи в файлы и чтения из файлов в каталоге /proc/net/pktgen. Для упрощения процесса настройки генератора и получения от него статистики, автор pktgen'а предлагает использовать bash-скрипты. [Olsson]

Таким образом, pktgen превращает обычный компьютер под управлением GNU/Linux в генератор трафика. Но чтобы использовать этот генератор как полноценный инструмент для тестирования узлов компьютерной сети, нужно немного больше, а именно: удобный интерфейс управления, способ сбора и отображения статистики. Эти задачи решает ClusterGen. Он позволяет контролировать pktgen, собирать статистику и отображать её в виде графика.

Основная идея, которая стоит за разработкой ClusterGen'а - скоординировав работу генераторов на нескольких дешёвых ПК под управлением GNU/Linux со 100-мегабитными сетевыми картами, можно добиться в сумме очень высокой интенсивности трафика, сравнимой с той, которую могут выдавать аппаратные генераторы.

Продолжение следует.

Литература

  1. [Olsson] Proceedings of the Linux Symposium. Volume Two. Robert Olsson. "pktgen the linux packet generator". Canada. 2005.
  2. [Turull] Daniel Turull. Open Source Traffic Analyzer. Stockholm, Sweden. 2010.

30 июня 2012 г.

Снова слушаю Abba

Снова слушаю Abba. Я слушал эту группу на виниловых пластинках, когда был ещё ребёнком. И спустя столько лет они звучат всё так же потрясающе.

Спасибо.

- Артём

24 июня 2012 г.

Неделя релизов

На уходящей неделе было два важных для меня open source релиза: один связан с моей текущей работой в компании Мера, а второй - связан с работой над личным проектом в свободное время.

Первый из проектов называется ClusterGen, и это первый open source проект, развиваемый в компании Мера. Исходный код и описание проекта выложены на SourceForge под лицензией GPLv3:
http://sourceforge.net/projects/clustergen/

Второй проект носит название LazyCat. Я занимался этим проектом с середины прошлого года, но только недавно наметился серьёзный прогресс в разработке. Исходный код проекта выложен на GitHub под лицензией GPLv3:
https://github.com/artyom-poptsov/lazycat

Оба проекта находятся в активной разработке. Я постараюсь найти время и рассказать подробнее о каждом из них.

23 мая 2012 г.

Linux InstallFest 12.04

Доброго времени суток, случайные и неслучайные читатели этого блога. В ближайшее воскресенье, а именно 27 мая, состоится очередной Linux InstallFest в Нижнем Новгороде. Это означает, что у вас есть шанс встретиться с линуксоидами в условиях, приближённых к их естественной среде обитания.

Вот объявление:

Подробности: http://nnlug.ru/node/104

Список докладов и докладчиков, похоже, наконец-то более-менее определён. Некоторые из докладов должны быть очень интересны - например, про USB 3.0. Я слышал, Сергей Бессонов собирается рассказать что-то захватывающее по этому поводу. Ну и самое главное, конечно - это участники мероприятия. Думаю, я должен пояснить, что Linux InstallFest - это не коллективная сборка нового Linux Kernel для Gentoo, а

- способ встретиться и пообщаться
- возможность послушать доклады на различные темы - от open source hardware до компьютерной графики
- найти единомышленников, которые используют то же ПО, что и вы
- способ найти разработчиков для вашего мега-проекта и/или способ найти проект, в котором вам бы самим было интересно поучаствовать
- и т.д.

Кстати, насколько мне известно, на грядущем InstallFest'е будут присутствовать официальные представители компании Мера, так что вы сможете узнать больше об этой компании и её деятельности в сфере разработки ПО. Кто знает - возможно, это будет ваше следующее место работы?..

Так что берите свои ноутбуки и компьютеры, и приходите в воскресенье к 10 часам утра, в Нижегородский Радиотехнический Колледж.

- Артём

14 мая 2012 г.

Josh Varnedore - Earth

В создании видео принимал участие Дэвид Альтобелли (David Altobelli). Мне этот режиссёр известен тем, что он снимал клипы на музыку группы Hammock. Например, клип на композицию "Mono No Aware".

1 мая 2012 г.

Железный конь



Купил я коня - но конь не простой:
На солнце блестит стальной чешуёй,
И красная грива горит, как огонь -
Такой у меня удивительный конь.

Не знает усталости, страха и голода,
Дождя не боится, жары или холода,
Без устали может скакать и скакать -
Ну разве что всадник может устать.

Характер коня, скажем так, сложный -
Договориться не всегда с ним возможно:
Любит мой конь выбирать прямой путь,
Порой и в кусты норовит завернуть,

А если дорога ведёт под уклон -
Бросается вскачь удивительный конь,
И немало усилий нужно мне приложить
Чтобы коня остановить.

Зато, когда отдых даю - он смиреет,
И двинуться с места даже не смеет,
Лишь красная грива горит, как огонь -
Такой у меня удивительный конь.

2012-05-01

http://poptsov-artyom.narod.ru/texts/2012/2012-05-01.html

6 апреля 2012 г.

Парк "Швейцария", вид на Оку


Три фотографии, сделанные в один из холодных воскресных дней, во время прогулки по парку "Швейцария".







Вид на Оку и Мызинский мост.


Мир в приглушённых, спокойных цветах.
Горизонт исчезает в холодной дымке. Очень красиво.



Пустынная дорога вдоль берега Оки, на краю парка.




Ссылка на альбом:
https://picasaweb.google.com/114139409305362314356/zzEXm?authuser=0&feat=directlink



Фотографии распространяются под лицензией CC-BY

4 апреля 2012 г.

Hello World!







Итак, этот "Hello World!" призван показать, что автор успешно работает и даже может отвечать на пинги через средства связи.




Пользуясь случаем, хочу порекомендовать этот видеоролик:



10 марта 2012 г.

Купил обжимной инструмент для коннекторов RJ-45

Наконец-то купил себе обжимной инструмент для коннекторов RJ-45, по-простому - обжимка. Да, знаю, что RJ-45 - некорректное название, правильнее его называть 8P8C. Но RJ-45 как-то уже прижилось.

Покупал в одном из магазинов DNS, там эта обжимка стоит 200 р. (модель T-210/НТ-210С). Мне чуть было не продали полу-профессиональный инструмент за 700 р., но в конечном счёте им удалось найти для меня эту дешёвую и непрофессиональную обжимку на складе.

Так же купил коннекторов по 4 р. за штуку. Ещё в DNS можно купить не обжатый кабель, по 9 р. за метр. Но кабель у меня пока ещё есть.

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

Защёлки на коннекторах оказались какие-то слабые - после обжимки совершенно не защёлкивались в разъёмах. Может быть, я просто перестарался с приложенным на коннекторы усилием. Однако это оказалось легко исправить осторожным отгибанием пластмассовой защёлки.

Надо будет в следующий раз спросить в DNS обжимку для Wi-Fi.

8 марта 2012 г.

C or English?

Ставлю Debian GNU/Hurd на виртуальную машину. На этапе выбора языка установки мне предлагаются следующие варианты:


Вот даже не знаю, какой язык выбрать.

16 января 2012 г.

Не могу уснуть

Пустота вокруг,
              тишина вокруг,
Не могу уснуть,
               ловлю каждый звук --
Где-то -- стук,
                где-то -- шорох,
Бросил ветер в окно
                  снега ворох,
Прогудела мимо дома
                  машина,
Отблеск фар на стене --
    и опять тишина.
Спокойной ночи.

9 января 2012 г.

Короткий отчёт за выходные дни

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

1. Я установил Arch Hurd на подержанный компьютер, чудом доставшийся мне ещё в прошлом году.

Почистил компьютер внутри,подключил к нему старую PS/2 клавиатуру и старый ЭЛТ-монитор, который вытащил из гардероба, а потом потратил кучу времени на установку и настройку ОС. И могу сказать, что это было достаточно интересным занятием.

Кстати, на корпусе монитора сохранились мои рисунки, выполненные механическим карандашом:

Но что же такое GNU Hurd?

Как вы знаете (а может быть, и нет) - GNU Hurd представляет собой практически легендарный проект по разработке микроядерной операционной системы на основе микроядра GNU Mach, набора серверов, реализующих отдельные компоненты ОС (файловая подсистема, сетевая подсистема и т.д.) и так называемых трансляторов. Разработкой GNU Hurd занимается проект GNU - вот уже более 20 лет - и на основе него были предприняты в разное время попытки создания дистрибутивов как для широкого, так и сугубо "just for fun" использования. Одним из таких проектов и является Arch Hurd. Другим известным проектом является Debian/Hurd. Интересующиеся люди могут найти так же упоминание Gentoo Hurd и других проектов на основе GNU Hurd.

К сожалению, Gentoo Hurd не подаёт признаков жизни, а вот Arch Hurd и Debian/Hurd живут и развиваются. Более того, я встречал на просторах Интернета информацию, что команда, занимающаяся разработкой Debian/Hurd, собирается выпустить в 2012 году первый дистрибутив на основе GNU Hurd, пригодный для повседневного использования. Дабы внести ясность - "повседневного" в понимании обычных пользователей, а не гиков и прочих помешанных на компьютерах людей.

К слову, Hurd является единственным известным мне проектом, название которого представляет собой двойной рекурсивный акроним.

За подробной информацией о GNU Hurd и дистрибутивам на его основе я отправляю вас в Интернет - за ~20 лет там накопилось достаточно информации по этому проекту. Например, в английской Википедии есть обширная статья, есть так же и официальный сайт проекта.

О GNU Hurd более подробно я постараюсь рассказать в одной из следующих заметок.

2. Поставил CyanogenMod на свой телефон, вместо штатной прошивки. Тут особо нечего говорить. Всё работает - и работает, как надо. Модифицированная ОС предоставляет большие возможности для гибкой настройки параметров работы телефона. И на телефоне теперь есть нормальная консоль с root-правами.

3. Собирался поставить куда-нибудь тайловый оконный менеджер StumpWM и попробовать его в работе. Этим "куда-нибудь" оказался подвернувшийся под руку Arch Hurd. Увы, в репозиториях StumpWM не нашлось, а собрать его из исходников оказалось не такой уж и тривиальной задачей. Но я, тем не менее, не теряю оптимизма по поводу StumpWM. Много ли вы знаете менеджеров окон, написанных на языке Lisp? А StumpWM как раз написан на Лиспе, и представляет очень интересные возможности для пользователя, в том числе, возможность "на лету" менять параметры оконного менеджера.

Похоже, отчёт получился не такой уж и короткий, хотя в него не вошли такие вещи, как первые опыты по программированию микроконтроллера Arduino и работа над собственным программным проектом. О нём я тоже когда-нибудь расскажу.