在河里抓鱼的熊

抓鱼杂谈

WikiEditor插件安装配置

without comments

我自己有个meidiaWiki,这是为了积累知识所做的笔记,通过wiki的方式组织,强迫自己将笔记做得正规些,有条不紊,时机成熟的时候再放到网上。

为什么安装WikiEditor?

写wiki最烦恼的是格式,尤其是那些枯燥又容易混淆的格式符号。如果你用过wiki,几个月没有用了,还能记得非数字列表怎么表示吗?

去年听说wiki老总立志要让编辑人员更容易使用。最近看到meidawiki官方网站界面变得更加漂亮了,编辑页面也有了很大的变化,以往那些单调的编辑功能变得丰富了,而且还能插入特殊字符、有帮助,编辑的确更加容易。所以我打算把这个用到我的wiki上。

 

安装

我的安装过程并非一帆风顺。下载新的wiki系统并执行了升级程序后,并没有看到那漂亮的编辑器。全新安装也不行。于是仔细检查官方网站,发现这是mediaWiki的一个extension,叫UsabilityInitiative,下载与自己wiki版本对应的程序版本,需要翻墙。

最简单的流程是按照官方页面给出的方法,省时省力,又不费脑细胞。别像我一般傻,折腾一大堆,最后才恍然大悟!

官方方法:

  1. Get the extension with distributor or svn and drop it into MediaWiki directory /extensions
  2. Setup your LocalSettings.php as explained in README file.
  3. Run php maintenance/update.php from the command line (see update.php and also here)

This is an example, stable configuration for your LocalSettings.php file for the 1.16 release version:

// UsabilityInitiative/Vector
require_once("$IP/extensions/UsabilityInitiative/Vector/Vector.php");
$wgVectorModules['editwarning']['global'] = false; // Don't enable EditWarning globally
$wgVectorModules['editwarning']['user'] = true; // Allow users to enable EditWarning in their preferences
$wgVectorUseSimpleSearch = true; // Need this as well for SimpleSearch
$wgDefaultSkin = 'vector'; // If you want to change the default skin for new users
$wgVectorUseIconWatch = true; //Enable star icon to add/remove page from watchlist
// UsabilityInitiative/WikiEditor
require_once("$IP/extensions/UsabilityInitiative/WikiEditor/WikiEditor.php");
$wgDefaultUserOptions['usebetatoolbar-cgd'] = 1;  // Default user preference to use toolbar dialogs
$wgWikiEditorModules['toolbar']['global'] = true;  // Enable the WikiEditor toolbar for everyone
$wgWikiEditorModules['toolbar']['user'] = false;  // Don't allow users to turn the WikiEditor toolbar on/off individually

接下来我讲讲我的过程:

  1. 读README文件。我当时没有找到这个页面,而是找到了WikiEditor页面,结果走了一大圈弯路(我好傻,居然没有看到上面的醒目提示,说This extension has been migrated from Extension:UsabilityInitiative.)。我当时看到那个页面上说按README做,而页面链接过去的README是svn最新版本的,不是1.16的,结果怎么都不行。后来看自己目录下的READEME才隐约领会到,最后几乎把整个README内容都copy到了LocalSetting.php里面(找对书籍和信息很重要,不然会误入歧途!)。
  2. 执行SQL。当时我以为把LocalSetting.php设置对了就搞定了,没想到到页面上设置的时候却报SQL错误,说表不存在。半天没有找到初始化配置页面,只能动手登录mysql,然后手动执行那些找出来的sql文件。sql文件在哪?在extensions/UsabilityInitiative/下find一下吧。

配置

  1. 在“特殊页面”中找到“Wiki数据和工具”一节,点“启用Usability Initiative”
  2. (可选)在“设置>参数设置>编辑”中找到“新功能测试”,然后按喜好设置即可配置选项

过程很简单,但不要走错,错了就复杂了!

Written by qianxiong

April 8th, 2011 at 3:39 pm

Javascript的对象与数组

without comments

Object:

  1. 当Object被当作函数而不是构造器被调用时,它将扮演类型转换器的角色。
    typeof 522  //"number"
    typeof Object(522) //522
    var a = Object(522);
    typeof a  //"object"
    

     

    1. Object ( [ value ] ):
      如果value为null,undefined或不提供,则创建并返回一个新的Object对象。这跟使用Object构造方法一样。
  2. Object 构造方法
  3. Object构造器的属性
    除了包含一个内部属性length(此值总是1)外,还包含: 

    1. Object.prototype
      包含三个属性:{DontEnum, DontDelete, ReadOnly}待补充
  4. Object的Prototype对象的属性
    1. Object.prototype.constructor:内建object构造器
    2. Object.prototype.toString ( ):待补充
    3. Object.prototype.toLocaleString ( ):待补充
    4. Object.prototype.valueOf ( )
    5. Object.prototype.hasOwnProperty (V):检查是否包含V属性。
      var obj = {name:"zhanglin", age:25};
      var p = obj.hasOwnProperty("name"); //p = true
      var q = obj.hasOwnProperty("sex"); //q = false
      
    6. Object.prototype.isPrototypeOf (V):待补充
    7. Object.prototype.propertyIsEnumerable (V):待补充

Array:

 

null:

undefined:

typeof:

 

Written by qianxiong

March 31st, 2011 at 1:34 am

Posted in 技术

Tagged with ,

VIM查找时需要转义的字符

without comments

首先,VIM中在查找时使用正则表达式进行。但是,不能将平常的正则表达式直接搬过来使用。原因是标准正则中有些符号与VIM中的一些固有符号有冲突,这时就需要对这些符号转义,才能表示这个符号表示正则表达式的操作符,否则表示VIM操作符或者字符本意。

对于这些将在VIM Search时需要转义的字符总结如下:

  1. |
  2. &
  3. ()
  4. +
  5. =
  6. ?
  7. \{n,m}  n到m个,按最多匹配
  8. \{-n,m}  n到m个,按最少匹配
  9. <>  匹配单词边缘

Written by qianxiong

September 16th, 2010 at 10:37 am

Posted in 经验之谈

Tagged with , ,

命令行下批处理图片

without comments

每次拍完照片之后,因为照片太大无法直接上传到空间里面,需要将照片缩小。这时总是因为工作量太大而无法让人望而生畏。如果使用windows,而且手头又有photoshop,那很好。因为photoshop里面有个批处理功能叫Action,但是没有在windows下,更没有photoshop,有没有简便的方法可以做这种简单重复的事情呢?
答案是肯定的。那就是命令行的”imagemagick”!imagemagick是一组命令,包括convert, identify, mogrify, composite, montage, compare, stream, display, animate, import, conjure.
使用convert命令对原图做缩放处理,并将缩放后的图片放到resized/目录中:

find . -maxdepth 1 -name '*.JPG' -exec convert {} -resize '1024x1024' resized/{} \;

某些网站的图片上传功能要求后缀名小写,这时需要做一次转换。使用如下命令:

for f in *; do mv $f `echo $f | tr '[:upper:]' '[:lower:]'`; done

或者使用如下命令(更简单):

find resized -depth -exec rename 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;

详情请看这里这里

Written by qianxiong

July 28th, 2010 at 5:56 pm

正则与中文

without comments

在正则表达式中,拉丁字符的匹配很是方便,可是如果要匹配的内容中有中文或者中文标点符号就很恼火。今天特意对中文码表做了细致的了解,分享给大家。
按照Unicode Block分别介绍:

  1. Basic Latin(\u0020-\u007E):
    这些是基本的可见ASCII码
  2. HalfWidth and FullWidth Forms(\uFF01-\uFFEE)
    全角符号(\uFF01-\uFF60):包含了大部分中文输入法所输入的符号。
    半角符号(\uFF61-\uFFEE):
  3. Genaral Punctuation(\u2000-\u206F):
    包含减号、破折号、省略号、单双引号、百分号、千分号、章节符号、分秒符号
  4. CJK Synmbols and Punctuation(\u3000-\u303F):
    常见的有下列符号《》「」『』【】〖〗
  5. CJK Unified Ideograph(\u4E00-\u9FFF):
    包含所有的中文汉字。因为从9FCC到最后都未定义,所以正则表达式中直接验证\u4E00-\u9FCB即可。有些朋友在介绍中文的正则匹配时说是从\u4E00-\u9FA5,但是在9FA5之后还有30个可见字,8个不可识别字(已分配,但无汉字实现),虽然最后有52个编码未分配,但起码也要在9FC3处结束,而不是9FA5。
  6. CJK Compatibility Ideographs(\uF900-\uFAFF):
    另一块汉字区域。FADA-FAFF未分配,所以仅在\uF900-\uFAD9有汉字。不过,这一区域的汉字在CJK Unified Ideograph块中都存在,不知道当初卫生么会分配这么一小块来放汉字!

Written by qianxiong

July 1st, 2010 at 1:21 pm

Posted in 技术

Tagged with , ,

愚人节kernel.org之怪状

with one comment

今天在LinuxToy上看到kernel.org主页完全翻转的怪状,发生这一情景的时间是4月1号,愚人节上。我看大部分人的意见都不太靠谱,因此也陈述了自己的意见,我不赞同其中的截图说和css说,见41楼。重复一下我的陈述:

33楼原文:还有数学符号。⊥ 这个就是。ǝ 是国际音标。ƃ 是斯拉夫字母。页面是 utf-8 的。

赞成33楼xiaq的说法。现在似乎还没有让元素倒过来的css功能吧!即使有,下面两点也讲不通:

  1. 倒过来之后的文字格式应该保持住才对!比如”Security”倒过来之后“ecurit”的底线应该与”S”的底线保持一致,而那个页面却是”ecurit”的顶线与”S”的顶线一致。
  2. 字型应该不变。但是如”A”倒过来之后变成了”∀”,”e”倒过来后变成了”ǝ”,”g”倒过来成了”ƃ”。字型上发生了很大的变化,这说明更本不是同一个字。 所以,这应该是将所有字母顺序用js反过来,然后找了对应相似的字母替换之后得到的。

Written by qianxiong

April 3rd, 2010 at 12:08 pm

Posted in 技术,杂谈

Tagged with

VIM Tip Wiki

with 2 comments

我用VIM已经好多年了。但一直不知道怎么用VIM自动格式化代码,每次都麻烦得要命,今天终于决定google一下。结果居然让我发现一个专门介绍VIM小技巧的wiki,叫VIM TIP WIKI(需要翻墙,又是GWF)。喜欢VIM的朋友可以多上去看看,翻墙方法自己找,抱歉!

Written by qianxiong

April 1st, 2010 at 11:32 am

Posted in 技术

Tagged with ,

网站偶尔被重置了

with one comment

刚才打开我现在的这个网站想记点东西,结果居然返回RESET。我心里大呼“完了“!可是我的页面内容就这么点,怎么会有敏感词呢。于是我一篇一篇的点开试,看看到底是访问哪一篇内容时会被重置。结果又没有出现RESET的情况了!再重新打开首页,也没有。好奇怪!难道GWF知道我在试探他?

反正GWF是盯上我了,TMD,真是无恶不作!

Written by qianxiong

April 1st, 2010 at 11:22 am

Posted in 杂谈

Tagged with ,

北京的宝马警车(图)

with 2 comments

中午吃饭,路上偶见宝马警车。可能是在那里蹲点,或者在那里偷懒!头回亲眼所见,偷偷拍了张照片,犒赏各位看官:

北京的宝马警车

北京的宝马警车

Written by qianxiong

March 30th, 2010 at 2:03 pm

Posted in 路闻

Tagged with ,

一点关于西厢计划安装配置的问题

without comments

对于崇尚自由的人们来说,西厢计划简直就是神来之笔,它让我们在这个黑暗的年代看到了曙光,为我们打破信息谎言创造了途径。最值得赞叹的是:这是规则之下的博弈。gfw今天棋逢对手了!

具体的编译、安装和配置请看http://code.google.com/p/scholarzhang/wiki/INSTALL
配置请看http://code.google.com/p/scholarzhang/wiki/USAGE
为了不重复发明轮子。在此,我仅仅提供一些应对问题的经验。

如果按照官方文档的指引,基本能够成功,但是从留言和我自己的经历来看,在中途可能还是有一部分人会遇到一点问题而成功不了。这些问题官方文档没有提及,也许是因为软件作者本身水平太高,这些问题基本遇不到,或者顺手就解决了,也就没有正式的写道wiki中。

好了,说正题。

  1. 问题一。大部分朋友会遇到找不到下面三个文件:
    /lib/xtables/libipt_ZHANG.so
    /lib/xtables/libipt_CUI.so
    /lib/xtables/libipt_gfw.so
    到/lib/xtables/下的确找不到这三个文件。不过编译安装后我们可以在/usr/local/libexec/xtables/下找到文件名相似的个文件(而源文件目录下,生成的也只有这几个文件,可以断定就是他们几个)。因此,可以从/usr/local/libexec/xtables/下创建链接文件到/lib/xtables/下:
    cd /lib/xtables
    sudo ln -s /usr/local/libexec/xtables/libxt_CUI.so libipt_CUI.so
    sudo ln -s /usr/local/libexec/xtables/libxt_ZHANG.so libipt_ZHANG.so
    sudo ln -s /usr/local/libexec/xtables/libxt_gfw.so libipt_gfw.so
  2. 问题二,IP地址解析仍然不正确。即使正确设置了自己的DNS server为8.8.8.8也解析不到正确的www.youtube.com地址。反复检查了/etc/hosts文件以及/etc/resolv.conf文件都找不到哪里出了错。于是浏览器要么出现网络错误,要么出现refuse错误。如果使用命令
    nslookup www.youtube.com

    则一如既往的错。但如果使用nslookup的交互模式,并设置了dns server 为8.8.8.8,则能够解析到正确的IP地址。其实,这是因为在还没有执行ipset和iptables命令之前访问了youtube,那时DNS被污染,因此本地的DNS cache记录了被污染的DNS地址。通过执行下面的命令可以清除本地DNS Cache:

    sudo resolvconfig -d wlan0
    sudo resolvconfig -d eth0
    
  3. ipset的规则是什么,example中的规则怎么理解?
    example中的规则一般如这样”-A YOUTUBE 208.117.224.0/19 ”。前面的-A和YOUTUBE 容易理解。但是”208.117.224.0/19″是什么?其实,这是表示一个网段,将208.117.224.0转化为二进制后应该是”11010000.01110101.1110000.00000000″,每段8位,第19位是第三段第三位,就是最后那个1上。”208.117.224.0/19″就表示二进制的前19位是相同的,这表示一个网段的IP地址。与子网掩码表示的方法不同,但意思是一样的。

每个步骤保证正确之后,可以写成一个脚本,以简便每次启动过程:

首先,导出刚才的那些设置:

sudo ipset -S > ipset.ruls
sudo iptables-save > iptable.ruls

接着,把它们放到/etc目录下面,(不能放到/home目录下,因为到时候会用sudo执行,root用户访问不到自己的目录):

sudo mkdir /etc/west-chamber
sudo chmod a+w /etc/west-chamber
cp ipset.ruls iptable.ruls /etc/west-chamber/

最后,写一个脚本,并赋予可执行权限:

sudo touche /usr/local/sbin/west-chamber.sh
#!/bin/sh
#restore rules
ipset -R < /etc/west-chamber/ipset.ruls
iptables-restore < /etc/west-chamber/iptable.ruls
#set trusted nameserver
echo nameserver 8.8.8.8 > /etc/resolv.conf
echo nameserver 8.8.4.4 >> /etc/resolv.conf

#clear the resolve catch
resolvconf -d wlan0
resolvconf -d eth0
sudo chmod a+x /usr/local/sbin/west-chamber.sh

现在就可以执行

sudo west-chamber.sh

来启动西厢计划了。

现在打开youtube看看吧!

附A:一些有用的命令:

查询所有www.youtube.com的IP并保存到文件中:

$nslookup www.youtube.com | grep Address | grep -v '#53' | awk '{print $2}' >> www.youtube.com.ip

清除本地的dns缓存:

$resolvconfig -d wlan0
$resolvconfig -d eth0

统计有多少个IP:

$cat www.youtube.com.ip | sort -g | uniq | wc -l

Written by qianxiong

March 21st, 2010 at 5:19 pm