vim脚本vimscript

Vim的脚本语言被称为Vimscript,是典型的动态式命令语言,提供一些常用的语言特征:变量、表达式、控制结构、内置函数、用户自定义函数、一级字符串、列表、字典、终端、文件IO、正则表达式模式匹配、异常和集成调试器等。
在学习Vimscript时,你可以学习Vim自带的Vimscript文档,打开Vim自带的Vimscript很简单,只需在Vim内部执行:help vim-script-intro(Normal模式下)

READ MORE

vim的模式

通常模式(n)

在其它任何一个模式下,用ESC或者 ctrl+c 键可以退到通常模式

插入模式(i)

在这个模式下,vim像一个常见的编辑器.在通常模式下,用i或者a可以进行本模式,当然,还有一些其它命令也可以.

可视模式(v)

在这个模式下,可以使用hjkl进行选择.然后进行copy,paste或者其它操作. 在通常模式下,用 v or shift+v 命令进行可视模式.

列块操作模式(V)

这是块操作模式. 在通常模式下,用 ctrl+v 进入本模式.

例如注释多行代码等( I, #, ESC

还有 行尾列块操作模式

1
gg, ctrl+v, G, $, A

修改模式(R)

这是改写的模式.很多软件法用insert键来完成这个切换.在vim中,从通常模式用R即可进入改写模式.

在PHP中近似实现AOP思想

简介

AOP 为Aspect Oriented Programming的缩写,意为: 面向切面编程 ,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

主要的功能 是:日志记录,性能统计,安全控制,事务处理,异常处理等等。

主要的意图 是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

PHP实现

PHP的原生内核并没有相关的实现,不过借助魔术函数可以近似实现。

下面的代码主要实现了对实现了对业务类的包装:

  • 定义了两个层次的前置和后置函数:可以全局的(类层面的所有action),也可以局部的(对某个action的)
  • 允许继承

代码如下:

READ MORE

失控:石头是进化缓慢的生命

今天中午看失控的时候,有这么一节:

1
石头是进化缓慢的生命

以前也考虑过这样的问题:

我们作为一个自然人,向体内看,我们会看到细胞等各种碳水化合物,那么站在细胞的角度来看,他们会不会觉得自己也是一个个的“人”?再往外看,我们一个个自以为是人的人,会不会又是一个庞然大物的细胞?例如,把整个地球看成一个“巨人”,这是否成立?

这涉及三个层次的“人”:

  • 细胞
  • 自然人
  • 地球

人会生老病死,那么细胞会不会?地球会不会?显然都会,不同的只是生命的长短。细胞在人的体内, 不停的做着看似无规则的运动,却基本不会感知我们作为人自身的运动;而人生活在地球上,我们每个人也在不停的运动着,基本也不会感觉到地球本身的运动。

细胞死了之后会怎么样,会进入怎么样的循环里,这个不太清楚(生物没学好);人死了之后,经过若干的化学反应,又会融入到自然界中,慢慢被植物所吸收,植物又被动物所消化,不知不觉又进入了我们的身体内,这是一个不断循环的过程; 而地球作为星球,所谓的死,应该就是解体,解体之后碎片显然会在宇宙间漂浮,慢慢的又被吸引到其他的星球上,这也是一个循环。

这个结论在科学上是否成立,其实对于我们来说并不重要,我们所收获的是,我们所理解的生物和非生物,其更抽象的层面上的“生命”是何其的相似。

对于我们来说,这是一个思维的游戏。

1
PS: 失控是一本好书,值得一看。

vim中替换^M符号

在使用git pull时,发生文件冲突,合并冲突时,发现行尾显示了很多 ^M 的符号。这是一个特殊符号,可以使用替换:

1
:%s/^M$//g

注意:命令中的 ^M 需要用“ CTRL-V CTRL-M ” 生成。

vim命令汇总

vim 命令汇总

http://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 单词操作
yw 复制单词
dw 删除单词
n== n行缩进
. 重复刚才的命令
z+f % 折叠代码
o 插入一个空行
CTRL+v, I, #, ESC 多行注释(#可以换成其他的,例如//)
删除多行注释的方法,同样 Ctrl+v 进入列选择模式,移到光标把注释符选中,按下d,注释就被删除了
输入当前文件名:
1. 进入插入模式
2. <C-R>
3. %

ElasticSearch问题汇聚

es只允许本地访问

1
2
sudo iptables -I INPUT -p tcp --dport 9200 -j DROP
sudo iptables -I INPUT -s 127.0.0.1 -p tcp --dport 9200 -j ACCEPT

部署集群时出现:No route to host

iptables的问题,清空里面的规则,关闭。

R对数组指定下标顺序输出

问题

1
2
3
4
> table(week.data['星期'])
星期二 星期六 星期日 星期三 星期四 星期五 星期一
34 46 37 55 40 46 65

table函数可以统计各个值的频度,但是输出的顺序却不是我们所期待的(期待的顺序是从星期一到星期日)。特别是使用barplot生成柱状图时,如果不按顺序,那肯定是不行的。

解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CaiSortByFields <- function(p.arr, p.fields) {
# 把数组按照指定顺序输出
#
# Args:
# p.arr 数组数据
# p.fields 指定顺序
# Returns:
# array
tmp <- array()
for (i in p.fields) {
tmp[i] <- p.arr[i]
}
# 去掉缺失值
tmp[!is.na(tmp)]
}

这个方式比较曲折,应该有更直接的方式的。

国内外大数据创业企业的融资情况

大数据行业融资情况

业余时间整理的,见:https://docs.google.com/spreadsheet/ccc?key=0AtdtDh06pqwEdHpXUHZQVzZLb0k4U09mUjJqV1gyVWc&usp=sharing

另推荐视频:http://v.youku.com/v_show/id_XNTkyNDI1OTcy.html

及网站:https://angel.co/big-data

R语言的小技巧

ifelse和if … else …不同

认为相同,主要是受到之前经验的影响,不过这里的ifelse是向量化的运算,返回值的长度会和test的长度一致。可以看ifelse的源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function (test, yes, no)
{
if (is.atomic(test))
storage.mode(test) <- "logical"
else test <- if (isS4(test))
as(test, "logical")
else as.logical(test)
ans <- test
ok <- !(nas <- is.na(test))
if (any(test[ok]))
ans[test & ok] <- rep(yes, length.out = length(ans))[test &
ok]
if (any(!test[ok]))
ans[!test & ok] <- rep(no, length.out = length(ans))[!test &
ok]
ans[nas] <- NA
ans
}
1
2
> ifelse(c(T, F, T), c(1,2), c(5,6)) # 长度不够,则会自动补充
[1] 1 6 1

install RCurld的问题

在ubuntu12.04上安装:

1
install.packages("RCurl")

提示:

1
2
3
checking for curl-config... no
Cannot find curl-config
ERROR: configuration failed for package ‘RCurl’

解决:

1
sudo apt-get install libcurl4-gnutls-dev

附: http://cos.name/cn/topic/108303