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

<channel>
	<title>程式設計 遇上 小提琴 &#187; Uncategorized</title>
	<atom:link href="http://blog.ez2learn.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ez2learn.com</link>
	<description>Victor&#039;s個人部落格，關於程式設計與小提琴</description>
	<lastBuildDate>Tue, 07 Feb 2012 03:26:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mr.DJ 2.0.3 Mac OS X版發佈</title>
		<link>http://blog.ez2learn.com/2011/02/01/mr-dj-2-0-3-mac-os-x-releas/</link>
		<comments>http://blog.ez2learn.com/2011/02/01/mr-dj-2-0-3-mac-os-x-releas/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 08:24:30 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Mr.DJ]]></category>
		<category><![CDATA[now.in]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=1209</guid>
		<description><![CDATA[Mr.DJ 2.0.3 Mac OS X版正式發佈 截圖 下載頁面]]></description>
			<content:encoded><![CDATA[<p>Mr.DJ 2.0.3 Mac OS X版正式發佈</p>
<p>截圖</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2011/02/螢幕快照-2011-02-01-下午4.20.04.png"><img class="alignnone size-medium wp-image-1210" title="Mr.DJ 2.0.3 Mac OS X版" src="http://blog.ez2learn.com/wp-content/uploads/2011/02/螢幕快照-2011-02-01-下午4.20.04-300x160.png" alt="Mr.DJ 2.0.3 Mac OS X版" width="300" height="160" /></a></p>
<p><a href="http://now.in/download">下載頁面</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2011/02/01/mr-dj-2-0-3-mac-os-x-releas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Build an online radio station within few minutes! : Now.in</title>
		<link>http://blog.ez2learn.com/2010/05/11/buil-an-online-radio-station-within-few-minutes-now-in/</link>
		<comments>http://blog.ez2learn.com/2010/05/11/buil-an-online-radio-station-within-few-minutes-now-in/#comments</comments>
		<pubDate>Tue, 11 May 2010 08:43:41 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[English Articles]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Broadcast]]></category>
		<category><![CDATA[Icecast]]></category>
		<category><![CDATA[Listener]]></category>
		<category><![CDATA[Online-radio]]></category>
		<category><![CDATA[radio]]></category>
		<category><![CDATA[Radio-station]]></category>
		<category><![CDATA[SHOUTCast]]></category>
		<category><![CDATA[Web-service]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=1039</guid>
		<description><![CDATA[An article introducing a new web2.0 service which provide the most easy to build an online radio station. <a href="http://blog.ez2learn.com/2010/05/11/buil-an-online-radio-station-within-few-minutes-now-in/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>URL:</p>
<p><a href="Build an online radio station within few minutes! : Now.in">http://blog.now.in/2010/05/11/build-an-online-radio-station-within-few-minutes-now-in/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2010/05/11/buil-an-online-radio-station-within-few-minutes-now-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>讓Python程式出錯時自動寄信給你</title>
		<link>http://blog.ez2learn.com/2010/03/29/python-error-mail-repor/</link>
		<comments>http://blog.ez2learn.com/2010/03/29/python-error-mail-repor/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 11:49:51 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[Error report]]></category>
		<category><![CDATA[Logging]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=979</guid>
		<description><![CDATA[我喜歡Python的原因之一就是它的標準函式庫把該有的東西幾乎都包進去了，像是ConfigParser用來讀取設定檔，而logging更是不可缺少的，用來記錄程式的訊息非常好用的函式庫，而且這些函式庫不是只是陽春的玩具，而是功能齊全的基礎，其中logging一個很棒的功能就是將錯誤訊息寄給你，因為通常錯誤發生雖然都可以寫到記錄檔中，但是你有多少時間會去翻記錄檔? 通常程式出錯了，你也不會有認何知覺，將錯誤訊息寄給你的好處就是，一有錯誤你就立刻可以知道，而且少見的錯誤也不會被漏掉，例如有人試圖攻擊你的伺服器，在這過程中如果伺服器發生錯誤會寄信給你，在他成功之前你可能就有機會發現，總之將錯誤訊息寄給自己是很有用的技巧 一個錯誤報告的例子 最棒的就是，要用此功能非常簡單，以下是一個簡單的範例: # -*- coding: utf8 -*- import logging import logging.handlers &#160; rootLogger = logging.getLogger&#40;''&#41; rootLogger.setLevel&#40;logging.ERROR&#41; handler = logging.handlers.SMTPHandler&#40; mailhost='smtp.example.com', fromaddr='marines@starcraft2.com', toaddrs='player@starcraft2.com', subject=&#34;Houston, We've Got a Problem&#34;, credentials=&#40;'username', 'password'&#41; &#41; rootLogger.addHandler&#40;handler&#41; &#160; log = logging.getLogger&#40;__name__&#41; log.fatal&#40;'HELP! We are &#8230; <a href="http://blog.ez2learn.com/2010/03/29/python-error-mail-repor/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>我喜歡Python的原因之一就是它的標準函式庫把該有的東西幾乎都包進去了，像是ConfigParser用來讀取設定檔，而logging更是不可缺少的，用來記錄程式的訊息非常好用的函式庫，而且這些函式庫不是只是陽春的玩具，而是功能齊全的基礎，其中logging一個很棒的功能就是將錯誤訊息寄給你，因為通常錯誤發生雖然都可以寫到記錄檔中，但是你有多少時間會去翻記錄檔? 通常程式出錯了，你也不會有認何知覺，將錯誤訊息寄給你的好處就是，一有錯誤你就立刻可以知道，而且少見的錯誤也不會被漏掉，例如有人試圖攻擊你的伺服器，在這過程中如果伺服器發生錯誤會寄信給你，在他成功之前你可能就有機會發現，總之將錯誤訊息寄給自己是很有用的技巧</p>
<p>一個錯誤報告的例子<br />
<a href="http://blog.ez2learn.com/wp-content/uploads/2010/03/error-report.png"><img class="alignnone size-full wp-image-980" title="error-report" src="http://blog.ez2learn.com/wp-content/uploads/2010/03/error-report.png" alt="" width="921" height="421" /></a></p>
<p>最棒的就是，要用此功能非常簡單，以下是一個簡單的範例:</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -*- coding: utf8 -*-</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">logging</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">logging</span>.<span style="color: black;">handlers</span>
&nbsp;
rootLogger = <span style="color: #dc143c;">logging</span>.<span style="color: black;">getLogger</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>
rootLogger.<span style="color: black;">setLevel</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">logging</span>.<span style="color: black;">ERROR</span><span style="color: black;">&#41;</span>
handler = <span style="color: #dc143c;">logging</span>.<span style="color: black;">handlers</span>.<span style="color: black;">SMTPHandler</span><span style="color: black;">&#40;</span>
    mailhost=<span style="color: #483d8b;">'smtp.example.com'</span>,
    fromaddr=<span style="color: #483d8b;">'marines@starcraft2.com'</span>,
    toaddrs=<span style="color: #483d8b;">'player@starcraft2.com'</span>,
    subject=<span style="color: #483d8b;">&quot;Houston, We've Got a Problem&quot;</span>,
    credentials=<span style="color: black;">&#40;</span><span style="color: #483d8b;">'username'</span>, <span style="color: #483d8b;">'password'</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#41;</span>
rootLogger.<span style="color: black;">addHandler</span><span style="color: black;">&#40;</span>handler<span style="color: black;">&#41;</span>
&nbsp;
log = <span style="color: #dc143c;">logging</span>.<span style="color: black;">getLogger</span><span style="color: black;">&#40;</span>__name__<span style="color: black;">&#41;</span>
log.<span style="color: black;">fatal</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'HELP! We are under attack!'</span><span style="color: black;">&#41;</span></pre></div></div>

<p></code></p>
<p>如果你的SMTP設定沒問題的話，以應該可以收到下面這樣的一封信</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2010/03/error-report2.png"><img class="alignnone size-full wp-image-982" title="error-report2" src="http://blog.ez2learn.com/wp-content/uploads/2010/03/error-report2.png" alt="" width="373" height="256" /></a></p>
<p>就是這麼簡單，這樣一來當你的程式出問題時，你再也不會沒有發覺了</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2010/03/29/python-error-mail-repor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>今夏必看國片: 夏天協奏曲</title>
		<link>http://blog.ez2learn.com/2009/08/30/summer-concerto/</link>
		<comments>http://blog.ez2learn.com/2009/08/30/summer-concerto/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 08:44:20 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[夏天協奏曲]]></category>
		<category><![CDATA[好片]]></category>
		<category><![CDATA[國片]]></category>
		<category><![CDATA[電影]]></category>
		<category><![CDATA[林逸欣]]></category>
		<category><![CDATA[沙拉]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=747</guid>
		<description><![CDATA[夏天協奏曲DM 夏天協奏曲預告片 昨天去看了在金門拍攝的電影第二場首映會 "夏日協奏曲"，人多到沒地方坐，只好坐在走道上，這部電影真的非常好看，把金門拍得非常美，名為協奏曲的電影，在音樂上做得也非常好，背景的音樂都很能帶出情境來，女主角沙拉作曲和唱的曲子也都非常動聽，鋼琴也彈得非常棒，我個人對於這部片有很高的評價，很多人常常說要支持國片，在我個人看來，不是所有國片都值得支持，食之無味的爛片支持再多也沒有任何幫助，如果拍片的人沒有心，再多的支持也只是浪費而已，但這部片確實是有笑有淚的好片，可以感受到導演的用心，這樣用心的好電影值得大家的支持 官方部落格 女主角沙拉的部落格]]></description>
			<content:encoded><![CDATA[<p>夏天協奏曲DM</p>
<div id="attachment_748" class="wp-caption alignnone" style="width: 222px"><a href="http://blog.ez2learn.com/wp-content/uploads/2009/08/4a75406fd3430.jpg"><img class="size-medium wp-image-748" title="夏天協奏曲" src="http://blog.ez2learn.com/wp-content/uploads/2009/08/4a75406fd3430-212x300.jpg" alt="夏天協奏曲DM" width="212" height="300" /></a><p class="wp-caption-text">夏天協奏曲DM</p></div>
<p>夏天協奏曲預告片</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/e7SoEqM8d0U&amp;hl=zh_TW&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/e7SoEqM8d0U&amp;hl=zh_TW&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>昨天去看了在金門拍攝的電影第二場首映會 "夏日協奏曲"，人多到沒地方坐，只好坐在走道上，這部電影真的非常好看，把金門拍得非常美，名為協奏曲的電影，在音樂上做得也非常好，背景的音樂都很能帶出情境來，女主角沙拉作曲和唱的曲子也都非常動聽，鋼琴也彈得非常棒，我個人對於這部片有很高的評價，很多人常常說要支持國片，在我個人看來，不是所有國片都值得支持，食之無味的爛片支持再多也沒有任何幫助，如果拍片的人沒有心，再多的支持也只是浪費而已，但這部片確實是有笑有淚的好片，可以感受到導演的用心，這樣用心的好電影值得大家的支持</p>
<h2><a href="http://shinetv.pixnet.net/blog/post/27794273">官方部落格</a></h2>
<h2><a href="http://www.wretch.cc/blog/shara/26451068">女主角沙拉的部落格</a></h2>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2009/08/30/summer-concerto/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Python的進步: ctypes</title>
		<link>http://blog.ez2learn.com/2009/03/21/python-evolution-ctypes/</link>
		<comments>http://blog.ez2learn.com/2009/03/21/python-evolution-ctypes/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 04:29:40 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=538</guid>
		<description><![CDATA[石器時代 在很久很久以前，想要擴充Python要使用API來包裝成Python可用的模組才可以，面對囉唆的一堆C API是一件痛苦的事，接著，進入了石器時代，人們開始使用工具，出現了SWIG、boost::python等，讓擴充Python變成一件更簡單的事情，但是即使是如此，這還是笨重的方法，產生了笨重的二進制檔，笨重的編譯工作，對於只是要將c語言的library擴充給Python使用而言這還不夠好，接著，終於有了進化，ctypes出現了，人們想說，與其做出pyd來給python使用這種多此一舉的事情，東西就在那裡，dll就在那裡，為何不能直接使用呢? ctypes的目的就是讓Python可以直接操做c語言寫的dll，這是一個大躍進，到了python2.5 ctypes還成為了標準的模組之一，這表示新的時代的到來 對ctypes的懷疑 相對於熟悉的事物，面對類似性質但是不同的事物時，總難免有多少疑惑，我在一開始也懷疑這樣能做到什麼地步? 但是在看了它的文件後我瞭解到，大部份dll使用ctypes都可以應用得很好，像是我擔心的callback，ctypes一樣可以提供方法來把python的函數包裝成c語言的callback丟給c語言的dll，運作得很好，其中我最擔心的是多緒的問題，因為有些callback是從其它thread呼叫的，因此如果沒考慮到multi-thread問題的話，callback就廢一半了，但是它一樣也考慮很週到，即使是從不同thread呼叫的python callback，也一樣可以運作得很好 舉個例子 DSPPROC = WINFUNCTYPE&#40;None, HDSP, DWORD, c_void_p, DWORD, c_void_p&#41; 在有了c語言函數的原形建立後，我們就可以使用它來包裝python的函數丟給c語言的dll處理 print BASS_Init&#40;-1, 44100, 0, 0, 0&#41; &#160; stream = BASS_StreamCreateFile&#40;False, 'c:\\god know.mp3', 0, 0, 0&#41; print stream &#160; def dspProc&#40;handle, channel, &#8230; <a href="http://blog.ez2learn.com/2009/03/21/python-evolution-ctypes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>石器時代</h2>
<p>在很久很久以前，想要擴充Python要使用API來包裝成Python可用的模組才可以，面對囉唆的一堆C API是一件痛苦的事，接著，進入了石器時代，人們開始使用工具，出現了SWIG、boost::python等，讓擴充Python變成一件更簡單的事情，但是即使是如此，這還是笨重的方法，產生了笨重的二進制檔，笨重的編譯工作，對於只是要將c語言的library擴充給Python使用而言這還不夠好，接著，終於有了進化，ctypes出現了，人們想說，與其做出pyd來給python使用這種多此一舉的事情，東西就在那裡，dll就在那裡，為何不能直接使用呢? ctypes的目的就是讓Python可以直接操做c語言寫的dll，這是一個大躍進，到了python2.5 ctypes還成為了標準的模組之一，這表示新的時代的到來</p>
<h2>對ctypes的懷疑</h2>
<p>相對於熟悉的事物，面對類似性質但是不同的事物時，總難免有多少疑惑，我在一開始也懷疑這樣能做到什麼地步? 但是在看了它的文件後我瞭解到，大部份dll使用ctypes都可以應用得很好，像是我擔心的callback，ctypes一樣可以提供方法來把python的函數包裝成c語言的callback丟給c語言的dll，運作得很好，其中我最擔心的是多緒的問題，因為有些callback是從其它thread呼叫的，因此如果沒考慮到multi-thread問題的話，callback就廢一半了，但是它一樣也考慮很週到，即使是從不同thread呼叫的python callback，也一樣可以運作得很好 舉個例子</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">DSPPROC = WINFUNCTYPE<span style="color: black;">&#40;</span><span style="color: #008000;">None</span>, HDSP, DWORD, c_void_p, DWORD, c_void_p<span style="color: black;">&#41;</span></pre></div></div>

<p>在有了c語言函數的原形建立後，我們就可以使用它來包裝python的函數丟給c語言的dll處理</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">print</span> BASS_Init<span style="color: black;">&#40;</span>-<span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">44100</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
&nbsp;
stream = BASS_StreamCreateFile<span style="color: black;">&#40;</span><span style="color: #008000;">False</span>, <span style="color: #483d8b;">'c:<span style="color: #000099; font-weight: bold;">\\</span>god know.mp3'</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> stream
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> dspProc<span style="color: black;">&#40;</span>handle, channel, buffer, length, <span style="color: #dc143c;">user</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> handle, channel, buffer, length, <span style="color: #dc143c;">user</span>
&nbsp;
cDspProc = DSPPROC<span style="color: black;">&#40;</span>dspProc<span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> BASS_ChannelSetDSP<span style="color: black;">&#40;</span>stream, cDspProc, <span style="color: #008000;">None</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
BASS_ChannelPlay<span style="color: black;">&#40;</span>stream, <span style="color: #008000;">False</span><span style="color: black;">&#41;</span>
<span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p><strong>值得注意的是，因為Python有reference counter，也就是說，當沒有變數指向某個物件時，那個物件可能就會被回收，因此如果我們這樣寫</strong></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">BASS_ChannelSetDSP<span style="color: black;">&#40;</span>stream, DSPPROC<span style="color: black;">&#40;</span>dspProc<span style="color: black;">&#41;</span>, <span style="color: #008000;">None</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Oops，恭喜你，你的程式很可能隨時會當掉，因為暫時的變數在被回收後，那塊記憶體就不再是c語言的函數，裡面可能塞了一些亂七八糟的東西，你的dll一呼叫那函數，遇到了些亂七八糟的東西會當掉也不是什麼奇怪的事，因此寫ctypes時，必須同時使用Python和C語言的觀點來看，舉另一個例子，如果某個C語言的API的文件上寫到，你傳進來的字串它不會copy，只會留著它的指標，在完成之前那個指標應該都還是要為有效的，這時，你就必須在python用一個變數一直保持著reference到產生出來的c語言字串記憶體空間，防止它被回收</p>
<p>除了callback以外，你可能會想到: "阿，那struct和union怎麼辦?" ，ctypes一樣有辦法，以下就是一個例子</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">class</span> BASS_INFO<span style="color: black;">&#40;</span>Structure<span style="color: black;">&#41;</span>:
    _fields_ = <span style="color: black;">&#91;</span>
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;flags&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;hwsize&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;hwfree&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;freesam&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;free3d&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;minrate&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;maxrate&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;eax&quot;</span>, BOOL<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;minbuf&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;dsver&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;latency&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;initflags&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;speakers&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
        <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;freq&quot;</span>, DWORD<span style="color: black;">&#41;</span>,
    <span style="color: black;">&#93;</span></pre></div></div>

<h2>下一個時代的進步</h2>
<p>人們總是覺得，事情還可以更好，事情只成功一半，用手寫ctypes是件很痛苦的事情，看著c語言的header檔複製、貼上、修改的無限迴圈，再也沒有比這個還無聊的事情，電腦的發明就是要解決問題，重覆性如此高和有規則的工作不應該浪費保貴的人力，因此，下一步就是c語言header的parser，理想的狀況是，可以自動parse c語言的header然後產生相對應的python ctypes寫的binding module，如果做到這個地步代表了什麼? 這意味著，Python能用的資源，從本來的常見module一下子突然擴大到了所有的c語言寫的library，這是多麼偉大的進步</p>
<h2>再也沒有什麼比實例更重要了</h2>
<p>我使用ctypes的目的在於寫BASS的python binding，<a href="http://www.un4seen.com/">BASS</a>是一套audio library，因為它沒提供Python的binding，所以我只好自己寫，在無聊的複製貼上過程中，我有試著想過寫parser來自動化完成我的工作，但是c語言的parser已經複雜到了一個地步，如果要寫出那樣的parser，會比我直接用手寫還來得麻煩，所以就沒有繼續研究</p>
<p>BASS binding運作得很好，有興趣的朋友可以參考看看</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2009/03/pybass.txt">pybass</a><br />
<a href="http://blog.ez2learn.com/wp-content/uploads/2009/03/pybassmix.txt">pybassmix</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2009/03/21/python-evolution-ctypes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>期待Spam comment</title>
		<link>http://blog.ez2learn.com/2008/10/03/spam-comment-0/</link>
		<comments>http://blog.ez2learn.com/2008/10/03/spam-comment-0/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 06:43:53 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[奇怪]]></category>
		<category><![CDATA[spam comment]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=68</guid>
		<description><![CDATA[期待 話說，我一直很期待有Spam comment進來，可是幾天過去了，spam comment還是0，真希望快點有spam comment出現，我真是奇怪 XD]]></description>
			<content:encoded><![CDATA[<h2>期待</h2>
<p>話說，我一直很期待有Spam comment進來，可是幾天過去了，spam comment還是0，真希望快點有spam comment出現，我真是奇怪 XD</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2008/10/03/spam-comment-0/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>2001年的Google頁面</title>
		<link>http://blog.ez2learn.com/2008/10/02/google-page-of-200/</link>
		<comments>http://blog.ez2learn.com/2008/10/02/google-page-of-200/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 17:22:42 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=40</guid>
		<description><![CDATA[七年過去了 七年過去了，Google已經從原本的搜尋引擎變成網路界的龍頭老大，還記得小學時參加查資料比賽，發現有Google這個搜尋引擎，又對它搜尋的速度和準確度感到驚訝 共費0.xx 秒 不起眼的小字在一旁卻讓人感到驚奇，其它入口網站的搜尋引擎，相較之下都對於做搜尋引擎起家的Google相形失色，還記得當年最常用首頁的是奇摩站(Kimo)，後來被Yahoo買走，時間過得真快，轉眼間Google已經成為網路的龍頭，為了記念Google十週年，他們還特地製作了刻複版的 http://www.google.com/search2001.html 有興趣可以懷念一下]]></description>
			<content:encoded><![CDATA[<p class="wp-caption">七年過去了</p>
<p>七年過去了，Google已經從原本的搜尋引擎變成網路界的龍頭老大，還記得小學時參加查資料比賽，發現有Google這個搜尋引擎，又對它搜尋的速度和準確度感到驚訝</p>
<blockquote><p>共費0.xx 秒</p></blockquote>
<p>不起眼的小字在一旁卻讓人感到驚奇，其它入口網站的搜尋引擎，相較之下都對於做搜尋引擎起家的Google相形失色，還記得當年最常用首頁的是奇摩站(Kimo)，後來被Yahoo買走，時間過得真快，轉眼間Google已經成為網路的龍頭，為了記念Google十週年，他們還特地製作了刻複版的</p>
<p><a href="http://www.google.com/search2001.html">http://www.google.com/search2001.html</a></p>
<p>有興趣可以懷念一下</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2008/10/02/google-page-of-200/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

