<?xml version="1.0" encoding="UTF-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en-US.UTF-8">
	<title>No Title</title>
	<link rel="alternate" type="text/html" href="http://www.kw-gift.com/blog/index.php" />
	<modified>2010-03-10T23:11:32Z</modified>
	<author>
		<name>crown.hg</name>
	</author>
	<copyright>Copyright 2010, crown.hg</copyright>
	<generator url="http://www.sourceforge.net/projects/sphpblog" version="0.5.1">SPHPBLOG</generator>
	<entry>
		<title>安装chromium 5解决库依赖问题</title>
		<link rel="alternate" type="text/html" href="http://www.kw-gift.com/blog/index.php?entry=entry100305-101413" />
		<content type="text/html" mode="escaped"><![CDATA[最新的archlinux软件包升级到了linpng14，这对依赖libpng12库的部分应用程式来讲，可能会出现linpng12.so.0无法截入的问题。<br />解决方法也很简单，作一个库文件的软连接即可，如下：<br />ln -s /usr/lib/libpng14.so /usr/lib/libpng12.so<br /><br />安装chromium 5最新版时，最好同时升级相关依赖包，如下：<br />pacman -Sy libpng libjpeg libzip gtk2 chromium<br /><br />附：笔记所用的E16先在升级libpng14后出现了问题，解决方法如下：<br />pacman -S imlib2<br /><br />]]></content>
		<id>http://www.kw-gift.com/blog/index.php?entry=entry100305-101413</id>
		<issued>2010-03-05T00:00:00Z</issued>
		<modified>2010-03-05T00:00:00Z</modified>
	</entry>
	<entry>
		<title>用xdm-archlinux来作你的登录管理器</title>
		<link rel="alternate" type="text/html" href="http://www.kw-gift.com/blog/index.php?entry=entry100226-115441" />
		<content type="text/html" mode="escaped"><![CDATA[linux的配置文件/etc/inittab控制着linux的运行等级，archlinux默认的运行等级为3,即多用户系统控制台登录，当把运行等级切换到5的时候，则运行等级为X11系统窗口登录，archlinux默认的窗口管理器为XDM。<br /><br />在gnome,kde等主流X11系统越来越庞大，性能越来越低时，精巧的窗口管理器如TWM，FVWM，OPENBOX,E16等配合XDM应该是个不错的选择。<br /><br />现在就开始行动吧：<br /><br />1、安装xdm和archlinux的xdm方案<br />pacman -Sy xdm-archlinux<br />2、更新/etc/inittab,修改默认运行等级3到5<br />id:5:initdefault:<br />3、更新/etc/inittab,增加archlinux的xdm方案<br />x:5:respawn:/usr/bin/xdm -nodaemon -config /etc/X11/xdm/archlinux/xdm-config<br /><br />现在重启，即可以看到带有archliux logo的清爽简洁的登录界面了吧。<br /><br />Archlinux 登录管理器设置请参见<a href="http://wiki.archlinux.org/index.php/Display_Manager" target="_blank" >Wiki Display Manager</a>]]></content>
		<id>http://www.kw-gift.com/blog/index.php?entry=entry100226-115441</id>
		<issued>2010-02-26T00:00:00Z</issued>
		<modified>2010-02-26T00:00:00Z</modified>
	</entry>
	<entry>
		<title>netcfg2配合dhcpd自动无线有线配置</title>
		<link rel="alternate" type="text/html" href="http://www.kw-gift.com/blog/index.php?entry=entry100225-212204" />
		<content type="text/html" mode="escaped"><![CDATA[自动无线网络功能所需软件包：<br />pacman -S wpa_wpa_actiond<br />自动有线网络功能所需软件包：<br />pacman -S ifplugd<br /><br />更新/etc/rc.conf<br />添加<br />WIRELESS_INTERFACE=&quot;wlan0&quot;<br />wlan0为你的无线网络接口<br />添加<br />WIRED_INTERFACE=&quot;eth0&quot;<br />eth0为你的有线网线接口<br /><br />添加net-auto-wireless net-auto-wired到DAEMONS=()数组，<br />移除net-profiles network<br /><br />现在复制/etc/network.d/examples/下的带dhcp配置文件到../下即可，如：<br />cp /etc/network.d/examples/ethernet-dhcp wireless-open ../<br />若你的无线essid和无线认证方法和wireless-open不同，只需复制不同的样板文件并更改文件中的essid和key的值即可。<br /><br /><a href="http://www.archlinux.org/news/487/" target="_blank" >netcfg v2.5.2 -note change in auto wireless config</a><br /><a href="http://wiki.archlinux.org/index.php/Network_Profiles" target="_blank" >Wiki Network Profiles</a>]]></content>
		<id>http://www.kw-gift.com/blog/index.php?entry=entry100225-212204</id>
		<issued>2010-02-25T00:00:00Z</issued>
		<modified>2010-02-25T00:00:00Z</modified>
	</entry>
	<entry>
		<title>rs690m hardware 3D acceleration</title>
		<link rel="alternate" type="text/html" href="http://www.kw-gift.com/blog/index.php?entry=entry091224-112403" />
		<content type="text/html" mode="escaped"><![CDATA[检查是否启用3D硬件加速。<br /><pre><code>glxinfo | grep OpenGL</code></pre><br />命今输出结果如下：<br />若为<pre><code>OpenGL renderer string: Software Rasterizer</code></pre>则是软件加速。<br />若为<pre><code>OpenGL renderer string: Mesa DRI R300 (RS690 791F) 20090101 NO-TCL</code></pre>则是硬件加速。<br /><br />自kernel 2.6.31一来，内核archlinux 内核默认开启了kms，以致rs690硬件加速失败，只要关闭kms即可。<br />关闭kms的方法是在 menu.lst kernel 一项中增加 nomodeset 参数后重启机。<br /><br />相关参考请见：<a href="http://www.kw-gift.com/blog/index.php?entry=entry091011-150312" target="_blank" >kernel 2.6.31 KMS</a>]]></content>
		<id>http://www.kw-gift.com/blog/index.php?entry=entry091224-112403</id>
		<issued>2009-12-24T00:00:00Z</issued>
		<modified>2009-12-24T00:00:00Z</modified>
	</entry>
	<entry>
		<title>编译perl6</title>
		<link rel="alternate" type="text/html" href="http://www.kw-gift.com/blog/index.php?entry=entry091115-222044" />
		<content type="text/html" mode="escaped"><![CDATA[环境archlinux<br />编译PERL6步骤：<br />1、安装gun c开发环境<br />  sudo pacman -S base-devel glibc<br />2、安装parrot VM<br />  sudo pacman -S parrot<br />然后<a href="http://github.com/rakudo/rakudo/downloads" target="_blank" >下截Rakudo</a>包,按<a href="http://rakudo.org/how-to-get-rakudo" target="_blank" >官方安装手册</a>，解压缩源码包后，<br />$ cd rakudo<br />$ perl Configure.pl --gen-parrot<br />$ make<br />$ sudo make install<br /><br />测试安装结果：<br />$perl6 -e &#039;say &quot;hello world!&quot;&#039;<br />输出hello world!<br />安装成功。]]></content>
		<id>http://www.kw-gift.com/blog/index.php?entry=entry091115-222044</id>
		<issued>2009-11-15T00:00:00Z</issued>
		<modified>2009-11-15T00:00:00Z</modified>
	</entry>
	<entry>
		<title>新版的内核加截多合一读卡器太方便了</title>
		<link rel="alternate" type="text/html" href="http://www.kw-gift.com/blog/index.php?entry=entry091109-104846" />
		<content type="text/html" mode="escaped"><![CDATA[插入MMC／SD卡后。<br />dmesg |tail<br /><br />sd 6:0:0:0: Attached scsi generic sg2 type 0<br />usb-storage: device scan complete<br />sd 6:0:0:0: [sdb] 1990656 512-byte logical blocks: (1.01 GB/972 MiB)<br />sd 6:0:0:0: [sdb] Write Protect is off<br />sd 6:0:0:0: [sdb] Mode Sense: 03 00 00 00<br />sd 6:0:0:0: [sdb] Assuming drive cache: write through<br />sd 6:0:0:0: [sdb] Assuming drive cache: write through<br /> sdb: sdb1<br />sd 6:0:0:0: [sdb] Assuming drive cache: write through<br />sd 6:0:0:0: [sdb] Attached SCSI removable disk<br /><br />看到了没有，[sdb] Attached SCSI removable disk，指明sdb为你的node标识，具体点来讲，你的卡对应的node是sdb:sdb1，即sdb1<br /><br />sudo mkdir /mnt/sdb<br />sudo mount -t vfat /dev/sdb1 /mnt/sdb<br /><br />现在你已经可以在/mnt/sdb目录使用你卡中的文件了。<br />取出卡前，最好是先sudo umount /mnt/sdb1。<br /><br />取出卡后，<br />dmesg|tail<br /> usb 1-9: USB disconnect, address 6<br />看到没，disconnect.<br /><br />本人环境：<br />uname -a<br /><br />Linux localhost 2.6.31-ARCH #1 SMP PREEMPT Fri Oct 23 10:03:24 CEST 2009 x86_64 AMD Athlon(tm) Processor TF-20 AuthenticAMD GNU/Linux<br /><br />若用kernel 2.6.30以前内核的用户，可以参阅本人的另一篇笔记 <a href="http://www.kw-gift.com/blog/index.php?m=05&amp;y=07&amp;d=02&amp;entry=entry070502-235528" >archlinux 启用读卡器</a><br /><br />]]></content>
		<id>http://www.kw-gift.com/blog/index.php?entry=entry091109-104846</id>
		<issued>2009-11-09T00:00:00Z</issued>
		<modified>2009-11-09T00:00:00Z</modified>
	</entry>
	<entry>
		<title>认识python的抽象类abc</title>
		<link rel="alternate" type="text/html" href="http://www.kw-gift.com/blog/index.php?entry=entry091020-100740" />
		<content type="text/html" mode="escaped"><![CDATA[抽象类经常被描述为&quot;不能实例化的类&quot;。这个定义本身没错－－在实现层次上。但局限性太大了。在概念层次上定义抽象类会更有帮助。在概念层次（实现抽象类所代表的概念），抽象类就是其他类的占位符。<br />也就是说，抽象类为我们提供了一种方法，能够给一组相关的类赋予一个名字。这使我们能够将这一组相关类看成一个概念。<br /><br />可以使用抽象类定义其派生类必须实现的方法。抽象类还可以包含所有派生类都能够使用的公共方法。派生类是便用抽象类的默认行为还是使用自已有所变化的使为，由派生类自已决定，即对象自已负责自已。<br /><br />自python2.6版起，引入了抽象类，通过metaclass=abc.ABCMeta来实现抽象定的定义。<br />即然抽象类是占位符，那么结合pthon3的方法签名，可以为随后其具体化提供进一步帮助。<br /><br />格式，定义抽象类Server,包含两个属性（host,port）,一个方法（startup）。<br /><pre><code><br />#!/usr/bin/env python3<br /><br />import abc<br /><br />class Server(metaclass = abc.ABCMeta):<br /><br />    def __init__(self, host:str = &#039;localhost&#039;, port:int = 8080):<br />        self.__host = host<br />        self.__port = port<br /><br />    @abc.abstractproperty<br />    def host(self)-&gt;str:<br />        return self.__host<br /><br />    @abc.abstractproperty<br />    def port(self)-&gt;int:<br />        return self.__port<br /><br />    @abc.abstractmethod<br />    def startup(self, handler:object):<br />        &#039;&#039;&#039; startup server handler&#039;&#039;&#039;<br />        pass<br /></code></pre><br />测试抽象类，占位符作用（即不能被实例化）<br /><pre></code><br />&gt;&gt;&gt; Server()<br />Traceback (most recent call last):<br />  File &quot;&lt;pyshell#7&gt;&quot;, line 1, in &lt;module&gt;<br />    Server()<br />TypeError: Can&#039;t instantiate abstract class Server with abstract methods host, port, startup<br /></code></pre><br />知识点:python的抽象类的属性和方法是通过abc模块函数abc.abstractpropety,和abc.abstractmethod,来实现的，需要注意的是abc.abstractpropety和python2.6起用的新类propety装饰符使用方法类似。以上例子定义的属性是只读属性。<br /><br />下面我们来具体化一个Server抽象类,具体化即是实现抽象类所定义的属性和方法。<br /><pre></code><br />class WSGIRefServer(Server):<br />    &#039;&#039;&#039; WSGIRefServer concrete class Server&#039;&#039;&#039;<br /><br />    def __init__(self, host:str = &#039;localhost&#039;, port:int = 8080):<br />        self.__host = host<br />        self.__port = port<br /><br />    def __get_host(self)-&gt;str:<br />        return self.__host<br />    def __set_host(self, host:str)-&gt;str:<br />        self.__host = host<br />        return self.__get_host()<br /><br />    def __get_port(self)-&gt;int:<br />        return self.__port<br />    def __set_port(self, port:int)-&gt;int:<br />        self.__port = port<br />        return self.__get_port()<br /><br />    def startup(self, handler:object):<br />        &#039;&#039;&#039; startup server handler&#039;&#039;&#039;<br />        from wsgiref.simple_server import make_server<br />        serve = make_server(self.__host, self.__port, handler)<br />        serve.serve_forever()<br /><br /><br />    host = property(__get_host, __set_host, doc=&#039;host:str = &quot;localhost&quot; ip addr or host name&#039;)<br />    port = property(__get_port, __set_port, doc=&#039;port:int = 8080 listen port&#039;)<br /><br /></code></pre><br />具体化抽象类，即必须定现抽象类所定义的全部抽象方法和抽象属性，具体化的同时可以继承抽象类的公用方法，也可以增加自已的新方法，新属生。<br />怎样继承抽象类的公用方法，可以在抽象类中用classmethod装饰符来装饰一个方法为会用方法。<br />测试抽象类的具体化类：<br /><pre></code><br />&gt;&gt;&gt; assert(issubclass(CGIServer, Server))<br />&gt;&gt;&gt; assert(isinstance(CGIServer(), Server))<br /></code></pre><br /><br />具体化类实列的属性读写测试：<br /><pre><code><br />&gt;&gt;&gt; s = CGIServer()<br />&gt;&gt;&gt; s.host<br />&#039;localhost&#039;<br />&gt;&gt;&gt; s.host = &#039;127.0.0.1&#039;<br />&gt;&gt;&gt; s.host<br />&#039;127.0.0.1&#039;<br /></code></pre><br /><br />知识点：python3的abc,所定义的只读abstractpropety，可以在具体化是实现读，写，删。可能这是个小小的BUG。python的abc,是不能具体化类的.__call__方法的，这一点可以看abc的源码。]]></content>
		<id>http://www.kw-gift.com/blog/index.php?entry=entry091020-100740</id>
		<issued>2009-10-20T00:00:00Z</issued>
		<modified>2009-10-20T00:00:00Z</modified>
	</entry>
	<entry>
		<title>python运算符复习之or not str in sequence 和 or str not in sequence</title>
		<link rel="alternate" type="text/html" href="http://www.kw-gift.com/blog/index.php?entry=entry091015-212841" />
		<content type="text/html" mode="escaped"><![CDATA[python的数据类型定义序列类(sequence)型包含(str,bytes, bytearray, list,tuple,range),<br />sequence类型都可以用for语句进行iter，可以用in,not in成员运算符进行成员归属测试，以测试某成员是否属于该序列，成员运算符返回布尔值，以便进行值比较运算。<br /><br />python的布尔运算符有(or, and, not)三种。<pre><code><br />在python中可以得到布尔值的运算符刚有如下几类，<br />1、比较运算符（&lt;,&lt;=,==,!=,&gt;=,&gt;）<br />2、等同性运算符（is, is not）<br />3、成员运算符（in, not is）<br />4、布尔运算符（not, and, or）</code></pre><br />除此外，同c语言一样，非零即真，这里的零指的是数字0、None、空sequence。<br />按python运算优化级顺序，以上可以得到布尔值的运算值1~4,是按从最低到最高顺序，这里不讨论括号要以变理表达式运算顺序内容。<br /><br />布尔运算符or 又称之为断运算符，如：<pre><code><br />&gt;&gt;&gt; a, b = 1, 2<br />&gt;&gt;&gt; a or b<br /> 1<br />&gt;&gt;&gt; a, b = 0, 2<br />&gt;&gt;&gt; a or b<br /> 2</code></pre><br /><br />在知得了布尔运算符or的逻辑后，进阶学习，如：<pre><code><br />&gt;&gt;&gt; s, ss, sss = &#039;a&#039;, &#039;ab&#039;, &#039;bcd&#039;<br />&gt;&gt;&gt; s in ss<br /> True<br />&gt;&gt;&gt; not s in ss<br /> False<br />&gt;&gt;&gt; not s in ss or True<br /> True<br />&gt;&gt;&gt; not s in ss or s in ss<br /> True<br />&gt;&gt;&gt; s not in ss<br /> False<br />&gt;&gt;&gt; s not in ss or s in ss<br /> True<br />&gt;&gt;&gt; s not in ss or not s in ss<br /> False<br />&gt;&gt;&gt; s not in ss or s not in ss<br /> False<br /><br />&gt;&gt;&gt; s not in sss<br /> True<br />&gt;&gt;&gt; s  in  sss<br /> False<br />&gt;&gt;&gt; s in sss or s not in sss<br /> True<br />&gt;&gt;&gt; s in sss or not s in sss<br /> True<br />&gt;&gt;&gt; s in sss or not s<br /> False<br />&gt;&gt;&gt; s in sss or not s in sss<br /> True<br />&gt;&gt;&gt; s in sss or not s not in sss<br /> False<br /><br /><br />&gt;&gt;&gt; s in sss or s in ss<br /> True<br />&gt;&gt;&gt; s in sss or not s in ss<br /> False<br />&gt;&gt;&gt; s in sss or not s in ss or s in sss<br /> True<br />&gt;&gt;&gt; s in sss or not s in ss or not s in sss<br /> False</code></pre><br /><br />是不是对or not str in sequence 和 or str not in sequence的认识更加深刻了！：）<br />作为练习，请看代码心算一下输出结果，<pre><code><br />&gt;&gt;&gt; s in sss or s not is ss or not s in sss<br /> ?<br />&gt;&gt;&gt; s in sss or s in ss or not s in ss<br /> ?</code></pre>]]></content>
		<id>http://www.kw-gift.com/blog/index.php?entry=entry091015-212841</id>
		<issued>2009-10-15T00:00:00Z</issued>
		<modified>2009-10-15T00:00:00Z</modified>
	</entry>
	<entry>
		<title>archlinux kernel 2.6.31 已正式在源中发布</title>
		<link rel="alternate" type="text/html" href="http://www.kw-gift.com/blog/index.php?entry=entry091011-150312" />
		<content type="text/html" mode="escaped"><![CDATA[新版的linux kernel 2.6.31已包含R600 系列显卡 KMS 及开源 3D 加速支持，最新版的kernel出发布在archlinux的源中。期待已久的新内核，现在最一时间升级。<br />需要注意的是源中的kernel kms只支持ati 必较新的 r5xx及以上系列显卡，如果你的显卡非r5xx以上显示，新内核会令系统无法启动，如花屏，键盘失去响应等，解决方法是在 menu.lst kernel 一项中增加 nomodeset 参数.<br /><br />相关参考：<br /><a href="http://linuxtoy.org/archives/kernel-2632-will-has-kms-and-oss-3d-for-r600.html" target="_blank" >kernel 26.31 包含R600系列显卡KMS及开源3D加速支持</a><br /><a href="http://wiki.archlinux.org/index.php/ATI_%E9%A9%B1%E5%8A%A8%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29" target="_blank" >archlinux wiki ATI 驱动安装配置</a><br />]]></content>
		<id>http://www.kw-gift.com/blog/index.php?entry=entry091011-150312</id>
		<issued>2009-10-11T00:00:00Z</issued>
		<modified>2009-10-11T00:00:00Z</modified>
	</entry>
	<entry>
		<title>我也来秀透桌面</title>
		<link rel="alternate" type="text/html" href="http://www.kw-gift.com/blog/index.php?entry=entry091007-173712" />
		<content type="text/html" mode="escaped"><![CDATA[这个干净清爽的桌面环境，作为老鸟的你是否似曾相识呢？<br /><img src="images/shot_07-10-09_170446.jpg" width="500" height="375" border="0" alt="" />]]></content>
		<id>http://www.kw-gift.com/blog/index.php?entry=entry091007-173712</id>
		<issued>2009-10-07T00:00:00Z</issued>
		<modified>2009-10-07T00:00:00Z</modified>
	</entry>
</feed>
