<?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>Shadow &#38; Honnix &#187; Python</title>
	<atom:link href="http://honnix.com/blog/archives/tag/python/feed" rel="self" type="application/rss+xml" />
	<link>http://honnix.com/blog</link>
	<description>she&#039;s growing up</description>
	<lastBuildDate>Sun, 15 Jan 2012 10:44:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>USB邮件提醒器</title>
		<link>http://honnix.com/blog/archives/559</link>
		<comments>http://honnix.com/blog/archives/559#comments</comments>
		<pubDate>Fri, 16 Apr 2010 15:23:54 +0000</pubDate>
		<dc:creator>honnix</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[libusb]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[pyusb]]></category>
		<category><![CDATA[USB notifier]]></category>
		<category><![CDATA[USB邮件提醒器]]></category>

		<guid isPermaLink="false">http://honnix.com/blog/?p=559</guid>
		<description><![CDATA[买了个山寨版的这个玩意儿，软件不爽，随即hack之。libusb+pyusb，搞定。不过Mac下面还不行，kernel的module直接claim设备，不知道怎么unclaim。 然后封装了一个简单的库： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53&#8230;]]></description>
			<content:encoded><![CDATA[<p>买了个山寨版的这个玩意儿，软件不爽，随即hack之。libusb+pyusb，搞定。不过Mac下面还不行，kernel的module直接claim设备，不知道怎么unclaim。</p>
<p>然后封装了一个简单的库：</p>

<div class="wp_codebox"><table><tr id="p5592"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
</pre></td><td class="code" id="p559code2"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">Queue</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">Queue</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">threading</span> <span style="color: #ff7700;font-weight:bold;">import</span> Thread
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> usb.<span style="color: black;">core</span>
<span style="color: #ff7700;font-weight:bold;">import</span> usb.<span style="color: black;">util</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Singleton<span style="color: black;">&#40;</span><span style="color: #008000;">type</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span>cls, name, bases, <span style="color: #008000;">dict</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">super</span><span style="color: black;">&#40;</span>Singleton, cls<span style="color: black;">&#41;</span>.<span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span>name, bases, <span style="color: #008000;">dict</span><span style="color: black;">&#41;</span>
        cls.<span style="color: black;">instance</span> = <span style="color: #008000;">None</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__call__</span><span style="color: black;">&#40;</span>cls, <span style="color: #66cc66;">*</span>args, <span style="color: #66cc66;">**</span>kw<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> cls.<span style="color: black;">instance</span> <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">None</span>:
            cls.<span style="color: black;">instance</span> = <span style="color: #008000;">super</span><span style="color: black;">&#40;</span>Singleton, cls<span style="color: black;">&#41;</span>.<span style="color: #0000cd;">__call__</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">*</span>args, <span style="color: #66cc66;">**</span>kw<span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">return</span> cls.<span style="color: black;">instance</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Lamp<span style="color: black;">&#40;</span><span style="color: #008000;">object</span><span style="color: black;">&#41;</span>:
    GREEN = 0x01
    RED = 0x02
    BLUE = 0x03
    PURPLE = 0x04
    X = 0x05
    Y = 0x06
    WHITE = 0x07
    __QUIT = -<span style="color: #ff4500;">1</span>
&nbsp;
    <span style="color: #0000cd;">__metaclass__</span> = Singleton
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">t</span> = <span style="color: #008000;">None</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">q</span> = <span style="color: #008000;">None</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">dev</span> = usb.<span style="color: black;">core</span>.<span style="color: black;">find</span><span style="color: black;">&#40;</span>idVendor = 0x1294, idProduct = 0x1320<span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">uname</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'Linux'</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">dev</span>.<span style="color: black;">detach_kernel_driver</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">dev</span>.<span style="color: black;">set_configuration</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> __worker<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        item = <span style="color: #008000;">self</span>.<span style="color: black;">q</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">while</span> item <span style="color: #66cc66;">!</span>= Lamp.__QUIT:
            <span style="color: #ff7700;font-weight:bold;">if</span> item <span style="color: #66cc66;">&amp;</span>gt<span style="color: #66cc66;">;</span>= Lamp.<span style="color: black;">GREEN</span> <span style="color: #ff7700;font-weight:bold;">and</span> item <span style="color: #66cc66;">&amp;</span>lt<span style="color: #66cc66;">;</span>= Lamp.<span style="color: black;">WHITE</span>:
                <span style="color: #ff7700;font-weight:bold;">print</span> item
                data = <span style="color: black;">&#40;</span>item, 0x04, 0x04, 0x04, 0x04<span style="color: black;">&#41;</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">dev</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>, data, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
&nbsp;
            <span style="color: #008000;">self</span>.<span style="color: black;">q</span>.<span style="color: black;">task_done</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            item = <span style="color: #008000;">self</span>.<span style="color: black;">q</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> plug<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">q</span> <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">None</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">q</span> = <span style="color: #dc143c;">Queue</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">t</span> = Thread<span style="color: black;">&#40;</span>target=<span style="color: #008000;">self</span>.__worker<span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">t</span>.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> unplug<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">q</span> <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">None</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">q</span>.<span style="color: black;">put</span><span style="color: black;">&#40;</span>Lamp.__QUIT<span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">t</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">q</span> = <span style="color: #008000;">None</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">t</span> = <span style="color: #008000;">None</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> on<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, color<span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">q</span>.<span style="color: black;">put</span><span style="color: black;">&#40;</span>color<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> off<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">q</span>.<span style="color: black;">put</span><span style="color: black;">&#40;</span>0x00<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
    lamp1 = Lamp<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    lamp2 = Lamp<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    lamp3 = Lamp<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    lamp1.<span style="color: black;">plug</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    lamp2.<span style="color: black;">plug</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    lamp3.<span style="color: black;">plug</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    lamp1.<span style="color: black;">on</span><span style="color: black;">&#40;</span>Lamp.<span style="color: black;">GREEN</span><span style="color: black;">&#41;</span>
    lamp1.<span style="color: black;">on</span><span style="color: black;">&#40;</span>Lamp.<span style="color: black;">RED</span><span style="color: black;">&#41;</span>
    lamp1.<span style="color: black;">on</span><span style="color: black;">&#40;</span>Lamp.<span style="color: black;">WHITE</span><span style="color: black;">&#41;</span>
    lamp1.<span style="color: black;">on</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span>
&nbsp;
    lamp1.<span style="color: black;">unplug</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    lamp2.<span style="color: black;">unplug</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    lamp3.<span style="color: black;">unplug</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>忘记还有其它什么颜色了，暂时用X、Y代替吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://honnix.com/blog/archives/559/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>处理flac和ape的过程</title>
		<link>http://honnix.com/blog/archives/333</link>
		<comments>http://honnix.com/blog/archives/333#comments</comments>
		<pubDate>Sun, 24 May 2009 05:50:01 +0000</pubDate>
		<dc:creator>honnix</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[id3]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[mutagen]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[shntools]]></category>

		<guid isPermaLink="false">http://honnix.com/blog/?p=333</guid>
		<description><![CDATA[Linux和Mac上差不多。有个shntool，可以根据cue文件将ape或者flac进行分割，同时可以读出cue里面的唱片名、作者、tracknumber之类的信息，但问题是这些信息不是很方便传给lame，所以就这样处理一下： shntool split -f $cue -t &#8216;%n&#8211;@%p&#8211;@%a&#8211;@%t&#8217; -o &#8216;cust ext=mp3 lame -b 320 -s 48 -quiet &#8211; %f&#8217; -d $dir $audio (简单来说，将信息放到文件名里) python ~/bin/id3.py $dir (这是个自己写的python程序，从文件名里分离所有的信息，然后写到mp3文件里，用到了一个python的module：mutagen) 这样就不需要在iTunes里面再手工写这些信息了，唯一还需要填一下的就是总的曲目数、唱片出版年份、唱片类型。]]></description>
			<content:encoded><![CDATA[<p>Linux和Mac上差不多。有个shntool，可以根据cue文件将ape或者flac进行分割，同时可以读出cue里面的唱片名、作者、tracknumber之类的信息，但问题是这些信息不是很方便传给lame，所以就这样处理一下：</p>
<ol>
<li>shntool split -f $cue -t &#8216;%n&#8211;@%p&#8211;@%a&#8211;@%t&#8217; -o &#8216;cust ext=mp3 lame -b 320 -s 48 -quiet &#8211; %f&#8217; -d $dir $audio (简单来说，将信息放到文件名里)</li>
<li>python ~/bin/id3.py $dir (这是个自己写的python程序，从文件名里分离所有的信息，然后写到mp3文件里，用到了一个python的module：mutagen)</li>
</ol>
<p>这样就不需要在iTunes里面再手工写这些信息了，唯一还需要填一下的就是总的曲目数、唱片出版年份、唱片类型。</p>
]]></content:encoded>
			<wfw:commentRss>http://honnix.com/blog/archives/333/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

