2013年2月23日

MediaWiki MathJax数学公式

原理

MediaWiki的插件一般由php脚本和javascript脚本组成,直接上传到服务器,并在配置文件内添加插件路径即可使用。

Math插件的安装比较繁琐,因为它还依赖于其他本地应用程序,如mineTex。Math是一个统一化的接口,用户使用同样的数学公式代码,却可以通过不同方式生成公式。这些方式包括:PNG图片,LaTex,Tex,HTML,MathML等。而Math并没有实现这些功能的模块,需要调用其它应用程序。

目前默认的后端是Texvc,它可以生成PNG图片。这种方式需要服务器安装mineTex本地应用程序。然而对于共享空间上的站点来说,可能无法安装软件。PNG图片的显示效果也不好,在屏幕分辨率高的情况下不够清晰平滑,不能随文本缩放。因此,MediaWiki未来将会采用另一种表现更好的方式——Mathjax。

MathJax是一个开源的JavaScript数学公式显示引擎,适用于几乎所有现代浏览器。它被广泛应用于Wiki,WordPress博客等站点。使用它非常简单,只要在网页上的head标签内加入

<script type="text/javascript"
   src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

即可。对于WordPress,MediaWiki等平台,若需要在整个站点启用此特性,则应在站点皮肤的HTML/PHP脚本中添加。

可以看出,这实际上是调用了MathJax在线引擎,JavaScript脚本存放于远程服务器上。若是在本地局域网内不能访问国际互联网,则可以下载MathJax并安装在本地,链接修改为本地站点。

步骤

对于MediaWiki,通过Math插件添加更加方便控制,且能应用于所有皮肤中。

第一步,下载Math插件

第二步,上传Math插件。将插件解压并将文件夹上传到extension目录中,命令文件夹为Math。

第三步,注册Math插件。打开LocalSettings.php,在插件注册部分添加:

require_once("$IP/extensions/Math/Math.php");

第四步,配置Math插件。打开/extensions/Math/Math.php,更改如下几条配置信息:
1.关闭Tex

$wgUseTeX = false;

2.开启MathJax

$wgUseMathJax = true;

3.设MathJax为默认

$wgDefaultUserOptions['math'] = MW_MATH_MATHJAX;

Math默认调用MathJax官方网站的引擎。若你在不连接国际互联网的情况下使用,或者希望使用自己的服务器提高效率,可以安装自己的MathJax引擎。

第一步,下载MathJax引擎

第二步,上传MathJax到服务器。

第三步,修改Math插件配置:

$wgMathJaxUrl = 'http://yoursite.org/mathjax/MathJax.js?config=TeX-AMS_HTML';

URL修改为你的MathJax引擎所在的位置。

对于学校内,企业内,组织内的网络系统,可以搭建一个开放MathJax引擎,供所有内部站点使用。

2013年2月4日

自定义名字空间及别名

名字空间的作用

名字空间可以理解为类似C++,Java的命名空间。名字空间能够对维基页面进行组织,划分页面的本质属性或者内容区分。这比页面分类更加显著,从名字便可以判断。名字空间还能够避免重名,如维基百科的"维基百科:首页"和"首页"就是不同的,一个是站点的首页,一个是名为"首页"的词条。

名字空间的原理

每一个名字空间都有自己唯一的ID,ID是不会变更的。这个ID是页面的属性,将页面绑定在这个名字空间内。而ID对应的名字空间的名字,则可以变化更改。若新建的名字空间与原来曾有的名字空间同名,并不会令那些页面转移到新名字空间下。就像一个人可以改自己的名字,但这个人的本质不变;当然,其他重名的人,也不是这个人。

名字空间具有名字和别名,就像一个人会有好几个名字。名字是默认显示的,而别名会链接到名字。别名让同一个名字空间具有多种书写方式,这样做的好处很多。首先如果你输入WP别名,会比输入Wikipedia更快,简写有时很有效;其次,可以避免混淆,误把近义词当作名字空间,结果没产生任何实际效果;还有就是本地化,中文用户可能更喜欢输入"分类:""维基百科:"而不是"Category:""Wikipedia:"。

MediaWiki具有一系列系统名字空间,比如主名字空间,帮助,项目,分类,模板,特殊及相应的讨论等等。这些名字空间不可更改。它们占据了0-99的名字空间ID,虽然并未全用。因此我们只能使用100以后的名字空间。

自定义名字空间

和大多数设置一样,自定义名字空间需要在LocalSettings.php里面完成。因此第一步就是打开站点的LocalSetting.php文件。

自定义设置一般都会写在配置文件的末尾,以免和系统默认设置混淆。加一段注释,如#Namespace Setting,会让配置文件更加清晰。

名字空间ID是整数,为了避免大意出错,通常会设置一个常量。因为一般会将名字空间和相应的讨论页名字空间定义在一起,所以它们总是成对出现。使用NS_前缀可以清晰地表达这个常量是一个名字空间ID。来看看下面这个例子:

define("NS_FOOL", 100);
define("NS_FOOL_TALK", 101);

然后就可以自定义新的名字空间了。

$wgExtraNamespaces[NS_FOOL] = "Fool";
$wgExtraNamespaces[NS_FOOL_TALK] = "Fool_talk";

如果你想要将这些名字空间设置为内容名字空间:

$wgContentNamespaces = array( NS_MAIN, NS_HELP, NS_FOOL, NS_TALK );

*这里的常量都代表着一个数字,NS_MAIN是0,NS_FOOL是100。
*内容名字空间和主名字空间本质相同,也会出现在主名字空间的搜索结果中。

这样,我们就为一对名字空间赋予了名字。以后在这些名字空间下创建的页面,会自动被归入相应的ID下。当名字空间的名字被修改后,那些页面也会随着变化。

最后,让我们来为它们添加别名。一个名字空间可以拥有无数多的别名,无论英文,中文还是保定话。

如果你只想设置一两个名字空间别名:

$wgNamespaceAliases['F'] = NS_FOOL;
$wgNamespaceAliases['F_talk'] = NS_FOOL_TALK;

如果你想设置一大堆名字空间别名:

$wgNamespaceAliases = array(
        'F' => NS_FOOL,
        '笨蛋' => NS_FOOL,
        '二傻' => NS_FOOL
    );

好了,现在维基站点就能够使用这些名字空间了,用名字和别名都可以。

2013年1月19日

为何对统一身份认证说不

当网络上出现了越来越多的站点,用户开始要注册大量的账户,记忆繁杂的用户名和密码。另一种局部的现象是,一个网站由多个子站点构成,各个独立的子站点需要对用户的需求提供统一的完善的服务。

于是,统一身份认证渐渐成为被广泛认同的解决方案。用户只需注册一次,便能用这个身份登录不同站点。各个站点通过共享用户信息,实现更一致更优秀的用户体验。

有人问我为什么ZJUBOT并未采用统一身份认证,用户访问问答、论坛和维基需要使用不同的帐号。我的回答是,为了避免某些问题。

统一身份认证确实是个有意义的创新,但它并非是万试灵药。我们不得不面对它本身带来的诸多问题。

首先是隐私泄露。每个站点的功能属性是不同的,问答网站、维基站点、在线论坛、网络博客各自有自己的特点。用户希望自己在网络博客上是实名的。他会在那里与很多认识的人分享东西,包含很多现实中的信息。而在论坛里,他不得不与很多不认识的人遭遇。他更愿意匿名,保护自己的隐私。然而统一身份认证将导致你在不同站点间的信息直接互相传递,这增加了隐私外泄的风险。我们不得不考虑这些站点隐私保护程度的差异,规避这种风险。

其次是管理的难度。在Mediawiki站点,我们通常不允许一个真实用户注册多个用户账户。我们必须警惕每个用户账户的身份,防止破坏者通过傀儡账户持续破坏。然而对于论坛来说,一个人拥有多个账户不是什么坏事,与人交流有时不得不采用其他身份。对于官方博客,可能只有少数成员有操作权限,并且使用真名。而一个问答网站,则可能允许匿名用户使用。统一身份认证带来的麻烦是,如果管理员需要用封禁的方式防控破坏,那么他就不得不让其他站点受到同样严格的限制。

对用户来说,统一身份认证虽然带来了使用的便利,却带来了不小的风险。当所有信息都被挂钩,现实中的人在网络上也很容易被定位。就像很多大学的论坛,用户注册使用学号的统一身份认证——我在论坛里发了一些有些激进的言论,第二天就被老师约去喝茶。

这种便利不是无偿的,统一身份认证也不单纯是一个使用方式的改变。虚拟身份如何得到保护,虚拟与现实的关系,是我们应当思考的。

2013年1月18日

多语言维基

多语言维基的实现,有三种方式。他们的架构及运作原理有很大差异。

多语言站点

为每种语言建立一个维基站点。这些站点具有独立的数据库和维基软件,可以看作是两个完全独立的网站。

它们通过二级域名,或目录进行区分,如 http://zh.wikibooks.org/ ,http://wikibooks.org/zh/ 。这样能够明显的看出站点之间的独立性。

多语言站点之间通过跨语言链接映射对应页面。这通常要由人工完成,也可以由机器人辅助添加。

优点:

  • 各语言站点之间保持相对独立,拥有更大的自由,独立进行维护改进,建立特有的方针指引
  • 用户浏览方便,单一站点能够在各方面进行本地化,如模板、界面、操作方式
  • 内容之间不具有强制的对应关系,适合发展本地化内容

缺点:

  • 占用更多资源,如数据库、存储空间、服务器负担
  • 维护难度大,需要管理更多站点,问题更多,需要更多人手参与工作
  • 内容发展不均衡,各语言之间难以同步发展

适用于那些用户量巨大,且各种语言都有,内容差异性大,且更新迅速的维基网站。如维基百科、openSUSE。

多语言子页面

在唯一的维基站点上,建立以英语,或者本地语言为主的内容页面。然后为每个页面建立多语言子页面,如 http://wiki.zju.edu.cn/浙江大学/en/ 。

优点:

  • 占用资源少,结构紧凑
  • 易于管理,工作量小
  • 内容易于同步,避免分化问题

缺点:

  • 浏览不方便,默认肯定要以英语(或某种语言)为主,为非英语用户阅读带来困难
  • 管理过于集中,如模板、社区规则、功能等,不易于根据本地化特征进行灵活控制
  • 造成一种语言独大的局面,其他语言受主要语言的把持

适用于那些用户较少,内容比较固定,以某一种语言(如英语)为主要源头的小型维基网站。如Blender Wiki。

多语言共存

即在一个站点上同时存在各种语言的页面,它们之间通过名称的差异区别,都是主页面。

如:Wikibooks,维基教科书;IBM,IBM (中文)。

优点:

  • 简单有效
  • 利于融合

缺点:

  • 不利于本地化
  • 结构杂乱
  • 主流语言主导

适用于那些以单一语言为主,但少量页面供多语言浏览的维基网站。如维基解密。

2012年9月21日

杭州机器人相关市场

做机器人少不了要买点东西。原材料、电子元件、工具都是必不可少。

在杭州这样的科技型大城市,想找到这些东西并不困难。有几个比较常去的地方你一定得知道:

浙金钢材市场

是经营金属原材料的大型市场。想要买角铁、钢板、铝板什么的,这里是最佳去处。

正门入口处就有一家铝材店,好像是唯一一家。钢铁材料的就非常多了。

地点:杭州市下城区焦家里一弄

浙江大学紫金港校区出发路线:校门口公交站乘坐K93路公交车,打铁关站下车,步行百米左右就到了。

长城机电市场

是经营机械零件、工具、电气设备的地方。想买轴承、轮子、螺丝、钳子、锉刀什么的,这里都能找到。

地点:杭州市下城区德胜快速路

浙江大学紫金港校区出发路线:校门口公交站乘坐K93路公交车,德胜东村站下车,向东步行,沿着路北侧走1000米左右就到了。

杭州电子市场

经营电子原件和电子设备的市场。各种电子元件都有,也提供打板、定做等服务。

地址:杭州市拱墅区登云路639号

浙江大学紫金港校区出发路线:校门口公交站乘坐K10路公交车,文化商城站下车,步行百米就到了。

2012年9月9日

Android开发工具无法更新的解决办法

在大陆的Android开发者可能会面临Android开发工具无法更新的问题。这个问题主要是因为Google的服务器不可连接。解决方法如下:

1.换用http连接,而非https

即使用非加密连接。有些情况加密连接是不被允许的。如果还不行,继续尝试下面的做法。

2.更改Hosts文件的dl-ssl.google.com

即使用特定IP访问,到2012年9月可用的IP地址之一是

#google_android更新
203.208.46.146 dl.google.com
203.208.46.146 dl-ssl.google.com

添加到hosts文件中就可以了。如果此IP不能使用,你需要改用其他服务器IP。

2012年8月30日

学习软件多思量

对于现代人而言,学习一些软件必要的。在学习的过程中我们通常会面临以下问题:

  1. 应不应该学习该软件?它是否有用?我是否会用到它?投入与回报是否划算?
  2. 当有多种同类型软件的时候,我应该选择哪个?参考标准是什么?
  3. 我应该成为专家还是浅尝辄止?
  4. 是用时再学还是早做准备?

这些问题应该是困扰人们最多的问题了,通常人们在经历过之后就能得出自己的答案。

是否应该学习该软件

这需要根据情况做出决定。决定因素很多,该软件给你带来的益处,学习它付出的成本,回报周期,可拓展性。

如果它对你的学习和未来的工作有极大的益处,比如Office软件,那么它可能是值得学习的。但如果仅仅是出于证明自己很"强"的目的,比如学习Maya却不会在学习工作中用到,那么它就不那么值得学了,甚至是浪费时间。要从长远打算,即使你大学时读的是电子,而你的理想是做一名机械工程师,那么学习AutoCAD等软件可能会在未来助你一臂之力。而为短期目的往往划不来,比如你学习Rinoceros只是为了完成期末作业,那么你或许不应该投入过多的时间,因为用处太少了。

学习成本是非常重要的考量指标,它意味着学习的可行性。比如你需要在课程作业或者汇报中插入一段视频,而视频需要处理。对于从未接触过视频处理的你来说,可能很少会遇到此种需求。而学习视频处理所需要的时间和精力是你无法承受的,那么可以考虑其它方案。比如求助其它会此项技能的人,甚至在威客网站上悬赏。

即使学习成本不高,如果回报率过低,也是不值得做的。你没必要去学一大堆毫无用处的软件。

学习一种软件是否可以扩展到其它方面,一石二鸟呢?有时候是的。你学习了Photoshop之后,关于图层、选区、滤镜的知识也能应用到其他软件上。这样的投入回报就更高。从长远来看,节约了学习成本。

应该选择同类中的哪个

多查阅资料,比较优缺点。

看相关行业中同类软件的使用情况,应用最广的几种值得关注。

关注行业标准,软件的兼容性,以及可交换性。符合行业标准,兼容性好,与其他软件可交换性好的软件值得关注。

学习成本高低,影响选择。比如Rinoceros比Maya的学习成本低,从成本考量,前者更具优势。

适合自己的思维习惯。

浅尝辄止还是成为专家

除非对你的职业生涯或生活起到决定性作用的软件,否则请不要试图成为软件专家。那样做的成本太高了,尤其是那些复杂而庞大的软件。并且,越是深入,学习的回报率就越低。

用时再学还是早做准备

建议你先对一个软件在未来的作用做出预测。如果该软件在未来非常重要,且学习很困难,你没有把握在有限时间内学会,或者你想先人一步,应该早做准备。反之,如果它不是很重要,甚至可能不会用到,而且学习起来很简单,你也不需要领先旁人,那么用到的时候再学应该是更明智的。

2012年8月25日

phpBB图片缩放插件安装

phpBB本身可谓几近节俭之极,甚至没有自动缩放图片的功能。

因此我们需要安装MOD,ReIMG是个不错的选择。

首先在phpBB官方网站下载此插件。

然后按照安装说明,上传文件到ftp,并修改相应文件。

最后是安装,在浏览器中输入域名+安装文件install-reimg.php。安装完成。

这时可能还不能立即看到效果,必须在管理面板首页"清空缓存"。

这时,reimg可以在默认phpBB主题下使用,但如果你想在自定义主题下使用,就需要同样照安装说明修改其他风格文件夹中的文件,并上传mod文件夹到每个风格的template文件夹中。