HP Veer入手小记
2011 年 11 月 18 日由于之前的触屏手机不能摸了,加上手头紧张,千挑万选之下发现了HP Veer这个机器。到现在为止入手HP Veer有小半个月了,经过几番折腾终于达到能用状态了,写篇文章纪念下。不得不说WebOS是个发育不健全的系统,虽然也有很多优秀的地方。
1、外观
Veer的尺寸很小,只有3.1英寸,大概就是横放在手掌心里,刚好能占据一半的面积。只有你把键盘滑出来,拿在手里才会觉得踏实,否则就有种随时都会从你手中溜走的感觉,以至于现在上厕所都不敢再看手机了。就这点来说,Veer的尺寸和外观的确比较适合女性。右上方有电源/锁屏键,还有一个静音键(我觉得这个有些多余),右侧是usb以及耳机扩展槽的接口。Veer的USB接口设计这里需要单独提下,USB线跟手机连接的一端通过磁石吸附到手机的接口上,很独特而且感觉非常舒服,但仅限感觉。实际用的过程中就会发现,由于没有传统接口那样的插槽,USB连接很不牢固,很容易断开。充电或者跟电脑连接的时候,你不得不小心翼翼的把手机摆好,而且不能乱碰。
再说说键盘吧,按键本身包括按键的间隔都非常小,得用指甲盖才能准确按到,手大的人要尤其注意了。全键盘输入习惯后还算流畅,问题不大。
2、操作体验
这个是WebOS最值得一提的地方了。Veer的硬件还算给力,800MHZ的CPU,512MB RAM + 8GB ROM,配合WebOS操作非常流畅,这点上远胜Android(曾经的Hero用户泪奔)。卡片式的界面很有爱而且确实很方便,手势输入很强大。照相机没有闪光灯,不过拍照质量和速度都不错。最给力的还是游戏了,可玩的比较多,而且画面流畅,对比650元的价格,不得不说性价比超值。(低端Android机在这点可能也要被秒杀了)
在Yii Framework中集成Twig
2011 年 9 月 24 日Twig是一款快速、安全、灵活的PHP模板引擎,它内置了许多filter和tags,并且支持模板继承,能让你用最简洁的代码来描述你的模板。他的语法和Python下的模板引擎Jinjia以及Django的模板语法都非常像。
比如我们在PHP中需要输出变量并且将其进行转义时,语法比较累赘:
1 2 | < ?php echo $var ?> < ?php echo htmlspecialchars(\$var, ENT_QUOTES, 'UTF-8') ?> |
但是在Twig中可以这样写:
1 2 3 | {{ var }}
{{ var|escape }}
{{ var|e }} {# shortcut to escape a variable #} |
遍历数组:
1 2 3 4 5 | {% for user in users %}
* {{ user.name }}
{% else %}
No user has been found.
{% endfor %} |
Fedora 15下安装RT5370无线网卡驱动小记
2011 年 9 月 12 日几天前给台式机买了块无线网卡,因为自己是windows和linux双系统,所以希望无线网卡也能支持Linux。最后选定了腾达的W311M,因为官方明确表示这款USB无线网卡支持Linux。
网上大概查了一下,安装何种驱动主要取决于无线网卡所用的芯片型号,比如我这款网卡就是Ralink rt5370,然后从源码编译安装,一般就能正常使用。
不过我把无线网卡插入电脑后就能直接识别了,但是却连不上任何一个AP。查看了一下系统已加载的mod,发现了rt2800usb及rt2800lib两个mod,大概是rt2800的驱动能兼容rt2870系列的芯片吧。
$ lsusb
Bus 001 Device 004: ID 148f:5370 Ralink Technology, Corp.
驱动下载地址: http://www.tenda.com.cn/uploadfile/downloads/uploadfile/201108/Ralink/5370%20Linux.rar
驱动解压后会发现这个驱动不止适用rt5370,同样可以用于rt3070、rt2870(貌似rt5370,rt3070都是rt2870内核的?不过这点没有证实过)。直接make源码会报错,所以我们需要先修改一些文件:
- 1、在os/linux/config.mk中找到HAS_WPA_SUPPLICANT以及HAS_NATIVE_WPA_SUPPLICANT_SUPPORT,将他们的值都设为”y”(不含引号)
- 2、在os/linux/usb_main_dev.c中加入一行:
MODULE_LICENSE(“GPL”);
否则的话make时会报错缺少授权协议。 - 3、用su提权至root,在源码根目录下:make && make install
屏蔽系统自带的驱动了:
编辑 /etc/modprobe.d/blacklist.conf,加入下面两行:
blacklist rt2800lib
blacklist rt2800usb
完成上面这些工作,就可以加载模块了:
modprobe rt5370sta
ifconfig ra0 192.168.1.100 up #网卡名称也许不是ra0,请自行通过ifconfig查看
iwconfig ra0
顺利的话已经可以连接无线开始上网冲浪了。
后记:说实话这个驱动一直让我折腾了好久,主要是一直没发现和系统自带驱动相冲突的问题,不过最后还是可以用了。这款网卡信号算不上强,但还够用,毕竟是Mini系列的,加之价格有便宜的要死,总体来说是一款性价比很高的网卡。Windows下面有软AP,Linux下还没实验过,反正没有太大的需求。
各种排序算法(Python实现)
2011 年 5 月 19 日前段时间为准备百度面试恶补的东西,虽然最后还是被刷了,还是把那几天的“战利品”放点上来,算法一直是自己比较薄弱的地方,以后还要更加努力啊。
下面用Python实现了几个常用的排序,如快速排序,选择排序,以及二路并归排序等等。
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 92 93 94 95 96 97 98 99 100 101 102 | #encoding=utf-8 import random from copy import copy def directInsertSort(seq): """ 直接插入排序 """ size = len(seq) for i in range(1,size): tmp, j = seq[i], i while j > 0 and tmp < seq[j-1]: seq[j], j = seq[j-1], j-1 seq[j] = tmp return seq def directSelectSort(seq): """ 直接选择排序 """ size = len(seq) for i in range(0,size - 1): k = i;j = i+1 while j < size: if seq[j] < seq[k]: k = j j += 1 seq[i],seq[k] = seq[k],seq[i] return seq def bubbleSort(seq): """冒泡排序""" size = len(seq) for i in range(1,size): for j in range(0,size-i): if seq[j+1] < seq[j]: seq[j+1],seq[j] = seq[j],seq[j+1] return seq def _divide(seq, low, high): """快速排序划分函数""" tmp = seq[low] while low != high: while low < high and seq[high] >= tmp: high -= 1 if low < high: seq[low] = seq[high] low += 1 while low < high and seq[low] <= tmp: low += 1 if low < high: seq[high] = seq[low] high -= 1 seq[low] = tmp return low def _quickSort(seq, low, high): """快速排序辅助函数""" if low >= high: return mid = _divide(seq, low, high) _quickSort(seq, low, mid - 1) _quickSort(seq, mid + 1, high) def quickSort(seq): """快速排序包裹函数""" size = len(seq) _quickSort(seq, 0, size - 1) return seq def merge(seq, left, mid, right): tmp = [] i, j = left, mid while i < mid and j <= right: if seq[i] < seq[j]: tmp.append(seq[i]) i += 1 else: tmp.append(seq[j]) j += 1 if i < mid: tmp.extend(seq[i:]) if j <= right: tmp.extend(seq[j:]) seq[left:right+1] = tmp[0:right-left+1] def _mergeSort(seq, left, right): if left == right: return else: mid = (left + right) / 2 _mergeSort(seq, left, mid) _mergeSort(seq, mid + 1, right) merge(seq, left, mid+1, right) #二路并归排序 def mergeSort(seq): size = len(seq) _mergeSort(seq, 0, size - 1) return seq if __name__ == '__main__': s = [random.randint(0,100) for i in range(0,20)] print s print "\n" print directSelectSort(copy(s)) print directInsertSort(copy(s)) print bubbleSort(copy(s)) print quickSort(copy(s)) print mergeSort(copy(s)) |
运行结果如下:
1 2 3 4 5 6 7 8 9 | E:\python_project\practice>sorting.py [10, 47, 56, 76, 64, 84, 26, 8, 47, 51, 88, 81, 32, 95, 91, 29, 28, 69, 61, 45] [8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95] [8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95] [8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95] [8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95] [8, 10, 26, 28, 29, 32, 45, 47, 47, 51, 56, 61, 64, 69, 76, 81, 84, 88, 91, 95] |
豆瓣风格的WordPress主题
2011 年 5 月 16 日丢在电脑已经很久的一份设计稿,今天把它放出来了,就是你现在看到的这个主题。
这个主题是基于Wordpress默认主题twentyten开发的,第一次做很多不足还请见谅。目前版本是v0.1,如果您有什么建议,请不要吝惜您的键盘寿命,在文章内给我留言。
功能:
- 完整的小工具支持
- 支持自定义菜单
- 支持Wordpress插件
更新日志:
2011-5-17: 发布wordpress-douban-style v0.2,修复了部分样式问题,移动搜索条到页面顶部,添加订阅按钮和follow按钮。
2011-11-4: 增加图片lazyload,文章部分字体改为豆瓣的深灰色,使用主题自带的jQuery而不是Wordpress中的jQuery。
ShoutBox
2011 年 4 月 20 日知道这个东西叫Shoutbox也花了很多时间,任何人都可以在这个盒子里很方便的发送消息,消息会被即时的显示在页面上,被所有人看到。这种shoutbox在很多国外论坛上很常见,国内好像不怎么有。去年跟小豪做很多无聊项目的时候,有客户提出要求要实现这么个功能,这大概是唯一感觉还好玩点的东西了吧!可惜最后还是没用用上,哈哈。无聊放上来,怀念一下那段时光。
截图:
图书馆自动续借系统
2011 年 4 月 18 日不得不说,春日的杭州真的不是一般的漂亮,自己在杭州呆了两年也从未有过这种感觉。Linux不争气的挂掉,直接导致很多事情没法做,不过忍受每天N次的网络掉线也不是什么开心的事情。手头几个项目都接近尾声,虽然有很多的不开心,但还是坚持做下去了,真的只要认真付出就总有收获。扯的远了,进入今天的正题——图书馆自动续借系统。
功能:
- 自动续借快过期的图书。
- 无法继续续借的会发送Email提醒。
- 已超期图书提醒。
使用:
- 修改setting.py.example,设置好邮箱的SMTP地址和帐号密码,使用前将setting.py.example 改名为 setting.py。
- 通过command.py将待监测用户加入数据库。
- 同过windows的任务计划或者linux的crontab定时执行,每天一次即可。
command.py使用说明:
增加新监测用户
python command.py add -u 学号 -p 图书馆登录密码 -e Email
将用户从数据库中删除
python command.py del -u 学号
虽然只试过自己学校的系统,不过理论上支持所有的OPAC V4.5系统。贴一部分核心的代码:
继续阅读

