<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7805620689744129134</id><updated>2012-02-05T19:13:41.269+03:00</updated><category term='будущее'/><category term='linux'/><category term='введение'/><category term='мобильные платформы'/><category term='android'/><category term='архитектура'/><category term='nokia'/><category term='vbox'/><category term='разработка'/><category term='mobile platform'/><category term='symbian'/><category term='языки'/><category term='debian'/><category term='философия'/><category term='специфика'/><category term='мобильная архитектура'/><category term='ubuntu'/><category term='mobile os'/><category term='small architecture'/><category term='фишки'/><category term='c++'/><category term='жизнь'/><category term='guest additions'/><title type='text'>Dmitry Minsky</title><subtitle type='html'>Жить свободно, ничего кроме.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7805620689744129134.post-8312016725719633570</id><published>2010-05-18T21:40:00.002+03:00</published><updated>2010-05-18T21:44:37.634+03:00</updated><title type='text'>Подключаем исходники Android к Eclipse.</title><content type='html'>Часто хочется посмотреть определения того или иного класса Android фреймворка. Однако с сдк по-умолчанию исходники не поставляются и видим мы лишь такую бяку ...&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;img border="0" height="420" src="http://4.bp.blogspot.com/_Ldzls_Mg37U/S_LbxCA7lHI/AAAAAAAAAN4/cEAFleXBjzw/s640/Capture.PNG" width="640" /&gt;&lt;br /&gt;&lt;br /&gt;Что конечно же, нам совершенно не интересно. Итак чтобы увидеть исходники, нужно как не странно, скачать исходники)). Конечно все можно слить с репозитория гугла, но люди мы ленивые и поступим проще. Хороший человек уже все скачал и аккуратно запаковал в архивы.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/file/mywjymazt3m/sources-1.5-cupcake.zip"&gt;Cupcake (1.5)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/file/r0uzq1f0e0m/sources-1.6-donut.zip"&gt;Donut (1.6)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/file/mninnmzznxc/sources-2.1-eclair.zip"&gt;Eclair (2.1)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Шаг раз&lt;/i&gt;. Скачиваем значит нужный или все архивы, распаковываем в "путь к sdk\platforms\android-xx\sources".&lt;br /&gt;&lt;i&gt;Шаг два&lt;/i&gt;. Правой кнопкой тыцаем на проекте в Package Explorer'e и выбираем Refresh.&lt;br /&gt;&lt;i&gt;Шаг три&lt;/i&gt;. Profit!&lt;br /&gt;&lt;br /&gt;&lt;img border="0" height="420" src="http://1.bp.blogspot.com/_Ldzls_Mg37U/S_LbyVdf2pI/AAAAAAAAAOA/JuxtjLQLScg/s640/Capture2.PNG" width="640" /&gt;&lt;br /&gt;&lt;br /&gt;Подробнее в &lt;a href="http://android.opensourceror.org/2010/01/18/android-source/"&gt;оригинальной статье&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7805620689744129134-8312016725719633570?l=dmitryminsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/8312016725719633570/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7805620689744129134&amp;postID=8312016725719633570' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/8312016725719633570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/8312016725719633570'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/2010/05/android-eclipse.html' title='Подключаем исходники Android к Eclipse.'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Ldzls_Mg37U/S_LbxCA7lHI/AAAAAAAAAN4/cEAFleXBjzw/s72-c/Capture.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7805620689744129134.post-5955127248235494598</id><published>2010-04-30T16:21:00.003+03:00</published><updated>2010-04-30T16:23:16.739+03:00</updated><title type='text'>Android Market на эмуляторе.</title><content type='html'>Нашел на просторах сети данный мануал.&lt;br /&gt;&lt;br /&gt;Итак, чтобы получить маркет и прочие полезные штуки:&lt;br /&gt;1) Качаем архив с нужным системным образом:&lt;br /&gt;&lt;a href="http://files.mail.ru/N1QUHX" target="_blank"&gt;&lt;b&gt;для прошивки 1.5&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://files.mail.ru/7E7LXG" target="_blank"&gt;&lt;b&gt;для прошивки 1.6&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;2)  Через стандартный мастер создаем новый AVD нужной нам версии;&lt;br /&gt;3)  Переходим в директорию с AVD:&lt;br /&gt;- для Linux:  /home/&lt;username&gt;.android/AVD/&amp;lt;имя AVD&amp;gt;/&lt;/username&gt;&lt;br /&gt;- для Windows 7: C:\Users\&lt;username&gt;.android\AVD\&amp;lt;имя AVD&amp;gt;\&lt;br /&gt;4) Распаковываем  архив с системным образом в корень этой директории&lt;br /&gt;5) Запускаем  эмулятор с флагом &lt;b&gt;-wipe-data&lt;/b&gt;&lt;br /&gt;6) Profit! ))&lt;a href="http://androidforums.ru/index.php?act=attach&amp;amp;type=post&amp;amp;id=1973" target="_blank" title="Скачать файл"&gt;&lt;br /&gt;&lt;/a&gt;&lt;span class="desc"&gt;&lt;/span&gt;&lt;/username&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7805620689744129134-5955127248235494598?l=dmitryminsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/5955127248235494598/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7805620689744129134&amp;postID=5955127248235494598' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/5955127248235494598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/5955127248235494598'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/2010/04/android-market.html' title='Android Market на эмуляторе.'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7805620689744129134.post-7057796600410526050</id><published>2010-04-20T12:40:00.001+03:00</published><updated>2010-04-20T12:40:58.749+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='guest additions'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='vbox'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Установка Guest Additions в Debian и Ubuntu.</title><content type='html'>Решил записать пока не забыл. Наконец-то нашел самый кошерный способ установки аддонисов в дебьяне и бубунте установленными под VirtualBox'ом. Выполняем следующие 8 шагов и все будет ОК. (команды выделены)&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Логинимся под рутом. &lt;b&gt;sudo su&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Обновляеме базу APT. &lt;b&gt;aptitude update&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Устанавливаем последние обновления. &lt;b&gt;aptitude upgrade&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Доставляем необходимые пакеты.  &lt;b&gt;aptitudeinstall build-essential module-assistant&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Конфигурируем систему для постройки модулей ядра. &lt;b&gt;m-a prepare&lt;/b&gt;;&lt;/li&gt;&lt;li&gt;Жмякаем "Install Guest Additions" в меню "Devices", если нужно, монтируем cdrom. &lt;b&gt;mount /media/cdrom&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Запускаем &lt;b&gt;sh /media/cdrom/VBoxLinuxAdditions-x86.run&amp;nbsp;&lt;/b&gt;или&amp;nbsp;&lt;b&gt;VBoxLinuxAdditions-amd64.run&amp;nbsp;&lt;/b&gt;в зависимости от установленной версии ОС.&lt;/li&gt;&lt;li&gt;Перезагружаем виртуалку. Profit!&lt;/li&gt;&lt;/ol&gt;п.с. для обновлений нужен доступ в инет. &lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7805620689744129134-7057796600410526050?l=dmitryminsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/7057796600410526050/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7805620689744129134&amp;postID=7057796600410526050' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/7057796600410526050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/7057796600410526050'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/2010/04/guest-additions-debian-ubuntu.html' title='Установка Guest Additions в Debian и Ubuntu.'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7805620689744129134.post-3198234654405497363</id><published>2010-03-22T12:14:00.004+02:00</published><updated>2010-03-22T12:18:23.681+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='архитектура'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Обзор архитектуры Android.</title><content type='html'>Android - представляет собой платформу для разработки, состоящую из операционной системы, различных библиотек и набора приложений. Приложения в свою очередь состоят из компонентов, которые можно использовать в своих разработках, но об этом в одной из следующих статей. Android поддерживает большое количество интересных фишек. Application framework, позволяет повторно использовать различные компоненты приложений. Виртуальная машина Dalvik, отлично оптимизированная под мобильные девайсы. Оптимизированные 2D и 3D (OpenGL ES 1.0) графические библиотеки. База данных SQLite, шустрая и достаточно функциональная. Поддержка кучи графических, аудио и видео форматов (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF). Ну и при наличии соответствующего железа мы имеем поддержку: GSM, Bluetooth, EDGE, 3G, WiFi, GPS, камеры, компаса и акселерометра. Также в нашем распоряжении богатый набор средств разработки, включающий в себя, эмулятор устройства, дебаггер, профайлеры и плагин для Eclipse IDE.&lt;br /&gt;&lt;br /&gt;На следующей диаграмме в общем виде представлена &amp;nbsp;архитектура Android.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_Ldzls_Mg37U/S6cj6ygtsOI/AAAAAAAAAMM/Bm323nbJ9lQ/s1600-h/system-architecture.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="446" src="http://1.bp.blogspot.com/_Ldzls_Mg37U/S6cj6ygtsOI/AAAAAAAAAMM/Bm323nbJ9lQ/s400/system-architecture.jpg" width="600" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;На самом верхнем уровне архитектуры находятся обычные приложения. Многие приложения уже включены в платформу, это прежде всего софт для работы с контактами, отправки sms, браузер, почтовый клиент и т.д. Основной язык разработки - Java.&lt;br /&gt;На следующем уровне находится Application Framework. Как видно из диаграммы, он состоит в основном из различных менеджеров. Менеджеры предоставляют информацию нашим приложениям. Например Location Manager, дает доступ к координатам полученым от GPS. Resource Manager отвечает за выделение и распределение памяти и других системных ресурсов. Очень гибкие и расширяемые компоненты View, используется для создания UI. Примером компонентов View являются выпадающие списки, кнопки и тому подобные, а также гораздо более "мощные", вроде галереи и браузера. Content Providers служат для обмена данными между различными приложениями. Они являются фактически единственным способом межпроцессного взаимодействия.&lt;br /&gt;Следующий уровень включает в себя множество C/C++ библиотек, используемых различными компонентами системы. Android Runtime включает в себя Java core библиотеку, содержащую основную часть функциональности. О Dalvik Virtual Machine стоит рассказать отдельно. Прежде всего каждая программа Android запускается в своей копиии виртуальной машины. Dalvik специально оптимизирована под запуск большого числа своих инстансов. Threading, низкоуровневая работа с памятью и т.д. реализованы на базе ядра Linux.&lt;br /&gt;Ну и наконец последний уровень архитектуры это само ядро Linux. Оно отвечает за то, за что обычно отвечает ядро ОС )). А именно распределение ресурсов. Ядро содержит в себе драйвера устройств, сетевой стек и power менеджер.&lt;br /&gt;&lt;br /&gt;На этом все. В следующей статье я расскажу об основах программирования в Android.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7805620689744129134-3198234654405497363?l=dmitryminsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/3198234654405497363/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7805620689744129134&amp;postID=3198234654405497363' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/3198234654405497363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/3198234654405497363'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/2010/03/android.html' title='Обзор архитектуры Android.'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Ldzls_Mg37U/S6cj6ygtsOI/AAAAAAAAAMM/Bm323nbJ9lQ/s72-c/system-architecture.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7805620689744129134.post-7293974482336413226</id><published>2010-03-18T17:56:00.004+02:00</published><updated>2010-03-19T08:52:25.138+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nokia'/><category scheme='http://www.blogger.com/atom/ns#' term='symbian'/><title type='text'>Разработка под Symbian. Часть 1.</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_Ldzls_Mg37U/S5-EShh6vMI/AAAAAAAAAME/2ElNuwyfdrA/s1600-h/symbian.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="125" src="http://3.bp.blogspot.com/_Ldzls_Mg37U/S5-EShh6vMI/AAAAAAAAAME/2ElNuwyfdrA/s200/symbian.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Вот&amp;nbsp;ведь какой парадокс, Symbian, возможно&amp;nbsp;самая&amp;nbsp;старая&amp;nbsp;из&amp;nbsp;операционных систем для&amp;nbsp;смартфонов. Это&amp;nbsp;ОС с&amp;nbsp;самой большой на&amp;nbsp;данный момент долей рынка. А русскоязычных материалов&amp;nbsp;по&amp;nbsp;разработке под&amp;nbsp;нее нифига&amp;nbsp;нет. Есть правда&amp;nbsp;книга&amp;nbsp;за&amp;nbsp;авторством Горнакова&amp;nbsp;С.Г.&amp;nbsp;и&amp;nbsp;несколько&amp;nbsp;статей на&amp;nbsp;mobilab.ru. К сожалению на&amp;nbsp;сегодня&amp;nbsp;эти&amp;nbsp;материалы бесполезны чуть более чем полностью. Так&amp;nbsp;что, по&amp;nbsp;мере возможности&amp;nbsp;я&amp;nbsp;постараюсь восполнить этот&amp;nbsp;пробел. Однако, если&amp;nbsp;вы всерьез решили&amp;nbsp;заняться&amp;nbsp;платформой Symbian, будьте готовы читать большое количество&amp;nbsp;манов&amp;nbsp;на&amp;nbsp;английском. Я буду&amp;nbsp;описывать только&amp;nbsp;самые ключевые моменты, от&amp;nbsp;которых можно&amp;nbsp;в&amp;nbsp;дальнейшем отталкиваться. А без, хотя&amp;nbsp;бы минимального&amp;nbsp;знания&amp;nbsp;английского, вы не&amp;nbsp;сможете ориентироваться&amp;nbsp;в&amp;nbsp;родной документации. А без&amp;nbsp;этого&amp;nbsp;в&amp;nbsp;свою очередь, что-то&amp;nbsp;написать нереально.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;В этой заметке я&amp;nbsp;кратко&amp;nbsp;пройдусь по&amp;nbsp;истории&amp;nbsp;этой ОС и&amp;nbsp;опишу&amp;nbsp;одну&amp;nbsp;важную идиому&amp;nbsp;программирования&amp;nbsp;под&amp;nbsp;Symbian, с&amp;nbsp;которой придется&amp;nbsp;работать постоянно.&lt;br /&gt;&lt;br /&gt;История&amp;nbsp;ОС Symbian берет свое начало&amp;nbsp;в&amp;nbsp;компании&amp;nbsp;Psion PLC, где была&amp;nbsp;разработана&amp;nbsp;операционная&amp;nbsp;система&amp;nbsp;EPOC. Ходит слух, что&amp;nbsp;эта&amp;nbsp;аббревиатура&amp;nbsp;расшифровывается&amp;nbsp;как&amp;nbsp;«Electronic Piece Of Cheese», что&amp;nbsp;в&amp;nbsp;переводе на&amp;nbsp;русский значит «Электронный кусочек&amp;nbsp;сыра».&amp;nbsp;EPOC поначалу&amp;nbsp;была&amp;nbsp;шестнадцатибитной ОС. В 1990-ом EPOC16 уступила&amp;nbsp;место&amp;nbsp;EPOC32. Нужно&amp;nbsp;сказать ОС эта&amp;nbsp;была&amp;nbsp;очень и&amp;nbsp;очень продвинута&amp;nbsp;на&amp;nbsp;то&amp;nbsp;время: многозадачность, защита&amp;nbsp;памяти, поддержка&amp;nbsp;сенсорных экранов&amp;nbsp;и&amp;nbsp;много&amp;nbsp;чего&amp;nbsp;еще. В 1998&amp;nbsp;году&amp;nbsp;совместно&amp;nbsp;с&amp;nbsp;компаниями&amp;nbsp;Motorola, Ericsson и&amp;nbsp;Nokia была&amp;nbsp;основана&amp;nbsp;новая&amp;nbsp;компания&amp;nbsp;Symbian. Фактически&amp;nbsp;первой версией Symbian OS стала&amp;nbsp;переименованная&amp;nbsp;EPOC Release 6. С этого&amp;nbsp;момента&amp;nbsp;и&amp;nbsp;года&amp;nbsp;так&amp;nbsp;до&amp;nbsp;2006 о&amp;nbsp;развитии&amp;nbsp;Symbian OS лучше вообще не&amp;nbsp;думать. В это&amp;nbsp;время&amp;nbsp;появилось слишком большое кол-во&amp;nbsp;различных модификаций ОС, зачастую не&amp;nbsp;совместимых между&amp;nbsp;собой. Благо&amp;nbsp;сейчас&amp;nbsp;мы имеем единую, а&amp;nbsp;с&amp;nbsp;4 февраля&amp;nbsp;2010, еще и&amp;nbsp;полностью открытую платформу.&lt;br /&gt;&lt;br /&gt;Теперь о&amp;nbsp;разработке. &amp;nbsp;Сразу&amp;nbsp;напрашивается&amp;nbsp;вопрос, а&amp;nbsp;в&amp;nbsp;чем собственно&amp;nbsp;разрабатывать? Вариантов&amp;nbsp;тут не&amp;nbsp;особо&amp;nbsp;много. Приверженцы консоли&amp;nbsp;могут все делать, хм, в&amp;nbsp;консоли&amp;nbsp;)). Для&amp;nbsp;любителей VS есть плагин Corbide.VS. О его&amp;nbsp;работоспособности&amp;nbsp;не&amp;nbsp;могу&amp;nbsp;сказать ничего, ибо&amp;nbsp;в&amp;nbsp;глаза&amp;nbsp;его&amp;nbsp;не&amp;nbsp;видел. Ну&amp;nbsp;и&amp;nbsp;наконец родной инструмент, продвигаемый Nokia это&amp;nbsp;Corbide IDE. Штука&amp;nbsp;эта&amp;nbsp;основана&amp;nbsp;на&amp;nbsp;Eclipse, поэтому&amp;nbsp;многим покажется&amp;nbsp;знакомой. В следующей статье я&amp;nbsp;опишу&amp;nbsp;установку&amp;nbsp;и&amp;nbsp;настройку&amp;nbsp;Development toolkit (который включает в&amp;nbsp;себя&amp;nbsp;Corbide) для&amp;nbsp;Symbian. А пока, расскажу&amp;nbsp;об&amp;nbsp;одной интересной идиоме, с&amp;nbsp;которой придется&amp;nbsp;столкнуться&amp;nbsp;каждому&amp;nbsp;Symbian-разработчику. Идиома&amp;nbsp;эта&amp;nbsp;касается&amp;nbsp;обработки&amp;nbsp;ошибок. Так&amp;nbsp;уж&amp;nbsp;получилась, что&amp;nbsp;когда&amp;nbsp;разрабатывалась EPOC, в&amp;nbsp;C++ еще не&amp;nbsp;было&amp;nbsp;механизма&amp;nbsp;обработки&amp;nbsp;исключений, вот&amp;nbsp;и&amp;nbsp;пришлось авторам ОС придумывать какую-то&amp;nbsp;ему&amp;nbsp;замену. А придумали&amp;nbsp;они&amp;nbsp;механизм, называемый ловушка&amp;nbsp;(TRAP). &amp;nbsp;Фактически&amp;nbsp;функция&amp;nbsp;указаная&amp;nbsp;в&amp;nbsp;трапе, находится&amp;nbsp;как-бы в&amp;nbsp;блоке try. Из примера&amp;nbsp;ниже, все должно&amp;nbsp;стать ясно.&lt;br /&gt;&lt;br /&gt;Вот&amp;nbsp;как&amp;nbsp;мы делаем в&amp;nbsp;С++&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #e7e5dc; border: none; font-family: Consolas,Monaco,Courier New,Courier,monospace !important; font-size: 12px; font-weight: normal; margin: 0; overflow: auto; padding-top: 1px; padding: 0;"&gt;&lt;div id="id_6155552191" style="padding-left: 45px;"&gt;&lt;/div&gt;&lt;ol style="background-color: white; border-left: 3px solid #6CE26C; color: #5c5c5c; line-height: 14px; list-style-position: outside; list-style: decimal; margin: 0px 0px 1px 45px !important; padding: 0px;"&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;void&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;foo()&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;throw&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: seagreen; font-weight: 700;"&gt;int&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;main()&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;try&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foo();&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;catch&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;(&lt;/span&gt;&lt;span style="color: seagreen; font-weight: 700;"&gt;int&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;err)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert(err&amp;nbsp;==&amp;nbsp;2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;catch&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;(...)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;throw&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;return&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;А вот&amp;nbsp;как&amp;nbsp;мы делаем в&amp;nbsp;Symbian C++&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #e7e5dc; border: none; font-family: Consolas,Monaco,Courier New,Courier,monospace !important; font-size: 12px; font-weight: normal; margin: 0; overflow: auto; padding-top: 1px; padding: 0;"&gt;&lt;div id="id_7428622547" style="padding-left: 45px;"&gt;&lt;/div&gt;&lt;ol style="background-color: white; border-left: 3px solid #6CE26C; color: #5c5c5c; line-height: 14px; list-style-position: outside; list-style: decimal; margin: 0px 0px 1px 45px !important; padding: 0px;"&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;void&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;foo()&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;User::Leave(2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: seagreen; font-weight: 700;"&gt;int&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;main()&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: seagreen; font-weight: 700;"&gt;int&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;err;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;TRAP(err,&amp;nbsp;foo()&amp;nbsp;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;switch&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;(err)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;case&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;KErrNone:&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;Do&amp;nbsp;nothing&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;break&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;case&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;2:&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;Handle&amp;nbsp;exception&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;break&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;default&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;:&amp;nbsp;User::Leave(err);&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008200;"&gt;//&amp;nbsp;Generate&amp;nbsp;new&amp;nbsp;exception&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;return&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;В Symbian исключение определяется&amp;nbsp;только&amp;nbsp;целочисленным кодом. Сделано&amp;nbsp;это&amp;nbsp;из&amp;nbsp;соображений производительности. Кроме макроса&amp;nbsp;TRAP, мы имеем TRAPD, который сам объявит переменную переданную в&amp;nbsp;качестве первого&amp;nbsp;аргумента. И TRAP_IGNORE, который просто&amp;nbsp;игнорирует код возвращаемой ошибки. А кто&amp;nbsp;уничтожит локальные объекты спросите вы. А вот&amp;nbsp;тут «один из&amp;nbsp;геморроев&amp;nbsp;Symbian», все нужно&amp;nbsp;делать ручками&amp;nbsp;с&amp;nbsp;помощью такой штуки, как&amp;nbsp;CleanupStack. В Symbian, каждый поток&amp;nbsp;выполнения&amp;nbsp;(thread) имеет связанный с&amp;nbsp;ним CleanupStack и&amp;nbsp;для&amp;nbsp;того, чтобы безопасно&amp;nbsp;работать с&amp;nbsp;объектами&amp;nbsp;в&amp;nbsp;трапе, нужно&amp;nbsp;перед&amp;nbsp;использованием объектов, положить их&amp;nbsp;в&amp;nbsp;CleanupStack, а&amp;nbsp;после использования&amp;nbsp;вынуть. Только&amp;nbsp;и&amp;nbsp;всего. Но&amp;nbsp;как&amp;nbsp;же это&amp;nbsp;напрягает)). Ниже пример кода&amp;nbsp;демонстрирующий работу&amp;nbsp;с&amp;nbsp;CleanupStack.&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #e7e5dc; border: none; font-family: Consolas,Monaco,Courier New,Courier,monospace !important; font-size: 12px; font-weight: normal; margin: 0; overflow: auto; padding-top: 1px; padding: 0;"&gt;&lt;div id="id_3421155440" style="padding-left: 45px;"&gt;&lt;/div&gt;&lt;ol style="background-color: white; border-left: 3px solid #6CE26C; color: #5c5c5c; line-height: 14px; list-style-position: outside; list-style: decimal; margin: 0px 0px 1px 45px !important; padding: 0px;"&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;void&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;foo()&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;User::Leave(2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;class&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;A&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;public&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;CBase&amp;nbsp;{};&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;class&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;B&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;public&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;RHandleBase&amp;nbsp;{};&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: seagreen; font-weight: 700;"&gt;int&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;main()&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: seagreen; font-weight: 700;"&gt;int&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;err;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;TRAP(err,&amp;nbsp;(&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A&amp;nbsp;*a&amp;nbsp;=&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;new&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;(ELeave)&amp;nbsp;A;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;объект,&amp;nbsp;на&amp;nbsp;который&amp;nbsp;указывает&amp;nbsp;a,&amp;nbsp;будет&amp;nbsp;уничтожен&amp;nbsp;в&amp;nbsp;случае&amp;nbsp;неудачи&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CleanupStack::PushL(a);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;B&amp;nbsp;b;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;в&amp;nbsp;случае&amp;nbsp;неудачи&amp;nbsp;у&amp;nbsp;объекта&amp;nbsp;b&amp;nbsp;будет&amp;nbsp;вызван&amp;nbsp;метод&amp;nbsp;Close()&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CleanupClosePushL(b);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foo();&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;Эта&amp;nbsp;строка&amp;nbsp;никогда&amp;nbsp;не&amp;nbsp;выполнится,&amp;nbsp;но&amp;nbsp;тем&amp;nbsp;не&amp;nbsp;менее&amp;nbsp;a&amp;nbsp;будет&amp;nbsp;корректно&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;удален,&amp;nbsp;а&amp;nbsp;b&amp;nbsp;корректно&amp;nbsp;закрыт&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CleanupStack::PopAndDestroy(2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;Это&amp;nbsp;эквивалентно&amp;nbsp;следующему:&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;CleanupStack::Pop(2);&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;delete&amp;nbsp;a;&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;b.Close();&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;));&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;assert(err&amp;nbsp;==&amp;nbsp;2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;return&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;Это&amp;nbsp;пожалуй все, что&amp;nbsp;я&amp;nbsp;хотел рассказать сегодня. И напоследок&amp;nbsp;пара&amp;nbsp;полезных ссылок:&lt;br /&gt;&lt;a href="http://developer.symbian.org/" title=""&gt;http://developer.symbian.org/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://wiki.forum.nokia.com/" title=""&gt;http://wiki.forum.nokia.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7805620689744129134-7293974482336413226?l=dmitryminsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/7293974482336413226/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7805620689744129134&amp;postID=7293974482336413226' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/7293974482336413226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/7293974482336413226'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/2010/03/symbian-1.html' title='Разработка под Symbian. Часть 1.'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Ldzls_Mg37U/S5-EShh6vMI/AAAAAAAAAME/2ElNuwyfdrA/s72-c/symbian.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7805620689744129134.post-2546155982717460124</id><published>2010-03-12T20:43:00.043+02:00</published><updated>2010-03-19T08:44:45.190+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='фишки'/><title type='text'>Три "чтуки" c++</title><content type='html'>Сегодня&amp;nbsp;расскажу&amp;nbsp;о&amp;nbsp;трех интересных вещах которые можно&amp;nbsp;использовать в&amp;nbsp;c++. И кстати, плюсы я&amp;nbsp;нифига, не&amp;nbsp;знаю)), но&amp;nbsp;на&amp;nbsp;тренинге было&amp;nbsp;— поэтому&amp;nbsp;запишу. Итак, первое&amp;nbsp;— конструктор копирования. В общем-то, штука&amp;nbsp;базовая&amp;nbsp;и&amp;nbsp;должна&amp;nbsp;быть знакома&amp;nbsp;каждому&amp;nbsp;сишнику, но, так&amp;nbsp;как&amp;nbsp;сам не&amp;nbsp;знаю, а&amp;nbsp;в&amp;nbsp;дальнейшем оно&amp;nbsp;используется, напишу. Конструктор копирования&amp;nbsp;служит для&amp;nbsp;создания&amp;nbsp;нового&amp;nbsp;объекта&amp;nbsp;как&amp;nbsp;копии&amp;nbsp;уже существующего. Компилятор создает неявный конструктор копирования&amp;nbsp;по&amp;nbsp;умолчанию. Однако&amp;nbsp;иногда&amp;nbsp;возникает необходимость объявить такой конструктор самому. Ниже примеры объявления:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #e7e5dc; border: none; font-family: Consolas,Monaco,Courier New,Courier,monospace !important; font-size: 12px; font-weight: normal; margin: 0; overflow: auto; padding-top: 1px; padding: 0;"&gt;&lt;div id="id_5098917813" style="padding-left: 45px;"&gt;&lt;/div&gt;&lt;ol style="background-color: white; border-left: 3px solid #6CE26C; color: #5c5c5c; line-height: 14px; list-style-position: outside; list-style: decimal; margin: 0px 0px 1px 45px !important; padding: 0px;"&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;X(X&amp;nbsp;&lt;/span&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;const&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;amp;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;X(X&amp;amp;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;X(X&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;const&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;volatile&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;amp;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;X(X&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;const&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;amp;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: seagreen; font-weight: 700;"&gt;int&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;=&amp;nbsp;10);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;По&amp;nbsp;большому&amp;nbsp;счету&amp;nbsp;тут все ясно. Подробнее смотрим &lt;a href="http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80_%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F" title=""&gt;на&amp;nbsp;википедии&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Фишка&amp;nbsp;номер два: RAII, или&amp;nbsp;Resource Acquisition Is Initialization, или&amp;nbsp;«Получение ресурса&amp;nbsp;есть инициализация». Вещь классная&amp;nbsp;и&amp;nbsp;удобная. Если&amp;nbsp;коротко, необходимые ресурсы захватываем в&amp;nbsp;конструкторе класса, освобождаем в&amp;nbsp;деструкторе. &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;А так&amp;nbsp;как&amp;nbsp;для&amp;nbsp;автоматических&amp;nbsp;переменных деструктор вызывается&amp;nbsp;по&amp;nbsp;выходу&amp;nbsp;переменной из&amp;nbsp;области&amp;nbsp;видимости, то&amp;nbsp;мы избавляемся&amp;nbsp;от&amp;nbsp;головной боли&amp;nbsp;из-за&amp;nbsp;ручного&amp;nbsp;освобождения&amp;nbsp;ресурсов. Далее пример класса&amp;nbsp;и&amp;nbsp;его&amp;nbsp;использования:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #e7e5dc; border: none; font-family: Consolas,Monaco,Courier New,Courier,monospace !important; font-size: 12px; font-weight: normal; margin: 0; overflow: auto; padding-top: 1px; padding: 0;"&gt;&lt;div id="id_6733946016" style="padding-left: 45px;"&gt;&lt;/div&gt;&lt;ol style="background-color: white; border-left: 3px solid #6CE26C; color: #5c5c5c; line-height: 14px; list-style-position: outside; list-style: decimal; margin: 0px 0px 1px 45px !important; padding: 0px;"&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: grey;"&gt;#include&amp;nbsp;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: grey;"&gt;#include&amp;nbsp;&amp;lt;stdexcept&amp;gt;&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;class&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;file&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;public&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;как&amp;nbsp;видно&amp;nbsp;в&amp;nbsp;конструкторе&amp;nbsp;мы&amp;nbsp;захватываем&amp;nbsp;(открываем)&amp;nbsp;файл&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file(&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;const&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: seagreen; font-weight: 700;"&gt;char&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;*&amp;nbsp;filename&amp;nbsp;)&amp;nbsp;:&amp;nbsp;m_file_handle(std::fopen(filename,&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;"w+"&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;if&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;(&amp;nbsp;!m_file_handle&amp;nbsp;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;throw&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;std::runtime_error(&lt;/span&gt;&lt;span style="color: blue;"&gt;"file&amp;nbsp;open&amp;nbsp;failure"&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;)&amp;nbsp;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;соответственно&amp;nbsp;в&amp;nbsp;деструкторе&amp;nbsp;его&amp;nbsp;освобождаем&amp;nbsp;(закрываем)&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;~file()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;if&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;(&amp;nbsp;std::fclose(m_file_handle)&amp;nbsp;!=&amp;nbsp;0&amp;nbsp;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;fclose()&amp;nbsp;может&amp;nbsp;вернуть&amp;nbsp;ошибку&amp;nbsp;при&amp;nbsp;записи&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;на&amp;nbsp;диск&amp;nbsp;последних&amp;nbsp;изменений&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;void&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;write(&amp;nbsp;&lt;/span&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;const&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: seagreen; font-weight: 700;"&gt;char&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;*&amp;nbsp;str&amp;nbsp;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;if&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;(&amp;nbsp;std::fputs(str,&amp;nbsp;m_file_handle)&amp;nbsp;==&amp;nbsp;EOF&amp;nbsp;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;throw&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;std::runtime_error(&lt;/span&gt;&lt;span style="color: blue;"&gt;"file&amp;nbsp;write&amp;nbsp;failure"&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;)&amp;nbsp;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;private&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::&lt;span style="color: seagreen; font-weight: 700;"&gt;FILE&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;*&amp;nbsp;m_file_handle&amp;nbsp;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;Копирование&amp;nbsp;и&amp;nbsp;присваивание&amp;nbsp;не&amp;nbsp;реализовано.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;Предотвратим&amp;nbsp;их&amp;nbsp;использование,&amp;nbsp;объявив&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;соответствующие&amp;nbsp;методы&amp;nbsp;закрытыми.&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file(&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;const&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;file&amp;nbsp;&amp;amp;&amp;nbsp;)&amp;nbsp;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;amp;&amp;nbsp;operator=(&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;const&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;file&amp;nbsp;&amp;amp;&amp;nbsp;)&amp;nbsp;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: #008200;"&gt;//&amp;nbsp;пример&amp;nbsp;использования&amp;nbsp;этого&amp;nbsp;класса&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;void&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;example_usage()&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;открываем&amp;nbsp;файл&amp;nbsp;(захватываем&amp;nbsp;ресурс)&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file&amp;nbsp;logfile(&lt;span style="color: blue;"&gt;"logfile.txt"&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;)&amp;nbsp;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logfile.write(&lt;span style="color: blue;"&gt;"hello&amp;nbsp;logfile!"&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;)&amp;nbsp;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;продолжаем&amp;nbsp;использовать&amp;nbsp;logfile...&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;Можно&amp;nbsp;возбуждать&amp;nbsp;исключения&amp;nbsp;или&amp;nbsp;выходить&amp;nbsp;из&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;функции&amp;nbsp;не&amp;nbsp;беспокоясь&amp;nbsp;о&amp;nbsp;закрытии&amp;nbsp;файла;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;он&amp;nbsp;будет&amp;nbsp;закрыт&amp;nbsp;автоматически&amp;nbsp;когда&amp;nbsp;переменная&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200;"&gt;//&amp;nbsp;logfile&amp;nbsp;выйдет&amp;nbsp;из&amp;nbsp;области&amp;nbsp;видимости.&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;Подробности&amp;nbsp;по&amp;nbsp;RAII &lt;a href="http://ru.wikipedia.org/wiki/%D0%98%D0%B4%D0%B8%D0%BE%D0%BC%D0%B0_Resource_Acquisition_Is_Initialization" title=""&gt;на&amp;nbsp;википедии&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ну&amp;nbsp;и&amp;nbsp;наконец, штука&amp;nbsp;номер три. Носит название Copy and Swap. Эта&amp;nbsp;вещь позволяет нам создавать безопасные к&amp;nbsp;исключениям операторы присваивания. Вся&amp;nbsp;суть в&amp;nbsp;том, что&amp;nbsp;нам нужна&amp;nbsp;функция&amp;nbsp;не&amp;nbsp;бросающая&amp;nbsp;исключений. Пример смотрим ниже:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #e7e5dc; border: none; font-family: Consolas,Monaco,Courier New,Courier,monospace !important; font-size: 12px; font-weight: normal; margin: 0; overflow: auto; padding-top: 1px; padding: 0;"&gt;&lt;div id="id_2012126640" style="padding-left: 45px;"&gt;&lt;/div&gt;&lt;ol style="background-color: white; border-left: 3px solid #6CE26C; color: #5c5c5c; line-height: 14px; list-style-position: outside; list-style: decimal; margin: 0px 0px 1px 45px !important; padding: 0px;"&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;class&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;Copyable&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;public&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Copyable&amp;amp;&amp;nbsp;operator=(&lt;span style="color: #006699; font-weight: 700;"&gt;const&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;Copyable&amp;nbsp;&amp;amp;_v)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Copyable&amp;nbsp;tmp(_v);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;this&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;-&amp;gt;swap(tmp);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;return&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;*&lt;/span&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;this&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: white; color: inherit; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699; font-weight: 700;"&gt;void&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;&amp;nbsp;swap(Copyable&amp;nbsp;&amp;amp;_v)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #006699; font-weight: 700;"&gt;throw&lt;/span&gt;&lt;span style="background-color: inherit; color: black;"&gt;();&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: #f8f8f8; color: #5c5c5c; margin: 0; padding: 0 3px 0 10px;"&gt;&lt;span style="background-color: inherit; color: black;"&gt;};&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;Более полное описание Copy and Swap &lt;a href="http://ru.wikipedia.org/wiki/%D0%98%D0%B4%D0%B8%D0%BE%D0%BC%D0%B0_copy-and-swap" title=""&gt;на&amp;nbsp;википедии&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7805620689744129134-2546155982717460124?l=dmitryminsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/2546155982717460124/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7805620689744129134&amp;postID=2546155982717460124' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/2546155982717460124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/2546155982717460124'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/2010/03/c.html' title='Три &quot;чтуки&quot; c++'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7805620689744129134.post-2581485351492489579</id><published>2010-03-07T16:41:00.005+02:00</published><updated>2010-03-14T20:30:42.708+02:00</updated><title type='text'>Введение в Small Architecture.</title><content type='html'>&lt;div style="text-align: right;"&gt;“Small is Beautiful”&lt;br /&gt;EF Schumacher&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Сразу к делу, какие проблемы возникают при разработке мобильных приложений?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ограничения памяти&lt;/li&gt;&lt;li&gt;Система может состоять из множества компонентов&lt;/li&gt;&lt;li&gt;Компоненты могут разрабатываться разными людьми&lt;/li&gt;&lt;li&gt;Требования к памяти у каждого компонента могут меняться динамически&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Основной задачей будет разработка максимально независимых и небольших компонентов. Это поможет упростить их использование в дальнейшем и поможет избежать расползания ошибок по всей системе. Ошибки в этом случае будут локализованы в отдельных модулях. Для решения проблем с распределением памяти существует несколько шаблонов. &lt;b&gt;Small Data Structures &lt;/b&gt;подразумевает разработку структур данных занимающих минимально достаточный объем памяти для хранения необходимой информации. &lt;b&gt;Small Interface - &lt;/b&gt;для коммуникаций между модулями и внутри модуля используйте минимально достаточные интерфейсы. Однако тут стоит быть осторожными: если действительно существует необходимость передавать большой объем информации, не стоит искусственно его дробить на части, это может привести к лишним накладным расходам. &lt;b&gt;Memory Limit - &lt;/b&gt;шаблон, который подразумевает ограничение каждого компонента по памяти и, если компонент выходит за этот предел, генерацию ошибочной ситуации. &lt;b&gt;Pooled Allocation - &lt;/b&gt;системой выделяется некоторый объем памяти и передается компоненту, а тот, в свою очередь, использует внутренние механизмы для использования выделенного ему объема. Тут следует рассказать о стратегиях владения памятью. Основных стратегий три: &lt;b&gt;Borrowing,&amp;nbsp;Lending и Stealing. &lt;/b&gt;&lt;br /&gt;&lt;b&gt;Borrowing -&lt;/b&gt; клиент запрашивает объект у владельца, владелец возвращает ссылку на объект, клиент его как-то использует и сообщает владельцу, что объект больше не нужен. Здесь вся ответственность (выделение и освобождение памяти) лежит на владельце объекта.&lt;br /&gt;&lt;b&gt;Lending - &lt;/b&gt;клиент выделяет память и создает объект, затем передает его "поставщику", который заполняет объект. Выделение и освобождение памяти лежит на клиенте. &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Stealing - &lt;/b&gt;объект создает поставщик, соответственно он выделяет память для объекта и передает ответственность за работу с объектом клиенту. Клиент использует объект и освобождает ресурсы. Итого: поставщик выделяет память, клиент освобождает.&lt;br /&gt;Вот и сказочки конец, а кто читал и не понял, ничего страшного, я еще не раз буду возвращаться к этой теме.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7805620689744129134-2581485351492489579?l=dmitryminsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/2581485351492489579/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7805620689744129134&amp;postID=2581485351492489579' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/2581485351492489579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/2581485351492489579'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/2010/03/small-architecture.html' title='Введение в Small Architecture.'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7805620689744129134.post-5495715144835925840</id><published>2010-03-06T13:19:00.002+02:00</published><updated>2010-03-13T22:12:32.770+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='языки'/><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Программист-прагматик</title><content type='html'>Меня всегда веселили суровые сипипишники, которые ржали с "быдло-джаверов". Джаверы, которые которые говорили, что плюсы - это древний отстой и ваще не модно. "Тру-ассемблерщики", которые считали, что только они знают программирование, а остальные дети. Конечно, человек может быть асом в своей области и решать любые задачи понятным ему методом, но это не делает его хорошим разработчиком. Все имеющееся на данный момент разнообразие средств разработки появилось не на пустом месте. Ни на один язык/платформу/ide и т.д. не стоит смотреть свысока. Это всего лишь инструменты. Да-да, такие же инструменты как молоток или рубанок. Конечно, можно и рубанком гвоздь забить, но молотком это сделать куда удобнее. И наша задача как разработчиков - решение конкретных проблем подходящими средствами. Никогда не нужно относиться к чему-то предвзято. Всегда стоит трезво оценить возможности других инструментов и выбрать лучший для данной задачи. По-моему, это и значит быть прагматиком.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7805620689744129134-5495715144835925840?l=dmitryminsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/5495715144835925840/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7805620689744129134&amp;postID=5495715144835925840' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/5495715144835925840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/5495715144835925840'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/2010/03/blog-post_06.html' title='Программист-прагматик'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7805620689744129134.post-7084879424580189769</id><published>2010-03-05T20:21:00.001+02:00</published><updated>2010-03-13T22:08:47.263+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='small architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='мобильная архитектура'/><category scheme='http://www.blogger.com/atom/ns#' term='специфика'/><title type='text'>Специфика мобильной разработки.</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: auto;"&gt;&lt;a href="http://3.bp.blogspot.com/_Ldzls_Mg37U/S5FCQZwyRII/AAAAAAAAAKw/2w3RVoGZ5Qs/s1600-h/lte.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="141" src="http://3.bp.blogspot.com/_Ldzls_Mg37U/S5FCQZwyRII/AAAAAAAAAKw/2w3RVoGZ5Qs/s200/lte.jpg" width="200" /&gt;&lt;/a&gt;Ежу понятно, что разработка под мобильные устройства весьма отличается от таковой для десктопа. В этой заметке я коротко опишу возможно очевидные но от того не мение важные вещи. Итак первое, очевидное для пользователей, отличие "большого компа" от мобильника, это размер. Размер устройства коренным образом меняет подход к проектированию пользовательского интерфейса. Маленький экран, неполноценная клавиатура - все это стоит учитывать. Часто можно встретить не специфические для десктопа фишки: акселерометр, сенсорный экран, камера и т.д. Эти устройства тоже можно и даже нужно использовать, если это поможет сделать интерфейс более удобным. Второе главное отличие, очевидное скорее для программистов, это ресурсы. Действительно, вычислительные мощности мобильников в последнее время хоть и поражают воображение (гигагерцовые процессоры, да у меня первый комп в пять раз медленнее был), но до десктопов им еще далеко. Самая большая проблема с ресурсами это, конечно, память. Памяти, как известно много не бывает, а в мобильнике так уж точно. Поэтому на эту часть проблемы приходится самое большое число извращений. Благо, умные люди напридумывали очень много полезных штук. В нескольких следующих статьях я постараюсь немного разобрать, что же представляет собой архитектура мобильных приложений. Рассматривать все это дело я буду на примере замечательной книги "Small Memory Software by Weir, NobleA" и их подхода называемого "Small Architecture". Кому не терпится познакомиться с этой книгой вы можете на &lt;a href="http://www.smallmemory.com/"&gt;сайте авторов&lt;/a&gt;, где она лежит в открытом доступе. На сим, до свидания )).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7805620689744129134-7084879424580189769?l=dmitryminsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/7084879424580189769/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7805620689744129134&amp;postID=7084879424580189769' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/7084879424580189769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/7084879424580189769'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/2010/03/blog-post_05.html' title='Специфика мобильной разработки.'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Ldzls_Mg37U/S5FCQZwyRII/AAAAAAAAAKw/2w3RVoGZ5Qs/s72-c/lte.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7805620689744129134.post-8021988347928653609</id><published>2010-03-03T21:59:00.003+02:00</published><updated>2010-03-13T22:02:25.923+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='философия'/><category scheme='http://www.blogger.com/atom/ns#' term='жизнь'/><category scheme='http://www.blogger.com/atom/ns#' term='будущее'/><title type='text'>Концепция мобильной жизни.</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_Ldzls_Mg37U/S468iSaMxKI/AAAAAAAAAKo/_vmXm1JMEBc/s1600-h/future-backpack-for-future-campus1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="196" src="http://2.bp.blogspot.com/_Ldzls_Mg37U/S468iSaMxKI/AAAAAAAAAKo/_vmXm1JMEBc/s200/future-backpack-for-future-campus1.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Вы просыпаетесь под приятную мелодию своего PI. Услышав ваше "будь ты проклят", PI желает вам доброго утра и отправляет сигнал системе управления домом на включение кофеварки и тостера. Пока чертыхаясь, вы идете в ванную, интерфейс зачитывает поступившие сообщения и новости. Умывшись и позавтракав, вы садитесь в такси, которое заблаговременно вызвал PI, и отправляетесь в аэропорт. Оплата такси производится автоматически, деньги списываются со счета персонального интерфейса. Подъезжая к аэропорту и продиктовав пункт назначения на экране мгновенно появляется маршрут от места выхода из такси до места в салоне самолета. Во время полета вы наслаждаетесь свежим фильмом в 3D формате, который выбрал исходя из ваших предпочтений PI. Через десять минут после начала просмотра звонят ваши друзья, отдыхающие в Японии, картинка фильма сменяется их лицами, конечно же в 3D. Друзья делятся впечатлениями о местной кухне, а вы в который раз укоряете себя за то, что пожалели 50 дополнительных кредитов на пиай с функцией передачи запаха. Во время полета PI в соответствии с часовыми поясами и личными расписаниями напоминает всем приглашенным на конференцию о времени ее начала и месте проведения...&lt;br /&gt;Так начинается новый день будущего, мобильного будущего.&lt;br /&gt;&lt;br /&gt;P.S. Весь этот бред в принципе никакое не будущее и вполне реализуем сегодня. Прошу прощения за манеру изложения, я еще только учусь ). Концепт на картинке отсюда, &lt;a href="http://www.igreenspot.com/futuristic-green-backpack-for-students/"&gt;igreenspot&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7805620689744129134-8021988347928653609?l=dmitryminsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/8021988347928653609/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7805620689744129134&amp;postID=8021988347928653609' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/8021988347928653609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/8021988347928653609'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/2010/03/blog-post_03.html' title='Концепция мобильной жизни.'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Ldzls_Mg37U/S468iSaMxKI/AAAAAAAAAKo/_vmXm1JMEBc/s72-c/future-backpack-for-future-campus1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7805620689744129134.post-5825243785436129693</id><published>2010-03-02T11:21:00.011+02:00</published><updated>2010-03-12T21:04:27.838+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='мобильные платформы'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile os'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile platform'/><title type='text'>Разнообразие мобильных платформ.</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Ldzls_Mg37U/S4v9oGnaiWI/AAAAAAAAAJk/1V4put_wSJk/s1600-h/mobile_os_array_jan2010.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="83" src="http://4.bp.blogspot.com/_Ldzls_Mg37U/S4v9oGnaiWI/AAAAAAAAAJk/1V4put_wSJk/s200/mobile_os_array_jan2010.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;Количество операционных систем для смартфонов(коммуникаторов) существующих на сегодняшний день может привести в замешательство человека решившего заняться разработкой "под мобильники". &lt;a href="http://en.wikipedia.org/wiki/List_of_operating_systems#Smartphones"&gt;Список в википедии&lt;/a&gt; на сегодня насчитывает 17 штук. К счастью, а может и к сожалению, действительно распространенных ОС всего пять. Какие это системы &lt;a name='more'&gt;&lt;/a&gt;можно увидеть из графика, приведенного ниже &lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;(Symbian, BlackBerry, iPhone OS, Windows Mobile, Android). Причем Google Android хоть и занимает в этом списке последнее место, ее доля на рынке растет с каждым годом, в то время как лидирующая сегодня Symbian теряет свою популярность.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Ldzls_Mg37U/S4wKI3zyJUI/AAAAAAAAAJs/WvpYrQi9Gp0/s1600-h/Fullscreen+capture+01.03.2010+202704.bmp2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Ldzls_Mg37U/S4wKI3zyJUI/AAAAAAAAAJs/WvpYrQi9Gp0/s320/Fullscreen+capture+01.03.2010+202704.bmp2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Мировые продажи смартфонов по данным Canalys на 2009 г.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;2010-ый год предвещает серьезные перемены в сложившейся расстановке сил. Выход ОС&amp;nbsp;от Sasmung Electronics -&amp;nbsp;bada, обновление Win mobile (Win 7 mobile), релиз нового iPhone, все это должно неплохо взбодрить рынок мобильных девайсов )).&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;Теперь я очень кратко опишу платформы с которыми буду работать,&amp;nbsp;расскажу их историю, основные возможности и причину их выбора.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;&lt;b&gt;Windows mobile &lt;/b&gt;(актуальные версии 6.1/6.5)&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;Дебютировала как "Pocket PC 2000" в 2000 году. Следующий версия, Pocket PC&amp;nbsp;2003, появилась сразу в трех редакциях,&amp;nbsp;for Pocket PC, Phone Edition и for Smartphone видимо, для запутывания пользователей )). Далее была еще куча версий, особо ничем не примечательных. Начиная с ветки 5.0 майкрософтовцы стали развивать .NET Compact Framework, что интересно и вкусно, но медленно. Что касается программирования под эту ось, все очень и очень похоже на разработку для большой виндовс, с поправками на специфику устройств ввода/вывода смартфонов. Что может win mobile? Да в практически все, разве что носки не стирает. Эта ось относится к так называемым "ориентированным" на приложения. Хотя новая ее версия, Windows Mobile 7 Series, будет "сервис-ориентированной" и полностью несовместимой с предыдущими ветками. Теперь о причине выбора этой оси, 1-е, это ее доминирующее положение на рынке СНГ &amp;nbsp;и 2-е, "знакомые" методы разработки, а значит на первых порах не придется бороться с чужой агрессивной средой )).&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;&lt;b&gt;Symbian &lt;/b&gt;(актуальные версии 9.3/9.4)&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;Начинает свою историю в 1998 году, когда группа компаний в которую вошли:&amp;nbsp;Ericsson, Nokia, Motorola и Psion основали новую компанию&amp;nbsp;Symbian Ltd. С тех пор разброд в среде "симбы" еще больше, чем в Win mobile. Symbian существовала в нескольких модификациях, среди которых&amp;nbsp;UIQ, Series 60, Series 80, Series 90, FOMA. У каждой из них были свои специфические особенности, однако с 2008 года все это больше нас не интересует. Т.к.&amp;nbsp;24 июня 2008 года компании Nokia, Sony Ericsson, Motorola и NTT DOCOMO официально заявили об объединении Symbian OS, S60, UIQ и MOAP(S) с целью создания единой открытой мобильной платформы. Теперь в нашем распоряжение имеется единая, унифицированная, а с 4 февраля 2010 еще и полностью открытая и бесплатная среда. Symbian является операционной системой реального времени, что придает определенную специфику процессу разработки под эту ОС. Как и Win mobile, она является ориентированной на приложения. Причина выбора этой оси для изучения прекрасно видна на приведенном выше графике.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;&lt;b&gt;Android &lt;/b&gt;(актуальные версии 1.5/1.6/2.0.1/2.1)&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;Самая молодая из приведенных платформ. Первый выпуск состоялся 21 октября 2008 года. Android основан на ядре Linux и является полностью открытой системой. Ее разработка ведется при поддержке&amp;nbsp;Open Handset Alliance, бизнес альянса в состав которого входят 48 компаний. Разработка пользовательских приложений для Android изначально велась исключительно на Java. Однако начиная с версии 1.5 стал доступен так называемый&amp;nbsp;Native Development Kit (NDK), который дает возможность писать "родной" linux код на C/C++. Эта платформа лично мне кажется самой перспективной и ей я буду уделять особое внимание.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px; line-height: 20px;"&gt;P.S. Фактически, это моя первая статья, выглядит весьма сумбурно и не связанно. Надеюсь, что со временем я стану писать лучше )).&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7805620689744129134-5825243785436129693?l=dmitryminsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/5825243785436129693/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7805620689744129134&amp;postID=5825243785436129693' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/5825243785436129693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/5825243785436129693'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/2010/03/blog-post_02.html' title='Разнообразие мобильных платформ.'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Ldzls_Mg37U/S4v9oGnaiWI/AAAAAAAAAJk/1V4put_wSJk/s72-c/mobile_os_array_jan2010.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7805620689744129134.post-8371222149277492853</id><published>2010-03-01T18:35:00.008+02:00</published><updated>2010-03-13T14:09:35.127+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='введение'/><title type='text'>Вводная.</title><content type='html'>Добрых суток %username%! Зовут меня Дмитрий. Не так давно я стал изучать методы разработки под мобильные платформы, в частности Windows mobile, Android и Symbian. А чтобы знания как-то сохранять и систематизировать, решил завести блог. Он призван быть скорее моим конспектом, нежели "обычным" блогом. Но я постараюсь писать максимально доступно и буду рад, если смогу кому-то помочь.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7805620689744129134-8371222149277492853?l=dmitryminsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dmitryminsky.blogspot.com/feeds/8371222149277492853/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7805620689744129134&amp;postID=8371222149277492853' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/8371222149277492853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7805620689744129134/posts/default/8371222149277492853'/><link rel='alternate' type='text/html' href='http://dmitryminsky.blogspot.com/2010/03/blog-post.html' title='Вводная.'/><author><name>Дмитрий Мински</name><uri>http://www.blogger.com/profile/13147862976959226586</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Ldzls_Mg37U/S4thak-qS0I/AAAAAAAAAHY/GgsQk78hLxY/S220/big.jpg'/></author><thr:total>0</thr:total></entry></feed>
