将rapid validation的库依赖从prototype.js迁移到jquery

该项目是由baiqiu编写的RapidValidation校验框架,框架原始的依赖是prototype.js, 为了以后维护和改造,将库的依赖替换成了jQuery,目前已完成了基本功能的改造,去掉了tooltip和effect, 项目地址:codepiano/RapidValidation · GitHub

原始作者:

modified by badqiu (badqiu(a)gmail.com)

blog: badqiu - ITeye技术网站

Project Home: rapid-validation - Rapid javascript validation framework - Google Project Hosting

Rapid Framework Project Home: rapid-framework - java web快速开发脚手架 - Google Project Hosting

Version 1.5.1


在cmd命令行下快速切换工作目录

有时候会碰到需要在cmd里面切换工作路径的需求,而目录的层数又比较深,于是写了这个脚本, 可以存储路径,并切快速切换

建议放置在windows/system32目录下面,或者将脚本所在文件夹加入path, 这样可以直接在终端里面输入ls或者po调用脚本,使用的时候按0增加目录名称和地址, 脚本启动的时候会打印出所有存储的路径,可以直接输入编号进行工作路径的切换

ls.bat可以在cmd里面切换工作路径,po.bat可以直接打开路径对应的文件夹,使用方式相同

目前没有做删除目录地址的功能,可以通过手动修改path.txt删除目录地址,path.txt和脚本在同一目录下

项目地址:codepiano/GuideBoard · GitHub


《编程珠玑》习题-如何用位逻辑实现位向量

《编程珠玑》第一章提到了一个排序问题,具体需求抄在下面:

输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=107。如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该整数相关联。

输出:按升序排列的输入整数的列表。

约束:最多有(大约)1MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多几分钟,运行时间为10秒就不需要进一步优化了。

整个解题的思路是通过位向量来进行排序,使用107个位来代表从0~107的数,如果文件中包含数n,则将第n位置为1, 输出的时候按序遍历每一位,如果该位为1就输出该位的序号,即可得到最后的排序序列。

书中实现位向量是通过整数数组来实现的,或许是因为c语言中没有位向量这个数据结构, c++中的标准模板库已经提供了bitset这个数据结构。 实现的原理如下:

由于一个整型是32位,所以只需定义一个长度为107/32的整型数组即可提供所需的二进制位,整数数组记为A。 从输入文件中读入一个整数,将这个整数整除32,得到的结果即是表示该数存在的二进制位记录在数组的哪个下标的整数中, 比如111,用111整除32得3,即代表该数存在的二进制位在数组下标为3的数,即A[3]中。 将读入的数模32,得到的数即为代表该数的标志位在A[3]中的位置,比如111模32结果为15, 则将A[3]的第15位置为1,即A[3]现在为00000000000000000100000000000000,即为32768 如此即可使用整型数组模拟位集合,比如读入的第二个数为127,127整除32为3,模32为31,则A[3]为10000000000000000100000000000000 代码如下:

//一个整型有32位
#define BITSPERWORD 32
//定义移位的长度,2的5次方为32
#define SHIFT 5
//定义取模的掩码
#define MASK 0x1F
//输入文件中整数的最大范围
#define N 10000000
//定义存储的数组
int a[1 + N/BITSPERWORD];
/*
 *根据参数i,设置对应的标志位的值
 *i>>SHIFT,i右移5位,相当于i/32
 *i & MASK,i和11111做与运算,得到i%32
 *1<<(i & MASK),1左移(i%32)位,将结果与a[i>>SHIFT]做或运算
 *即可设置整数i对应的标志位为1
 */
void set(int i)
{
	a[i>>SHIFT] |= (1<<(i & MASK));
}
/*
 *根据参数i,设置对应的标志位为0
 */
void clr(int i)
{
	a[i>>SHIFT] &= ~(1<<(i & MASK));
}
/*
 *根据参数i,判断对应的标志位是否为1
 */
int test(int i)
{
	return a[i>>SHIFT] & (1<<(i & MASK));
}

100个常用的vim命令中文版

这篇文章被标题党冠以《程序员应该知道的100个vim命令》在网上流传,其实这些命令对速成有些帮助, 在加深对vim的理解方面没有太大用处。想用好查找替换功能就必须能熟练写正则表达式, 想方便的操作文件就必须对shell命令有了解,想写程序方便就要装插件模拟IDE的功能, 有些功能可能还要自己动手写shell脚本或者插件在vim中进行调用

从我自己的经验看来,想用好vim,就必须理解vim命令的设计风格,看几遍vim帮助文档,经常使用, 学习vimscript,没有任何可以速成的方法

这个文章作为tips也不合格,完全不如这篇 Best of VIM Tips, gVIM's Key Features zzapper。 作者说自己是一个有15年vi经验和7年vim经验并且还在继续学习的人

翻译到一半觉得这篇文章完全没有翻译的价值,不过还是继续翻译完了,地址: 常用的vim命令


—  原创作品许可 — 署名-非商业性使用-禁止演绎 3.0 未本地化版本 — CC BY-NC-ND 3.0   —