<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkQGSHg4fCp7ImA9WhRUEUs.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470</id><updated>2012-01-21T21:52:09.634+04:00</updated><category term="debug" /><category term="memcpy" /><category term="JNI" /><category term="разное" /><category term="AVI" /><category term="HDD" /><category term="SQL" /><category term="favorites" /><category term="funny" /><category term="VisualStudio" /><category term="books" /><category term="VirtualBox" /><category term="programming" /><category term="C++0x" /><category term="boost" /><category term="XML" /><category term="Windows" /><category term="lambda" /><category term="template" /><category term="Java" /><category term="bash" /><category term="NVIDIA" /><category term="GNOME" /><category term="C++" /><category term="regex" /><category term="DirectShow" /><category term="XQuery" /><category term="MFC" /><category term="XPath" /><category term="OLEDB" /><category term="STL" /><category term="Eclipse" /><category term="HR" /><category term="Ubuntu" /><category term="Android" /><category term="Empathy" /><category term="bind" /><category term="HDTV" /><title>Code @ C++</title><subtitle type="html">Mostly C++ programming tips</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://jia3ep.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;orderby=published&amp;v=2" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>157</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/CodeWorkCodeMore" /><feedburner:info uri="codeworkcodemore" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>CodeWorkCodeMore</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;DU8DQn88fCp7ImA9WhRUEUs.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-4222918906109171580</id><published>2012-01-16T05:00:00.000+04:00</published><updated>2012-01-21T21:44:33.174+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-21T21:44:33.174+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Как написать программу на C++ для Android.Часть 4: Без Java.</title><content type="html">&lt;a href="http://jia3ep.blogspot.com/2011/10/c-android-1.html"&gt;Часть 1&lt;/a&gt; | &lt;a href="http://jia3ep.blogspot.com/2011/10/c-android-2.html"&gt;Часть 2&lt;/a&gt; | &lt;a href="http://jia3ep.blogspot.com/2011/11/c-android-3-stl.html"&gt;Часть 3&lt;/a&gt;  | &lt;b&gt;Часть 4&lt;/b&gt;&lt;br&gt;
&lt;br&gt;
В этой части мы не будем писать на Java. Напишем программу под Android используя только C++. Это будет просто.&lt;br&gt;
&lt;a href="http://jia3ep.blogspot.com/2012/01/c-android-4-java.html#more"&gt;Читать дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-4222918906109171580?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/X2OLXoqlfScuAvAj9c4B-jGBEmA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X2OLXoqlfScuAvAj9c4B-jGBEmA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/X2OLXoqlfScuAvAj9c4B-jGBEmA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X2OLXoqlfScuAvAj9c4B-jGBEmA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=NYBw6igO2es:RquKheUPhvQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=NYBw6igO2es:RquKheUPhvQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=NYBw6igO2es:RquKheUPhvQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/NYBw6igO2es" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/4222918906109171580/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=4222918906109171580" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/4222918906109171580?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/4222918906109171580?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/NYBw6igO2es/c-android-4-java.html" title="Как написать программу на C++ для Android.&lt;br&gt;Часть 4: Без Java." /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-tyTSUxDecso/TxKoYAohLRI/AAAAAAAAf9U/u7ttnln9-hc/s72-c/install_2_3.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2012/01/c-android-4-java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYCR3k7eSp7ImA9WhRXGEU.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-3186800606086504349</id><published>2011-12-26T11:22:00.000+04:00</published><updated>2011-12-26T11:22:46.701+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-26T11:22:46.701+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="VisualStudio" /><title>Remove trailing spaces</title><content type="html">Для того, что удалить пробелы в конце строк в файле можно воспользоваться стандартным диалогом &lt;i&gt;Replace&lt;/i&gt; в Visual Studio:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-2ZVHc6uSdUs/TvgeJ-CvGgI/AAAAAAAAe9w/SxqDnk4_N2E/s1600/remove_trailing_spaces.png" /&gt;&lt;/div&gt;В строку &lt;i&gt;Find what&lt;/i&gt; нужно ввести &lt;tt&gt;:Zs#$&lt;/tt&gt;, а &lt;i&gt;Replace with&lt;/i&gt; оставить пустой. Не забудьте поставить галку &lt;i&gt;Use Regular expressions&lt;/i&gt;. Далее можно нажать &lt;i&gt;Replace All&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Данную операцию можно включить в макрос, который запускается при сохранении файлов, чтобы удаление происходило автоматически. Это позволит сократить количество бесполезных изменений кода в репозитарии и на ревью кода.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-3186800606086504349?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sCEmSk61rZbSxQcT7g316miEwdQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sCEmSk61rZbSxQcT7g316miEwdQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sCEmSk61rZbSxQcT7g316miEwdQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sCEmSk61rZbSxQcT7g316miEwdQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=004cBdNagJU:3kXmPgZOz0o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=004cBdNagJU:3kXmPgZOz0o:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=004cBdNagJU:3kXmPgZOz0o:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/004cBdNagJU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/3186800606086504349/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=3186800606086504349" title="Комментарии: 3" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/3186800606086504349?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/3186800606086504349?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/004cBdNagJU/remove-trailing-spaces.html" title="Remove trailing spaces" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-2ZVHc6uSdUs/TvgeJ-CvGgI/AAAAAAAAe9w/SxqDnk4_N2E/s72-c/remove_trailing_spaces.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/12/remove-trailing-spaces.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMMQnc-cSp7ImA9WhRXE0Q.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-1331295358686687750</id><published>2011-12-20T00:29:00.000+04:00</published><updated>2011-12-20T20:11:23.959+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-20T20:11:23.959+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="HR" /><title>Первичное интервью или что вас ждет на собеседовании на вакансию программист С++</title><content type="html">Набралось информации о том, как проходит первичное интервью на вакансию C++ разработчика в тех или иных компаниях. &lt;a href="http://jia3ep.blogspot.com/2011/12/blog-post.html#more"&gt;Читать дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-1331295358686687750?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VjUDrv58Gz_tHU01xnTNT2Lb0Tw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VjUDrv58Gz_tHU01xnTNT2Lb0Tw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VjUDrv58Gz_tHU01xnTNT2Lb0Tw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VjUDrv58Gz_tHU01xnTNT2Lb0Tw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=vULWCIAJRXY:PMeP1NHrMtk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=vULWCIAJRXY:PMeP1NHrMtk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=vULWCIAJRXY:PMeP1NHrMtk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/vULWCIAJRXY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/1331295358686687750/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=1331295358686687750" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/1331295358686687750?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/1331295358686687750?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/vULWCIAJRXY/blog-post.html" title="Первичное интервью &lt;br&gt;или что вас ждет на собеседовании на вакансию программист С++" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/12/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4CRH49fCp7ImA9WhRUEUs.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-1501196365413641462</id><published>2011-11-09T07:00:00.000+04:00</published><updated>2012-01-21T21:46:05.064+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-21T21:46:05.064+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="JNI" /><title>Как написать программу на C++ для Android.Часть 3: Используем С++ класс и STL</title><content type="html">&lt;a href="http://jia3ep.blogspot.com/2011/10/c-android-1.html"&gt;Часть 1&lt;/a&gt; | &lt;a href="http://jia3ep.blogspot.com/2011/10/c-android-2.html"&gt;Часть 2&lt;/a&gt; | &lt;b&gt;Часть 3&lt;/b&gt;  | &lt;a href="http://jia3ep.blogspot.com/2012/01/c-android-4-java.html"&gt;Часть 4&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;img src="http://2.bp.blogspot.com/-ZlQOuHgFOcM/TrmW9jwM9fI/AAAAAAAAeWA/hsPRwedsew0/s320/video_result.png"&gt;&lt;br&gt;
В &lt;a href="http://jia3ep.blogspot.com/2011/10/c-android-2.html"&gt;предыдущей части&lt;/a&gt; мы убедились, что из Java программы можно довольно просто вызывать C++ функции. В этой статье рассмотрим более сложный пример с C++ классами. На C++ будем считать статистику по картинке получаемой со встроенной видеокамеры устройства (насколько я знаю, все Android устройства имеют хотя бы одну видеокамеру).&lt;br&gt;
&lt;a href="http://jia3ep.blogspot.com/2011/11/c-android-3-stl.html#more"&gt;Читать дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-1501196365413641462?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DIjIfLbyxHpZWT3gIftyadAfq-Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DIjIfLbyxHpZWT3gIftyadAfq-Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DIjIfLbyxHpZWT3gIftyadAfq-Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DIjIfLbyxHpZWT3gIftyadAfq-Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=NlSDvxeXqdg:PhEKCHpu8vY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=NlSDvxeXqdg:PhEKCHpu8vY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=NlSDvxeXqdg:PhEKCHpu8vY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/NlSDvxeXqdg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/1501196365413641462/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=1501196365413641462" title="Комментарии: 5" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/1501196365413641462?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/1501196365413641462?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/NlSDvxeXqdg/c-android-3-stl.html" title="Как написать программу на C++ для Android.&lt;br&gt;Часть 3: Используем С++ класс и STL" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-ZlQOuHgFOcM/TrmW9jwM9fI/AAAAAAAAeWA/hsPRwedsew0/s72-c/video_result.png" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/11/c-android-3-stl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEFR3w_cCp7ImA9WhRTEUk.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-6828203319746825822</id><published>2011-11-01T13:43:00.000+04:00</published><updated>2011-11-01T13:43:36.248+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-01T13:43:36.248+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="VirtualBox" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Многопроцессорный HAL в Windows</title><content type="html">Работая с виртуалками постоянно забываю что-то настроить важное в VirtualBox и ставлю систему с дефолтными настройками, т.е. процессор в виртуальной машине имеет только одно ядро. Потом, даже если поставить больше ядер у процессора, Windows XP и Vista не увидят их, т.к. используют однопроцессорный HAL. Проблему можно решить с помощью утилиты &lt;a href="http://support.microsoft.com/kb/311272"&gt;devcon&lt;/a&gt;. В командной строке набираем:&lt;br /&gt;
&lt;pre&gt;devcon sethwid @ROOT\ACPI_HAL\0000 := +acpiapic_mp !acpiapic_up
devcon update c:\windows\inf\hal.inf acpiapic_mp
&lt;/pre&gt;&lt;br /&gt;
После перезагрузки Windows начинает видеть много ядер.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-6828203319746825822?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Rz-ebT5mRf2dy57HTxJmV62MjdM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rz-ebT5mRf2dy57HTxJmV62MjdM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Rz-ebT5mRf2dy57HTxJmV62MjdM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rz-ebT5mRf2dy57HTxJmV62MjdM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=nM84tkO24d0:oSjYcGLBEw8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=nM84tkO24d0:oSjYcGLBEw8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=nM84tkO24d0:oSjYcGLBEw8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/nM84tkO24d0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/6828203319746825822/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=6828203319746825822" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/6828203319746825822?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/6828203319746825822?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/nM84tkO24d0/virtualbox.html" title="Многопроцессорный HAL в Windows" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/11/virtualbox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IMQn08eSp7ImA9WhRTFkg.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-2071573245709916697</id><published>2011-10-31T14:31:00.000+04:00</published><updated>2011-11-07T11:39:43.371+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-07T11:39:43.371+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="HDD" /><category scheme="http://www.blogger.com/atom/ns#" term="разное" /><title>Наводнение в Тайланде</title><content type="html">&lt;img src="http://1.bp.blogspot.com/-zMRaccG8oAI/TrBIjPd-o5I/AAAAAAAAeUs/cE1AjxDxRs8/s1600/%25D0%25BE%25D1%2582%25D0%25BA%25D0%25B0%25D0%25B7.png"&gt;&lt;br /&gt;
Вчера &lt;a href="http://ru.wikipedia.org/wiki/S.M.A.R.T."&gt;SMART&lt;/a&gt; отрапортовал, что мой Seagate на 1.5 Gb стремительно умирает и нужно срочно забэкапить данные. «Не проблема», подумал я и пошел смотреть где купить новый HDD. Поискав аналог на 1.5&amp;mdash;2 Gb я был сильно удивлен ценами на жесткие диски. Экземпляры, которые стоили около 4000 руб., стали стоить около 8000 руб. Поиск по новостям выявил, что скачущий валютный курс вовсе не причем. Оказалось, что 25% мировых производственных мощностей заблокированы наводнением в Тайланде, где расположены заводы основных производителей (&lt;a href="http://source.cnews.ru/news/top/index.shtml?2011/10/31/462494"&gt;пруфлинк&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
Новости не очень радостные в том плане, что цены уже выросли и ещё в том, что и дальше будут расти. Для читателей эта новость означает, что 3-я часть цикла статей про Android задерживается до покупки нового HDD и восстановления системы. Надеюсь, что на это уйдет не больше недели.&lt;br /&gt;
&lt;br /&gt;
P.S. 5-ти летняя гарантия Seagate на жесткие диски оказалась пшиком. На сайте написано, что гарантия действует, но из России оформить возврат мне не удалось, поэтому Seagate покупать не советую.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-2071573245709916697?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/smDVaSYGSEdG7Yiu72z9l4VI6QU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/smDVaSYGSEdG7Yiu72z9l4VI6QU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/smDVaSYGSEdG7Yiu72z9l4VI6QU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/smDVaSYGSEdG7Yiu72z9l4VI6QU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=1Uet750FVuA:bnUq5jJqoq4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=1Uet750FVuA:bnUq5jJqoq4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=1Uet750FVuA:bnUq5jJqoq4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/1Uet750FVuA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/2071573245709916697/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=2071573245709916697" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/2071573245709916697?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/2071573245709916697?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/1Uet750FVuA/blog-post.html" title="Наводнение в Тайланде" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-zMRaccG8oAI/TrBIjPd-o5I/AAAAAAAAeUs/cE1AjxDxRs8/s72-c/%25D0%25BE%25D1%2582%25D0%25BA%25D0%25B0%25D0%25B7.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/10/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8EQ387eip7ImA9WhRUEUs.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-2545450079028370843</id><published>2011-10-20T07:00:00.006+04:00</published><updated>2012-01-21T21:43:22.102+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-21T21:43:22.102+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="JNI" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Как написать программу на C++ для Android.Часть 2: Используем простейшую С++ функцию.</title><content type="html">&lt;a href="http://jia3ep.blogspot.com/2011/10/c-android-1.html"&gt;Часть 1&lt;/a&gt; | &lt;b&gt;Часть 2&lt;/b&gt; | &lt;a href="http://jia3ep.blogspot.com/2011/11/c-android-3-stl.html"&gt;Часть 3&lt;/a&gt;  | &lt;a href="http://jia3ep.blogspot.com/2012/01/c-android-4-java.html"&gt;Часть 4&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-0jpvNge1ugE/Tp80O_2NfpI/AAAAAAAAeKU/8DZcJHTpsc8/s1600/android.jpg" imageanchor="1" style="clear: left; float: center; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="145" src="http://2.bp.blogspot.com/-0jpvNge1ugE/Tp80O_2NfpI/AAAAAAAAeKU/8DZcJHTpsc8/s200/android.jpg" width="200"&gt;&lt;/a&gt;&lt;/div&gt;В &lt;a href="http://jia3ep.blogspot.com/2011/10/c-android-1.html"&gt;предыдущей части&lt;/a&gt; я рассказал как настроить окружение для разработки программ на C++ под Android. В этой части попробуем создать простейший проект с примитивным C++ кодом.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://jia3ep.blogspot.com/2011/10/c-android-2.html#more"&gt;Читать дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-2545450079028370843?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CwY4NHLryKQzQWaxPxwcXAhoib4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CwY4NHLryKQzQWaxPxwcXAhoib4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CwY4NHLryKQzQWaxPxwcXAhoib4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CwY4NHLryKQzQWaxPxwcXAhoib4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=QkOFgfVMoeA:3sl7TE1Obw8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=QkOFgfVMoeA:3sl7TE1Obw8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=QkOFgfVMoeA:3sl7TE1Obw8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/QkOFgfVMoeA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/2545450079028370843/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=2545450079028370843" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/2545450079028370843?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/2545450079028370843?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/QkOFgfVMoeA/c-android-2.html" title="Как написать программу на C++ для Android.&lt;br&gt;Часть 2: Используем простейшую С++ функцию." /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-0jpvNge1ugE/Tp80O_2NfpI/AAAAAAAAeKU/8DZcJHTpsc8/s72-c/android.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/10/c-android-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAAQXc7fSp7ImA9WhRUEUs.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-134420522848199444</id><published>2011-10-15T19:50:00.005+04:00</published><updated>2012-01-21T21:42:20.905+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-21T21:42:20.905+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Как написать программу на C++ для Android.Часть 1: настраиваем среду разработки.</title><content type="html">&lt;b&gt;Часть 1&lt;/b&gt; | &lt;a href="http://jia3ep.blogspot.com/2011/10/c-android-2.html"&gt;Часть 2&lt;/a&gt; | &lt;a href="http://jia3ep.blogspot.com/2011/11/c-android-3-stl.html"&gt;Часть 3&lt;/a&gt;  | &lt;a href="http://jia3ep.blogspot.com/2012/01/c-android-4-java.html"&gt;Часть 4&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
Google Developers Day, который я &lt;a href="http://jia3ep.blogspot.com/2011/09/blog-post.html"&gt;анонсировал&lt;/a&gt;, &lt;a href="http://googlerussiablog.blogspot.com/2011/10/google-developer-day-2011.html"&gt;завершился&lt;/a&gt;. Несмотря на то, что доклады оставляли желать лучшего (в отличии от прошлого года), на Android секции было столько народу, что приходилось сидеть в проходах. Это говорит о том, что существует немалый интерес к этой теме. Видео с докладами обещали выложить на &lt;a href="http://www.youtube.com/user/GoogleRU"&gt;YouTube&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
Все это совпало с выходом Ubuntu 11.10, которую хотелось посмотреть. Итогом стала идея напистать несколько  статей на тему разработки на C++ под Android. В этой части, надеюсь, не последней, я опишу как с нуля настроить окружение для разработки. Итак, устанавливаем &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu 11.10&lt;/a&gt;:&lt;br&gt;
&lt;img align="middle" src="http://4.bp.blogspot.com/-76bGBroGZbQ/TpmdoMbYJ0I/AAAAAAAAeGc/A-yCqzOY_Sc/s1600/setup_ubuntu.png"&gt;&lt;br&gt;
&lt;a href="http://jia3ep.blogspot.com/2011/10/c-android-1.html#more"&gt;Читать дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-134420522848199444?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t2EsK-odzLHxRThBIhUpPlL_NfM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t2EsK-odzLHxRThBIhUpPlL_NfM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t2EsK-odzLHxRThBIhUpPlL_NfM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t2EsK-odzLHxRThBIhUpPlL_NfM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=AS4WnfTaAf0:uB6FpFVu46Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=AS4WnfTaAf0:uB6FpFVu46Y:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=AS4WnfTaAf0:uB6FpFVu46Y:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/AS4WnfTaAf0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/134420522848199444/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=134420522848199444" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/134420522848199444?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/134420522848199444?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/AS4WnfTaAf0/c-android-1.html" title="Как написать программу на C++ для Android.&lt;br&gt;Часть 1: настраиваем среду разработки." /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-76bGBroGZbQ/TpmdoMbYJ0I/AAAAAAAAeGc/A-yCqzOY_Sc/s72-c/setup_ubuntu.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/10/c-android-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUGR389eSp7ImA9WhdbE0k.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-664455363792089213</id><published>2011-10-11T18:27:00.000+04:00</published><updated>2011-10-11T18:27:06.161+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-11T18:27:06.161+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++0x" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Как купить новый стандарт C++</title><content type="html">Уже много кто написал, что вышел долгожданный стандарт C++. Почему-то часто упоминается, что его можно купить за 18$. Это неправда. Новый стандарт ISO/IEC 14882:2011 можно купить на &lt;a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372"&gt;сайте ISO&lt;/a&gt; за 352 швейцарских франка (примерно 387 долларов США).&lt;br /&gt;
&lt;br /&gt;
Что касается $18, которые везде упоминаются, то Саттер &lt;a href="http://herbsutter.com/2011/10/10/iso-c11-published/"&gt;у себя в блоге&lt;/a&gt; написал, что ANSI опубликовала &lt;b&gt;старый&lt;/b&gt; стандарт и продает его за эти деньги (на самом деле, &lt;a href="http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS/ISO/IEC%2014882-2003"&gt;можно убедиться&lt;/a&gt;, что сайте ANSI указана цена $30). Новый стандарт ANSI &lt;a href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882%3A2011"&gt;уже продает&lt;/a&gt; за $403.&lt;br /&gt;
&lt;br /&gt;
Удачных покупок!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-664455363792089213?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nAqgSc39DxG8HCA387giIkRGeZw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nAqgSc39DxG8HCA387giIkRGeZw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nAqgSc39DxG8HCA387giIkRGeZw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nAqgSc39DxG8HCA387giIkRGeZw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=tfH2ukLGMts:1FKhwhtItog:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=tfH2ukLGMts:1FKhwhtItog:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=tfH2ukLGMts:1FKhwhtItog:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/tfH2ukLGMts" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/664455363792089213/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=664455363792089213" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/664455363792089213?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/664455363792089213?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/tfH2ukLGMts/c.html" title="Как купить новый стандарт C++" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/10/c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cESHw7eyp7ImA9WhdUGEk.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-1962404488352959486</id><published>2011-10-06T00:01:00.003+04:00</published><updated>2011-10-06T00:03:29.203+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-06T00:03:29.203+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="разное" /><title>Windows 8 работает на процессорах ARM</title><content type="html">&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/XR5ID5XuIYA?rel=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;a href="http://developer.nvidia.com/windows-8"&gt;Windows 8 In Action on upcoming Tegra "Kal-El" Processor&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-1962404488352959486?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/U6_w2OKVP8DrnrIO6ykQ-FG1aYU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U6_w2OKVP8DrnrIO6ykQ-FG1aYU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/U6_w2OKVP8DrnrIO6ykQ-FG1aYU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U6_w2OKVP8DrnrIO6ykQ-FG1aYU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=Lj7fDFMV3Vc:0_mrRCA8T7c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=Lj7fDFMV3Vc:0_mrRCA8T7c:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=Lj7fDFMV3Vc:0_mrRCA8T7c:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/Lj7fDFMV3Vc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/1962404488352959486/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=1962404488352959486" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/1962404488352959486?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/1962404488352959486?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/Lj7fDFMV3Vc/windows-8-arm.html" title="Windows 8 работает на процессорах ARM" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/XR5ID5XuIYA/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/10/windows-8-arm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YARX0-fyp7ImA9WhdUEEs.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-8834661353074032907</id><published>2011-09-26T22:19:00.000+04:00</published><updated>2011-09-26T22:19:04.357+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-26T22:19:04.357+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="разное" /><title>Куда пойти осенью в Москве</title><content type="html">На этой неделе Microsoft приглашает на очередной Microsoft Innovation Day. Зарегистрироваться можно по &lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032493256&amp;Culture=ru-RU"&gt;ссылке&lt;/a&gt;. Надеюсь там услышать из первых рук небольшой into для Windows 8 и Visual Studio 11, которые уже доступны для скачивания на портале MSDN. Также интересно послушать про новинки в SQL Server 11 "Denali".&lt;br /&gt;
&lt;br /&gt;
Google также организует традиционный Google Developer Day в Москве 10 октября. Регистрация кажется ещё &lt;a href="http://www.google.com/intl/ru/events/developerday/2011/moscow/"&gt;идет&lt;/a&gt;. Тут рассчитываю услышать про TV от Google и как планируется двигать Android в сторону устройств с HD экранами.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-8834661353074032907?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZcydnMhRMRghPyHpnXMgxDWq8hw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZcydnMhRMRghPyHpnXMgxDWq8hw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZcydnMhRMRghPyHpnXMgxDWq8hw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZcydnMhRMRghPyHpnXMgxDWq8hw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=4X-zDc8J4BE:r5lncxEix8s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=4X-zDc8J4BE:r5lncxEix8s:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=4X-zDc8J4BE:r5lncxEix8s:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/4X-zDc8J4BE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/8834661353074032907/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=8834661353074032907" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/8834661353074032907?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/8834661353074032907?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/4X-zDc8J4BE/blog-post.html" title="Куда пойти осенью в Москве" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/09/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEADQXc-eSp7ImA9WhdWE0k.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-6036617524570016981</id><published>2011-09-05T23:16:00.004+04:00</published><updated>2011-09-07T00:59:30.951+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-07T00:59:30.951+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="XPath" /><category scheme="http://www.blogger.com/atom/ns#" term="XQuery" /><category scheme="http://www.blogger.com/atom/ns#" term="XML" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title>XML Schema в SQL Server</title><content type="html">Я &lt;a href="http://jia3ep.blogspot.com/search/label/XQuery"&gt;уже как-то писал&lt;/a&gt; про то, что в SQL можно читать элементы XML прямо из столбца с соответствующим типом. Для того, чтобы SQL сервер контролировал правильность этого поля, используется специальный язык описания правил — &lt;a href="http://ru.wikipedia.org/wiki/XML_Schema"&gt;XML Schema&lt;/a&gt;.  Рассмотрим простейший пример такой схемы (сегодня все примеры для Microsoft SQL Server 2008): &lt;br /&gt;
&lt;pre class="brush:xml" name="code"&gt;&amp;lt;xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;

    &amp;lt;xsd:complexType name="PointType"&amp;gt;
     &amp;lt;xsd:attribute name="X" type="xsd:int" /&amp;gt;
     &amp;lt;xsd:attribute name="Y" type="xsd:int" /&amp;gt;
     &amp;lt;xsd:attribute name="Z" type="xsd:int" use="optional" /&amp;gt;
    &amp;lt;/xsd:complexType&amp;gt;

    &amp;lt;xsd:element name="Point" type="PointType" /&amp;gt;
&amp;lt;/xsd:schema&amp;gt;&lt;/pre&gt;Данная схема разрешает только XML следующих видов: &lt;br /&gt;
&lt;pre class="brush:xml" name="code"&gt;&amp;lt;Point X="100" Y="100" /&amp;gt;
&amp;lt;!-- или --&amp;gt;
&amp;lt;Point X="100" Y="100" Z="500"/&amp;gt;&lt;/pre&gt;При этом аттрибуты &lt;tt&gt;X&lt;/tt&gt; и &lt;tt&gt;Y&lt;/tt&gt; являются обязательными, а &lt;tt&gt;Z&lt;/tt&gt; &amp;mdash; опциональным. Для аттрибутов допускается только тип &lt;tt&gt;int&lt;/tt&gt;. В MS SQL Server создание подобной схемы будет выглядеть так: &lt;br /&gt;
&lt;pre class="brush:sql" name="code"&gt;CREATE XML SCHEMA COLLECTION test AS '
&amp;lt;xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;

    &amp;lt;xsd:complexType name="PointType"&amp;gt;
     &amp;lt;xsd:attribute name="X" type="xsd:int" /&amp;gt;
     &amp;lt;xsd:attribute name="Y" type="xsd:int" /&amp;gt;
     &amp;lt;xsd:attribute name="Z" type="xsd:int" use="optional" /&amp;gt;
    &amp;lt;/xsd:complexType&amp;gt;

    &amp;lt;xsd:element name="Point" type="PointType" /&amp;gt;
&amp;lt;/xsd:schema&amp;gt;
'
GO&lt;/pre&gt;Далее можно попробовать создать xml с данной схемой (ниже используется переменная для того, чтобы этот код можно было легко скопировать и попробовать, но тоже самое верно и для столбца в таблице): &lt;br /&gt;
&lt;pre class="brush:sql" name="code"&gt;-- объявляем переменную @xml с ранее созданной схемой test
DECLARE @xml xml(test)

-- заполняем тестовыми данными
SET @xml='&amp;lt;Point X="10" Y="10" /&amp;gt;'

-- делаем выборку
SELECT @xml.value('(/Point/@X)[1]','int'), @xml.value('(/Point/@Y)[1]','int')&lt;/pre&gt;При попытке записать невалидные данные SQL Server выдаст ошибку: &lt;br /&gt;
&lt;pre class="brush:sql" name="code"&gt;-- пробуем задать невалидный XML
SET @xml='&amp;lt;WrongPoint X="10" Y="10" /&amp;gt;'

-- получаем ошибку
-- XML Validation: Declaration not found for element 'WrongPoint'. Location: /*:WrongPoint[1]
&lt;/pre&gt;Таким образом, наличие схемы гарантирует валидность данных и нет необходимости обрабатывать возможные ошибки самостоятельно.&lt;br /&gt;
&lt;br /&gt;
Ссылки: &lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/ru-ru/library/ms187856.aspx"&gt;Управление коллекциями XML-схем на сервере&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/ru-ru/library/ms187339(v=SQL.105).aspx"&gt;Тип данных XML в MS SQL Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/ru-ru/library/ms189075.aspx"&gt;Справочник по языку XQuery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/ru-ru/details.aspx?FamilyID=8B3695D9-415E-41F0-A079-25AB0412424B"&gt;Бесплатная версия SQL Server 2008 R2 Express Edition&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-6036617524570016981?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GpNdHTBOse9NoSU_TW00PTNiN7A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GpNdHTBOse9NoSU_TW00PTNiN7A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GpNdHTBOse9NoSU_TW00PTNiN7A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GpNdHTBOse9NoSU_TW00PTNiN7A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=EoZhi68voUI:YNpMhVcIjZI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=EoZhi68voUI:YNpMhVcIjZI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=EoZhi68voUI:YNpMhVcIjZI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/EoZhi68voUI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/6036617524570016981/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=6036617524570016981" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/6036617524570016981?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/6036617524570016981?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/EoZhi68voUI/xml-schema-sql-server.html" title="XML Schema в SQL Server" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/09/xml-schema-sql-server.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QBRX4zfip7ImA9WhdQFUw.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-7384171115520419564</id><published>2011-08-15T22:56:00.006+04:00</published><updated>2011-08-16T21:22:34.086+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-16T21:22:34.086+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="boost" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Автоматический выбор типа</title><content type="html">&lt;img border="0" src="https://lh3.googleusercontent.com/-_qBfzOKvEps/TklvP88y_qI/AAAAAAAAdHk/7Ydlg2-J4Ng/s800/select-cookies.jpg" /&gt;&lt;br /&gt;
В библиотеке &lt;a href="http://www.boost.org"&gt;Boost&lt;/a&gt; есть набор средств для выбора типов. Например, можно выбрать наименьший тип с не менее чем N бит:&lt;pre&gt;typedef boost::int_t&amp;lt;N&amp;gt;::least my_int_t;&lt;/pre&gt;Или тип, который точно сможет уместить в себя все числа в диапазоне от 0 до V:&lt;pre&gt;typedef boost::int_max_value_t&amp;lt;V&amp;gt;::last my_int_t;&lt;/pre&gt;Или ещё целый беззнаковый тип, который может работать с числами от 0 до V и, при этом, самый быстрый на данной платформе:&lt;pre&gt;typedef boost::uint_value_t&amp;lt;V&amp;gt;::fast my_uint_t;&lt;/pre&gt;&lt;br /&gt;
Полный список можно посмотреть в &lt;a href="http://www.boost.org/doc/libs/release/libs/integer/doc/html/boost_integer/integer.html#boost_integer.integer.sized"&gt;документации&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-7384171115520419564?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wjOEJndfnnMu9NDAwH-T_d5YvIU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wjOEJndfnnMu9NDAwH-T_d5YvIU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wjOEJndfnnMu9NDAwH-T_d5YvIU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wjOEJndfnnMu9NDAwH-T_d5YvIU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=8KSPJwOkFjA:WrwAK1vfJ9s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=8KSPJwOkFjA:WrwAK1vfJ9s:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=8KSPJwOkFjA:WrwAK1vfJ9s:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/8KSPJwOkFjA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/7384171115520419564/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=7384171115520419564" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/7384171115520419564?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/7384171115520419564?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/8KSPJwOkFjA/blog-post_15.html" title="Автоматический выбор типа" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/-_qBfzOKvEps/TklvP88y_qI/AAAAAAAAdHk/7Ydlg2-J4Ng/s72-c/select-cookies.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/08/blog-post_15.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EGRH08eip7ImA9WhdbF0Q.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-3599089513167307558</id><published>2011-08-12T18:30:00.002+04:00</published><updated>2011-10-17T00:07:05.372+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-17T00:07:05.372+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="HR" /><title>ЭЛВИС-НеоТек нанимает на работу</title><content type="html">&lt;script src="http://api-maps.yandex.ru/1.1/?key=ANIKRE4BAAAAqbbtBQMAJCFnS5TmgOMWglnZ-eo1EJ6rgtEAAAAAAAAAAAAicQLZwbocMbzcLgJYrsHwoO7wDg==&amp;amp;modules=pmap&amp;amp;wizard=constructor" type="text/javascript"&gt;
&lt;/script&gt;&lt;br&gt;
&lt;script type="text/javascript"&gt;
    YMaps.jQuery(window).load(function () {
        var map = new YMaps.Map(YMaps.jQuery("#YMapsID-1831")[0]);
        map.setCenter(new YMaps.GeoPoint(37.215592,55.986611), 15, YMaps.MapType.MAP);
        map.addControl(new YMaps.Zoom());
        map.addControl(new YMaps.ToolBar());
        YMaps.MapType.PMAP.getName = function () { return "Народная"; };
        map.addControl(new YMaps.TypeControl([
            YMaps.MapType.MAP,
            YMaps.MapType.SATELLITE,
            YMaps.MapType.HYBRID,
            YMaps.MapType.PMAP
        ], [0, 1, 2, 3]));

        YMaps.Styles.add("constructor#pmlbmPlacemark", {
            iconStyle : {
                href : "http://api-maps.yandex.ru/i/0.3/placemarks/pmlbm.png",
                size : new YMaps.Point(28,29),
                offset: new YMaps.Point(-8,-27)
            }
        });

       map.addOverlay(createObject("Placemark", new YMaps.GeoPoint(37.217824,55.984421), "constructor#pmlbmPlacemark", "ЭЛВИС-НеоТек"));
        
        function createObject (type, point, style, description) {
            var allowObjects = ["Placemark", "Polyline", "Polygon"],
                index = YMaps.jQuery.inArray( type, allowObjects),
                constructor = allowObjects[(index == -1) ? 0 : index];
                description = description || "";
            
            var object = new YMaps[constructor](point, {style: style, hasBalloon : !!description});
            object.description = description;
            
            return object;
        }
    });
&lt;/script&gt;Компания &lt;a href="http://www.elvees.ru/"&gt;ЭЛВИС-НеоТек&lt;/a&gt; приглашает на работу разработчиков. &lt;a href="http://jia3ep.blogspot.com/2011/08/blog-post.html#more"&gt;Читать дальше »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-3599089513167307558?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Teo0WMDyCDlsv1SWN2zEWnHPI1Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Teo0WMDyCDlsv1SWN2zEWnHPI1Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Teo0WMDyCDlsv1SWN2zEWnHPI1Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Teo0WMDyCDlsv1SWN2zEWnHPI1Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=YhV8gWhU9zs:xBfdvbNWfro:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=YhV8gWhU9zs:xBfdvbNWfro:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=YhV8gWhU9zs:xBfdvbNWfro:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/YhV8gWhU9zs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/3599089513167307558/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=3599089513167307558" title="Комментарии: 4" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/3599089513167307558?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/3599089513167307558?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/YhV8gWhU9zs/blog-post.html" title="ЭЛВИС-НеоТек нанимает на работу" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/08/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQHRXY5eyp7ImA9WhdRGUw.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-6926405613860968506</id><published>2011-08-09T23:14:00.001+04:00</published><updated>2011-08-09T23:15:34.823+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-09T23:15:34.823+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>ternary operator (?:)</title><content type="html">Интересный факт: тернарный оператор (&lt;tt&gt;?:&lt;/tt&gt;) может стоять не только в правой части выражения, но и в левой. Пример:&lt;pre class="brush:cpp" name="code"&gt;    int a = 5; int b = 10;
    (a &amp;gt; b ? a : b) = 100; // большему из a и b присвоим 100
    cout &amp;lt;&amp;lt; "a=" &amp;lt;&amp;lt; a &amp;lt;&amp;lt; " b=" &amp;lt;&amp;lt; b &amp;lt;&amp;lt; endl;

    // result will be: a=5 b=100&lt;/pre&gt;&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-6926405613860968506?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Jga9_5EDTVSAl4x9PC5d-SUNk1E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Jga9_5EDTVSAl4x9PC5d-SUNk1E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Jga9_5EDTVSAl4x9PC5d-SUNk1E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Jga9_5EDTVSAl4x9PC5d-SUNk1E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=WLnfnSzoFys:YiKFEyNmn0k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=WLnfnSzoFys:YiKFEyNmn0k:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=WLnfnSzoFys:YiKFEyNmn0k:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/WLnfnSzoFys" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/6926405613860968506/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=6926405613860968506" title="Комментарии: 2" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/6926405613860968506?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/6926405613860968506?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/WLnfnSzoFys/ternary-operator.html" title="ternary operator (?:)" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/08/ternary-operator.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMBRHg5cCp7ImA9WhdRGUw.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-5469870068782311951</id><published>2011-08-05T14:30:00.003+04:00</published><updated>2011-08-09T23:17:35.628+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-09T23:17:35.628+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Безопасны ли безопасные функции в Windows?</title><content type="html">Visual C++ при компиляции ANSI функций работы со строками постоянно выдает предупреждение о том, что есть более безопасные версии и использовать нужно именно их. Однако, по набору параметров они могут вовсе не отличаться, что не позволяет заметить разницу на этапе компиляции. Например, имеем следующий код:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;int main(int argc, char *argv[])
{
    const char* stLine = "s=Media Presentation\n";

    std::vector&amp;lt;char&amp;gt; param(1024);

    _snscanf( stLine, 20, "s=%[^\r\n]", &amp;amp;param[0] );

    return 0;
}&lt;/pre&gt;Код этот отлично работает, но при компиляции выдается предупреждение, что стоит использовать фунуцию &lt;tt&gt;_snscanf_s&lt;/tt&gt;. Смотрим &lt;a href=http://msdn.microsoft.com/en-us/library/dktz45bk.aspx&gt;документацию&lt;/a&gt; и на первый взгляд отличий никаких. Хорошо, меняем на &lt;tt&gt;_snscanf_s&lt;/tt&gt;:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;_snscanf_s( stLine, 20, "s=%[^\r\n]", &amp;amp;param[0] );&lt;/pre&gt;В результате программа отлично компилируется теперь уже без предупреждений, но падает в процессе выполнения. В чем же дело?&lt;br /&gt;
&lt;br /&gt;
Если почитать документацию более внимательно, то находим следующее небольшое замечание:&lt;br /&gt;
&lt;blockquote&gt;The buffer size parameter is required with the type field characters c, C, s, S, and [. For more information, see &lt;a href=http://msdn.microsoft.com/en-us/library/6ttkkkhh.aspx&gt;scanf Type Field Characters.&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
Это означает, что теперь после каждого строкового параметра нужно передавать размер буфера, т.&amp;nbsp;е. код должен выглядеть следующим образом:&lt;pre class="brush:cpp" name="code"&gt;_snscanf_s( stLine, 20, "s=%[^\r\n]", &amp;amp;param[0], param.size() );&lt;/pre&gt;&lt;br /&gt;
В этой ситуации плохо то, что функция стала работать хуже, чем небезопасный оригинал. &lt;b&gt;Я ни в коем случае не агитирую за использование опасных фукнций&lt;/b&gt;, просто нужно учитывать, что механическая замена одних на другие приводит к ошибкам.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-5469870068782311951?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xdw9LsG_AdRDbz8vV6h0snFDcW0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xdw9LsG_AdRDbz8vV6h0snFDcW0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xdw9LsG_AdRDbz8vV6h0snFDcW0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xdw9LsG_AdRDbz8vV6h0snFDcW0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=qo3bnt4iHrc:sj3zKBJzRSM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=qo3bnt4iHrc:sj3zKBJzRSM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=qo3bnt4iHrc:sj3zKBJzRSM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/qo3bnt4iHrc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/5469870068782311951/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=5469870068782311951" title="Комментарии: 3" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/5469870068782311951?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/5469870068782311951?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/qo3bnt4iHrc/windows.html" title="Безопасны ли безопасные функции в Windows?" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/08/windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMGRHs_cSp7ImA9WhdSFk8.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-6606435642147113312</id><published>2011-07-26T01:11:00.001+04:00</published><updated>2011-07-26T01:13:45.549+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-26T01:13:45.549+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="boost" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Зачем в checked_delete столько кода?</title><content type="html">Если посмотреть на реализацию функции &lt;tt&gt;checked_delete&lt;/tt&gt; в библиотеке &lt;a href="http://www.boost.org/doc/libs/release/boost/checked_delete.hpp"&gt;Boost&lt;/a&gt;, то можно увидеть следующий код:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;template&amp;lt;class T&amp;gt; inline void checked_delete(T * x)
{
    // intentionally complex - simplification causes regressions
    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
    (void) sizeof(type_must_be_complete);
    delete x;
}&lt;/pre&gt;&lt;br /&gt;
Для чего нужны такие сложности и почему упрощение приведет к регрессу? Дело вот в чем: чтобы корректно удалить объект, его тип &lt;a href="http://jia3ep.blogspot.com/2009/10/deleting-incomplete-type.html"&gt;должен быть полностью определен&lt;/a&gt; (complete type). Проверяется это в несколько этапов:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Вызов оператора &lt;tt&gt;sizeof&lt;/tt&gt; для неопределенного типа приведет к ошибке компиляции.&lt;/li&gt;
&lt;li&gt;На случай, если &lt;tt&gt;sizeof&lt;/tt&gt; вернет 0 (в случает нестандартного расширения в компиляторе), создается массив с отрицательной длинной, что запрещено во всех компиляторах.&lt;/li&gt;
&lt;li&gt;Вторая строка нужна для компилятора &lt;a href="http://en.wikipedia.org/wiki/CodeWarrior"&gt;Metrowerks CodeWarrior&lt;/a&gt;, который не будет инстанцировать первый &lt;tt&gt;typedef&lt;/tt&gt;, пока он не используется.&lt;/li&gt;
&lt;li&gt;Преобразование результата &lt;tt&gt;sizeof&lt;/tt&gt; к &lt;tt&gt;void&lt;/tt&gt; нужно, чтобы избежать предупреждений во время компиляции.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Ссылки:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://boost.2283326.n4.nabble.com/boost-checked-delete-hpp-tp2661980p2661981.html"&gt;Разъяснения от автора &lt;tt&gt;checked_delete&lt;/tt&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-6606435642147113312?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9nsBpXzY8nf7Pc6liOu3Q8795NU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9nsBpXzY8nf7Pc6liOu3Q8795NU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9nsBpXzY8nf7Pc6liOu3Q8795NU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9nsBpXzY8nf7Pc6liOu3Q8795NU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=P9SpHCE6nNI:nzspWkDU1EQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=P9SpHCE6nNI:nzspWkDU1EQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=P9SpHCE6nNI:nzspWkDU1EQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/P9SpHCE6nNI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/6606435642147113312/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=6606435642147113312" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/6606435642147113312?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/6606435642147113312?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/P9SpHCE6nNI/checkeddelete.html" title="Зачем в checked_delete столько кода?" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/07/checkeddelete.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cHQX4yfyp7ImA9WhdQFU8.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-2938805696945113398</id><published>2011-06-21T00:31:00.002+04:00</published><updated>2011-08-17T01:10:30.097+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-17T01:10:30.097+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="boost" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>operator&amp; (address-of)</title><content type="html">C++ позволяет переопределять в своих классах ряд операторов, и в их числе &amp;mdash; оператор взятия адреса. Попробуем воспользоваться этой возможностью:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;struct useless_type {};
class nonaddressable {
  useless_type operator&amp;amp;() const;
};&lt;/pre&gt;Пример класса, где переопределен &lt;tt&gt;operator&amp;amp;&lt;/tt&gt; &amp;mdash; это &lt;tt&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ezzw7k98.aspx"&gt;CComPtr&lt;/a&gt;&lt;/tt&gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь, если попробовать взять адрес экземпляра класса &lt;tt&gt;nonaddressable&lt;/tt&gt;, то получим ошибку:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;nonaddressable* xpe = &amp;amp;x; /* error */&lt;/pre&gt;Ошибка может возникнуть по двум причинам: во-первых, в примере оператор взятия адреса приватный, во-вторых &amp;mdash; он возвращает экземпляр &lt;tt&gt;useless_type&lt;/tt&gt;, а вовсе не указатель на &lt;tt&gt;nonaddressable&lt;/tt&gt;.&lt;br /&gt;
&lt;br /&gt;
Для разрешения этой ситуации в C++ существует крайне кривой механизм. Можно написать следующий код:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;nonaddressable* xp = 
  reinterpret_cast&amp;lt;nonaddressable*&amp;gt;( &amp;amp;reinterpret_cast&amp;lt;char&amp;amp;&amp;gt;( x ) );&lt;/pre&gt;Стандарт гарантирует, что это будет работать, но выглядит все равно ужасно. К счастью, в библиотеке Boost существует обертка над этим механизмом &amp;mdash; функция &lt;tt&gt;&lt;a href=http://boost.org/doc/libs/release/libs/utility/utility.htm#addressof&gt;boost::addressof&lt;/a&gt;&lt;/tt&gt;, которая учитывает возможные const-volatile. Пользоваться просто:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;nonaddressable* xp = boost::addressof(x);&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-2938805696945113398?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4tc8_2Imsilvxv8MJS_CQnA3COo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4tc8_2Imsilvxv8MJS_CQnA3COo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4tc8_2Imsilvxv8MJS_CQnA3COo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4tc8_2Imsilvxv8MJS_CQnA3COo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=G579WqBwYo4:IGbYoDov328:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=G579WqBwYo4:IGbYoDov328:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=G579WqBwYo4:IGbYoDov328:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/G579WqBwYo4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/2938805696945113398/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=2938805696945113398" title="Комментарии: 3" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/2938805696945113398?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/2938805696945113398?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/G579WqBwYo4/operator-address-of.html" title="operator&amp; (address-of)" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/06/operator-address-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcNR344eCp7ImA9WhZbEkg.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-5192381262830008170</id><published>2011-06-16T23:36:00.001+04:00</published><updated>2011-06-16T23:38:16.030+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-16T23:38:16.030+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Empathy" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Ошибка сети в Empathy</title><content type="html">С 10 июня Empathy, стандартный мессанджер в Ubuntu 11.04, начал выдавать сообщение &lt;i&gt;Ошибка сети&lt;/i&gt; (или &lt;i&gt;Network error&lt;/i&gt; в английской версии) при попытке подключения аккаунта ICQ. Странно, что поиск в Google выдает кучу решений, которые не работают в версии 11.04.&lt;br /&gt;
&lt;br /&gt;
Проблема описана в баг-трэкере Empathy (ошибка &lt;a href="https://bugs.launchpad.net/ubuntu/+source/telepathy-haze/+bug/795932"&gt;№795932&lt;/a&gt;). Если то, что выдает поиск Google не помогает, то решается путем написания в консоли следующих команд:&lt;br /&gt;
&lt;pre class="brush:bash" name="code"&gt;user@home:~$ mc-tool list | grep icq&lt;/pre&gt;Выдается что-то типа &lt;tt&gt;haze/icq/_31102050910&lt;/tt&gt;. То, что выдалось подставляем в следующие команды:&lt;pre class="brush:bash" name="code"&gt;user@home:~$ mc-tool update haze/icq/_31102050910 string:encryption=no_encryption
user@home:~$ mc-tool update haze/icq/_31102050910 bool:use-clientlogin=0&lt;/pre&gt;Перезапускаем Empathy и все работает. Если нет, то отписываемся в &lt;a href="https://bugs.launchpad.net/ubuntu/+source/telepathy-haze/+bug/795932"&gt;баг-трэкере&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-5192381262830008170?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/32Qmgfo5CXkKq_Y_QNRpagxrjCM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/32Qmgfo5CXkKq_Y_QNRpagxrjCM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/32Qmgfo5CXkKq_Y_QNRpagxrjCM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/32Qmgfo5CXkKq_Y_QNRpagxrjCM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=76fppZHLmaM:aQYtla9gNVY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=76fppZHLmaM:aQYtla9gNVY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=76fppZHLmaM:aQYtla9gNVY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/76fppZHLmaM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/5192381262830008170/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=5192381262830008170" title="Комментарии: 2" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/5192381262830008170?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/5192381262830008170?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/76fppZHLmaM/empathy.html" title="Ошибка сети в Empathy" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/06/empathy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIHR3g5fip7ImA9WhZVEUU.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-2126293783636911396</id><published>2011-05-23T23:54:00.001+04:00</published><updated>2011-05-23T23:55:36.626+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T23:55:36.626+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="template" /><category scheme="http://www.blogger.com/atom/ns#" term="VisualStudio" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Partial template specialization for pointers to __stdcall functions</title><content type="html">Если мы хотим написать частичную специализацию шаблона, например, для указателя на функцию, то обычно пишем что-то вроде следующего кода:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;template&amp;lt;typename F&amp;gt; class TFunction;

template&amp;lt;typename R, typename T0&amp;gt;
class TFunction&amp;lt;R(*)(T0)&amp;gt;
{
};&lt;/pre&gt;Здесь мы пытаемся специализировать шаблон &lt;tt&gt;TFunction&lt;/tt&gt; для указателя на функцию одного аргумента. Далее имеем два указателя:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;typedef bool (*my_function_f)(int);             // (1)
typedef bool (__stdcall *my_function_f2)(int);  // (2)&lt;/pre&gt;Для (1) специализация, которая написана выше вполне подходит, а вот для (2) — нет. По умолчанию, предполагается что функция использует соглашение вызова &lt;tt&gt;__cdecl&lt;/tt&gt;. Если мы хотим передавать указатели на функции с соглашением вызова &lt;tt&gt;__stdcall&lt;/tt&gt;, то необходимо для этого случая написать отдельную специализацию:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;template&amp;lt;typename R, typename T0&amp;gt;
class TFunction&amp;lt;R(__stdcall *)(T0)&amp;gt;
{
};&lt;/pre&gt;Кажется, этого достаточно. Однако, при компиляции кода под x64 процессоры ключевое слово &lt;tt&gt;__stdcall&lt;/tt&gt;, которое обозначает порядок вызова функций, игнорируется. Обычно это незаметно, но если вы пытаетесь написать частичную специализацию шаблона, то проявляются неприятные эффекты. А именно, две специализации, которые написаны выше, получаются абсолютно одинаковыми, что приводит к ошибке компиляции. Решением будет отключить компиляцию второй специализации, например, так:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;#ifndef _M_X64
template&amp;lt;typename R, typename T0&amp;gt;
class TFunction&amp;lt;R(__stdcall *)(T0)&amp;gt;
{
};
#endif&lt;/pre&gt;Макрос &lt;tt&gt;_M_X64&lt;/tt&gt; предопределен для x64 процессоров.&lt;br /&gt;
&lt;br /&gt;
Ссылки по теме:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/q/297654/123111"&gt;What is __stdcall?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.learncpp.com/cpp-tutorial/146-partial-template-specialization/"&gt;Partial template specialization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Calling_convention"&gt;Calling convention&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/b0084kay(VS.80).aspx"&gt;Predefined Macros&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-2126293783636911396?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3eYg3ElSd3nAEtDVLbnXyFYeSqg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3eYg3ElSd3nAEtDVLbnXyFYeSqg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3eYg3ElSd3nAEtDVLbnXyFYeSqg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3eYg3ElSd3nAEtDVLbnXyFYeSqg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=_omp8gjgvq8:scNtTVuHUX4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=_omp8gjgvq8:scNtTVuHUX4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=_omp8gjgvq8:scNtTVuHUX4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/_omp8gjgvq8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/2126293783636911396/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=2126293783636911396" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/2126293783636911396?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/2126293783636911396?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/_omp8gjgvq8/partial-template-specialization-for.html" title="Partial template specialization for pointers to __stdcall functions" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/05/partial-template-specialization-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8MRn8zfyp7ImA9WhZWGEs.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-8356756221525031047</id><published>2011-05-18T08:52:00.004+04:00</published><updated>2011-05-20T08:48:07.187+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-20T08:48:07.187+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="разное" /><title>Пап, что ты делаешь на работе</title><content type="html">Как объяснить маленькому ребенку (4-5 лет), что папа/мама на работе разрабатывают софт? У меня возникла только одна аналогия для этого возраста &amp;mdash; папа пишет книжки на специальном волшебном языке для компьютеров... Ну да, компы их читают и делают то, что там написано. Волшебный язык, конечно, знают не все люди... Книжки бывают разные: в играх много картинок, а есть скучные книжки-программы &amp;mdash; совсем без картинок. Кстати, при загрузке Ubuntu пишется сначала куча текста, а потом уже появляется красивый интерфейс (ага, комп дочитал до нужного места, в книжках тоже не сразу понятно где находятся герои), что подтверждает аллегорию.&lt;br /&gt;
&lt;br /&gt;
Понятно, что мой вариант не окончательное описание для википедии, в реальной жизни он эволюционирует с возрастом и по мере накопления опыта &amp;mdash; от примитивного до более сложного. Не потому, что дети идиоты, а потому что им не интересны до какого-то возраста сложные объяснения, на каждом этапе свой уровень абстракции.&lt;br /&gt;
&lt;br /&gt;
А у вас возникала необходимость объяснить чем вы занимаетесь?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-8356756221525031047?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yST2h5x3NZ5OOhu6CDMbo_WwFwc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yST2h5x3NZ5OOhu6CDMbo_WwFwc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yST2h5x3NZ5OOhu6CDMbo_WwFwc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yST2h5x3NZ5OOhu6CDMbo_WwFwc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=uSpV0XevzOc:9Ul7pNGyAYg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=uSpV0XevzOc:9Ul7pNGyAYg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=uSpV0XevzOc:9Ul7pNGyAYg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/uSpV0XevzOc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/8356756221525031047/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=8356756221525031047" title="Комментарии: 7" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/8356756221525031047?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/8356756221525031047?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/uSpV0XevzOc/blog-post.html" title="Пап, что ты делаешь на работе" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>7</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/05/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMMRHo8eip7ImA9WhZWE0w.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-5101085086384109105</id><published>2011-05-13T23:19:00.002+04:00</published><updated>2011-05-13T23:21:25.472+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-13T23:21:25.472+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lambda" /><category scheme="http://www.blogger.com/atom/ns#" term="boost" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>sum of pairs</title><content type="html">Вы когда нибудь пробовали получить сумму элементов контейнера, который хранит элементы типа &lt;tt&gt;std::pair&lt;/tt&gt;? Если да, то вы заметили, что &lt;tt&gt;std::pair&lt;/tt&gt; не определяет &lt;tt&gt;operator+&lt;/tt&gt;. На помощь приходит новый стандарт, в котором пишем лямбда-функцию, или библиотека &lt;a href="http://www.boost.org/doc/libs/release/doc/html/lambda.html"&gt;&lt;tt&gt;boost::lambda&lt;/tt&gt;&lt;/a&gt; с которой получаем следующий прекрасный но сложноперевариваемый код:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;#include &amp;lt;deque&amp;gt;

#include &amp;lt;boost/lambda/bind.hpp&amp;gt;
#include &amp;lt;boost/lambda/construct.hpp&amp;gt;

template&amp;lt;typename T&amp;gt;
void summarize()
{
    typedef std::pair&amp;lt;T, T&amp;gt; pt_t;
    std::deque&amp;lt;pt_t&amp;gt; xs;
    using namespace boost::lambda;

    // fill xs with stuff

    pt_t res = std::accumulate(
        xs.begin(), xs.end(), std::make_pair(T(),T()),
        bind( constructor&amp;lt;pt_t&amp;gt;(),
             bind( std::plus&amp;lt;T&amp;gt;(), bind(&amp;amp;pt_t::first,_1), bind(&amp;amp;pt_t::first,_2) ),
             bind( std::plus&amp;lt;T&amp;gt;(), bind(&amp;amp;pt_t::second,_1), bind(&amp;amp;pt_t::second,_2) )
             )
         );

}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-5101085086384109105?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Grwec_i-iqyngHPLey-4tAkoMhw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Grwec_i-iqyngHPLey-4tAkoMhw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Grwec_i-iqyngHPLey-4tAkoMhw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Grwec_i-iqyngHPLey-4tAkoMhw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=9rIHX1t3VcE:3agMD1GN0zI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=9rIHX1t3VcE:3agMD1GN0zI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=9rIHX1t3VcE:3agMD1GN0zI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/9rIHX1t3VcE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/5101085086384109105/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=5101085086384109105" title="Комментарии: 9" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/5101085086384109105?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/5101085086384109105?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/9rIHX1t3VcE/sum-of-pairs.html" title="sum of pairs" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>9</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/05/sum-of-pairs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYDRHkyfSp7ImA9WhZQFko.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-3043962409974868509</id><published>2011-04-23T00:17:00.005+04:00</published><updated>2011-04-25T00:32:55.795+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-25T00:32:55.795+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Find sum of elements in the array</title><content type="html">Наткнулся на задачу, которую предлагают в Yandex на собеседовании:&lt;br /&gt;
&lt;blockquote&gt;Ниже приведены три варианта суммирования чисел с плавающей точкой (предполагается, что числа в массиве только положительные).&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;double sum1(std::vector&amp;lt;double&amp;gt;&amp;amp; v)
{    
    if (v.empty()) {
        return 0.0;
    }
    for(size_t i = 0; i &amp;lt; v.size() - 1; ++i) {
        std::sort(v.begin()+i, v.end());
        v[i+1] += v[i];
    }
    return v.back();
}&lt;/pre&gt;&amp;lt;...&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;
Остальные варианты пока нам не интересны, их можно посмотреть &lt;a href="http://company.yandex.ru/job/vacancies/developer_map.xml"&gt;тут&lt;/a&gt; (кстати, в последнем варианте бесконечный цикл). Зачем тут лишняя сортировка ясно сразу — предполагается, что точности &lt;tt&gt;double&lt;/tt&gt; не хватит для расчетов. Ведь если суммировать числа от больших к меньшим, то сумма быстро растёт, и, когда мы дойдём до маленьких чисел, они могут быть денормализованы с огромной ошибкой.&lt;br /&gt;
&lt;br /&gt;
Чтобы оценить о каком порядке ошибки идет речь посмотрим на следующий пример:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;const double x = 0.01;
double s = 1000000000.; // initial sum
for (int i = 0; i &amp;lt; 10000; ++i ) {
    s = s + x;
}
const double e = 1000000100. - s;
std::cout &amp;lt;&amp;lt; e &amp;lt;&amp;lt; std::endl;&lt;/pre&gt;На моей машине он выдает результат: &lt;tt&gt;9.53674e-05&lt;/tt&gt;  &lt;br /&gt;
&lt;br /&gt;
Итого, простое суммирование чисел в худшем случае имеет ошибку, которая растет пропорционально $n$, и среднеквадратичную ошибку, которая растет как $\sqrt n$ на случайных данных.&lt;br /&gt;
&lt;br /&gt;
Однако, хочется суммировать без ошибок и при этом делать это не за линейно-логарифмическое время $O(n\log n)$, а за линейное $O(n)$. Это нам позволяет алгоритм автора стандарта IEEE 754, Уильяма Мортона Кэхэна (Kahan). Он разработал алгоритм для минимизации ошибки при сложении чисел в представлении IEEE 754, который был назван в его честь. Предыдущий пример с учетом алгоритма Кэхэна:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;const double x = 0.01;
double c = 0; // keep error here, initial error is zero
double s = 1000000000.; // initial sum
for (int i = 0; i &amp;lt; 10000; ++i ) {
    const double y = x - c;
    const double t = s + y;
    c = (t - s) - y; // Beware eagerly optimising compilers!
    s = t;
}
const double e = 1000000100. - s;
std::cout &amp;lt;&amp;lt; e &amp;lt;&amp;lt; std::endl;&lt;/pre&gt;В итоге выдает 0.&lt;br /&gt;
&lt;br /&gt;
При суммировании с компенсацией в худшем случае ошибка не зависит от $n$, поэтому большие числа могут быть сложены с ошибкой, которая зависит только от точности типа с плавающей точкой. Видимо, это то решение, которое ожидается от кандидата.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-3043962409974868509?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_r_PS_zOyib_NCHWdEDYB7FVaA8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_r_PS_zOyib_NCHWdEDYB7FVaA8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_r_PS_zOyib_NCHWdEDYB7FVaA8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_r_PS_zOyib_NCHWdEDYB7FVaA8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=7P1NjDdd_2s:Q482MmUmFEI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=7P1NjDdd_2s:Q482MmUmFEI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=7P1NjDdd_2s:Q482MmUmFEI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/7P1NjDdd_2s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/3043962409974868509/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=3043962409974868509" title="Комментарии: 2" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/3043962409974868509?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/3043962409974868509?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/7P1NjDdd_2s/find-sum-of-elements-in-array.html" title="Find sum of elements in the array" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/04/find-sum-of-elements-in-array.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEADQ3o7eyp7ImA9WhZRFkw.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-1609307635525667162</id><published>2011-04-11T23:17:00.002+04:00</published><updated>2011-04-12T16:52:52.403+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-12T16:52:52.403+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Autocomplete</title><content type="html">На днях встал вопрос сделать функцию для подсказки завершения слов. Самый простой вариант — сравнивать введенную часть слова с первыми буквами слов из словаря и выдавать все слова, у которых совпадает начало. На маленьких словарях это работает, в целом, неплохо, но люди делают опечатки и хотелось бы предлагать исправленные варианты слов, т.&amp;nbsp;е. нужно выдавать похожие слова. Про меру «похожести» последовательностей 0–1 ещё в 1965 году упомянул советский математик Владимир Иосифович Левенштейн, что позже дало имя расстоянию Левенштейна. &lt;br /&gt;
&lt;blockquote&gt;Расстояние Левенштейна — это минимальное количество операций вставки, замены и удаления одного символа, необходимых для превращения одной строки в другую.&lt;/blockquote&gt;&lt;br /&gt;
Это уже почти то, что нужно, но в расстоянии Левенштейна перестановки не учитываются. На наше счастье товарищ Дамерау (Damerau) не только добавил к указанным операциями ещё одну — перестановку двух соседних символов, но и утверждал, что 80% ошибок при наборе текста дают как раз указанные четыре операции. Расстояние, которое учитывает эти операции назвали, как можно догадаться, расстоянием Дамерау–Левенштейна. Результаты этих работ теперь используются не только в бесполезных спеллчекерах, которые убивают грамотность, но и в исследованиях ДНК.&lt;br /&gt;
&lt;br /&gt;
Мне же эти исследования пригодились для решения поставленной задачи. Ниже показана функция на C++, которая вычисляет расстояние  Дамерау–Левенштейна:&lt;br /&gt;
&lt;pre class="brush:cpp" name="code"&gt;int damerauLevenshteinDistance( const std::vector&amp;lt;char&amp;gt;&amp;amp; a, const std::vector&amp;lt;char&amp;gt;&amp;amp; b )
{
    const int a_size = static_cast&amp;lt;int&amp;gt;( a.size() );
    const int b_size = static_cast&amp;lt;int&amp;gt;( b.size() );
    const int INF = a_size + b_size;
    std::vector&amp;lt;std::vector&amp;lt;int&amp;gt; &amp;gt; H( a.size()+2, std::vector&amp;lt;int&amp;gt;( b.size()+2 ) );
    H[0][0] = INF;
    for ( int i = 0; i &amp;lt;= a_size; ++i ) { H[i+1][1] = i; H[i+1][0] = INF; }
    for ( int j = 0; j &amp;lt;= b_size; ++j ) { H[1][j+1] = j; H[0][j+1] = INF; }
    
    const int alphabet_size = std::numeric_limits&amp;lt;char&amp;gt;::max();
    std::vector&amp;lt;char&amp;gt; DA( alphabet_size );
    for ( int d = 0; d &amp;lt; alphabet_size; ++d ) DA[d] = 0;
    for ( int i = 1; i &amp;lt;= a_size; ++i ) {
        size_t DB = 0;
        for ( int j = 1; j &amp;lt;= b_size; ++j ) {
            const int i1 = DA[ b[j-1] ];
            const int j1 = DB;
            const int d = (a[i-1]==b[j-1]) ? 0 : 1;
            if ( d == 0 ) DB = j;
            H[i+1][j+1] = std::min( 
                std::min(H[i][j]+d, H[i+1][j]+1), 
                std::min(H[i][j+1]+1, H[i1][j1] + (i-i1-1) + 1 + (j-j1-1) ) );
        }
        DA[ a[i-1] ] = i;
    }
    return H[a.size()+1][b.size()+1];
}&lt;/pre&gt;Тема последних дней — &lt;a href="http://stackoverflow.com/q/5365283/123111"&gt;поиск Муаммара Каддафи&lt;/a&gt;. Расчет расстояния от этого слова (Gadaffi) до всех слов английского словаря размером 329380 слов занимает порядка 2 секунд на моем домашнем Core2Duo 2.13GHz, т.&amp;nbsp;е. функция работает довольно быстро.&lt;br /&gt;
&lt;br /&gt;
Поскольку в моем словаре слов на несколько порядков меньше и выбирает их пользователь, то моя задача оказалась решена. Однако, существуют и другие варианты хранения словарей, например, префиксное дерево (trie), в котором каждый узел хранит первые буквы строк, потом пары букв и так далее. См. картинку из Википедии:&lt;br /&gt;
&lt;img src=http://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Trie_example.svg/400px-Trie_example.svg.png alt="http://en.wikipedia.org/wiki/Trie"/&gt;&lt;br /&gt;
В таком дереве поиск подходящих окончаний происходит очень быстро. Этот метод также применяется в спелчекерах (например, встречается сотовых телефонах).&lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что автозавершение слов &amp;mdash; это встроенная функция Windows и разработчикам предлагаются интерфейсы &lt;a href="http://msdn.microsoft.com/en-us/library/bb776292(v=VS.85).aspx"&gt;IAutoComplete&lt;/a&gt; и &lt;a href="http://msdn.microsoft.com/en-us/library/bb776378(v=VS.85).aspx"&gt;IACList&lt;/a&gt;, пользоваться которыми, на первый взгляд, оказалось не очень удобно и они реализуют самый простой вариант автозавершения, что тоже не подходит.&lt;br /&gt;
&lt;br /&gt;
Ссылки по теме:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://staffwww.dcs.shef.ac.uk/people/S.Chapman/simmetrics.html"&gt;SimMetrics &amp;mdash; an open source extensible library of Similarity or Distance Metrics, e.g. Levenshtein Distance, L2 Distance, Cosine Similarity, Jaccard Similarity etc.&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance"&gt;Damerau–Levenshtein distance&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Trie"&gt;Trie&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aspell.net/"&gt;GNU Aspell is a Free and Open Source spell checker&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/combobox/combocompletion.aspx"&gt;Implementing an autocompleting Combobox&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb776884(v=vs.85).aspx"&gt;Using Autocomplete in Windows&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-1609307635525667162?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UEpaDls2mb_qUcUz2Rzh2-2PPbY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UEpaDls2mb_qUcUz2Rzh2-2PPbY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UEpaDls2mb_qUcUz2Rzh2-2PPbY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UEpaDls2mb_qUcUz2Rzh2-2PPbY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=8lrh4Wln5fg:NBf50OCT6wA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=8lrh4Wln5fg:NBf50OCT6wA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=8lrh4Wln5fg:NBf50OCT6wA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/8lrh4Wln5fg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/1609307635525667162/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=1609307635525667162" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/1609307635525667162?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/1609307635525667162?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/8lrh4Wln5fg/autocomplete.html" title="Autocomplete" /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/04/autocomplete.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMMRH8_fSp7ImA9WhZSFE8.&quot;"><id>tag:blogger.com,1999:blog-5744154463195670470.post-856099729015427862</id><published>2011-03-29T23:21:00.000+04:00</published><updated>2011-03-29T23:21:25.145+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-29T23:21:25.145+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="разное" /><title>Нам нужно нарисовать семь красных линий, все они должны быть строго перпендикулярны...</title><content type="html">&lt;blockquote&gt;Нам нужно нарисовать семь красных линий. Все они должны быть строго перпендикулярны, и кроме того, некоторые нужно нарисовать зеленым цветом, а еще некоторые — прозрачным. &lt;a href="http://alex-aka-jj.livejournal.com/66984.html"&gt;Читать полностью...&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5744154463195670470-856099729015427862?l=jia3ep.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CmJJ4a37mubYQ-_49pqfkj0xOVg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CmJJ4a37mubYQ-_49pqfkj0xOVg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CmJJ4a37mubYQ-_49pqfkj0xOVg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CmJJ4a37mubYQ-_49pqfkj0xOVg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=vtvd4BfThPU:fI9ZfhATyVw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?a=vtvd4BfThPU:fI9ZfhATyVw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeWorkCodeMore?i=vtvd4BfThPU:fI9ZfhATyVw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeWorkCodeMore/~4/vtvd4BfThPU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jia3ep.blogspot.com/feeds/856099729015427862/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5744154463195670470&amp;postID=856099729015427862" title="Комментарии: 2" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/856099729015427862?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5744154463195670470/posts/default/856099729015427862?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeWorkCodeMore/~3/vtvd4BfThPU/blog-post_29.html" title="Нам нужно нарисовать семь красных линий, все они должны быть строго перпендикулярны..." /><author><name>Kirill V. Lyadvinsky</name><uri>http://www.blogger.com/profile/03118738824565485127</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://jia3ep.blogspot.com/2011/03/blog-post_29.html</feedburner:origLink></entry></feed>

