вторник, 7 сентября 2010 г.

bash: Кто самый большой у нас в каталоге?

Проблема: пришло к концу место на разделе /home.
Задача: Найти замый жирный каталог

Решение:
du -m --max-depth=1 | sort -n

,где du - Disk Usage - утилита для определения занимаемого места файлом или каталогом.
параметры: 
-m выдавать информацию в мегабайтах, а то по умолчанию оно выдаем в понятном для человека виде - цифра и символ килобайт, мегабайт или гигабайт. Но так как сортировать будем не мы, а утилитка sort, то эти символы будут только мешать. В данном примере я указал в мегабайтах, т.к. размер раздела в гигабайтах, но можно указать и в килобайтах -k, и в байтах -b. В битах почемуто не хочет показывать :)
--max-depth=1  показывать файлы и каталоги только текущего уровня, не выдавая нагора все их внутренности

| перенаправляет результат работы du команде sort

sort сортирует данные полученные от du по первой колонке по убыванию по умолчанию.
параметры: 
-n указываем, что воспринимать первую колонку как цифры, а не как строки

Вот и все. Остальные параметры смотрите в манах

понедельник, 6 сентября 2010 г.

Установка и настройка Subversion на базе ALTLinux 5.1

Недавно была мной мне поставлена задача установить и настроить такую систему контроля версий как Subversion. Оказалось что всё не так очевидно и сразу поднимаемо. Вот и решил сделать заметочку на память.

Итак есть машина под ALTLinux 5.1. На ней и будем экспериментировать.

Установка и настройка сервера.

Первым делом скачиваем и устанавливаем сам сервер subversion.
В линуксе это легко и просто сделать через утилиту synaptic или в консоли с помощью apt-get
apt-get install subversion-server-common subversion-server-standalone

эти пакеты я доставил, т.к. кое-какие уже были установлены с разными IDE.
Все репозитарии должны находиться в папке /var/lib/subversion или хотя бы линк туда кинуть надо.
У меня раздел для хранения файлов находится в home. Поэтому под рутом создаем каталог для всех репозитариев SVNa.
mkdir /home/svn 

Создаём сам репозитарий с причудливым именем test02
svnadmin create /home/svn/test02

Эта комманда создаст всю структуру репозитария с базой, конфигами и прочей необходимой всячиной. Сделаем первое вливание. Како-нить файлик
svn import /var/www/apache2/html/ file:///home/cvsroot/ -m "initial import"

Теперь настроим сам репозитарий. Для этого нам нужен каталог /home/svn/test02/conf. В нем содержаться 3 файла
svnserve.conf - общие настройки репозитария
passwd   - пользователи репозиратия 
authz  - тут назначение доступа к каталогам в самом репозитарии

ВНИМАНИЕ! Все параметры в этих файлах не должны начинаться с пробелов. А то когда я просто раскоментировал то, что мне нужно, оно не заработало - ругалось на стороне клиента, что в такой-то строке svnserve.conf нехватает чего-то.

svnserve.conf 
Тут все настройки уже есть, их нужно только раскоментировать и по необходимости изменить. Нас интересует только секция general. В конце концов приведите ее к виду:
[general]
# Запрещаем доступ анонимным пользователям
anon-access = none
#Авторизированным разрешаем запись
auth-access = write

#Здесь указываем где хранится список пользователей и паролей. passwd - это имя файла
password-db = passwd

#Если вам нужно разделить доступ к каталогам внутри репозитария для пользователей, то нам нужна следующая опция. authz  - это имя файла.
authz-db = authz


#Здесь задаем имя репозитария. Это и будет идентификатором репозитария.
realm = test02

Не разкоментируйте authz-db = authz, если не собираетесь сразу менять назначать права на определённые каталоги разным пользователям в файле authz.  А то получаеться указали читать права из файла  authz, а в нем все ничего не назначено. Результат - Access denied для всех, даром, и пусть никто не уйдёт обиженным!

passwd
Тут определяем пользователей и пароли к ним. Пароли хранятся тут в открытом виде, но при грамотном администрировании это не проблема. Итак секция users.
[users]
boss = b0sP@ssw0rD
user01 = useR01P@ssw0rD
user02 = userR2P@ssw0rD


authz
Если вам нужно разделить права доступа к разным каталогам внутри репозитария, то поправьте этот файл. Зачем это нужно? Ну например, есть группа программстов они имеют право писать в девелопмент ветку, а релиз имеют право только читать. В нее иммеет право вносить изменения только бос. Ну и может быть, если это комерческая разработка, то наверняка тут будет еще и чать репозитария, к исходникам которой, никто не должен иметь доступа, кроме боса. Ну вот примерно так.
[groups]
# В этой секции определяем группы пользователей
developers = user01,user02
admins = bos

[test02:/]
# Название этой секции означает корень репозитария test02.
# В ней мы указываем, что все пользователи имеют достутп на чтение в корне. 
# Без этого у меня не давало доступа вообще ни к чему.
* = r

[test02:/branch]
# На папочку branch даем доступ на чтение и запись разработчикам и админам.
@developers = rw
@admins = rw

[test02:/trunk]
# На папочку trunk даем доступ на чтение разработчикам на запись админам.
@developers = r
@admins = rw

[test02:/secret]
# На папочку secret даем доступ на чтение только user01, на запись только bos. А все остальные не имеют права просматривать эту папку.
bos = rw
user01 = r
* =


Так как мы все эти действия делали от пользователя root, то и все правана папку /home/svn/test02 имеет только он. А репозитарий работает от пользователя subversion. Если вы ставили Subversion альтовый, то у вас уже есть  этот пользоватетль. Просто установите его владельцем папки /home/svn и всего её содержимого и дать права чтение/записть только ему, а всем остальным убрать даже чтение.(Вспомните незашифрованные пароли в /home/svn/test02/conf/passwd)
chown -R subversion /home/svn
chmod u=rwX  /home/svn
chmod oa-rwX  /home/svn

Теперь нужно запустить сервер subversion. В ALTLinux это делается простой коммандой
service svnserve start

И укажите ему стартовать при запуске системы
chkconfig svnserve on

Вроде всё. Если что забыл пишите.

суббота, 28 августа 2010 г.

Обустройство FireFox: Смена поисковика по умолчанию

Я как-то привык использовать Google поисковиком по умолчанию. А вот с некоторого времени Firefox пошла мода у всяких посисковых систем ставить себя по умолчанию. Это меня раздражало очень сильно. И наконец вот достало. Добрые люди подсказали как исправить ситуацию.

Шаг 1.Запускаем ФФ и в адресной строке пишем about:config
Жмем ентер и соглашаемся с тем, что если мы что-то поломаем, то это наши проблемы.

Шаг 2. Ищем ключ keyword.URL. Он содержит запрос к поисковому серверу
Шаг 3. Кликаем на нем и в открывшемся диалоговом окне заменяем строку поискового заспроса. См. в таблице 1
шаг 4. Жмем Ок и наслаждаемся


Таблица 1. Поисковые запросы
Googlehttp://www.google.com.ua/search?q=
Yandexhttp://yandex.ru/yandsearch?stype=first&clid=46511&text=
Mail.ruhttp://go.mail.ru/search?utf8in=1&fr=fftbUFix&q=

Все это выглядит так
Вот и всё.

пятница, 7 мая 2010 г.

Flash Player для linux x64

На данный момент официального релиза флеш плеера для 64 битных линуксов от  Adobe нет.
Есть какие то решения, но  они нормально не работают. Одни флешки играют другие нет.

Но погуглив тему нашел что релиза действительно нет. Но есть бета.
Ее скачать можно отсюда. Этот архив содержит только один файл libflashplayer.so
Теперь нужно подключить этот плагин к веб браузерам

Mozilla Firefox
  1. Распаковываем архив
  2. Создаем папку ~/.mozilla/plugins
  3. Копируем в ~/.mozilla/plugins плагин libflashplayer.so
  4. Перегружаем Firefox
Google Chrome
  1. Распаковываем архив
  2. Создаем папку /opt/google/chrome/plugins
  3. Копируем в /opt/google/chrome/plugins плагин libflashplayer.so
  4. Создаем символическую ссылку в папке /opt/google/chrome на плагин libflashplayer.so потому что в некоторых случаях пункт 3 не сработает
  5. Перегружаем Chrome
Для остальных браузеров пока не нужно было. 

суббота, 17 апреля 2010 г.

Шаблоны Гнома

Наверное каждый пользователь хоть раз в жизни пользовался контектным меню "Создать ..." для создания папки или какого либо документа. Я довольно часто и просто привык к этому. И у меня сложилось такое впечатление что это неотъемлемая часть графического рабочего стола.

Но когда я впервые начал серьезно пользоваться Гномом, то оказалось что в нем пунктик пустой. Нет там ничего. И это не в каком нибудь новом развивающемся дистрибутиве, у которого времени не хватает на разные мелочи. Это в Убунте!!

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

  1. Создать папку для шаблонов. Я сделал ~/.templates (точка вначале имени означает, что папка будет скрытая) 
  2. Прописать папку шаблонов в фале ~/.config/user-dirs.dirs в строке XDG_TEMPLATES_DIR="$HOME/.templates"
  3. Создать в папке ~/.templates необходимые шаблоны. Например, создаем в OpenOffice Writer новый пустой документ и сохраняем в нашу папку шаблонов с тем именем, которе хотите видеть в меню. И так для каждого нужного вам шаблона.


Всё довольно просто.

А теперь для тех, кто не совсем понимает что там за закорлючки в названии папок и файлов.

~ - сокращение, означает домашний каталог пользователя. Системой разворачивается  в строку /home/имяпользователя

.templates - точка в начале имени файла или папки означает, что это скрытый файл или скрытая папка. Поэтому если вы не нашли в своем каталоге папку ~/.config просто включите в меню Вид показывать скрытые файлы или нажмите Ctrl+H

Вот и всё

воскресенье, 4 апреля 2010 г.

Включение\выключение демонов

Чтобы не лазить ручками в /etc/init.d люди придумали более менее удобные утилиты для управления автоматическим стартом\остановкой демонов.
Я уже знаю целыйх две такие утилиты

chkconfig Это простая консольная програмулька, которая работает только с командной строкой. (ALTLinux)

sysv-rc-conf Это тоже консольная программа, но в ней уже есть довольно интуитивный интерфейс.  (Ubuntu)

Если найду еще какие. Буду сюда писать.

среда, 31 марта 2010 г.

Горячие клавиши Delphi


Человек, который не знает свой инструмент, что мартышка с гранатой.





ШоткатОписаниеВерсия IDE
EscapeНажате Escape во время перемещения контрола делает объектом перемещения родителя контролаDelphi 2 и выше
Shift + ClickAfter selecting control in form designer, click on it with Shift again to select top most parent FormDelphi 5  и выше
TabНа форме перемещает фокус по контролам. В Инспекторе Объектов переключает испектор в режим инктрементного поиска по названиям совйствDelphi 5  и выше
Ctrl + JОткрывает список шаблонов кодаDelphi 5  и выше
Ctrl + TУдаляет текст с позиции курсора до конца словаDelphi 5  и выше
Ctrl + EИнкрементный поискDelphi 5  и выше
Ctrl + YУдаляет текущую строкуDelphi 5  и выше
Ctrl + BВ редакторе вызывает окно буфера. The buffer window shows a list of all different tabs.Delphi 2007  и выше
Ctrl + Shift + GГенерирует новый GUID в позиции курсораDelphi 5  и выше
Ctrl + Shift + IСдвиг выделенного блока вправоDelphi 5  и выше
Ctrl + Shift + UСдвиг выделенного блока влевоDelphi 5  и выше
Ctrl + K + IСдвиг выделенного блока вправоDelphi 5  и выше
Ctrl + K + UСдвиг выделенного блока влевоDelphi 5  и выше
Ctrl + Shift + JВызов SyncEditBorland Developer Studio 2006
Ctrl + Shift + VАвтоматически объявить переменную в позиции курсораBorland Developer Studio 2006
Ctrl + Shift + YУдалить до конца строкиDelphi 5  и выше
Alt + [Соответствующая скобка впередDelphi 5  и выше
Alt + ]Соответствующая скобка назадDelphi 5  и выше
Alt + RightArrowBrowse forward (hotlink history)Delphi 6  и выше
Alt + LeftArrowBrowse backward (hotlink history)Delphi 6  и выше
Alt + UpArrowBrowse to symbol under editor cursor (invoke a hotlink and add it to the hotlink history)Borland Developer Studio 2006
F4Запустить программу до остановки в позиции курсораDelphi 2  и выше
F5Пставить/удалить точку остановаDelphi 2  и выше
F7Трассировка с входом в вызываемые процедуры и функцииDelphi 2 и выше
Shift - F7Трассировка заходя в каждую процедуру и перескакивание в каждое возникающее событиеDelphi 5 и выше
F8Трассировка без входа в вызываемые процедуры и функцииDelphi 2 и выше
Shift - F8Run until returnDelphi 5 и выше
F9Запустить программу в режиме отладкиDelphi 2 и выше
Ctrl + F2Прервать выполнение программыDelphi 5 и выше
Ctrl + F7Просмотр значений переменных и их изменениеDelphi 2005 и выше
Ctrl + F5Добавить в список переменных для просмотраDelphi 5 и выше
Ctrl + F12Список модулейDelphi 2 и выше
Alt + GПерейти к строке по номеруDelphi 2 и выше
Ctrl + O + GПерейти к строке по номеруDelphi 5 и выше
Ctrl + Shift + RСтарт\стоп записи макроDelphi 2 и выше
Ctrl + Shift + PЗапустить макроDelphi 2 и выше
Ctrl + SpacebarПоказать список методов, свойств объекта (после точки)Delphi 5 и выше
Ctrl + Shift + SpacebarПоказать список параметров функцииDelphi 5 и выше
Ctrl + EnterОткрыть файл с именем слова на котором курсор стоитDelphi 2 и выше
Ctrl + Shift + EnterНайти все ссылкиDelphi 2005 и выше
Ctrl + Shift + CЗакончить метод (если он описан – создать шаблон для реализации,если есть реализация – объявить метод)Delphi 5 и выше
Ctrl + Shift + UpArrowПереход от объявления процедуры к ее реализацииDelphi 5 и выше
Ctrl + Shift + DownArrowПереход от объявления процедуры к ее реализацииDelphi 5 и выше
Ctrl + Shift + 1 - 9Поставить\снять закладкуDelphi 2006 и выше
Ctrl + 1 - 9Перйти к закладкеDelphi 2006 и выше
Ctrl + Alt + F12Открыть список открытых файлов в правом верхнем углуBorland Developer Studio 2006
Ctrl + Alt + Mouse WheelПереход к предыдущей или следующей реализации метода в лексикографическом порядке в текущем модуле, либо в классе, который был ограничен Ctrl + Q + LBorland Developer Studio 2006
Ctrl + Alt + UpArrowПереход к предыдущей реализации метода в лексикографическом порядке в текущем модуле, либо в классе, который был ограничен Ctrl + Q + LBorland Developer Studio 2006
Ctrl + Alt + DownArrowПереход к следующей реализации метода в лексикографическом порядке в текущем модуле, либо в классе, который был ограничен Ctrl + Q + LBorland Developer Studio 2006
Ctrl + Alt + HomeПереход к лексически первой реализации метода в текущем модуле, либо в классе, который был ограничен Ctrl + Q + LBorland Developer Studio 2006
Ctrl + Alt + EndПереход к лексически последней реализации метода в текущем модуле, либо в классе, который был ограничен Ctrl + Q + LBorland Developer Studio 2006
Ctrl + Alt + PАктивировать палитру компонентов в режиме фильтра (наберите название и нажмите Enter чтобы бросить на форму)Delphi 2005 и выше
Ctrl + Alt + AВставить текущюю дату в позицию курсораsince BCB 4.0
Ctrl + /Закоментировать\раскоментировать, Ctrl + # для нордических (и возможно для других интернациональных) клавиатурDelphi 2005 и выше
Ctrl + Shift + TДобавить в список TodoDelphi 2005 и выше
Alt + F12Переключение отображения формы между тектовым и дезигн режимамиDelphi 5 и выше
Alt + F11Диалог модулейDelphi 5 и выше
Ctrl + F11Диалог открытия проектаDelphi 2005 и выше
Ctrl + Alt + F11Окно управления проектом Delphi 2005 и выше
F11Инспектор объектовDelphi 5 и выше
F12Переключение между редактором и дизайнеромDelphi 5 и выше
Alt + 0Список оконDelphi 2005 и выше
Shift + Alt + F11Окно структурыDelphi 2005 и выше
Ctrl + Shift + BВызывает непонятное окно с название "Buffer list"Delphi 5
Ctrl + Alt + BОкно точек остановаDelphi 5 и выше
Ctrl + Alt + SОкно стека вызововDelphi 5 и выше
Ctrl + Alt + WОкно просмотра трассируемых переменныхDelphi 5 и выше
Ctrl + Alt + LОкно локальных переменныDelphi 5 и выше
Ctrl + Alt + TОкно нитей (Threads)Delphi 7 и выше
Ctrl + Alt + FОкно FPUDelphi 2005(removed from Delphi 2006)
Ctrl + Alt + CОкно CPUDelphi 5 и выше
Ctrl + Alt + VОкно событий (Event)Delphi 5 и выше
Ctrl + Alt + MОкно модулейDelphi 2005 и выше
Shift + F12Окно формDelphi 5 и выше
Ctrl + Shift + AInvoke Add to uses clause(Find unit in Delphi 2006) window (Refactoring)Delphi 2005 и выше
Ctrl + Shift + F11Окно настроек проектаDelphi 2005 и выше
Ctrl + F9Компилировать проектDelphi 5 и выше
Shift + F9Собрать проектDelphi 5 и выше
Shift + F11Окно добавления в проектDelphi 5 и выше
Shift + Ctrl + F9Запустить без отладкиDelphi 2005 и выше
Ctrl + FПоискDelphi 3 и выше
Shift + Ctrl + FПоиск в файлахDelphi 3 и выше
Alt + F7/F8Предыдущий/следующий результат (для поиска в файлах и ошибок сборки)Delphi 7 и выше
Ctrl+K+EПривести выделенный текст к нижнему регистру и убрать выделениеDelphi 5 и выше
Ctrl+K+FПривести выделенный текст к верхнему регистру и убрать выделениеDelphi 5 и выше
Ctrl+K+OПривести выделенный текст к нижнему региструDelphi 5 и выше
Ctrl+K+NПривести выделенный текст к верхнему региструDelphi 5 и выше
Ctrl+O+UПереключить регистрDelphi 5 и выше
Ctrl+Shift+K+OВключить\выключить сворачивание кодаDelphi 2006 и выше
Ctrl+Shift+K+AСворачивание кода: Развернуть все блоки кодаDelphi 2006 и выше
Ctrl+Shift+K+EСворачивание кода: Свернуть все блоки кодаDelphi 2006 и выше
Ctrl+Shift+K+UСворачивание кода: Развернуть текущий блок кодаDelphi 2006 и выше
Ctrl+Shift+K+TСворачивание кода: Переключить текущий блок (expand & collapse)
Ctrl+Shift+K+RСворачивание кода: Свернуть все регионы {$region 'comment'}..{$endregion}Delphi 2006 и выше
Ctrl+Shift+K+PСворачивание кода: Свернуть вложенные процедуры
Ctrl+Shift+K+MСворачивание кода: Свернуть все методы
Ctrl+Shift+K+CСворачивание кода: Свернуть все классы
Ctrl+Shift+K+GСворачивание кода: Свернуть до главных групп [Interface/Implementation]Delphi 2006 и выше
Ctrl+Shift+K+NСворачивание кода: Свернуть Namespace/UnitDelphi 2006 и выше
Ctrl+TabПереключиться на следующий открытый файл в редактореDelphi 2006 и выше
Ctrl+Shift+TabПереключиться на передыдущий открытый файл в редактореDelphi 2006 и выше
Ctrl + K + PДиалог печати выделенногоDelphi 5 и выше
Ctrl + K + WЗаписать блок в файл (выделенный текст)Delphi 5 и выше
Ctrl + K + RПрочитать блок из файла и вставить текст в позици курсораDelphi 5 и выше
Ctrl + K + CCopies selected text at the end of the selectionDelphi 5 и выше
Ctrl + K + TВыелить слово в позиции курсораDelphi 5 и выше
Ctrl + O + LВыделить текущую  строкуDelphi 5 и выше
Ctrl + Q + LToggles between limiting the Ctrl+Alt navigation shortcuts to the current class, or limiting it to the current unitBorland Developer Studio 2006
Ctrl + Q + WПерейти на следующий елемен в окне сообщенийDelphi 5 и выше
Ctrl + F6Переключиться между исходником (.cpp) и заголовком (.h)BDS 2006 и выше, C++ Builder personality
Оригинал тут

Тестировал на Delphi 2007. Некоторые вещи не работали. Некотрые не понял так и оставил в английском варианте. Если вы найдете ошибки, неточности и т.п. пишите. 
Доделаем до конца.

Интервью с конструктором троичной ЭВМ «Сетунь»


Не знаю, насколько интересно читать мои статьи, посвященные истории становления компьютерной отрасли, одно я знаю точно: писать их во сто крат интереснее. В процессе длительных поисков исходной информации для очередной статьи и исследований всегда находится что-то такое, что заставляет воскликнуть: «Ух ты!», но, к сожалению, далеко не все может уместиться в журнале. После статьи о Льюисе Кэрролле и трехзначной логике я стал собирать материалы о реально созданной в СССР троичной ЭВМ «Сетунь», главным конструктором которой был Николай Петрович Брусенцов. Случайно мне попался его номер телефона. Без особой надежды -шутка сказать, человек 1925 года рождения, прошел войну — набрал номер. К моему удивлению, трубку взял сам Брусенцов. Узнав, что я звоню по поручению журнала Upgrade, он сказал: «А, как же, Upgrade, знаю. Там еще статья была про троичную логику какого-то Румянцева». Короче, познакомились, договорились о встрече. И вот я иду по коридору здания факультета вычислительной математики и кибернетики МГУ. Надо сказать, что мне нередко приходится бывать в разных ВУЗах, и самое мрачное впечатление на меня производит факультет ракетостроения МАИ -такого ужасающего разгрома я нигде не видел. В МГУ у меня тоже вечно как-то сжимается сердце. Повсюду следы того, что когда-то это был один из главных храмов мощного государства... Здесь что-то ремонтируют, укладывают полы — и то слава Богу. Подхожу к двери с надписью «Лаборатория ЭВМ» и лихорадочно вспоминаю, что мне, собственно, известно о человеке, к которому иду, и о его детище.

Год рождения — 1925, на войне с 1943 года, служил радистом в отделении разведки. В 1948 году поступил в Московский энергетический институт. Во второй половине 50-х годов в МГУ создал троичную ЭВМ «Сетунь», аналогов которой не существует и поныне. Всего было выпущено 50 таких машин. Элементарная единица информации — трит, страничная двухуровневая организация памяти, пороговая реализация трехзначной логики на электромагнитных элементах и все в таком духе. Открываю дверь, вхожу и... удивляюсь: никаких компьютеров. За столом годов, наверное, 60-х сидит скоромно одетый человек — простая рубашка и джинсы (компьютерная традиция, однако). Честно говоря, у меня были подготовлены разные дурацкие вопросы, типа того, какую ОС он использует и какой процессор в его компьютере. Брусенцов сразу задал другую тональность разговора, отчего мне с моими пигмейскими домашними заготовками стало немного неловко. И все же больше всего меня интересовало, почему он решил строить троичную машину, когда все вокруг делали двоичные?

Upgrade: Так, собственно, почему троичная машина?

Николай Брусенцов: Тогда задача была очень простая: мы должны были для МГУ получить машину М-2, которую сделали в лаборатории Брука. Но получилась неувязочка. На выборах академиков Сергей Львович Соболев -наш руководитель — проголосовал не за Брука, а за Лебедева. Брук обиделся и машину не дал. Я пришел к Соболеву и спросил: чем же я теперь буду заниматься? Он мне отвечает: «А давайте свою машину сделаем». Это было в конце 1955 года.

В то время транзисторы были еще недоступны, но было ясно, что машина не должна быть ламповой. Лампы имеют короткий срок службы, и машины на ламповой базе большую часть времени простаивали, потому что их вечно чинили. Ламповая машина работала в лучшем случае в течение нескольких часов, потом нужно было искать очередную неисправность. Юлий Израилевич Гутенмахер строил машину ЛЭМ-1 на феррит-диодных элементах. Мне пришла в голову мысль, что раз транзисторов нет, то можно попытаться делать ЭВМ на этих элементах. Соболев, которого все очень уважали, договорился, чтобы я побывал на стажировке у Гутенмахера. Я все детально изучил. Поскольку по образованию я радиоинженер, то сразу увидел: не все нужно делать так, как делают они. Главное, что я увидел: они используют пару сердечников под каждый бит — рабочий и компенсационный. И мне пришла в голову идея: а что, если заставить компенсационный сердечник работать. Тогда каждая ячейка становится трехзначной. В результате получилось, что в «Сетуни» количество сердечников было в семь раз меньше, чем в ЛЭМ-1. При этом «Сетунь» имела почти вдвое большую разрядность.

Тогда в МГУ как раз собирались получать большую машину «Стрела», создали вычислительный центр. Сергей Львович предусмотрел в нем отдел электроники — мой отдел. И мы должны были создать машину с нуля. Условия такие: машина должна быть небольшой, надежной, простой в освоении и использовании — короче, машина широкого назначения, для учебных заведений, лабораторий и т. п. Когда я выяснил, что можно воспользоваться троичной системой счисления, я сказал об этом Сергею Львовичу. Он полностью все одобрил. Уверен, что другой на его месте сказал бы: «Да ты что, все делают двоичные, а ты куда?»


UP: Он фактически дал полный карт-бланш?

Н. Б.: Да. В нашей лаборатории никогда не работало более двух десятков человек, считая девочек, которые мотали сердечники. А в начале у меня вообще было три-четыре сотрудника. Я должен сказать: для того, чтобы разрабатывать компьютеры, совершенно не нужны тысячные институты. Мы работали в компании с нашим программистским отделом, который возглавлял Е. А. Жоголев. То, что затем получило название «архитектура машины», создавалось нами вместе. Он предлагал программистские идеи, а я думал, насколько их можно реализовать на аппаратном уровне. В конечном итоге мы создали всего 24 машинных команды. Многие до сих пор в это не верят. И в дальнейшем архитектура «Сетуни» не подверглась никаким изменениям. Все серийные машины были архитектурно точно такими же, ну, может, слегка адаптированы под производство. Начав в 1956 году, мы уже через два с половиной года, в 1958 году, сделали образец, который работал. И вот тут-то началось нечто несуразное.

Осенью 1959 года нас пригласили на Коллегию Государственного Комитета Радиоэлектроники — ГКРЭ. И там мы узнали, что наша машина не нужна. И Госплан, и ВСНХ заняли отрицательную позицию. На Коллегии нас записали в черный список закрываемых разработок. Мы никогда никаких дополнительных денег на создание машины ни копейки не получали. Мы работали только за зарплату здесь, в МГУ. Использовали оборудование, списываемое заводами при снятии изделий с производства. Тем не менее, ради экономии средств нас решили закрыть.


UP: Но какое-то объяснение этому должно быть?

Н. Б.: Соболев спросил: «А вы хотя бы видели эту машину, ведь она уже существует?» Директор СКБ-245 В. В. Александров ответил: «Нам не надо ни видеть, ни знать — должна быть авторитетная бумага с печатями и подписями». После Коллегии Сергей Львович пошел в ЦК КПСС. Уже вечером к нам приехал сотрудник отдела ЦК Ф. К. Кочетов и привез с собой М. К. Сулима — начальника восьмого управления ГКРЭ. «Сетунь» нормально работала и производила необыкновенно хорошее впечатление. Обычно ведь как было: на выставке стоят машины, а сзади люди в белых халатах что-то там налаживают. У нас все работало как часы. Ну, понятно, после этого закрывать нас не стали, ведь машина уже сделана. Было принято решение провести ее межведомственные испытания. Испытания были проведены в апреле 1960 г. На них «Сетунь» показала 95% полезного времени. А в то время, если машина показывала 60%, это считалось очень хорошим результатом.


UP: А что значит термин «полезное время»?

Н. Б.: Вы включаете машину, прогоняете тесты, начинаете решать задачу, происходит сбой, все повторяете. И так до тех пор, пока задача не будет решена. Полезное время — это все то время, которое машина занята решением задач, а не тестово-наладочными работами.

После этих испытаний было принято постановление Совмина об организации серийного производства. Мы не очень удачно выбрали Казанский завод, лучше бы Астраханский. Астраханцы потом взялись делать элементы к этой машине и делали их превосходно. Элемент стоил 3,5 руб. Конечно, никаких высоких технологий там не было. ЭВМ «Сетунь» выпускали по 10-12 штук в год, то есть вроде бы выполняется постановление Совмина СССР, а на самом деле -нет. Притом, что было очень много заявок не только внутри страны, но и из-за рубежа. Во-первых, разумеется, из соцстран, но также и из таких стран, как США и Англия, где разработчикам было очень интересно посмотреть, что это за троичная штука.


UP: Американский аналог «Сетуни» — это PDP-8, на которой тинэйджер Билл Гейтс составлял свои первые программы?

Н. Б.: Да. Кстати, интересно сравнить «Сетунь» и PDP-8. Процессор PDP-8 — восьмибитный. У «Сетуни» процессор в пересчете на биты был 30-битным. PDP-8 стоила 20 тысяч долларов без всякой периферии, только один процессорный блок. Считалось, что это рекордно низкая цена.
Первый опытный эк­земпляр машины "Сетунь". При испы­таних она показала 95% полезного вре­мени, в то время как 60% уже считались хорошим результа­том.

«Сетунь» стоила 27,5 тысяч рублей со всей периферией. Чехи считали, что могли хорошо продавать «Сетунь» в соответствии с рыночными ценами и получать порядка полумиллиона долларов прибыли с каждой машины. По их приглашению я ездил в Чехословакию, мне показали завод, который планировалось использовать для производства машины «Сетунь», — «Зброевка Яна Швермы». Этот завод, кстати, во время войны делал самые лучшие пушки для немецкой армии, вроде нашей ЗИС-3. Завод меня просто восхитил. Они уже приготовили для «Сетуни» магнитные барабаны, печатающее устройство, устройство ввода. В общем, все было готово для производства «Сетуни». И они мне задают вопрос: «Ну, когда же, наконец, мы получим документацию? Нам обещали еще в декабре, а ее до сих пор нет». А я молиться готов был на такой завод — настоящая высокая культура производства.
ЭВМ "Сетунь-70" была стековой машиной, вроде отечественных "Эльбрусов", но имела два стека - команд и данных..
Когда я вернулся в СССР, меня вызвал референт Косыгина и попросил передать чешским товарищам, как тогда говорилось, что документацию на «Сетунь» они получат сразу после освоения крупносерийного производства этой машины в Советском Союзе. Но какое к черту крупносерийное производство, когда принимались все возможные меры, чтобы заморозить «Сетунь». Понятно, что тут не обошлось без ГКРЭ. Тот же самый Сулим был заместителем главного конструктора М-20. А с М-20 в КБ провозились 2,5 года, прежде чем передать ее на завод. Для «Сетуни» никакого КБ не дали — завод указан, езжайте и выпускайте. Хорошо В. М. Глушков предложил свое КБ за символическую плату в сто тысяч рублей, чтобы выпустить конструкторскую документацию.


UP: Сто тысяч рублей — это символическая плата?

Н. Б.: Ну конечно! Те 2,5 года, которые в КБ разрабатывали М-20, обошлись в десятки миллионов рублей, Что такое КБ того времени? Это несколько сот человек с высокой оплатой по первой категории и т. д.

Позднее я узнал, что чехам говорили: все равно мы эту машину снимем с производства, так что вы ее не заказывайте. Вот так все и закончилось с «Сетунью». В начале 70-х нас из главного корпуса ВЦ переселили на чердак. «Сетунь», несмотря на то, что она была полностью исправной и загруженной задачами, через пару лет была уничтожена — ее разрезали и выкинули на свалку.


UP: А «Сетунь-70»?

Н. Б.: К 100-летию со дня рождения Ленина все должны были делать всякие производственные подарки. Разумеется, и мы взяли обязательство к этой дате сделать «Сетунь-70». Но это уже совсем другая машина. Это была стековая машина, вроде наших «Эльбрусов». Но у «Эльбруса» был всего один стек — стек операндов. У PDP-11 также был всего один стек — процедурный. А «Сетунь-70» имела два стека — команд и операндов. Надо сказать, что эти стеки мы сделали независимо от PDP-11, которая появилась позднее. Когда Дейкстра выступил с идеей структурного программирования, мы увидели, что сделали машину как раз для реализации его идеи. Программирование на «Сетунь-70» было даже не структурированное, а структурирующее. Программы получались легко читаемыми и осваиваемыми, легко модифицированными. Главное, что программы не подвергались отладке, а делалась так называемая контрольная сборка. После того как программу сверху вниз написали, ее проходили снизу вверх. В хороших КБ всегда так делается — типичный конструкторский прием. После этого программа оказывается, как правило, безошибочной. Позднее «Сетунь-70» была эмулирована на двоичных машинах в форме диалоговой системы структурного программирования ДССП.


UP: И все-таки, Николай Петрович, кому мешала «Сетунь»?

Н. Б.: Людям с косным мышлением, которые, тем не менее, занимали высокие руководящие посты. Как показала практика, «Сетунь» была работоспособна без всякого сервиса. Те, кто душил ЭВМ «Сетунь», раскидали ее по всей стране.


UP: А смысл?

Н. Б.: Видимо, для того, чтобы удаленность от сервисного центра и разброс климатических зон максимально выявили конструктивные недочеты. Но вся штука в том, что их практически не было. «Сетунь» была очень простой машиной. Я, как инженер, считаю, что простота вещи — это главное ее качество. В природе все то, что удалось ей выработать в простой форме, оказывается самым надежным, самым устойчивым. География обитания «Сетуни»: Якутск, Иркутск, Красноярск, Душанбе, Ашхабад, Махачкала, Калининград и т. д. Причем часто она попадала к людям, которые впервые видели цифровую технику. И несмотря на это, практически всюду машина нашла существенное применение. В Якутске «Сетунь» была в астрофизическом институте. У них была какая-то сложная задача, которую они в течение двух лет не могли поставить на большой машине ^Урал-2». Потом кто-то сказал:

«Давайте попробуем на «Сетуни». Все решили, что это шутка. Однако через полтора месяца задача была решена. Дело в том, что «Сетунь» была естественной машиной. Там нет этого идиотского дополнительного кода для отрицательных чисел. И положительные, и отрицательные числа задаются естественно. Потом всего 24 команды. Освоить такую машину и программировать в машинном коде было ничуть не сложнее, чем, скажем, осваивать «Алгол» или «Фортран».


UP: Но программист фактически должен был работать в пространстве трехзначной логики?

Н. Б.: А что значит трехзначная логика? Знак числа — это какая функция? Трехзначная! Число может быть положительным, отрицательным, а может быть равным нулю. Это совершенно естественно, и это понятней, чем то, что мы имеем в двоичных машинах, когда, чтобы разобраться, какого знака результат, нужно сделать два шага. Но, строго говоря, в самой «Сетуни» логическая часть была не особенно развита. Правда, та трехзначная логика, которая была в «Сетуни», с избытком покрывала то, что было в двоичных машинах. Но аристотелевских суждений там, конечно, не было. Мы в то время собственно логикой не занимались. Я уже после создания «Сетуни» стал понимать, что логику как таковую не знаю, стал читать книги. Оказалось, что у меня были предшественники. И у них, кстати, путь тоже не был устлан розами. Еще в XIII веке был такой Раймунд Луллий (1235-1315 гг.). Он создал логическую машину, правда, на бумаге, в виде круговых диаграмм с секторами. Эта машина была троичной. Этого Луллия забили камнями. Был Вильям Оккам, он тоже предложил трехзначную логику, значительно более реальную, чем та, которую изобрел Ян Лукасевич в 1920 году. Далее всех продвинулся Льюис Кэрролл. Он нигде не говорит, что у него трехзначная логика. Но диаграммы Кэрролла из его «Символической логики», кроме красных и белых фишек, допускают еще пустые клетки. Это и есть трехзначная логика. Кэрролл на Аристотеля не ссылается и свою силлогистику создал как реализацию логики естественного языка. Поразительно, что Гарднер — популяризатор информатики — охарактеризовал Кэрролла посредственным логиком и посредственным математиком. И это притом, что Кэрролл в сущности создал систему — у него были очень незначительные неувязки, — решающую задачу, над которой бились логики последних полутора столетий.


UP: Николай Петрович, после статьи в журнале Upgrade я получал письма, в которых читатели интересовались, как именно удалось реализовать троичный компьютер? Было даже письмо, где автор выразил сомнение в том, что такой компьютер когда-нибудь существовал.

Н. Б.: Буквально на днях я получил письмо из США, где также спрашивают, как удалось реализовать троичную логику? К нам постоянно приходят по e-mail письма с запросами. Надо сказать, что наибольший интерес проявляют такие страны, как Бангладеш, Пакистан, Индия. У меня такое ощущение, что там сейчас главный центр компьютерного развития. Но на сегодня все попытки повторить троичную машину не удаются. Причина не технологическая — все-таки по сравнению с тем периодом технологии ушли далеко вперед. Дело в другом: людям, оболваненным двузначной логикой, войти в трехзначную логику не дано. По традиции считается, что та логика, которую мы сегодня исповедуем, — аристотелевская логика. Это совершенно неверно. Дело в том, что аристотелевская логика трехзначная. Естественно, что трехзначная логика в двузначную вписаться не может. Конечно, можно симулировать: парами битов задать триты, но не в этом дело.

Та логика, которую сегодня называют математической, основана на нелепости. Допустил ее Гильберт. В его совместной с Аккерманом книге «Основы теоретической логики» сказано так: «Мы отклоняемся от Аристотеля в истолковании суждения «Все А суть В». По Аристотелю, это суждение может быть истинным, то есть выполняется только лишь в случае, когда существуют какие-то А. Мы считаем это нецелесообразным». Что в результате получилось? В результате получилось то, что выполняется «Все А суть В» и в то же время не выполняется «Некоторые А суть В». Это нелепость! Вместо аристотелевского следования, которое во всех естественных языках выражается словами «Все А суть В», — и Аристотель очень точно это в своей системе воспроизвел, — они подсунули так называемую материальную импликацию. Дело в том, что суждение «Все А суть В» у Аристотеля трехзначно, в двузначной логике оно не выразимо. В результате возникли так называемые парадоксы материальной импликации, с которыми вот уже сто лет как логики пытаются справиться.

В 1918 году Кэрролл предложил строгую импликацию, потом Аккерман разработал исчисление сильной импликации, была предложена релевантная импликация, и, тем не менее, логика остается без естественного содержательного следования. То есть то, что называется следованием логике, не соответствует тому, как мы это понимаем. Обычно говорят: не соответствует нашей интуиции. Но это очень мягко сказано. На самом деле оно не соответствует не интуиции, а тому, как вещи связаны между собой в том мире, в котором мы живем.

Аристотель не признавал закона исключенного третьего. Даже речи о нем не было. Гильберт считал, что аристотелевское понимание суждения «Все А суть В» не нужно принимать, потому что это неприемлемо с точки зрения математических применений. А абсурд приемлем? Вся история говорит о том, что этот абсурд существует.

Вот почему столько раз тщетно логику пытались ввести в школы? Казалось бы, ведь числовую алгебру уже даже в начальной школе осваивают, а булеву алгебру освоить не могут. Дело в том, что двузначная логика противоестественна. Вместо того чтобы изучение логики развивало интеллект человека, оно его подавляет. У нас в МГУ на философском факультете, да и на нашем факультете, изучают математическую логику, и что вы думаете — люди от этого становятся умнее? Они вызубривают доказательства теорем, сдают экзамены и все.

Единственное адекватное применение двузначной логики -двоичные цифровые схемы. Но это особый мир двоичных компьютеров, и только в нем эти правила работают, не требуя понимания. Я поинтересовался у студентов: что такое конъюнкция? А мне в ответ: да это такая табличка, в которой единичка и три нуля... Ну, а по смыслу что это такое? Переведите на русский язык латинское слово «конъюнкция». Никто не может. То есть эту логику усваивают чисто формально, в точном соответствии с ее названием — формальная логика. При синтезе схем возможности ограничены. Минимизировать произвольную схему наука не в состоянии. В трехзначной логике минимизация осуществляется, а в двузначной универсального алгоритма нет.

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

Сейчас двузначную логику в школу ввести удалось под названием «информатика». Я должен сказать, что после этого школа уже не будет воспитывать таких людей, как наши ученые прошлого века. Почему в то время было так много творческих ученых? Где-то в 1936 году в образовании был примерно такой же бедлам, как наступил сейчас в России. Потом, по-видимому, сам Сталин обратил на это внимание. Кстати, Сталин был поразительно трудолюбивым в плане обучения человеком. Сохранилось его письмо к жене, в котором он, находясь на отдыхе, просит ее прислать ему учебник по электротехнике. Он понимал, что все нужно знать «в натуре», а не в виде каких-то теоретических схем. Тогда в школу были возвращены учебники Киселева по алгебре и геометрии. Киселевские учебники — это евклидова математика. А Евклид — это математик с философией Аристотеля, и, судя по всему, он Аристотеля понимал верно.

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


UP: Николай Петрович, вы создали уникальный компьютер, который, возможно, опередил время. Но всю свою жизнь вынуждены были преодолевать невероятное сопротивление, косность бюрократической машины и видеть, как ваше детище уничтожается. С другой стороны, скажем, в США, тот же Стив Джобе, который в гараже сделал свою первую и довольно убогую персоналку, сегодня мультимиллионер. По-человечески вам не обидно?

Н. Б.: Да нет. Я понимаю, что, увы, так устроено человечество. И, в общем, оно обречено, если ничего не изменится. К сожалению, все попытки как-то исправить ситуацию, сделать ее более соответствующей естественному порядку вещей проваливаются. Давайте посмотрим: действительно ли мы так много имеем от того, что компьютеризировали этот мир. Теперь компьютеры везде. Причем система устроена таким образом, что каждые три-четыре года нужно покупать новый компьютер и новый софт.


UP:...делать upgrade.

Н. Б.: Да, делать upgrade. Но почему? Да потому, что в самом начале заложены неверные принципы. Если вы в основу заложите простые, естественные принципы, то и все развитие происходит просто, логично, естественно.

Я не обижен судьбой. Не в деньгах счастье, тем более не в миллиардах. Когда все сведено к деньгам, жизнь людей утрачивает смысл, становится абсурдом. На войне не могло быть радости от того, что грохнувший вблизи разрыв сразил не тебя, а находящегося рядом твоего товарища. Радостью, счастьем было наше духовное единство. То труднейшее, отмеченное беспросветностью утрат и страданий время озарено вместе с тем не ярким, но вечным светом бескорыстного согласия людей. «Но только крепче мы дружили под перекрестным артогнем». Похоже, что такое согласие возникает у людей, объединенных общностью цели, увлеченных реализацией рациональной идеи.

Мы еще долго разговаривали, даже после того, как пленка в моем диктофоне закончилась. Это, знаете ли, как машина времени — окно в неведомую эпоху начальной компьютеризации. Сегодня Брусенцов по-прежнему продолжает выполнять свою миссию. На базе ЭВМ «Сетунь-70» еще четверть века назад была создана обучающая система «Наставник», которая задумывалась как система, контролирующая реальное усвоение студентом тех знаний, которые даются ему в течение семестра. Результаты были показаны весьма впечатляющие. Сегодня у Брусенцова есть идеи дальнейшего совершенствования этой системы с использованием мобильных телефонов, которые имеются практически у каждого студента. Есть мысли о создании троичного процессора, но проблема заключается в том, что сейчас в России нет предприятий, которые могли бы выполнить его заказ. Они этого уже не умеют делать — разучились.

История — маятник. Сегодня мы находимся, возможно, в самой нижней точке его траектории. Но очень хочется верить, что время брусенцовых в России еще наступит. Как было сказано в одной старой книге: «Достаточно Энергетического центра, чтобы началась Эра Чудес».
Промыщленный образец ЭВМ «Сетунь», ВДНХ, 1961 г. В начвле 70-х годов исправную и загруженную задачами машину выкинули на свалку.

UPGRADE #33 (175) август 2004
Скопипащено отсюда