<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Виталий Иванов &#187; программирование</title>
	<atom:link href="http://wicharek.name/tags/%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/feed" rel="self" type="application/rss+xml" />
	<link>http://wicharek.name</link>
	<description>Разработчик игр и мобильных приложений</description>
	<lastBuildDate>Wed, 01 Feb 2012 08:47:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Неизвестная ошибка</title>
		<link>http://wicharek.name/blog/neizvestnaya-oshibka</link>
		<comments>http://wicharek.name/blog/neizvestnaya-oshibka#comments</comments>
		<pubDate>Thu, 02 Jun 2011 14:59:20 +0000</pubDate>
		<dc:creator>wicharek</dc:creator>
				<category><![CDATA[Информационные технологии]]></category>
		<category><![CDATA[обработка ошибок]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://wicharek.name/?p=1269</guid>
		<description><![CDATA[Старое наблюдение из области программирования (может и не новое). Разрабатывая некую систему, почти всегда возникает необходимость как-то наружу сообщить об ошибке. Будь то сообщение непосредственно для пользователя программы или же некий код ошибки для других программистов, если разрабатывается некоторый модуль, &#8230; <a href="http://wicharek.name/blog/neizvestnaya-oshibka">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://wicharek.name/wp-content/uploads/2011/06/unknown-error.png" alt="" title="unknown-error" width="180" height="126" class="alignleft size-full wp-image-1270" />Старое наблюдение из области программирования (может и не новое). Разрабатывая некую систему, почти всегда возникает необходимость как-то наружу сообщить об ошибке. Будь то сообщение непосредственно для пользователя программы или же некий код ошибки для других программистов, если разрабатывается некоторый модуль, который в дальнейшем кем-то будет использован в конечном приложении. Типы ошибок как-то классифицируются, и часто среди них находится место некой &laquo;неизвестной ошибке&raquo;&nbsp;&mdash; то есть такой, реальную причину которой разработчику системы трудно идентифицировать по какой-то причине. Программист обычно не &laquo;заморачивается&raquo; на этот счёт, потому что считает, что данный конкретный вид ошибки будет происходить редко, и точную диагностику откладывает на потом. На практике же в полном соответствии с <a href="http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%9C%D1%91%D1%80%D1%84%D0%B8">законами Мёрфи</a> именно этот тип ошибки происходит чаще всего. Многократно подтверждено на личном опыте.</p>
<p> <img src="http://wicharek.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1269" width="1" height="1" style="display: none;" /></p>
]]></content:encoded>
			<wfw:commentRss>http://wicharek.name/blog/neizvestnaya-oshibka/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL C++ Connector Fail</title>
		<link>http://wicharek.name/blog/mysql-cpp-connector-fail</link>
		<comments>http://wicharek.name/blog/mysql-cpp-connector-fail#comments</comments>
		<pubDate>Sun, 27 Dec 2009 10:19:19 +0000</pubDate>
		<dc:creator>wicharek</dc:creator>
				<category><![CDATA[Информационные технологии]]></category>
		<category><![CDATA[Планета Developers.org.ua]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[провал]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">http://wicharek.name/?p=649</guid>
		<description><![CDATA[В текущем проекте возникла необходимость работать с MySQL базой данных из C++. Кроме базового API на «чистом»  C, разработчики MySQL (кому она там сейчас принадлежит?) предоставляют надстройки для различных языков программирования, называя их connector&#39;ами. В их числе имеется и красивая &#8230; <a href="http://wicharek.name/blog/mysql-cpp-connector-fail">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>В текущем проекте возникла необходимость работать с MySQL базой данных из C++. Кроме базового API на «чистом»  C, разработчики MySQL (кому она там сейчас принадлежит?) предоставляют надстройки для различных языков программирования, называя их connector&#39;ами. В их числе имеется и красивая высокоуровневая обвязка для C++. Хорошая альтернатива слабо предназначенному для непосредственного использования libmysqlclient, казалось бы.</p>
<p>Вскоре начались проблемы. Случайные вылеты, причинами которых были баги самого мерзкого характера: какая-то дрянь портила чужие области памяти. Потратив предварительно несколько часов, я так и не сумел сходу решить проблему. Уже тогда я подошёл вплотную к MySQL коннектору, но решил что столь явной проблемы (на максимально простом тест-кейсе) в официальной библиотеке быть просто не может, а значит проблема где-то раньше в моём коде. Потому решено было временно отложить решение (вылеты были регулярными, но не столь частыми) и сначала дописать функционал до определённого уровня, что и было проделано.</p>
<p>Пришло время второго захода. В ход пошли хитроизощрённые отладочные техники с hardware watchpoint&#39;ами и утилитами для отслеживания выделения памяти. Снова несколько часов и снова вижу проблему в connector&#39;е. Тут-то я наконец сосредоточенно погуглил и <a href="http://lists.mysql.com/connector-cplusplus/32">нагуглил письмо в mailing list MySQL</a>, где описывалась похожая проблема. Автор письма потрудился залезть в исходники коннектора (что я уже было собирался делать) и обнаружил там серьёзные проблемы. Кому интересно, подробно могут почитать по ссылке, но суть в том, что там просто элементарная ошибка (и не одна) с освобождением памяти, которая приводит к самым неприятным последствиям.</p>
<p>В итоге, код работы с базой (благо, ещё не разросшийся) был переориентирован на использование сишной libmysqlclient и счастье наступило.</p>
<p>Мораль:</p>
<ol>
<li>Не используйте MySQL C++ Connector. Это какой-то вообще слабо поддерживаемый проект. Мало ли что там ещё за проблемы найдутся.</li>
<li>Нельзя доверять третьесторонним библиотекам даже если они часть хорошо зарекомендовавших себя продуктов. Если бы не моё слепое доверие, времени на починку было бы потрачено в разы меньше.</li>
</ol>
<p><strong>UPD.</strong> Кстати, существует ещё <a href="http://tangentsoft.net/mysql++/">mysql++</a>. Не пробовал, но должно быть ок.</p>
<p> <img src="http://wicharek.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=649" width="1" height="1" style="display: none;" /></p>
]]></content:encoded>
			<wfw:commentRss>http://wicharek.name/blog/mysql-cpp-connector-fail/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

