Profilo di 宁静致远宁静致远FotoBlogElenchiAltro Strumenti Guida

Philippe

Professione
Località
Interessi
La rete di amici di questo contatto è vuota o privata.

宁静致远

Nessun album fotografico.
14 marzo

Java与PHP的DES算法相接

对应JAVA的DES/ECB/PKCS5Padding
PHP相应代码
<?

function encrypt_something($input)
{
   $size = mcrypt_get_block_size('des', 'ecb');
   $input = pkcs5_pad($input, $size);
  
   $key = 'YOUR SECRET KEY HERE';
   $td = mcrypt_module_open('des', '', 'ecb', '');
   $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
   mcrypt_generic_init($td, $key, $iv);
   $data = mcrypt_generic($td, $input);
   mcrypt_generic_deinit($td);
   mcrypt_module_close($td);
   $data = base64_encode($data);
   return $data;
}

function pkcs5_pad ($text, $blocksize)
{
   $pad = $blocksize - (strlen($text) % $blocksize);
   return $text . str_repeat(chr($pad), $pad);
}

function pkcs5_unpad($text)
{
   $pad = ord($text{strlen($text)-1});
   if ($pad > strlen($text)) return false;
   if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
   return substr($text, 0, -1 * $pad);
}
?>
28 dicembre

关于集群环境下的一个不错的注意

InetAddress host = InetAddress.getLocalHost();
name = host.getHostName();
arg0.getServletContext().setAttribute("hostName", name);
 
把这个写到Listener里
区别是哪台服务器
 
20 dicembre

httpd的LOG回卷

下载http://www.cronolog.org
安装cronolog
缺省安装在/usr/local/sbin/cronolog
 
 
定义每天回卷一次
编辑httpd.conf
CustomLog "|/usr/local/sbin/cronolog /data/apache/logs/access_log.%Y%m%d" shaobin
 
定义自己的LogFormat
LogFormat "%{%Y-%m-%d %H:%M:%S}t  %h  %m  %H  %U%q  %{Referer}i  %D  %{FOO}C" shaobin
           日期  远端主机  请求方法  请求协议  请求URL及参数  请求报头  请求时间毫秒  COOKIE的值
 
2006-12-18 17:08:40     218.64.17.170   GET     HTTP/1.1        /event/index/img/1/2.jpg        http://XXX.com/event/index/f1.html    110     127.0.0.1_1163763590_1638936469
2006-12-18 17:08:40     218.64.17.170   GET     HTTP/1.1        /event/index/img/1/1.jpg        http://XXX.com/event/index/f1.html    117     127.0.0.1_1163763590_1638936469
 
 
日期参数的含义:
%A 星期名全称(本地的)
%a 3个字符的星期名(本地的)
%B 月份名的全称(本地的)
%b 3个字符的月份名(本地的)
%c 日期和时间(本地的)
%d 2位数的一个月中的日期数
%H 2位数的小时数(24小时制)
%I 2位数的小时数(12小时制)
%j 3位数的一年中的日期数
%M 2位数的分钟数
%m 2位数的月份数
%p am/pm 12小时制的上下午(本地的)
%S 2位数的秒数
%U 2位数的一年中的星期数(星期天为一周的第一天)
%W 2位数的一年中的星期数(星期一为一周的第一天)
%w 1位数的星期几(星期天为一周的第一天)
%X 时间 (本地的)
%x 日期 (本地的)
%Y 4位数的年份
%y 2位数的年份
%Z 时区名
%% 符号`%'本身
 
23 novembre

JMagick写中文

好几次被问这个问题了
有时间再写吧
fontPath = "/usr/java/jdk1.5.0_09/jre/lib/fonts/simsun.ttf";
aInfo.setFont(fontPath);
 
 
16 novembre

Java命令选项

-Xms        set initial Java heap size
-Xmx        set maximum Java heap size
-Xss        set java thread stack size
15 novembre

MySQL数据结构操作

增加字段
alter table dbname add column <字段名><字段选项>
 
修改字段
alter table dbname change <旧字段名> <新字段名><选项>
 
删除字段
alter table dbname drop column <字段名>
14 novembre

Eclipse的字符编码

在Preferences -->> General -->> Editor内
这里可以设置字符编码和换行符的类型

SVN切换认证用户

在TortoiseSVN1.4系列版本里的Settings里可以Clear
但是在1.3系列里就没有
在Eclipse也不知道该如何操作
 
06 novembre

一个常用的find命令

touch -t 0608081010 1.txt
touch -t 0610100808 2.txt
find -newer 1.txt ! -newer 2.txt -ls
查找在2006年8月8日10:10到06年10月10日08:08之间的文件
 

ibatis与oscache的一个问题

虽然手册里说CACHE缺省值是TRUE,但实际上不是.
所以需要在配置文件里显示的配置
<settings cacheModelsEnabled="true" />
官方论坛里的FAQ说的,呵呵

oscache集群

oscache支持两种集群
JMS和JavaGroups
 
基于JavaGroups的集群
以下的官方的缺省配置
 
cache.event.listeners=com.opensymphony.oscache.plugins.clustersupport.JavaGroupsBroadcastingListener
UDP(mcast_addr=231.12.21.132;mcast_port=45566;ip_ttl=32;\
mcast_send_buf_size=150000;mcast_recv_buf_size=80000):\
PING(timeout=2000;num_initial_members=3):\
MERGE2(min_interval=5000;max_interval=10000):\
FD_SOCK:VERIFY_SUSPECT(timeout=1500):\
pbcast.NAKACK(gc_lag=50;retransmit_timeout=300,600,1200,2400,4800;max_xmit_size=8192):\
UNICAST(timeout=300,600,1200,2400):\
pbcast.STABLE(desired_avg_gossip=20000):\
FRAG(frag_size=8096;down_thread=false;up_thread=false):\
pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;print_local_addr=true)
03 novembre

find命令杂记

find . -name 'd*'
当前目录及其子目录下所有以d开头的文件
 
find . -name '*.tmp' -exec rm {} \;
删除当前目录及其子目录下所有以.tmp结束的文件
 
find . -name '*Myname*' -o -name '*myname*'
此命令也可以这样写find . -name '*\[Mm\]yname*'
-o是逻辑或, -a是逻辑与,!是逻辑非
 
find . \(-name a.out -o -name '*.o'\) -atime +7 -exec rm {} \;
删除一周以来未访问过的以.o结尾或名为 a.out的所有文件
 
find logs -type f -mtime +5 -exec rm {} \;
在logs目录中查找更改时间在五日以前的文件并删除
find logs -type f -mtime +5 -ok rm {} \;
与上行的区别是在删除前给予提示
 
find . -type -f -perm 644 -exec ls -l {}\;
在当前目录中查找权限是644的文件
 
find . -name '[A-Z]*' -print
查找以大写字母开头的文件, [a-z]小写字母, [0-9]数字
 
find -name '*.XC' -mount -print
在本文件系统中(不进入其他文件系统)查找以XC结尾的文件
 
find . -size +1000000c -print
查找文件大于1M字节的文件
find . -size +10 -print
查找大于10块的文件(1块=512字节)
 
find /etc -type d -print
在/etc目录下查找所有的目录
find /etc -type l -print
在/etc目录下查找所有的符号连接
 

JMagick的destroyImages

JMagick会在/tmp目录下创建一些临时文件
所以在最后处理完的时候调用 destroyImages方法
 

crontab杂记

crontab
-e  编辑
-l  显示
-r 删除
 
minute  hour  day of month  month  day of week 五个参数的意义:
分钟(0-59)
小时(0-23)
一月中的第几天(1-31)
月份(1-12)
一个星期中的第几天(0-6)从周日开始
* 表示所有
/ 表示每
- 表示区间
, 表示离散值
 
设置默认的编辑器
环境变量EDITOR=vi;export EDITOR
 
一些例子
>>每天6:00
  0  6  *  *  *
>>每2个小时
  0  */2  *  *  *
>>每周一,三,五的6:30
   30  6  *  *  1,3,5
>>1月1日早上4点
  0  4  1  1 *
>>30  4  1,15  *  5
  每月1日和15日, 或者每周五的4:30
  当 day of month和day of week都存在的时候,是或者的关系.
02 novembre

开发流程的随笔

从版本管理系统用脚本自动打包
仍到测试机,测试通过
从测试机自动分发到各个线上的机器
 
总的流程是这样,细节呢...
 
网易的相册存储也是在域名上编号,好象最大的有500多了.
某台机器维护的时候,这台机器上的图片就会显示维护中.
数据库如何解决性能啊...
当我有1,000,000,000条数据的时候...
25 settembre

Rewrite的问题

[0-9]+数字
1[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]
匹配1开头的九位数字
还有更简单的写法么
 
 
今天学习重写规则的语法。

RewriteRule
Syntax: RewriteRule Pattern Substitution [flags]
  一条RewriteRule指令,定义一条重写规则,规则间的顺序非常重要。对Apache1.2及以后的版本,模板(pattern)是一个POSIX正则式,用以匹配当前的URL。当前的URL不一定是用记最初提交的URL,因为可能用一些规则在此规则前已经对URL进行了处理。
  对mod_rewrite来说,!是个合法的模板前缀,表示“非”的意思,这对描述“不满足某种匹配条件”的情况非常方便,或用作最后一条默认规则。当使用!时,不能在模板中有分组的通配符,也不能做后向引用。
  当匹配成功后,Substitution会被用来替换相应的匹配,它除了可以是普通的字符串以外,还可以包括:

  1. $N,引用RewriteRule模板中匹配的相关字串,N表示序号,N=0..9
  2. %N,引用最后一个RewriteCond模板中匹配的数据,N表示序号
  3. %{VARNAME},服务器变量
  4. ${mapname:key|default},映射函数调用
这些特殊内容的扩展,按上述顺序进行。
  一个URL的全部相关部分都会被Substitution替换,而且这个替换过程会一直持续到所有的规则都被执行完,除非明确地用L标志中断处理过程。
  当susbstitution有”-”前缀时,表示不进行替换,只做匹配检查。
  利用RewriteRule,可定义含有请求串(Query String)的URL,此时只需在Sustitution中加入一个?,表示此后的内容放入QUERY_STRING变量中。如果要清空一个QUERY_STRING变量,只需要以?结束Substitution串即可。
  如果给一个Substitution增加一个http://thishost[:port]的前缀,则mod_rewrite会自动将此前缀去掉。因此,利用http://thisthost做一个无条件的重定向到自己,将难以奏效。要实现这种效果,必须使用R标志。
  Flags是可选参数,当有多个标志同时出现时,彼此间以逗号分隔。
  1. 'redirect|R [=code]' (强制重定向)
      给当前的URI增加前缀http://thishost[:thisport]/, 从而生成一个新的URL,强制生成一个外部重定向(external redirection,指生的URL发送到客户端,由客户端再次以新的URL发出请求,虽然新URL仍指向当前的服务器). 如果没有指定的code值,则HTTP应答以状态值302 (MOVED TEMPORARILY),如果想使用300-400(不含400)间的其它值可以通过在code的位置以相应的数字指定,也可以用标志名指定: temp (默认值), permanent, seeother.
      注意,当使用这个标志时,要确实substitution是个合法的URL,这个标志只是在URL前增加http://thishost[:thisport]/前缀而已,重写操作会继续进行。如果要立即将新URL重定向,用L标志来中重写流程。
  2. 'forbidden|F' (强制禁止访问URL所指的资源)
      立即返回状态值403 (FORBIDDEN)的应答包。将这个标志与合适的RewriteConds 联合使用,可以阻断访问某些URL。
  3. 'gone|G' (强制返回URL所指资源为不存在(gone))
      立即返回状态值410 (GONE)的应答包。用这个标志来标记URL所指的资源永久消失了.
  4. # 'proxy|P' (强制将当前URL送往代理模块(proxy module))
      这个标志,强制将substitution当作一个发向代理模块的请求,并立即将共送往代理模块。因此,必须确保substitution串是一个合法的URI (如, 典型的情况是以http://hostname开头),否则会从代理模块得到一个错误. 这个标志,是ProxyPass指令的一个更强劲的实现,将远程请求(remote stuff)映射到本地服务器的名字空间(namespace)中来。
      注意,使用这个功能必须确保代理模块已经编译到Apache 服务器程序中了. 可以用“httpd -l ”命令,来检查输出中是否含有mod_proxy.c来确认一下。如果没有,而又需要使用这个功能,则需要重新编译``httpd''程序并使用mod_proxy有效。
  5. 'last|L' (最后一条规则)
      中止重写流程,不再对当前URL施加更多的重写规则。这相当于perl的last命令或C的break命令。
  6. 'next|N' (下一轮)
      重新从第一条重写规则开始执行重写过程,新开的过程中的URL不应当与最初的URL相同。 这相当于Perl的next命令或C的continue命令. 千万小心不要产生死循环。
  7. # 'chain|C' (将当前的规则与其后续规则綑绑(chained))
      当规则匹配时,处理过程与没有綑绑一样;如果规则不匹配,则綑绑在一起的后续规则也不在检查和执行。
  8. 'type|T=MIME-type' (强制MIME类型)
      强制将目标文件的MIME-type为某MIME类型。例如,这可用来模仿mod_alias模块对某目录的ScriptAlias指定,通过强制将该目录下的所有文件的类型改为 “application/x-httpd-cgi”.
  9. 'nosubreq|NS' (used only if no internal sub-request )
      这个标志强制重写引擎跳过为内部sub-request的重写规则.例如,当mod_include试图找到某一目录下的默认文件时 (index.xxx),sub-requests 会在Apache内部发生. Sub-requests并非总是有用的,在某些情况下如果整个规则集施加到它上面,会产生错误。利用这个标志可排除执行一些规则。
  10. 'nocase|NC' (模板不区分大小写)
      这个标志会使得模板匹配当前URL时忽略大小写的差别。
  11. 'qsappend|QSA' (追加请求串(query string))
      这个标志,强制重写引擎为Substitution的请求串追加一部分串,则不是替换掉原来的。借助这个标志,可以使用一个重写规则给请求串增加更多的数据。
  12. 'noescape|NE' (不对输出结果中的特殊字符进行转义处理)
      通常情况下,mod_write的输出结果中,特殊字符(如'%', '$', ';', 等)会转义为它们的16进制形式(如分别为'%25', '%24', and '%3B')。这个标志会禁止mod_rewrite对输出结果进行此类操作。 这个标志只能在 Apache 1.3.20及以后的版本中使用。
  13. 'passthrough|PT' (通过下一个处理器)
      这个标志强制重写引擎用filename字段的值来替换内部request_rec数据结构中uri字段的值。. 使用这个标志,可以使后续的其它URI-to-filename转换器的Alias、ScriptAlias、Redirect等指令,也能正常处理RewriteRule指令的输出结果。用一个小例子来说明它的语义:如果要用mod_rewrite的重写引擎将/abc转换为/def,然后用mod_alas将/def重写为ghi,则要:
    RewriteRule ^/abc(.*) /def$1 [PT]
    Alias /def /ghi
    如果PT标志被忽略,则mod_rewrite也能很好完成工作,如果., 将 uri=/abc/... 转换为filename=/def/... ,完全符合一个URI-to-filename转换器的动作。接下来 mod_alias 试图做 URI-to-filename 转换时就会出问题。
    注意:如果要混合都含有URL-to-filename转换器的不同的模块的指令,必须用这个标志。最典型的例子是mod_alias和mod_rewrite的使用。
  14. 'skip|S=num' (跳过后面的num个规则)
      当前规则匹配时,强制重写引擎跳过后续的num个规则。用这个可以来模仿if-then-else结构:then子句的最后一条rule的标志是skip=N,而N是else子句的规则条数。
  15. 'env|E=VAR:VAL' (设置环境变量)
      设置名为VAR的环境变量的值为VAL,其中VAL中可以含有正则式的后向引用($N或%N)。这个标志可以使用多次,以设置多个环境变量。这儿设置的变量,可以在多种情况下被引用,如在XSSI或CGI中。另外,也可以在RewriteCond模板中以%{ENV:VAR}的形式被引用。

注意:一定不要忘记,在服务器范围内的配置文件中,模板(pattern)用以匹配整个URL;而在目录范围内的配置文件中,目录前缀总是被自动去掉后再进行模板匹配的,且在替换完成后自动再加上这个前缀。这个功能对很多种类的重写是非常重要的,因为如果没有去前缀,则要进行父目录的匹配,而父目录的信息并不是总能得到的。一个例外是,当substitution中有http://打头时,则不再自动增加前缀了,如果P标志出现,则会强制转向代理。
注意:如果要在某个目录范围内启动重写引擎,则需要在相应的目录配置文件中设置“RewriteEngine on”,且目录的“Options FollowSymLinks”必须设置。如果管理员由于安全原因没有打开FollowSymLinks,则不能使用重写引擎。
12 settembre

Cookie杂记

设置Cookie的过期时间

var mydate = new Date();
mydate.setTime(mydate.getTime() + 48*60*60*1000);
expires = mydate.toGMTString();

cookiename+cookievalue;expire=expirationdategmt;path=urlpath;domain=sitedomain

Java里删除

cookie.setMaxAge(0);

Httpd的mod_speling

MOD_SPELING模块
 
忽略URL里的大小写,自动匹配文件名
 
配置选项
CheckSpelling on | off
 
在2.2版本里还可以
CheckCaseOnly on|off
11 settembre

IE与FireFox兼容性[2]之剪切板

JS代码:

function clipboard(content)

{

         if(window.clipboardData) {

                   window.clipboardData.setData("Text", content);

         } else if(window.netscape) {

                   netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

                   var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);

                   if(!clip) return;

                   var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);

                   if(!trans) return;

                   trans.addDataFlavor('text/unicode');

                   var str = new Object();

                   var len = new Object();

                   var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);

                   var copytext = content;

                   str.data = copytext;

                   trans.setTransferData("text/unicode", str, copytext.length*2);

                   var clipid = Components.interfaces.nsIClipboard;

                   if (!clip) return false;

                   clip.setData(trans, null, clipid.kGlobalClipboard);

         }

}

 

注意在firefox里的使用:

notes about security:

a cause of the tight security settings in mozilla you have to sign the javascript to make it work another way is to change your firefox/mozilla settings

 to do this add this line to your prefs.js file in your firefox/mozilla user profile directory

 user_pref("signed.applets.codebase_principal_support", true);

or change it from within the browser with calling the "about:config" page

  

原文http://www.krikkit.net/howto_javascript_copy_clipboard.html

 

09 settembre

IE和FireFox兼容性[1]

<img src="" no="">
IE里可以.no来取
FireFox里getAttribute("no");来取
 
<div id="aa" name="aa" no="">
<div id="aa" name="aa" no="">
getElementsByName函数的行为
在IE里识别的是ID
在FireFox里识别的是NAME
所以都要加上
document.getElementsByName("aa")[i].getAttribute("no")
 
另外,取表单前要加上 document