debian wheezy上安装amule-daemon

amule是一款优秀ed2k,kad2客户端,还支持web管理。不但有GUI图形前端,而且可以在不打开图形的情况下,以服务的形式运行,通过amuleCMD通过命令控制,或者直接通过web页面控制。

apt-get install amule-daemon amule-utils

安装完后发现,必须以一个用户的身份来运行amule,网上常见的是以一个登录用户,作为其运行用户,考虑到我的本意是作为服务,所以,创建一个叫amule的用户来运行他。默认情况下似乎已经创建了amule组,没有请手动创建。当然,这个用户不需要登录,也不需要密码。但是由于amule的默认配置必须在运行其命令的用户的家目录中,所以需要给这个用户设置一个家目录。考虑到debian的一些传统,建议吧家目录设置为/var/lib/amule。

mkdir /var/lib/amule
groupadd amule
useradd -d/var/lib/amule -s/bin/false -g amule amule
chown amule:amule /var/lib/amule

ok至此你已经有了一个运行amule的账号了,现在需要修改amule的配置,让其用这个账号来运行,很简单,修改/etc/default/amule-daemon

# Configuration for /etc/init.d/amule-daemon
# The init.d script will only run if this variable non-empty. 
AMULED_USER="amule"
AMULED_HOME=""

这样配置后,当你/etc/init.d/amule-daemon start 的时候,就是以amule的身份运行的。
现在试着运行一下

/etc/init.d/amule-daemon start

应该没有什么问题,此时在amule的home目录下建立了一个.aMule文件,里面就是所有的配置文件。

sudo -u amule amuleweb -w

给amule写入一个空的配置,此时出现.aMule/remote.conf
修改。amule下的remote.conf和amule.conf来改变amule的行为
对于配置中的所有的密码都是你的实际密码的md5值,所以,如果你要设置密码为123456

echo -n '123456' |md5sum |cut -d ' ' -f 1
e10adc3949ba59abbe56e057f20f883e

配置中password=e10adc3949ba59abbe56e057f20f883e
要注意的是,remote.conf和amule.conf的配置有重复的地方,但有几个名字不一样,最好保证其一致。
配置中0代便假,1为真
知道了这个,我们就可以轻松的改配置了。

发表在 GNU/linux | 标签为 | 留下评论

android 软件安装经验

最近给家里人捣腾手机和平板,还好两个都是android的,两天捣腾下来,发现一些喜欢的有特色的软件,给大家推荐。

android软件安装分为两类一类是有root权限的,一类是没有root权限。二者各有优缺点,有了root,android的所有能力便都能发挥出来了,当然也可能让不法程序坑人。

下面是我的装机推荐表,其他的都大同小异,大家都觉得差不多吧

Avast 个人认为最优秀的安全软件
瓦力流量计 不但记录流量,而且可以压缩流量
Samba Filesharing 共享文件服务,需要root
Ftp 服务器 可以直接用浏览器下载的共享服务器
doubanFM 国内听歌必备
WPS office 免费就是好
AutoCAD WS 如果看cad的话
ES文件管理器 很强大
网易应用中心 个人认为推荐的质量较好
Evernote 很好的笔记软件,各个平台齐全
runkeeper 如果GPS准的话,很好的跑步软件
发表在 日誌 | 标签为 | 留下评论

为javascript添加函数说明函数

随着v8的推动,javascript增强的同时,交互模式也越来越重要。由于之前接触过python,对其中的__doc__功能颇有印象,因而决定在javascript中实现类似功能

功能:返回函数中没被变量赋值的字符串数组中的字符串,作为函数的文档。

原理:多亏了javascript的原型机制,在Function的prototype中添加一个__doc__()函数,这个函数通过toString得到函数代码,再利用正则表达式提取,返回出来需要显示的代码段。应为考虑到注释的影响,在开始首先会删掉注释,不过这也引来了一个问题:如果像是注释在字符串中依旧会被删除,不过注意下应该不是大问题。

使用方式:功能的使用很简单,首先在声明你自己的函数(假设是myFun)的时候在需要的地方加入["说明:","说明第一段","说明第二段"]可以加入多处,每一个字符串在输出时会输出一行。调用函数说明仅仅需要myFun.__doc__();就会返回说明字符串。很简单

考虑到javascript的语法,我觉得用一个不引用的字符列表比较好,毕竟不会影响到程序逻辑,对于性能影响也不大(发布前随便优化以下肯定没了),而且可以写的很好看。

Function.prototype.__doc__=function __doc__ (){
  "use strict";
  ["本函数用于查看自定义函数文档,返回文档中以[\"..文本内容..\"]中间包括的说明"];
  ["文档说明本质为一个在函数中未被引用的仅包含字符串的数组,且可以有多个数组",
   "数组中的每一个元素,即一个字符串,代表一行说明。函数通过调用__doc__方法",
   "返回这些在数组中的说明。",
   "  想更一步了解本功能,可以尝试分别运行Function.__doc__.__doc__()和",
   "  Function.__doc__.toString()比较其中内容。",
   "*注意:目前在文档存放数组中使用javascript注释标示会导致错误分割"
  ];
  arguments:null;
  name:"__doc__";
  var res="\n";
  if(typeof(this)==="function"){
    var getNoteReg=/(\/\/.*|\/\*.*?\*\/|\n|\r)/g;
    /*                 V下面没有这个空格,加上它是应为语法高亮的bug删掉这个空格就好         */
    var getList=/\S\s*\ [\s*("|')(\\.|.)*?\1\s*(,\s*"(\\.|.)*?"|,\s*'(\\.|.)*?')*\s*/g;
    var list=this.toString().replace(getNoteReg,"").match(getList);
    if(list==null)return "尚未编写文档";
    for(var i in list){
      var opt=list[i].substr(0,1);
      if(opt != "=" && opt!= ":"){
	try{
	  if(typeof(JSON)==="object" && typeof(JSON.parse)==="function"){
	    var date=JSON.parse(list[i].substr(1));
	  }else{
	    var date=eval(list[i].substr(1));
	  }for(var dateN in date)res+=date[dateN]+"\n";
	}catch(e){
	  if(typeof(console)!="undefined" && typeof(console.debug)==="function")
            console.debug(e);
	  else alert("error 解析失败");
	}
      }
    }return res;
  }else return "error type!not a function";
};

发表在 javascript | 留下评论