2012年9月

PolicyServer

最近做一个项目需要用到websocket,但是目前ie9及之前的版本都不支持,github上面出现了用flash模拟websocket的开源项目,由于使用flash时,flash是有权限限制的(这应该是为了安全性考虑),xmlsocket://会先访问843端口,获取授权文件。于是自己用python写了个,该程序依赖tornado库。http://inote.github.com/PolicyServer/

inotify-tools安装

前提

# 查看内核是否支持inotify机制
grep INOTIFY_USER /boot/config-$(uname -r)

下载安装

# https://github.com/rvoicilas/inotify-tools/
wget ...
tar zxf ...
# 若是没有configure文件,先运行
# ./autogen.sh
./configure --prefix=/usr/local/inotify
make && make install

基础的使用

inotifywait -rme modify,attrib,move,close_write,create,delete,delete_self /etc/asterisk

chrome下固定定位元素在锚点跳转时显示不全

做项目时遇到两次,就纪录下来。(仅在chrome下出现此bug)

产生条件:

  • 1.锚点链接上绑定了点击事件;

现象:

在chrome下测试发现,绝对定位的元素只显示一部分,但是稍微滚动滚动条或者改变窗口大小后又正常了。

原因:

个人觉得:跟浏览器渲染,在点击页面内锚点时触发了默认的跳转锚点的动作和绑定的click事件,两个同时执行后绝对定位元素渲染出bug

解决方案:

  • 1.点击事件内加return false来阻止默认行为;(可行性不高,因为阻止了锚点跳转,但是也能解决显示不全的问题)
  • 2.绑定的事件写在setTimeout内,延迟执行;(能满足大部分需求)

演示代码:

DEMO

php杂记2

glob函数

// 获取所有php和txt文件,必须指定第二个参数为GLOB_BRACE才能使用{}
$files = glob('*.{php,txt}', GLOB_BRACE);

// 按照文件的修改时间排序
usort($files, create_function('$a,$b', 'return filemtime($a) - filemtime($b);'));

RecursiveDirectoryIterator

// 深度遍历文件夹
$path = realpath('/etc');

$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object){
    echo $name . PHP_EOL;
}

PHP5.3下SQLSTATE[HY000] [2002] 非法的参数解决方案

将localhost改成127.0.0.1

来自:链接

SmartMarkdown插件bug

bug描述

SmartMarkdown是Sublime Text2的一个插件,该插件提供了smart table的功能,该功能在只有ascii字符的时候很完美,但当内容中出现中文,中文标点的时候就会产生错位,这是因为中文在屏幕上的显示占了两倍的英文所占有的位置。

bug修复

由于该插件里面计算的时候是按照字符的长度来计算的,所以他把中文字符串的长度也是计算为1的。我们要做的就是把非ascii字符串替换为两个占位字符,然后计算长度。找到插件目录下的table.py

# 21行添加
NONE_ASCII_PATTERN = re.compile(r'[^\x00-\xff]')
# 124行修改为
new_row.append(col + " " * (cols_length[i] - len(NONE_ASCII_PATTERN.sub('  ',col))))
# 163行修改为
col_len = len(NONE_ASCII_PATTERN.sub('  ', col))

修改过的文件:下载

CentOS一些配置及系统信息文件

大概三个月前,在公司做了个系统管理的程序(时间设置,网卡设置,系统时间设置,等等),现在记录下这些文件的路径,备忘。

# 网络默认参数
/etc/sysconfig/network

# dns
/etc/resolv.conf

# 单个网卡
/etc/sysconfig/network-scripts/ifcfg-eth*

# 登录系统时的提示信息
/etc/issue

# 登陆后的提示信息
/etc/motd

# 系统版本
/etc/redhat-release

# 时区
/etc/localtime
/usr/share/zoneinfo/*

/etc/sysconfig/clock

利用百度地图API拆分纯真IP数据库地址

导出txt,并转码

利用安装后的ip.exe导出txt文件,由于python处理gbk中文的时候会有些问题,所以我们直接选个编辑器打开之后,再以utf-8的编码保存就可以了。

提取所有地址

由于我们需要通过百度地图的API一个地址一个地址的查询,所以去除重复的地址可以减少我们的查询量。

# coding: utf-8
# python的去重方法很多,这里我们选用set类型
with open('ipdata.txt', 'r', encoding='utf-8') as handle:
    regex = re.compile(' +')
    addrs = set([])
    for line in handle:
        if line.strip() != '':
            address = regex.split(line.strip())[2]
            addrs.add(address)
    # addrs 就是我们过滤之后的所有地址了

上面我们已经过滤出所有的地址了,接下来就是使用百度的API来拆解这些地址。

import re, urllib, time, json
from urllib import parse, request

with open('ipdata.txt', 'r', encoding='utf-8') as handle:
    regex = re.compile(' +')
    addrs = set([])
    for line in handle:
        if line.strip() != '':
            address = regex.split(line.strip())[2]
            addrs.add(address)

    url = 'http://api.map.baidu.com/geocoder?output=json&key=你的API key'

    wh = open('address/list.txt', 'w', encoding="utf-8")
    for addr in addrs:
        addr_x = ''
        url_x = url + '&address=' + parse.quote(addr)
        # time.sleep(3)
        req = request.urlopen(url_x)
        res = req.read().decode()

        data = json.loads(res)

        if data['result']:
            location = str(data['result']['location']['lat']) + ', ' + str(data['result']['location']['lng'])
            url_x = url + '&location=' + parse.quote(location)

            req = request.urlopen(url_x)
            res = req.read().decode()

            data = json.loads(res)
            if data['result']:
                component = data['result']['addressComponent']
                addr_x = component['province'] + ' ' + component['city'] + ' ' + component['district']
        wh.write(addr + '\t' + addr_x + '\n')
    wh.close()

未完待续...

wxpython练手

学习wxpython的练手软件,写的比较简单,名为扫描,实际上每次只能扫描一个端口。

PS:py2exe打包的程序伤不起啊,小小的一个程序,依赖库什么放进去竟有20多M。
setup里面设置的icon_resources居然没成功,不知道是不是哪儿写错了。

源码:下载