微信公众号服务:将用户发来的图变成海报

这个想法是草地音乐某次活动海报做得非常简单,直接用了一张往期的照片,贴上了活动地点的文字。于是想到其实可以让大家用自己的照片做成海报来玩。 想到最直接的交互就是从微信公众号了,不需要写什么专门网页,你发我一张图,我回你一张图,非常简单高效。后来用python写一个flask服务,图像处理就用PIL,写出来也非常快。 再后来发现可以有更多有趣的玩法,比如除了海报,还可以生成一些比如LOMO风格、黑白风格等照片,或者加上你的二维码等等,后来也做了一些。随便贴一张示例,毕竟一图胜万言嘛。   再到后来圣诞节想到,可以用人脸识别,在图片里找出脸的位置,然后在上方贴上圣诞帽的图层,也会非常有喜感,这个和最近比较火的很多自拍类软件自动加上猫胡须什么的其实原理是一样的。 代码已经开源了,点击这里可以看到,后面可以发挥想象力再做一些有趣的东西,不限于图片的交互,可能声音啊视频啊都可以有趣起来。

用Android手机遥控电脑上的Clementine播放器

Clementine一直没停止过给我惊喜!! 用手机控制电脑播放这个功能真是太赞了,且不论是不是因为人懒。假设你躺在床上看书,电脑在放音乐,然后你想换歌或者暂停什么的,但是冬天天冷不想下床,怎么办? 或者你像我这样的整天不关电脑,然后出门了,突然想听你电脑里收藏的一些歌,怎么办?直接用clementine遥控,从你电脑的曲库里下载音乐! 好,我们来看看怎么设置吧!前提是你有一部android手机和一台电脑。 首先你需要在电脑上安装clementine 1.2版本以上,直接去官网下即可,咱们跨平台小橘子,管你是土豪mac、屌丝win、极客linux,都有对应版本。 然后手机去play store搜索一个app叫clementine remote,如果由于各种原因装不了,直接点这里去官方下载apk包(在页面最下方),然后自行安装。 现在,打开电脑上的clementine,找到偏好设置,网络遥控这一项 1、把“Use a network remote control”勾上 2、Port(端口)可以不用改,但是如果你的电脑装了防火墙,别忘了把对应端口开放。 3、“Only allow connections from the local network”选项:如果你只想在内网范围内使用,即电脑和手机都在一个网络里(比如都接入校园网、或者在同一个路由器后面等等),那么就勾上,相应也更安全一点。但是有些情况,比如你出门在外了,想要从自己电脑里下载音乐,那就去掉这个勾。 4、“Require authentication code”选项:为了安全,勾上,输入几个数字,一会儿连接时候需要这个数字来做验证。 5、“Allow downloads”选项:如果你想用手机下载电脑里的音乐,就勾上。 你的IP地址就显示在选项里,一会儿连接的时候就输入这个IP。但是注意,如果你的电脑在内网(校园网、路由器后面等等),手机则必须也在同一个内网(即通过wifi连接这个网络),否则不能连接。如果你的手机直接用流量上网,那就是在公网了,这时候你的电脑也必须在公网(即拥有公网IP,一般宽带拨号上网没用路由器的都是在公网)。 现在,打开手机上的遥控app,输入刚刚选项里显示的IP地址,然后输入authentication code那边你写的数字验证码,不出意外的话,就可以连接上电脑的clementine了,操作手机就和操作电脑上的播放器一样。 播放!尽情享受吧!!

用Python批量下载豆瓣小站的音乐

原理很简单,豆瓣小站的网页HTML看了一下,每首歌的名字和地址都写好了在里面,只是每次载入地址是不一样的而已。用urllib读取一下,分析出里面的名字和地址,然后下载即可。 先看效果图,上面是命令行的运行结果,左边是代码,右边是拖回来的文件,成就感满满! 最后附上python3.2示例代码:

用Python批量抓取豆瓣日志

昨天在豆瓣看到有人发状态问如何把豆瓣日志保存到本地,正好最近在学python,就想到用python写一段小程序,练练手。 解析HTML用的是BeautifulSoup库,看了一下文档,还算简单,但是有些奇怪的问题我一时弄不清楚为什么,所以部分功能是用了比较曲折的方法实现的…… 用法:运行这段程序时,将用户名作为参数,如果你没有设置豆瓣的用户名,那就是一串数字,也就是你个人主页的网址里“people”后面那一串,例如(以当初提问的这位同学为例): ~$ python crawl.py duanzhang >> blogbackup.txt 效果如下: 有个功能缺陷是,如果日记里有图片,只能抓到那部分的HTML代码,有兴趣的同学可以继续扩充,但是估计就要想着保存为网页文件了,以便原貌呈现图文混排,当然,也可以仅仅作为备份,把图片抓下来保存在同一个目录里,大家根据自己需求修改吧。 好了,少废话,上代码:

国外购买的kindle阅读中国亚马逊电子书的方法

万年不更新的博主今天终于找到了个话题。 最近kindle在中国亚马逊(以下简称中亚)有售了,但是只有paperwhite和fire HD,官网说,如果你有在国外购买的这两款机器,那么可以重新注册到z.cn来购买阅读中亚的电子书,但是如果是其他型号的阅读器,则暂时不可注册,只能使用阅读软件(for android、mac、pc等等)。 不巧,我买的是kindle(这是啥型号,后面啥词都没有,就是那种最原始的),但是又想看中亚的书,怎么办?方法如下(适用于windows和mac系统,linux可能要wine实现): 1、安装中亚官方的kindle阅读器,然后有中亚帐号登录,注意,如果你是卓越老用户,可能用户名不是邮箱地址,需要先在amazon.cn登录界面选择更改邮箱地址才行。 2、在阅读器里将你在中亚购买的书下载到本地,文件会保存在你的文档里一个叫My Kindle Content的文件夹里,格式是azw的。 3、由于这个文件是有保护的(DRM),所以现在还没法随意转换格式或拷贝到其他机器。接下来安装calibre电子书管理器,安装好后运行并设置kindle相关的帐号和邮箱啥的,主要用来向自己设备上推送(也可以跳过设置)。然后去下载calibre的deDrm插件,用来移除DRM保护,在tools_v6.0.7.zip压缩包里能找到这个插件,在calibre界面,点选项,然后点插件,再点“从文件导入插件”,选择那个压缩包里的插件的那个zip包,导入之后重启calibre软件即可。 4、在calibre里添加书籍,把第三部里找到的azw文件导入进去,期间会自动移除DRM保护,然后就可以看到书名在列表里了,选中之后转换为mobi格式,通过usb拷贝到你的kindle里(或者通过个人文档服务推送)即可正常阅读。

在Arch下获得Lenovo A60手机的Root权限

手里有个联通充花费送的联想A60,虽然配置低端,但是搭载Android系统,功能还是齐全的,打算先用一阵子。不过有很多联通制定的软件,需要删掉的话必须有root权限,于是折腾开始了。 一、安装Android SDK,可以通过aur搞定,装这两个包:android-sdk和android-sdk-platform-tools,当然也可以去官方网站下载,手动安装。 二、修改udev的规则,让其识别手机(参考arch wiki)。 1、通过USB连接手机,执行lsusb命令,得到一行类似下面的信息: Bus 002 Device 006: ID 0bb4:0c8d High Tech Computer Corp. 其中“0bb4:0c8d”前四位是[VENDOR ID]后四位是[PRODUCT ID] 2、根据以上信息修改/etc/udev/rules.d/51-android.rules文件(如果没有则新建一个),加入下面三行内容(将其中的ID部分按照上一步的信息替换掉): SUBSYSTEM==”usb”, ATTR{idVendor}==”[VENDOR ID]”, MODE=”0666″ SUBSYSTEM==”usb”,ATTR{idVendor}==”[VENDOR ID]”,ATTR{idProduct}==”[PRODUCT ID]”,SYMLINK+=”android_adb” SUBSYSTEM==”usb”,ATTR{idVendor}==”[VENDOR ID]”,ATTR{idProduct}==”[PRODUCT ID]”,SYMLINK+=”android_fastboot” 3、保存之后运行 sudo udevadm control –reload-rules 来使其生效。 三、准备破解工具,到这里下载一个包,里面用到的是zergRush, Superuser.apk, su-v2, busybox这些文件,将它们找出来,然后找个地方放一下,这里以放在我的home里为例。 还有,在手机上打开USB调试:设置——应用程序——开发——USB调试,勾上即可。 四、开始破解 1、进入SDK的工具目录(我不知道为何aur安装的这玩意儿路径不对) cd /opt/android-sdk/platform-tools 2、通过USB连接手机,运行 adb devices 命令,看结果是不是类似(如果不能连接,参见wiki) List of devices attached 0123456789ABCDEF    device […]

Arch Gnome 3 下编译 Eva 未遂

上次写过一篇在ubuntu 10.10下编译eva,比较简单,因为那个时候源里是有eva的,况且我安装过,所以运行需要的环境是有了,然后就是build-dep这个好东西可以自动安装好编译所依赖的包,很遗憾,ubuntu 11.04源里不再有eva,至于arch,那就更没有了,AUR里有一个比较旧的版本,我没有尝试,而是直接去sourceforge下了比较新的源码。 首先是./autogen.sh生成configure脚本,然后就开始简单的./configure,当然,也是在这里走不动了。 事先知道装两个包,kdelibs和qt,然后发现说找不到kde-config,后来知道是因为现在这个包叫kde4-config了,于是ln -s建立一个软链接,过去了。 接着是Qt的问题,说是找不到lib和header,后来装了个qt-private-headers这个包,不起作用,然后网上搜一下,说qt库在/opt/qt/lib/,因为我是64位,我甚至还建立的一个叫lib64的软链接到lib,仍然无效,后来加了一个后缀,./configure –with-qt-dir=/opt/qt/,终于通过。 接着有来了个KDE的问题,我加了–prefix=`kde-config –prefix`,但是却不能找到KDE的库,我也学着上面建立了个kde的软链接到kde4,仍然无效,最后卡死在这: checking for KDE… configure: error: in the prefix, you’ve chosen, are no KDE libraries installed. This will fail. So, check this please and use another prefix! 考虑的明天要早起去学校,也就没了耐心,就此作罢,但是我感觉隐约中学到了一些东西,有了新的体会,实际上编译就是把源码make成bin,但是源码太复杂,所依赖的lib也太复杂,各个distro上这些lib版本不一样,位置不一样,于是有了configure之类的东西,问题是这个程序是很多年前的,估计configure里面写的东西和现在不太符合了,实际上这个东西还是可以编译的,我觉得如果是对系统和变成了解很多的人甚至可以不用这个东西,一条一条敲命令编译好,当然没人会这样做。估计是可以根据自己的系统,改改confugure,把依赖的包位置都找准确,就能顺利编译。 Update:后来又做了尝试,原因应该是因为我的系统是64位的。

逃叛笔记——从Ubuntu 11.04 到 Arch

记得前些日子刚刚升级到Ubuntu 11.04的时候还是觉得Unity没有想象中那么差,而且我也很习惯那样的操作方式。问题是整个系统太不流畅了,CPU经常居高不下,偶尔莫名卡住或者死机。Ubuntu 11.04真的不给力,不是因为Unity,而是因为本身,我觉得这个正式版顶多能算是Beta版。 于是乎,果断逃叛到Arch,为此我还专门买了个U盘来作为安装盘,可让我等了不少天。好了,闲话少说,正题开始,主要是一些粗略的过程和注意点,希望对受不了11.04而准备上Arch的童鞋有点帮助。 准备工作 至少你要有一个安装介质吧,虽说硬盘安装肯定是有方法的,但是那样很折腾,不如传统方法方便。你可以刻光盘,也可以用U盘。这些wiki上写的很详细,不再熬述。顺便说一下,我选择的是64位的系统,我的配置并不高,奔腾双核,2G内存,但是用起来没问题。 还有一件事情非常重要:备份数据!主要是你的/home目录。我的情况是一共/和/home还有swap三个分区。安装后/的分区全部抹掉,/home保留不动,swap随便它怎么搞,反正里面没东西,浮云。 开始安装 主要还是参考wiki,可以事先读几遍,把主要步骤写在纸上(如果你没有打印机),当然,还有就是在安装的时候你可以按Alt+F2切换到tty2然后运行less /usr/share/aif/docs/official_installation_guide_en查看安装指南。 时区稍微留意一下,如果你设置UTC,然后发现时间不对了,不要手动修改,那样会同步到CMOS,导致win的时间乱掉,所以应该选择localtime才对。 前面的步骤很简单,如果你以前用文本方式安装过linux,那就是小case,主要注意的地方是分区设置,/的分区需要(re)create分区,也就是格式化神马的,但是/home的分区千万不能(re)create,至于swap,随便,挂载上去就行。 安装包的时候把base和base-devel全选上,后者以后你要编译程序会用上。 后面配置比较重要一点,一个是/etc/rc.conf,里面有一些地方要修改,比如LOCALE,HOSTNAME,DAEMONS。关于LOCALE说一下,如果你用英文界面,想显示中文并能输入中文,根本不需要设置LC_CTYPE,也就是说保持默认的LOCALE为en_US.UTF-8就可以。不过在/etc/local.gen里面最好把zh_CN开头的几个都取消注释。 还有一个是/etc/pacman.d/mirrorlist,设置源的,我这里lupaworld奇快,基本都是满速。 后续配置 除了上面说的一些,其他自行搞定了然后重启(别忘了拔掉安装盘)就可以使用了。刚刚装好的Arch是没有图形界面的,而是一个CLI的很干净的系统。这里我要感慨一下命令行的强大。当时还没装X(别误解,是指X11)的时候,出了一些问题,我随便装了个叫freetalk的东东,直接就上了Gtalk然后向del童鞋请教去了……当然命令行能做的远不只这些,浏览网页,听歌甚至看电影都可以。不可思议。 动手之前运行一下pacman -Syu更新系统,之后可以参照wiki,安装显卡驱动和X,还有要添加一个日常的用户,不要用root。安装sudo和gksu,还有要把它加入一些用户组,这个用户的名字最好和你之前的系统里的一样,这样home里面的个人文件夹也不要改名字麻烦了,这些都可以在wiki查到。 然后我装了Gnome 3,注意,要把dbus添加到/etc/rc.conf的DAEMONS里面,不然会出问题无法启动。还有要装一些你喜欢的中文字体。然后装一下gdm(同上,也要放进DAEMONS,放在最后一个),如果你喜欢用它登录的话。当然也可以自己敲命令或者其他方法登录到GNOME 3。 之后重启应该就可以进入桌面了。然后随便折腾把,说一下终端中文乱码的问题,在菜单上点Terminal –> Set Character Encoding –> Unicode (UTF-8) 就好了,不需要设置LOCALE那么麻烦。 总结 虽然折腾了两天,但是感觉这一次安装,对linux又有了更深的了解。

Clementine音乐播放器

其实很早就想写一篇blog推荐这个播放器了,到现在为止我用过很多播放器,基本上是觉得越换越好,从一开始什么都不懂,用默认的rhythmbox(当然,后来承认也很优秀)、audacious、甚至totem放音乐,然后试过amorok、quodlibet、exaile,最后到现在clementine,其实都是很不错的播放器,但是我觉得现在我最喜欢这个小橘子。 其实写一篇推荐很简单,一直没写是因为有些小问题没有解决。 Clementine有一个很cool的功能,就是在放音乐的时候加入背景雨声,但是提供这个雨声的文件太大,没有包含在软件里面,而是用的时候从网上stream下来,如果网速快也没什么,问题是,由于总所周知的原因,clementine的官网不知为何访问不了了,所以那一段背景也就下载不回来了。 后来发现它的地址实际上还是做了一个302跳转,跳转后的网站是可以访问的,所以我做了两个尝试,但是最后都失败了。 一是尝试自己编译,按照wiki安装了依赖,在我电脑上这个依赖吓死人,200M多,亏我平时还时不时编译程序成用的依赖都有。然后拖下来,再跑到源码里面找出那些地址,替换成跳转后的地址,保存然后开始编译,但是不知道怎么回事,编译不了,是用的什么cmake,这个一窍不通,一出错我就不知道怎么办了。 第二个尝试是想用win下的思维hack一下,在/usr/bin下面找到clementine可执行文件,用ghex2打开,然后搜索到那个提供雨声的url,替换成自己事先准备好的地址(用自己的域名做一个跳转过去),然后保存,再运行。同样无效。 后来只好作罢,一会儿研究一下这个玩意儿是不是可不可以本地缓存。 其他来讲,这款播放器是很不错的,可以根据平时听歌的喜好智能生成播放列表,如果动态模式打开了,可以一边播放一边自动网列表添加歌曲。还有托盘上的图标,一瓣小橘子,橘红色的填充表示当前歌曲的播放进度,黑色指针表示列表进度。还有其他很创新的功能,大家可以试试,最后上一张图(这张图是一个多月之前截取的,在我桌面上放了这么久,你就知道这篇blog拖了多久……)。

编译EVA小记

说起eva,感觉还是很亲切的,第一次用ubuntu的时候是8.04,那时候和姐两个人都是新手,暑假没事做,各自装上ubuntu,然后折腾,交流,那时候显然不知道irc、gtalk之类的高端的东西,所以还是用qq,那个时候用的最多的客户端就是eva(好像也只有这个比较好用一些)。如此,对eva的感情当然很深厚。 后来一直到10.04的时候还是执着用着eva,但是某一天没事做去win下把qq的好有分组改了一通,后来发现eva再也上不去了。登录是成功的,但是登录成功那一霎那就崩溃了。因为学习很紧张,也就再也没去试过,后来改用gtalk,比较偏执地用了很久(现在也在继续),也鼓动了一些同学在用。但是寒假联系一些同学的时候发现还是需要上一下qq什么的,webqq在我这铁通就很杯具了,pidgin什么的,登录qq也很杯具,于是没办法,开始重新捣鼓eva,嗯,这就是序言,太长了…… 好了下面进入正题。 1、首先下载源代码 svn co https://evaq.svn.sourceforge.net/svnroot/evaq evaq 2、然后进入到编译的目录 cd evaq/trunk/eva/ 3、没有configure脚本,这一步貌似是生成的吧(IRC上高手告诉我的) make -f admin/Makefile.common 4、对了,依赖还没解决呢,因为eva源里有,所以可以这样一下子就安装所有依赖包 sudo apt-get build-dep eva 5、然后就可以configure啦,修改一下prefix,因为依赖一个libart的包,源里的版本貌似用不上,也就算了,用–without-arts忽略之 ./configure –prefix=/usr –without-arts 6、不着急make,这里有个问题,在./src/libeva/这个目录里有个evamemo.cpp文件有问题。打开之,第144行,那个itoa函数,据说不是标准库里面的,所以make的时候会出错,因为不会C,所以请IRC上的高手帮忙用sprintf函数改写了一下。也就是将 itoa(EvaUtil::read32(decryptedBuf+pos),qqid,10); 这一句删掉,改成: sprintf(qqid, “%d”, EvaUtil::read32(decryptedBuf+pos)); 然后保存之,就可以编译了(如果CPU是双核就加上-j2参数,否则就直接make) make -j2 7、然后安装(需要事先卸载掉源里安装的eva) sudo make install (但是这一步我一开始运行出错了,后来我运行了make installcheck之后才管用) 大功告成!可以运行eva了,在程序菜单里就可以发现启动项。