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

46. Реклама и жизненный цикл товара. Елена Юрьевна Логинова

Жизненный цикл товара – это период времени обращения товара на рынке от замысла продукта до снятия его с производства и выведения из продажи.

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

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

Первым этапом жизненного цикла является внедрение.

Ко второму этапу относится рост. Третья стадия – зрелость.

Четвертый этап жизненного цикла – насыщение.

На пятом этапе происходит спад.

На этапе выхода товара на рынок нужно учитывать полную неосведомленность покупателей о новинке, при этом основные цели рекламы:

1) формирование интереса к существованию товара и марки;

2) информирование рынка о преимуществах нового товара;

3) побуждение потребителя к приобретению нового товара;

4) побуждение закупщиков к обороту товару. Таким образом, происходит первичное знакомство

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

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

1) созданию сильного, конкурентоспособного образа марки товара;

2) формированию предпочтения к марке;

3) стимулированию покупки товара.

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

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

Основным видом рекламы остается агитирующая реклама.

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


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

1.9. Заслонения / Марвин Минский

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



Локальные группы предметов. Так же, как и с различными видами одиночных объектов, при рассмотрении знакомых групп частично загораживающих друг друга предметов можно воспользоваться специальной системой фреймов, соответствующей данной конфигурации объектов исходного изображения. Для примера рассмотрим сцену, состоящую из стола и стула (рис.1.10 и табл.1.1).

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

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

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

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

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


Д. Г. Гусев - Пропаганда.

Принципы классической пропаганды.

Будь проще, и массы потянутся…

Народная мудрость

Пропаганда — это трансмиссия, сфера, находящаяся между субъектом и объектом (массами). Все вожди учились пропаганде друг у друга, и методы их во многом схожи. Гитлер в «Майн Кампф» отмечал, что единственное, чему стоит поучиться у социалистов, — это искусство пропаганды. Во многом и для большевиков, и для фашистов теоретическими источниками послужили австромарксисты (О.Нейрат), ведущие родословную от Конта, основоположника социологии, науки, которая должна не только изучать общество, но менять его. Приемы влияния на массы не раз описывались. Однако дадим слово первоисточнику (Гитлеру), тем более что он достиг на этом поприще наиболее выдающихся успехов.

Гитлер выделяет 6 основополагающих принципов пропаганды:

1) пропаганды должно быть много, она адресована только массе, и масса должна встречаться с ее носителями постоянно, в любой точке пространства, в любой промежуток времени. Чем больше, тем лучше. Пропаганды много не бывает: «Чтобы память масс усвоила хотя бы совершенно простое понятие, нужно повторять его перед массой тысячи и тысячи раз».

2) «Ее уровень должен исходить из меры понимания, свойственной самым отсталым индивидуумам из числа тех, на кого она хочет воздействовать… Она должна быть максимально проста». То, что понятно рабочему — поймет и интеллигент. А наоборот — не получается. Поэтому простая пропаганда действует на всех, даже на тех, кто ей сопротивляется. В конце концов, когда большинство будет убеждено в чем-то, умное меньшинство вынужденно последует за большинством.

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

4) Пропаганда должна быть «однозначна»: «тут нет места тонкой дифференциации. Народ говорит „да“ или „нет“, он любит или ненавидит. Правда или ложь! Прав или не прав! Народ рассуждает прямолинейно». Никаких различных точек зрения и объективных подходов, никаких сомнений, колебаний, возможностей. Только решительность и однозначность. Выбор уже сделан. Факт уже налицо. О нем только информируют. «Все искусство тут должно заключаться в том, чтобы заставить массу поверить: такой-то факт действительно существует, такая-то необходимость действительно неизбежна, такой-то вывод действительно правилен».

5) «Пропаганда должна воздействовать больше на чувства и лишь в небольшой степени на так называемый разум…, чем меньше научного балласта в нашей пропаганде, чем больше обращается она к чувству толпы, тем больше будет успех».

6) Пропаганда должна быть шокирующей. Не нужно входить в резонанс с мнением массы, а потом постепенно подводить ее к какой-то мысли. Нужно огорошить сразу. Только в этом случае можно привлечь внимание, а привлечение внимания — это начало пропаганды. Только шокирующее нестандартное послание люди будут передавать и пересказывать друг другу, тогда как то, что им привычно, они не заметят и не перескажут. Нужно сразу поразить и удивить. И действовать настойчиво. «В начале войны казалось, что пропаганда безумна в свой наглости, затем она начала производить только несколько неприятное впечатление, а в конце концов все поверили ей…, чем чудовищнее солжешь, тем скорее тебе поверят. Рядовые люди скорее верят большой лжи, чем маленькой. Это соответствует их примитивной душе. Они знают, что в малом они и сами способны солгать, ну а уж очень сильно солгать они постесняются. Большая ложь даже просто не придет им в голову. Вот почему масса не может себе представить, чтобы и другие были способны на слишком уж чудовищную ложь. И даже когда им разъяснят, что дело идет о лжи чудовищных размеров, они все еще будут продолжать сомневаться и склонны будут считать, что, вероятно, все-таки здесь есть доля истины… Солги посильней, и что-нибудь от твоей лжи да останется».

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


Журнал «Компьютерра» | Samsung L310:Дамский угодник. Зоlотой


Автор: Алексей Стародымов


+

яркое гламурное оформление корпуса, наличие набора «женских» программ, громкий внешний динамик

-

корпус быстро царапается, не слишком удобная клавиатура, нет петельки для шнурка


Буква L в индексах моделей Samsung, вероятнее всего, означает слово "Lady": что L600, что L310 и L320 представляют собой продукты, ориентированные исключительно на прекрасных дам. Из последней свежепредставленной парочки интереснее выглядит младшая модель: благодаря характерному оформлению клавиатуры и околоэкранного пространства, а также цветовой гамме, L310 вызывает ассоциации с Nokia 7370 - имеют место все те же узоры из цветов, глянцевые панели и отделка пластиком "под золото". Плюс псевдосенсорная клавиатура в RAZR-стиле и глазок встроенной камеры, обрамленный стразами.

Казалось бы - ничего нового, но женщинам облик L310 нравится, проверено.

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

Ан нет: и 7370/7373, и L310 требуют бережного отношения, иначе спустя пару недель эксплуатации от гламурной отделки не останется и следа.

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

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

Интерфейс, отображающийся на экране с разрешением 176х220 точек, напоминает таковой в G600, с той лишь разницей, что нельзя создавать свои темы оформления - на выбор предлагаются две предустановленные, в голубых и белых то-нах соответственно. С функциональной точки зрения аппарат не представляет собой ничего экстраординарного: имеется сборник программ, уже знакомых по предыдущим женским моделям от Samsung (например, "Помощник в выборе духов"), Bluetooth 2.0, 2-мегапиксельная камера и слот для карточек microSD.

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



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

Развитие идеи / Валентин Перция

Теперь прошедшие жесткую «школу выживания» идеи должны быть разобраны «на косточки» и собраны заново в готовый продукт. Для того чтобы тщательно оценить, какая из 3–5 предложенных может претендовать на звание «единственной», следует выяснить, что именно будет стоять за каждой идеей. Для этого можно использовать инструмент, который называется «трехмерное описание продукта». Эти три измерения не ширина, глубина и высота, а «атрибуты и функции», «использование» и «преимущества для потребителя».

«Атрибуты и функции» опишут, что именно будет входить в новый продукт, как все это будет работать и какие функции выполнять.

«Использование» объяснит, как именно и для чего потребитель может эксплуатировать новинку. «Преимущества» изложат основания для предпочтения потребителями именно нашей новинки.

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

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


Надежда Баловсяк - «Питайтесь правильно»

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

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

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

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

Рис. 5.2. Программа «Питайтесь правильно» позволит выбрать оптимальный рацион

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

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

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


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

Евгений Леонидович Ющук, Интернет как индикатор настроения клиентов, инструмент для сбора их мнений и средство влияния на мнение клиентов

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

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

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

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

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


Создание нового класса документа и класса окна просмотра - Александр Вячеславович Фролов

Создайте два новых класса – класс документа и класс окна отображения для хранения и отображения на экране текстовой информации. Для создания новых классов используйте MFC ClassWizard .

Сначала откройте панель ClassWizard и нажмите кнопку Add Class. Откроется новая диалоговая панель Create New Class. Введите в поле Name имя нового класса – CEditorDoc, а в поле Base Class выберите имя базового класса CDocument. Нажмите кнопку Create. ClassWizard создаст класс CEditorDoc, определение которого он разместит в файле CEditorDoc.h, а реализацию методов класса в файле CEditorDoc.cpp.

Не закрывая ClassWizard, создайте класс окна просмотра текстового документа. Нажмите кнопку Add Class. В поле Name диалоговой панели Create New Class введите имя класса окна просмотра CEditorView, а в поле Base Class выберите имя его базового класса CEditView. Нажмите кнопку Create. ClassWizard создаст класс CEditorView, определение которого он разместит в файле CEditorView.h, а реализацию методов класса в файле CEditorView.cpp.

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

Мы уже изучали класс CEditView в предыдущей книге, посвященной MFC, и вы должны знать, что объекты этого класса сами хранят данные редактируемого документа. Поэтому для записи и чтения документа метод Serialize класса документа должен вызвать соответствующий метод класса окна просмотра. Измените метод Serialize следующим образом:

//////////////////////////////////////////////////////////////

// Метод класса Serialize CEditorDoc


void CEditorDoc::Serialize(CArchive& ar) {

 ((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);

}

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


М. Зислис, Мы решаем задачи, чтобы достичь целей

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

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

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

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


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

Разгоняем счетчики: от мифов к реальности - Николай Мациевский

Давайте рассмотрим теперь, что собой представляет код JavaScript-счетчика. Обычно (в 99% случаев) он «вытаскивает» из клиентского окружения набор параметров: URL текущей страницы; URL страницы, с который перешли на текущую; браузер; ОС и т. д. Затем они все передаются на сервер статистики. Все дополнительные возможности счетчиков связаны с обеспечением максимальной точности передаваемой информации (кроссбраузерность, фактически). Наиболее мощные (Omniture, Google Analytics) используют еще и собственные переменные и события, чтобы усилить маркетинговую составляющую.

Но сейчас речь не об этом. Как собранные на клиенте данные попадают на сервер статистики? Все очень просто: в документе создается уникальный элемент, в URL которого «зашиваются» все необходимые значения (обычно в качестве GET-параметров). URL этот ведет, как можно догадаться, на сервер статистики, где данные кладутся в базу и каким-то образом показываются в администраторском интерфейсе.

Как же создается этот самый «уникальный» элемент? Так сложилось, что наиболее простым транспортным средством для данных стала картинка. Обычный однопиксельный GIF-файл (сейчас, в эпоху CSS-верстки, это, пожалуй, единственное его применение) отдается сервером в ответ на URL с параметрами от клиента.


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

Джеффри П. Мак-Манус - Использование представлений в приложениях

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

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

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

Кроме этого, с помощью компонентов среднего уровня можно отделить изменения структуры базы данных от изменений бизнес-правил. Эти компоненты аналогичны представлениям и хранимым процедурам тем, что скрывают изменения структуры базы данных от клиентского приложения. Помимо этого, существует еще одно преимущество использования таких компонентов по сравнению с представлениями и хранимыми процедурам SQL Server: они упрощают процесс программирования, возвращают данные в виде объектов, а не строк и столбцов, а также не привязаны к конкретной СУБД или языку программирования. Более подробно компоненты среднего уровня рассматриваются в главе 12, "Web-службы и технологии промежуточного уровня".


Валентин Перция | Создание имени

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

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

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

Итак, задача, стоящая перед вами на этом этапе, формулируется так: «Хочу все знать».

В компании BrandAid существуют восемь этапов создания имени брендов.

1. Анализ рынка.

2. Разработка «тематических полей».

3. Генерация имен по «тематическим полям».

4. Повторная генерация.

5. Защита и отбор.

6. Маркетинговый и лингвистический фильтры.

7. Полный юридический анализ и защита.

8. Утверждение имени.


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

Владимир Верстак, Плавающие панели инструментов

Если выполнить команду Customize > Show UI > Show Floating Toolbars (Настройка > Показать пользовательский интерфейс > Показать плавающие панели инструментов), то откроются дополнительные плавающие панели: reactor, Layers (Слои), Animation Layers (Анимация слоев), Snaps (Привязки), Render Shortcuts (Быстрый доступ к настройкам визуализации), Axis Constraints (Ограничения по осям), Extras (Дополнения) и Brush Presets (Предустановки кистей).

Плавающая панель инструментов Layers (Слои) содержит кнопки для создания, активизации, блокировки и выделения слоев, а также средства для назначения и изменения свойств слоя. При помощи панели Snaps (Привязки) можно управлять свойствами привязок, используемых при моделировании и редактировании объектов. Панель Axis Constraints (Ограничения по осям) позволяет устанавливать ограничения перемещения только выделенной осью или плоскостью. Панель Extras (Дополнения) содержит кнопки переключения подключаемых модулей на сочетания клавиш, автосетки, а также кнопки создания массива, снимков и распределенных объектов по пути или заданному точками расстоянию. Панель Brush Presets (Предустановки кистей) позволяет получить доступ к предустановленным кистям, а также создавать собственные. Панель reactor содержит все необходимые команды для создания имитации физических реакций.

Панель Animation Layers (Анимация слоев) дает возможность объединять анимационные треки одного объекта, настраивая их по отдельности.

Рассмотрим некоторые панели инструментов более подробно.

Панель инструментов Snaps (Привязки) (рис. 1.17) обеспечивает быстрый доступ к наиболее используемым командам привязки.


Рис. 1.17. Плавающая панель Snaps (Привязки)


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


Рис. 1.18. Плавающая панель Render Shortcuts (Быстрый доступ к настройкам визуализации)


Удерживая нажатой клавишу Shift, щелкните на кнопке с буквой A, B или C – и настройки последней визуализации будут сохранены. Для начала визуализации сцены при помощи сохраненных настроек достаточно щелкнуть на одной из трех кнопок.


Госстандарт России - 9.2.3 Базовые линии и трассируемость

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

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

б) установить базовую линию для программного средства и определить ее в Указателе конфигурации ПО (12.26).

Примечание — Модифицируемое пользователем ПО не входит в базовую линию программного средства, за исключением связанных с ним компонентов защиты и граничных компонентов. Следовательно, в модифицируемое пользователем программное средство могут быть внесены изменения, которые не будут влиять на идентификацию конфигурации базового программного средства;

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

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

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

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

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


Денис Колисниченко / Совет № 73 Старайтесь выбрать тот тип парковки, который наиболее уместен в данной ситуации

Парковка бывает трех типов:

• параллельно проезжей части;

• перпендикулярно проезжей части;

• под углом к проезжей части.

Параллельная парковка

Параллельная парковка – наиболее сложная, поскольку нужно учитывать:

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

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

Рис. 4. Параллельная парковка.


Алгоритм параллельной парковки будет следующий:

• Нужно убедиться, что места для вашего автомобиля достаточно.

• Заезжаем передом, как обычно.

• Скорее всего, вы встанете неровно и впритык к следующему автомобилю. Поэтому сдайте назад, одновременно выравнивая автомобиль. Если вы паркуетесь с той же стороны, как и автомобиль на рис. 4, то вам нужно вывернуть руль вправо и сдавать назад, постепенно возвращая руль в положение «прямо» (если вы паркуетесь с другой стороны дороги – тогда руль нужно будет выворачивать влево).

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

• Затем сдаем назад и выравниваем машину – ваша машина стоит ровно (ну, практически ровно).

• После этого посмотрите, сможете ли вы выехать и сможет ли выехать автомобиль, который сзади вас.

Рис. 5. Параллельная парковка задним ходом.


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

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

Перпендикулярная парковка. Заезд в гараж

Казалось, что тут сложного? Выровнял машину перпендикулярно дороге и ровно заехал, стараясь никого не задеть. Ясно, что нужно знать габариты машины, чтобы можно было не только заехать, не сломав зеркала заднего вида, но и чтобы можно было выйти из машины. Но что делать, если место ограниченно? Например, напротив парковки стена или второй ряд машин (что часто бывает на стоянке). Тогда вам поможет разобраться траектория, изображенная на рис. 6.

Рис. 6. Перпендикулярная парковка.


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

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

Парковка под углом к проезжей части

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


понедельник, 25 октября 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.


Александр Ватаманюк, Концентратор

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

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

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

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

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

Концентратор реализует физический уровень модели ISO/OSI, на котором работают стандартные протоколы, поэтому использовать его можно в сети любого стандарта.

Существует два основных типа концентраторов.

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

Рис. 6.5. Внешний вид концентратора с фиксированным количеством портов


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

Рис. 6.6. Внешний вид модульного концентратора


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

Поскольку для создания сети в основном используют коаксиальный кабель и кабель на основе витой пары, соответственно существуют концентраторы с BNC– и RJ-45-портами.

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

Рис. 6.7. Внешний вид концентратора с консольным портом (в левой части)


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

Часто на концентраторе присутствует дополнительный порт, через который можно подключать другие сегменты сети. Например, к сети стандарта 100Base-TX можно подключить сеть или сегмент со стандартом 10Base-2.


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

Андрей Киселев | 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). Позднее мы коснемся этой темы подробнее.


Менеджеры для мобильных телефонов. Виталий Петрович Леонтьев

Современные мобильники – это, по сути, все те же компьютеры, только маленькие и специализированные. И, естественно, хочется связать их с большим настольным компьютером, например, чтобы редактировать телефонную книгу... Да и SMS-ки набирать на обычной клавиатуре проще... Тем более, что практически все современные аппараты умеют сообщаться с компьютером: в комплект поставки обязательно входит шнур для синхронизации. Можно подключить телефон и по беспроводному протоколу Bluetooth (если, конечно, ваш компьютер оборудован соответствующим адаптером).

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

Проще всего обладателям коммуникаторов и смартфонов на базе Windows Mobile – все необходимое для работы с ними уже встроено в операционную систему Windows Vista. У владельцев телефонов на базе Symbian (Nokia, Sony) или MacOS (IPhone) тоже не должно быть проблем – в комплект поставки любого телефона обязательно включена программа синхронизации вроде PCSuite. Однако стандартные программы, как водится, страдают от чрезмерной полноты и работают довольно медленно. Поэтому в определенных случаях нам стоит выбрать альтернативные программы. Особенно это актуально для тех, кто использует коммуникатор или смартфон в связке с ноутбуком – тут вопрос быстродействия и компактности выходит на первый план.


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

Резюме / Джесс Либерти

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

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

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

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

Ключевое слово using в объявлении идентификатора используется для открытия доступа в текущей области видимости только к отдельному идентификатору из пространства имен, что существенно снижает вероятность возникновения конфликтов имен.

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

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

В стандартной библиотеке C++ используется пространство имен std. Однако избегайте использования оператора using, открывающего доступ ко всем идентификаторам стандартной библиотеки. Воспользуйтесь лучше объявлениями с ключевым словом using.


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

Настоящая работа. Евгений Зуев

Сейчас мы с ужасом думаем, что было бы, не будь у нас тестового пакета. Мы сами смогли бы написать сто, от силы двести слабо систематизированных тестов (на большее не хватило бы времени и терпения), может быть, насобирали бы десяток-другой исходников на Си++, пропихнули бы все это через компилятор и ходили довольные и гордые тем, что наваяли. Потом программа начала бы исправно рушиться на каждой мало-мальски серьезной программе, мы в панике латали бы дыры, вскоре нам и заказчикам это надоело, и проект тихо умер бы, оставив у нас на руках никому не нужные останки того, что когда-то называлось компилятором. Судьба многих и многих проектов…

Все было по-другому. Вечером мы запускали тестовый прогон, утром (если наш жалкий SparcClassic или монструозный диск Maxtor на 300 Мбайт за ночь не дал сбой) получали протоколы тестирования, разбирали "по принадлежности" непрошедшие тесты, и начиналась настоящая программистская работа?—?поиск и исправление ошибок.

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

Первые тестовые прогоны были кошмарны: на половине тестов компилятор выдавал вереницы жутких диагностических сообщений, которые, казалось, никогда не должны появляться, другие аварийно заканчивались знаменитой диагностикой "core dumped", те тесты, которым все-таки удалось прорваться сквозь компилятор, при исполнении выдавали неверные результаты, и лишь единицы завершались скромной фразой "test passed". Казалось, не в силах человеческих разобраться в этой каше. Однако, капля камень точит.

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

А тут еще в самый разгар работы, когда ошибки щелкаются одна за другой, компилятор на глазах выздоравливает, словно от тяжелой болезни,-- приходит новая версия стандарта. Значит, надо опять смотреть, что изменилось. Ладно если вводится новая языковая возможность, это может быть несложно в реализации и даже приятно: когда ни у Borland, ни у gcc еще не были реализованы описатель mutable или булевский тип, у нас уже все работало. Хуже, если уточняются детали семантики хорошо известных конструкций, что, как правило, влечет за собой переделку базовых алгоритмов. Так, общий алгоритм сравнения типов, алгоритм обработки совместно используемых функций (одноименных функций, различающихся числом и типами параметров) и в особенности, алгоритмы, реализующие правила вызова деструкторов и обработки исключений переделывались после почти каждой новой версии предварительного стандарта. Понятно, что каждая такая переделка работающей программы вызывает поток новых ошибок, и мы откатываемся на месяц назад…

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

А интересно, как тестирует свои компиляторы Watcom?

(обратно)

17.4.1 Зачем вообще нужно компилировать ядро?. Виктор Алексеевич Костромин

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

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

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

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

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

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

Я был вынужден заниматься установкой ядра из исходных кодов потому, что система виртуальных машин VMware отказалась работать с установленным у меня ядром 2.2.16, сообщив, что эта версия ядра не поддерживает работу с CDROM из VMware, и предложив мне либо установить более позднюю версию ядра, либо вернуться к версии 2.2.15. Попытки установить новую версию ядра из rpm-пакетов тоже не решили проблему, потому что конфигурационный скрипт VMware сообщал, что ему не хватает header-файлов. Установка пакетов kernel-headers (полностью соответствующих ядру) тоже не привела к успеху, вот и пришлось сделать попытку установить ядро из исходных текстов.

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

Я экспериментировал на версии 2.2.16-22 из свежеустановленного дистрибутива ASPLinux Release Candidate 3 и устанавливал ядро версии 2.4.2. Поэтому все примеры в данной главе приводятся для случая, когда система уже работает на ядре версии 2.2.x и вы пришли к решению установить ядро версии 2.4.x.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Символы / Джесс Либерти

Символьные переменные (типа char) обычно занимают один байт, этого достаточно для хранения 256 значений печатаемых символов (см. приложение В). Значение типа char можно интерпретировать как число в диапазоне 0—255, или символ ASCII. Набор символов ASCII и его эквивалент ISO (International Standards Organization — Международная организация по стандартизации) представляют собой способ кодировки всех букв, цифр и знаков препинания.

Например, в коде ASCII английской строчной букве "а" присвоено значение 97. Всем прописным и строчным буквам, всем цифрам и знакам препинания присвоены значения от 1 до 128. Дополнительные 128 знаков и символов зарезервированы для расширения возможностей компьютера, хотя расширенный набор символов IBM стал уже чем-то вроде стандарта.


Примечание:ASCII обычно произносится как "аскей".


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


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

Потребление и потребители / Валентин Перция

Сегодня (2003 год) потребление фасованной воды в СТРАНЕ составляет 20 л в год на человека. В абсолютном исчислении это почти миллиард литров в год – 833 560 000 л. Разумеется, при рассмотрении профиля потребителей становится ясно, что почти все 100 % такой воды «выпивает» городское население, причем в основном те, кого можно отнести к группе «работоспособный возраст, доход средний-плюс и выше».

Среди городского населения питьевую газированную воду потребляют 87,4 %, негазированную – 25,7 %. В 2002 году цифры были: 85,2 % и 18,3 % соответственно. Можно сказать, что рынок газированной питьевой воды уже практически насытился, тогда как негазированной питьевой растет почти по 50 % в год (табл. П1).

Таблица П1. Потребление воды в СТРАНЕ

Как видно из табл. П2, происходит перераспределение потребления: население предпочитает пить все больше и больше негазированную воду. Причем рост потребления столовой воды в упаковке более 5 л – самый интенсивный. Несмотря на то что всего четверть городского населения пьет негазированную воду (в любой упаковке) параллельно с газированной (около 90 %), динамика почти в два раза выше у потребления негазированной воды.

Таблица П2. Рост сегмента в представлении по категориям вод в 2003 году по сравнению с 2002 годом


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

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

Обычная ошибка, которую допускают при написании кодов пользовательских интерфейсов. заключается в том, что в процессе проектирования и тестирования интерфейса используются данные меньшего объема, чем тот, с которым приходится сталкиваться при развертывании мобильного приложения. Алгоритм, который прекрасно справляется с извлечением из базы данных 20 элементов данных и их передачей пользовательскому интерфейсу, вовсе не обязательно сделает хорошо то же самое для 200 элементов данных. Если вы тестируете интерфейс, используя лишь небольшие наборы данных, то тем самым оставляете открытыми двери для множества неприятных сюрпризов, ожидающих вас на последующих стадиях разработки или при развертывании приложения, когда настанет черед работать с реальными объемами данных. Гораздо лучше выявлять все проблемы производительности еще на ранней стадии, когда для их преодоления могут быть найдены наиболее конструктивные решения; вносить изменения в проект впоследствии всегда труднее, это может нарушать стабильность работы приложения и почти всегда приводит к менее удовлетворительным результатам.

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

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


Работа с параметрами командной строки сценария / Андрей Владимирович Попов

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

Замечание

Как в имени аргумента, так и в его значении могут использоваться символы кириллицы.

Например, выполнив в командном окне строку

cscript Example.js /Имя:"Андрей Попов" /Возраст:30

или

cscript Example.js /Возраст:30 /Имя:"Андрей Попов"

мы передадим в сценарий Example.js два параметра: "Имя" со значением "Андрей Попов" и "Возраст" со значением "30". Значения этих параметров можно было передать и как безымянные параметры:

cscript Example.js "Андрей Попов" 30

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

В WSH для обработки параметров командной строки служат следующие объекты-коллекции:

? WshArguments (содержит все параметры, как именные, так и безымянные);

? WshNamed (содержит только именные параметры);

? WshUnnamed (содержит только безымянные параметры).

Замечание

Описание аргументов командной строки в сценариях можно задавать с помощью XML-элементов <runtime>, <named> и <unnamed> (см. главу 3).

Для доступа к коллекциям, содержащим аргументы командной строки, в сценарии сначала нужно создать переменную-экземпляр объекта WshArguments; для этого используется свойство Arguments объекта WScript. Пример на языке JScript:

var objArgs=WScript.Arguments;

Для создания экземпляров коллекций WshNamed и WshUnnamed используются соответственно методы Named и Unnamed объекта WshArguments. Например:

var objNamedArgs=objArgs.Named;

var objUnnamedArgs=objArgs.Unnamed;

Методы и свойства коллекций WshArguments, WshNamed и WshUnnamed подробно описаны в главе 1. Отметим здесь только, что для корректной работы с параметрами командной строки, имена которых содержат символы кириллицы, эти имена в сценарии должны быть написаны в кодировке Windows.

В листингах 2.21 и 2.22 приведены примеры сценариев на языках JScript и VBScript, которые выводят на экран общее количество параметров командной строки, количество именных и безымянных аргументов, а также значения каждой из этих групп параметров. Результат работы этих сценариев, запущенных в консольном режиме, представлен на рис. 2.8.

Рис. 2.8. Результат работы сценария Args.js


Листинг 2.21. Доступ к параметрам командной строки запущенного сценария (JScript)

/********************************************************************/

/* Имя: Args.js                                                     */

/* Язык: JScript                                                    */

/* Описание: Работа с аргументами запущенного сценария              */

/********************************************************************/

var

 i,objArgs,s,objNamedArgs,objUnnamedArgs;  //Объявляем переменные

objArgs = WScript.Arguments;  //Создаем объект WshArguments

//Определяем общее количество аргументов

s="Всего аргументов: "+objArgs.Count()+"\n";

for (i=0; i<=objArgs.Count()-1; i++)

 s+=objArgs(i)+"\n"; //Формируем строки со значениями аргументов

objUnnamedArgs=objArgs.Unnamed;  //Создаем объект WshUnnamed

//Определяем количество безымянных аргументов

s+="\nБезымянных аргументов: "+objUnnamedArgs.length+"\n";

for (i=0; i<=objUnnamedArgs.length-1; i++)

 //Формируем строки со значениями безымянных аргументов

 s+=objUnnamedArgs(i)+"\n";

objNamedArgs=objArgs.Named; //Создаем объект WshNamed

//Определяем количество именных аргументов

s+="\nИменных аргументов: "+objNamedArgs.length+"\n";

//Проверяем, существует ли аргумент /Имя:

if (objNamedArgs.Exists("Имя")) s+=objNamedArgs("Имя")+"\n";

//Проверяем, существует ли аргумент /Comp:

if (objNamedArgs.Exists("Comp")) s+=objNamedArgs("Comp")+"\n";

WScript.Echo(s);  //Выводим сформированные строки

/*************  Конец *********************************************/

Листинг 2.22. Доступ к параметрам командной строки запущенного сценария (VBScript)

'********************************************************************

' Имя: Args.vbs

' Язык: VBScript

' Описание: Работа с аргументами запущенного сценария

'********************************************************************

Option Explicit

Dim i,Arg,objArgs,s,objNamedArgs,objUnnamedArgs  ' Объявляем переменные

Set objArgs = WScript.Arguments  ' Создаем объект WshArguments

' Определяем общее количество аргументов

s="Всего аргументов: " & objArgs.Count() & vbCrLf

For Each Arg In objArgs

 s=s & Arg & vbCrLf  ' Формируем строки со значениями аргументов

Next

Set objUnnamedArgs=objArgs.Unnamed  ' Создаем объект WshUnnamed

' Определяем количество безымянных аргументов

s=s & vbCrLf & "Безымянных аргументов: " & objUnnamedArgs.length & vbCrLf

For Each Arg In objUnnamedArgs

 ' Формируем строки со значениями безымянных аргументов

 s=s & Arg & vbCrLf

Next

Set objNamedArgs=objArgs.Named  ' Создаем объект WshNamed

' Определяем количество именных аргументов

s=s & vbCrLf & "Именных аргументов: " & objNamedArgs.Length & vbCrLf

' Проверяем, существует ли аргумент /Имя:

If objNamedArgs.Exists("Имя") Then

 s=s & objNamedArgs("Имя") & vbCrLf

End If

' Проверяем, существует ли аргумент /Comp:

If objNamedArgs.Exists("Comp") Then

 s=s & objNamedArgs("Comp") & vbCrLf

End If

WScript.Echo s   ' Выводим сформированные строки

'*************  Конец *********************************************


Cушка древесины / Наталья Гавриловна Коршевер

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

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

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

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

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

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

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

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

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


4.6.6 Параметры по Умолчанию / Мюррей Хилл

Часто в самом общем случае функции требуется больше праметров, чем в самом простом и более употребительном случае. Например, в библиотеке потоков есть функция hex(), порождащая строку с шестнадцатиричным представлением целого. Второй параметр используется для задания числа символов для предтавления первого параметра. Если число символов слишком мало для представления целого, происходит усечение, если оно сликом велико, то строка дополняется пробелами. Часто програмист не заботится о числе символов, необходимых для предсталения целого, поскольку символов достаточно. Поэтому для нуля в качестве второго параметра определено значение «использвать столько символов, сколько нужно». Чтобы избежать засорния программы вызовами вроде hex(i,0), функция описывается так:

extern char* hex(long, int =0);

Инициализатор второго параметра является параметром по умолчанию. То есть, если в вызове дан только один параметр, в качестве второго используется параметр по умолчанию. Напрмер:

cout «„ „**“ «« hex(31) «« hex(32,3) «« «**“;

интерпретируется как

cout «„ „**“ «« hex(31,0) «« hex(32,3) «« «**“;

и напечатает:

** 1f 20**

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

int f(int, int =0, char* =0); // ok int g(int =0, int =0, char*); // ошибка int f(int =0, int, char* =0); // ошибка

Заметьте, что в этом контексте пробел между * и = явлется существенным (*= является операцией присваивания):

int nasty(char*=0); // синтаксическая ошибка