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机在这点可能也要被秒杀了)

继续阅读

发表在 杂谈 标签为 ,
  |  阅读(256次)

在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 %}

继续阅读

发表在 PHPer 标签为 ,
  |  阅读(100次)

几天前给台式机买了块无线网卡,因为自己是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. 1、在os/linux/config.mk中找到HAS_WPA_SUPPLICANT以及HAS_NATIVE_WPA_SUPPLICANT_SUPPORT,将他们的值都设为”y”(不含引号)
  2. 2、在os/linux/usb_main_dev.c中加入一行:
    MODULE_LICENSE(“GPL”);
    否则的话make时会报错缺少授权协议。
  3. 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下还没实验过,反正没有太大的需求。

发表在 Linux 标签为 , ,
  |  阅读(489次)

各种排序算法(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]
发表在 Python 标签为 , , ,
  |  阅读(501次)

豆瓣风格的WordPress主题

2011 年 5 月 16 日

丢在电脑已经很久的一份设计稿,今天把它放出来了,就是你现在看到的这个主题。

这个主题是基于Wordpress默认主题twentyten开发的,第一次做很多不足还请见谅。目前版本是v0.1,如果您有什么建议,请不要吝惜您的键盘寿命,在文章内给我留言。

功能:

  1. 完整的小工具支持
  2. 支持自定义菜单
  3. 支持Wordpress插件

豆瓣风格的Wordpress主题截图

更新日志:

2011-5-17: 发布wordpress-douban-style v0.2,修复了部分样式问题,移动搜索条到页面顶部,添加订阅按钮和follow按钮。
2011-11-4: 增加图片lazyload,文章部分字体改为豆瓣的深灰色,使用主题自带的jQuery而不是Wordpress中的jQuery。

下载:douban-wordpress-theme-v0.3.tar.gz

发表在 PHPer 标签为 , ,
  |  阅读(485次)

ShoutBox

2011 年 4 月 20 日

知道这个东西叫Shoutbox也花了很多时间,任何人都可以在这个盒子里很方便的发送消息,消息会被即时的显示在页面上,被所有人看到。这种shoutbox在很多国外论坛上很常见,国内好像不怎么有。去年跟小豪做很多无聊项目的时候,有客户提出要求要实现这么个功能,这大概是唯一感觉还好玩点的东西了吧!可惜最后还是没用用上,哈哈。无聊放上来,怀念一下那段时光。

截图:

shoutbox
原理其实比较简单,就是利用Ajax定时刷新,删掉旧的消息把新的消息弹出来,但是看起来还是蛮酷的东西。
代码就不放了,数据库用的是sqlite,搭好PHP环境直接就可以运行。
下载地址:Shoutbox
发表在 PHPer 标签为 , ,
  |  阅读(94次)

图书馆自动续借系统

2011 年 4 月 18 日

不得不说,春日的杭州真的不是一般的漂亮,自己在杭州呆了两年也从未有过这种感觉。Linux不争气的挂掉,直接导致很多事情没法做,不过忍受每天N次的网络掉线也不是什么开心的事情。手头几个项目都接近尾声,虽然有很多的不开心,但还是坚持做下去了,真的只要认真付出就总有收获。扯的远了,进入今天的正题——图书馆自动续借系统。

功能:

  1. 自动续借快过期的图书。
  2. 无法继续续借的会发送Email提醒。
  3. 已超期图书提醒。

使用:

  1. 修改setting.py.example,设置好邮箱的SMTP地址和帐号密码,使用前将setting.py.example 改名为 setting.py。
  2. 通过command.py将待监测用户加入数据库。
  3. 同过windows的任务计划或者linux的crontab定时执行,每天一次即可。

command.py使用说明:

增加新监测用户

python command.py add -u 学号 -p 图书馆登录密码 -e Email

将用户从数据库中删除

python command.py del -u 学号

虽然只试过自己学校的系统,不过理论上支持所有的OPAC V4.5系统。贴一部分核心的代码:
继续阅读

发表在 Python 标签为 , ,
  |  阅读(216次)
Page 1 of 912345...Last »