在正则表达式里想要匹配多行:

([\s\S]*)

想要匹配到到一定区域内的内容可以考虑非贪婪匹配:

例如想要匹配 “<object name=’暗黑3’ size=’12’></object>” 中的name值“暗黑3

要使用表达式“<object name=’(.+?)’” (非贪婪匹配)
而不能使用“<object name=’(.+)’” (贪婪匹配)。因为这个表达式会匹配出这样的结果“暗黑3’ size=’12”,这并不是我们想要的。


简单描述下贪婪匹配和非贪婪匹配:

例如:针对字符串“LeeeeLeeeeL

贪婪模式:

(L)(\w+) “\w+” 将匹配第一个”L”之后的所有字符。结果:”eeeeLeeeeL”
(L)(\w+)(L) “\w+” 将匹配第一个”L”和最后一个”L”之间的所有字符。结果:”eeeeLeeee”

非贪婪模式:

(L)(\w+?) “\w+?” 将尽可能少的匹配第一个”L”之后的字符。结果:”e”
(L)(\w+?)(L) “\w+?” 将匹配以第一个”L”开头以第二个”L”结尾的字符。结果:”eee”

首先查看日志文件

1
[root@ubuntu]# cat /var/log/danted.log

发现里面有这样的记录

1
2
3
4
May 24 13:57:52 (1337839072) danted[13596]: socks_seteuid(): old: 0, new: 65534
May 24 13:57:52 (1337839072) danted[13596]: socks_reseteuid(): current: 65534, new: 0
May 24 13:57:52 (1337839072) danted[13596]: fixsettings(): setting the libwrap uid to 0 is not recommended
May 24 13:57:52 (1337839072) danted[13596]: symbolfunction(): compiletime configuration error? Failed to open "libc.so": /usr/lib/i386-linux-gnu/libc.so: invalid ELF header

说明程序在找/usr/lib/i386-linux-gnu/libc.so位置的libc.so没找到,所以解决办法就是创建一个链接命令如下:

1
ln -sf /lib/i386-linux-gnu/libc.so.6 /usr/lib/i386-linux-gnu/libc.so

再启动下服务

1
service danted start

看看是不是启动成功啦!
(o≖◡≖)

因为到现在位置在国内没有搜索到这个问题的解决办法,所以记录在这里。或许能帮到有需要的人。

另外,这里有dante socks server的安装说明:
http://wiki.kartbuilding.net/index.php/Dante_Socks_Server

错误原因

在使用未注册的 RedHat Linux 企业版时。使用yum命令会出现如下提示:

1
2
3
4
5
6
7
[root@localhost ~]# yum install httpd
Loaded plugins: rhnplugin, security
This system is not registered with RHN.
RHN support will be disabled.
Setting up Install Process
No package httpd available.
Nothing to do

解决方案

而这种情况可以使用CentOS的yum来代替掉系统本身的yum
脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh
rpm -qa | grep yum | xargs rpm -e --nodeps
wget http://centos.ustc.edu.cn/centos/5/os/i386/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm
wget http://mirrors.ustc.edu.cn/centos/5/os/i386/CentOS/yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/5/os/i386/CentOS/yum-3.2.22-39.el5.centos.noarch.rpm
rpm -ivh yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm
rpm -ivh yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm
rpm -ivh yum-3.2.22-39.el5.centos.noarch.rpm
wget http://docs.linuxtone.org/soft/lemp/CentOS-Base.repo
mv CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
rm -f yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm
rm -f yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm
rm -f yum-3.2.22-39.el5.centos.noarch.rpm
rm -f CentOS-Base.repo

将上面的脚本保存为:redhat_use_centos_yum.sh

点击这里直接下载 redhat_use_centos_yum.sh
然后直接运行这个脚本即可。

一键脚本

如果闲麻烦也可以依次输入下面几条指令来下载并执行我已经写好的脚本,同样可以达到目的:

1
2
3
wget http://www.leelib.com/wp-content/uploads/2012/04/redhat_use_centos_yum.sh
chmod 777 redhat_use_centos_yum.sh
sudo ./redhat_use_centos_yum.sh

现在再试试yum命令是否已经没有了 This system is not registered with RHN. 提示,并且可以正常使用了呢! :)

在汇编语言中,我们可以直接使用ROL ROR等指令进行循环左移和循环右移的操作。
但C语言中却没有对应的操作,没办法只能自己实现了。

下面是我最近项目中用到的一个针对WORD类型的循环左移(ROL)实现代码:

1
2
3
4
uint16_t ROL(int val, int n)
{
return (val << n) | (val >> (16 - n));
}

针对BYTE类型的循环左移:

1
2
3
4
uint8_t ROL(int val, int n)
{
return (val << n) | (val >> (8 - n));
}

针对DWORD类型的循环左移:

1
2
3
4
uint32_t ROL(int val, int n)
{
return (val << n) | (val >> (32 - n));
}


通过我写的一段Python代码可以让M8用户将联系人导入到Andriod系统中。

操作需要以下步骤:

  1. 先用M8PC工具将M8的联系人导出成XML格式。
  2. 将导出的文件重命名为mycontact.xml,并与m8toAndriod.py放到同一目录下
  3. 运行 python m8toAndriod.py 程序会生成一个名为 mycontact.vcf 的文件
  4. 将 mycontact.vcf 传到Andriod手机中导入

以下为 m8toAndriod.py 的代码:

#!/usr/bin/env python
# coding: utf-8
# 功能:将M8导出的联系人XML转化成Andriod可以导入的vcf文件
# 版本:python 2.6 以上
# 作者:leaker
# 网站:http://www.leelib.com
from xml.etree import ElementTree as ET

# 输出到的mycontact.vcf
out = file("mycontact.vcf", "wb")
root = ET.parse(file("mycontact.xml", "r")).getroot()
print root
for e in root.findall('Person'):
    out.write('BEGIN:VCARDrnVERSION:3.0rn')
    out.write('N:%s;%s;;;rn' % (e.findtext('LastName', '').encode('utf8'), e.findtext('FirstName', '').encode('utf8')))
    out.write('FN:%srn' % (e.findtext('FileAs', '').encode('utf8')))
    # print 'FN:%srn'% (e.findtext('FileAs', '').encode('gb2312'))
    for ee in root.findall('Phone'):
        if ee.findtext('PersonID','') == e.findtext('ID',''):
            primary = ee.get('IsPrimary') == 'true'
            out.write('TEL;TYPE=CELL%s:%srn' % ((';TYPE=PREF' if primary else ''), ee.findtext('Info','')))
    out.write('END:VCARDrn')
out.close()

点击这里下载:m8toAndriod.7z

最近因为一些原因开始使用Win7 x64系统。
而使用VS2010的时候发现文件菜单里面竟然没有 最近使用的项目和解决方案 这一项。

于是网上搜索了半天发现是因为Win7系统中 组策略-用户配置-管理模板-开始菜单和任务栏 里面的:

退出系统时清理最近打开文档的历史
不保留最近打开文档的历史

这两项未配置的时候默认是 启用
所以我们只要将这两项设置为 已禁用 就可以了。

希望能帮助到跟我有同样问题的人 :)

为一个元老级的MUD游戏开发的一个PC客户端。利用业余时间完成(主要是这阵子要钻研一个很有技术难度的工作,整天要对着封包一个字节一个字节比对,头疼的厉害。)。

下载地址:仗剑江湖MUD客户端ver1.0beta

更新历史

ver 1.0 beta 2012.06.13

  • 增加游戏界面功能
  • 增加高级脚本功能及界面
  • 高级脚本内部变量:Self
  • 高级脚本内部函数:GetActor,Log,Cmd,Sleep,
    IsFaintStatus
  • 高级脚本内实现
    等基本命令
  • 高级脚本内实现RunLine,RunScript等功能
  • 高级脚本内实现OnAddActor,OnDelActor,
    OnChangePic,OnChangeAll,OnGetTask,
    OnTaskOver,OnThing,OnHitOver,OnFaint,
    OnWake,OnDead,OnDazuoOver,OnBuyItem,
    OnBehead,OnPickUp,OnPickUpFrom,
    OnItemInfo 等触发事件

ver 0.4 beta 2012.04.03

  • 增加按钮脚本个数为20个,具体按钮脚本的内
    容到 script按纽list.txt 里面配置
  • 增加脚本指令
    具体使用方法请看 脚本指令说明.txt
  • 增加自动任务功能。
    具体使用方法请看 自动任务说明.txt

ver 0.3 beta 2012.03.25

  • 增加门派脚本功能,配置:scriptlist.txt
  • 命令框自动保存最后发送的10条命令。可在命
    令框使用键盘上下键翻找
  • 增加显示当前任务信息功能,用于准备做自动
    任务。如有发现什么任务没识别出来的,请联
    系作者并回馈。

ver 0.2sp1 beta 2012.03.24

  • 修正有些人登录出错的问题
  • 优化了网络代码网络效率提高,减少内存使用

var 0.2 beta 2012.03.24

  • 增加挂机功能,文件目录:script挂机
  • 增加按钮功能,文件目录:script按纽
  • 信息页面每当显示内容超过500行自动清空
  • 当前玩家名称显示在血条上面
  • 关闭主窗口会返回登录窗口

ver 0.1 beta 2012.03.23

  • 支持游戏基本功能。命令、聊天信息、房间信
    息、当前房间人物列表等。

运行环境

操作系统:WinXP以上版本
内存需求: 512M

使用说明:

配置客户端目录下的 Config.ini 文件,修改Host为你需要登录的网站地址。这个地址从你登录游戏以后的页面提取。例如登录以后地址是:http://gksx.free.ezvpn.cn:9001/cgi-bin/mud/login1 那么这里就填:http://gksx.free.ezvpn.cn:9001

附加说明:

双击房间人物列表中的人物可以将人物名字插到命令行的最后

如发现BUG或有好的建议,请在下面留言。

解决方案

为了能让gedit能够直接编辑不属于当前用户的文件,我们需要做如下操作:

  1. 为gedit创建一个启动器。这个有很多方法,如果不清楚的同学可以跟我一起操作。
    具体方法为:找到 应用程序-附件-文本编辑器 点右键选择 将此启动器添加到面板
  2. 右键点击刚才我们创建的启动器。选择 属性 将原命令 gedit %U 修改为 gksudo gedit %U

gksudo 其实就是对应桌面环境下的 sudo 命令.

我才学到的留以记录,希望能帮到需要的人。