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

Панель выбора файлов, Александр Вячеславович Фролов

Среди стандартных диалоговых панелей , для которых в библиотеке MFC создан специальный класс, есть панели для работы с файловой системой – Open и Save As (рис. 4.4). Диалоговая панель Open позволяет выбрать один или несколько файлов, расположенных на дисках компьютера, и открыть их для дальнейшего использования. Диалоговая панель Save As позволяет выбрать имя файла для записи в него документа.

Для управления диалоговыми панелями Open и Save As предназначен один единственный класс – CFileDialog . Рассмотрим конструктор класса CFileDialog более подробно:

CFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL);

Объекты класса CFileDialog представляют диалоговую панель Open или Save As в зависимости от параметра bOpenFileDialog. Если параметр bOpenFileDialog содержит значение TRUE, тогда создается объект, управляющий диалоговой панелью Open, а если FALSE – диалоговой панелью Save As.

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

Так, чтобы создать объект класса CFileDialog, представляющий стандартную диалоговую панель для открытия файлов (mFileOpen), и объект, представляющий стандартную диалоговую панель для сохранения файлов (mFileSaveAs), можно воспользоваться следующими вызовами конструктора класса:

// Объект mFileOpen представляет стандартную

// диалоговую панель Open

CFileDialog mFileOpen(TRUE);

// Объект mFileOpen представляет диалоговую

// панель SaveAs

CFileDialog mFileSaveAs(TRUE);

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

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

Вы можете изменить внешний вид и некоторые другие характеристики стандартных диалоговых панелей для открытия и сохранения файлов с помощью параметра dwFlags. В него записывается комбинация флагов, управляющих различными характеристиками этих панелей. Назначение данного параметра соответствует полю Flags структуры OPENFILENAME. Описание структуры OPENFILENAME вы можете найти в 13 томе “Библиотеки системного программиста”.

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

Вы можете указать список фильтров для диалоговых панелей Open и Save As через параметр lpszFilter. Одновременно можно указать несколько фильтров. Каждый фильтр задается двумя строками – строкой, содержащей имя фильтра, и строкой, в которой паречислены соответствующие ему расширения имен файлов. Если одному типу файлов соответствуют несколько расширений, они разделяются символом ;. Строка, содержашая имя фильтра, отделяется от строки с расширениями файлов символом |. Если используются несколько фильтров, то они также отделяются друг от друга символом |.

Диалоговые панели, представленные объектами класса CFileDialog, могут иметь или не иметь родительского окна. Чтобы указать родительское окно, передайте конструктору CFileDialog указатель на него через параметр pParentWnd.

Рис. 4.4. Стандартная диалоговая панель Save As


Скорый суд и неотвратимость наказания | Юрий Гороховский

Заметив нарушения, вы должны приостановить процесс кодирования, пока нарушители не исправят ситуацию. Чем дольше нарушения будут игнорироваться, тем выше вероятность того, что код придется отправить прямиком на помойку[74]. Когда разработчики обнаруживают халтуру своих коллег, они невольно опускаются до того же уровня – это человеческая природа, ничего не поделаешь. Если владение оружием предполагает употребление обоих рук, то грамотное проведение критических обзоров кода требует пресечения деятельности нарушителей за счет авторитета руководителя.

Писать и читать материалы о критических обзорах кода не составляет труда; на практике же все оказывается значительно сложнее. Всем нам известны факторы, влияющие на качество кода и превращающие процесс сопровождения в хроническую головную боль. Новички в деле руководства и лидерства нередко испытывают сложности, пытаясь перенести теоретические представления о своих действиях в практическую плоскость. Сопротивление происходит от неуверенности в своих лидерских качествах, и технические навыки, какими бы впечатляющими они ни были, в данном случае отходят на второй план. Одно дело обсуждать проблемы кодирования в компании приятелей, и совсем другое – решать их с позиции руководителя. Если все сотрудники осознают слабости кода, они ожидают проявления вашей инициативы. Попытайтесь предвидеть трудности и внушить себе необходимость адекватного реагирования на них. О том, что нужно делать при выявлении проблем, я рассказал предостаточно. Имейте в виду, что прочтения этих строк совершенно недостаточно для превращения нужно в сделаю. Чтобы это случилось, что-то должно измениться в вашем характере. Именно об этом я и намерен поговорить в оставшихся разделах главы.


Андрей Киселев, 3.4.2. Просмотр списка ip-адресов с помощью утилиты ip

[ahu@home ahu]$ ip address show

1: lo: <LOOPBACK,UP> mtu 3924 qdisc noqueue

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo

2: dummy: <BROADCAST,NOARP> mtu 1500 qdisc noop

    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff

3: eth0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1400 qdisc pfifo_fast qlen 100

    link/ether 48:54:e8:2a:47:16 brd ff:ff:ff:ff:ff:ff

    inet 10.0.0.1/8 brd 10.255.255.255 scope global eth0

4: eth1: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen 100

    link/ether 00:e0:4c:39:24:78 brd ff:ff:ff:ff:ff:ff

3764: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1492 qdisc pfifo_fast qlen 10

    link/ppp

    inet 212.64.94.251 peer 212.64.94.1/32 scope global ppp0

Этот листинг содержит более подробную информацию. Здесь показаны все IP-адреса, и каким интерфейсам они принадлежат. Здесь "inet" соответствует термину "Internet (IPv4)". Существует целый ряд типов сетевых адресов, но нас они пока не интересуют.

Взглянем поближе на интерфейс eth0. Из листинга видно, что ему назначен адрес "inet" — 10.0.0.1/8, где "/8" определяет число бит, соответствующих адресу сети. Таким образом, для адресации хостов в сети у нас остается 32 – 8 = 24 бита, что соответствует адресу сети – 10.0.0.0 и маске сети – 255.0.0.0.

Это говорит о том, что любой хост в этой сети, например 10.250.3.13, будет непосредственно доступен через наш интерфейс с IP-адресом 10.0.0.1.

Для ppp0 применима та же концепция, хотя числа в IP-адресе отличаются. Ему присвоен адрес — 212.64.94.251, без маски сети. Это означает, что он обслуживает соединение типа "точка-точка" (point-to-point), и что каждый адрес, за исключением 212.64.94.251, является удаленным. Но и это еще не все. Для этого интерфейса указывается адрес другого конца соединения — 212.64.94.1. Здесь число "/32" говорит о том, что это конкретный IP-адрес и он не содержит адреса сети.

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

Вы наверняка обратили внимание на слово "qdisc". Оно обозначает дисциплину обработки очереди (Queueing Discipline). Позднее мы коснемся этой темы подробнее.


четверг, 25 ноября 2010 г.

Кевин Митник. Вступление

Перевод: Yarlan Zey (yarlan@pisem.net)


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

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

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

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

Важно отметить, что если это не оговорено специально, все истории из книги полностью вымышлены.

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

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

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


Значения маски АСЕ / А. Г. Гузикевич

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

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

• Прочитайте документацию с описанием функции открытия интересующего вас объекта. Флаги доступа имеют те же значения, что и флаги, используемые в маске АСЕ. Так, функция OpenMutex использует флаги MUTEX_ALL_ACCESS и SYNCHRONIZE (второй из указанных флагов требуется для любого объекта, который может использоваться с функциями WaitForSingleObject или WaitForMultipleObjects). Другие объекты, например процессы, имеют множество других дополнительных флагов доступа.

• Полезная в этом отношении информация может содержаться также в документации по функциям "создания" объектов.

• Проверьте, не содержатся ли флаги, применимые к интересующему вас объекту, в заголовочных файлах WINNT.H и WINBASE.Н.


среда, 17 ноября 2010 г.

Запуск интерпретатора Перл. Владимир Викторович Маслов

Синтаксис:

perl [ключи] файл аргументы

Перед стартом Перл ищет скрипт (программу) в следующем порядке:

1. В командной строке если указан ключ '-e'

2. Содержимое файла указанного в командной строке. В первой строке можно указывать #!/usr/bin/perl для «автоматического» запуска скрипта.

3. Стандартный ввод/вывод если не указан файл или аргументы содержащие имя файла. Для передачи аргументов скрипту из стандартного потока имя файла в командной строке обозначается символом '-'.

В методах 1 и 2 Перл сканирует строки начиная с первой если не указан ключ '-x', в противном случае началом программы считается строка с символами '#!' в начале и содержащая слово 'perl'.

Концом программы считается строка '__END__'.

В строке с '#!' можно указывать и ключи. Например '#!/bin/perl -d' для отладки программ.

После «обнаружения» скрипта Перл компилирует его целиком во внутреннее представление. Если обнаруживаются ошибки то выполнение прекращается. Если ошибок нет он выполняется. Если скрипт заканчивается без команд exit() или die() то по умолчанию выполняется команда exit(0) обозначающая нормальное завершение программы.

Ключи:

-Oцифры

Код символа-разделителя записей. По умолчанию \0.

-a

Включает режим автоматического разделения (split) переменной $_ в массив $F. Применяется с ключами -n и -p.

-c

Выполняется синтаксическая проверка скрипта и выход без запуска.

-d

Запуск в режиме интерактивной отладки.

-Dчисло или Dсписок

Установить флаги отладки Перл. Например -d14 проследить как Перл исполняет вашу программу.

1 p Синтаксический разбор

2 s Состояние стека

4 l Состояние стека имен

8 t Трассировка исполнения

16 o Создание оператора узла

32 c Строковое/числовое преобразование

64 p Вывод команды препроцессора для -P

128 m Распределение памяти

256 f Обработка формата

512 r Синтаксический разбор регулярных выражений

1024 x Дамп синтаксического дерева

2048 u Проверка защиты

4096 L «Утечка» памяти

8192 H Дамп хеша

16384 X Распределение scratchpad

32768 D Очистка

-e команда

Выполнение скрипта из одной строки указанного в командной строке.

-F шаблон

Указывает шаблон разделения в режиме работы с ключом -a

-iрасширение

Применяется для резервной копии файла обрабатываемого оператором '<>'. Оригинал хранится в файле с тем же именем что и исходный, но с указанным расширением.

Пример:

perl -p -i.old -e «s/рядовой/ефрейтор/» file

– Поменять все слова «рядовой» на «ефрейтор» в файле file

а оригинал записать в файле file.old

-Iдиректория

Директория includ- файлов для С препроцессора. Применяется с ключом –P

по умолчанию это /usr/include и /usr/lib/perl.

-lчисло


Автоматическая обработка символа конца строки.

Работает в двух случаях.

1. Отбрасывает последний символ читаемых строк для режимов -n и -p

2. Присваивает указанное значение переменной $\. Таким образом к концу каждой строки выводимой оператором print добавляется этот символ.

-n

Зацикливает скрипт и последовательно обрабатывает файлы указанные в командной строке. Позволяет создавать команды подобные sed или awk.

Операторы BEGIN и END дают возможность делать начальные и конечные установки. Содержимое файлов не выводится.

-p

То же что и -n но печатает обрабатываемые строки файлов.

-P

Предварительная обработко препроцессором языка С. Будьте внимательны и не применяйте в комментариях слова 'if', 'else' или 'define' т.к. это команды С – препроцессора.

-s

Включение режима обработки ключей командной строки запуска скрипта.

Все аргументы с символом '-' в начале, считаются ключом и переменным с таким же именем присваивается значение true.

-S


Использование системной переменной PATH для поиска скрипта.

Данный ключ применяется в системах не воспринимающих последовательность "#!" в начале скрипта для указания интерпретатора.

-T

Режим проверки «дыр» в защите. Обычно это нужно для программ работающих в режиме повышенной привелегии (setuid, setguid). Желательно для CGI скриптов.

-u

Принудительный дамп памяти после компиляции скрипта. Этот дамп можно потом использовать для создания исполняемого файла с помощью программы undump.

-U

Разрешение выполнять опасные операции. Например стереть директорию или выполнять явно не закрытую программу.

-v

Вывод номера версии Перл.

-w

Вывод имен переменных используемых только один раз, имен скаляров используемых до их определения, имен переопределяемых подпрограмм, ссылок на неопределенный указатели файлов, попыток записи в файлы открытых только на «чтение», употребление не коретных записей чисел, использование массивов как скаляров, рекурсия более 100 уровней.

-x директория

Режим запуска скрипта вставленного в файл содержащий обычный текст. Началом скрипта считаестся строка с символами '#!' в начале и содержащия слово perl. Концом – строка с '__END__'

Указанная директория становится текущей в момент исполнения. Если необходимо читать последующие строки то это лучше делать через указатель файла DATA.


Госстандарт России / 9.2.5 Контроль изменений и трассируемость

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

а) контроль изменений должен обеспечить целостность элементов конфигурации и базовых линий и защиту их от некорректных изменений;

б) контроль изменений должен гарантировать, что каждое изменение элемента конфигурации учтено в изменении идентификации конфигурации;

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

Примечание — Общепризнанно, что ранняя реализация контроля изменений помогает управлению и организации работ в процессах жизненного цикла ПО;

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

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

Работы по контролю изменений следует сопровождать работами по просмотру изменений.


Валентин Викторович Красник / Опоры

Вопрос 218. Какие типы опор следует применять для ВЛ?

Ответ. Следует применять следующие типы опор:

1) промежуточные, устанавливаемые на прямых участках трассы ВЛ. Эти опоры в нормальных режимах работы не должны воспринимать усилий, направленных вдоль ВЛ;

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

3) угловые, устанавливаемые в местах изменения направления трассы ВЛ. Эти опоры при нормальных режимах работы должны воспринимать результирующую нагрузку от тяжения проводов смежных пролетов. Угловые опоры могут быть промежуточными и анекрного типа;

4) концевые, устанавливаемые в начале и конце ВЛ, а также в местах, ограничивающих кабельные вставки. Они являются опорами анкерного типа и должны воспринимать в нормальных режимах работы ВЛ одностороннее тяжение всех проводов.

Опоры, на которых выполняются ответвления от ВЛ, называются ответвительными; опоры, на которых выполняется пересечение ВЛ разных направлений или пересечение ВЛ с инженерными сооружениями, называются перекрестными. Эти опоры могут быть всех указанных типов (п.2.4.50).

Вопрос 219. Возможность установки каких аппаратов должны обеспечивать конструкции опор?

Ответ. Должны обеспечивать возможность установки:

светильников уличного освещения всех типов;

концевых кабельных муфт;

защитных аппаратов;

секционирующих и коммутационных аппаратов;

шкафов и щитков для подключения электроприемников (п. 2.4.51).

Вопрос 220. Какими могут быть опоры (по исполнению) независимо от их типа?

Ответ. Могут быть свободностоящими, с подкосами или оттяжками.

Оттяжки опор могут прикрепляться к анкерам, установленным в земле, или к каменным, кирпичным, железобетонным и металлическим элементам зданий и сооружений. Сечение оттяжек определяется расчетом; оно должно быть не менее 25 м2 (п. 2.4.52).

Вопрос 221. На какие нагрузки должны быть рассчитаны промежуточные опоры?

Ответ. Должны быть рассчитаны на следующие сочетания нагрузок:

одновременное воздействие поперечной ветровой нагрузки на провода, свободные или покрытые гололедом, и на конструкцию опоры, а также нагрузки от тяжения проводов ответвлений к вводам, свободных от гололеда или частично покрытых гололедом;

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

на условную расчетную нагрузку, равную 1,5 кН, приложенную к вершине опоры и направленную вдоль оси ВЛ (п. 2.4.53).

Вопрос 222. На какую нагрузку должны быть рассчитаны угловые опоры (промежуточные и анкерные)?

Ответ. Должны быть рассчитаны на результирующую нагрузку от тяжения проводов и ветровую нагрузку на провода и конструкцию опоры (п. 2.4.53).

Вопрос 223. На какую нагрузку должны быть рассчитаны анкерные опоры?

Ответ. Должны быть рассчитаны на разность тяжения проводов смежных пролетов и поперечную нагрузку от давления ветра при гололеде и без гололеда на провода и конструкцию опоры. За наименьшее значение разности тяжения следует принимать 50 % наибольшего значения одностороннего тяжения всех проводов (п. 2.4.53).

Вопрос 224. На какую нагрузку должны быть рассчитаны концевые и ответвительные опоры?

Ответ. Концевые опоры должны быть рассчитаны на одностороннее тяжение всех проводов.

Ответвительные опоры рассчитываются на результирующую нагрузку от тяжения всех проводов (п. 2.4.53).


суббота, 6 ноября 2010 г.

Ситуация использования - Джесс Либерти

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

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

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

Таким образом, определение ситуаций использования включает:

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

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

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

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


Владимир Верстак. Blend (Смешиваемый)

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

Для доступа к материалу Blend (Смешиваемый) выполните следующие действия.

1. Щелкните на кнопке Type (Тип) в окне Material Editor (Редактор материалов) для вызова окна диалога Material/Map Browser (Окно выбора материалов и карт).

2. Выберите из списка материал Blend (Смешиваемый). В результате откроется окно диалога, в котором необходимо указать: Discard old material? (Удалить старый материал?) или Keep old material as sub-material? (Оставить старый материал в качестве компонента?).

3. Щелкните на кнопке OK. В результате в области свитков окна Material Editor (Редактор материалов) появится свиток Blend Basic Parameters (Основные параметры смешивания) (рис. 3.15).

Рис. 3.15. Свиток Blend Basic Parameters (Основные параметры смешивания)


4. Настройте параметры смешивания материала.

1) Щелкнув на одной из кнопок Material 1 (Материал 1) или Material 2 (Материал 2), выберите новый материал либо перейдите в режим редактирования существующего. В качестве материалов могут выступать как стандартные материалы, так и сложные составные.

2) Установите или снимите флажки, расположенные справа от кнопок материалов, для активизации или деактивизации материалов.

3) Установите переключатель Interactive (Интерактивный) напротив того материала, который должен быть показан в окне проекции.

4) Нажав кнопку Mask (Маска), укажите в открывшемся окне Material/Map Browser (Окно выбора материалов и карт) материал или файл растрового изображения, который будет использоваться для смешивания двух компонентов материала.

5) В счетчике Mix Amount (Доля в смеси) определите значение смешивания материалов-компонентов в диапазоне от 0 до 100. При значении, равном 0, будет виден только Material 1 (Материал 1), а при 100 – только Material 2 (Материал 2).

6) Задайте плавность перехода одного материала в другой с помощью элементов области Mixing curve (Кривая смешивания).


Е. М. Миркес / Лекция 9. Описание нейронных сетей

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

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

Нейронные сети можно классифицировать по разным признакам. Для описания нейронных сетей в данной главе существенной является классификация по типу времени функционирования сетей. По этому признаку сети можно разбить на три класса.

1. Сети с непрерывным временем.

2. Сети с дискретным асинхронным временем.

3. Сети с дискретным временем, функционирующие синхронно.

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


вторник, 2 ноября 2010 г.

Вопросы и ответы | Джеффри П. Мак-Манус

Что означает "создание схемы" в контексте XML?

В контексте баз данных "создание схемы" означает создание документа с определениями объектов и сущностей. В контексте XML это понятие может быть расширено и охватывать другие сведения, например определение поля без неопределенных значений (NOT NULL) в таблице базы данных.

Что произойдет, если для названия элемента в XML-документе использовать уже зарезервированное имя HTML-элемента, например title?

Для устранения такой двусмысленности и предназначены пространства имен. Можно создать XML-документ с применением XSLT и использовать в нем уже зарезервированное имя HTML-элемента, например title, для одного из полей таблицы. Именно для этого придется использовать собственное пространство имен.

С помощью строки кода <xmlns:b=http://myMachine.com> можно теперь использовать префикс b: для любого XML-элемента, даже если его имя совпадает с каким-то уже зарезервированным именем HTML-элемента.

В таком случае строки <b:title> и <title> будут относиться к совершенно разным сущностям. Единственным строгим условием является предварительное объявление используемого пространства имен, например в самом начале документа.


воскресенье, 31 октября 2010 г.

Сканер / В. В. Мельниченко

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

Независимо от типа выбранного сканера, принцип его работы неизменен: специальный датчик просматривает изображение документа и преобразовывает его в цифровую форму. Полученный файл можно редактировать графическими программами, если это фотография, или специальным программным обеспечением для распознавания текста (OCR — Optical Character Recognition — Оптическое распознавание символов).

Наиболее распространены планшетные сканеры. Именно из-за своей универсальности: сканирование от слайда до толстого журнала. Существуют даже объемные (3D) сканеры. Достаточно удобная работа — как с ксероксом: положил оригинал, мышкой щелкнул, получил в копию.

Цветное сканирование — это не что иное, как сканирование в черно-белом режиме с различными фильтрами (красный, зеленый, синий) за каждый проход (устаревшие модели). Современные модели выполняют сканирование и сложение цветов за один проход. Самые последние модели имеют глубину цвета в 48 бит (для внутренней обработки изображения, так как в ПК изображение все равно передается с глубиной цвета не более 32 бит). Для домашнего или обычного офисного использования глубины цвета в 32–36 бит более чем достаточно.

Рис. 2.18. Обыкновенные планшетные сканеры

Также нужно обратить внимание на разрешающую способность. Очень часто в рекламе указываются цифры — 4800 dpi или даже 9600 dpi. При попытке уточнить вы услышите, что это максимальное разрешение, с которым способен работать сканер. На самом деле настоящее оптическое разрешение много ниже, а вам «подсовывают» данные интерполяции. Дурят нашего брата. Оптическое разрешение распространенных моделей не превышает 600 dpi. И только специализированные изделия (слайд-сканеры или модели для высококачественной допечатной обработки) могут иметь настоящие 2400 dpi или выше.


Полезные советы - Николай Мациевский

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

Прежде чем обращаться к элементу, нужно убедиться, что он существует.

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

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

Следует избегать частого перебора элементов. Каждая операция (особенно getElementesByTagName) довольно ресурсоемка. Стоит кэшировать наиболее часто используемые элементы (подробнее о кэшировании в JavaScript рассказывается чуть далее в этой главе).

Не стоит проверять атрибуты, которых нет (если мы знаем верстку и знаем JavaScript-код, то в нем не должны появиться неизвестные атрибуты).

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


четверг, 28 октября 2010 г.

86. СПОСОБЫ ПУСКА ДВИГАТЕЛЕЙ - Ольга Александровна Косарева

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

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

Уменьшить напряжение, подводимое к двигателю, а вместе с этим уменьшить пусковой ток двигателя можно также при помощи автотрансформатора. При пуске автотрансформаторы понижают напряжение на 50–80 %.

Одним из главных недостатков синхронных двигателей является сложность их пуска в ход. Пуск синхронных двигателей может быть осуществлен при помощи вспомогательного пускового двигателя или путем асинхронного пуска.

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

Сложность пуска и необходимость вспомогательного двигателя являются существенными недостатками этого способа пуска синхронных двигателей. Поэтому в настоящее время он применяется редко.

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

При включении напряжения трехфазной сети в обмотку статора синхронного двигателя возникает вращающееся магнитное поле, которое, пересекая ко-роткозамкнутую обмотку, заложенную в полюсных наконечниках ротора, индуктирует в ней токи. Эти токи, взаимодействуя с вращающим полем статора, приведут ротор во вращение. При достижении ротором большего числа оборотов рубильник переключается так, чтобы обмотку ротора включить в сеть постоянного напряжения. Недостатком асинхронного пуска является большой пусковой ток (в 5–7 раз больше рабочего тока).


Макс Каневский, Информационный SMS-канал

ТЕРМИН, ИСПОЛЬЗУЕМЫЙ В ДАННОМ РАЗДЕЛЕ:

Информационный SMS-канал – служба распространения текстовых сообщений среди абонентов сетей сотовой связи в формате SMS.


Первый SMS-канал в преддверии выборов в Государственную думу в декабре 2003 года организовала сотовая сеть «Билайн» в Калининграде. Подписка предусматривала возможность получения новостей от предвыборного штаба кандидатов. Наиболее активным избирателям предлагали отправлять наказы и жалобы кандидату с помощью SMS. С тех пор подвиг «Билайн» никто из операторов не повторял.

СОЗДАНИЕ SMS-КАНАЛА

В рамках работы канала существует не менее двух вариантов доставки информации избирателю:

1. С помощью традиционной SMS-рассылки.

2. С помощью размещения канала в меню SIM-карты услуг оператора сотовой связи. Мы уже описывали этот формат ранее в разделе, посвященном организации SMS-платежей.

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

Структура канала может варьироваться аналогично содержанию интернет-сайта – от одного раздела до нескольких. Можно присвоить собственный код каждому разделу в рамках канала – себестоимость канала от количества разделов практически не меняется. Например, партия «За любовь!», кандидаты которой одновременно участвуют в избирательной кампании по нескольким округам, может открыть вариант персональной подписки на новости каждого кандидата. В таком случае абонент, отправивший SMS со словом ZAL, получит еще одно сообщение, в котором ему будет предложено выбрать новости интересующего его кандидата.


ПРИМЕР СТРУКТУРЫ SMS-КАНАЛА


Пример SMS на экране телефона.

Избиратель может оформить подписку на новости по следующим разделам:

– Новости партии (код подписки part).

– Новости лидера (код подписки lider).

– Новости из Энска – в разделе размещаются новости о кандидате Иванове И.И., баллотирующемся от партии в данном городе (код подписки ensk).

– Новости из Эмска – в разделе размещаются новости о кандидате Петрове И.И., баллотирующемся от партии в данном городе (код подписки emsk), и т. п.

– Все новости (код подписки vse).

Чтобы о канале узнали избиратели, кандидаты размещают сервисный номер для подписки на своих предвыборных информационно-агитационных материалах. Например, на агитационных материалах партии «За любовь!» можно разместить: «Отправь SMS ZAL или ЗАЛ на номер ****, чтобы получать новости партии». Если у кандидата устойчивое финансовое положение, можно организовать подписку таким образом, что все входящие SMS-сообщения для избирателя будут бесплатными. Такой аттракцион неслыханной щедрости обойдется кандидату в среднем не более чем в 300 у. е. за десять тысяч сообщений.

Предполагаемые результаты.

Практические:

– распространение информации о кандидате формирует у избирателя соответствующий образ народного избранника;

– распространение результатов exit-polls в день голосования.

Аналитические:

– оценка готовности избирателей к получению в дальнейшем политических новостей в рамках избирательной кампании.

Примечание

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


Анализ CIL-кода - А. Г. Сивак

Напомним, что компоновочный блок не содержит специфических для платформы инструкций, а содержит независимый от платформы CIL-код. Когда среда выполнения .NET загружает компоновочный блок в память, этот CIL-код компилируется (с помощью JIT-компилятора) в инструкции, понятные для данной платформы. Если выполнить двойной щелчок на строке метода TurboBoost() класса SportsCar, с помощью ildasm.exe откроется новое окно, в котором будут показаны CIL-инструкции.

.method public hidebysig virtual instance void TurboBoost() cil managed {

 // Code size 17 (0x11)

 .maxstack 2

 IL_0000: ldstr "Ramming speed!"

 IL_0005: ldstr "Faster is better…"

 IL_000a: call valuetype [System.Windows.Forms] System.Windows.Forms.DialogResult [System.Windows.Forms] System.Windows.Forms.MessageBox::Show(string, string)

 IL_000f: pop

 IL_0010: ret

} // end of method SportsCar::TurboBoost

Обратите внимание на то, что для идентификации метода, определенного типом SportsCar, используется лексема .method. Члены-переменные, определенные типом, обозначаются лексемой .field. Напомним, что класс Car определяет набор защищенных данных, например, таких как currSpeed.

.field family int 16 currSpeed

Свойства обозначены лексемой.property. Этот CIL-код описывает открытое свойство CurrSpeed (заметьте, что характеристики read/write свойства обозначаются лексемами .get и .set).

.property instance int16 CurrSpeed() {

 .get instance int16 CarLibrary.Car::get_CurrSpeed()

 .set instance void CarLibrary.Car::set_CurrSpeed(int16)

} // end of property Car::CurrSpeed


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

ПИСЬМОНОСЕЦ: Письмоносец | Журнал «Компьютерра»

Здраствуйте, уважаемая Редакция КТ!

Спасибо за журнал.

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

Сюда же относятся и другие проблемы: мелкий шрифт и узкие внутренние поля — сделайте шрифт покрупнее, сделайте узкими внешние поля! Пожалуйста!

Кроме того, есть ощущение, что из-за «формата» страдает наполнение — выделенное под статью (раздел) пространство наполняется текстом, а не смыслом. Крупные заголовки, подзаголовки, подподзаголовки, увеличенный межстрочный интервал, часто бессмысленные (как по размеру, так и по содержанию) иллюстрации и вставки, повторяющие текст самой статьи… Для тугих на ухо повторяете, что ли?!

«Читайте в следующем номере» — потерянная страница: случайный читатель вряд ли соблазниться, а постоянные в любом случае купят следующий номер.

проDigi — тихий ужас в стиле недавно появившегося какого-то Гагнидзе (еле сдержался, чтобы не поменять пару букв). Судя по фотографии Вильянова — отъевшегося и высокомерного, — гл. ред. единственный, кому эта макулатура приносит удовлетворение.

Не претендую «на истину в последней инстанции», всё — ИМХО.

С уважением,

Денис Роев

***

День добрый, «Компьютерра».

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

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

А последний (662) номер совсем огорчил, ни про Живчика 8800, ни про RTM-релиз Висты. Зато дважды про подставку от Логитеч. Не терзайте себя, посвятите ей целый номер.

Продиги долой, берегите лес, кому надо, тот в Инете обзоры трубок нароет, гораздо более осмысленные.

Бёрда Киви, Дона Педалиса и особенно Ванаха — в каждый номер! Пока вы единственный журнал, который обращен к мозгу, а не к кошельку читателя.

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

Vektor

***

Доброго времени, господа!

Выйдет ли «Компьютерра» 46(666), или всё же номер будет изменен? С одной стороны, многие боятся «числа зверя», с другой — может, был бы смысл развеять сей миф выпуском великолепного номера журнала.

Удачи, Александр

***

Доброго дня!

По мне, ProDigi только полезную площадь занимает своими бездарными статьями, плюс к этому, он очень часто просто не адекватен в отношении событий внешнего мира. По-моему ему просто пора в деревню на пенсию с пожизненным запретом публиковаться в прессе. Также, как ваш большой поклонник (скоро бывший) скажу, что новым дизайном и контентом вы просто добили Nерру, пока еще покупаю, но уже осознаю на 100%, что это просто инерция.

Руль Trust GM-3500R получает Денис Роев.




В. В. Мельниченко / Настройка WinRAR

Как и любая программа, разработанная под Windows, WinRAR может предложить вам настройки, установленные по умолчанию. Но для улучшения работы некоторые из них желательно изменить. Если вы — пользователь ленивый, то можете сразу приступать к работе (см. параграф "Основные функции WinRAR" далее). Вам же будет хуже! (Это не угроза, а напутствие на дорожку.)

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

Тщательно прицелившись мышью, попадите на пункт меню Параметры и выберите Установки.… Будьте бдительны: ломать — не строить.

В открывшемся окне посмотрите на ярлыки вкладок. Их шесть — не больше и не меньше: Общие, Архивация, Пути, Список файлов, Просмотр и Интеграция. На каждой из них можно изменить немалое количество настроек.

На вкладке Общие (рис. 18.3) вы можете настроить WinRAR на работу в системе. Выберите Низкий приоритет, если компьютер слегка слабоват для обработки больших задач. ("Windows — система многозадачная: «глючит» и работает одновременно." — Народная мудрость)

Рис. 18.3. Настройка общих параметров работы WinRAR в системе

Если когда-либо вам понадобится история функций, выполненных программой, отметьте опцию Вести историю архивов. При желании можно просматривать Историю в полях ввода.

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

Настройку Интерфейса производить особо не стоит. Если будете работать с архивами в фоновом режиме, то можно Включить звуковые сигналы. Если вам интересно наблюдать за текстами или почитывать комментарии, включите опцию Показывать комментарий архива. Кто владеет информацией, тот владеет миром!

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

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

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

На вкладке Пути настройки лучше не изменять. Ведь именно их программа определила автоматически. Функцию Использовать при работе со сменными дисками постарайтесь "руками не трогать".

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

В подгруппе Выбор решите, как вам удобнее работать с файлами и архивами: Открывать по одному щелчку, как в Интернет-ссылках (последние версии операционных систем поддерживают такую настройку), или Открывать по двум щелчкам (старый «дедовский» способ, когда один щелчок — выделение, а второй - выполнение "приказа"). Имена файлов - выберите, в каком порядке вы хотели бы видеть отображаемую информацию.

На вкладке Просмотр настройте Средства просмотра и встроенное средство просмотра. Иначе, попытавшись просмотреть какой-либо файл средствами WinRAR без предварительных настроек, можно получить полную «абракадабру». Можно назначить и Внешнюю программу просмотра для архивных файлов.

Вкладка Интеграция знакома вам из процесса установки. Именно она была выведена последней перед завершением установки. И если вы отметили необходимые вам функции, то скорее жмите OK, и смело приступайте к созданию архивов.

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


среда, 13 октября 2010 г.

Фокус 2-й — нарезные снаряды - Александр Борисович Широкорад

Как уже говорилось, в 50–70-х годах XIX века были изготовлены десятки систем, снаряды которых имели нарезы или выступы. В советских артиллерийских системах для нарезных снарядов устройство канала мало отличалось от обычных каналов образца 1877 г., основным отличием была несколько большая глубина нарезов. И опять, как было с полигональными снарядами, Артуправление РККА не ограничилось испытанием одного образца, а решило сразу вводить нарезные снаряды во всех типах орудий. Чтобы представить объем испытаний нарезных снарядов, я, как и в случае с полигональными снарядами, буду рассказывать о них не в хронологическом порядке, а по мере возрастания калибра.

В 1933–1936 гг. на НИАПе проводили стрельбы из 122-мм пушек обр. 1931 г. нарезными снарядами. Для этого был изготовлен ствол с крутизной нарезки 12 калибров, глубиной нарезов 3,0 мм и объемом каморы 9,889 дм3. Стрельба велась нарезными снарядами с глубиной нарезки 3,0 мм.


Таблица 17. Данные нарезных снарядов

При стрельбе 10 июня 1936 г. снарядом чертежа 6105 при заряде 5,0 кг достигнута начальная скорость 550 м/с и дальность 14 300 м (при угле возвышения +35°).

Однако наряду с преимуществом в весе нарезные снаряды имели и ряд недостатков, так как при увеличении длины снаряда сверх 5 калибров резко падала кучность. Заряжание пушек нарезными снарядами производилось весьма «хитрым» способом (чтобы нарезы снаряда входили в нарезы канала), что приводило к существенному уменьшению скорострельности.

В 1937 г. опыты со 122-мм нарезными снарядами были прекращены.

В 1932 г. из 152-мм пушек обр. 1910 и 1910/1930 гг. впервые были произведены стрельбы нарезными снарядами, разработанными в АНИИ.[39] Стволы имели штатную крутизну нарезки (25 калибров).


Таблица 18. Данные стрельбы 11 декабря 1933 г. из 152-мм пушки обр. 1910/1930 г. нарезными снарядами с зарядом 6,0 кг пороха марки 15/7

Кучность нарезных снарядов оказалась неудовлетворительной. Заряжание нарезными снарядами производилось досыльным способом, то есть с помощью особых приспособлений, что терпимо на НИАПе, но неудобно в полевых условиях. По результатам испытаний конструкторы АНИИ решили увеличить крутизну нарезки для увеличения кучности стрельбы, (рис. 5.2).


Рис. 5.2. Нарезной 37-мм снаряд.


В апреле 1933 г. заводу «Баррикады» был заказан ствол 152-мм пушки обр. 1910/1930 г. с крутой глубокой нарезкой. Ствол был предназначен для опытов с беспоясковыми (нарезными) снарядами.


Данные опытного ствола

Калибр, мм — 152.4

Крутизна нарезов, клб — 12

Число нарезов — 36

Глубина нареза, мм — 2,8

Ширина нареза, мм — 9,0

Ширина поля, мм — 4,23


Такой ствол был изготовлен и испытан в сентябре 1934 г. Для стрельбы из этого ствола заводу № 73 было заказано 100 нарезных снарядов чертежа 5996 и 100 снарядов чертежа 5719.


Таблица 19. Данные нарезных снарядов

Таблица 20. Результаты стрельб нарезными снарядами

Перспектива увеличения веса 152-мм снарядов в 2–3 раза за счет введения нарезных (беспоясковых) снарядов была крайне соблазнительна для начальства, но добиться удовлетворительной кучности тяжелыми и длинными снарядами так и не удалось. Заряжание нарезными снарядами тоже осталось неудобным.

14 июля1933 г. в Артуправлении был рассмотрен проект ствола 152-мм пушки Б-10 с углубленными нарезами под нарезные и поясковые снаряды, разработанные АНИИ. Заводу «Большевик» был дан заказ перенарезать ствол № 1 к 1 сентября 1933 г.

На стволе № 1 нарезы углубили с 1,5 мм до 2,8 мм, а канал ствола для удобства заряжания сделали нарезным. Крутизна нарезов была изменена с 25 до 20 калибров. Объем зарядной каморы не изменился. Ствол был приспособлен для стрельбы нарезными снарядами.

Однако особых успехов при стрельбе нарезными снарядами достичь не удалось. Мало того, уменьшение диаметра каморы против обыкновенного привело к удлинению каморы и сокращению пути снаряда в канале на 2,5 калибра, что сделало затруднительным подбор зарядов под давление 2850 кг/см2 и начальную скорость 880 м/с при снаряде весом 49 кг. Начальная скорость получена лишь 862–865 м/с при давлении в канале 2965–3024 кг/см2.

Не обошлось и без попытки перевода на нарезные снаряды основного советского орудия большой мощности — 203-мм гаубицы Б-4. В 1934 г. завод «Большевик» получил заказ на опытный ствол Б-4 для стрельбы нарезными снарядами. Крутизна нарезов ствола постоянная — 12 калибров, число нарезов — 48, глубина нареза — 2 м, ширина нареза — 9 мм, ширина поля — 4,29 мм.

Изготовление опытного ствола затянулось, и стрельбы из него начались лишь в конце 1936 г. В декабре 1936 года на НИАПе из опытного ствола Б-4 велись стрельбы нарезными снарядами весом 172,5–174,4 кг, длиной 6,25 калибра, снаряженные 22,2 кг взрывчатого вещества. На снарядах имелись нарезы глубиной 1,9 мм.


Таблица 21. Результаты стрельбы 30 декабря 1936 г.

* Дальность приведенная (т. е. приведенная к нормальным атмосферным условиям).


Положительных результатов при стрельбе нарезными снарядами добиться не удалось. А 25 марта 1938 г. Артуправление предложило НИАПу «отправить на завод „Большевик“ не позднее 10.04.1938 г. опытный ствол Б-4 № 128 с крутизной нарезки 12 клб для исправления нарезов». Дальнейшая судьба этого ствола неизвестна.


воскресенье, 10 октября 2010 г.

А. Алексашин / Тестирование в рамках контракта

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

Что это означает на практике? Рассмотрим подпрограмму извлечения квадратного корня, с которой мы впервые встретились в разделе "ППК и аварийное завершение работы программы". Ее контракт довольно прост:

require:

   argument >=0

ensure:

  abs((result*result)–argument) < epsilon

Он указывает на моменты, нуждающиеся в проверке:

• Передать отрицательный аргумент и удостовериться в том, что он отклонен

• Передать аргумент, равный нулю, и удостовериться в том, что он принят (это граничное значение)

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

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

public void testValue(double num, double expected) {

double result = 0.0;

try {    // We may throw a

result = mySqrt(num); // precondition exception

}

catch (Throwable e) {

if (num<0.0) // If input is «0, then

   Return; // we're expecting the

Else // exception, otherwise

   Assert(false); // force a test failure

}

assert(Math.abs(expected-result)<epsilon);

}

Затем мы можем вызвать эту подпрограмму, чтобы проверить нашу функцию излечения квадратного корня:

TestValue(-4.0, 0.0);

TestValue(0.0, 0.0);

TestValue(2.0, 1.4142135624);

TestValue(64.0, 8.0);

TestValue(1.0e7, 3162.2776602);

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

Предположим, есть модуль А, использующий модули LinkedList и Sort. Мы осуществляем тестирование в следующем порядке:

1. Полностью тестируем контракт модуля LinkedList.

2. Полностью тестируем контракт модуля Sort.

3. Тестируем контракт модуля А, который полагается на другие контракты, но не раскрывает их напрямую.

При этом способе тестирования вы вначале обязаны проводить тестирование подкомпонентов.

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

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


Подсказка 48: Проектируйте с учетом тестирования


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


А. Г. Сивак | Абсолютные имена типов

Строго говоря, при объявлении типа, определенного во внешнем пространстве имен, в C# не обязательно использовать ключевое слово using. Можно использовать полное, или абсолютное имя типа, которое, как следует из главы 1, состоит из имени типа с добавленным префиксом пространства имен, определяющего данный тип.

// Заметьте, что здесь не используется 'using MyShapes'.

using System;

namespace MyApp {

 class ShapeTester {

  static void Main(string[] args) {

   MyShapes.Hexagon h = new MyShapes.Hexagon();

   MyShapes.Circle с = new MyShapes.Circle();

   MyShapes.Square s = new MyShapes.Square();

  }

 }

}

Обычно нет необходимости использовать полное имя. Это только увеличивает объем ввода с клавиатуры, но не дает никаких преимуществ ни с точки зрения размеров программного кода, ни с точки зрения производительности программы. На самом деле в программном коде CIL типы всегда указываются с полным именем. С этой точки зрения ключевое слово using в C# просто экономит время при наборе программного кода.

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

// Другое пространство форм…

using System;

namespace My3DShapes {

 // Трехмерный класс Circle.

 class circle{}

 // Трехмерный класс Hexagon.

 class Hexagon{}

 // Трехмерный класс Square.

 class Square{}

}

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

// Множество неоднозначностей!

using System;

using MyShapes;

using My3DShapes;

namespace MyApp {

 class ShapeTester {

  static void Main(string[] args) {

   // На какое пространство имен ссылаются?

   Hexagon b = new Hexagon(); // Ошибка компиляции!

   Circle с = new Circle(); // Ошибка компиляции!

   Square s = new Square(); // Ошибка компиляции!

  }

 }

}

Неоднозначность разрешится, если использовать абсолютное имя типа

// Теперь неоднозначность ликвидирована.

static void Main(string[] args) {

 Му3DShapes.Hexagon h = new My3DShapes.Hexagon();

 My3DShapes.Circle с = new My3DShrapes.Circle();

 MyShapes.Square s = new MyShapes.Square();

}


вторник, 5 октября 2010 г.

H. M. Ручко / Асинхронные и синхронные процессы

Асинхронные процессы выполняются независимо один от другого. Это означает, что процесс А будет выполняться до конца безотносительно к процессу В. Между асинхронными процессами могут быть прямые родственные («родитель-сын») отношения, а могут и не быть. Если процесс А создает процесс В, они оба могут выполняться независимо, но в некоторый момент родитель должен получить статус завершения сыновнего процесса. Если между процессами нет прямых родственных отношений, у них может быть общий родитель.

Асинхронные процессы могут выполняться последовательно, параллельно или с перекрытием. Эти сценарии изображены на рис. 3.12. В ситуации 1 до самого конца выполняется процесс А, затем процесс В и процесс С выполняются до самого конца. Это и есть последовательное выполнение процессов. В ситуации 2 процессы выполняются одновременно. Процессы А и В - активные процессы. Во время выполнения процесса А процесс В находится в состоянии ожидания. В течение некоторого интервала времени оба процесса пребывают в ждущем режиме. Затем процесс В «просыпается», причем раньше процесса А, а через некоторое время «просыпается» и процесс А, и теперь оба процесса выполняются одновременно. Эта ситуация показывает, что асинхронные процессы могут выполняться одновременно только в течение определенных интервалов времени. В ситуации 3 выполнение процессов А и В перекрывается.


Рис. 3.12. Возможные сценарии асинхронных и синхронных процессов

Асинхронные процессы могут совместно использовать такие ресурсы, как файлы или память. Это может потребовать (или не потребовать) синхронизации или взаимодействия при разделении ресурсов. Если процессы выполняются последовательно (ситуация 1), то они не потребуют никакой синхронизации. Например, все три процесса, А, В и С, могут разделять некоторую глобальную переменную. Процесс А (перед тем как завершиться) записывает значение в эту переменную, затем процесс В во время своего выполнения считывает данные, хранимые в этой переменной и (перед тем как завершиться) записывает в нее «свое» значение. Затем во время своего выполнения процесс С считывает данные из этой переменной. Но в ситуациях 2 и 3 процессы могут попытаться одновременно модифицировать эту переменную, поэтому здесь не обойтись без синхронизации доступа к ней.

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


суббота, 2 октября 2010 г.

Инструменты проектирования Windows Forms / А. Г. Сивак

Windows Forms является средством создания приложений, возможности которого мы рассмотрим позже. А сейчас, чтобы продолжить рассмотрение SharpDevelop, щелкните на ярлыке вкладки Design внизу окна программного кода MainForm.cs. Откроется интегрированное окно проектирования Windows Forms,

С помощью элементов из раздела Windows Forms в окне Tools можно построить графический интерфейс (GUI) для создаваемой формы. Для примера поместите один элемент типа Button (кнопка) в свою главную форму, сначала выбрав пиктограмму Button, а затем щелкнув в окне проектирования. Для изменения вида любого элемента, можно использовать окно Properties (Свойства), которое активизируется с помощью выбора View>Properties из меню (рис. 2.15). Выберите Button из раскрывающегося списка этого окна и укажите нужные параметры для свойств этого типа (например, BackСolor или Text).

Рис. 2.15. Окно свойств

В этом же окне можно указать параметры обработки событий соответствующего элемента графического интерфейса. Для этого сначала щелкните на пиктограмме с изображением молнии (вверху окна свойств), а затем выберите из раскрывающегося списка графический элемент, с которым вы хотите работать (в данном случае это Button). Наконец, задайте правила обработки события Click (щелчок), напечатав имя метода, который должен вызываться при каждом щелчке пользователя на данной кнопке (рис. 2.16).

Рис. 2.16. Установка правил обработки событий в окне свойств

После нажатия клавиши ‹Enter› SharpDevelop сгенерирует программный код заглушки для вашего нового метода. Для данного примера добавите в программу обработки события следующий программный код.

void ButtonClicked(object sender, System.EventArgs e) {

 // Поместим в заголовок формы новое сообщение.

 this.Text = "Прекратите щелкать на моей кнопке!";

}

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

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


Где и как нужно покупать подержанный ноутбук / Виктор Гольцман

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

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

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

Покупая б/у ноутбук в фирме, всегда нужно оговаривать возможность возврата денег. Иначе в случае обнаружения дефектов (например, «битых» секторов на жестком диске) у вас могут забрать компьютер на несколько недель, мотивируя это гарантийным ремонтом, а в это время вы будете сидеть без ноутбука. К тому же будет заканчиваться гарантия на находящийся в ремонте ноутбук. К минусам покупки мобильного компьютера в фирме можно также отнести чуть более высокую цену, нежели заявленная на ту же модель в частных объявлениях. Этим фирмам ведь тоже надо заработать.

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

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

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

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

Расспросите о ноутбуке как можно больше. Если человек им пользовался, то расскажет о нем все, что вам необходимо знать. Конечно, вы можете попасть на посредника – человека, постоянно занимающегося куплей/продажей подержанных комплектующих. Однако и в этом случае, как и фирма, прежде чем продать, он обычно тестирует компьютер и знает о нем многое. В крайнем случае попросите телефон бывшего владельца или других клиентов и не поленитесь связаться с ними.

Наличие на винчестере персональной информации: документов, писем электронной почты и т. п. – может указывать на то, что вы стали обладателем ворованного ноутбука. Обычно пользователи, решившие продать ноутбук, чистят винчестер, удаляя с него все свои личные документы, фотографии и т. д. Кому захочется, чтобы его фотографии и личная переписка стали объектом чужого любопытства? Однако такие данные позволяют быстро выйти на истинного владельца компьютера.

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


четверг, 30 сентября 2010 г.

Opera / Дмитрий Макарский

Достоинства:

• достаточно удобный интерфейс браузера (http://opera.com/) (рис. 1.4), не перегруженный элементами управления и в то же время оснащенный всем необходимым;

Рис. 1.4. Браузер Opera


• как и в Mozilla Firefox, в Opera блокируются нежелательные всплывающие окна, а также есть поддержка многостраничного режима и строка поиска;

• возможность масштабирования веб-страниц;

• поддержка виджетов – небольших программных модулей, порой достаточно интересных, иногда – совершенно бесполезных.

Недостатки:

• отсутствие встроенной справки – справочная информация загружается с сайта программы;

• отсутствие поддержки плагинов;

• отсутствие поддержки ActiveX – технологии, позволяющей приложениям взаимодействовать между собой; этот недостаток одновременно является и достоинством, так как использование именно этой технологии в Internet Explorer сделало его достаточно уязвимым для злоумышленников.

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

Кроме вышеперечисленных популярных программ для просмотра веб-страниц есть и другие, менее распространенные:

• Netscape Navigator – основан на коде Mozilla Firefox;

• Maxthon – по сути, программная оболочка для Internet Explorer;

• Safari – основан на коде Konqueror;

• Konqueror – средство управления файлами в операционных системах семейства Linux, выполняющий также роль браузера;

• Galeon – еще один браузер для Linux, характеризующийся простотой и взявший в качестве девиза слова: the web, only the web – веб и только веб;

• Epiphany – проект, в свое время отделившийся от Galeon и поэтому имеющий с ним много общего;

• Kazehakase – японская разработка для Linux;

• Charon – браузер для экзотической операционной системы Inferno;

• Arachne – полноэкранный графический браузер для операционных систем, совместимых с MC-DOS;

• K-Meleon – браузер для операционной системы Windows, пытающийся составлять конкуренцию трем популярным браузерам.


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

Лирическое отступление 2: пойманный звук / Владимир Сергеевич Пташинский

Пора снова сделать лирическое отступление. На сей раз оно будет кратким, не претендующим на жанр саги, но все же лирическим.

Итак, песня:

У нашей Мэри был баран —
Собаки он верней.
Куда бы Мэри ни пошла —
Баран идет за ней!

Детская песенка, исполненная дрожащим резким баритоном, вылетела из жестяного рога странноватого механизма и на секунду повисла в полной тишине. Потом послышались бурные аплодисменты и восторженные крики публики, состоявшей из молодых сотрудников лаборатории. Так в 1877 году в городке Менло-Парк неподалеку от Нью-Йорка прошло испытание первой в истории человечества машины для записи звука. Сотрудники лаборатории ожидали услышать несколько хрипов, зафиксированных на восковом валике острием иглы, а услышали четкие слова и узнаваемый голос своего шефа с той странноватой резкой интонацией, с какой обычно говорят плохо слышащие люди. Родителем изобретения и исполнителем незамысловатой песенки был Томас Алва Эдисон – тот самый, изобретатель мимеографа. Машина называлась фонограф. Это было любимое детище автора множества полезных изобретений, с чьей легкой руки в мир пришли электролампа, эффективные телеграф и телефон и еще десятки полезных и необходимых сегодня вещей. Эдисон мечтал, что и фонограф будет использоваться прежде всего в деловом и научном мире для записи лекций и докладов. В этом гениальный изобретатель ошибся: фонограф, а вернее, его производные – патефон, граммофон, магнитофон и проигрыватель компакт-дисков – превратился в локомотив музыкальной индустрии. В деловом мире его тоже оценили – спустя 100 лет.


Двусторонняя очередь (Deque) / Алексей Суханов

deque - вид последовательности, которая, подобно вектору, поддерживает итераторы произвольного доступа. Кроме того она поддерживает операции вставки и стирания в начале или в конце за постоянное время; вставка и стирание в середине занимают линейное время. Как с векторами, управление памятью обрабатывается автоматически.

template ‹class T, template ‹class U› class Allocator = allocator›

class deque {

public:


 // typedefs:

 typedef iterator;

 typedef const_iterator;

 typedef Allocator‹T›::pointer pointer;

 typedef Allocator‹T›::reference reference;

 typedef Allocator‹T›::const_reference const_reference;

 typedef size_type;

 typedef difference_type;

 typedef Т value_type;

 typedef reverse_iterator;

 typedef const_revcrse_iterator;


 // размещение/удаление:

 deque();

 deque(size_type n, const T& value = T());

 deque(const deque‹T, Allocator›& x);

 template ‹class InputIterator›

 deque(InputIterator first, InputIterator last);

 ~deque();

 deque‹T, Allocator›& operator=(const deque‹T,Allocator›& x);

 void swap(deque‹T, Allocator›& x);


 // средства доступа:

 iterator begin();

 const_iterator begin() const;

 iterator end();

 const_iterator end() const;

 reverse_iterator rbegin();

 const_reverse_iterator rbegin();

 reverse_iterator rend();

 const_reverse_iterator rend();

 size_type size() const;

 size_type max_size() const;

 bool empty() const;

 reference operator[](size_type n);

 const_reference operator[](size_type n) const;

 reference front();

 const_reference front() const;

 reference back();

 const_reference back() const;


 // вставка/стирание:

 void push_front(const T& x);

 void push_back(const T& x);

 iterator insert(iterator position, const T& x = T());

 void insert(iterator position, size_type n, const T& x);

 template

 void insert(iterator position, InputIterator first, InputIterator last);

 void pop_front();

 void pop_back();

 void erase(iterator position);

 void erase(iterator first, iterator last);

};


template ‹class T, class Allocator›

bool operator==(const deque‹T, Allocator›& x, const deque‹T, Allocator›& y);


template ‹class T, class Allocator›

bool operator‹(const deque‹T, Allocator›& x, const deque‹T, Allocator›& y);

iterator - итератор произвольного доступа, ссылающийся на T. Точный тип зависит от исполнения и определяется в Allocator.

const_iterator - постоянный итератор произвольного доступа, ссылающийся на const T. Точный тип зависит от исполнения и определяется в Allocator. Гарантируется, что имеется конструктор для const_iterator из iterator.

size_type - беззнаковый целочисленный тип. Точный тип зависит от исполнения и определяется в Allocator.

difference_type - знаковый целочисленный тип. Точный зависит от исполнения и определяется в Allocator.

insert (вставка) в середину двусторонней очереди делает недействительными все итераторы и ссылки двусторонней очереди. insert и push (помещение) с обоих концов двусторонней очереди делают недействительными все итераторы двусторонней очереди, но не влияют на действительность всех ссылок на двустороннюю очередь. В худшем случае вставка единственного элемента в двустороннюю очередь занимает линейное время от минимума двух расстояний: от точки вставки - до начала и до конца двусторонней очереди. Вставка единственного элемента либо в начало, либо в конец двусторонней очереди всегда занимает постоянное время и вызывает единственный запрос конструктора копии T. То есть двусторонняя очередь особенно оптимизирована для помещения и извлечения элементов в начале и в конце.

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


Запуск PVM-программ c помощью XPVM / H. M. Ручко

Кроме PVM-консоли, можно использовать графический интерфейс XPVM для X Windows. На рис. 6.2 показано диалоговое окно сеанса работы с XPVM-интерфейсом.

Библиотека PVM не требует, чтобы С++-программа придерживалась какой ибо конкретной структуры. Первая PVM-функци я, вызываема я программой, «поме щ ает» ее в PVM-среду. Дл я каждой программы, которая я вл я ется частью PVM-среды, следует всегда вызывать функцию pvm_exit (). Если этого не сделать, система зависнет.

Практика показывает, что функции pvm_mytid() и pvm_parent () необходи м о вызывать в начале обработки задачи. Наиболее популярные категории функций PVM перечислены в табл. 6.1.

Рис. 6.2. Диалоговое окно графического интерфейса XPVM

Таблица 6.1. Семь категорий фу н кций библио т еки PVM

Категории PVM-функций

Описание

Управление процессами

Упаковка сообщений и их отправка

Распаковка сообщений и их прием

Обмен задач сигналами Управление буфером сообщений

Функции обработки информации и служебные процедуры

Групповые операции

Используются для управления PVM-процесса м и

Применяются для упаковки сооб щ ений в пересылочном буфере и отправки их от одного PVM-процесса другому

Используются для получения сооб щ ений и распаковки данных из активного буфера

Применяются для си г нализации и уведомления PVM-процессов о возникновении события

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

Применяются для получения информации о PVM-процессах и выполнения дру г их важных задач

Используются для объединения процессов в группы и выполнения других групповых операций