<?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"
	>

<channel>
	<title>Matt's Blog for UBUNTU</title>
	<atom:link href="http://matthewgong.blog.ubuntu.org.cn/feed/" rel="self" type="application/rss+xml" />
	<link>http://matthewgong.blog.ubuntu.org.cn</link>
	<description>Just another Blog.ubuntu.org.cn weblog</description>
	<pubDate>Fri, 04 Jul 2008 09:14:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>shell下的socks代理tsocks针对本机上tor的设置</title>
		<link>http://matthewgong.blog.ubuntu.org.cn/2008/07/04/shell%e4%b8%8b%e7%9a%84socks%e4%bb%a3%e7%90%86tsocks%e9%92%88%e5%af%b9%e6%9c%ac%e6%9c%ba%e4%b8%8ator%e7%9a%84%e8%ae%be%e7%bd%ae/</link>
		<comments>http://matthewgong.blog.ubuntu.org.cn/2008/07/04/shell%e4%b8%8b%e7%9a%84socks%e4%bb%a3%e7%90%86tsocks%e9%92%88%e5%af%b9%e6%9c%ac%e6%9c%ba%e4%b8%8ator%e7%9a%84%e8%ae%be%e7%bd%ae/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 09:01:30 +0000</pubDate>
		<dc:creator>matthewgong</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://matthewgong.blog.ubuntu.org.cn/2008/07/04/shell%e4%b8%8b%e7%9a%84socks%e4%bb%a3%e7%90%86tsocks%e9%92%88%e5%af%b9%e6%9c%ac%e6%9c%ba%e4%b8%8ator%e7%9a%84%e8%ae%be%e7%bd%ae/</guid>
		<description><![CDATA[将Tor,tsocks安装好后
编辑配置文件
sudo vim /etc/tsocks.conf
内容为：
server = 127.0.0.1
server_type = 5
server_port = 9050

然后可以使用了，方法有二：
1. 直接tsocks回车，得到一个新的shell
2. 用tsocks wget http://...包裹一个命令
参考：
http://blog.linux.org.tw/~jserv/archives/001486.html
TOR的推荐：/etc/TOR/TOR-tsocks.conf

# This is the configuration for libtsocks (transparent socks) for use
# with ×, which is providing a socks server on port 9050 by default.
#
# See tsocks.conf(5) and ×ify(1) manpages.
server = 127.0.0.1
server_port = 9050
# We specify local as 127.0.0.0 - 127.191.255.255 because the
# Tor [...]]]></description>
			<content:encoded><![CDATA[<p>将Tor,tsocks安装好后</p>
<p>编辑配置文件<br />
<code>sudo vim /etc/tsocks.conf</code></p>
<p>内容为：<br />
<code>server = 127.0.0.1<br />
server_type = 5<br />
server_port = 9050<br />
</code></p>
<p>然后可以使用了，方法有二：<br />
1. 直接<code>tsocks</code>回车，得到一个新的shell</p>
<p>2. 用<code>tsocks wget http://...</code>包裹一个命令</p>
<p>参考：<br />
<a href="http://blog.linux.org.tw/~jserv/archives/001486.html">http://blog.linux.org.tw/~jserv/archives/001486.html</a><br />
TOR的推荐：/etc/TOR/TOR-tsocks.conf<br />
<code><br />
# This is the configuration for libtsocks (transparent socks) for use<br />
# with ×, which is providing a socks server on port 9050 by default.<br />
#<br />
# See tsocks.conf(5) and ×ify(1) manpages.<br />
server = 127.0.0.1<br />
server_port = 9050<br />
# We specify local as 127.0.0.0 - 127.191.255.255 because the<br />
# Tor MAPADDRESS virtual IP range is the rest of net 127.<br />
local = 127.0.0.0/255.128.0.0<br />
local = 127.128.0.0/255.192.0.0<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://matthewgong.blog.ubuntu.org.cn/2008/07/04/shell%e4%b8%8b%e7%9a%84socks%e4%bb%a3%e7%90%86tsocks%e9%92%88%e5%af%b9%e6%9c%ac%e6%9c%ba%e4%b8%8ator%e7%9a%84%e8%ae%be%e7%bd%ae/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ubuntu 8.04 中flash中文字体乱码的解决方案</title>
		<link>http://matthewgong.blog.ubuntu.org.cn/2008/07/01/ubuntu-804-%e4%b8%adflash%e4%b8%ad%e6%96%87%e5%ad%97%e4%bd%93%e4%b9%b1%e7%a0%81%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/</link>
		<comments>http://matthewgong.blog.ubuntu.org.cn/2008/07/01/ubuntu-804-%e4%b8%adflash%e4%b8%ad%e6%96%87%e5%ad%97%e4%bd%93%e4%b9%b1%e7%a0%81%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 09:01:34 +0000</pubDate>
		<dc:creator>matthewgong</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://matthewgong.blog.ubuntu.org.cn/2008/07/01/ubuntu-804-%e4%b8%adflash%e4%b8%ad%e6%96%87%e5%ad%97%e4%bd%93%e4%b9%b1%e7%a0%81%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/</guid>
		<description><![CDATA[8.04安装后就一直发现有这个问题。搜索后有2种解决方案。
第一种，第二种
我觉得第二种有道理：
解决方法：将/etc/fonts/conf.d/49-sansserif.conf删除即可
sudo rm /etc/fonts/conf.d/49-sansserif.conf
这个其实就是Ubuntu7.10中的/etc/fonts/language-selec×.conf文件在8.04中将其分解成
/etc/fonts/conf.d/下的29-language-selec×-zh.conf、69-language-selec×-zh-cn.conf、99-language-selec×-zh.conf和CJK_aliases。所以，当我们发现系统字体显示不对，可以直接调整69-language-selec×-zh-cn.conf，按照自己喜欢的字体顺序调整好后，重启X后，系统的字体应该就恢复了。
/etc/fonts/conf.d/49-sansserif.conf 为在所有非sans-serif、serif字体中附加sans-serif，删除它后就flash里面的字体配置就和外部系统的字体一致了。如果还有乱码，试试调整下69-language-selec×-zh-cn.conf里面的中文字体顺序。 
根据以上说明，觉得第一种有点误打误撞的感觉，test的语义不是去匹配吗？这样改就造成这个匹配无意义了，等于删掉了。
]]></description>
			<content:encoded><![CDATA[<p>8.04安装后就一直发现有这个问题。搜索后有2种解决方案。<br />
<a href="http://www.linuxdiyf.com/bbs/thread-89540-1-1.html">第一种</a>，<a href="http://www.linuxidc.com/Linux/2008-06/13795.htm">第二种</a></p>
<p>我觉得第二种有道理：</p>
<p>解决方法：将/etc/fonts/conf.d/49-sansserif.conf删除即可<br />
<code>sudo rm /etc/fonts/conf.d/49-sansserif.conf</code></p>
<p>这个其实就是Ubuntu7.10中的/etc/fonts/language-selec×.conf文件在8.04中将其分解成<br />
/etc/fonts/conf.d/下的29-language-selec×-zh.conf、69-language-selec×-zh-cn.conf、99-language-selec×-zh.conf和CJK_aliases。所以，当我们发现系统字体显示不对，可以直接调整69-language-selec×-zh-cn.conf，按照自己喜欢的字体顺序调整好后，重启X后，系统的字体应该就恢复了。</p>
<p>/etc/fonts/conf.d/49-sansserif.conf 为在所有非sans-serif、serif字体中附加sans-serif，删除它后就flash里面的字体配置就和外部系统的字体一致了。如果还有乱码，试试调整下69-language-selec×-zh-cn.conf里面的中文字体顺序。 </p>
<p>根据以上说明，觉得第一种有点误打误撞的感觉，test的语义不是去匹配吗？这样改就造成这个匹配无意义了，等于删掉了。</p>
]]></content:encoded>
			<wfw:commentRss>http://matthewgong.blog.ubuntu.org.cn/2008/07/01/ubuntu-804-%e4%b8%adflash%e4%b8%ad%e6%96%87%e5%ad%97%e4%bd%93%e4%b9%b1%e7%a0%81%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CMake and wxWidgets</title>
		<link>http://matthewgong.blog.ubuntu.org.cn/2008/04/06/cmake-and-wxwidgets/</link>
		<comments>http://matthewgong.blog.ubuntu.org.cn/2008/04/06/cmake-and-wxwidgets/#comments</comments>
		<pubDate>Sun, 06 Apr 2008 01:27:19 +0000</pubDate>
		<dc:creator>matthewgong</dc:creator>
		
		<category><![CDATA[wxWidgets]]></category>

		<category><![CDATA[CMake]]></category>

		<guid isPermaLink="false">http://matthewgong.blog.ubuntu.org.cn/2008/04/06/cmake-and-wxwidgets/</guid>
		<description><![CDATA[Visual C++ 9.0 2008 Express Edition现在除了IDE常有的缓慢臃肿外，可用性还算蛮好的。向离不开windows与IDE的同学推荐一下。
为了在多个开发平台上无障碍编译程序，CMake的学习与部署看来日益紧迫。CMake的学习曲线相比Autotools来说应该平坦很多。但是协调这么多的编译器也不是很容易的事情，不像Autotools只需要考虑GCC。所以也不是什么容易的事情啦。
现在，终于把wxWidgets的minimal的例子转化为Cmake工程，CMakeLists.txt文件如下：
PROJECT( MINIMAL )
SET(wxWidgets_CONFIGURATION mswu)
SET(wxWidgets_USE_LIBS base core)
FIND_PACKAGE(wxWidgets)
IF(wxWidgets_FOUND)
  INCLUDE(${wxWidgets_USE_FILE})
ENDIF(wxWidgets_FOUND)
# Add binary called "minimal" that is built from the source file "minimal.cpp".
# The extension is automatically found.
ADD_EXECUTABLE(minimal WIN32 minimal)
# Link the executable to the wxWidgets library.
TARGET_LINK_LIBRARIES(minimal ${wxWidgets_LIBRARIES})

在VC2008Express下需要注意的是“ADD_EXECUTABLE(minimal WIN32 minimal)”中的WIN32关键字，这样工程链接代码时用的是“/SUBSYSTEM:WINDOWS”而不是默认的“/SUBSYSTEM:CONSOLE”。
CMake默认有findwxWidgets.cmake文件，通过“FIND_PACKAGE(wxWidgets)”指令，支持wxWidgets库的使用。通过学习findwxWidgets.cmake这样的.cmake文件是学习CMake的好方法之一哦。
]]></description>
			<content:encoded><![CDATA[<p>Visual C++ 9.0 2008 Express Edition现在除了IDE常有的缓慢臃肿外，可用性还算蛮好的。向离不开windows与IDE的同学推荐一下。</p>
<p>为了在多个开发平台上无障碍编译程序，CMake的学习与部署看来日益紧迫。CMake的学习曲线相比Autotools来说应该平坦很多。但是协调这么多的编译器也不是很容易的事情，不像Autotools只需要考虑GCC。所以也不是什么容易的事情啦。</p>
<p>现在，终于把wxWidgets的minimal的例子转化为Cmake工程，CMakeLists.txt文件如下：<br />
<code>PROJECT( MINIMAL )<br />
SET(wxWidgets_CONFIGURATION mswu)<br />
SET(wxWidgets_USE_LIBS base core)<br />
FIND_PACKAGE(wxWidgets)<br />
IF(wxWidgets_FOUND)<br />
  INCLUDE(${wxWidgets_USE_FILE})<br />
ENDIF(wxWidgets_FOUND)<br />
# Add binary called "minimal" that is built from the source file "minimal.cpp".<br />
# The extension is automatically found.<br />
ADD_EXECUTABLE(minimal WIN32 minimal)<br />
# Link the executable to the wxWidgets library.<br />
TARGET_LINK_LIBRARIES(minimal ${wxWidgets_LIBRARIES})<br />
</code></p>
<p>在VC2008Express下需要注意的是“ADD_EXECUTABLE(minimal WIN32 minimal)”中的<strong>WIN32</strong>关键字，这样工程链接代码时用的是“/SUBSYSTEM:<strong>WINDOWS</strong>”而不是默认的“/SUBSYSTEM:<strong>CONSOLE</strong>”。</p>
<p>CMake默认有findwxWidgets.cmake文件，通过“FIND_PACKAGE(<strong>wxWidgets</strong>)”指令，支持wxWidgets库的使用。通过学习findwxWidgets.cmake这样的.cmake文件是学习CMake的好方法之一哦。</p>
]]></content:encoded>
			<wfw:commentRss>http://matthewgong.blog.ubuntu.org.cn/2008/04/06/cmake-and-wxwidgets/feed/</wfw:commentRss>
		</item>
		<item>
		<title>初识gstreamer pipeline</title>
		<link>http://matthewgong.blog.ubuntu.org.cn/2008/04/04/%e5%88%9d%e8%af%86gstreamer-pipeline/</link>
		<comments>http://matthewgong.blog.ubuntu.org.cn/2008/04/04/%e5%88%9d%e8%af%86gstreamer-pipeline/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 06:43:18 +0000</pubDate>
		<dc:creator>matthewgong</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<category><![CDATA[gstreamer]]></category>

		<guid isPermaLink="false">http://matthewgong.blog.ubuntu.org.cn/2008/04/04/%e5%88%9d%e8%af%86gstreamer-pipeline/</guid>
		<description><![CDATA[本来就知道gstreamer使用链式法则构建媒体流，但是具体是怎么干的一直没有深究。今天由一个需求带来了我对gstream的初次探索。
这个需求是这样的。我需要将一些飞行仿真的东西从屏幕上录下来。找了很久，终于找到了istanbul这个程序。恩，这个东西很简单、很方便。但是它默认的编码率好像设得很低，录出来动态的视频效果不好。
没关系，istanbul是python写的，可以很方便的看到其内部细节。我发现它是用gstream进行录像的。
final pipeline: istximagesrc name=videosource display-name=:0.0 screen-num=0 use-damage=false ! video/x-raw-rgb,framerate=30/1 ! videorate ! ffmpegcolorspace ! videoscale method=1 ! video/x-raw-yuv,width=1024,height=768,framerate=30/1 ! theoraenc ! oggmux name=mux ! filesink location=/tmp/tmpoNozkR
theoraenc插件使用的是默认的编码方式，太低了，我们升高它！
在/usr/share/python-support/istanbul/istanbul/main/screencast.py的102行，把
'! theoraenc' % (width, height, framerate)改为            '! theoraenc bitrate=1200 quality=63' % (width, height, framerate)
具体的可以查这里
这样最终的pipeline:
istximagesrc name=videosource display-name=:0.0 screen-num=0 use-damage=false ! [...]]]></description>
			<content:encoded><![CDATA[<p>本来就知道gstreamer使用链式法则构建媒体流，但是具体是怎么干的一直没有深究。今天由一个需求带来了我对gstream的初次探索。</p>
<p>这个需求是这样的。我需要将一些飞行仿真的东西从屏幕上录下来。找了很久，终于找到了istanbul这个程序。恩，这个东西很简单、很方便。但是它默认的编码率好像设得很低，录出来动态的视频效果不好。</p>
<p>没关系，istanbul是python写的，可以很方便的看到其内部细节。我发现它是用gstream进行录像的。<br />
final pipeline: <code>istximagesrc name=videosource display-name=:0.0 screen-num=0 use-damage=false ! video/x-raw-rgb,framerate=30/1 ! videorate ! ffmpegcolorspace ! videoscale method=1 ! video/x-raw-yuv,width=1024,height=768,framerate=30/1 ! theoraenc ! oggmux name=mux ! filesink location=/tmp/tmpoNozkR</code></p>
<p>theoraenc插件使用的是默认的编码方式，太低了，我们升高它！<br />
在/usr/share/python-support/istanbul/istanbul/main/screencast.py的102行，把<br />
<code>'! theoraenc' % (width, height, framerate)</code>改为            <code>'! theoraenc bitrate=1200 quality=63' % (width, height, framerate)</code></p>
<p>具体的可以查<a href="http://gstreamer.freedesktop.org/documentation/plugins.html">这里</a></p>
<p>这样最终的pipeline:<br />
<code>istximagesrc name=videosource display-name=:0.0 screen-num=0 use-damage=false ! video/x-raw-rgb,framerate=30/1 ! videorate ! ffmpegcolorspace ! videoscale method=1 ! video/x-raw-yuv,width=1024,height=768,framerate=30/1 ! theoraenc bitrate=1200 quality=63 ! oggmux name=mux ! filesink location=/tmp/tmpoNozkR</code></p>
<p>当然，这不是最佳的解决方法。应该把配置从gconf系统中读出来才是王道 :)</p>
]]></content:encoded>
			<wfw:commentRss>http://matthewgong.blog.ubuntu.org.cn/2008/04/04/%e5%88%9d%e8%af%86gstreamer-pipeline/feed/</wfw:commentRss>
		</item>
		<item>
		<title>wxWidgets与main函数</title>
		<link>http://matthewgong.blog.ubuntu.org.cn/2008/02/28/wxwidgets%e4%b8%8emain%e5%87%bd%e6%95%b0/</link>
		<comments>http://matthewgong.blog.ubuntu.org.cn/2008/02/28/wxwidgets%e4%b8%8emain%e5%87%bd%e6%95%b0/#comments</comments>
		<pubDate>Thu, 28 Feb 2008 04:26:28 +0000</pubDate>
		<dc:creator>matthewgong</dc:creator>
		
		<category><![CDATA[wxWidgets]]></category>

		<category><![CDATA[FlightGear]]></category>

		<guid isPermaLink="false">http://matthewgong.blog.ubuntu.org.cn/2008/02/28/wxwidgets%e4%b8%8emain%e5%87%bd%e6%95%b0/</guid>
		<description><![CDATA[一般而言，开发一个wxWidgets程序，我们并不需要main函数。因为宏IMPLEMENT_APP(MyApp)已经将main函数封装于内。这个宏完成App的实例化，并调用main函数。将宏展开，它就是这么干的：
//IMPLEMENT_APP(MyApp)&#160;&#160; &#160;wxAppConsole *wxCreateApp()&#160;&#160; &#160;{&#160;&#160; &#160; &#160; &#160;wxAppConsole::CheckBuildOptions(WX_BUILD_OPTIONS_SIGNATURE,&#160;&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;&#34;your program&#34;);&#160;&#160; &#160; &#160; &#160;return new MyApp;&#160;&#160; &#160;}&#160;&#160;&#160; &#160;wxAppInitializer&#160;&#160; &#160; &#160; &#160;wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp);&#160;&#160;&#160; &#160;extern MyApp&#38;amp; wxGetApp();&#160;&#160; &#160;MyApp&#38;amp; wxGetApp() { return *wx_static_cast(MyApp*, wxApp::GetInstance()); }&#160;&#160;&#160; &#160;int main(int argc, char ** argv) { [...]]]></description>
			<content:encoded><![CDATA[<p>一般而言，开发一个wxWidgets程序，我们并不需要main函数。因为宏<code>IMPLEMENT_APP(MyApp)</code>已经将main函数封装于内。这个宏完成App的实例化，并调用main函数。将宏展开，它就是这么干的：</p>
<div class="hl-surround"><div class="hl-main"><span style="color: #ffa500;">//IMPLEMENT_APP(MyApp)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">wxAppConsole</span><span style="color: Gray;"> *</span><span style="color: Blue;">wxCreateApp</span><span style="color: Olive;">()</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">wxAppConsole</span><span style="color: Gray;">::</span><span style="color: Blue;">CheckBuildOptions</span><span style="color: Olive;">(</span><span style="color: Blue;">WX_BUILD_OPTIONS_SIGNATURE</span><span style="color: Gray;">,<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">your program</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">MyApp</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"><br />&nbsp;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">wxAppInitializer</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">wxTheAppInitializer</span><span style="color: Olive;">((</span><span style="color: Blue;">wxAppInitializerFunction</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Blue;">wxCreateApp</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;<br />&nbsp;&nbsp; &nbsp;</span><span class="hl-types">extern</span><span style="color: Gray;"> </span><span style="color: Blue;">MyApp</span><span style="color: Gray;">&amp;</span><span style="color: Blue;">amp</span><span style="color: Gray;">; </span><span style="color: Blue;">wxGetApp</span><span style="color: Olive;">()</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">MyApp</span><span style="color: Gray;">&amp;</span><span style="color: Blue;">amp</span><span style="color: Gray;">; </span><span style="color: Blue;">wxGetApp</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: Green;">return</span><span style="color: Gray;"> *</span><span style="color: Blue;">wx_static_cast</span><span style="color: Olive;">(</span><span style="color: Blue;">MyApp</span><span style="color: Gray;">*, </span><span style="color: Blue;">wxApp</span><span style="color: Gray;">::</span><span style="color: Blue;">GetInstance</span><span style="color: Olive;">())</span><span style="color: Gray;">; </span><span style="color: Olive;">}</span><span style="color: Gray;"><br />&nbsp;<br />&nbsp;&nbsp; &nbsp;</span><span class="hl-types">int</span><span style="color: Gray;"> </span><span style="color: Blue;">main</span><span style="color: Olive;">(</span><span class="hl-types">int</span><span style="color: Gray;"> </span><span style="color: Blue;">argc</span><span style="color: Gray;">, </span><span class="hl-types">char</span><span style="color: Gray;"> ** </span><span style="color: Blue;">argv</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"> ::</span><span style="color: Blue;">wxEntry</span><span style="color: Olive;">(</span><span style="color: Blue;">argc</span><span style="color: Gray;">, </span><span style="color: Blue;">argv</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span><span style="color: Olive;">}</span></div></div>
<p>但是，总有需求无法用这个宏满足的时候。我现在的需求是将FlightGear与wxWidgets联合起来。FlightGear是一个非常强大的飞行模拟程序，其内部视景系统使用OpenSceneGraph，而在与窗口的适配上并且其已经可以使用GLUT、SDL与OSGVIEWER作为后端。我只需要实现一系列的函数，如fgOSMainLoop等，就可以增加一种新的窗口。<br />
要实现的函数是<code><br />
void fgOSInit(int* argc, char** argv);<br />
void fgOSOpenWindow(int w, int h, int bpp, bool alpha, bool stencil,<br />
                    bool fullscreen);<br />
void fgOSFullScreen();<br />
void fgOSMainLoop();<br />
void fgOSExit(int code);<br />
void fgSetMouseCursor(int cursor);<br />
int  fgGetMouseCursor();<br />
void fgWarpMouse(int x, int y);<br />
int  fgGetKeyModifiers();<br />
void fgMakeCurrent();<br />
bool fgOSIsMainCamera(const osg::Camera* camera);<br />
bool fgOSIsMainContext(const osg::GraphicsContext* context);<br />
</code><br />
可以发现，主函数不需要wxWidgets来实现，其需要通过实现fgOSInit来初始化App；通过fgOSOpenWindow来创建窗口；通过fgOSMainLoop来执行主循环。由于fgInit与fgMainLoop是分开实现的，IMPLEMENT_APP宏中的wxEntry函数还需要进一步展开。参考wxWidgets的源代码init.cpp，这两个函数可以这样实现：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span class="hl-types">void</span><span style="color: Gray;"> </span><span style="color: Blue;">fgOSInit</span><span style="color: Olive;">(</span><span class="hl-types">int</span><span style="color: Gray;">* </span><span style="color: Blue;">argc</span><span style="color: Gray;">, </span><span class="hl-types">char</span><span style="color: Gray;">** </span><span style="color: Blue;">argv</span><span style="color: Olive;">)</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// library initialization</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span class="hl-types">int</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">argc_wx</span><span style="color: Gray;"> = </span><span style="color: Maroon;">1</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Gray;"> !</span><span style="color: Blue;">wxEntryStart</span><span style="color: Olive;">(</span><span style="color: Blue;">argc_wx</span><span style="color: Gray;">, </span><span style="color: Blue;">argv</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">{</span></li>
<li><span class="hl-prepro">#if</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">wxUSE_LOG</span><span class="hl-prepro"></span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// flush any log messages explaining why we failed</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">delete</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">wxLog</span><span style="color: Gray;">::</span><span style="color: Blue;">SetActiveTarget</span><span style="color: Olive;">(</span><span class="hl-prepro">NULL</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span class="hl-prepro">#endif</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">exit</span><span style="color: Olive;">(</span><span style="color: Gray;">-</span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">try</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// app initialization</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Gray;"> !</span><span style="color: Blue;">wxTheApp</span><span style="color: Gray;">-&amp;</span><span style="color: Blue;">gt</span><span style="color: Gray;">;</span><span style="color: Blue;">CallOnInit</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">exit</span><span style="color: Olive;">(</span><span style="color: Gray;">-</span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">catch</span><span style="color: Olive;">(</span><span style="color: Gray;">...</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">wxTheApp</span><span style="color: Gray;">-&amp;</span><span style="color: Blue;">gt</span><span style="color: Gray;">;</span><span style="color: Blue;">OnUnhandledException</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">exit</span><span style="color: Olive;">(</span><span style="color: Gray;">-</span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span class="hl-types">void</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">fgOSMainLoop</span><span style="color: Olive;">()</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// if wxEntryStart succeeded, we must call wxEntryCleanup even if the code</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// below returns or throws</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">wxCleanupOnExit</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cleanupOnExit</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">try</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// ensure that OnExit() is called if OnInit() had succeeded</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="hl-types">class</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">CallOnExit</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">public</span><span style="color: Gray;">:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ~</span><span style="color: Blue;">CallOnExit</span><span style="color: Olive;">()</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: Blue;">wxTheApp</span><span style="color: Gray;">-&amp;</span><span style="color: Blue;">gt</span><span style="color: Gray;">;</span><span style="color: Blue;">OnExit</span><span style="color: Olive;">()</span><span style="color: Gray;">; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">callOnExit</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// app execution</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">wxTheApp</span><span style="color: Gray;">-&amp;</span><span style="color: Blue;">gt</span><span style="color: Gray;">;</span><span style="color: Blue;">OnRun</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">catch</span><span style="color: Olive;">(</span><span style="color: Gray;">...</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">wxTheApp</span><span style="color: Gray;">-&amp;</span><span style="color: Blue;">gt</span><span style="color: Gray;">;</span><span style="color: Blue;">OnUnhandledException</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p><code><br />
void fgOSInit(int* argc, char** argv)<br />
{<br />
    // library initialization<br />
    int argc_wx = 1;<br />
    if ( !wxEntryStart(argc_wx, argv) )<br />
    {<br />
#if wxUSE_LOG<br />
        // flush any log messages explaining why we failed<br />
        delete wxLog::SetActiveTarget(NULL);<br />
#endif<br />
        exit(-1);<br />
    }<br />
    try<br />
    {<br />
        // app initialization<br />
        if ( !wxTheApp-&gt;CallOnInit() )<br />
        {<br />
          exit(-1);<br />
        }<br />
    }<br />
    catch(...)<br />
    {<br />
      wxTheApp-&gt;OnUnhandledException();<br />
      exit(-1);<br />
    }<br />
}<br />
void fgOSMainLoop()<br />
{<br />
    // if wxEntryStart succeeded, we must call wxEntryCleanup even if the code<br />
    // below returns or throws<br />
    wxCleanupOnExit cleanupOnExit;<br />
    try<br />
    {<br />
        // ensure that OnExit() is called if OnInit() had succeeded<br />
        class CallOnExit<br />
        {<br />
        public:<br />
            ~CallOnExit() { wxTheApp-&gt;OnExit(); }<br />
        } callOnExit;<br />
        // app execution<br />
        wxTheApp-&gt;OnRun();<br />
    }<br />
    catch(...)<br />
    {<br />
      wxTheApp-&gt;OnUnhandledException();<br />
    }<br />
}<br />
</code></p>
<p>P.S.<br />
由于WP的编辑器与CoolCode的解释器固执的对&#8217;&gt;&#8217;与&#8217;&amp;&#8217;采取不同的态度，代码的显示很糟糕，大家凑合的看算了。</p>
]]></content:encoded>
			<wfw:commentRss>http://matthewgong.blog.ubuntu.org.cn/2008/02/28/wxwidgets%e4%b8%8emain%e5%87%bd%e6%95%b0/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Preload</title>
		<link>http://matthewgong.blog.ubuntu.org.cn/2008/02/27/preload/</link>
		<comments>http://matthewgong.blog.ubuntu.org.cn/2008/02/27/preload/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 14:38:36 +0000</pubDate>
		<dc:creator>matthewgong</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://matthewgong.blog.ubuntu.org.cn/2008/02/27/preload/</guid>
		<description><![CDATA[一直想找到Ubuntu下通过预先载入技术加速启动的工具，如同Fedora下的readahead。
今天在Solidot上发现了一个——这就是preload软件包。
安装非常简单：sudo apt-get install preload
效果嘛，还没时间体会。具体的可以看这里
]]></description>
			<content:encoded><![CDATA[<p>一直想找到Ubuntu下通过预先载入技术加速启动的工具，如同Fedora下的readahead。<br />
今天在Solidot上发现了一个——这就是preload软件包。</p>
<p>安装非常简单：<code>sudo apt-get install preload</code></p>
<p>效果嘛，还没时间体会。具体的可以看<a href="http://www.techthrob.com/tech/preload.php">这里</a></p>
]]></content:encoded>
			<wfw:commentRss>http://matthewgong.blog.ubuntu.org.cn/2008/02/27/preload/feed/</wfw:commentRss>
		</item>
		<item>
		<title>It&#8217;s so easy</title>
		<link>http://matthewgong.blog.ubuntu.org.cn/2008/02/22/its-so-easy/</link>
		<comments>http://matthewgong.blog.ubuntu.org.cn/2008/02/22/its-so-easy/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 01:28:21 +0000</pubDate>
		<dc:creator>matthewgong</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://matthewgong.blog.ubuntu.org.cn/2008/02/22/its-so-easy/</guid>
		<description><![CDATA[通过XDMCP协议来登录远程桌面，在Windows下可以使用Xmanager、Cygwin/X等工具，而在linux下，最简单的方法莫过于直接使用X这个命令：
X :1 -query 192.168.0.2
X :2 -indirect 192.168.0.2
X :3 -broadcast
窗口的切换使用Ctrl+Alt+F8、Ctrl+Alt+F9、Ctrl+Alt+F10
我的感受是这个方式是最方便快捷，并且X的反应速度是最好的（与Xmanager等相比）
Yes, it&#8217;s so easy.
]]></description>
			<content:encoded><![CDATA[<p>通过XDMCP协议来登录远程桌面，在Windows下可以使用Xmanager、Cygwin/X等工具，而在linux下，最简单的方法莫过于直接使用X这个命令：<br />
<code>X :1 -query 192.168.0.2<br />
X :2 -indirect 192.168.0.2<br />
X :3 -broadcast</code><br />
窗口的切换使用Ctrl+Alt+F8、Ctrl+Alt+F9、Ctrl+Alt+F10<br />
我的感受是这个方式是最方便快捷，并且X的反应速度是最好的（与Xmanager等相比）<br />
Yes, it&#8217;s so easy.</p>
]]></content:encoded>
			<wfw:commentRss>http://matthewgong.blog.ubuntu.org.cn/2008/02/22/its-so-easy/feed/</wfw:commentRss>
		</item>
		<item>
		<title>艰难的开始使用这个blog</title>
		<link>http://matthewgong.blog.ubuntu.org.cn/2008/02/01/%e8%89%b0%e9%9a%be%e7%9a%84%e5%bc%80%e5%a7%8b%e4%bd%bf%e7%94%a8%e8%bf%99%e4%b8%aablog/</link>
		<comments>http://matthewgong.blog.ubuntu.org.cn/2008/02/01/%e8%89%b0%e9%9a%be%e7%9a%84%e5%bc%80%e5%a7%8b%e4%bd%bf%e7%94%a8%e8%bf%99%e4%b8%aablog/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 02:51:36 +0000</pubDate>
		<dc:creator>matthewgong</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://matthewgong.blog.ubuntu.org.cn/2008/02/01/%e8%89%b0%e9%9a%be%e7%9a%84%e5%bc%80%e5%a7%8b%e4%bd%bf%e7%94%a8%e8%bf%99%e4%b8%aablog/</guid>
		<description><![CDATA[  虽然早就耳闻Word Press的大名，但是要不是ubuntu.org.cn 的论坛转到了这个平台上，我还没有计划尝试一下。
  Word Press给我的第一个印象不太好哦。为了粘贴一段Python的程序，让我费了不少心思。现在来看，主要是与这个编辑器tinymce八字不合，并且我要用的插件CoolCode也与它有点过不去。于是我在&#8221;My Profile&#8221;中去掉&#8221;Use the visual edi× when writing&#8221;选项，把它的visual功能关闭了。到此它还不放过我，我用尖括号来调用的CoolCode语法它都不认，非要把它们过滤掉。我现在先用方括号来应付一下先。
这篇文章好像可以进一步驯服tinymcs。
也许tinymcs默认是用来写一点心情小说的？
]]></description>
			<content:encoded><![CDATA[<p>  虽然早就耳闻Word Press的大名，但是要不是ubuntu.org.cn 的论坛转到了这个平台上，我还没有计划尝试一下。</p>
<p>  Word Press给我的第一个印象不太好哦。为了粘贴一段Python的程序，让我费了不少心思。现在来看，主要是与这个编辑器tinymce八字不合，并且我要用的插件CoolCode也与它有点过不去。于是我在&#8221;My Profile&#8221;中去掉&#8221;Use the visual edi× when writing&#8221;选项，把它的visual功能关闭了。到此它还不放过我，我用尖括号来调用的CoolCode语法它都不认，非要把它们过滤掉。我现在先用方括号来应付一下先。<a href="http://www.scratch99.com/2007/06/wordpress-taming-the-advanced-edi×/"><br />
这篇文章</a>好像可以进一步驯服tinymcs。</p>
<p>也许tinymcs默认是用来写一点心情小说的？</p>
]]></content:encoded>
			<wfw:commentRss>http://matthewgong.blog.ubuntu.org.cn/2008/02/01/%e8%89%b0%e9%9a%be%e7%9a%84%e5%bc%80%e5%a7%8b%e4%bd%bf%e7%94%a8%e8%bf%99%e4%b8%aablog/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Python on S60</title>
		<link>http://matthewgong.blog.ubuntu.org.cn/2008/01/29/python-on-s60/</link>
		<comments>http://matthewgong.blog.ubuntu.org.cn/2008/01/29/python-on-s60/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 02:36:20 +0000</pubDate>
		<dc:creator>matthewgong</dc:creator>
		
		<category><![CDATA[N73]]></category>

		<guid isPermaLink="false">http://matthewgong.blog.ubuntu.org.cn/2008/01/29/python-on-s60/</guid>
		<description><![CDATA[学习了一下如何在S60系统上开发简单的Python程序。
这是一个笔记本的小程序，根据smallfish的程序修改而来。
&#19979;&#36733;: tips.pyimport appuifwimport e32import osimport time&#160;diary_root=&#34;e:/diary/&#34;title,content=u'', appuifw.Text()&#160;def mbstr(msg):&#160;&#160; &#160; &#160; &#160;return unicode(msg.decode('utf8'))def info(msg):&#160;&#160; &#160; &#160; &#160;appuifw.note(mbstr(msg),'info')def error(msg):&#160;&#160; &#160; &#160; &#160;appuifw.note(mbstr(msg),'error')def conf(msg):&#160;&#160; &#160; &#160; &#160;appuifw.note(mbstr(msg),'conf')&#160;def quit():&#160;&#160; &#160; &#160; &#160;if appuifw.query(mbstr('确认退出吗?'),'query'):&#160;&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;appuifw.app.set_exit()&#160;def addtext():&#160;&#160; &#160;t = appuifw.query(mbstr('输入文本行：'),'text')&#160;&#160; &#160;if t :&#160;&#160; &#160; &#160;content.add(unicode(t+'\n'))&#160;def init():&#160;&#160; &#160; &#160; &#160;global diary_root&#160;&#160; &#160; &#160; &#160;if os.path.isdir(diary_root):&#160;&#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>学习了一下如何在S60系统上开发简单的Python程序。</p>
<p>这是一个笔记本的小程序，根据smallfish的程序修改而来。</p>
<div class="hl-title">&#19979;&#36733;: <a href="http://matthewgong.blog.ubuntu.org.cn/wp-content/plugins/coolcode/coolcode.php?p=6&amp;download=tips.py">tips.py</a></div><div class="hl-surround"><div class="hl-main"><span style="color: Green;">import</span><span style="color: Gray;"> </span><span style="color: Blue;">appuifw</span><span style="color: Gray;"><br /></span><span style="color: Green;">import</span><span style="color: Gray;"> </span><span style="color: Blue;">e32</span><span style="color: Gray;"><br /></span><span style="color: Green;">import</span><span style="color: Gray;"> </span><span style="color: Blue;">os</span><span style="color: Gray;"><br /></span><span style="color: Green;">import</span><span style="color: Gray;"> </span><span style="color: Blue;">time</span><span style="color: Gray;"><br />&nbsp;<br /></span><span style="color: Blue;">diary_root</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">e:/diary/</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"><br /></span><span style="color: Blue;">title</span><span style="color: Gray;">,</span><span style="color: Blue;">content</span><span style="color: Gray;">=</span><span style="color: Blue;">u</span><span style="color: #8b0000;">''</span><span style="color: Gray;">, </span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">Text</span><span style="color: Olive;">()</span><span style="color: Gray;"><br />&nbsp;<br /></span><span style="color: Green;">def</span><span style="color: Gray;"> </span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: Blue;">msg</span><span style="color: Olive;">)</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Teal;">unicode</span><span style="color: Olive;">(</span><span style="color: Blue;">msg</span><span style="color: Gray;">.</span><span style="color: Blue;">decode</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">utf8</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;"><br /></span><span style="color: Green;">def</span><span style="color: Gray;"> </span><span style="color: Blue;">info</span><span style="color: Olive;">(</span><span style="color: Blue;">msg</span><span style="color: Olive;">)</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">note</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: Blue;">msg</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">info</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"><br /></span><span style="color: Green;">def</span><span style="color: Gray;"> </span><span style="color: Blue;">error</span><span style="color: Olive;">(</span><span style="color: Blue;">msg</span><span style="color: Olive;">)</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">note</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: Blue;">msg</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">error</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"><br /></span><span style="color: Green;">def</span><span style="color: Gray;"> </span><span style="color: Blue;">conf</span><span style="color: Olive;">(</span><span style="color: Blue;">msg</span><span style="color: Olive;">)</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">note</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: Blue;">msg</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">conf</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;<br /></span><span style="color: Green;">def</span><span style="color: Gray;"> </span><span style="color: Blue;">quit</span><span style="color: Olive;">()</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">query</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">确认退出吗?</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">query</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">app</span><span style="color: Gray;">.</span><span style="color: Blue;">set_exit</span><span style="color: Olive;">()</span><span style="color: Gray;"><br />&nbsp;<br /></span><span style="color: Green;">def</span><span style="color: Gray;"> </span><span style="color: Blue;">addtext</span><span style="color: Olive;">()</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">t</span><span style="color: Gray;"> = </span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">query</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">输入文本行：</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">text</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Blue;">t</span><span style="color: Gray;"> :<br />&nbsp;&nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">content</span><span style="color: Gray;">.</span><span style="color: Blue;">add</span><span style="color: Olive;">(</span><span style="color: Teal;">unicode</span><span style="color: Olive;">(</span><span style="color: Blue;">t</span><span style="color: Gray;">+</span><span style="color: #8b0000;">'</span><span style="color: Navy;">\n</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;"><br />&nbsp;<br /></span><span style="color: Green;">def</span><span style="color: Gray;"> </span><span style="color: Blue;">init</span><span style="color: Olive;">()</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">global</span><span style="color: Gray;"> </span><span style="color: Blue;">diary_root</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Blue;">os</span><span style="color: Gray;">.</span><span style="color: Blue;">path</span><span style="color: Gray;">.</span><span style="color: Blue;">isdir</span><span style="color: Olive;">(</span><span style="color: Blue;">diary_root</span><span style="color: Olive;">)</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">info</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">笔记已经初始化!</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">else</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">os</span><span style="color: Gray;">.</span><span style="color: Blue;">makedirs</span><span style="color: Olive;">(</span><span style="color: Blue;">diary_root</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">info</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">笔记初始化成功!</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;<br /></span><span style="color: Green;">def</span><span style="color: Gray;"> </span><span style="color: Blue;">home_ui</span><span style="color: Olive;">()</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">global</span><span style="color: Gray;"> </span><span style="color: Blue;">title</span><span style="color: Gray;">,</span><span style="color: Blue;">content</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">title</span><span style="color: Gray;"> = </span><span style="color: Blue;">u</span><span style="color: #8b0000;">''</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">app</span><span style="color: Gray;">.</span><span style="color: Blue;">title</span><span style="color: Gray;">=</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">笔记本 v1.1</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">content</span><span style="color: Gray;">.</span><span style="color: Blue;">set</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Name:</span><span style="color: Navy;">\t</span><span style="color: Red;"> 笔记本</span><span style="color: Navy;">\n</span><span style="color: Red;">Version:</span><span style="color: Navy;">\t</span><span style="color: Red;"> 1.1</span><span style="color: Navy;">\n</span><span style="color: Red;">Original Author:</span><span style="color: Navy;">\t</span><span style="color: Red;"> smallfish</span><span style="color: Navy;">\n</span><span style="color: Red;">Author:</span><span style="color: Navy;">\t</span><span style="color: Red;"> Matt</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;"><br />&nbsp;<br /></span><span style="color: Green;">def</span><span style="color: Gray;"> </span><span style="color: Blue;">about_ui</span><span style="color: Olive;">()</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">info</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Name: 笔记本</span><span style="color: Navy;">\n</span><span style="color: Red;">Version: 1.1</span><span style="color: Navy;">\n</span><span style="color: Red;">Original Author: smallfish</span><span style="color: Navy;">\n</span><span style="color: Red;">Author: Matt</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;<br /></span><span style="color: Green;">def</span><span style="color: Gray;"> </span><span style="color: Blue;">view_ui</span><span style="color: Olive;">()</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">global</span><span style="color: Gray;"> </span><span style="color: Blue;">diary_root</span><span style="color: Gray;">,</span><span style="color: Blue;">content</span><span style="color: Gray;">,</span><span style="color: Blue;">title</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">app</span><span style="color: Gray;">.</span><span style="color: Blue;">title</span><span style="color: Gray;">=</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">View Diary</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">try</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">diary_list</span><span style="color: Gray;">=</span><span style="color: Teal;">map</span><span style="color: Olive;">(</span><span style="color: Blue;">unicode</span><span style="color: Gray;">,</span><span style="color: Blue;">os</span><span style="color: Gray;">.</span><span style="color: Blue;">listdir</span><span style="color: Olive;">(</span><span style="color: Blue;">diary_root</span><span style="color: Olive;">))</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">index</span><span style="color: Gray;">=</span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">selection_list</span><span style="color: Olive;">(</span><span style="color: Blue;">choices</span><span style="color: Gray;">=</span><span style="color: Blue;">diary_list</span><span style="color: Gray;">,</span><span style="color: Blue;">search_field</span><span style="color: Gray;">=</span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">file</span><span style="color: Gray;">=</span><span style="color: Blue;">diary_root</span><span style="color: Gray;">+</span><span style="color: Blue;">diary_list</span><span style="color: Olive;">[</span><span style="color: Blue;">index</span><span style="color: Olive;">]</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">try</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">f</span><span style="color: Gray;">=</span><span style="color: Teal;">open</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">r</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">result</span><span style="color: Gray;">=</span><span style="color: Blue;">f</span><span style="color: Gray;">.</span><span style="color: Blue;">read</span><span style="color: Olive;">()</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">f</span><span style="color: Gray;">.</span><span style="color: Blue;">close</span><span style="color: Olive;">()</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">data</span><span style="color: Gray;">=</span><span style="color: Teal;">eval</span><span style="color: Olive;">(</span><span style="color: Blue;">result</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">title</span><span style="color: Gray;">=</span><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">title</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span><span style="color: #8b0000;">&quot;&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">app</span><span style="color: Gray;">.</span><span style="color: Blue;">title</span><span style="color: Gray;">=</span><span style="color: Blue;">title</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">content</span><span style="color: Gray;">.</span><span style="color: Blue;">set</span><span style="color: Olive;">(</span><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">content</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span><span style="color: #8b0000;">&quot;&quot;</span><span style="color: Olive;">))</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">except</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">info</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">无法打开文件!</span><span style="color: Navy;">\n</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">+</span><span style="color: Blue;">file</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">except</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">info</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">错误!请先初始化!</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;<br /></span><span style="color: Green;">def</span><span style="color: Gray;"> </span><span style="color: Blue;">save_diary</span><span style="color: Olive;">()</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">global</span><span style="color: Gray;"> </span><span style="color: Blue;">diary_root</span><span style="color: Gray;">,</span><span style="color: Blue;">title</span><span style="color: Gray;">,</span><span style="color: Blue;">content</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Blue;">title</span><span style="color: Gray;">!=</span><span style="color: #8b0000;">&quot;&quot;</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">content</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">()</span><span style="color: Gray;">!=</span><span style="color: #8b0000;">&quot;&quot;</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">result</span><span style="color: Gray;">={}<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">result</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">title</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">=</span><span style="color: Blue;">title</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">result</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">content</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">=</span><span style="color: Blue;">content</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">()</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">try</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">file</span><span style="color: Gray;">=</span><span style="color: Blue;">diary_root</span><span style="color: Gray;">+</span><span style="color: Blue;">time</span><span style="color: Gray;">.</span><span style="color: Blue;">strftime</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">%Y%m%d%H%S%M</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">+</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">.txt</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">f</span><span style="color: Gray;">=</span><span style="color: Teal;">open</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">w</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">f</span><span style="color: Gray;">.</span><span style="color: Blue;">write</span><span style="color: Olive;">(</span><span style="color: Teal;">repr</span><span style="color: Olive;">(</span><span style="color: Blue;">result</span><span style="color: Olive;">))</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">f</span><span style="color: Gray;">.</span><span style="color: Blue;">close</span><span style="color: Olive;">()</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">conf</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">保存成功!</span><span style="color: Navy;">\n</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">+</span><span style="color: Blue;">file</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">home_ui</span><span style="color: Olive;">()</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">except</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">info</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">保存失败!</span><span style="color: Navy;">\n</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">+</span><span style="color: Blue;">file</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">else</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">info</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">无法保存数据!</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;<br /></span><span style="color: Green;">def</span><span style="color: Gray;"> </span><span style="color: Blue;">write_ui</span><span style="color: Olive;">()</span><span style="color: Gray;">:<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">global</span><span style="color: Gray;"> </span><span style="color: Blue;">title</span><span style="color: Gray;">,</span><span style="color: Blue;">content</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">title_txt</span><span style="color: Gray;">=</span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">query</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">输入笔记标签:</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">text</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Blue;">title_txt</span><span style="color: Gray;"> :<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">content</span><span style="color: Gray;">.</span><span style="color: Blue;">set</span><span style="color: Olive;">(</span><span style="color: Blue;">u</span><span style="color: #8b0000;">''</span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">app</span><span style="color: Gray;">.</span><span style="color: Blue;">title</span><span style="color: Gray;">=</span><span style="color: Blue;">title_txt</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">title</span><span style="color: Gray;">=</span><span style="color: Blue;">title_txt</span><span style="color: Gray;"><br />&nbsp;<br /></span><span style="color: Blue;">app_lock</span><span style="color: Gray;"> = </span><span style="color: Blue;">e32</span><span style="color: Gray;">.</span><span style="color: Blue;">Ao_lock</span><span style="color: Olive;">()</span><span style="color: Gray;"><br /></span><span style="color: Blue;">home_ui</span><span style="color: Olive;">()</span><span style="color: Gray;"><br /></span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">app</span><span style="color: Gray;">.</span><span style="color: Blue;">screen</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">normal</span><span style="color: #8b0000;">'</span><span style="color: Gray;"><br /></span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">app</span><span style="color: Gray;">.</span><span style="color: Blue;">body</span><span style="color: Gray;"> = </span><span style="color: Blue;">content</span><span style="color: Gray;"><br /></span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">app</span><span style="color: Gray;">.</span><span style="color: Blue;">exit_key_handler</span><span style="color: Gray;"> = </span><span style="color: Blue;">quit</span><span style="color: Gray;">&nbsp; &nbsp;<br /></span><span style="color: Blue;">appuifw</span><span style="color: Gray;">.</span><span style="color: Blue;">app</span><span style="color: Gray;">.</span><span style="color: Blue;">menu</span><span style="color: Gray;"> = </span><span style="color: Olive;">[(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">添加行</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">addtext</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">写笔记</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">write_ui</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">保存</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">save_diary</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">读笔记</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">view_ui</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">初始化</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">init</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">关于</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">about_ui</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Olive;">(</span><span style="color: Blue;">mbstr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">退出</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">quit</span><span style="color: Olive;">)]</span><span style="color: Gray;"><br /></span><span style="color: Blue;">app_lock</span><span style="color: Gray;">.</span><span style="color: Blue;">wait</span><span style="color: Olive;">()</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://matthewgong.blog.ubuntu.org.cn/2008/01/29/python-on-s60/feed/</wfw:commentRss>
		</item>
		<item>
		<title>AUTO07p and OpenMP</title>
		<link>http://matthewgong.blog.ubuntu.org.cn/2007/12/12/auto07p-and-openmp/</link>
		<comments>http://matthewgong.blog.ubuntu.org.cn/2007/12/12/auto07p-and-openmp/#comments</comments>
		<pubDate>Wed, 12 Dec 2007 05:24:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://matthewgong.blog.ubuntu.org.cn/2007/12/12/auto07p-and-openmp/</guid>
		<description><![CDATA[AUTO工具包是我用来对飞行器大迎角特性进行分支分析的基础软件包。最近，我从AUTO2000版本更新到了AUTO07p版本。
这个版本有一下特点：
1. 计算核心程序是fortran编写的，而AUTO2000是使用f2c工具将AUTO97转换为C语言作为核心。可见经过多年实践，纯数学数值计算领域上，fortran还是有生命力的。
核心计算接口程序上提供了C、fortran、fortran90三种接口。当然，经过对源程序的修改，使用C＋＋作为接口也是易如反掌的。
2. 使用PYTHON作为交互式运行接口，将脚本语言的灵活与方便、以及快速开发的优点展现出来。
3. 使用coin3D库新开发了plaut04，这是一个3D显示分支曲面的后处理程序。这个是C＋＋开发的。
4. 核心程序支持OpenMP与MPI两种层次的并行开发技术。
程序默认支持OpenMP，而我原先编写的核心计算部分并不是线程安全的。当我意识到时，已经头疼了很久了。
最后，通过将程序改为线程安全，以及增加互斥锁的方式，终于可以成功运行！
现在，运行AUTO时，我的双核终于可以比翼齐飞了！
 
]]></description>
			<content:encoded><![CDATA[<p>AUTO工具包是我用来对飞行器大迎角特性进行分支分析的基础软件包。最近，我从AUTO2000版本更新到了AUTO07p版本。</p>
<p>这个版本有一下特点：<br />
1. 计算核心程序是fortran编写的，而AUTO2000是使用f2c工具将AUTO97转换为C语言作为核心。可见经过多年实践，纯数学数值计算领域上，fortran还是有生命力的。<br />
核心计算接口程序上提供了C、fortran、fortran90三种接口。当然，经过对源程序的修改，使用C＋＋作为接口也是易如反掌的。<br />
2. 使用PYTHON作为交互式运行接口，将脚本语言的灵活与方便、以及快速开发的优点展现出来。<br />
3. 使用coin3D库新开发了plaut04，这是一个3D显示分支曲面的后处理程序。这个是C＋＋开发的。<br />
4. 核心程序支持OpenMP与MPI两种层次的并行开发技术。</p>
<p>程序默认支持OpenMP，而我原先编写的核心计算部分并不是线程安全的。当我意识到时，已经头疼了很久了。<br />
最后，通过将程序改为线程安全，以及增加互斥锁的方式，终于可以成功运行！</p>
<p>现在，运行AUTO时，我的双核终于可以比翼齐飞了！<br />
 <img src="images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" /></p>
]]></content:encoded>
			<wfw:commentRss>http://matthewgong.blog.ubuntu.org.cn/2007/12/12/auto07p-and-openmp/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
