<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
 <channel>
  <title>hellophper.COM</title>
  <link>http://hellophper.com</link>
  
  <pubDate>Sun, 04 May 2008 04:05:31 GMT</pubDate>
  <language>zh-CN</language>
  <image>
   <link>http://hellophper.com</link>
   <url>http://hellophper.com/images/logo.png</url>
   <title>hellophper.COM</title>
  </image><item>
   <title>db2数据库，更新时替换为null的数据</title>
   <link>http://hellophper.com/htm/5/420.html</link>
	 
   <description>db2数据库，更新时替换为null的数据
代码如下

update T_QX_YHXX set C_CZMM = coalesce(PASSWORD,'D93AE65992CAF6A8751E334D0A716AD8')
 ...</description>
   <pubDate>2011.01.13 00:01:14</pubDate>
   <guid>http://hellophper.com/htm/5/420.html</guid>
  </item><item>
   <title>mysql建立外键</title>
   <link>http://hellophper.com/htm/5/419.html</link>
	 
   <description>代码如下
mysql建立外键

alter table table1 add constraint foreign_key_name
foreign key (table1_field)
references table2(table2_field)
on update cascade
 ...</description>
   <pubDate>2011.01.03 19:01:17</pubDate>
   <guid>http://hellophper.com/htm/5/419.html</guid>
  </item><item>
   <title>md5_3加密，java版</title>
   <link>http://hellophper.com/htm/5/418.html</link>
	 
   <description>参考部分网上代码
对中文加密还有些问题

package com.copote.function.text;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;

/**
 * MD5加密方式
 * 包含md5和md5_3
 * 根据js代码改写，md5改写
 * @author  bin
 * 对中文的支持不好，如果非要中文，加密的是UTF8的
 */
public class FunctionTextMd5 {
    
	private final static char[] dictionary = { '0', '1', '2', '3', '4', '5',
		'6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

	public static void main(String[] args) {
		System.out.println(new FunctionTextMd5().md5_3("22222222"));
	}
	public String md5(String str) {
		String md5str = "";
		try {
			md5str = code(str, 32);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return md5str;
	}
	
	public String md5_3(String str) {
		MessageDigest md = null;
		try {
			md = MessageDigest.getInstance(System.getProperty("MD5.algorithm", "MD5"));
		} catch (NoSuchAlgorithmException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		byte[] temp = null;
		try {
			temp = md.digest(str.getBytes("utf-8"));//第一次加密
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		temp = md.digest(temp);//第二次加密
		temp = md.digest(temp);//第三次加密
		return bytesToHex(temp);
	}
	
	public String bytesToHex(byte[] bytes) {
		String str = "";
		int t;
		for (int i = 0; i < 16; i++) {
			t = bytes[i];
			if (t < 0)
				t += 256;
			str += dictionary[(t >>> 4)];
			str += dictionary[(t % 16)];
		}
		return str;
	}

	public String code(String str, int bit) throws Exception {
		try {
			MessageDigest md = MessageDigest.getInstance(System.getProperty("MD5.algorithm", "MD5"));
			if (bit == 16)
				return bytesToHex(md.digest(str.getBytes("utf-8"))).substring(8, 24);
			return bytesToHex(md.digest(str.getBytes("utf-8")));

		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			throw new Exception("Could not found MD5 algorithm.", e);
		}
	}
}
 ...</description>
   <pubDate>2010.12.14 00:12:45</pubDate>
   <guid>http://hellophper.com/htm/5/418.html</guid>
  </item><item>
   <title>其他微薄同步到QQ微薄</title>
   <link>http://hellophper.com/htm/5/417.html</link>
	 
   <description>主要参考http://www.syncoo.com/php-follow5-tencent-mblog-3258.htm
md5_3加密在后面的js文件中



	include "config.php";//数据库连接
	include "function.php";//一些数据库操作函数
	include "publish.php";
	ignore_user_abort(true);//关闭浏览器继续执行代码
	set_time_limit(200);//设置超时
	$curl = curl_init("http://其他微薄地址");
	$cookie_jar = tempnam('.', 'cookie');
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);
	$verifyCode = curl_exec($curl);
	curl_close($curl);
	/*****可以不用写入文件*****/
	writetext("xxx.txt",$verifyCode);
	unlink($cookie_jar);
	$html = readtext("xxx.txt");
	/********采集正则获取需要采集微薄的id和内容*************/
	preg_match_all("",$html, $content);
	preg_match_all("",$html, $id);
	$content_array=array();
	$num = 0;
	/*************************判断有没有重复每次同步5条数据**************/
	foreach($id[5] as $key => $value){
		//判断数据库中是否存在
		if($mysql_link->num_rows("select * from lw_twitterToqq where id = $value") == 0){
			if($num < 5){
				$content_array[$key]=strip_tags($content[1][$key])." For Tw";
			}
			$num++;
		}else{
			//echo "数据重复id:".$value.$content[1][$key]."";
		}
	}
	/*************获取没有重复数据后调用xxxToqq函数$result接收返回的数组****************/
	$result = xxxToqq($content_array);
	//echo "";
	/*******循环出返回的消息，把成功发送的入库***********/
	foreach($result as $key => $value){
			$value = explode(",",$value);
			$array_result2 = explode(":",$value[0]);
			//echo "id:".$id[5][$key]."value:".strip_tags($content[1][$key]);
			//echo $value[1]."";
			
			if($array_result2[1]==0){
				//插入数据库
				$mysql_link->insert("lw_twitterToqq",array("id"=>$id[5][$key],"content"=>strip_tags($content[1][$key])));
			}
		
	}




function xxxToqq($content){
	ignore_user_abort(true);
	set_time_limit(200);
	$qq = '@binphp';//国内ip可以填写qq号，国外ip只能填写@微薄账号
	$tqq = "binphp";//可以不填写
	//经过腾讯那个md5_3()加密后的密码
	$pwd = '密码';
	$verifyURL = 'http://ptlogin2.qq.com/check?uin='.$qq.'appid=46000101';
	$loginURL = 'http://ptlogin2.qq.com/login?';
	
	//获取验证码及第一次cookie
	$curl = curl_init($verifyURL);
	$cookie_jar = tempnam('.', 'cookie');
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);
	$verifyCode = curl_exec($curl);
	curl_close($curl);
	$verifyCode = strtoupper(substr($verifyCode, 18, 4));
	echo '验证码：'.$verifyCode;
	
	//echo '';
	// echo 'Cookies：'.$cookie_jar;
	// echo '';
 
	//发送登录请求并获取第二次cookie
	$loginURL .= 'u='.$qq.'p='.md5($pwd.$verifyCode).'verifycode='.$verifyCode.'aid=46000101u1=http%3A%2F%2Ft.qq.comh=1from_ui=1fp=loginerroralert';
	//echo '登录地址：'.$loginURL;
	$curl = curl_init($loginURL);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);
	curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_jar);
	
	$loginResult = curl_exec($curl);
	curl_close($curl);
	//echo '登录验证结果：'.$loginResult;
	//echo '';
 	/*
	//获取第三次cookie
	$curl = curl_init('http://t.qq.com');
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);
	curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_jar);
	$loginResult = curl_exec($curl);
	curl_close($curl);
 
	//第四次
	$curl = curl_init('http://t.qq.com/binphp');
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);
	curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_jar);
	$loginResult = curl_exec($curl);
	curl_close($curl);
 	//echo $loginResult;
*/
	//file_put_contents('result.html',$loginResult);

	//$content = "本地发送";
		/*******************减少2次登陆，直接发送消息***********************/
	 	$result = array();
	 	$referer_url='http://t.qq.com';
	 	$url='http://t.qq.com/publish.php';
	 	$curl = curl_init();
	 	curl_setopt($curl, CURLOPT_REFERER, $referer_url);
	 	curl_setopt($curl, CURLOPT_URL, $url);
	 	curl_setopt($curl, CURLOPT_POST, 1); 
	 	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	 	
	 	curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);
	 	curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_jar);
	 	foreach($content as $key => $value){
		 		$fields = 'content='.strip_tags($value).'countType=pic=viewModel=0';
		 		curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
		 		$loginResult = curl_exec($curl);
		 		sleep(10);//每次间隔10秒，腾讯不允许联系发送消息
		 		//echo $loginResult."";
		 		$result[$key] = $loginResult;//保存返回的消息，以及此消息的key值
	 		
	 	}
	 	curl_close($curl);
	 	
		unlink($cookie_jar);
		return $result;
	}





function md5_3(b) {
    var a = new Array;
    a = core_md5(str2binl(b), b.length * 8);
    a = core_md5(a, 16 * 8);
    a = core_md5(a, 16 * 8);
    return binl2hex(a)
}
function md5(a) {
    return hex_md5(a)
}
function hex_md5(a) {
    return binl2hex(core_md5(str2binl(a), a.length * 8))
}
function str_md5(a) {
    return binl2str(core_md5(str2binl(a), a.length * 8))
}
function core_md5(p, k) {
    p[k >> 5] |= 128 << ((k) % 32);
    p[(((k + 64) >>> 9) << 4) + 14] = k;
    var o = 1732584193;
    var n = -271733879;
    var m = -1732584194;
    var l = 271733878;
    for (var g = 0; g < p.length; g += 16) {
        var j = o;
        var h = n;
        var f = m;
        var e = l;
        o = md5_ff(o, n, m, l, p[g + 0], 7, -680876936);
        l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586);
        m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819);
        n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330);
        o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897);
        l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426);
        m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341);
        n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983);
        o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416);
        l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417);
        m = md5_ff(m, l, o, n, p[g + 10], 17, -42063);
        n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162);
        o = md5_ff(o, n, m, l, p[g + 12], 7, 1804603682);
        l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101);
        m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290);
        n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329);
        o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510);
        l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632);
        m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713);
        n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302);
        o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691);
        l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083);
        m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335);
        n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848);
        o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438);
        l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690);
        m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961);
        n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501);
        o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467);
        l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784);
        m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473);
        n = md5_gg(n, m, l, o, p[g + 12], 20, -1926607734);
        o = md5_hh(o, n, m, l, p[g + 5], 4, -378558);
        l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463);
        m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562);
        n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556);
        o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060);
        l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353);
        m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632);
        n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640);
        o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174);
        l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222);
        m = md5_hh(m, l, o, n, p[g + 3], 16, -722521979);
        n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189);
        o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487);
        l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835);
        m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520);
        n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651);
        o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844);
        l = md5_ii(l, o, n, m, p[g + 7], 10, 1126891415);
        m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905);
        n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055);
        o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571);
        l = md5_ii(l, o, n, m, p[g + 3], 10, -1894986606);
        m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523);
        n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799);
        o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359);
        l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744);
        m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380);
        n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649);
        o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070);
        l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379);
        m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259);
        n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551);
        o = safe_add(o, j);
        n = safe_add(n, h);
        m = safe_add(m, f);
        l = safe_add(l, e)
    }
 
    return Array(o, n, m, l)
}
function md5_cmn(h, e, d, c, g, f) {
    return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d)
}
function md5_ff(g, f, k, j, e, i, h) {
    return md5_cmn((f  k) | ((~f)  j), g, f, e, i, h)
}
function md5_gg(g, f, k, j, e, i, h) {
    return md5_cmn((f  j) | (k  (~j)), g, f, e, i, h)
}
function md5_hh(g, f, k, j, e, i, h) {
    return md5_cmn(f ^ k ^ j, g, f, e, i, h)
}
function md5_ii(g, f, k, j, e, i, h) {
    return md5_cmn(k ^ (f | (~j)), g, f, e, i, h)
}
function safe_add(a, d) {
    var c = (a  65535) + (d  65535);
    var b = (a >> 16) + (d >> 16) + (c >> 16);
    return (b << 16) | (c  65535)
}
function bit_rol(a, b) {
    return (a >> (32 - b))
}
function str2binl(d) {
    var c = Array();
    var a = (1 << 8) - 1;
    for (var b = 0; b < d.length * 8; b += 8) {
        c[b >> 5] |= (d.charCodeAt(b / 8)  a) << (b % 32)
    }
    return c
}
function binl2str(c) {
    var d = "";
    var a = (1 << 8) - 1;
    for (var b = 0; b < c.length * 32; b += 8) {
        d += String.fromCharCode((c[b >> 5] >>> (b % 32))  a)
    }
    return d
}
function binl2hex(c) {
    var b = "0123456789ABCDEF";
    var d = "";
    for (var a = 0; a < c.length * 4; a++) {
        d += b.charAt((c[a >> 2] >> ((a % 4) * 8 + 4))  15) + b.charAt((c[a >> 2] >> ((a % 4) * 8))  15)
    }
    return d
}
document.write(md5_3('这里你的原始密码'));

 ...</description>
   <pubDate>2010.12.02 22:12:55</pubDate>
   <guid>http://hellophper.com/htm/5/417.html</guid>
  </item><item>
   <title>weblogic部署web项目</title>
   <link>http://hellophper.com/htm/5/416.html</link>
	 
   <description>1：安装server103_win32.exe，任何路径。
2：打开：Oracle WebLogic-》WebLogic Server 10gR3-》Tools-》Configuration Wizard 


3：创建一个新的domain，一直next 


4：填写登录管理的用户名和密码，然后一路next直到最后的界面
    

5：完成后运行服务，勾选Start Admin Server
    

6：输入：http://localhost:7001/console
测试是否成功，第一次会有些慢，请耐心等待

 
看到入下界面后输入第4步填写的用户名和密码
7：配置数据源

 
8：点击新建
    

9：选择相应的数据库和数据源名称
    

10：一路next，填写用户名和密码


11：完成后测试链接是否成功

    

成功后点击完成回到主界面
12：配置应用
    

13：安装应用
    

14：选择项目的目录
    

15：点击完成，发布项目，一个漫长的等待过程

 
16：完成后点击保存

 
17：访问地址


如果有任何问题可以发邮件到binphp#gmail.com    #换成@  ...</description>
   <pubDate>2010.11.08 00:11:21</pubDate>
   <guid>http://hellophper.com/htm/5/416.html</guid>
  </item><item>
   <title>技术文化和惨淡命运 —— 怀念中国雅虎</title>
   <link>http://hellophper.com/htm/5/415.html</link>
	 
   <description>很早就想写这么一篇文章了。我离开中国雅虎已经一年有余，在中国雅虎工作的那段时光是我最珍贵的回忆之一，和以前的同事吃饭聊天的时候也经常会怀念一下中国雅虎，怀念得多了，就觉得不如写篇文章好好回顾一下。很多事情虽然已经过去，但有些话不说出来，到底意难平。
从2008年7月份毕业之后加入了中国雅虎，到2009年9月份跟着中国雅虎工程技术部全体人员ldquo;被跳槽rdquo; 到淘  宝，我在中国雅虎只呆了一年多的时间。这个时间并不长，甚至可以说短得可怜，所以我或许不是写这篇文章的最佳人选。但是，中国雅虎给我的是人生第一份工  作，凭着初生牛犊对社会的好奇心，我对公司的文化、技术、架构、流程包括产品设计等各个方面都有浓厚的兴趣和广泛的了解，从这个方面来说，由我来写这篇文  章也是合适的。而且最重要是，我愿意把它们写出来。
在进入正文之前，先开诚布公地声明一下：众所周知，中国雅虎是阿里巴巴的一个子公司，所以文中我也不必遮遮掩掩地用ldquo;某电子商务公司rdquo;来代替。而且我对阿里巴巴这个公司有意见，不代表我对阿里巴巴的员工有意见，如果伤了某些人的感情，先说声抱歉，请您发扬一下风格，在这里也ldquo;拥抱变化rdquo;一下。
正文：
我在 2007 年底通过校园招聘拿到了中国雅虎的 offer ，但实际上在我2008年7月份入职的时候，中国雅虎的品牌虽然还在，公司却已经在7月9日和口碑网合并了，改名叫做ldquo;雅虎口碑rdquo;。尽管这样，到现在为止我还是厚着脸皮说自己原来是雅虎的，因为那里让我着迷和真心喜欢的东西全部都是紫色的，而不是橙色的。
雄厚的技术实力
中国雅虎最好的一个地方就是它和 Yahoo 全球共享同一个技术平台，那是一个有十几年历史的技术平台。Yahoo 的技术文化不如   Google 的工程师文化那么有名，但 Yahoo 在相当长的一段时间内都是互联网的旗帜，吸引了全球大量的技术牛人加入，Yahoo   的技术平台就是他们的知识、经验和心血日积月累的成果。尽管阿里巴巴收购了中国雅虎，但是在技术方面并没有对中国雅虎做出太大的改造（幸好没有改造），所  以就工程师来说，每天更多接触到的还是 Yahoo 的东西，而不是阿里巴巴的东西，对我影响最大的也正是这些东西。
一、Linux 和开源文化
之前一个中国雅虎的同事，他是工作了几年之后才来中国雅虎，有一次他说：ldquo;雅虎是我见过的最尊重 Linux 的一家公司rdquo;。什么叫做尊重   Linux 呢 ？ 不是在服务器上装个 Linux 跑 Apache 就叫做尊重 Linux 。在雅虎很多同事日常都使用 Linux   操作系统办公，即使有一些人使用 Windows, 也都是使用 pietty 或者 Xshell 等工具远程连接到开发机器上使用 VIM   做开发。不只是日常工作，在雅虎全球的技术体系中，产品的上线和发布也都借鉴了 Linux   包管理的方式：所有的产品都会被打成包放在一个专门的服务器上，产品的部署和升级就变成了简单的装包操作，绝对不会出现最后上线的时候文件路径出错等低级  问题。Yahoo 的技术平台是深深扎根于 Linux 和开源文化的。

大型互联网公司一般都会使用开源的产品，同时也向社区贡献代码。Google 和 Facebook 经常将自己研发的成熟产品开源，Yahoo 当然也不例外。而且 Yahoo 不仅仅给社区贡献代码，它在设计方面也拥抱了开源文化，将多年研究总结的设计模式库  共享了出来。在 Yahoo 内部，很多代码都是存放在 CVS   里面的，并没有限制读的权限，任何员工都可以查看里面的代码，这对于那些小团队内部代码都不敢共享防员工如防贼的公司来说应该是非常不可思议的。另外，   Yahoo 的工程师也经常出现在各种技术会议上，分享自己项目的架构、流程和经验。虽然这些更多都是 Yahoo   全球技术团队做的事情，但是对于他们那种开放共享的精神我们是非常认同并且向往的，你会觉得做一个工程师很自豪，而不会觉得自己是民工、做技术没前途。这  种认同感和成就感乍看上去没什么，但实际上它决定了你对技术的追求和态度，也会影响你以后在职业上的选择。
二、浓厚的技术氛围
虽然2008年的时候中国雅虎已经被折腾得快不像样了（这点后面细说），不过那个时候还是有浓厚的技术氛围的。让我印象深刻的一件事情是   Google Chrome 浏览器刚发布的时候，大家都立刻下载下来使用，但由于公司内网的一些问题无法打开网页。当我正打算把 Chrome   卸载了的时候，忽然发现公司邮件列表里面已经有人发邮件给出了详细的解决方案。从这件小事可以看出公司大部分工程师都不是那种只知道完成工作的人，而是随   时关注新技术和业界动态的人。当时中国雅虎还是有很多牛人没有离开，大家也喜欢在邮件列表里面谈论技术，经常能看到精彩的讨论和解答。最让我兴奋的是，无  论我遇到什么技术问题都不用慌张，即使无法 Google   到答案也可以从同事那里获取到帮助，而且大家也愿意回答技术问题，这对于我这样一个基础很差技术又烂的菜鸟来说真是天大的福气。
中国雅虎还有做技术分享的文化，如果有哪位同事想要分享一下最近学习到的技术，就可以自己预订一个会议室然后向所有的工程师发送会议邀请，有时候还  会有一系列非常系统的课程，我就参加过长达十几个课时的 UED 培训，完全改变了我对 Web Develop   的认识。很多公司应该都鼓励员工做技术分享，但在中国雅虎几乎每次技术分享都会把会议室坐的满满当当，可见大部分工程师都还是想要不断提高自己的技术能  力。直到离开雅虎之后我才明白这种普遍的学习热情有多么难得。我想，业界之所以到处流传着ldquo;程序员做到30岁最好转管理rdquo;之类的忠告，应该就是因为大部分  公司都缺乏这种良好的技术氛围吧。
三、庞大的知识库
入职的前几天，我每天的工作就是看文档，不是类似ldquo;PHP技术手册rdquo;那种文档，而是一些 Yahoo 内部的工具手册。Yahoo 内部的文档非常齐全和详细，光是 Yinst 这款工具的使用手册就长达几十页。Yahoo 内部是用 Twiki   做知识管理的，这个知识库经过十多年的积累已经非常庞大，从入门到提高，从 PHP 到 C ，从前端到后端helli helli 应有尽有，而且几乎 Yahoo   全球所有子公司的技术资料都是开放浏览的，没有任何乱七八糟的权限设置和保密限制。有这么一个宝藏在，再加上好的学习氛围，如果你想要提高自己的能力的  话，总是可以提高。当初我想从 PHP 工程师转做 Web Developer 的时候，就先把 Twiki 上 UED   部门的所有资料看了一遍，受益匪浅。
国内大部分互联网公司都是没有太多技术积累的，因为大部分产品的开发都只追求开发速度，并不会特别追求技术上的极致，就更不要提文档这种东西了。也  正因为如此，从中国雅虎出来看到其它公司的知识库的时候总有不过瘾的感觉，可能也只有像 Google, 微软和 Facebook  这样的公司才会有像  Yahoo 那样的知识库吧。在和之前一些同事吃饭聊天的时候，大家也总是会怀念那个无所不包完全开放的 Twiki   ，好像少了一个忠实的朋友一样。我们由衷地尊敬那些在完成工作之余还愿意总结项目经验并花时间写 Twiki 的工程师们。
四、完善的流程
第一次参与项目开发的时候，我的 Leader 领了一个 MM 过来说：ldquo;这位是项目的 QA 负责人rdquo;，我当时愣了一下：ldquo;呃helli helli  QA   是做什么的？rdquo; 尽管在大学里我也在实验室做过一些项目，但那些项目基本上都是我自己负责所有的事情，完全没有分工和流程的概念，所以也不知道 QA   是负责产品测试工作的。进入中国雅虎之后，我才第一次接触到商业产品的开发流程，不过由于那个时候中国雅虎已经半死不活，我也没有受到有关流程的入职培  训，以至于在做了好几个项目之后才真正熟悉了完整的流程。
中国雅虎的开发流程沿袭了 Yahoo   的开发流程，乍看之下很平常，对于已经熟悉的工程师来说还显得枯燥，但后来我特别留心了这套流程之后，非常惊奇于它的严谨和高效，所以这里要详细说明一  下。Yahoo   的内部生产线分为三个相互独立的环境：开发环境、测试环境和生产环境（即线上环境）。这三个环境虽然独立，但它们的配置都会尽量保持一致，这样就可以保证   开发完成的产品不会因为环境不同而出现问题。在开发的时候，我们会在开发环境中搭建虚拟环境，开发完毕之后开发工程师会自己在虚拟环境里面测试，保证没有  大的问题，然后就会把所有相关文件打包上传到雅虎全球统一放置产品包的地方。上传完毕之后，就会发邮件通知 QA   部门相关人员，邮件内容里面要写明产品在测试环境的部署步骤：需要安装哪些包、是否需要修改数据库等等。然后 QA 就会开始测试，如果发现 BUG   就会写到 Bugzilla   中，指派给相应的开发工程师，开发工程师就会在开发环境中定位BUG并修正，修正一些BUG之后就会再次打包升级产品的版本，然后QA   会将新的软件包部署到测试环境验证之前的 BUG 并报告新的 BUG 。整个测试过程中可能要发布好多个版本，直到所有 BUG   被修正为止。修正完毕所有的 BUG 之后，开发工程师就会填写上线申请，Ops   看到申请之后就会安排一个时间把产品部署到生产环境。一般来说，生产环境不止会有一台机器，所以 Ops   会先从生产环境摘下一台机器部署，部署完毕之后会告知 QA 和开发工程师，然后 QA 和开发工程师就会修改 Hosts   文件，配置域名指向那台机器进行线上的测试，如果测试没有问题，那么就会把软件包部署到生产环境中所有的机器上，完成上线；否则就进行回滚，取消这次上  线，也不会影响到线上的用户。
整个流程大概就是这样，但是要特别注意的是以下几点：1. 开发工程师只能接触开发环境。他所能做的就是在开发环境中开发、改 BUG   和打包上传。如果他去测试环境中修改 BUG，就很有可能忘记修改开发环境中的相应代码，这可能会导致产品测试通过但是上线之后却发现大的问题。 2.   产品ldquo;封版rdquo;之后就不可以做任何改动，如果有改动，即使只改动了一点所有功能也要重新测试一遍。所有的 BUG   都修改完毕之后的那个版本就会进行ldquo;封版rdquo;，那就标志着这个产品随时可以准备上线了。如果真的发现了新的 BUG   要修改的话，那么修改之后就需要重新打包重新走一遍完整的测试流程，只有这样才能够保证就算修改代码过程中引入了新的 BUG 也不会被遗漏。 3.   上线手册要详细。开发工程师要详细写明每一个步骤，不只是说明性的文字，还要把具体的安装和修改命令完整地放上去，如果写得好的话，那么 Ops   的同事只需要把上线手册里面的命令逐行复制到服务器上运行就可以完成上线。
这样的流程有什么好处呢？   首先，它最大地降低了上线风险。因为开发工程师不能接触到测试环境，只能打包让QA测试，所以完整经过测试的产品上线之后基本不会有什么问题，况且上线的   时候我们也要先部署到一台机器上进行测试之后才会决定是否上线，即使上线不成功也可以在不影响用户的情况下回滚。中国雅虎的上线极少会出现问题，很多时候  我们上线到半夜只是因为那个时间段用户访问量最小，而不是说焦头烂额地忙活几个小时一直到半夜才上线成功。其次，它使得各个部门职责分明。开发工程师和   QA 通过 Bugzilla 沟通，和 Ops   通过上线手册沟通，因为沟通渠道唯一而且清晰，所以就可以完全责任到人，出了问题也很容易定位到具体环节。比如说，如果产品测试通过之后在上线的时候出现  了问题，那么基本就可以确定是 Ops   操作失误或者上线手册没有写好。职责分明之后很多事情也变得有条理，大家就可以各司其职、专注本职工作并且合作愉快，开会的时候也可以明确知道需要哪些人  参加。
完善、清晰的流程从根本上解决了一些问题，创建了一个非常好的环境，这样我们就可以把心思都放在如何开发和测试上面，而不用担心诸如ldquo;如何上线才能  不出错rdquo;等琐碎的事情。所以尽管中国雅虎的高层那么不靠谱，我工作得还是很开心，因为这个流程保证了管理层再怎么乱开发也不会乱。记得那时候很喜欢改   BUG ，有时候改得兴起会把之前版本遗留的 miss BUG   一并改掉，加班也是颇有兴致，不是很能明白为什么网上大部分程序员讨厌加班讨厌得要死。现在我明白了。
五、自动化工具
工欲善其事，必先利其器。如果没有那么多好用的自动化工具，那么 Yahoo 的流程就不可能如此完善。Yahoo   内部有很多非常好用的工具，而且这些工具都有非常齐全的文档，也可以在 Twiki 上找到不少相关资料。这些工具之所以在 Yahoo   会起到那么大的作用，是因为 Yahoo 全球所有的技术团队都在使用它们，Yahoo   所有的服务器上也是默认安装了这些工具。这些工具就形成了一套全球 Yahoo 工程师通用的话语体系，可以想象它们帮助 Yahoo   节省了多少沟通成本。
由于考虑到服务器的安全问题，Yahoo 的这些工具的使用方法是对外保密的，这里我只简单说一下 Yinst 这款工具的强大。假如要把软件包   example_1_1_0.tar.gz 部署到 a1.yahoo.com ~ a10.yahoo.com ，那么只需要下面这样一行命令：
yinst install example_1_1_0.tar.gz -h a[1-10].yahoo.com
就可以完成整个上线过程。由于好奇的缘故，在上线的时候我比较喜欢跑到 Ops 那边看他们是如何操作的，然后发现其实他们在上线过程中执行的命令很少。因为工具好用，所以产品极少因为 Ops 这个环节出现问题，上线就变成一件比较轻松的事情。
中国雅虎的产品和业务确实不好，搜索不如百度，新闻不如三大门户，ldquo;雅虎助手rdquo;是人人皆知的流氓软件，邮箱也出过丑闻，而且被 Gmail 和   QQ   邮箱远远抛在后面。中国雅虎最广为人知的也都是这些不光彩的事情，但这里我想让很多人知道，对于一个对技术还有追求的工程师来说，当时的中国雅虎真的是一  个很好的工作环境。至少对于我自己来讲，我从 Yahoo 学到了太多太多的好东西，而且这些东西还只是 Yahoo   精华中的一小部分，如果不是阿里巴巴集团战略调整，我一定会在中国雅虎多呆两年。
中国雅虎之死
有个同事曾经说过：中国雅虎就是中国互联网的黄埔军校。虽然别的老牌互联网公司也为行业培养了不少人才，但是没有一个公司像中国雅虎这么悲情。很多中国雅虎的员工离职不是自己想走，而是不得不走，看着原来好好的一个公司变得完全没有前途，只好选择离开。
关注互联网的人应该都知道，在 2005 年的时候，阿里巴巴收购了中国雅虎的全部资产，并享有雅虎品牌及技术在中国的独家使用权。中国雅虎尽管之前也一直水土不服，但被阿里巴巴收购之后悲惨命运才刚刚开始。
关于中国雅虎的折腾史，大家可以去看一下这篇文章，  里面说的已经很详细。从网站的变化就可以看出中国雅虎的摇摆不定，在阿里巴巴入主的这 4 年来，中国雅虎就换了 5   任总裁，每位新官上任后都会颁布新的战略，网站也会随之大变脸。ldquo;治大国若烹小鲜rdquo;，这么简单的道理我相信阿里巴巴的高层不可能不明白，就算大象可以跳  舞，中国雅虎的舞姿是不是也太难看了点？由此可见，中国雅虎在阿里巴巴集团内部就是一个鸡肋，一个可有可无的品牌。
有一件事情完全可以说明马云对中国雅虎的态度。约在 2007   年前后，马云对雅虎中国资产进行了大幅度调整。在此期间，雅虎相册宣布关闭，从发出通知到服务关闭，前后不到 20   天。这种缺乏对用户起码的尊重的行为，导致相当一部分中国用户失去了存储其中的照片。而且它引发的用户对雅虎品牌的失望和不信任，对雅虎来说更是难以挽回   的损失。大家都知道，ldquo;客户第一rdquo;一直都是阿里巴巴宣扬的核心价值观，难道雅虎相册的用户就不是客户？到底是马云铁了心要把雅虎品牌搞砸呢还是所谓的价值  观只是口号？或者是两者皆有？
这几年中国雅虎的历史就是逐渐被瓜分的历史：搜索团队被调走，于是有了后来的淘宝网搜索引擎；IM   团队被独立出去，于是有了后来的阿里旺旺；挖走了广告搜索团队，于是有了后来的阿里妈妈；口碑网发展得不好，于是中国雅虎和口碑网合并，利用中国雅虎的品   牌和技术支持口碑网；最后，中国雅虎的整个工程技术部都注入淘宝，原来的主要业务ldquo;雅虎关系rdquo;直接关闭并且推荐用户使用淘宝网的ldquo;淘江湖rdquo;。时至今日，中  国雅虎已经气息奄奄，再无回天之力了。
我经常觉得，恩，马总在下一盘很大的棋，我们这些普通员工是不明白的。不然为什么ldquo;搞死中国雅虎rdquo;这个庞大的项目规划和施行得这么好？还是阿里巴巴  一直在用实际行动考验中国雅虎员工的价值观呢？而且颇具讽刺意味的是，尽管马云费尽心思拿到了中国雅虎的搜索资源，最近却又和微软的 Bing   合作推出了 Etao 搜索，当初的那些搜索资源都用来做什么了呢？
还有一点不得不提的是中国雅虎和阿里巴巴之间的文化冲突。阿里巴巴一直都不能算一个真正的互联网公司，它只是以互联网作为工具，大部分业务的进行还  是靠线下的销售。阿里巴巴最重视的是销售部门，整体的文化是销售文化，它所取得的成功也都只是商业上的成功，这也就从根本上决定了它不可能像   Google, Yahoo 和 Facebook   等这些真正的互联网公司具有理想主义色彩，也不可能成为优秀工程师向往的地方。马云自己也经常放言说要ldquo;超越沃尔玛rdquo;，从来没有说过要超越 Google   之类的话，因为根本不在同一个领域，阿里巴巴更像一个传统的商业公司。我并不是说做电子商务的公司就不算互联网公司，同样是做电子商务，Amazon   就是互联网行业的领头羊，它非常重视技术，还是最早提供云计算服务的公司，它就是一家真正的ldquo;IT公司rdquo;。
而中国雅虎的技术资产全部来自美国 Yahoo ，工程技术部也继承了 Yahoo   的ldquo;技术文化rdquo;。ldquo;技术文化rdquo;偏重简单实用、冷静思考和解决问题；而ldquo;销售文化rdquo;则重视加油鼓劲，更喜欢喊口号，越热闹越好。我承认这两种文化都有它们的   合理之处，但是强迫工程师接受那种ldquo;销售文化rdquo;就会有很多矛盾出现。阿里巴巴内部有时候玩得还比较过火，跳钢管舞倒也算了，但很多时候做游戏会直接让一个  同事站到前面，然后轮流问他诸如ldquo;第一次用了多长时间rdquo;之类的问题。并不是所有人都喜欢这么玩儿的，ldquo;贱文化rdquo;和ldquo;骚文化rdquo;   的最大一个弊端就是很容易引起一些人的反感让他们觉得被侮辱，而公司不是经常倡导要对人才各尽其用么？为什么要用这样的文化把一些ldquo;思想保守rdquo;的人驱逐出  去呢？我就听说过一些非常优秀的工程师因为这些东西而坚决不去参加公司的培训和集体活动，中国雅虎的很多人应该也是因为无法适应这种ldquo;销售文化rdquo;而出走  的。
另外，当年和我一起通过校园招聘来到雅虎本来有不少人，在 2008 年 3   月份的时候我们还曾一起在北京参加了一个叫做ldquo;集结号rdquo;的新人培训。不过在我入职之后发现，有几个人直接被调动到了阿里巴巴在杭州的其它子公司，还有几个   做搜索的同学虽然人在北京，签的却不是雅虎，而是什么ldquo;阿里巴巴集团搜索事业部rdquo;mdash;mdash;当时雅虎的搜索部门已经被独立出去了。之后我也和那些最终没有来雅虎  的同事聊过，他们都表示很郁闷，表示自己并不是很情愿去其它公司。这件事情让我感到很气愤，明明大家都是冲着中国雅虎来应聘的，为什么在发放  offer    之后又进行调动呢？当然，阿里巴巴肯定是做了一些说服工作让那些同事ldquo;自愿rdquo;服从调动的，但是那个刚好出现了金融危机工作比较难找，其它公司的招聘也早已  结束，而且大家都是初出茅庐的学生，能不服从么？ 那几个同事也实在是太光荣了，刚入职就完美表现了自己ldquo;拥抱变化rdquo;的价值观，KPI 应该给五分。
不只是新入职的员工，因为中国雅虎的业务变化频繁，平时也经常会出现内部调动，而中国雅虎在北京，调动的话就很有可能需要去杭州，这对于很多已经在  北京安家的同事来说并不是一件小事。但不服从调动，就是价值观有问题。五十六种语言，汇成一句话：拥抱变化拥抱变化拥抱mdash;mdash;变化。
在写这篇文章的时候，我不断提醒自己：我的目的是要让大家了解一下中国雅虎，千万不要写成针对阿里巴巴的檄文。但真实情况确实是那个样子，很多事情也是人人皆知，无法绕过去不说。相信很多人都还记得中国雅虎首页的那次糟糕的改版，把原来清爽干净的页面改成了屎黄色，  据说这是当时的 CEO   金同学坐在设计师旁边亲自指导的结果。如果一个乡镇企业的老板非要外包公司的设计师把网页做成他想要的也罢了，但作为一个缺乏审美能力的 CEO   居然连ldquo;把设计的工作交给设计师rdquo;的觉悟都没有，实在让人觉得不可思议。就算是一心想要ldquo;去雅虎化rdquo;，也没有必要这么羞辱设计师们吧？
不知道为什么，有些东西不用每天灌输也深得大家认同，怎么折腾都无法斩草除根。我在雅虎的时候从来没有任何一个人和我们说ldquo;你们要热爱雅虎，要以雅  虎为荣rdquo;之类的话，但是每次公司给员工发放印有雅虎 LOGO   的杯子或者背包的时候，大家总是一哄而上，疯抢干净。在中国雅虎和口碑网合并之后，因为担心以后再也领不到雅虎 LOGO   的笔记本等文具，不少同学都开始申请办公用品留作纪念。由这些事情就可以看出工程师们认同的到底是哪一种文化，大家自然会用脚投票。这些事情甚至让中国雅  虎的一些非工程师同事也觉得难以理解。这种生命力强劲的外来文化可能也是阿里巴巴一直不满中国雅虎的原因。
真正的开放应该是同事之间开诚布公、乐于分享和坦然接受批评，而不是不分场合地讲荤段子，不是让别人站到前面然后问别人ldquo;第一次用的是什么姿势rdquo;；   真正的ldquo;员工第二rdquo;是站在员工立场上考虑问题、虚心听取员工提出的问题，而不是在员工有意见的时候首先进行价值观教育，不是强迫员工拥抱不可理喻的变化；  真正的对ldquo;用户体验rdquo;的重视是尊重用户、切身考虑用户感受，不是在年会上把某个子公司的总裁骂哭，不是为了巨额广告费用而在首页做弹窗，不是让员工为了   KPI   每隔几个月就想着改版；真正的ldquo;幸福感rdquo;是来自于发自内心的对公司的认同、对公司产品的成就感，而不是来自于整齐划一的口号和对某个人的崇拜，也不是来自   于被灌输的ldquo;换个角度看世界rdquo;。脱离了原本的初衷，就算宣传得再好口号喊得再响亮，也不过是看上去很美的空洞的形式主义，这样的公司有什么底气去做ldquo;百年  公司rdquo;呢？
技术的悲哀
有着世界级的研发实力却不得不悲惨收场，我想再没有人比中国雅虎的工程师更能强烈地意识到技术所能决定的事情实在是太少太少。在中国，互联网只是一个营销工具，  ldquo;技术改变世界rdquo;也不过是一个笑话。那些商人们从来不相信ldquo;一个优秀的程序员抵得上一百个平庸的程序员rdquo;，却虚伪地把ldquo;我不懂技术但是尊重技术rdquo;挂在嘴   边；他们整日想的不是创造价值，而是如何赚更多钱；他们更相信ldquo;廉价劳动力rdquo;所带来的成本优势，也总能把ldquo;技术密集型rdquo;的公司做成ldquo;劳动密集型rdquo;，以至于  国内的互联网公司不是山寨就是血汗工厂，雇佣着大批大批会写代码的高级民工。这样的环境和氛围，暂且不说 Google 和 Apple   这样伟大的公司，什么时候我们才能有产生像 37Signals 和 The Omni Group 那样的小公司的土壤呢？
文章的最后，还是那句老话：他日江湖相逢，再当杯酒言欢。
各位雅虎人，多保重了。 ...</description>
   <pubDate>2010.11.01 22:11:37</pubDate>
   <guid>http://hellophper.com/htm/5/415.html</guid>
  </item><item>
   <title>没有比这更好的用户</title>
   <link>http://hellophper.com/htm/5/414.html</link>
	 
   <description>花了近一个下午的时间把房间彻底了整理了下，丢弃了很多不用但却占空间的东西，收起了不常用的物品，仔细清理了经常使用。整理房间是这样，网站亦是如此。去掉用户不使用的功能，隐藏或放在次要位置不常用功能，把最常用的功能摆在最显眼处。
        Google首页，一个大大的搜索框，打开google的最主要目的就是搜索，更快的找到所需要的东西。
        公司做GPS系统也有几年了，以对系统加入一台车为例：
1：登录系统，输入用户名和密码(部分系统有验证码【完全可以去掉，验证码的主要功能是防止恶意登录，对于内部使用的系统没有存在的必要】)
2：进入监控页面，大量的等待时间，地图的加载等初始信息的加载
*************下面是优化的地方*******************
3：进入后台管理页面
原：ext动态生成的树的管理菜单

 
优化后：登录时生成静态Html文件

 
优点：每次点击后台管理，不需要重新生成
4：进入车辆管理模块
原：填写一大堆不需要填写的信息

 
优化后：只填写必填写的信息

 
优点：这里可以参考phpwind或Dz的注册页面，隐藏起可以选择填写的内容
5：进入设备管理界面
与车辆管理一样不做叙述
6：回到车辆管理页面绑定设备
7：回到设备管理界面恢复设备
即将优化
4,5在一个页面填写
6,7在后台由程序判断执行
优点：原来需要进入4次页面完成的，现在只需要一个页面就能完成
其他可以优化的地方：
1：查询
原：多个查询框

 
优化后：只有一个查询框，由系统找出相关的内容，在高级查询保留原来的多个查询框

 
优点：多数用户只会使用一个条件查询，多个查询框浪费了界面的空间，也使得搜索不突出，参考：phpwind或DZ的搜索与高级搜索
2：列表显示页面
原：因需要现在的内容过多，列表页面只能显示一部分内容，其他信息需要点击查询才能看到
优化后：鼠标移上去自动显示详情内容，鼠标移出后自动消失，防止移除后没有消失，增加一个关闭按钮

 
优点：减少用户鼠标点击
如果我们不是行业系统或者说我们是其他公司，相信没有多少用户会使用我们的系统，只能说我们现在拥有了一群非常优秀并且一点都不挑剔的用户。至少我们应该感谢用户，还能耐心的使用系统。 ...</description>
   <pubDate>2010.08.21 06:08:22</pubDate>
   <guid>http://hellophper.com/htm/5/414.html</guid>
  </item><item>
   <title>jquery,js编辑器</title>
   <link>http://hellophper.com/htm/5/413.html</link>
	 
   <description>jquery编写，功能不强大，但基本够用
直接运行demo.htm可观看，php POST方式获取编辑器中的文本内容
php代码
echo $_POST[words]可查看
点击下载
演示就是留言的地方
如果有什么问题，可以联系我 ...</description>
   <pubDate>2010.07.26 06:07:24</pubDate>
   <guid>http://hellophper.com/htm/5/413.html</guid>
  </item><item>
   <title>oracle清空表sql语句</title>
   <link>http://hellophper.com/htm/5/411.html</link>
	 
   <description>oracle sql语句
  

Truncate Table [表名]
  

db2 sql语句
  

delete from Table [表名]
   ...</description>
   <pubDate>2010.07.27 20:07:41</pubDate>
   <guid>http://hellophper.com/htm/5/411.html</guid>
  </item><item>
   <title>oracle,db2表复制</title>
   <link>http://hellophper.com/htm/5/410.html</link>
	 
   <description>oracle语句
  

create table bin_test as select * from t_qx_jgxx
db2
create table bin_test like t_qx_jgxx ...</description>
   <pubDate>2010.07.20 23:07:59</pubDate>
   <guid>http://hellophper.com/htm/5/410.html</guid>
  </item><item>
   <title>db2导入excel数据</title>
   <link>http://hellophper.com/htm/5/409.html</link>
	 
   <description>sql语句
  

import   from   "c:\Booknow.csv"   OF   DEL   messages   "d:\msg.out"     INSERT   INTO   lw_bin
   ...</description>
   <pubDate>2010.07.21 00:07:04</pubDate>
   <guid>http://hellophper.com/htm/5/409.html</guid>
  </item><item>
   <title>db2创建表sql语句</title>
   <link>http://hellophper.com/htm/5/406.html</link>
	 
   <description>sql语句
DROP TABLE lw_bin;
create table lw_bin
(
  XH INTEGER not null generated by default as identity,
  GJ_DM CHAR(3) not null,
  GJ_MC VARCHAR(100) not null,
  GJ_JC VARCHAR(80) not null,
  XYBZ  CHAR(1) not null,
  primary key (XH)
);
 comment on table TMP_ZYGJ is '主要国家';
 comment on column TMP_ZYGJ.XH is '报表序号';
 comment on column TMP_ZYGJ.GJ_DM is '国家代码';
 comment on column TMP_ZYGJ.GJ_MC is '国家名称';
 comment on column TMP_ZYGJ.GJ_JC is '国家简称';
 comment on column TMP_ZYGJ.XYBZ is '选用标志';
 ...</description>
   <pubDate>2010.07.20 23:07:47</pubDate>
   <guid>http://hellophper.com/htm/5/406.html</guid>
  </item><item>
   <title>dwr异步问题 dwr循环出错 js冲突</title>
   <link>http://hellophper.com/htm/5/405.html</link>
	 
   <description>在js中使用for循环的时候使用dwr，经常在还没有获取数据的时候就已经执行dwr函数了，这个是因为dwr是异步执行，也就是说在还没有for循环的时候就已经把所有的dwr执行了，也就是说dwr取的数据是第一个for时的数据，解决问题的办法是加如下代码
  

DWREngine.setAsync(false);

   ...</description>
   <pubDate>2010.07.11 19:07:53</pubDate>
   <guid>http://hellophper.com/htm/5/405.html</guid>
  </item><item>
   <title>liunx(红旗)下搭建svn</title>
   <link>http://hellophper.com/htm/5/404.html</link>
	 
   <description>liunx(红旗)下搭建svn
1：先下载 
http://subversion.tigris.org/downloads/subversion-1.6.12.tar.gz 
http://subversion.tigris.org/downloads/subversion-deps-1.6.12.tar.gz 
2:解压
cd到下载的目录下
运行解压命令

tar xvzf subversion-1.6.12.tar.gz

tar xvzf subversion-deps-1.6.12.tar.gz


进入解压后的目录

cd subversion-1.6.12/


3：运行命令

./configure --prefix=/opt/svn --without-berkeley-db


svn1.4的版本需要在后面加上--with-zlib
注意：前面是2个-号

make clean//红旗linux下不要运行

make

make install



4：创建svn本版库

svnadmin create test


运行后可以看到多了一个test文件夹

5：修改svn配置文件
conf/svnserve.conf

password-db = passwd

authz-db = authz 

anon-access = none



conf/authz

[groups]

[/]

harry = rw 



conf/passwd

[users]

harry = harryssecret

启动svn

svnserve -d -r "usr/local/svn/test"


停止svn

killall svnserve


几个需要注意的：
1：如果输入用户名和密码后出现乱码
conf/authz中没有加
[/]
2：显示未授权打开根进行编辑操作
anon-access = read 改为 none
   ...</description>
   <pubDate>2010.06.25 01:06:09</pubDate>
   <guid>http://hellophper.com/htm/5/404.html</guid>
  </item><item>
   <title>freeast</title>
   <link>http://hellophper.com/htm/4/399.html</link>
	 
   <description>何必呢？我的pr和浏览又不高 ...</description>
   <pubDate>2010.06.04 01:06:11</pubDate>
   <guid>http://hellophper.com/htm/4/399.html</guid>
  </item><item>
   <title>oracle字符串转时间</title>
   <link>http://hellophper.com/htm/4/398.html</link>
	 
   <description>sql代码


to_date($time$,'yyyymmddhh24mi')
 ...</description>
   <pubDate>2010.05.31 23:05:30</pubDate>
   <guid>http://hellophper.com/htm/4/398.html</guid>
  </item><item>
   <title>html5 audio标签 php版</title>
   <link>http://hellophper.com/htm/4/397.html</link>
	 
   <description>JS代码

function music_box(){
          var url=new Array();
          var name=new Array();
          var num = 0;
          var _this = this;
          this.init = function(){
                  jQuery(quot;#musicquot;).fadeIn(quot;slowquot;);
                  if(name.length == 0){

                       jQuery(quot;#filequot;).find(quot;dlquot;).each(function(){
                                    url.push(jQuery(this).html());
                             });
                      jQuery(quot;#filequot;).find(quot;ddquot;).each(function(){
                                    name.push(jQuery(this).html());
                             });
                             this.createMusicBox();
              }
              else{
              
                     jQuery(quot;#musiclistquot;).fadeIn(quot;slowquot;);
                     jQuery(quot;#musicboxquot;).fadeIn(quot;slowquot;);
                     document.getElementById(quot;music_audioquot;).play();
              }
       }
       
       this.createMusicBox = function(){
              
              jQuery(quot;#musiclistquot;).html(quot;quot;);
              jQuery(quot;#musicboxquot;).html(quot;quot;);
              if(name.length != 0){
                                   var html=quot;lt;ulgt;quot;;
                                   for(var i=0;i lt; name.length;i++){
                                          
                                          if(i==num)
                                                 html += quot;lt;li class='chose_music'gt;lt;a href='#' class='choose' onclick='music.choose(quot;+ i +quot;)'gt;quot; + name[i] + quot;lt;img src='quot;+ website + quot;/images/os/del.gif' onclick='music.del(quot;+ i +quot;)' href='#' class='music_del'gt;lt;/ligt;quot;;
                                          else
                                                 html += quot;lt;ligt;lt;a href='#' class='choose' onclick='music.choose(quot;+ i +quot;)'gt;quot; + name[i] + quot;lt;/agt;lt;img src='quot;+ website + quot;/images/os/del.gif' onclick='music.del(quot;+ i +quot;)' href='#' class='music_del'gt;lt;/ligt;quot;;
                                   }
                            }
              var music_box = quot;lt;audio autoplay='true' id='music_audio' controls='true' onended='music.next()'gt;lt;source src=quot;+url[num]+quot;/gt;您的浏览器不支持html5lt;/audiogt;quot;;
              jQuery(quot;#musiclistquot;).html(html);
              jQuery(quot;#musicboxquot;).html(music_box);
       }
       
       this.choose = function(i){
              num = i;
              this.createMusicBox();
       }
       
       this.next = function(){
              num++;
              if(num gt; name.length-1){
                     num = 0;
              }
              
              this.createMusicBox();
       }
       
       this.close = function(post){
              jQuery(quot;#musiclistquot;).fadeOut(quot;slowquot;);
              jQuery(quot;#musicboxquot;).fadeOut(quot;slowquot;);
              jQuery(quot;#musicquot;).fadeOut(quot;slowquot;);
              if(post != 'hide'){
                     document.getElementById(quot;music_audioquot;).pause();
                     
              }
       }
       
       this.chooseOne = function(music_name,music_url){
              url.push(music_url);
              name.push(music_name);
              this.createMusicBox();
       }
       
       this.hideMusicList = function(){
              jQuery(quot;#musiclistquot;).toggle(quot;slowquot;);
       }
       
       this.del = function(i){
              document.getElementById(quot;music_audioquot;).pause();
              name.splice(i,1);
              url.splice(i,1);
              this.createMusicBox();
              
       }
       this.clear = function(){
              document.getElementById(quot;music_audioquot;).pause();
              name = [];
              url = [];
              this.createMusicBox();
       }
  }

HTML代码

lt;div id=quot;musicquot;gt;
                            lt;img onclick='music.close()' style=quot;float:right;cursor:pointer;quot; src=quot;lt;? echo $website ?gt;/images/os/del.gifquot;/gt;
                            lt;div id=quot;musicboxquot;gt;
                            lt;/divgt;
                            lt;div id=quot;musicbuttonquot;gt;
                                   lt;button onclick='music.next()'gt;Nextlt;/buttongt;
                                   lt;button onclick='music.hideMusicList()'gt;Listlt;/buttongt;
                                   lt;button onclick=quot;music.close('hide')quot;gt;Hidelt;/buttongt;
                                   lt;button onclick=quot;music.clear()quot;gt;Clearlt;/buttongt;
                            lt;/divgt;
                            lt;div class=quot;clearquot;gt;lt;/divgt;
                            lt;div id=quot;musiclistquot;gt;
                            lt;/divgt;
                     lt;/divgt;
                     
                     lt;div id=quot;dropboxquot;gt;lt;/divgt;
 ...</description>
   <pubDate>2010.05.27 08:05:35</pubDate>
   <guid>http://hellophper.com/htm/4/397.html</guid>
  </item><item>
   <title>html5鼠标拖动上传 php版</title>
   <link>http://hellophper.com/htm/4/396.html</link>
	 
   <description>JS代码

              /************** html5上传初始化 ************************/
               var dropbox = document.getElementById(quot;dropboxquot;);
               dropbox.addEventListener(quot;dragenterquot;, dragenter, false);
               dropbox.addEventListener(quot;dragoverquot;, dragover, false);
               dropbox.addEventListener(quot;dropquot;, drop, false);



/************** html5上传函数 ************************/
       function dragenter(e) {
           e.stopPropagation();
           e.preventDefault();
       }

       function dragover(e) {
           e.stopPropagation();
           e.preventDefault();
       }

       function drop(e) {
           e.stopPropagation();
           e.preventDefault();

           handleFiles(e.dataTransfer.files);
          return false;
       }
     /************** html5上传关键函数 ************************/   
  function handleFiles(files) {
               
       for(var i=0; i lt; files.length; i++) {
              
                     
                     this.xhr = new XMLHttpRequest();
                     this.xhr.upload.addEventListener(quot;progressquot;, function(e) {       
                            if (e.lengthComputable) {       
                                   var percentage = Math.round((e.loaded * 100) / e.total);   
                                    
                                   //变量：percentage为上传进度，由0-100;   
                                   //可以用来做进度条   
                     }       
                     }, false);     
                     
                     this.xhr.upload.addEventListener(quot;loadquot;, function(e){     
                            alert(quot;上传完成quot;); 
                            refresh_page();
                            //上传完成事件！   
                     }, false); 
                     
                     this.xhr.open(quot;POSTquot;, website+quot;/admin/os/upload_file_html5.php?name=quot;+files[i].name+quot;am id=quot;+jQuery.query.get('id'));               
                     this.xhr.overrideMimeType('text/plain; charset=utf-8');   
                     //this.xhr.setRequestHeader('Content-Type', 'multipart/form-data'); 
                     this.xhr.setRequestHeader('Content-Type','multipart/form-data; charset=utf-8'); 
                     this.xhr.send(files[i]); 
                     
                 
               }
               
           }

PHP代码

lt;?php
                     header(quot;Content-Type:text/html; charset=utf-8quot;); 
                     $file_content = file_get_contents('php://input'); // 读取收到的文件内容
                     
                     
                     
                     //保存进数据库
                     $auto_id = $mysql_link-gt;select(quot; SHOW TABLE STATUS WHERE Name = 'lw_os_menu' quot;);
                     $auto_id = $auto_id[0]-gt;Auto_increment;
                     //$mssage = upfile($_FILES['file_name'],quot;$webroot/admin/os/user/$_COOKIE[$cookie_user]/upload/quot;,$auto_id);
                     $file_name = $_GET[name];
                            //获取文件后缀，匹配相对应的图标
                     $type = explode(quot;.quot;,$file_name);
                     $type = $type[count($type)-1];
                     $type = strtolower($type);//大写转小写
                     //把音乐文件转换成wav格式
                     //if($type == 'mp3' || $type == 'wma'){
                     //       $type = 'wav';
              //       }
                     file_put_contents(quot;$webroot/admin/os/user/$_COOKIE[$cookie_user]/upload/quot;.$auto_id.quot;.quot;.$type,$file_content);
                     $image = typeChooseIco($type);//获取对应图片的ico       
                     $url = quot;admin/os/user/$_COOKIE[$cookie_user]/upload/$auto_id.quot;.$type;       
                            $mysql_link-gt;insert(quot;lw_os_menuquot;,array (quot;idquot;=gt;quot;NULLquot;,quot;parent_idquot;=gt;quot;$_GET[id]quot;,quot;namequot;=gt;quot;$file_namequot;,quot;urlquot;=gt;quot;$urlquot;,quot;levelquot;=gt;quot;quot;,quot;icoquot;=gt;quot;quot;,quot;imagequot;=gt;$image,quot;userquot;=gt;quot;$_COOKIE[$cookie_user]quot;,quot;sortquot;=gt;quot;filequot;));
                     
?gt;
 ...</description>
   <pubDate>2010.05.27 07:05:31</pubDate>
   <guid>http://hellophper.com/htm/4/396.html</guid>
  </item><item>
   <title>html5 audio标签演示视频</title>
   <link>http://hellophper.com/htm/4/395.html</link>
	 
   <description>建议下载观看点击下载
 
 
 
 
　 
 ...</description>
   <pubDate>2010.06.03 20:06:44</pubDate>
   <guid>http://hellophper.com/htm/4/395.html</guid>
  </item><item>
   <title>SyntaxHighlighter代码高亮演示</title>
   <link>http://hellophper.com/htm/4/394.html</link>
	 
   <description>先引入

	lt;script type=quot;text/javascriptquot; src=quot;lt;?php echo $website; ?gt;/scripts/shCore.jsquot;gt;lt;/scriptgt;
lt;script type=quot;text/javascriptquot; src=quot;lt;?php echo $website; ?gt;/scripts/shBrushJScript.jsquot;gt;lt;/scriptgt;
lt;script type=quot;text/javascriptquot; src=quot;lt;?php echo $website; ?gt;/scripts/shBrushJava.jsquot;gt;lt;/scriptgt;
lt;script type=quot;text/javascriptquot; src=quot;lt;?php echo $website; ?gt;/scripts/shBrushJScript.jsquot;gt;lt;/scriptgt;
lt;script type=quot;text/javascriptquot; src=quot;lt;?php echo $website; ?gt;/scripts/shBrushPhp.jsquot;gt;lt;/scriptgt;
lt;script type=quot;text/javascriptquot; src=quot;lt;?php echo $website; ?gt;/scripts/shBrushSql.jsquot;gt;lt;/scriptgt;
lt;script type=quot;text/javascriptquot; src=quot;lt;?php echo $website; ?gt;/scripts/shBrushXml.jsquot;gt;lt;/scriptgt;
lt;script type=quot;text/javascriptquot; src=quot;lt;?php echo $website; ?gt;/scripts/shBrushCss.jsquot;gt;lt;/scriptgt;
lt;script type=quot;text/javascriptquot;gt;
       SyntaxHighlighter.config.clipboardSwf = 'clipboard.swf';//不是所有的浏览器都有权利进行'复制'动作,所以借助flash实现兼容.
       SyntaxHighlighter.all();
lt;/scriptgt;

再按照这样的格式

lt;pre class=quot;brush: js;quot;gt;
/**
* SyntaxHighlighter Test
*/
function synTest() {
       console.log('good ^^');
}
lt;/pregt;

 ...</description>
   <pubDate>2010.05.27 02:05:22</pubDate>
   <guid>http://hellophper.com/htm/4/394.html</guid>
  </item></channel>
</rss>
