J K 键翻页脚本

这两天经常用 vim ,j k 键翻页各种爽,于是想能否让所有网页都可以这样。采用 Bookmarklet 来完成。

这是我第一次用 javasciprt 写出来的实用的东西。我还是蛮有成就感的,高手勿笑,哈哈哈~~

把这个链接拖动到书签栏,以后需要使用 JK 键进行翻页时点击一下这个书签就 OK 了。

写此代码给我带来帮助的网址:

1、http://www.ruanyifeng.com/blog/2011/06/a_guide_for_writing_bookmarklet.html
2、http://ted.mielczarek.org/code/mozilla/bookmarklet.html

wordpress 好像不支持在文章里直接插入 javascript 代码,代码如下,加入到浏览器收藏夹即可:

javascript:(function(){document.addEventListener('keypress',function press(e){if(e.charCode==106){scrollBy(0,window.innerHeight/2);}else if(e.charCode==107){scrollBy(0,-window.innerHeight/2);}});})();

Linux 网络相关的命令

ifconfig 查看网络接口信息

ifconfig -a #查看所有接口
ifoncifg eth0 #查看特定接口
ifup eth0 #启用网卡
ifdown eth0 #禁用网卡

ping 测试网络连通性

ping 192.168.1.1
ping www.qq.com

host 或 dig 测试DNS解析

host www.qq.com
dig www.qq.com

ip route 显示路由表

route 路由配置命令
使用方法请自行搜索或查看 Man Page

traceroute 追踪到达目的地址的网络路径

traceroute www.qq.com

mtr 网络质量测试(结合了 traceroute 和 ping)

mtr www.qq.com

Linux 的文本处理命令一览

grep 基于关键字搜索文本内容

-i 搜索时忽略大小写
-n 显示结果所在行数
-v 输出不带关键字的行
-Ax 在输出的时候包含结果所在行之后的指定行数(x为一个数值,表示输出后面x行)
-Bx 在输出的时候包含结果所在行之前的指定行数(同上)

cut 基于列处理文本内容
cut -d: -f1 /etc/passwd
grep upliu /etc/passwd | cut -d: -f3

-d 指定分割字符(默认是TAB)
-f 指定输出的列号
-c 基于字符进行切割

cut -c2-6 /etc/passwd #显示第2到6列的文字
wc 统计文本信息

-l 只统计行数
-w 只统计单词
-c 只统计字节数
-m 只统计字符数

sort 对文本内容进行排序

-r 进行倒序排序
-n 基于数字进行排序
-f 忽略大小写
-u 删除重复行
-tc 使用 c 作为分隔符分割为列进行排序

uniq 删除相邻重复行

详情请看 man uniq 手册

diff 比较两个文本文件内容的区别

-i 忽略大小写
-b 忽略空格数量的改变
-u 同意显示比较信息(一般用于生成 patch 文件)

diff -u upliu.txt upliu-new.txt > final.path
aspell 检查英文拼写

该命令只能检查英文

tr 处理文本内容
tr 'a-z' 'A-Z' < upliu.txt # 小写字母替换为大写字母
sed 搜索替换

详细教程见这里:http://learn.akae.cn/media/ch32s03.html
和这里:http://coolshell.cn/articles/9104.html

awk 以列为单位处理文件

详细教程见这里:http://learn.akae.cn/media/ch32s04.html
和这里:http://coolshell.cn/articles/9070.html
sed awk 这两个工具比较强大,用法需要慢慢消化理解

Linux 利用 locate 和 find 查找文件

命令 locate 用于快速查找文件、文件夹。此命令并没有在磁盘上查找所有文件,而是在预先建立的数据库里进行搜索。可以使用 updatedb 命令建立、更新数据库。

find 命令更加高级,使用方法:find 查找位置 查找参数;

find . -name *upliu*
find / -name *.conf
find . -type d
find . -perm 777
find . -name "Do*" -exec ls {} \;

-exec 命令 {} \; 是固定格式,表示将查找到的文件、文件夹作为参数传给命令。

Linux 学习笔记(一)

最近准备有空就系统学一下 Linux 的基础操作知识,主要是在 study.163.com 这个上面看视频教程。

Bash 笔记:

可以通过 Ctrl + r 在历史记录中搜索命令
(reverse-i-search)`’:

重新调用前一个命令中的参数
按 ese 之后按 . 键

Bash 支持以下通配符
* 匹配零个或多个任意字符
? 匹配任意字符一次
[0-9] 匹配一个数字
[abc] 匹配列表里的任何字符
[^abc] 匹配列表以外的字符

在后台运行进程
在命令后添加一个 &

暂停某个程序
通过 Ctrl + z 或者发送信号 17

管理后台作业
jobs
bg
fg %n(将编号为 n 的后台作业拿到前台来)

tail -f 追踪显示文件更新(一般用于查看日志,命令不会退出,而是持续显示新加入的内容)

PHP in_array 函数的一个问题

有如下代码:

var_dump(in_array('0', array('abc', 'def')));
var_dump(in_array(0, array('abc', 'def')));
var_dump(in_array('1', array('abc', 'def')));
var_dump(in_array(1, array('abc', 'def')));

会输出:

boolean false
boolean true
boolean false
boolean false

第 2 个输出与我们预想的不一样,为什么会出现这种情况呢?

in_array 函数在进行比较的时候,会先进行类型转换,字符串和数字进行比较,会将字符串转换为数字,而字符串被强制为数字 0,因此 in_array(0, array[‘abc’, ‘def’]); 为 TRUE

为了避免这种意外,可以在 in_array 函数添加第三个参数 in_array(0, array[‘abc’, ‘def], TRUE);,那么在比较的时候除了比较值还会比较类型。

wampserver 不能显示 icons 里的图片

环境:win7, wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24-32b.exe 安装位置为:D:/wamp/

在网站目录下,我有一个文件夹 my-folder 里面有一些文件,因为没有 index.php index.html index.htm 等文件,所以 apache 列出了 my-folder 下的所有文件,但是,问题在于,没有显示前面的图片,很难看。

查看 apache error 文件发现提示错误:

[Wed May 29 22:58:43 2013] [error] [client 127.0.0.1] client denied by server configuration: C:/Apache2, referer: http://localhost/my-folder/

访问 http://localhost/icons/ 显示 403 无权限。

很无解,因为我的 wampserver 安装在 D 盘,相关配置文件也在 D:\wamp\bin\apache\apache2.2.22\conf 文件夹下,为什么提示错误说在 C:/Apache2。

第一次遇见这个问题,我尝试搜索了一番,无果。今天再搜索,竟然找到问题所在了。

下面解决方案来自 http://serverfault.com

To fix the icon problem, I had to edit httpd-autoindex.conf located in \bin\apache\apache2.2.22\conf\extra

I changed

Alias /icons/ "c:/apache2/icons/"

to

Alias /icons/ "D:/wamp/bin/apache/apache2.2.22/icons/"

and

<Directory "c:/apache2/icons">

to

<Directory "D:/wamp/bin/apache/apache2.2.22/icons/">

The icons will now display as per usual.

Many thanks to Ladadadada for pointing me in the right direction!

storytlr 支持搜索标题和内容

storytlr 搜索很奇怪,比如我有一篇文章,标题为“QQ for Linux 新版本终于发布了”,内容为“发布了发布了等等等。。。。。很多字符哈哈哈”,我在搜索框里搜索以下内容可以搜到这篇文章:“Linux”、“QQ for Linux”、“新版本终于发布了”,但是搜索以下内容搜不到这篇文章:“Linu”、“QQ for”、“版本”、“新版本终于发布”。这就奇怪了,于是查看代码,在源文件

./protected/application/admin/models/Data.php

的 236 行可以看到,采用的搜索方式是 MATCH,并不是 LIKE,之前没见过 MATCH,于是查看 MySQL 官网,点击这里这里

Any word that is too short is ignored. The default minimum length of words that are found by full-text searches is four characters.

也就是说会省略小于等于 4 个字符的词会省略,所以搜索“QQ for” 搜索不到。

The FULLTEXT parser determines where words start and end by looking for certain delimiter characters; for example, “ ” (space), “,” (comma), and “.” (period). If words are not separated by delimiters (as in, for example, Chinese), the FULLTEXT parser cannot determine where a word begins or ends.

中文词与词之间没有像英文那样有个空格隔开,所以 “新版本终于发布” 和 “新版本终于发布了” 并没有匹配,它认为是两个不同的词。

找到问题所在了。为了满足我的要求,我改代码为使用 LIKE 进行搜索,并且,它默认只搜索标题,不搜索内容,我对 SQL 语句作了如下改动。

Data.php 文件的 234 到 242 行内容为:

$sql = "SELECT d.id, d.source_id, d.service, UNIX_TIMESTAMP(d.timestamp) as timestamp, d.is_hidden, d.user_id, d.comment_count, d.mention_count, d.tag_count, d.slug "
		. "FROM {$service}_data t LEFT JOIN data d ON (t.id = d.id AND t.source_id = d.source_id) "
		. "WHERE MATCH($index) AGAINST(:term) AND t.source_id= :source_id "
		. ((!$show_hidden) ? "AND is_hidden = 0 " : " ")
		. "ORDER BY timestamp DESC ";

$data = array(":term" => $term, ":source_id" => $source_id);

$stmt   = $this->_db->query($sql, $data);

更改为:

$sql = "SELECT d.id, d.source_id, d.service, UNIX_TIMESTAMP(d.timestamp) as timestamp, d.is_hidden, d.user_id, d.comment_count, d.mention_count, d.tag_count, d.slug "
		. "FROM {$service}_data t LEFT JOIN data d ON (t.id = d.id AND t.source_id = d.source_id) "
		. "WHERE (title LIKE '%{$term}%' "
		// 下面这行代码是为了搜索 content 字段,有些表没有 content 字段,所以先进行一个判断
		. (($service == 'rss') ? "OR content LIKE '%{$term}%' " : "")
		. ") AND t.source_id= {$source_id} "
		. ((!$show_hidden) ? "AND is_hidden = 0 " : " ")
		. "ORDER BY timestamp DESC ";
$stmt   = $this->_db->query($sql);

我无视了 search 函数的 $index 参数,直接在 SQL 语句里用 title 替代了。

暂时一切运行正常。可以正常搜索,可以搜索文章标题和内容。

对于 MATCH AGAINST ,如果我理解有误,请看官指点。如果有更好的解决方法,请告之~

storytlr 登录出现问题,删除 apc 后正常

昨天开始,安装在服务器上的 storytlr 出现问题,登录的时候,页面不给任何反馈,查看 apache 错误日志也没有错误产生,查看程序自带的错误记录,也没能看出任何问题。但是我本地也安装来一个 storytlr 正常运行,没有出现这个问题,代码都是一样的,按说不应该啊。于是我对比来一下本机和服务器 phpinfo() 的输出,发现服务器多加载一个 apc 扩展,抱着试一试的态度,我将服务器的 php-apc 扩展删除了,重启 apache2 服务,正常,搞定!不知道为什么会这样,我对 storytlr 代码不熟,对它使用的 zend framework 也没用过,还真有点没底呢,不过现在问题解决了就好。

为什么会出现这个问题呢?