显示标签为“Programming”的博文。显示所有博文
显示标签为“Programming”的博文。显示所有博文

2013年1月6日星期日

javascript : 从utf8页面选取内容提交到只接收gbk编码的表单乱码的问题

参考:

跨域提交form表单并转码(GBK→UTF-8)

 

问题场景:

以 http://www.jjwxc.net/的小说查询为例,该表单只接收gbk编码

如果浏览器扩展从utf8页面右键取出查询关键字,点击后向其自动提交查询,则需要自动转换为gbk

 

解决方法(1): firefox 可用

在当前页面新建一个form,该form提交的内容与查询表单一致,同时 form.setAttribute('accept-charset','gbk');
var JJWXC_QUERY_URL = "http://www.jjwxc.net/search.php";
var JJWXC_QUERY_TYPE = {
"book":"1",
"writer":"2",
"lead":"4",
"support":"5",
"other":"6",
"作品":"1",
"作者":"2",
"主角":"4",
"配角":"5",
"其他":"6"
};

function query_ljj_form(keyword, type) {
var doc = window.content.document;
var form=doc.createElement("form");
form.target='_blank';
form.action= JJWXC_QUERY_URL;
form.setAttribute('accept-charset', 'gbk');

var kw = doc.createElement("input");
kw.type="text";
kw.name="kw";
kw.value=keyword;
form.appendChild(kw);

var t = doc.createElement("input");
t.type="text";
t.name="t";
t.value=JJWXC_QUERY_TYPE[type];
form.appendChild(t);

var s = doc.createElement("input");
s.type="submit";
s.value='ok';
form.appendChild(s);

doc.body.appendChild(form);

form.submit();
doc.body.removeChild(form);
return ;
}

解决方法(2): chrome可用

在当前页面新建一个iframe,该iframe中内嵌一个元素包含了需要转码的关键字,然后修改页面编码d.charset=d.characterSet="gbk";  实现编码转换后,再从该元素内取出转码后的关键字

注意,firefox中 characterSet属性是只读的,无法写入
function getGBKEscape(s) {
var iframe=document.createElement("iframe");
iframe.src="about:blank";
iframe.setAttribute("style","display:none;visibility:hidden;");
document.body.appendChild(iframe);
var d=iframe.contentWindow.document;
d.charset=d.characterSet="gbk";
d.write("<body><a href='?"+s+"'>gbk</a></body>");
d.close();
var url=d.body.firstChild.href;
var gbk = url.substr(url.lastIndexOf("?")+1);
document.body.removeChild(iframe);
return gbk;
}

 

2012年12月4日星期二

Perl : 用Mail::Sender发送邮件

use Mail::Sender;

sub send_mail {
# from,to,cc, subject, message, attach = [ ]
# smtp_server : xxx.xxx.xxx.xxx
# message_charset : default gbk
# ctype : default text/html
# auth : default LOGIN

my ($m) = @_;
$m->{message_charset} ||= 'gbk';
$m->{ctype} ||= 'text/html';
$m->{auth} ||= 'LOGIN';

#print "send_mail : $m->{subject}\nfrom:$m->{from}\nto:$m->{to}\ncc:$m->{cc}\n";

my $sender = new Mail::Sender {
smtp => $m->{smtp_server},
from => $m->{from},
#debug => '/tmp/mail_debug.txt',
boundary => '----this-is-a-mail-boundary-----',
};
die "Can't create the Mail::Sender object: $Mail::Sender::Error"
unless ref $sender;

$sender->OpenMultipart( {
to => $m->{to},
cc => $m->{cc},
replyto => $m->{from},
# fake_from => $m->{fake_from},
# auth => $m->{auth},
# authid => $m->{user},
# authpwd => $m->{passwd},
from => $m->{from},
ctype => $m->{ctype},
subject => $m->{subject},

} );

$sender->Body( {
charset => $m->{message_charset},
msg => $m->{message},
} );

for my $attach_file (@{$m->{attach}}) {
$sender->Attach( {
description => "$attach_file",
ctype => 'text/html',
disposition => "attachment;filename=$attach_file",
file => "$attach_file",
id => "$attach_file",
} )
|| die "Error in attachment: $Mail::Sender::Error\n"
if ( -f $attach_file );
} ## end for my $attach_file (@$attach_files_ref)
$sender->Close;

} ## end sub send_mail

2012年11月20日星期二

Perl : ip 与 inet 十进制字符串互转

use Socket;

my $ip = '202.38.75.11';

my $inet_str = unpack('N', inet_aton($ip));

my $ip_re = inet_ntoa(pack('N', $inet_str));

 

2012年11月7日星期三

Perl : 多进程连DBI的时候报错

见:Perl Parallel::ForkManager with DBI database handlers

两种方法:

1)不用DBI连:换成DBIx::Connector就可以了

2)panda找到的方法:用DBI连,InactiveDestroy属性设成1

2012年11月1日星期四

R语言数据操作:笔记 chap 9

添加计算的新列:
somedata = transform(somedata, logval = log(val))

划分值域:
sepal = cut(data$length, c(1,5,9,10), include.lowest=TRUE,right=FALSE)

car包,对变量重新编码:
newgroup = recode(group, 'c(1,5)=1; c(2,4)=2; else=3')

stack函数重排数据
data1 data2 data3   =>  values ind (其中ind取值为data1/data2/data3)

unstack转换回来
mydata = unstack(sdata, values~ind)

reshape包:

# obs: subj, time, x, y

mobs = melt(obs)

cast(subj ~ variable + time , data=mobs)

#subj  x_1 x_2 x_3 y_1 y_2 y_3


#后面1-3取值为time的值


cast(subj ~ variable | time, data=mobs)

# $'1' : subj  x y


# $'2' : subj x y


# $'3' :  subj x y


#按time分组


cast(subj ~ variable + time , subset = variable == 'x', data=mobs)

#只取出x的数据,不取y的


 

合并
merge(x,y,all=TRUE)

merge(x,y,all.x=TRUE)

merge(x,y,by.x=cola,by.y=colb)ch(x

找出匹配值的索引
indices = match(x$a, y$a, nomatch=0)

y$a[indices]

2012年10月31日星期三

R语言数据操作:笔记 chap 8

按地区划分收入高于和低于收入中位数的州的数量:
hiinc = state.x[ , 'income' ] > median(state.x[ , 'income' ])

stateinc = table(state.region , hinnc)

#f_stateinc 共三列:state.region, hinnc, freq(频数)

f_stateinc = as.data.frame(stateinc)

按各列取值去重,算频数:
as.data.frame( table(x) )

添加行合计/列合计:
tt = table(infert$edu, infert$partity)

addmargins(tt,c(1,2))

频率统计:prop.table

按列计算:
sumfun = function(x) c(n=sum(!is.na(x)), mean = mean(x), sd=sd(x))

x = apply(somedata, 2, sumfun)

矩阵每一列除以该列的最大值:
maxes = apply(somedata,2,max)

final = sweep(somedata,2,maxes,"/")

按time和diet分组,求weight的均值:
cweights = aggregate(data$weight,data[c('time','diet')], mean)

cweights = tapply(data$weight, data[c('time', 'diet')], mean)



mclick = melt(somedata, measure.var = 'weight')

cast(mclick, diet + time ~ variable, mean)

reshape包

以region为行,求各变量的均值
cast(somedata,region~variable,mean)

以每个变量为一行
cast(somedata,variable~region,mean)

指定变量子集
cast(somedata, region~variable, mean, subset=variable %in% c('population', 'life'))

求各列变量均值、中位数、标准差
cast(somedata, variable~., c(mean,median,sd))

按region汇总各列变量均值、中位数、标准差
cast(somedata, region~variable, c(mean,median,sd))

2012年10月30日星期二

R语言数据操作:笔记 chap 1 - chap 7

辨认缺失值:is.na

删除带有缺失值的行:na.omit

当所有读入的数据为同一模式时,用scan函数读取较快

read.fwf 读取固定宽度的文件

index = which(veg$va == 2 & veg$vb >=3)

访问mysql:RMySQL

时间窗:range(rdates$Date)

时间间隔:difftime

时间序列:seq(as.Date('1976-7-4'),by='days',length=10)

将字符取值映射为数值取值,可指定是否按顺序:

mons = c ("Mar", "Feb","Jan")

mons = factor(mons, levels=c("Jan", "Feb", "Mar"), ordered=TRUE)

InsectSpray数据框,包含6种喷剂spray(A-F)处理后昆虫的数量count,要根据spray分组求count均值,再按均值大小升序排列spray

InsectSpray$spray = with(InsectSpray, reorder(spray,count,mean))

cut 将数值变量转换成因子:cut(women$weight,3,labels=c('low','med','high'))

时间序列: days = seq(from=as.Date('2012-10-11'), to=as.Date('2012-10-21'),by='day')

按flow升序: new <- old[ order( old[,'flow'] ) , ]

取满足条件的子集中指定的列:subset(dd, b>10,select=c(cola,colb) )

cat 打印输出字符串

按条件拆分字符串(支持正则): strsplit(somestr, ' ')

替换 gsub

R语言初学者指南:笔记

c, cbind, rbind

dfrm <- data.frame(WC = wincrd,TS=tarsus)

dfrm$WC

read.table

取符合某个条件的行:somedata[ somedata$somecol==1, ]

取符合多个条件的行(或):somedata[ somedata$somecola==1 | somedata$somecolb==2 | somedata$somecolc==3, ]

取符合多个条件的行(与):somedata[ somedata$somecola==1 & somedata$somecolb==2 &somedata$somecolc==3, ]

取第六列:somedata[ , 6]

合并:merge

write.table

排序:order

根据B分组计算A的均值:tapply(veg$a, veg$b, mean)

按列求第5-9列元素的均值,输出值为向量:sapply(veg[,5:9], FUN=mean)

按列求第5-9列元素的均值,输出值为列表:lapply(veg[,5:9], FUN=mean)

根据指定条件分组计数:table(deer$sex, deer$year)

z <- function(x,y) {}

连接字符串 paste("a","b", sep=" ")


y <- ifelse(x < 1, -1, 1)  相当于 y <- sign(x - 1)

x <- 10:1 ; x %in% c(4:6) 检查在x数组中取值在c(4,6)集合内的元素 

2012年10月28日星期日

笔记:七周七语言

读完个人感觉Prolog、Erlang更好玩~

Ruby

Mixin:类Class  Include 模块Module

元编程,在宏里面,自动对我们想添加到目标类上的所有方法调用define_method

Io

传递消息,没有类的概念,语法简单

Prolog

声明式的编程语言,基于逻辑推断

其中的四色问题、八皇后问题求解例子非常精彩

Scala

没仔细看

Erlang

适合并发,轻量级进程,高可靠

函数式语言,列表解析很不错

Clojure

没仔细看

Haskell

纯洁的函数式语言,高阶函数很漂亮

强类型比较麻烦

2009年8月2日星期日

优先级,结合性 => 括号

见:[Real world Haskell] 中文翻译:第一章 快速上手

处理优先级和结合性规则

有时保留一些括号会好一些,即使当Haskell允许我们省略它们的时候也是如此。它们的存在可以帮助以后的读者(包括我们自己)理解我们所要表达的意思。

更重要的是,完全依赖运算符优先级的复杂表达式是众所周知的bug源头。一个哪怕很短的,但完全没有括号的表达式,其所要表达的意图很容易被编译器或者人理解成不同的意思。

没必要记住所有的优先级和结合性规则:如果你不确定的话简单的加上括号就好了

上面这段真是赞啊,哈哈~