2014年5月

linux 命令行中的 - 和 --

我们经常见到类似下面的:

 ls -a        #short option
 ls --all     #long  option

有些程序使用short options, 有些使用long options, 有些既有short, 又有long.
据说一开始都是使用short options, 后来有些程序的选项特别多,以至于short options 都不够了, 或者有些options的首字母是一样的, 就产生了long options.
一般来说short options用来日常的敲命令, long options 一般使用在脚本里面, 可读性更好.

但是, 有时候, 你可能也会看到下面的这2种:

 tar -cvf - .
 ls -- $FILE_NAME  #before:  export FILE_NAME='--version'

第一个tar 命令看似不好理解, 让我们先看一个正常的:
tar -cvf a.tar file1 file2 #archive file1, file2 成a.tar
对比上面的命令, "-" 相当于 a.tar, 后面的 "." 相当于要archive的文件.
在一些命令行命令中, "-" 用来指代 stdin, 或者stdout.
所以上面的命令意思是: 把当前路径下的文件archive的包输出到stdout. (当然你可以用管道接着处理).
但是注意, 这个不是bash规定的, 而是应用程序自己设置的.

第二个ls命令中间有2个横线 -- (两边都有空格).
英文称: double dash, bare double dash, double hyphen.
这个ls命令的意思是: 列出文件 "--version"的信息, 这里有个文件名字偏偏叫做: "--version".
或者你使用git的时候, 会遇到 git diff origin master -- path/to/file
为什么这里会有2个横线呢? 其实这2个横线是告诉命令行, 后面的字符不是命令行选项, 可以作为一般的字符理解
如果不用 "--":

  • ls 那个命令将变为 ls --vesion, 只能打印ls的版本信息, 不能显示文件 "--version"的信息.
  • git diff 命令可能会遇到 git diff origin master master (后一个master是一个文件名).

Windows 下 终结 全角 半角 切换 问题

相信很多人都会遇到这个问题:
从来不会用到全角输入, 可是经常被切换到全角输入. 不经意的点到 shift + 空格, 就换全角了. 尤其这些在键盘飞奔的程序员.

一直用搜狗输入法, 看到搜狗输入法有很多快捷键, 包括我经常用, 却被搜狗占用的 Ctr + Shift + F. 总以为全角/半角 切换也是搜狗可以设置的. 不过从来没有找到过.

今天搜索终于找到, 原来这是 Windows 操作系统设置的快捷键, 可以通过修改注册表设置:
1) 打开 注册表编辑器: Ctr + R, 输入 regedit, 点 ok, 打开注册表编辑器;
2) 依次打开: HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000011
3) 修改: Key Modifiers 为02 40 00 00
4) 修改: Virtual Key 为31 00 00 00

重启机器, 生效.

上面是设置 全角/半角 切换为键盘 右边的 Ctr + 1 . 我想你很少会用到的.
请输入图片描述
请输入图片描述


2天之后的更新

上面的注册表设置在刚设置的当天管用, 也许重启机器/重新登录之后 Ctrl + Space 又回来了, 检查注册表, 发现没有变化.
现在发现必须还要更改另外一个快捷键:
请输入图片描述
请输入图片描述
如上, 修改2个地方之后, 就可以了.

感谢原作者的这篇更详细的, 带有说明的帖子:
http://wenku.baidu.com/link?url=4nnou9r5MPacphPa8S6C189zzVWlFKhl5X5GI2-8UkvVTQANKuN2kc-4pztHanTwRUjw9FDqJCuL5BiwNeRPjApMIWkzomWfkJrOk6EcDWS
微软官方关于 中文输入法半角/全角 注册表键的说明

ipkg, opkg 与 openWrt

ipkg 是 Itsy Package Management System 的缩写, 是类似与 Debian 的 dpkg 一样的, 专门用在嵌入式设备的轻量级包管理工具, 层被用在 OpenWrt, NSLU2, webOS 等操作系统. 如今, ipkg 这个项目已经停止更新, 曾经使用它的许多项目转而使用它的变种: opkg.


opkg 是 OPKG Package Manager 的缩写, 由 ipkg 演变而来, 所以也是用于嵌入式设备轻量级的包管理工具, 用来下载, 安装, 删除, 显示 OpenWrt 的包. 于 ipkg 不同, opkg 可以对 root 文件系统进行全部的包管理, 而不仅限于安装软件到特定的目录, 如 /opt.

opkg 的配置文件一般是 /etc/opkg.conf
搜索某个 package 的关键字: opkg info '*mysql*'
安装某个 package: opkg install nginx
安装的位置会参照/etc/opkg.conf 中配置的 dest的值, 你也可以指定: opkg install -d mnt nginx

src/gz attitude_adjustment http://downloads.openwrt.org/attitude_adjustment/12.09/brcm47xx/generic/packages
dest mnt /data
dest ram /tmp
arch all 100
arch brcm4709 200
arch brcm47xx 300

以上是修改小米路由器的 opkg.conf, 第一行指定 repo 的 URL, 2,3行指定安装可能的路径, 3,4,5指定可以兼容的包, 后面的数字, 100代表优先级最高, 200次之, 300最低, 但是也可以兼容安装.

参考:
ipkg in wikiipedia
opkg on openWrt
OpenWrt version history
Broadcom BCM47xx 系列

JavaScript 遍历页面链接, 并全部打开

接上一篇 路由器上 nginx 博客添加 fastcgi 缓存, 虽然有了缓存, 但是第一次访问的时候, 仍然比较慢, 怎么才能让用户永远点不到第一次呢? 就是服务器自己要 warmup, 如何让自己的博客系统 warmup 呢, 可以自己先遍历页面一遍.

打开 chrome 浏览器的 console, 执行如下代码(按需修改):

// 打开新的浏览器 tab, 并且返回 tab 的句柄
function openInNewTab(url) {
  var win = window.open(url, '_blank', "left=300,screenX=100,resizable,scrollbars,status");
  win.focus();
  return win;
}

var newLink;
var most = 10;  //最多并存的 tab
var winArr = new Array();   // 存放 tab 句柄的数组
var allLinks = $$("a");   // 得到所有的页面链接, 不是 jQuery方式哦
var cur = 0;
var urlMap = {};

// 间隔时间执行的函数
function loopStart() {
    try {
        newLink = allLinks[cur++].href;

        if (urlMap[newLink]) {
            // 已经打开过, do nothing, just continue
        } else {
            urlMap[newLink] = "yes"; //放入 map,表示处理过
            if (most < winArr.length) {  //达到最多, 关闭最早
                winArr.shift().close();
            }
                        // 只处理本站的链接
            if (newLink.indexOf("tianxiaohui.com") > 0) {
                console.log(newLink);
                winArr.push(openInNewTab(newLink));
            }
        }
        setTimeout(loopStart, 1000);
    } catch (ex) {
        console.log(ex);
    }
}

setTimeout(loopStart, 1000);

可能会遇到一个问题, 就是新页面打不开, 会出现如下状况, 这个页面默认被 block 了, 需要手动解封:
请输入图片描述
请输入图片描述