2011-06-01

无妄参照大蓄

无妄 天性自由伸展 自然而然

大蓄 压制天性 获取自然力 (蓄水 牲畜)

2011-05-10

nodejs 大呼过瘾!!

javascript 真的要火!


这个网页爬虫类库集成多个优秀的类库 可见一斑
http://www.slideshare.net/sylvinus/web-crawling-with-nodejs


目前的类库


比python的命令行还好用
支持高亮 和tab成员枚举 爽呆了

通过ubuntu的ppa安装最新版


安装npm费了点事 需要一点准备工作
主要是npm需要系统用node来执行nodejs 而上面的ppa只建立了nodejs 命令

我现在还搞不清楚 linux的好几种link方式
用了硬link 可能不是最好的方案
link nodejs node

然后执行 curl http://npmjs.org/install.sh | sh  需要切换到root

sudo su

-------------------------------------------------------------------------


下午写了一个豆腐块 呵呵 

var url=require('url');
var get = require('get');
var htmlparser = require("htmlparser");
var select = require('soupselect').select;


download.proxy=url.parse(process.ENV.http_proxy);

download.asString(function(err, wp) {
    var handler = new htmlparser.DefaultHandler(function (error, dom) {
select(dom, "area").forEach(function(element) {console.log(element);});
    });
    var parser = new htmlparser.Parser(handler);
    parser.parseComplete(wp);
});

how to get a element's eventlistener


发展真快啊 几个月前找这个问题还没有答案 现在chrome和firebug都给了答案

http://stackoverflow.com/questions/4672301/getting-an-elements-eventlisteners
In safari's (and chrome's) element inspector there's an "Event Listeners" section (in the right frame of the elements tab) that show's the Event Listeners in the document. Is there anything similar in firebug? Also, is it possible to get an element's event listeners using javascript (like elmnt.onclick, but should work for events added with addEventListener() as well)?    

This is available for firebug:

http://getfirebug.com/wiki/index.php/Firebug_Extensions#Eventbug

For your second question, is it possible to get the events added via addEventListener in javascript? Generally it is not. That add-on uses eventlistenerservice you would need elevated privileges, a signed script and it would still only work in Firefox.

Eventbug

Eventbug

Eventbug is a Firebug extension that lists all of the event handlers on the page grouped by event type...

2011-03-28

wangyi blog reciept has come: Fwd: 邮件博客发表成功



---------- Forwarded message ----------
From: <blogmail@188.com>
Date: 2011/3/28
Subject: 邮件博客发表成功
To: xxxxx@126.com


尊敬的xxxxx@126.com:

您的邮件内容已成功发送至个人博客: http://blog.163.com/ccfstt@126

该日志地址: http://blog.163.com/ccfstt@126/blog/static/139024878201122862241754

网易博客


网易 wangyi blog support writing blog through email! (FIX STEP 6)


wangyi only support their own email address  (such as 126.com , 188.com ...)

But  I find a method using Gmail to get it work .

Because Gmail can use other email (such as 126.com...) as avatar to send emails.

So configure steps are:
1. create a new wangyi  email account ( if you had one skip this step)
2. Go to  Gmail Mail settings (at top-right corner) , click  Accounts and Import
3. click  the button Send mail from another address
4. input your wangyi email and  follow the wizzard...
5. Select the radio button with label:  Send through XXXX SMTP servers (recommended for professional domains – Learn more)
6. when you finish the wizzard, you can write a test blog :  compose mail in Gmail  - TO: blogmail@188.com  , write a blog like a mail 
IMPORTANT: You must select From your wangyi email address (not your gmail address) , then send !
7. Go to your wangyi blog and check if your new mail blog has already been published.

BTW, you can set wangyi mail  auto forward all incoming mails to your Gmail inbox in wangyi mail setting , thus your Gmail can receive the wangyi blog's receipt
enjoy yourself : )


网易 wangyi blog support writing blog through email!

wangyi only support their own email address  (such as 126.com , 188.com ...)

But  I find a method using Gmail to get it work .

Because Gmail can use other email (such as 126.com...) as avatar to send emails.

So configure steps are:
1. create a new wangyi  email account ( if you had one skip this step)
2. Go to  Gmail Mail settings (at top-right corner) , click  Accounts and Import
3. click  the button Send mail from another address
4. input your wangyi email and  follow the wizzard...
5. Select the radio button with label:  Send through XXXX SMTP servers (recommended for professional domains – Learn more)
6. when you finish the wizzard, you can write a test blog :  compose mail in Gmail  - TO: blogmail@188.com  , write a blog like a mail  then send .
7. Go to your wangyi blog and check if your new mail blog has already been published.

BTW, you can set wangyi mail  auto forward all incoming mails to your Gmail inbox in wangyi mail setting , thus your Gmail can receive the wangyi blog's receipt
enjoy yourself : )

2011-02-10

ssh代理断线重连的解决方案(sshpass+monit ,no need expect)


Yesterday , I find a tool named sshpass , now  I use monit with sshpass  resolved all problems : )

the monit rc file(/etc/monit/monitrc)  should be (note bold and highlight) :


###############################################################################
## Monit control file
###############################################################################
##
## Comments begin with a '#' and extend through the end of the line. Keywords
## are case insensitive. All path's MUST BE FULLY QUALIFIED, starting with '/'.
##
## Below you will find examples of some frequently used statements. For
## information about the control file, a complete list of statements and
## options please have a look in the monit manual.
##
##
###############################################################################
## Global section
###############################################################################
##
## Start monit in the background (run as a daemon):
#
 set daemon  10           # check services at 10-second intervals
#     with start delay 240  # optional: delay the first check by 4-minutes
#                           # (by default check immediately after monit start)
#
#
## Set syslog logging with the 'daemon' facility. If the FACILITY option is
## omitted, monit will use 'user' facility by default. If you want to log to
## a stand alone log file instead, specify the path to a log file
#
# set logfile syslog facility log_daemon                      
#
#
### Set the location of monit id file which saves the unique id specific for
### given monit. The id is generated and stored on first monit start.
### By default the file is placed in $HOME/.monit.id.
#
# set idfile /var/.monit.id
#
### Set the location of monit state file which saves the monitoring state
### on each cycle. By default the file is placed in $HOME/.monit.state. If
### state file is stored on persistent filesystem, monit will recover the
### monitoring state across reboots. If it is on temporary filesystem, the
### state will be lost on reboot.
#
# set statefile /var/.monit.state
#
## Set the list of mail servers for alert delivery. Multiple servers may be
## specified using comma separator. By default monit uses port 25 - this
## is possible to override with the PORT option.
#
# set mailserver mail.bar.baz,               # primary mailserver
#                backup.bar.baz port 10025,  # backup mailserver on port 10025
#                localhost                   # fallback relay
#
#
## By default monit will drop alert events if no mail servers are available.
## If you want to keep the alerts for a later delivery retry, you can use the
## EVENTQUEUE statement. The base directory where undelivered alerts will be
## stored is specified by the BASEDIR option. You can limit the maximal queue
## size using the SLOTS option (if omitted, the queue is limited by space
## available in the back end filesystem).
#
# set eventqueue
#     basedir /var/monit  # set the base directory where events will be stored
#     slots 100           # optionaly limit the queue size
#
#
## Send status and events to M/Monit (Monit central management: for more
## informations about M/Monit see http://www.tildeslash.com/mmonit).
#
# set mmonit http://monit:monit@192.168.1.10:8080/collector
#
#
## Monit by default uses the following alert mail format:
##
## --8<--
## From: monit@$HOST                         # sender
## Subject: monit alert --  $EVENT $SERVICE  # subject
##
## $EVENT Service $SERVICE                   #
##                                           #
##     Date:        $DATE                   #
##     Action:      $ACTION                 #
##     Host:        $HOST                   # body
##     Description: $DESCRIPTION            #
##                                           #
## Your faithful employee,                   #
## monit                                     #
## --8<--
##
## You can override this message format or parts of it, such as subject
## or sender using the MAIL-FORMAT statement. Macros such as $DATE, etc.
## are expanded at runtime. For example, to override the sender:
#
# set mail-format { from: monit@foo.bar }
#
#
## You can set alert recipients here whom will receive alerts if/when a
## service defined in this file has errors. Alerts may be restricted on
## events by using a filter as in the second example below.
#
# set alert sysadm@foo.bar                       # receive all alerts
# set alert manager@foo.bar only on { timeout }  # receive just service-
#                                                # timeout alert
#
#
## Monit has an embedded web server which can be used to view status of
## services monitored, the current configuration, actual services parameters
## and manage services from a web interface.
#
# set httpd port 2812 and
#     use address localhost  # only accept connection from localhost
#     allow localhost        # allow localhost to connect to the server and
#     allow admin:monit      # require user 'admin' with password 'monit'
#     allow @monit           # allow users of group 'monit' to connect (rw)
#     allow @users readonly  # allow users of group 'users' to connect readonly
#
#
###############################################################################
## Services
###############################################################################
##
## Check general system resources such as load average, cpu and memory
## usage. Each test specifies a resource, conditions and the action to be
## performed should a test fail.
#
#  check system myhost.mydomain.tld
#    if loadavg (1min) > 4 then alert
#    if loadavg (5min) > 2 then alert
#    if memory usage > 75% then alert
#    if cpu usage (user) > 70% then alert
#    if cpu usage (system) > 30% then alert
#    if cpu usage (wait) > 20% then alert
#
#   
## Check a file for existence, checksum, permissions, uid and gid. In addition
## to alert recipients in the global section, customized alert will be sent to
## additional recipients by specifying a local alert handler. The service may
## be grouped using the GROUP option.
#   
#  check file apache_bin with path /usr/local/apache/bin/httpd
#    if failed checksum and
#       expect the sum 8f7f419955cefa0b33a2ba316cba3659 then unmonitor
#    if failed permission 755 then unmonitor
#    if failed uid root then unmonitor
#    if failed gid root then unmonitor
#    alert security@foo.bar on {
#           checksum, permission, uid, gid, unmonitor
#        } with the mail-format { subject: Alarm! }
#    group server
#
#   
## Check that a process is running, in this case Apache, and that it respond
## to HTTP and HTTPS requests. Check its resource usage such as cpu and memory,
## and number of children. If the process is not running, monit will restart
## it by default. In case the service was restarted very often and the
## problem remains, it is possible to disable monitoring using the TIMEOUT
## statement. This service depends on another service (apache_bin) which
## is defined above.
#   
#  check process apache with pidfile /usr/local/apache/logs/httpd.pid
#    start program = "/etc/init.d/httpd start" with timeout 60 seconds
#    stop program  = "/etc/init.d/httpd stop"
#    if cpu > 60% for 2 cycles then alert
#    if cpu > 80% for 5 cycles then restart
#    if totalmem > 200.0 MB for 5 cycles then restart
#    if children > 250 then restart
#    if loadavg(5min) greater than 10 for 8 cycles then stop
#    if failed host www.tildeslash.com port 80 protocol http
#       and request "/monit/doc/next.php"
#       then restart
#    if failed port 443 type tcpssl protocol http
#       with timeout 15 seconds
#       then restart
#    if 3 restarts within 5 cycles then timeout
#    depends on apache_bin
#    group server
#   
#   
## Check filesystem permissions, uid, gid, space and inode usage. Other services,
## such as databases, may depend on this resource and an automatically graceful
## stop may be cascaded to them before the filesystem will become full and data
## lost.
#
#  check filesystem datafs with path /dev/sdb1
#    start program  = "/bin/mount /data"
#    stop program  = "/bin/umount /data"
#    if failed permission 660 then unmonitor
#    if failed uid root then unmonitor
#    if failed gid disk then unmonitor
#    if space usage > 80% for 5 times within 15 cycles then alert
#    if space usage > 99% then stop
#    if inode usage > 30000 then alert
#    if inode usage > 99% then stop
#    group server
#
#
## Check a file's timestamp. In this example, we test if a file is older
## than 15 minutes and assume something is wrong if its not updated. Also,
## if the file size exceed a given limit, execute a script
#
#  check file database with path /data/mydatabase.db
#    if failed permission 700 then alert
#    if failed uid data then alert
#    if failed gid data then alert
#    if timestamp > 15 minutes then alert
#    if size > 100 MB then exec "/my/cleanup/script" as uid dba and gid dba
#
#
## Check directory permission, uid and gid.  An event is triggered if the
## directory does not belong to the user with uid 0 and gid 0.  In addition,
## the permissions have to match the octal description of 755 (see chmod(1)).
#
#  check directory bin with path /bin
#    if failed permission 755 then unmonitor
#    if failed uid 0 then unmonitor
#    if failed gid 0 then unmonitor
#
#
## Check a remote host network services availability using a ping test and
## check response content from a web server. Up to three pings are sent and
## connection to a port and a application level network check is performed.
#
#  check host myserver with address 192.168.1.1
#    if failed icmp type echo count 3 with timeout 3 seconds then alert
#    if failed port 3306 protocol mysql with timeout 15 seconds then alert
#    if failed url
#       http://user:password@www.foo.bar:8080/?querystring
#       and content == 'action="j_security_check"'
#       then alert


  check host ssh_socks_proxy with address 127.0.0.1
    if failed port 7070 then exec "/usr/bin/sshpass -p ***write*your*password*here*** ssh -Nf -D 7070 -p 11443 cucmevip@127.0.0.1"
#       as uid andrew and gid andrew

#    if failed port 7070 then exec "/home/andrew/Desktop/autoSSH.sh"
#    if failed port 7070 then exec "/usr/bin/ssh -Nf -D 7070 -p 11443 cucmevip@127.0.0.1"

#
#
###############################################################################
## Includes
###############################################################################
##
## It is possible to include additional configuration parts from other files or
## directories.
#
#  include /etc/monit.d/*
#
#


2011-01-28

http tunnel 研究

HTTPTUNNEL  终极武器 需要墙外的服务器 不使用connect方式(也就是常说的https代理)
http://www.nocrew.org/software/httptunnel.html
命令是 htc  hts


文档好 谦虚 链接别人
https://bitbucket.org/gotoh/connect/wiki/Home
命令是
connect        connect-proxy

文档好
http://proxytunnel.sourceforge.net/paper.php
命令是  proxytunnel

另外 ubuntu 系统自带的 nc 命令 也非常好用


其实cntlm 的 tunnel 和 socks 功能不仅可以应用于微软ntlm代理,完全可以应用于任何http代理 只不过对常规代理 添加了些冗余的头部信息

2011-01-26

写了一个判断是否相离的豆腐块类

package org.ag;

import java.security.InvalidParameterException;
import java.util.Date;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;

public class SomeSpan<T extends Comparable<T>> {
static Logger log = Logger.getLogger(SomeSpan.class);
private T begin;
private T end;

public SomeSpan(T begin, T end) {
setBegin(begin);
setEnd(end);
}

/**
* @param args
*/

public static void main(String[] args) {
BasicConfigurator.configure();

SomeSpan<Date> t1 = new SomeSpan<Date>(
new Date(1979 - 1900, 8 - 1, 17), new Date(2011 - 1900, 1 - 1,
26));

SomeSpan<Date> t2 = new SomeSpan<Date>(
new Date(2000 - 1900, 10 - 1, 5), new Date(2011 - 1900, 1 - 1,
25));

SomeSpan<Integer> t3 = new SomeSpan<Integer>(new Integer(2000),
new Integer(2011));
SomeSpan<Integer> t4 = new SomeSpan<Integer>(new Integer(1000),
new Integer(2000));

log.debug(t1);
log.debug(t2);
log.debug(t3);
log.debug(t4);
log.debug(t1.isInsection(t2));
log.debug(t3.isDisjoint(t4));

}

public void setBegin(T begin) {
this.begin = begin;
}

public T getBegin() {
return begin;
}

public void setEnd(T end) {
if (end.compareTo(this.getBegin()) < 0) {
throw new InvalidParameterException("Error: end < begin!");
}
this.end = end;
}

public T getEnd() {

return end;
}

/**
* 判断是否相离,相离的定义参见 http://en.wikipedia.org/wiki/Disjoint_sets
*/
public boolean isDisjoint(SomeSpan<T> another) {
return (this.getBegin().compareTo(another.getEnd()) > 0)
|| (this.getEnd().compareTo(another.getBegin()) < 0);
}

/**
* 判断是否相交,相交的定义参见 http://en.wikipedia.org/wiki/Intersection_%28set_theory%29
*/
public boolean isInsection(SomeSpan<T> another) {
return !isDisjoint(another);
}

@Override
public String toString() {
return getBegin().toString() + " -> " + getEnd().toString();
}

}

2010-08-11

在金典 GoldenDict 中添加科林斯在线辞典

在金典中添加科林斯在线辞典

http://www.collinslanguage.com/results.aspx?context=3&reversed=False&action=define&homonym=-1&text=%GDWORD%

Re: 网址过滤的最高境界


我是冲着标题进来的


在 2010年8月10日 下午9:43,Andrew Goal 写道:
hehe 搞错了 还真是庸俗网址
乌龙



Websense Enterprise

您组织的网络使用策略限制此时访问该网页。

原因:

Websense 类别“庸俗”已筛选。


URL:

http://bash.org/



2010-08-10

Re: 网址过滤的最高境界

hehe 搞错了 还真是庸俗网址
乌龙


Websense Enterprise

您组织的网络使用策略限制此时访问该网页。

原因:

Websense 类别“庸俗”已筛选。

 

URL:

http://bash.org/


网址过滤的最高境界

Websense Enterprise

您组织的网络使用策略限制此时访问该网页。

原因:

Websense 类别“庸俗”已筛选。

 

URL:

http://bash.org/

2010-07-31

还在为减肥苦恼?

我又从180斤将到了140(半年时间)

秘诀就是天天两个40分钟的自行车骑行上下班

可选项 如果你想减的更快 就不要吃晚饭 有种理论是过午不食 因为15点后 人的消化能力减弱 实物会留在胃里一晚上 吸收毒素 肠胃得不到休息  不过我的实践表明 这样下来可能会有点贫血(蹲下起立会眼前发黑) 不过也可能是我的睡眠没有天天保证8小时 睡眠补血

减肥必须每天30分钟以上的有氧运动
通俗的说就是 像大雁迁徙一样的 长时间 持续运动 哪怕是持续走路30分钟以上也非常好 我估计应该比骑自行车还要好(因为自行车下坡时 就歇着了 这样运动就不持续了)

所见所闻所思