Wednesday, March 4, 2015

Python学习笔记之subprocess

Python提供了一个库,subprocess,可以很方便地启动一个子进程并与之交互。

最简单的使用方式是:
subprocess.call(args),其中的args是a list of strings,args[0]是调用的程序路径,其后均为参数。call会阻塞直到子进程结束。call的返回值是子进程的返回值。这个函数与C的system很相似。

subprocess.check_output(args)与call相似,不过它会把子进程的输出作为一个bytestring返回

这个库最强大的函数是Popen,它其实是一个类的Constructer,完整形式是:
subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

args与上文相同,不过这个调用不会阻塞当前进程,stdin,stdout,stderr可以是一个打开的file,或者是subprocess.PIPE,如果是PIPE,父进程可以用xxx.stdin/stderr/stdout与子进程通信。

其实呢,上述这些函数都是C的fork和execve的包装,它们大大简化了编程。如果要在C下实现Popen的功能,父进程需要现用pipe获得一个管道,然后fork,在子进程中关闭管道写端,用dup2重定向管道到stdin,接着execve,在父进程中需要关闭管道读端,然后向子进程输入数据,这些代码少说也要个5行。

现在觉得Python的官方库文档已经很完善了,而且不要翻墙,以后估计就不再写官方库的学习笔记了

Wednesday, February 25, 2015

Openwrt配置6in4

美国一家ISP, Hurricane Electric提供免费的IPv6接入的服务,叫做Tunnel Broker, 这个服务使用了6in4转换机制。用户只需要在网站注册,就可以申请免费的6in4隧道。不过有一个限制是Endpoint必须有公网IP。

对于刷好Openwrt Barrier Breaker的路由器,只需要简单的操作就可以实现6in4

1. 在tunnelbroker上申请一个隧道,申请时可以选择ping延迟最低服务节点。申请成功后会获得一个页面,里面有配置6in4的全部信息。

2.在Openwrt中新建一个Interface,名称为henet,选择Protocol为6in4,如果没有这个选项,请安装luci-proto-ipv6,6in4软件包,点击Sumbit

3.修改将tunnelbroker上的信息填入henet的配置中,具体可以参考http://wiki.openwrt.org/doc/uci/network#protocol_6to4_ipv6-in-ipv4_tunnel如果你的公网IP会变化,需要勾选,并填写一些信息,Update Key可以在Tunnel Details页面的Advanced选项中看到。

4.将henet的firewall zone设置为wan。

5. 在/etc/config/firewall下添加:
    config rule
    option src 'wan'
    option target 'ACCEPT'
    option proto '41'


6.修改/etc/config/network,在lan下添加option ip6addr,其后地址可以从Routed /64中任选一个。

重新启动路由器,并且刷新本机的DHCP,就可以获得一个公网IPV6地址了。测试网址http://test-ipv6.com/

不过,由于中国内并没有服务节点,最近的节点延迟也有100ms+,加之国际出口带宽有限,这种方式获得的IPv6质量很不好。

Sunday, February 22, 2015

Openwrt配置WLAN漫游

Update:

802.11f was deprecated. The new kid in town is 802.11r. OpenWrt 21.02 supports 802.11r. Here is a post on how to enable it.

家里有两台无线路由,都以AP的形式接入LAN。而我希望做的是能让无线设备在两个AP中选择信号最好的接入,并且实现漫游。

我所在大学的无线网络支持在同一个AC下漫游,因为学校采用的是H3C的解决方案,他们的私有技术可以支持接入点的快速切换。而我家中的路由一个是ralink的方案,一个是atheros的方案,不过它们都刷了OpenWrt系统。上网搜索后发现802.11协议只支持由客户端(比如手机)发起的切换。与GSM的handover不同,802.11的handover必须先断开链接,再建立新的链接。

要实现漫游,只需要把两个接入点的SSID,加密方式(我使用WPA2-PSK-CCMP)和密钥保持一致,两个AP使用不重叠的信道。

此外,还有一个802.11f协议,用于支持不同厂商AP之间的通信。要在Openwrt上开启这个协议,只需要在/etc/config/wireless里面增加一个 iapp_interface 字段,可以参考这个wiki.

应用这些设置后,我的小米手机可以自动在两个接入点中漫游,切换延迟大约半秒。

Tuesday, July 29, 2014

暂时弃用Gnome3,转投Mate

最近发现笔记本电脑发热量惊人,有时甚至引发CPU过热警告。电池使用时间也大大缩短。查看了一下进程,发现gnome-shell的CPU使用量相当高,尤其在播放视频的时候,甚至超过Chrome浏览器。我尝试禁用所有extensions,甚至创建一个全新的用户,都没有改善。

我是一个忠实的Gnome用户,Gnome 3.0发布后很快就适应了它一致的、优雅的界面。现在,Gnome已经升级到了3.10,虽然增加了功能(我几乎没有用到,比如说什么online accounts),但是bug也越来越多。有很多用户反映CPU占用高,内存泄漏,经常崩溃。有人猜测问题处在Gnome和显卡驱动的接口上(Intel显卡用户反映的问题比Nvidia用户多)。不过我没有找到有效的解决方案。

所以,唯一的选择就是换一个Desktop Manager。因为是Gnome的老用户,故选择了Mate,这是一个由Linuxmint主导的Gnome2的分支。虽然没有了那些窗口阴影,Overview等特效,Mate对资源的需求很低,目前也没有遇到崩溃的情况。唯一不足是有几个程序(比如Virtualbox)的外观变得很难看。

估计要等Fedora21出来后才会再试一下Gnome3了。

2015年2月4日更新:

Fedora21推出后,本人又投入了Gnome的怀抱。 目前没有发现CPU占用率过高的情况。不过Gnome真心变得臃肿了。

Wednesday, May 14, 2014

Lenovo Miix2 8使用手记

因为在学校念书,很多时候都要使用到电脑。最初我用的是Thinkpad E40,后来嫌重换成了一台二手T420s。使用半年后依然感觉不够便携。于是在五月初入手联想Miix2-8(64GB版),入手价格2400大洋,没有任何赠品。自己花钱买了个硅胶套(自己原来的昂达V812就是摔地上屏幕碎了)。

和Surface Pro相比,Miix2的最大 Miix2还会遇到关机后不能正常断电,导致不能开机,这个时候需要强制关机。因为Miix2本身待机功耗很低,因此不建议经常关机。优势就是轻薄和便宜,相应的代价就是性能一般——带不动什么大型游戏,不过看个网页和文档不成任何问题。X86架构能达到这个水平已经很不错了。Miix2内置了17Wh的电池,看网页的话6~7小时不成问题。

这款平板是搭载特别优化的Win8.1,不建议升级到Win8.1专业版,电源管理上会出一些问题。Win8.1在触摸设备上的体验还是不错的。与Android、iOS设备相比,Windows平台最大缺陷是应用数量不多,质量欠佳。Bug也是存在的,比如一些在线音乐软件在锁屏后不能继续播放,解锁时卡住等等。一个最恼火的Bug是这个Windows平板竟然不能和我的Lumia520连接,无论是USB还是蓝牙。驱动总是会出现问题,即使恢复系统也不行。还好,作为X86平板,Windows还提供了传统界面,能运行标准的Win32程序。不过,由于传统界面没有对触摸设备优化,有些操作必须使用鼠标。这里需要赞一下预装的Office,兼容性很好,毕竟是微软自家的。

关于屏幕。Miix屏幕分辨率1280x800,不算高,但是颗粒感也不强,亮度很高,可视角也很大,就是16:9的比例不是太习惯。个人觉得触摸有点敏感,经常容易按错。

关于UEFI和Secure Boot。Miix2只支持UEFI启动,默认启用Secure Boot,可以关闭。需要注意的是,BitLocker加密密钥是存在TPM芯片里面的,关闭Secure Boot后需要手动输入一次加密密钥。目前只有Win8完全支持UEFI启动。我也尝试使用U盘启动Clonezilla。可以正常引导,不过会出现kernel panic。也尝试了Android-IA,无法引导。

关于同步。Windows内置了OneDrive,只要用Microsoft帐号登录就可以获得免费空间。不过OneDrive的访问速度实在慢——上传速度还行,下载只有每秒十几KB,简直鸡肋。因此我选择了用Dropbox同步,虽然空间小了些,不过可用性大大提升,而且支持Linux平台(貌似最近连接会被干扰哦)。当然,也可以使用国内的云存储服务,比如百度云,金山快盘,115等等。

我购买的64GB版的Miix2,目前实际可用空间约25GB。Windows还是很占空间的。因此不推荐购买32GB版本。

关于充电。与Surface不同,Miix2没有专门的充电接口,而是使用MicroUSB口充电。它配套的充电器比较特别,充电电流2A,电压5.2V,可以在大约3小时充满。如果使用标准的5V电源适配器,或者在充电时使用平板,充电速率会大大降低,甚至会越充越少。

关于接口。Miix2只提供了一个支持USBOTG的MicroUSB接口,一个麦克风耳机复合接口(苹果标准),以及一个TF卡插槽。3G版还有一个SIM卡插槽。没有HDMI,也没有标准USB口(可以拆开增加一个)。我比较担心唯一的MicroUSB会因为插拔过多而松动。

总的来说,Miix2-8还是一款不错的平板,价格低于iPad。凭借其搭载的Intel处理器和Windows操作系统和Office套件可以提供一个高效稳定的生产环境。因此,如果你期望的平板用途是看PDF,PPT,网购,看新闻,Miix2是个不错的选择。

7月29日新增:

Miix2 8会遇到触摸屏失去响应的情况,原因触摸屏驱动存在Bug,会导致不能解锁,需要强制关机。可以临时用OTG线连一个鼠标。几天前放出了一个新版触摸屏驱动,失去响应的频率降低了,但是依然会发生。

Miix2还会遇到关机后不能正常断电,导致不能开机,这个时候需要强制关机。因为Miix2本身待机功耗很低,因此不建议经常关机。

2015年2月4日更新:

Miix2 8触摸屏经常失去响应的终极解决办法是拆开后盖,把触摸屏排线重新接好(如果分不清的话三个排线都重新插拔一下)。

Sunday, April 13, 2014

在Fedora 20上使用TLP进行笔记本电源管理

Update: TLP is currently in Fedora Official Repository. Use "dnf install tlp".

升级Fedora 20后发现笔记本电池的使用时间有所缩短,用powertop一看,处理文字时的耗电量就有20W,明显不正常。于是就看了一下pm-utils的scripts。果不其然,/usr/lib64/pm/power.d下面空空如也。我东拼西凑了一个powersave script, 放到/etc/pm/power.d下面。后来发现,拔下电源后脚本没有运行,只有手动执行pm-powersave true才可以生效。查了一下,发现pm-utils已经deprecated了,只能另寻方案。

Arch wiki推荐用acpid,不过它只能在有ACPI事件时运行某个脚本。这样就需要自己写一个开机启动脚本判断是否处于电池模式,相当不爽。

后来,在Fedora论坛上发现了一个相关的讨论,有用户推荐用TLP(主页)。 这个东西的功能很强大,可以在电池模式和市电模式采用不同的电源配置(硬盘,WLAN,WWAN,蓝牙,USB,声卡,显卡,SATA控制器,PCIE等等)。此外,它还可以配置Thinkpad电池的thresholds.其配置文件在/etc/default/tlp,几乎不需要太大改动。

使用后效果还是相当明显的,电池模式下功耗降低到了15W,可以多用半小时啦。这里凸显了Linux发行版和Windows的差别,一个电源管理都有好多套方法。说不定什么时候又搞出个更强大的。

Friday, December 6, 2013

Kindle Paperwhite 越狱

大约半个月前把用了好久的第一代Kindle Paperwhite越狱了。由于防火墙的原因,很久没能上blogger,直到几天前搞了个VPS。

越狱的方法来自http://www.mobileread.com/forums/showthread.php?t=198446,第二代KPW越狱方法在http://www.mobileread.com/forums/showthread.php?t=186645 ,由于当前的5.3.9版本不支持DEBUG模式,所以需要先降级到5.3.5版本(和升级的方法相同)。

然后,按照越狱包README的要求拷贝相应文件,再次更新Kindle后就越狱成功了。


 
越狱后可以发现多了一本书jailbreak-log,可以打开看看越狱过程。

然后,就可以下载5.3.9的固件,重新升级到5.3.9.不过,升级后要记得安装Rescue Pack和Kindlet Developer Certificates。这些都可以在上面的网址中找到。

越狱完成后,就可以在Kindle上运行许多小程序了,比如扫雷、中国象棋、Midori网页浏览器等等。不过,首先要做的是安装usbnet和KUAL,http://www.mobileread.com/forums/showthread.php?t=203326 它提供了一个访问各种Kindlets的界面。并且,可以在KUAL中开启和关闭usbnet。由于Kindle是基于Linux的,usbnet可以把kindle的usb口转化成一个虚拟网卡,连接电脑并安装驱动后即可用SSH连接kindle。此外,usbnet也支持在Wifi网络上运行SSH和SFTP服务,因此打开SSH over WIFI后可以不用数据线拷书籍了,唯一遗憾就是SFTP的中文支持不是很好,会乱码。

关于kindlet,koreader,扫雷,记事本,收藏夹管理器的安装,以及更改屏保等操作都可以在下面的网页中找到,我也就不再重复了。
http://www.douban.com/group/topic/42835056/
http://www.mobileread.com/forums/showthread.php?t=205064

最后推荐一个Kindlet,BackDoorLock,它可以禁用Kindle的后台自动更新功能。