<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Микроблог про wxWidgets</title>
	
	<link>http://begemotov.net/wxwidgets</link>
	<description>Мысли в процессе использования: открытия, удивления, мысли, ссылки, решения, советы, куски кода...</description>
	<lastBuildDate>Tue, 08 Nov 2011 20:02:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/wxwidgets" /><feedburner:info uri="wxwidgets" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>wxwidgets</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Обработка событий в wxWidgets.</title>
		<link>http://feedproxy.google.com/~r/wxwidgets/~3/pBT8-5udj6Q/</link>
		<comments>http://begemotov.net/wxwidgets/tutorials/obrabotka-sobytij-v-wxwidgets/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 19:58:57 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Учебники]]></category>
		<category><![CDATA[book]]></category>

		<guid isPermaLink="false">http://begemotov.net/wxwidgets/tutorials/%d0%be%d0%b1%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-%d1%81%d0%be%d0%b1%d1%8b%d1%82%d0%b8%d0%b9-%d0%b2-wxwidgets/</guid>
		<description><![CDATA[Процесс перевод книги продолжается. (...)Читать дальше: Обработка событий в wxWidgets. (559 words) © Begemot for Микроблог про wxWidgets, 2011. &#124; Ссылка &#124; Уже дискуссия (4) Больше по теме: book]]></description>
			<content:encoded><![CDATA[<p>Процесс перевод книги продолжается.</p>
<p>(...)<br/>Читать дальше: <a href="http://begemotov.net/wxwidgets/tutorials/obrabotka-sobytij-v-wxwidgets/">Обработка событий в wxWidgets.</a> (559 words)</p>
<hr />
<p><small>© Begemot for <a href="http://begemotov.net/wxwidgets">Микроблог про wxWidgets</a>, 2011. |
<a href="http://begemotov.net/wxwidgets/tutorials/obrabotka-sobytij-v-wxwidgets/">Ссылка</a> |
<a href="http://begemotov.net/wxwidgets/tutorials/obrabotka-sobytij-v-wxwidgets/#comments">Уже дискуссия (4)</a> <br/>
Больше по теме: <a href="http://begemotov.net/wxwidgets/tag/book/" rel="tag">book</a><br/>
</small></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wxwidgets?a=pBT8-5udj6Q:Saby3N12W6k:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=pBT8-5udj6Q:Saby3N12W6k:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wxwidgets?a=pBT8-5udj6Q:Saby3N12W6k:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=pBT8-5udj6Q:Saby3N12W6k:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wxwidgets/~4/pBT8-5udj6Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/wxwidgets/tutorials/obrabotka-sobytij-v-wxwidgets/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://begemotov.net/wxwidgets/tutorials/obrabotka-sobytij-v-wxwidgets/</feedburner:origLink></item>
		<item>
		<title>Просмотр wxWidgets переменых в GDB Ubuntu</title>
		<link>http://feedproxy.google.com/~r/wxwidgets/~3/0XoV9R1kp7A/</link>
		<comments>http://begemotov.net/wxwidgets/using/watch-wxwidgets-variable-in-gdb-ubuntu/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 20:19:20 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Использование]]></category>
		<category><![CDATA[gdb]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://begemotov.net/wxwidgets/using/%d0%bf%d1%80%d0%be%d1%81%d0%bc%d0%be%d1%82%d1%80-wxwidgets-%d0%bf%d0%b5%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d1%8b%d1%85-%d0%b2-gdb-ubuntu/</guid>
		<description><![CDATA[GDB к сожалению не самый удобный отладчик на свете, но что делать&#8230; А мой (7.2 под ubuntu 11.04) еще падал все-время, если в функции где я ставлю брейк, есть определение wxString, типа wxString str = &#8220;some string&#8221;; падал с таким сообщением Breakpoint 2, BegUtils::GetImageFromZipResource (pathURL=&#8230;, fileName=&#8230;, type=wxBITMAP_TYPE_PNG) at /media/data/work/Flashnote/src/Utility/begutils.cpp:166/media/data/work/Flashnote/src/Utility/begutils.cpp:166:4941:beg:0x82977e3&#62;&#62;&#62;&#62;&#62;&#62;cb_gdb:&#62; info localswarning: static field&#8217;s value depends [...]]]></description>
			<content:encoded><![CDATA[<p>GDB к сожалению не самый удобный отладчик на свете, но что делать&#8230; А мой (7.2 под ubuntu 11.04) еще падал все-время, если в функции где я ставлю брейк, есть определение wxString, типа wxString str = &#8220;some string&#8221;; падал с таким сообщением</p>
<blockquote><p>Breakpoint 2, BegUtils::GetImageFromZipResource (pathURL=&#8230;, fileName=&#8230;, type=wxBITMAP_TYPE_PNG) at /media/data/work/Flashnote/src/Utility/begutils.cpp:166<br />/media/data/work/Flashnote/src/Utility/begutils.cpp:166:4941:beg:0x82977e3<br />&gt;&gt;&gt;&gt;&gt;&gt;cb_gdb:<br />&gt; info locals<br />warning: static field&#8217;s value depends on the current frame &#8211; bad debug info?<br />/build/buildd/gdb-7.2/gdb/findvar.c:427: internal-error: read_var_value: Assertion `frame&#8217; failed.<br />A problem internal to GDB has been detected,<br />further debugging may prove unreliable.</p>
</blockquote>
<p>Если определения строки нет, то заходил, но падал стоило провести курсором над параметром функции &#8211; строке. Вообщем дебажить было вообще невозможно.</p>
<p>Решение такое:</p>
<blockquote><p><font size="2"><font size="2">
<p dir="ltr" align="left">CodeBloks -&gt; Settings -&gt; Compiler and debugger settings -&gt; Debugger settings -&gt; И там в первый едит бокс добавляем строку source&nbsp; /media/data/const/wxWidgets/misc/gdb/print.py</p>
<p dir="ltr" align="left">
<p></font></font></p></blockquote>
<p dir="ltr" align="left">После чего падения прекращаются, и о чудо, отладчик начинает показывать значение wxString. Жизнь сразу становится много лучше:)</p>
<p>Еще почитать можно тут <a href="http://wxwidgets.blogspot.com/2009/01/pretty-printing-wxstuff-in-gdb.html" target="_blank">Pretty printing wxStuff in gdb</a> и <a href="http://forums.codeblocks.org/index.php/topic,12747.0.html" target="_blank">тут</a></p>
<hr />
<p><small>© Begemot for <a href="http://begemotov.net/wxwidgets">Микроблог про wxWidgets</a>, 2011. |
<a href="http://begemotov.net/wxwidgets/using/watch-wxwidgets-variable-in-gdb-ubuntu/">Ссылка</a> |
<a href="http://begemotov.net/wxwidgets/using/watch-wxwidgets-variable-in-gdb-ubuntu/#comments">Все молчат</a> <br/>
Больше по теме: <a href="http://begemotov.net/wxwidgets/tag/gdb/" rel="tag">gdb</a>, <a href="http://begemotov.net/wxwidgets/tag/ubuntu/" rel="tag">Ubuntu</a><br/>
</small></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wxwidgets?a=0XoV9R1kp7A:NIMei2N_jCM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=0XoV9R1kp7A:NIMei2N_jCM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wxwidgets?a=0XoV9R1kp7A:NIMei2N_jCM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=0XoV9R1kp7A:NIMei2N_jCM:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wxwidgets/~4/0XoV9R1kp7A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/wxwidgets/using/watch-wxwidgets-variable-in-gdb-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://begemotov.net/wxwidgets/using/watch-wxwidgets-variable-in-gdb-ubuntu/</feedburner:origLink></item>
		<item>
		<title>Обработать завершение сессии в Linux</title>
		<link>http://feedproxy.google.com/~r/wxwidgets/~3/o5VKGSEqbXw/</link>
		<comments>http://begemotov.net/wxwidgets/common/obrabotat-zavershenie-sessii-v-linux/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 15:07:42 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Oбщее]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[грабли]]></category>

		<guid isPermaLink="false">http://begemotov.net/wxwidgets/common/obrabotat-zavershenie-sessii-v-linux/</guid>
		<description><![CDATA[Пытаюсь тут портировать на линукс свой менеджер заметок написанный на с++ and wxWidgets. Столкнулся с тем что не могу отследить событие когда пользователь уходит &#8211; logout, reboot, shut down. А мне то надо как-то данные сохранять. Под виндой, есть EVT_QUERY_END_SESSION, библиотека ловит виндовое сообщение и сообщает мне о событии, пускай с большими проблемами но что-то [...]]]></description>
			<content:encoded><![CDATA[<p>Пытаюсь тут портировать <a href="http://softvoile.com/rus/flashnote/" target="_blank">на линукс свой менеджер заметок</a> написанный на с++ and wxWidgets. Столкнулся с тем что не могу отследить событие когда пользователь уходит &#8211; logout, reboot, shut down. А мне то надо как-то данные сохранять. Под виндой, есть EVT_QUERY_END_SESSION, библиотека ловит виндовое сообщение и сообщает мне о событии, пускай с большими проблемами но что-то сделать можно &#8211; сохранить данные, корректно закрыть приложение, заповним положение\размеры окна и мелкие настройки. Под макосом не пробовал, но говорят работает. Под Линуксом нет &#8211; в инете полно вопросов, жалоб &#8211; но решения нет.</p>
<p>Пытался использовать средства gtk (или posix, или чье это там), типа </p>
<blockquote><p><span style="widows: 2; text-transform: none; background-color: rgb(245,245,255); text-indent: 0px; letter-spacing: normal; font: 13px verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; white-space: normal; orphans: 2; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span">
<pre style="border-bottom: 1px inset; border-left: 1px inset; padding-bottom: 6px; overflow-x: auto; overflow-y: auto; background-color: rgb(225,228,242); margin: 0px; padding-left: 6px; padding-right: 6px; color: rgb(0,0,0); border-top: 1px inset; border-right: 1px inset; padding-top: 6px; background-origin: initial; background-clip: initial" class="alt2">

#include &lt;stdio.h&gt; // for File I/O
#include &lt;signal.h&gt; // for signals
#include &lt;unistd.h&gt; // for sleep()

void handler(int <font size="+0"><font style="background-color: #e1e4f2"><font color="red">sig</font>)
{
    </font></font><font style="background-color: #e1e4f2"><font color="red">    /* Just print to stderr and redirect 2&gt;&gt; test.txt in the shell */
    fprintf(stderr, "got %d\n", signal);

    signal(sig, handler); // let signal be caught again</font>
}

int main()
{
    signal(SIGTERM,handler);
    signal(SIGINT,handler);
    </font><font style="background-color: #e1e4f2" color="red">signal(SIGQUIT, handler); // Maybe we're getting QUIT first?
    signal(SIGHUP, handler); // If the terminal closes, we might get this
    signal(SIGPIPE, handler); // Don't know why we'd get this, but check anyway
    while(1) // loop forever with most signals trapped, impolitely waiting for a kill -9 <img src='http://begemotov.net/wxwidgets/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </font>

    // run
}
</pre>
<p></span></p></blockquote>
<p>Не фига, когда руками прибиваю приложение Ctrl+c в терминале или kill &#8230; срабатывает, когда вырубаю систему нет, сообщения не получаю. В инете все пишут тоже самое не работает.&nbsp; Code::Blocks тоже не сохраняет данные, если что-то изменить и сделать logout.&nbsp;&nbsp; </p>
<p>Получается линукс, или убунта, или гном не дает возможность приложению узнать что сессия завершается и корретно завершить работу, сохранив данные. Вот вам и Linux with a human face <img src='http://begemotov.net/wxwidgets/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Есть правда какой-то EggSMClient в виде сорцов, LGPL, его например использует GEdit и молодец, корректно обрабатывает все. Но что-то про EggSMClient ни упоминаний толком, ни документации &#8211; особенно ничего не находится, а так разобратся без бутылки не получается. Печально все это <img src='http://begemotov.net/wxwidgets/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<hr />
<p><small>© Begemot for <a href="http://begemotov.net/wxwidgets">Микроблог про wxWidgets</a>, 2011. |
<a href="http://begemotov.net/wxwidgets/common/obrabotat-zavershenie-sessii-v-linux/">Ссылка</a> |
<a href="http://begemotov.net/wxwidgets/common/obrabotat-zavershenie-sessii-v-linux/#comments">Уже дискуссия (9)</a> <br/>
Больше по теме: <a href="http://begemotov.net/wxwidgets/tag/linux/" rel="tag">linux</a>, <a href="http://begemotov.net/wxwidgets/tag/grabli/" rel="tag">грабли</a><br/>
</small></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wxwidgets?a=o5VKGSEqbXw:LbakZ71PDSQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=o5VKGSEqbXw:LbakZ71PDSQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wxwidgets?a=o5VKGSEqbXw:LbakZ71PDSQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=o5VKGSEqbXw:LbakZ71PDSQ:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wxwidgets/~4/o5VKGSEqbXw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/wxwidgets/common/obrabotat-zavershenie-sessii-v-linux/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://begemotov.net/wxwidgets/common/obrabotat-zavershenie-sessii-v-linux/</feedburner:origLink></item>
		<item>
		<title>Форматированный текст в контролах</title>
		<link>http://feedproxy.google.com/~r/wxwidgets/~3/KO_ON_d14XM/</link>
		<comments>http://begemotov.net/wxwidgets/common/formatirovannyiy-tekst-v-kontrolah/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 06:22:19 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Oбщее]]></category>
		<category><![CDATA[+1]]></category>

		<guid isPermaLink="false">http://begemotov.net/wxwidgets/common/formatirovannyiy-tekst-v-kontrolah/</guid>
		<description><![CDATA[Ура, приятная новость:&#160; Markup in control labels. Меня эта возможность сильно порадовала в Qt когда я на нее перешел, теперь вот и в wxWidgets появляется что-то подобное, хотя конечно гораздо слабее чем в Qt, но все равно здорово. Правда не совсем понятно почему wxStaticText отстает от кнопки, но надеюсь сделают все хорошо в итоге:) © [...]]]></description>
			<content:encoded><![CDATA[<p>Ура, приятная новость:&nbsp; <a href="http://wxwidgets.blogspot.com/2011/02/markup-in-control-labels.html" target="_blank">Markup in control labels</a>. Меня эта возможность сильно порадовала в Qt когда я на нее перешел, теперь вот и в wxWidgets появляется что-то подобное, хотя конечно гораздо слабее чем в Qt, но все равно здорово. Правда не совсем понятно почему wxStaticText отстает от кнопки, но надеюсь сделают все хорошо в итоге:)</p>
<hr />
<p><small>© Begemot for <a href="http://begemotov.net/wxwidgets">Микроблог про wxWidgets</a>, 2011. |
<a href="http://begemotov.net/wxwidgets/common/formatirovannyiy-tekst-v-kontrolah/">Ссылка</a> |
<a href="http://begemotov.net/wxwidgets/common/formatirovannyiy-tekst-v-kontrolah/#comments">Уже дискуссия (2)</a> <br/>
Больше по теме: <a href="http://begemotov.net/wxwidgets/tag/1/" rel="tag">+1</a><br/>
</small></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wxwidgets?a=KO_ON_d14XM:lUALGvFq5rk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=KO_ON_d14XM:lUALGvFq5rk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wxwidgets?a=KO_ON_d14XM:lUALGvFq5rk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=KO_ON_d14XM:lUALGvFq5rk:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wxwidgets/~4/KO_ON_d14XM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/wxwidgets/common/formatirovannyiy-tekst-v-kontrolah/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://begemotov.net/wxwidgets/common/formatirovannyiy-tekst-v-kontrolah/</feedburner:origLink></item>
		<item>
		<title>Qt vs wxWidgets личный опыт</title>
		<link>http://feedproxy.google.com/~r/wxwidgets/~3/dggwxDPI5oY/</link>
		<comments>http://begemotov.net/wxwidgets/common/qt-vs-wxwidgets-lichnyiy-opyit/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 06:56:30 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Oбщее]]></category>
		<category><![CDATA[Qt]]></category>

		<guid isPermaLink="false">http://begemotov.net/wxwidgets/common/qt-vs-wxwidgets-lichnyiy-opyit/</guid>
		<description><![CDATA[Меня тут спросили, спросили &#8211; отвечаю. В кратце про Qt vs wxWidgets после некоторого опыта, очень в кратце. &#160; Про Qt: 1. На Qt писать быстрее и проще (субьективно и смотря что) 2. Написанное под виндо в течении 3 месяцев запускается на макоси после часа работы. 3. Приложения не родные 4. Приложения здоровые. &#160; Про [...]]]></description>
			<content:encoded><![CDATA[<p>Меня <a href="http://begemotov.net/wxwidgets/qt/o-pravilnyih-konteynerah-metodah-i-algoritmah/#comments" target="_blank">тут спросили</a>, спросили &#8211; отвечаю. В кратце про Qt vs wxWidgets после некоторого опыта, очень в кратце.</p>
<p><strong></strong>&nbsp;</p>
<p><strong>Про Qt:</strong></p>
<p>1. На Qt писать быстрее и проще (субьективно и смотря что)</p>
<p>2. Написанное под виндо в течении 3 месяцев запускается на макоси после часа работы.</p>
<p>3. Приложения не родные</p>
<p>4. Приложения здоровые.</p>
<p>&nbsp;</p>
<p><strong>Про wxWidgets:</strong></p>
<p>1. Писать вполне нормально, хотя может и не так гладко как на Qt</p>
<p>2. Результат выглядит роднее</p>
<p>3. Бинарников по паре сотен килобайт не получается, но и не десятки метров как у Qt.</p>
<p>4. Запуск под макосом &#8211; требует гораздо большего количества нервов, времени и напильников.</p>
<p>&nbsp;</p>
<p>Для <a href="http://www.breedingmaster.com/" target="_blank">этой программы</a> я после 10 дней на вх, выбрал Qt (совсем его тогда не зная), и не пожалел. Для своих <a href="http://clipdiary.com/" target="_blank">Clipdiary</a> и <a href="http://softvoile.com/flashnote/" target="_blank">Flashnote</a> я все таки считаю что wx не плох, хотя следует признать что первая программа уже продается под МакОС, а вторая и третья только в далекой перспективе:)</p>
<p>В общем &#8211; как всегда для конкретной задачи, нужен конкретный инструмент. </p>
<p>А еще, учитывая последний маневр Нокии, есть вероятность что развитие Qt тормознется, об этом стоит тоже думать&#8230;.</p>
<hr />
<p><small>© Begemot for <a href="http://begemotov.net/wxwidgets">Микроблог про wxWidgets</a>, 2011. |
<a href="http://begemotov.net/wxwidgets/common/qt-vs-wxwidgets-lichnyiy-opyit/">Ссылка</a> |
<a href="http://begemotov.net/wxwidgets/common/qt-vs-wxwidgets-lichnyiy-opyit/#comments">Уже дискуссия (20)</a> <br/>
Больше по теме: <br/>
</small></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wxwidgets?a=dggwxDPI5oY:8ixSUzEJsBA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=dggwxDPI5oY:8ixSUzEJsBA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wxwidgets?a=dggwxDPI5oY:8ixSUzEJsBA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=dggwxDPI5oY:8ixSUzEJsBA:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wxwidgets/~4/dggwxDPI5oY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/wxwidgets/common/qt-vs-wxwidgets-lichnyiy-opyit/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		<feedburner:origLink>http://begemotov.net/wxwidgets/common/qt-vs-wxwidgets-lichnyiy-opyit/</feedburner:origLink></item>
		<item>
		<title>О правильных контейнерах, методах и алгоритмах</title>
		<link>http://feedproxy.google.com/~r/wxwidgets/~3/OtzaIUi8HF8/</link>
		<comments>http://begemotov.net/wxwidgets/qt/o-pravilnyih-konteynerah-metodah-i-algoritmah/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 17:04:57 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Qt]]></category>

		<guid isPermaLink="false">http://begemotov.net/wxwidgets/qt/o-pravilnyih-konteynerah-metodah-i-algoritmah/</guid>
		<description><![CDATA[Довелось мне тут недавно портировать один код, считающий dog inbreeding coefficient, с C# на С++/Qt. Код портировался легко, фактически 1 в 1, за исключением того что стеки в Qt ведут себя немного не так как в шарпе, но это решилось. Через некоторое время обнаружилось, что на больших родословных код работает непозволительно медленно, в шарповской версии, [...]]]></description>
			<content:encoded><![CDATA[<p>Довелось мне тут недавно портировать один код, считающий <a href="http://breedingmaster.com/">dog inbreeding coefficient</a>, с C# на С++/Qt. Код портировался легко, фактически 1 в 1, за исключением того что стеки в Qt ведут себя немного не так как в шарпе, но это решилось. Через некоторое время обнаружилось, что на больших родословных код работает непозволительно медленно, в шарповской версии, что интересно, проблем не было, пришлось оптимизировать.</p>
<p><strong>Шаг первый – правильные контейнеры.</strong></p>
<p>Код использовал списки, при портировании я их и заменил на QList. Но в принципе списки не самый быстрый контейнер для простых операций. Первое что я сделал заменил на QVector. Автозаменой, получил прирост в 30%. </p>
<p><strong>Шаг второй – правильные методы доступа.</strong></p>
<p>В поисках что бы еще улучшить, случайно наткнулся в документации на следующее</p>
<p> <span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="line-height: 15px; font-family: verdana; color: rgb(54,53,52); font-size: 13px" class="Apple-style-span">
<p style="padding-bottom: 5px; line-height: 20px; margin: 0px; padding-left: 5px; padding-right: 5px; padding-top: 5px">For read-only access, an alternative syntax is to use<span class="Apple-converted-space">&#160;</span>at():</p>
<p style="padding-bottom: 5px; line-height: 20px; margin: 0px; padding-left: 5px; padding-right: 5px; padding-top: 5px">at() can be faster than operator[](), because it never causes a<span class="Apple-converted-space">&#160;</span>deep copy<span class="Apple-converted-space">&#160;</span>to occur.</p>
<p>У нас в контейнере хранились просто int’ы, ничего более сложного, поэтому чудес я не ожидал. Но произошло чудо:)</p>
<p>Замена всего одной строчки в коде вида</p>
<blockquote><p><font size="2">
</p>
<p>         <font color="#010001" size="2"><font color="#010001" size="2">Q_FOREACH</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">(</font></font><font color="#010001" size="2"><font color="#010001" size="2">QList</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;int&gt;</font></font><font size="2"> </font><font color="#010001" size="2"><font color="#010001" size="2">pf</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">,</font></font><font size="2"> </font><font color="#010001" size="2"><font color="#010001" size="2">paths_father</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">)</font></font></font><font size="2">
</p>
<p>         <font color="#0000ff" size="2"><font color="#0000ff" size="2">{</font></font></font><font size="2">
</p>
<p>         <font color="#010001" size="2"><font color="#010001" size="2">Q_FOREACH</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">(</font></font><font color="#010001" size="2"><font color="#010001" size="2">QList</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;int&gt;</font></font><font size="2"> </font><font color="#010001" size="2"><font color="#010001" size="2">pm</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">,</font></font><font size="2"> </font><font color="#010001" size="2"><font color="#010001" size="2">paths_mother</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">)</font></font></font><font size="2">
</p>
<p>         <font color="#0000ff" size="2"><font color="#0000ff" size="2">{</font></font></font><font size="2">
</p>
<p>         <font color="#0000ff" size="2"><font color="#0000ff" size="2">if</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">(</font></font><font color="#010001" size="2"><font color="#010001" size="2">pf</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">[</font></font><font color="#800000" size="2"><font color="#800000" size="2">0</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">]</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">!=</font></font><font size="2"> </font><font color="#010001" size="2"><font color="#010001" size="2">pm</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">[</font></font><font color="#800000" size="2"><font color="#800000" size="2">0</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">])</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">continue;</font></font></font><font size="2"></font></p></blockquote>
<p>   </span></span><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="line-height: 15px; font-family: verdana; color: rgb(54,53,52); font-size: 13px" class="Apple-style-span"><font size="2">
<p>Дала прирост на порядок для количества путей родителей XXK на XK, и в сотню раз (!) для количества порядка 220K на 30К. Сказка.</p>
<p><strong>И наконец, финальный аккорд – алгоритмы.</strong></p>
<p>К сожалению, таким образом удалось улучшить только второе проблемное место. А построение путей по прежнему было медленным. Пришлось найти другой алгоритм и все переписать. Стало почти мгновенно, особенно после добавления кэширования:) Как бонус считать стало более точно, так как оригинальный алгоритм игнорировал один параметр.</p>
<p>В общем, правильные вещи – рулят.</p>
<p>     </font></span></span></p>
<hr />
<p><small>© Begemot for <a href="http://begemotov.net/wxwidgets">Микроблог про wxWidgets</a>, 2011. |
<a href="http://begemotov.net/wxwidgets/qt/o-pravilnyih-konteynerah-metodah-i-algoritmah/">Ссылка</a> |
<a href="http://begemotov.net/wxwidgets/qt/o-pravilnyih-konteynerah-metodah-i-algoritmah/#comments">Уже дискуссия (18)</a> <br/>
Больше по теме: <br/>
</small></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wxwidgets?a=OtzaIUi8HF8:lp75NnqMb-g:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=OtzaIUi8HF8:lp75NnqMb-g:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wxwidgets?a=OtzaIUi8HF8:lp75NnqMb-g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=OtzaIUi8HF8:lp75NnqMb-g:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wxwidgets/~4/OtzaIUi8HF8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/wxwidgets/qt/o-pravilnyih-konteynerah-metodah-i-algoritmah/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<feedburner:origLink>http://begemotov.net/wxwidgets/qt/o-pravilnyih-konteynerah-metodah-i-algoritmah/</feedburner:origLink></item>
		<item>
		<title>Еще про локализацию</title>
		<link>http://feedproxy.google.com/~r/wxwidgets/~3/1Wa5Yv7NWbE/</link>
		<comments>http://begemotov.net/wxwidgets/common/esche-pro-lokalizatsiyu/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 04:27:37 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Oбщее]]></category>
		<category><![CDATA[+1]]></category>

		<guid isPermaLink="false">http://begemotov.net/wxwidgets/common/esche-pro-lokalizatsiyu/</guid>
		<description><![CDATA[Сделали мне тут арабскую локализацию для двух программ. Понравилось как красиво wxWidgets все это обработала. Или это Винда? Ориганалы можно посмотреть тут и тут. Правда прикольно?:) © Begemot for Микроблог про wxWidgets, 2011. &#124; Ссылка &#124; Один высказался Больше по теме: +1]]></description>
			<content:encoded><![CDATA[<p>Сделали мне тут арабскую локализацию для двух программ. Понравилось как красиво wxWidgets все это обработала. Или это Винда?</p>
<p><a href="http://begemotov.net/wxwidgets/wp-content/uploads/2011/01/Flashnotear.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Flashnote-ar" border="0" alt="Flashnote-ar" src="http://begemotov.net/wxwidgets/wp-content/uploads/2011/01/Flashnotear_thumb.png" width="484" height="380" /></a> </p>
<p><a href="http://begemotov.net/wxwidgets/wp-content/uploads/2011/01/Flashnoteoptionsar.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Flashnote-options-ar" border="0" alt="Flashnote-options-ar" src="http://begemotov.net/wxwidgets/wp-content/uploads/2011/01/Flashnoteoptionsar_thumb.png" width="484" height="376" /></a> </p>
<p><a href="http://begemotov.net/wxwidgets/wp-content/uploads/2011/01/clipdiaryar.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clipdiary-ar" border="0" alt="clipdiary-ar" src="http://begemotov.net/wxwidgets/wp-content/uploads/2011/01/clipdiaryar_thumb.png" width="484" height="729" /></a> </p>
<p>Ориганалы можно посмотреть <a href="http://clipdiary.com/screenshots.php">тут</a> и <a href="http://softvoile.com/flashnote/screenshots.php">тут</a>.</p>
<p>Правда прикольно?:)</p>
<hr />
<p><small>© Begemot for <a href="http://begemotov.net/wxwidgets">Микроблог про wxWidgets</a>, 2011. |
<a href="http://begemotov.net/wxwidgets/common/esche-pro-lokalizatsiyu/">Ссылка</a> |
<a href="http://begemotov.net/wxwidgets/common/esche-pro-lokalizatsiyu/#comments">Один высказался</a> <br/>
Больше по теме: <a href="http://begemotov.net/wxwidgets/tag/1/" rel="tag">+1</a><br/>
</small></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wxwidgets?a=1Wa5Yv7NWbE:bMsFd6ollXk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=1Wa5Yv7NWbE:bMsFd6ollXk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wxwidgets?a=1Wa5Yv7NWbE:bMsFd6ollXk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wxwidgets?i=1Wa5Yv7NWbE:bMsFd6ollXk:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wxwidgets/~4/1Wa5Yv7NWbE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/wxwidgets/common/esche-pro-lokalizatsiyu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://begemotov.net/wxwidgets/common/esche-pro-lokalizatsiyu/</feedburner:origLink></item>
	</channel>
</rss>

