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

Этиология и патогенез. Причинами врожденного микрофтальма могут служить наследственно-генетические факторы, внутриутробные воспалительные и дегенеративные процессы, особенно на почве вирусных инфекций (коревая краснуха, опоясывающий лишай и др.), давление амниотических тяжей. Часто микрофтальм имеет семейно-наследственный характер. Тип передачи преимущественно доминантный, реже рецессивный, сцепленный или не сцепленный с полом. Приобретенный микрофтальм развивается вторично в раннем детском возрасте в результате воздействия различных внешних факторов, тормозящих рост глазного яблока. К ним относятся: ретролентальная фиброплазия, токсоплазмоз, псевдоглиома, удаление врожденной катаракты в очень раннем возрасте и др. Микрофтальм может быть следствием облучения рентгеновскими лучами области орбиты и глаза у детей.
Клиническая картина. Врожденный микрофтальм может быть односторонним (чаще) и двусторонним (реже). Глазное яблоко резко уменьшено в размерах иногда до 1 см в диаметре, неправильной формы с уплощенной, нередко полупрозрачной роговицей, диаметр которой равен 6 мм или менее. Глазное яблоко может быть правильно сформировано и только уменьшено в размерах или же уменьшение размеров сочетается с различными пороками развития глаза. При этом наблюдаются: колобомы сосудистого тракта и зрительного нерва, аниридия, лентиконус, обызвествление хрусталика, эктазия склеры в заднем полюсе глаза. Микрофтальмические глаза предрасположены к глаукоме, а при наличии колобомы сосудистой оболочки к отслойке сетчатки. Рефракция глаза чаще всего гиперметропическая. Острота зрения из-за недоразвития желтого пятна низкая, иногда наблюдается полная слепота. Нередки сочетания с другими пороками развития (заячья губа, волчья пасть, аномалия ушей, пальцев рук и ног и др.).
Диагноз ставят на основании наружного осмотра глаза.
Лечение. Назначение соответствующей коррекции, в том числе телескопических очков. При наличии глаукомы, отслойки сетчатки или катаракты в ряде случаев показано хирургическое лечение. При резко выраженном микрофтальме и отсутствии зрительных функций возможно покрытие такого глаза одностенным косметическим протезом.
Прогноз для зрения малоблагоприятный, возможно значительное снижение зрительных функций вплоть до слепоты. www.bolezni-glaza.ru МИКРОКОРНЕА малая роговица. Обычно является признаком микрофтальма (см.), иногда наблюдается при нормальных размерах глаза как самостоятельная двусторонняя аномалия.
Этиология и патогенез. Внутриутробные нарушения развития роговицы на пятом месяце формирования плода. Микрокорнеа представляет собой также одно из проявлений начинающейся субатрофии или выраженной атрофии глазного яблока в результате различных патологических процессов в ранее нормальном глазу.
Клиническая картина. Размеры роговицы иногда уменьшены незначительно (диаметр 9 мм), в выраженных случаях роговица представляет собой небольшой участок прозрачной ткани неправильно округлой формы, диаметром иногда до 2 мм. При микрокорнеа сферичность роговицы может быть нормальной или же значительно уплощенной (плоская роговица). В этих случаях склера переходит в роговицу, не меняя своей кривизны. Рефракция чаще гиперметропическая, острота зрения значительно снижена, иногда до полной слепоты. Микрокорнеа может сопровождаться глаукомой вследствие сужения или закрытия угла передней камеры эмбриональной мезенхимой, эмбриотоксоном, помутневшим хрусталиком, остатками зрачковой перепонки; при наличии колобомы сосудистой оболочки отслойкой сетчатки.
Диагноз ставят на основании клинической картины.
Лечение. При сохранении прозрачности роговицы в некоторых случаях возможна коррекция аметропии иногда с применением телескопических очков, в случае осложнений хирургическое лечение (экстракция катаракты, антиглаукоматозная операция и др.).
Прогноз при незначительном уменьшении и отсутствии другой врожденной патологии роговицы для зрения благоприятный. Следует следить за возможностью развития глаукомы. Однако чаще острота зрения резко снижена. При значительном уменьшении роговицы и отсутствии зрения (или наличии светоощущения) возможно покрытие такой роговицы одностенным косметическим протезом (см. Глазное протезирование). www.bolezni-glaza.ru
Меняем отношение к глазам.

Надоели постоянные крики, истерики мужа.
Он пообещал моей маме что завтра утром поможет садить огород. Мы садим трактором и нужно лишь забросить картофель в сажалку. Вот он вечером около 22 заявляет что не будет помогать (посадка намечена на 5-30. Кто же тогда будет тягать мешки с картошкой - я в одну руку масю а в другую мешок? Раньше я бы начала говорить мол кол дал слово нужно его держать, человек приедет садить, а картофель засыпать нет кому... картошку ведь и ты кушать будешь... А сейчас я сделала по другому, сказала мол ничего, не хочешь - не надо. Мне нужно будет найти кого-то чтоб засыпал картофель, а среди ночи я могу позвонить и попросить лишь своего лучшего друга детства... Муж в истерике... Крики, визги...
Ложится спать, говорит что мол когда будешь ложиться разбудишь ( он о выполнении моего супружеского долга ) Я же в ответ, что коль он на меня орал у меня нет настроения поэтому не разбужу. Муж в шоке - я ему впервые за 5 лет отказала.
Еще раньше днем общаемся с моей мамой по телефону. Я раскроила шторку чтоб перешить и никак не могу ее закончить - у малой режутс зубки и когда она спит я не могу включить швейную машинку (стал у нее чуткий сон), а когда она не спит, хотя она и не плачет, но я все равно пытаюсь ее отвлечь ведь вижу что ей не комфортно из-за зубика - тоже не до шторки. Мама мне и говорит что до пасхи я должна ее закончить. Муж начал орать мол какого она лезет к нам... Я обяснила что она не лезет итд. Он заявил: "Чтоб я малу не видел у нее на руках..." Я раньше бы начала говорить, мол ничего себе, в доме у мамы живешь, работу она тебе организовала, благодаря ей ты учишься, две машины дала пользоваться, ездить на их тебя научила, а ты... Но, я просто сказала:" Не хочешь видеть - закрой глаза" Муж в бешенстве. Начал угрожать, я его послала подышать свежим воздухом (именно подышать воздухом, а не на...) Он пошёл на улицу курить несколько сигарет... www.diets.ru
Также по теме: Британия отступает, чтобы возобновить переговоры с Эквадором по Ассанжу
У Вас нет большинства в парламенте, чтобы принять закон?
Нет, у нас - самое большое меньшинство. Именно поэтому его и удалось заблокировать. На предстоящих выборах президента и парламента, которые состоятся 17 февраля, мы хотим попытаться стать большинством. Потому что речь идет не только о законе о массовых коммуникациях, заблокирован также уголовный кодекс, очень важные законы, которые мы надеемся принять, обладая собственным большинством.
В отношениях между прогрессивными правительствами и крупными частными СМИ наблюдаются общие черты. Как развивается борьба за контроль над радиочастотами?
Мы не ведем никакой борьбы за какой-либо контроль ни над СМИ, ни над радиочастотами. Мы выступаем за истинную свободу слова и истинные связи с обществом. Существует вот какой исходный конфликт: частные коммерческие структуры предоставляют информацию, одно из самых насущных благ. И если при улучшении качества снижается прибыльность бизнеса, то по определению главенствуют частные, а не общественные интересы. Общество должно отдавать себе отчет в существовании этого конфликта, чтобы преодолеть его. Как этого достичь? Один из способов заключается в демократизации СМИ, создавая такие СМИ, которые не подчиняются логике рынка. Это означает создание государственных, некоммерческих СМИ. Необходимо двигаться вперед во всех этих областях. У нас никто не против свободы слова. Но мы против закамуфлированных проблем для демократии и правового государства. Против того, чтобы частные СМИ, обладающие огромной властью, пытались навязать нам определенную точку зрения. Кроме того, они вступают в сговор между собой.
Читайте также: Над Латинской Америкой сгущаются тучи
Вам не кажется, что проволочки с принятием законы вызваны Вашим конфликтом с журналистами?
Возможно. Но это наилучший пример из того, о чем мы говорим. Был неписаный закон, согласно которому все эти влиятельные господа были выше всякого закона. В правом государстве преследуются преступления, а не люди. В Эквадоре прошло около трех тысяч судебных процессов по факту оскорбления чести и достоинства. Оппозиция на меня подавала в суд по этой статье. Никто не говорил об отсутствии свободы слова до тех пор, пока одного журналиста не привлекли к ответственности за оскорбление чести и достоинства. Вот тогда и стали говорить о наступлении на свободу слова. В Эквадоре не преследуют людей -журналистов, пожарных, преследуют за совершение преступлений, и все мы должны быть равны перед законом. В противном случае правовое государство начинает погибать.
Как Вы оцениваете баланс между тем, что сделано, и тем, что предстоит сделать в течение следующего президентского срока?
На нас лежит ответственность за продолжение процесса преобразований в Эквадоре. Шоссейные дороги, ГЭС, порты, школы, больницы. Мы преобразовываем буржуазное государство в народное, меняем властные отношения. Почему Латинская Америка, обладая всем для того, чтобы стать самым процветающим регионом мира, до сих пор находится в бедности и нищете? Ответ сложный, это одна из загадок развития. Отчасти это вызвано теми формами власти, которые преобладали над нами. Когда Колумб открыл Америку, то обнаружил континент, обладающий огромными ресурсами, наукой, всем, а мы не развивались. Отчасти ответ лежит в структурах власти, которые нами управляли. В Эквадоре над нами уже не стоят банкиры, международная бюрократия в лице МВФ и Всемирного банка. Мы не подвластны и странам, которые стремятся к мировому господству. В Эквадоре страной руководит народ, и это является отправной точкой развития. Но предстоит еще укрепить этот процесс. И я вынужден принять вызов и решить эту задачу. Если найдется другой человек, который сделает это лучше меня, добро пожаловать, я не буду ему мешать. Мое политическое движение посчитало, что я могу дать большую гарантию победы, и мне придется взять на себя эту ответственность.
Также по теме: Эквадор стремится к укреплению связей с Россией
К вопросу о региональных лидерах. Считаете ли Вы, что процесс интеграции зависит от нахождения у власти Уго Чавеса в Венесуэле, Рафаэля Корреа в Эквадоре и Кристины Фернандес в Аргентине?
Лидеры и личности всегда важны. И все же я думаю, что одно из главных достижений региона заключается в том, что, независимо от политической ориентации правительств (правой или левой), у нас общие цели: защита демократии и укрепление интеграционных процессов. За время своего президентства я получил очень положительный опыт. Независимо от того, будет ли в Чили левое или правое правительство, нашим общим знаменателем будет стремление к созданию великой родины. В настоящее время убеждения и взгляды стоят выше конкретных людей и лидеров.
Что Вы думаете о процессе, который идет в Аргентине?
Он идет весьма успешно. Я с большим уважением отношусь к Кристине, это разносторонне развитая женщина. И весьма положительно оцениваю деятельность последних правительств, я имею в виду Нестора Киршнера и ее. Была восстановлена гордость аргентинцев, их самооценка, буквально втоптанная в землю. Вы только вспомните, что творилось во времена Менема! В экономическом смысле Аргентина возрождается из пепла, подобно птице Феникс. Из того пепла, в котором она оказалась из-за неолиберальной политики. Обвал национальной валюты стал одним из самых мрачных эпизодов долгой и мучительной ночи неолиберализма. Я радуюсь тем процессам, которые идут в Аргентине, и преклоняюсь перед ее президентом. Я также с большим уважением вспоминаю Нестора Киршнера, основателя Союза южноамериканских государств (Unasur), убежденного сторонника интеграции и первого генерального секретаря этой организации.
Многие люди живут по шаблону повседневной жизни. Это продолжается до тех пор, пока не грянет гром в виде крупных проблем в семье, на работе, со здоровьем и внешним видом. Если вы хотите стать успешным человеком, надолго сохранить молодость, избавиться от многочисленных болезней, нормализовать отношения с окружающими, вам в первую очередь необходимо оставить в прошлом все попытки изменить окружающий мир и других людей в нужную вам сторону. Это пустая трата сил и времени.
Все положительные изменения следует начать с себя. Измените в позитивную сторону отношение к себе, и тогда окружающий мир как-то «нео жиданно» для вас станет добрее и чище.
Менять отношение к себе рекомендуется по следующим направлениям.
1. Проснувшись утром, еще не вставая с постели, осознанно скажите себе: «Я выбираю радость на весь день, я самая счастливая (самый счастливый)». И широко улыбнитесь. Тем самым на подсознательном уровне вы запрограммируете себя на успешный день. Куда бы вы ни шли, что бы ни делали, подсознание (незаметно для вас) будет корректировать ваши действия в сторону обретения успеха. Ежедневно выбирайте для себя радость и счастье на весь день, говорите себе эти слова каждое утро, как только проснетесь, громко и уверенно. Постепенно состояние радости и счастья станет для вас привычным.
К каждому человеку счастье приходит изнутри, а не снаружи. Ни один атрибут красивой жизни не сделает вас счастливым человеком. Даже за рулем эксклюзивной машины, в одежде от прославленных дизайнеров, с банковской картой на миллион долларов вы может е чувствовать себя несчастным человеком.
Роскошная и комфортная жизнь является признаком благосостояния, но только материального, а счастье – категория всеобъемлющая. Богатство быстро становится привычкой, хоть и очень красивой, а внутреннего покоя так и не приносит. Бедные девушки завидуют успешным и богатым ровесницам, не понимая, что среди состоятельных людей намного больше несчастных, чем жизнерадостных.
Счастье приходит к нам только через внутреннюю работу. Ситуация «все хорошо», «все плохо», «я счастлива» или «я несчастна» существует только в вашей голове, является плодом работы вашего сознания. Какими бы трудными ни были жизненные обстоятельства, из них всегда есть выход, а решенные задачи способствуют вашему развитию. Да и кто вообще сказал, что ваша жизнь несносна и вы неудачливы? Только ваше сознание.
Обратите внимание на мысли, царящие у вас в голове, – это ключ, открывающий двери к хорошему здоровью и про цветанию во всех сферах жизни.
Каждый из нас – живописец, создающий свой образ с помощью убеждений. Если убеждения на вас больше не работают – надо обязательно поменять их на другие. Тысячу раз в день повторяйте, что вы красивый, удачливый и счастливый человек, – и результат не заставит себя долго ждать. Разум – уникальный инструмент, используйте его себе во благо!
Однако на пути к гармонии и счастью одного разума недостаточно. Необходимо еще, чтобы ваши новые мысли о себе были подкреплены ощущением любви.
Безусловная любовь к себе – это огромная сила, которая откроет в вас такие сокровища, о существовании которых вы даже не подозревали.
Помните, что критика подавляет и уничтожает любую личность, а любовь возрождает.
Не ждите, пока похудеете, пока встретите идеального мужчину, найдете престижную работу, купите солидную машину: все это не принесет вам счастья, пока в ы не научитесь бережно, терпеливо, ласково относиться к себе уже сейчас. Не сравнивайте себя ни с кем, не соперничайте – у всех разные жизненные дороги, и ваша задача – достойно пройти свою. Вы не лучше и не хуже остальных – вы просто другой. Осознайте свою уникальность и полюбите ее.
Научитесь генерировать и взращивать в себе чувство радости. Позитивное мышление всегда поможет вам сохранить хорошее настроение. Вне зависимости от того, что происходит вокруг, старайтесь концентрировать свое внимание на приятных моментах и вещах. Полной темноты никогда не бывает, в жизни всегда можно отыскать яркий лучик света. Тяжело на душе – послушайте любимую песню, позвоните другу, подумайте о заветной мечте, вспомните то, что когда-то поддерживало вас и обязательно взбодрит сейчас. Отчаяние может быстро исчезнуть, если вы откажетесь о нем думать. Вы являетесь счастливым человеком просто по праву своего рождения на этой земле.
Будьте благодарны судьбе, двигаясь по дороге к своему счастью. Эта дорога у каждого человека своя. Помните, что человеческая благодарность обладает могущественной силой творить, создавать успешную жизнь.
Вне всяких сомнений, у каждого из нас всегда найдется причина для благодарности. Учитесь благодарить свою жизнь за мелочи, и вскоре вы будете говорить судьбе спасибо за весьма значимые вещи.
Подводя краткий итог по этому пункту, можно сказать, что ощущение счастья обязательно придет к вам, если вы будете помнить следующее:
• вы сами хозяин своей жизни, а следовательно, и своего счастья;
• ваш образ – это всего лишь образ, результат работы вашего сознания, его в любой момент можно изменить с помощью новых убеждений;
• учитесь любить себя без всяких условий уже в настоящем;
• перестаньте постоянно сравнивать себя с другими людьми и их достижениями;
• счасть е приходит к счастливым людям, поэтому не пропускайте любую возможность поддержания у себя хорошего настроения, ощущения приподнятости духа;
• откажитесь от негативизма, скажите «да» позитивному мышлению;
• умейте благодарить жизнь даже за самые малые подарки, за самый незначительный успех. Жизнь будет к вам внимательна, если вы будете внимательны к ней;
• быть несчастным или счастливым – это не выбор судьбы, это ваш собственный выбор.
В вашем сердце и в жизни достаточно места для счастья и любви, позвольте процветанию занять свое законное место. Этот процесс, безусловно, требует дисциплинированной работы над собой, над своим внутренним миром, но когда цель – собственное счастье, можно приложить к этому некоторые усилия.
2. Мир в душе, ни с кем не «воюем» - дома, на улице, на работе и т. д. С собою тоже не боремся и не ругаем себя. Любая борьба – это сильный стресс для об еих сторон, это подавление одной стороны и отнятие сил у другой. Все это весьма негативно отражается на самочувствии и творческой деятельности.
3. Никому не завидуем. Вы уникальный человек, со своими прекрасными и неповторимыми природными особенностями, которые еще не осознаны вами и не используются в полной мере.
4. Никого ни в чем не обвиняем. Никто не виноват в ваших проблемах. Все, что происходит с вами, именно вы притянули в жизнь своим поведением и желаниями. А происходящее с близкими людьми притянуто ими. Вы, и только вы, создаете для себя все хорошее и все плохое. Вы ответственны за то, кем являетесь на сегодняшний день.
5. Не пытаемся изменить других людей в лучшую сторону. Хотите изменить весь мир - начните с себя. Посмотрите на себя со стороны, лучше узнайте себя, свою подлинную суть – и начните меняться. Ежедневно, настойчиво и упорно работайте над своим совершенствованием. И только тогда, когда вы начн ете меняться, вместе с вами начнет разительно меняться ваше окружение и мир в целом. Многие люди, которые сейчас находятся рядом, просто исчезнут из вашего окружения. Рядом появятся другие люди, которые разделяют ваши взгляды на жизнь. Помните, что подобное притягивает подобное.
6. Никого не жалеем, в том числе и себя. Помните: жалость подавляет и принижает вас и тех, кого вы жалеете. Жалость отнимает силы у обеих сторон. Замените свою жалость любовью, доброжелательной и искренней, что позволит сохранить силы и достойно выйти из любой ситуации.
7. Высоко поднимаем планку самооценки и ставим себя на первое место (но не зазнаемся). Совсем не обязательно говорить своим родным и близким, что с этого момента вы ставите свои интересы на первое место. Они вас просто не захотят понять. Тем не менее ваши личные интересы должны постоянно находиться на первом месте. Только так можно многого добиться в этой жизни, в том числе хорошего здоровья, успехов в работе и личного счастья. Помните: ваша самооценка постоянно находится с вами и воздействует на ваше сознание и тело, меняя вас в ту или иную сторону. А оценки других людей для вас являются сиюминутными и далеко не всегда объективными.
8. Любим себя. Как можно себя ценить и любить меньше, чем предметы быта и личные вещи? Любя свое тело, человек не позволит относиться к нему хуже, чем к любимой вещи, к домашним цветам или животным. Понятие «любить себя» является широким и многогранным. Любя себя, человек не позволит наносить вред своему телу, не позволит разрушать его своими негативными действиями и привычками. Полюбить себя – значит поверить в возможности своего организма избавиться от вредных привычек (курение, спиртное и т. п.), от конфликтов с окружающими людьми, от отрицательных эмоций.
9. Любое важное событие в своей жизни воспринимаем как ступеньку обучения, познания окружающего мира. Что бы ни случилось в вашей жизни, не говорите себе : «За что?..» Это идет земная учеба в вашей жизни, порой жесткая и очень суровая. Делайте для себя выводы и смело идите дальше, не оглядываясь назад. «Охи» и «ахи» – это не для вас. Только вперед. Именно так можно добиться больших успехов в своей жизни, жить долго и счастливо.
10. Учимся расслаблять свое тело и разум в любой ситуации. Расслабляйте свое тело и сознание простыми, но эффективными методами, например концентрацией внимания в течение нескольких минут на своем спокойном и размеренном дыхании.
11. Живем здесь и сейчас. Ваше физическое тело живет здесь и сейчас. Это простая, но очень важная истина. Понимание ее глубины может качественно изменить жизнь в лучшую сторону. Ваше тело хочет, чтобы его поили, кормили, любили и лелеяли здесь и сейчас, а не в ближайшем будущем или в прошлом. Многие люди теряют здоровье и пропускают свое счастье только потому, что заняты сожалениями об упущенных возможностях в своем прошлом или слишком увлекают ся детализацией прекрасного будущего. Долголетие, здоровье, творчество, любовь и счастье живут только в настоящем, здесь и сейчас. Умейте ценить каждый миг своей жизни.
Только жизнь в текущем моменте времени, с любовью к себе и внешнему миру позволяет человеку создать то светлое будущее, которое он хочет иметь. Каждое мгновение жизни здесь и сейчас означает ваш выбор в будущем и формирует вашу судьбу и здоровье.
12. Корректируем свои мысли, эмоции и чувства в позитивную сторону. Думаем только о хорошем, говорим о хорошем и делаем только хорошее для себя и других людей! Только так можно навсегда избавиться от проблем со здоровьем и бытом.
Недавно ученые создали специальный микроскоп, с помощью которого при увеличении в 1320 раз видно, как живые клетки тела человека излучают слабый свет, а сверхчувствительные микрофоны позволили услышать легкий фоновый звук, издаваемый живыми клетками. Ученые поэтапно и кропотливо замерили зависимость интенсивности светового излучения клеток от различных эмоциональных состояний человека и составили таблицу этой зависимости в люксах. Однако разобраться в такой таблице неподготовленному человеку довольно сложно.
Для лучшего восприятия этой информации я перевел в относительное состояние (в проценты) полученную учеными интенсивность излучения света клетками человека и дал объяснение практической значимости этого явления. Оказалось, что в зависимости от эмоционального состояния человека световая составляющая его клеток может сильно изменяться.
Например, если у вас ровное психоэмоциональное состояние, то примерно 25% поверхности каждой клетки вашего тела будут излучать в окружающую среду фотоны света. А 75% поверхности клеток находятся в «темном» состоянии.
Что такое свет и темнота в излучении клеток тела человека? Вначале поговорим о свете. Максимально возможное излучение высокочастотного света биологи ческим существом означает его нахождение в состоянии идеального здоровья и максимального энергетического контакта со всей Вселенной. Если излучение света клетками тела человека составляет 100%, это означает, что перед вами находится божественно просветленный, воистину светлый человек, обладающий огромными возможностями положительного воздействия на себя и на окружающий мир.
А что такое темнота в живых клетках человека? Темнота означает низкочастотные вибрации отдельных частей клеток. Темнота соответствует вибрациям бактерий и вирусов, находящихся в теле человека. Чем больше темноты в клетках, тем лучшие условия создаются в организме для быстрого размножения чуждых нам бактерий, вирусов и т. п.
При подавленном эмоциональном состоянии клетки тела человека излучают всего лишь 3% света, а в радостном состоянии эти же клетки излучают 30% света.
Это поистине эпохальное открытие позволит в скором времени начать измерять состояние здоровья и духовности человека по процентному содержанию света в его клетках и по яркости их свечения.
Улучшения состояния здоровья, повышения работоспособности и развития творческих способностей можно достичь только через умение быстро избавляться от стрессов и негативных мыслей. Это позволяет неуклонно повышать процентное содержание света в клетках вашего тела и активно продвигаться к состоянию идеального здоровья и счастливой жизни.
13. Выполняем несложные специальные физические упражнения. Найдите для себя простые, но эффективные физические упражнения. Например, упражнение на освобождение от негативных эмоций при помощи улыбки, радостной и естественной. Оно позволяет быстро избавляться от стресса и негативных эмоций в повседневной жизни и дает человеку власть над его эмоциями. Улыбка дает нам возможность быть в гармонии с собой и окружающим миром.
14. Обращаем внимание на то, что и как мы едим.
Во-первых, во время еды думаем и говорим только о хорошем.
Во-вторых, регулярно принимаем чистую питьевую воду, а не ее многочисленные заменители в виде консервированных соков, сладких напитков и т. п.
В-третьих, не переедаем. Помните, что на переваривание пищи организм тратит много сил. Но только 5% съеденной пищи усваиваются организмом, остальные же 95% пищи не усваиваются, а выбрасываются наружу как отходы.
В-четвертых, все хорошо в меру. Например, ежедневное поедание сырой капусты активными вегетарианцами ведет к сбоям в работе щитовидной железы, ибо в сырой капусте в малых дозах содержится сильнейший яд растительного происхождения, который разрушается при любой обработке капусты: при варке, засолке, квашении и т. п.
Все эти весьма простые рекомендации составляют психологическую основу здоровья каждого человека. Это краткий путь к истинному здоровью и счастью.
Пр имечание. В процессе занятий я более подробно рассказал Елене о сути первой рекомендации – утром сказать себе: «Я выбираю радость на весь день». Тонкий смысл этого действия заключается в следующем.
Сознание и подсознание человека не дружат между собой. Любые слова, сказанные человеком, его подсознание удерживает 5–7 секунд, а затем отвергает как неприемлемые для поддержания жизнедеятельности организма. Это связано с тем, что подсознание «записывает» в своей памяти только слова и ситуации, которые наполнены яркими эмоциями. Например, ребенок сунул по незнанию руку в кастрюлю с горячей водой и получил ожог. На сильнейшем эмоциональном уровне от полученного ожога эта информация на много лет четко запишется в сознании ребенка. А если просто сказать ребенку, что не следует трогать кастрюлю с горячей водой, то очень скоро он полностью забудет об этом. Такова наша природа, так устроено наше сознание.
Есть еще один метод. Можно «подловить» момент, ко гда открыт доступ к подсознанию, - это момент пробуждения человека, когда подсознание еще не полностью отключилось, а сознание уже работает. В момент встречи сознания и подсознания произнесенная вслух или мысленно краткая фраза «Я выбираю радость на весь день» буквально записывается в подсознании человека. А если эти слова дополнить улыбкой и чувством бесконечной радости счастливого человека (создайте это ощущение искусственно), тогда эффект от запоминания значительно возрастет.
После такого разъяснения Елена несколько раз произнесла вслух: «Я выбираю радость на весь день». На ее лице, впервые за последнее время, появилась естественная улыбка, а глаза чуть-чуть засияли.
Для того чтобы закрепить первые успехи и придать Елене больше уверенности в себе, мы пошли дальше: перешли к изучению и выполнению упражнения под названием «хлест руками». Это упражнение позволяет не только активно снять напряжение с сознания и мышц, но и ввести в свое с ознание четкую позитивную программу.
www.e-reading.ws Интересно, есть ли сейчас люди в нашей стране, которые бы не знали о наступившем кризисе? Даже дети на песочной площадке играют в экономический застой. Очень на многих он, безусловно, сказался, и никак не положительным образом. И, наверное, каждый из нас, может написать немалый перечень трудностей, которые возникли с его приходом.Давайте попробуем найти способы борьбы с кризисом, хотя бы для себя.
Чем больше мы будем жаловаться, и обсуждать, как же нам не везёт, тем больших размеров будут набирать наши трудности и проблемы. Дело тут в том, что, то, о чём мы больше всего говорим, и происходит на самом деле. Давайте же выделим это как первое правило:
1. Прекратить трубить на всех углах о своих бедах, а наоборот, делиться своими победами и приятностями, даже самыми незначительными.
Попробуйте ради эксперимента, рассказывать своим близким и друзьям о том хорошем, что бы вам хотелось получить или, чтобы оно свершилось. Говорите об этом так, как будто бы это у вас уже есть. Дабы не прослыть лгуном, не рассказывайте людям о том, что у вас появился Порш или вилла на берегу кораллового моря. Говорите о чём-нибудь таком, чего нельзя увидеть сразу. Ну, к примеру, расскажите что вы выиграли в лотерею 50 грн. Конечно, для того чтобы это произошло, начните в лотерею играть. Не ждите скорого результата. Просто рассказывайте об этом как уже, о свершённом деле, переживайте всякий раз положительные эмоции и трепетное ожидание. Возможно, сумма выигрыша составит не 50 грн. а 10 грн. Но возможно сумма и увеличится, всё зависит от того, как сильно вы это переживёте. Переживёте именно все те эмоции, которые только ждут вас впереди. Это тонкая грань, и конечно не простая, ведь следует ощутить и прожить то, что ещё не свершилось. А что вы переживаете, когда рассказываете своим знакомым о том, что из-за кризиса вы не получаете зарплату или того хуже, вас вовсе уволили с работы? Вы переживаете свой стресс всё сильнее и сильнее, увеличивая тем самым силу и мощь проблемы. Именно поэтому, у вас начинается вереница мелких неполадок в жизни, а может и не только мелких. Обидно то, что это происходит системно, каждый день, по определённой порции негатива сыплется на вашу голову. А как вы с этим боретесь? Всё больше и больше плачетесь соседям и друзьям, какой же вы невезунчик и что эта страна вас доведёт. Тут мы смело можем выделить второе правило:
2. Кризис - в головах. Бороться с ним нужно, начиная оттуда
Многим не понравится эта версия. Не понравится потому, что лучше в своих бедах обвинить всех на свете, а с себя ответственность скинуть. Мол, это не я сам себе кризис устроил, это представители власти никак не поделят кусок пирога, а от этого мы все страдаем. Но неужели у вас нет знакомых, которым кризис абсолютно по барабану? Их может быть два или один, а может быть это даже знакомый ваших знакомых, но такие люди точно есть. Поверьте, это никак не зависит от их достатка. То, что у них миллионы под подушкой, греют, конечно, душу, но страх от того, что в случае потери они потеряют миллионы, а не копейки, во много раз ухудшает самочувствие. Как же быть и как бороться со своей же головой? Снять с себя позицию я жертва . Никакая вы не жертва, вы, а вообще властелин мира. И всё у вас как в сказке хочу пряники ем, хочу компот пью . То, что вы хотите, то и делаете. Выделяем тут третье правило:
3. Я не жертва ситуации. Я её диктатор
Всё зависит от уверенности. Если вы точно усвоите это правило, то так и будете себя вести, а соответственно, так и будет происходить. Вы не купили в троллейбусе талон, и тут как тут контроль, который рад содрать с вас штраф. Конечно же, рад, штрафы теперь такие прибыльные. Снимите с себя маску жертвы, и перейдите в наступление. Что вы будете делать, зависит только от вашей фантазии. Вы можете начать сострадательно рассказывать о том, что (опять-таки) кризис, вас уволили с работы и денег на проезд нету. Потому что проезд в общественном транспорте, скоро сравнится с проездом в такси-лимузине. А поскольку пенсионный вам ещё не выдали, бесплатно ездить официально вы ещё не можете. А быть может, вам вздумается повиснуть на поручнях вниз головой и выкрикивать какие-нибудь лозунги, на подобие: долой плату за проезд! Тут сыграет лишь ваша фантазия, важно то, чтобы в эти минуты вы ощущали себя хозяином ситуации. И тогда никто не сможет свернуть вас с истинного пути. А истин тот путь, который вы задали себе сами. Когда вы чувствуете себя хозяином положения, вы можете всё. Проблема в том, что для такого ощущения нам необходим какой-то стимул. Сейчас все думают, что этим стимулом выступают деньги. Потом идёт власть и статус. Именно поэтому все мы хотим иметь побольше зелёных под матрасом. Ведь всё идёт по принципу пирамиды. На самом нижнем уровне лежит удовлетворение необходимых потребностей: еда, сон, туалет. Потом более весёлые вещи: одежда, развлечения. После желание быть значимым и влиятельным на самом верху пирамиды лежит желание абсолютной власти. Поэтому мы заранее можем сказать, чего захотим, когда получим что-либо. Сегодня мы просто поели, что бы у нас были силы, а завтра мы захотим пойти в дорогой ресторан, чтобы получить удовольствие, помимо насыщения. И тут мы можем выделить четвёртое правило:
4. Преодолев все трудности, мы получим желаемое
В любой ситуации, всегда и везде мы должны быть в движении. Движение это жизнь. Отсутствие движения приводит к депрессии. А в случае данного кризиса депрессия лишь усугубит положение. Конечно, мы должны быть отдохнувшими, чтобы у нас были силы для преодоления всех трудностей. Используйте это время, чтобы подтянуть хвосты . Наверняка у вас скопилось много дел, на завершение которых не хватало времени. Теперь время есть, и осталось только начать. Не ждите ничего, вы сами себе движущая сила. Из этого мы выделим последнее, но не менее важное правило:
5. Я есть движение. Благодаря этому я смогу всё преодолеть
Нам иногда бывает так тяжело на душе, что кажется неважным всё, что происходит вокруг. Хочется лечь, включить телевизор, и бесцельно переключать каналы. Это состояние апатии приходит к нам вследствие какого-либо стресса. И опять-таки, для того, чтобы жить, нужно встать и начать действовать. Для того, чтобы хоть как-то себя расшевелить, детально и главное оптимистично нарисуйте перспективы, которые ожидают вас в итоге. Поярче и покрасочней представьте себе своё будущее. Но в этих картинках не рисуйте джина из бутылки. Всё это плоды ваших трудов. Вы сами кузнец своего счастья. Так вставайте же и куйте! И смело смейтесь кризису в лицо. Только тогда он отступит от вас!
Метапрограммирование.

Введение в основы шаблонов выражений
Шаблоны были введены в язык программирования C++ как средство выражения параметризованных типов. Примером параметризованного типа является список, для которого вы не хотите реализовывать отдельные версии для каждого типа хранимых элементов. Вместо этого вы хотите предусмотреть единственную реализацию списка (шаблон), которая использует "заполнитель" типа элементов (параметр шаблона), при помощи которого компилятор может генерировать различные классы списка (экземпляры шаблонов).
Сегодня C++-шаблоны используются совершенно неожиданным для их создателей образом. Шаблонное программирование включает в себя такие методики как обобщенное программирование, вычисления во время компиляции, библиотеки шаблонных выражений, шаблонное метапрограммирование, порождающее программирование и этот список можно продолжать. В этой статье мы хотим объяснить некоторые принципы шаблонов выражений, в частности методы программирования, используемые для создания библиотек шаблонов выражений.
Заметим сразу: библиотеки шаблонов выражений сложны для понимания. По этой причине почти каждое объяснение шаблонов выражений, которые мы прочитали до сих пор, было довольно непростым. Амбициозная цель этой статьи пояснить сложные вопросы так, чтобы они могли быть легко поняты, без погружения во все детали, с чем бы вы столкнулись в противном случае, например, при изучении исходного кода библиотеки шаблонов. Мы постараемся передать сущность некоторых принципов шаблонов выражений, однако полный охват всех аспектов выходит за рамки данной статьи.
Как все начиналось...
Я очень хорошо помню тот день, когда мой коллега Эрвин Унрух (Erwin Unruh), пришел на одно из заседаний комитета стандартизации С++ и гордо представил программу, которая не компилировалась, однако при этом она расчитывала простые числа. Программа при компиляции выдавала сообщения об ошибках, и с каждым сообщением об ошибке печаталось следующее простое число. Конечно, бессмысленно писать программы, которые не компилируются, но эта программа была преднамеренно настроена на невозможность компиляции для демонстрации вычислений во время компиляции. Исполняемого файла не было. Вычисления простых чисел происходили за счет побочного эффекта компиляции.
Эта маленькая и простая программа в последующие годы породила лавину исследований и экспериментов, которые привели к созданию того, что известно в наши дни как шаблонное метапрограммирование. В этой статье мы обсудим некоторые из полученных методов и принципов программирования.
Как работает шаблонное метапрограммирование?
В принципе, расчет простых чисел и многие из методов, которые мы объясним в этой статье, основываются на том факте, что конкретизация шаблонов является рекурсивным процессом. Когда компилятор конкретизирует шаблон, он может обнаружить, что для конкретизации этого шаблона, возможно, потребуется конкретизация другого шаблона. Затем он конкретизирует другой шаблон, которому может потребоваться конкретизация еще одного шаблона и так далее. Многие из методик шаблонного метапрограммирования используют рекурсивную природу процесса конкретизации шаблонов для выполнения рекурсивных вычислений.
Первый пример вычислений во время компиляции факториал
В первом примере давайте подсчитаем факториал во время этапа компиляции. Факториал n (математическая нотация которого n!) является продуктом всего ряда от 1 до n, факториал 0 равен 1. Обычно, без использования шаблонов, вы должны подсчитать факториал с помощью рекурсивных вызовов функций. Вот возможный вариант реализации:
cpp-reference.ruДавайте теперь переключим наше внимание с программ текстовой подстановки общего назначения на узкоспециализированные генераторы кода. Мы рассмотрим различные доступные программы, пример использования и создадим генератор кода.

Системы GNU/Linux поставляются с несколькими программами для написания программ. Возможно наиболее популярны:
Эти программы генерируют тексты для языка C. Вы можете удивиться, почему они реализованы в виде генераторов кода, а не в виде функций. Тому есть несколько причин:
Каждое из этих инструментальных средств предназначено для создания конкретного типа программ. Bison используется для генерирования синтаксических анализаторов; Flex - для генерирования лексических анализаторов. Другие средства посвящены, в основном, автоматизации конкретных аспектов программирования.
Например, интегрирование методов доступа к базе данных в императивные языки программирования часто является рутинной работой. Для ее облегчения и стандартизации предназначен Embedded SQL - система метапрограммирования, используемая для простого комбинирования доступа к базе данных и C.
Хотя существует немало доступных библиотек, позволяющих обращаться к базам данных в C, использование такого генератора кода как Embedded SQL делает комбинирование C и доступа к базе данных намного более легким путем объединения SQL-сущностей в C в качестве расширения языка. Многие реализации Embedded SQL, однако, в основном являются простыми специализированными макропроцессорами, генерирующими обычные C-программы. Тем не менее, использование Embedded SQL делает для программиста доступ к базе данных более естественным, интуитивным и свободным от ошибок по сравнению с прямым использованием библиотек. При помощи Embedded SQL запутанность программирования баз данных маскируется макроязыком.
Чтобы увидеть генератор кода в работе, давайте рассмотрим короткую программу на Embedded SQL. Для этого нам необходим процессор Embedded SQL. База данных PostgreSQL поставляется с компилятором Embedded SQL - ecpg. Для запуска этой программы вы должны создать базу данных в PostgreSQL под названием "test". Затем в этой базе данных выполните следующие команды:
Листинг 6.Сценарий создания баз данных для примера программы
www.ibm.comМетапрограммирование шаблонов (template metaprogramming – TMP) – это процесс написания основанных на шаблонах программ на C++, исполняемых во время компиляции. На минуту задумайтесь об этом: шаблонная метапрограмма – это программа, написанная на C++, которая исполняется внутри компилятора C+ +. Когда TMP-программа завершает исполнение, ее результат – фрагменты кода на C++, конкретизированные из шаблонов, – компилируется как обычно.
Если эта идея не поразила вас до глубины души, значит, вы недостаточно напряженно думали о ней.
C++ не предназначался для метапрограммирования шаблонов, но с тех пор, как технология TMP была открыта в начале 90-х годов, она оказалась настолько полезной, что, вероятно, и в сам язык, и в стандартную библиотеку будут включены расширения, облегчающие работу с TMP. Да, TMP было именно открыто, а не придумано. Средства, лежащие в основе TMP, появились в C++ вместе с шаблонами. Нужно было только, чтобы кто-то заметил, как они могут быть использованы изобретательным и неожиданным образом.
Технология TMP дает два преимущества. Во-первых, она позволяет делать такие вещи, которые иными способами сделать было бы трудно либо вообще невозможно. Во-вторых, поскольку шаблонные метапрограммы исполняются во время компиляции C++, они могут переместить часть работы со стадии исполнения на стадию компиляции. В частности, некоторые ошибки, которые обычно всплывают во время исполнения, можно было бы обнаружить при компиляции. Другое преимущество – это то, что программы C++, написанные с использованием TMP, можно сделать эффективными почти во всех смыслах: компактность исполняемого, код быстродействия, потребления памяти. Но коль скоро часть работы переносится на стадию компиляции, то, очевидно, компиляция займет больше времени. Для компиляции программ, в которых применяется технология TMP, может потребоваться намного больше времени, чем для компиляции аналогичных программ, написанных без применения TMP.
Рассмотрим псевдокод шаблонной функции advance, представленный на стр. 227 (см. правило 47; возможно, имеет смысл перечитать это правило сейчас, поскольку ниже я предполагаю, что вы знакомы с изложенным в нем материалом). Я выделил в этом фрагменте часть, написанную на псевдокоде:
template
void advance(IterT& iter, DistT d)
{
if (iter является итератором с произвольным доступом) {
iter += d; // использовать итераторную арифметику
} // для итераторов с произвольным доступом
else {
if(d>=0) {while (d–) ++iter;} // вызывать ++ или – в цикле
else {while(d++) –iter;} // для итераторов других категорий
}
}
Мы можем использовать typeid, чтобы заменить псевдокод реальным кодом. Тогда задача будет решена «нормальным» для C++ способом – вся работа выполняется во время исполнения:
template
void advance(IterT& iter, DistT d)
{
if (typeid(typename std::iterator_traits::iterator_category)==
typeid(std::random_access_iterator_tag))
iter += d; // использовать итеративную арифметику
} // для итераторов с произвольным доступом
else {
if(d>=0) {while (d–) ++iter;} // вызывать ++ или – в цикле
else {while(d++) –iter;} // для итераторов других категорий
}
}
В правиле 47 отмечено, что подход, основанный на typeid, менее эффективен, чем при использовании классов-характеристик, поскольку в этом случае: (1) проверка типа происходит во время исполнения, а не во время компиляции, и (2) код, выполняющий проверку типа, должен быть включен в исполняемую программу. Фактически этот пример показывает, как технология TMP может порождать более эффективные программы на C++, потому что характеристики – это и есть частный случай TMP. Напомню, что характеристики делают возможным вычисление выражения if…else во время компиляции.
Я уже отмечал выше, что некоторые вещи технология TMP позволяет сделать проще, чем «нормальный» C++, и advance можно считать иллюстраций этого утверждения. В правиле 47 упоминается о том, что основанная на typeid реализация advance может привести к проблемам во время компиляции, и вот вам пример такой ситуации:
std::list::iterator iter;
...
advance(iter, 10); // сдвинуть iter на 10 элементов вперед
// не скомпилируется для приведенной
// выше реализации
Рассмотрим версию advance, которая будет сгенерирована для этого вызова. После подстановки типов iter и 10 в качестве параметров шаблона IterT и DistT мы получим следующее:
void advance(std::list::iterator& iter, int d)
{
if (typeid(std::iterator_traits::iterator>::iterator_category)==
typeid(std::random_access_iterator_tag))
iter += d; // ошибка!
}
else {
if(d>=0) {while (d–) ++iter;}
else {while(d++) –iter;}
}
}
Проблема в выделенной строке, где встречается оператор +=. В данном случае мы пытаемся использовать += для типа list::iterator, но list::iterator – это двунаправленный итератор (см. правило 47), поэтому он не поддерживает +=. Оператор += поддерживают только итераторы с произвольным доступом. Мы знаем, что никогда не попытаемся исполнить предложение, содержащее +=, потому что для list::iterator проверка с привлечением typeid никогда не выполнится успешно, но компилятор-то обязан гарантировать, что весь исходный код корректен, даже если он никогда не исполняется, а «iter += d» – некорректный код в случае, когда iter не является итератором с произвольным доступом. Решение же на основе технологии TMP предполагает, что код для разных типов вынесен в разные функции, каждая из которых использует только операции, применимые к типам, для которых она написана.
Было доказано, что технология TMP представляет собой полную машину Тьюринга, то есть обладает достаточной мощью для любых вычислений. Используя TMP, вы можете объявлять переменные, выполнять циклы, писать и вызывать функции и т. д. Но такие конструкции выглядят совершенно иначе, чем их аналоги из «нормального» C++. Например, в правиле 47 показано, как в TMP условные предложения if…else выражаются с помощью шаблонов и их специализаций. Но такие конструкции можно назвать «TMP уровня ассемблера». В библиотеках для работы с TMP (например, MPL из Boost – см. правило 55) предлагается более высокоуровневый синтаксис, хотя его также нельзя принять за «нормальный» С++.
Чтобы взглянуть на TMP с другого боку, посмотрим, как там выглядят циклы. Технология TMP не предоставляет настоящих циклических конструкций, поэтому цикл моделируется с помощью рекурсии. (Если вы не очень уверенно владеете рекурсией, придется освоиться с ней прежде, чем приступать к использованию TMP. Ведь TMP – по существу функциональный язык, а для таких языков рекурсия – то же, что телевидение для американской поп-культуры – неотъемлемая принадлежность.) Но и рекурсия-то не совсем обычная, поскольку при реализации циклов TMP нет рекурсивных вызовов функций, а есть рекурсивные конкретизации шаблонов.
Аналогом программы «Hello World» на TMP является вычисление факториала во время компиляции. Конечно, она, как и «Hello World», не поразит воображение, но обе полезны для демонстрации базовых возможностей языка. Вычисление факториала с помощью TMP сводится к последовательности рекурсивных конкретизаций шаблона. Кроме того, демонстрируется один из способов создания и использования переменных в TMP. Смотрите:
template // общий случай: значение Factorial – это
struct Factorial { // произведение n и Factorial
enum { value = n*Factorial::value };
};
template<> // частный случай: значение Factorial –
struct Factorial { // это 1
enum { value = 1 };
};
Имея такую шаблонную метапрограмму (на самом деле просто единственную шаблонную метафункцию Factorial), вы получаете значение факториала n, обращаясь к Factorial::value.
Циклическая часть кода возникает там, где конкретизация шаблона Factorial ссылается на конкретизацию шаблона Factorial. Как во всякой рекурсивной программе, здесь есть особый случай, прекращающий рекурсию. В данном случае это специализация шаблона Factorial.
Каждая конкретизация шаблона Factorial является структурой struct, и в каждой структуре используется «трюк с перечислением» (см. правило 2) для объявления переменной TMP с именем value. В переменной value хранится текущее значение факториала. Если бы в TMP были настоящие циклы, то значение value обновлялось бы на каждой итерации цикла. Но поскольку в TMP место циклов заменяет рекурсивная конкретизация шаблонов, то каждая конкретизация получает свою собственную копию value, и значение копии соответствует «итерации цикла».
Использовать Factorial можно следующим образом:
int main()
{
std::cout ::value; // печатается 120
std::cout ::value; // печатается 3628800
}
Если вы находите описанный прием элегантным, значит, вы стали на путь превращения в метапрограммиста шаблонов. Если же все эти шаблоны, специализации, рекурсивные конкретизации, трюк с перечислением и необходимость набирать нечто вроде Factorial::value не вызывают у вас восторга, стало быть, вы вполне нормальный программист C++.
Конечно, шаблон Factorial в такой же мере демонстрирует полезность TMP, как «Hello World» – полезность любого обычного языка программирования. Чтобы понять, почему о TMP стоит знать, важно представлять себе, чего можно достичь с помощью этой технологии. Вот три примера:
• Обеспечение корректности единиц измерения. В научных и инженерных приложениях важно, чтобы единицы измерения (например, массы, расстояния, времени и т. п.) правильно сочетались. Присваивание переменной, представляющей массу, значения переменной, представляющей скорость, – это ошибка, но деление переменной расстояния на переменную времени и присваивание результата переменной скорости правильно. Используя TMP, можно обеспечить (во время компиляции), что все комбинации единиц измерения в программе будут корректны, независимо от того, насколько сложны вычисления. (Это пример того, как можно использовать TMP для ранней диагностики ошибок.) Одним интересным аспектом такого использования TMP может быть поддержка вычисления дробных степеней. Смысл в том, чтобы дроби сокращались во время компиляции, то есть чтобы компилятор мог подтвердить, например, что единица времени в степени 1/2 – это то же самое, что единица времени в степени 4/8.
• Оптимизация операций с матрицами. В правиле 21 объясняется, что некоторые функции, включая operator*, должны возвращать новые объекты, а в правиле 44 представлен класс SquareMatrix, поэтому рассмотрим такой код:
typedef SquareMatrix BigMatrix;
BigMatrix m1, m2, m3, m4, m5; // создать матрицы
... // и присвоить им значения
BigMatrix result = m1 * m2 * m3 * m4 * m5; // вычислить произведение
Вычисление result «нормальным» способом приводит к созданию четырех временных матриц, по одной для каждого вызова operator*. Более того, независимые операции умножения порождают последовательность из четырех циклов по элементам матрицы. Но применение передовой шаблонной технологии, тесно связанной с TMP и получившей название шаблоны выражений (expression templates), позволяет избежать создания временных объектов и объединить циклы, причем все это без изменения приведенного выше пользовательского кода. В результате программа требует меньше памяти и выполняется значительно быстрее.
• Генерация специализированных реализаций паттернов проектирования. Паттерны проектирования, подобные Strategy (см. правило 35), Observer, Visitor и т. п., могут быть реализованы многими способами. Используя основанную на TMP технологию, называемую проектирование на основе политик (policy-based design), можно создавать шаблоны, представляющие независимые проектные решения («политики»), которые могут быть соответствующим образом скомбинированы для порождения реализаций паттернов с заданным поведением. Например, эта техника применялась для того, чтобы из нескольких шаблонов, реализующих различное поведение «интеллектуальных» указателей, породить (во время компиляции) любой из сотен разных типов «интеллектуальных» указателей. В результате обобщения, выходящего за рамки привычных программных конструкций, к примеру паттернов проектирования и «интеллектуальных» указателей, эта технология ложится в основу так называемого порождающего программирования (generative programming).
Технология TMP предназначена не для всех. Применяемый в ней синтаксис интуитивно не очевиден, а поддерживающий инструментарий не развит. (Отладчики для шаблонных метапрограмм? Ну насмешили, право!) Поскольку это вспомогательный язык, открытый сравнительно недавно, то применяемые в нем соглашения носят пока экспериментальный характер. Тем не менее повышение эффективности за счет переноса части со стадии исполнения на стадию компиляции может оказаться значительным, а возможность выразить поведение, которое трудно или невозможно реализовать во время исполнения, также весьма привлекательно.
Поддержка TMP растет. Вероятно, в следующей версии C++ будет реализована явная поддержка этой технологии, в TR1 это уже декларировано (см. правило 54). Начали появляться книги, посвященные этой теме, а информация о TMP в Internet становится все богаче. Видимо, TMP никогда не станет главным направлением развития, но для некоторых программистов (особенно разработчиков библиотек) она почти наверняка займет важное место.
www.e-reading.ws
Целью этой статьи есть привлечение внимания широкой ИТ-шной общественности к метапрограммированию и всем его многочисленным формам и техникам. Я постарался собрать классификацию всего, что знаю по этой теме, и показать ее применимость не только в умозрительных задачах, но и в разработке рядовых приложений. Но это скорее план для дальнейшего изучения и, я надеюсь, толчек для более активного обсуждения.
Итак, попробую дать альтернативное определение: метапрограммирование — это парадигма построения кода информационной системы с динамическим изменением поведения или структуры в зависимости от данных, действий пользователя или взаимодействия с другими системами. Задачи метапрограммирования: повышение абстракции кода и его гибкости, повторное использование, ускорение разработки, упрощение межсистемной интеграции. На самом деле, все мы в той или иной мере используем метапрограммирование, я даже сейчас могу вспомнить, как использовал его 15 лет назад, даже не подозревая как оно называется, тогда я еще не мог провести какой-либо классификации.
Какие мы знаем техники метапрограммирования (я надеюсь, что меня дополнят):
1. Компилируемые техники
1.1. Шаблоны, макросы и параметрический полиморфизмом. Для одного блока кода на этапе прекомпиляции генерируется несколько вариантов для разных типов параметров, это самый древний тип матапрограммирования.
1.2. Оптимизирующая прекомпиляция. Вычисление и оптимизация всех выражений и целых функций, которые не содержат переменных, на этапе компиляции или прекомпиляции.
1.3. Генераторы исходного кода для компилируемых языков. Перед компиляцией, на этапе сборки проекта, пакетным образом, по метаданным или без их, генерируются файлы, функции, классы, формы и т.д.
1.4. Написание своего предметно-ориентированного компилируемого языка (под определенный круг задач) — DSL (Domain-specific Programming Language).
2. Интерпретируемые техники
2.1. Эвалуациея кода (eval) из строковых переменных в интерпретируемых языках или языках, поддерживающих позднюю компиляцию в байт-код во время исполнения.
2.2. Написание своего специализированного интерпретируемого императивного языка под задачу (LOP — Language Oriented Programming).
2.3. Создание или использование декларативного языка, формата сериализации, специального синтаксиса или подмножества таких синтаксисов как XML, JSON, XAML и др.
2.4. Динамическое формирование и исполнение кода на языках запросов, например: SQL, XQuery, LINQ и др.
3. Гибридные техники
3.1. Интроспекция — предоставление доступа к внутренним структурам языка, типам данных, классам, функциям и т.д. Получение метаданных о структурах и обход их в цикле, или получение параметров функции как массива с возможностью анализировать класс каждого.
3.2. Динамическая интерпретация метамоделей. Специальная терминология для этого типа еще не разработана, точнее, она не устоялась, поэтому я опишу его подробнее ниже. А тут же дам приведу основную особенность: метамодель (модель предметной области на мета-языке) содержит как императивные так и декларативные компоненты влияющие друг на друга, а приложение становится «виртуальной машиной» для запуска метамодели.
3.3. Распределенная информационная система с динамическим связыванием на базе интерпретации метамоделей. Это применение пункта (3.2) к клиент-серверному или межсистемному взаимодействию.
Динамическая прикладная среда для бизнес-объектов
Теперь подробнее о динамической интерпретации мета-моделей. Как же императивные и декларативные конструкции влияют друг на друга? Понятно, мы анализируем декларативные описатели — некий формализованный формат данных, регулярную грамматику, которую можно без труда отпарсить регулярными выражениями, строковыми операциями или берем уже готовый парсер (например, JSON или XML). Таким образом, императивный алгоритм может менять структуру и последовательность исполнения кода. Но более того, мета-модель содержит еще и интерпретируемые скрипты для выражения бизнес-логики, скрипты получают уже развернутую в памяти декларативную часть мета-модели в свое полное распоряжение и могут обращаться к библиотеками. Тут все подумали про JavaScript конечно. Замечу, что скрипты из мета-модели не имеют доступа к интраспекции «виртуальной машины», а только к данным и метаданным, т.е. к модели предметной области. Такой скрипт может не знать даже, где он запущен, на клиенте или на сервере. Прикладная среда — это прослойка между прикладной моделью и операционной системой, позволяющая виртуализировать прикладное приложение, отвязывая его от системы и платформы.
Облачные технологии и виртуализация сейчас поднялись только до уровня инфраструктуры и платформы, следующий же, прикладной уровень практически не затронут. Все более четко проявляется потребность в новой архитектуре прикладных приложений. Сервисная архитектура (SOA), несомненно позволяет удовлетворить большинство нужд корпоративных систем, однако, в силу своей тяжеловесности, статичности и сложности разработки, только крупные компании могут себе позволить разработку ПО в этой технологии. Это обусловлено сложным технологическим циклом создания ПО, включающем проектирование, программирование, отладку, тестирование, сборку, доставку пользователю, инсталляцию, настройку и поддержку. Каждая новая версия прикладной системы требует множества шагов для того, чтобы стать доступной на рабочем месте пользователя. А переход между версиями сопряжен со сложностями конвертации данных и обратной совместимости форматов обмена данными и форматов файлов. Все это является результатом следующих особенностей архитектуры программных систем:
1. Смешивание в программном коде абстракций разного уровня внутри одного класса или модуля. Например, реализация чтения/записи из БД, бизнес-логики и визуализации в одном классе.
2. Высокая связанность кода двух смежных абстрактных слоев приложения. С односторонней или двухсторонней зависимостью слоев. Например, отдельный оконный АРМ или веб-интерфейс жестко привязаны к набору функций серверного API, их параметрам, типам данных и классам, а серверное приложение привязано жестко к структуре таблиц в базе данных. Часто, высокая связанность выражена в наличии зашитых в коде идентификаторов классов и функций, интерфейсов и параметров, таблиц и полей.
3. Сборочно-ориентированный жизненный цикл и компиляция бизнес-моделей в машинный код или в байт-код с последующий ручным развертыванием на сервере.
4. Жесткая фиксация интерфейсов между модулями системы и сетевых интерфейсов (по структуре, параметрам вызова и типам данных).
Применение динамической прикладной среды с использованием интерпретируемых метаданных при подготовке бизнес-моделей к запуску в «виртуальной машине», позволяет на резко сократить время на модификацию систем, вплоть до того, что сделать гибкую модификацию обычным штатным режимом работы прикладной системы, а не зашивать модель в компилируемый код. Тут кто-то может возразить, что производительность системы существенно упадет, но нет же, и вот почему: большая часть всего исполняемого кода во время работы такой системы, это алгоритмы, написанные на компилируемом языке и предоставляющие для мета-модеди API. Это, библиотека для парсинга, библиотека для обработки векторной графики, сетевые библиотеки и библиотеки визуальных компонентов. Все это откомпилировано, но оно абсолютно абстрагировано от задачи и составляет «виртуальную машину», а интерпретируемый код всего лишь связывает, «сшивает» весь этот набор инструментов таким образом, чтобы решить прикладную задачу.
Теперь инвертируем 4 причины негибкости систем с помощью различных техник метапрограммирования и получим рецепт для систем с динамической интерпретацией метамодели:
1. Разделение абстракций разного уровня в программном коде. Например, уровень визуальных компонентов, уровень сетевого транспорта, уровень библиотеки прикладных алгоритмов и уровень бизнес-модели могут не быть связаны друг с другом на этапе компиляции среды, однако, связи будут динамически построены на основе метаданных в момент запроса к соответствующему функционалу и закешированы до момента изменения метамодели.
2. Отсутствие прямых и обратных зависимостей в абстрактных слоях приложения, использование техник метапрограммирования, интраспекции, декларативных и активных языков для описания бизнес-объектов. При этом, внутренняя связанность классов внутри бизнес-модели может быть повышена.
3. Использование компиляции для уровня прикладной среды и принципа интерпретации для уровня бизнес-моделей. Для среды жизненный цикл остается сборочным, а вот бизнес-модель может изменяться хоть каждую минуту без повторного развертывания.
4. Введение динамических интерфейсов между модулями (описываемых декларативными языками) и сетевых интерфейсов поддерживающих интраспекцию на уровне сетевого протокола для взаимодействия приложений с динамической структурой и параметрами.
Итак, сама прикладная среда будет классическим приложением и должна проходить все этапы разработки и развертывания, однако, бизнес-модель, запущенная в среде, для повышения гибкости не должна компилироваться и инсталлироваться в компьютер, она развертывается динамически на этапе рантайма. Структуры данных и скрипты, подготовленные для исполнения лексером или даже преобразованные в байт-код, могут кешироваться в прикладной среде до тех пор, пока метамодель не будет изменена или пока не изменится отдельный класс или отдельный параметр метамодели. Первый запуск необходимой функции будет сопровождаться парсингом конструкций, и подготовкой нового байт-кода или конструкций данных, однако последующие операции не должны уступать в скорости по сравнению с машинным кодом.
Распределенная информационная система с динамическим связыванием
При взаимодействии двух и более систем через сетевые прикладные интерфейсы, динамическое связывание на основе интерпретации мета-модели позволит взаимодействовать прикладным информационным системам, которые ранее даже не предполагалось связывать. Передавая мета-модель по сети стороны не знают заранее структуру и параметры информационных объектов, и не привязаны жестко к именам функций и наборам параметров, при совершении межсистемных вызовов. Вместо этого, стороны знают язык мета-описания, позволяющий динамически интерпретировать данные и совершать вызовы, формируя параметры и интерпретируя ответы удаленной стороны.
Десерт
Ну и напоследок, ради того, чтобы потешить эстетическую сторону уважаемой аудитории, покажу маленький пример использования метапрограммирования для анимации в JavaScript. Недавно была статья про impress.js и как-то так совпало с тем, что я думал о подобном решении в разрезе своего помешательства на метапрограммировании и вот что получилось, см. живой пример. А вот код от него:
Императивная часть:
$(function() {
var Images = $("#sky div"), Timers = [];
Images.each(function() {
fly = function(Id,Range,Duration,Direction) {
var Way1 = {}, Way2 = {};
Way1[Direction] = '+='+Range;
Way2[Direction] = '-='+Range;
$('#'+Id).animate(Way1,Duration).animate(Way2,Duration);
}
var Image = $(this),
Id = Image.attr('id'),
Range = Image.attr('data-fly-range'),
Duration = parseInt(Image.attr('data-fly-duration')),
Direction = Image.attr('data-fly-direction');
Timers[Id] = setInterval('fly("'+Id+'","'+Range+'",'+Duration+',"'+Direction+'")',Duration*2);
fly(Id,Range,Duration,Direction);
});
});
Декларативная часть:
habrahabr.ru
Следующие статьи
- Острота зрения. Острые воспалительные заболевания орбиты. Острые заболевания век.
- Аккомодация. Бинокулярное зрение. Аккомодация. Большая советская энциклопедия. Активизация сексуальной энергии.
- Амблиопия. Амблиопия — ленивый глаз. Амблиопия и Астигматизм.
Комментариев пока нет!
Поделитесь своим мнением