随笔-159  评论-114  文章-7  trackbacks-0
  2009年12月23日
     摘要: 最近在funplus做游戏,进而研究了一个新型架构。之前做游戏都是自己使用java搭建架构,经过几年的积累确实也达到了最初的设想,多进程,进程内多线程,无锁,0延迟纯jdbc写库。对于单服架构来说,已经趋近于极致。今年小游戏盛行,如海盗来了,疯狂游戏那家公司,全部使用的都是go+mongodb实现的,因为go的语言级别支援高并发,这点是java无法比拟的。不过java开源项目多,有很多的高手铺垫了...  阅读全文
posted @ 2018-11-13 14:29 北国狼人的BloG 阅读(1560) | 评论 (0)编辑 收藏
好久不写blog了,我都已经从完美-》创业-》创业失败-》开心网-》创业-》创业失败-》蓝港-》funplus走了很多的历程了。
posted @ 2018-11-13 11:31 北国狼人的BloG 阅读(156) | 评论 (0)编辑 收藏
那我给你解释下RSA吧,尽量让你看懂:
*RSA是非对称加密体系,也就是说加密用一个公钥,解密用一个私钥,这2个密钥不同,这点非常非常重要。

其实RSA非常简洁,但很美

流程
1,寻找2个大的素数p,q  n=p*q=33  N=(p-1)*(q-1)=20
公钥e一般是3 私钥d要通过公钥e去算出来
e*d=1(mod N) 就是说e和d的乘积模N得1 也就是e和d关于模N互为逆元
3*7=1(mod 20) 可知d=7

加密的明文设为M 加密后的密文设为c
加密过程:C=M^e(mod n)
解密过程:M=C^d(mod n)

举个具体的例子 假如M=2
加密过程:C=2^3(mod 33)=8(mod 33)
解密过程:M=8^7(mod 33)=2097152(mod 33)=2(mod 33) 可以看出和和本来的明文是相同的。

原理可以理解为 M=M^(ed)  (mod n)
本例中 e*d=21  也就是是M^21次方等于M
RSA这个特性是数论中的费马定理推出的

在讲讲细节 比如楼主加密的是26的字母 就当明文的值是从1到26
就拿n=33说吧 加密后的密文的值是1到33 这很正常
但是解密后 一定和明文的值相同 也就是1到26

实际情况中 公钥e是公开的 私钥d是保密的
比如甲要给乙发个东西 乙的公钥由于是公开的 所以甲知道 但甲不知道乙的私钥
甲先用乙的公钥加密  之后 这个密文只能用乙的私钥 由于乙的私钥是保密的 只有他自己知道 所以保证了安全

RSA最大的安全问题是 n的分解 只要把n分解为p*q 则N=(p-1)(q-1)
根据 e*d=1(mod N) 就可以通过e算出d 那么私钥都被人算出来了 也就没安全性而言了
不过可惜的是 大数分解是一个单向的函数 你算知道p,q算n很容易,但是知道n算出p,q相当难

强调一句 n是加密解密用的 N是知道e算d的

楼主也没说你要干嘛 想看懂就这么多
如果要实现这个算法:
必须知道2点:
1.p,q这个两个大素数的生成,这牵扯到素性检验,数论中是一章的内容,没法和你展开
2.取模运算,由于加密解密过程可能取一个数的几十次方的模数,所以这个必须用简便的算法来化解复杂度,也就是模重复平方算法。

如果要编程中使用,太容易了
去下个dll
在java中 直接有可用于RSA的类 相当容易


 

对称加密算法,非对称加密算法 

 
 

常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。

对称加密

指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,他们通常会有意无意的把密钥泄漏出去——如果一个用户使用的密钥被入侵者所获得,入侵者便可以读取该用户密钥加密的所有文档,如果整个企业共用一个加密密钥,那整个企业文档的保密性便无从谈起。

常见的对称加密算法有DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES

非对称加密

指加密和解密使用不同密钥的加密算法,也称为公私钥加密。假设两个用户要加密交换数据,双方交换公钥,使用时一方用对方的公钥加密,另一方即可用自己的私钥解密。如果企业中有n个用户,企业需要生成n对密钥,并分发n个公钥。由于公钥是可以公开的,用户只要保管好自己的私钥即可,因此加密密钥的分发将变得十分简单。同时,由于每个用户的私钥是唯一的,其他用户除了可以可以通过信息发送者的公钥来验证信息的来源是否真实,还可以确保发送者无法否认曾发送过该信息。非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比非对称加密慢上1000倍。

常见的非对称加密算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

Hash算法

Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。

常见的Hash算法有MD2、MD4、MD5、HAVAL、SHA

加密算法的效能通常可以按照算法本身的复杂程度、密钥长度(密钥越长越安全)、加解密速度等来衡量。上述的算法中,除了DES密钥长度不够、MD2速度较慢已逐渐被淘汰外,其他算法仍在目前的加密系统产品中使用

posted @ 2012-03-15 15:37 北国狼人的BloG 阅读(1152) | 评论 (0)编辑 收藏

千橡与我,一个公司与员工之间就像恋人一样,从最早的相识,相爱,拼搏,挽留,平淡,最终不再继续走下去。

其实都还相爱,但必须面对现实,不再会被记忆和离开时产生的痛苦蒙蔽自己的双眼。

posted @ 2011-08-28 13:49 北国狼人的BloG 阅读(1169) | 评论 (0)编辑 收藏
netstat -nlpt 看80端口有没有httpd服务
ps aux | grep httpd 看有没有httpd进程

locate httpd

service httpd status

service httpd configtest
posted @ 2011-01-19 16:26 北国狼人的BloG 阅读(1103) | 评论 (0)编辑 收藏

javac

 

用法:javac <选项> <源文件>
其中,可能的选项包括:
  -g                                                       生成所有调试信息
  -g:none                                             不生成任何调试信息
  -g:{lines,vars,source}                    只生成某些调试信息
  -nowarn                                            不生成任何警告
  -verbose                                           输出有关编译器正在执行的操作的消息
  -deprecation                                    输出使用已过时的 API 的源位置
  -classpath <路径>                          指定查找用户类文件的位置
  -cp <路径>                                       指定查找用户类文件的位置
  -sourcepath <路径>                       指定查找输入源文件的位置
  -bootclasspath <路径>                  覆盖引导类文件的位置
  -extdirs <目录>                               覆盖安装的扩展目录的位置
  -endorseddirs <目录>                   覆盖签名的标准路径的位置
  -d <目录>                                        指定存放生成的类文件的位置
  -encoding <编码>                          指定源文件使用的字符编码
  -source <版本>                              提供与指定版本的源兼容性
  -target <版本>                                 生成特定 VM 版本的类文件
  -version                                            版本信息
  -help                                                 输出标准选项的提要
  -X                                                      输出非标准选项的提要
  -J<标志>                                          直接将 <标志> 传递给运行时系统

jar


用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...
选项:
    -c  创建新的存档
    -t  列出存档内容的列表
    -x  展开存档中的命名的(或所有的〕文件
    -u  更新已存在的存档
    -v  生成详细输出到标准输出上
    -f  指定存档文件名
    -m  包含来自标明文件的标明信息
    -0  只存储方式;未用ZIP压缩格式
    -M  不产生所有项的清单(manifest〕文件
    -i  为指定的jar文件产生索引信息
    -C  改变到指定的目录,并且包含下列文件:
如果一个文件名是一个目录,它将被递归处理。
清单(manifest〕文件名和存档文件名都需要被指定,按'm' 和 'f'标志指定的相同顺序。
示例1:将两个class文件存档到一个名为 'classes.jar' 的存档文件中:
       jar cvf classes.jar Foo.class Bar.class
示例2:用一个存在的清单(manifest)文件 'mymanifest' 将 foo/ 目录下的所有
           文件存档到一个名为 'classes.jar' 的存档文件中:
       jar cvfm classes.jar mymanifest -C foo/ .

java



用法: java [-选项] 类 [参数...]
           (执行一个类)
   或者 java [-选项] -jar jar文件 [参数...]
           (执行一个jar文件)
其中,可能的选项包括:
    -client       选择 "client" VM(ginger547:应该是指Virtual Machine)
    -server     选择 "server" VM
    -hotspot      与 "client" VM同义  [不赞成]
                  默认情况的VM是client.
    -cp <一个文件夹和zip/jar文件组成的类搜索路径>
    -classpath <一个文件夹和zip/jar文件组成的类搜索路径>
                 一个由文件夹,JAR压缩文件,或者ZIP压缩文件组成的用来搜索类的列表
    -D<名字>=<值>
                  设置一个系统属性
    -verbose[:class|gc|jni]
                  使详细输出变的可用
    -version      打印产品版本然后退出
    -version:<值>
                  只运行指定版本
    -showversion  打印产品版本后继续
    -jre-restrict-search | -jre-no-restrict-search
                  在版本搜索的时候,包含/排除用户私人的JRE
    -? -help      打印帮助信息
    -X            打印非标准选项帮助
    -ea[:<包名>...|:<类名>]
    -enableassertions[:<包名>...|:<类名>]
                 使断言可用
    -da[:<包名>...|:<类名>]
    -disableassertions[:<包名>...|:<类名>]
                  是断言不可用
    -esa | -enablesystemassertions
                  使系统级断言可用
    -dsa | -disablesystemassertions
                  使系统级断言不可用
    -agentlib:<库名>[=<选项>]
                  加载本地代理库<库名>,例如. -agentlib:hprof
                  同时可查看, -agentlib:jdwp=help和 -agentlib:hprof=help
    -agentpath:<路径名>[=<选项>]
                  通过全路径名来加载本地代理库
    -javaagent:<jar路径>[=<选项>]
                 加载Java编程语言代理,可查看 java.lang.instrument

posted @ 2010-12-09 12:55 北国狼人的BloG 阅读(1904) | 评论 (0)编辑 收藏
http://game-develop.net/blog/?p=17
posted @ 2010-12-01 13:33 北国狼人的BloG 阅读(269) | 评论 (0)编辑 收藏

select a.id,a.nickname from t_player a , t_player b where a.id != b.id and a.nickname = b.nickname

查询重复数据 都列出来

select id,nickname from t_player group by nickname having count(*) > 1;

查询所有重名的数据 只列出不同的。


如果想删除相关数据,那样非得要用in了。最好写程序,用prepareStatement去更新,in是不能用索引的,所以超级慢,所以程序优化相关数据库的操作是很有必要的。
posted @ 2010-08-19 17:27 北国狼人的BloG 阅读(1142) | 评论 (0)编辑 收藏
这个软件又好用,又实用,能缩放,比Captivate 好用多了。

posted @ 2010-06-29 16:58 北国狼人的BloG 阅读(1197) | 评论 (0)编辑 收藏

 传统我们都是定一个类型,带T的

public class RandomSelection<T> {

  
private java.util.Random random = new Random();

  
private ArrayList<T> list;

  
public RandomSelection() {

     list 
= new ArrayList<T>();

  }


  
public void add(T element) {

     list.add(element);

  }


  
public T getRandomElement() {

     
int index = random.nextInt(list.size());

     
return list.get(index);

  }



}


直接来使用。当我们new RandomSelection<String>()  new RandomSelection<Integer>() 的时候,里面的方法的类型,也就确定了。

public interface ISomeReason<extends Enum<X>> {

   
public X getImplClassType();

}

实现一个子类。这里看到继承是传入了接口泛型中的X参数,参数就是实现类自己的类型。

public enum ATypeReason implements ISomeReason<ATypeReason> {

   ABC(
1),
   DEF(
2),

   ;
   
int index;

   
private ATypeReason(int param)
   
{
      
this.index = param;
   }


   
public int getIndex()
   
{
       
return this.index;
   }


   @Override
   
public ATypeReason getImplClassType() {
      
return this
   }


}

你也可以直接实现,不传入X,那么在使用这个类型的实例去传入某一个指定类型的方法参数时,会提示错误,不利于代码健壮性。

public class MainTest {

   
public static void useATypeReason(ISomeReason<ATypeReason> reason)
{
    sysout(reason.getImplClassType().getIndex());
}


   
//ATypeReason的类型没有指定泛型参数适用于掉这个接口
   public static void dontCareParamType(ISomeReason<?> reason)
   
{
      sysout(reason.getImplClassType());
      
//不能调用
       sysout(reason.getImplClassType().getIndex());
   }


}

你可以把ISomeReason接口定义如下,更严格。

public interface ISomeReason<extends Enum<E> & ISomeReason<E>> {

   
public E type();

}

posted @ 2010-06-29 14:08 北国狼人的BloG 阅读(1124) | 评论 (0)编辑 收藏
-Xms256m -Xmx512m
posted @ 2010-06-04 18:32 北国狼人的BloG 阅读(854) | 评论 (0)编辑 收藏
CountDownLatch使得使用CountDownLatch.await()的线程(当前线程)阻塞直到所有其它拥有CountDownLatch的线程执行完毕(countDown()结果为0)。例子如下:


第18行:endLatch.await()使得主线程(main)阻塞直到endLatch.countDown()为零才继续执行,在每个线程执行完毕的时候都调用一下countDown()(第37行),所以当所有线程都执行完毕后countDown()变为零,这个时候主线程开始继续执行。

运行结果如下:(每次运行的结果可能不同)

可以试试,把第18行注释掉,执行结果如下:(每次的运行结果可能不同)


可以看到所有的线程并没有执行完毕就打印出了"All threads are finished."
posted @ 2010-05-15 14:45 北国狼人的BloG 阅读(1211) | 评论 (0)编辑 收藏
装了linux 到虚拟机就要实现文件传送和下载

使用ssh     securecrt  rz 上传 sz 下载

vi /etc/ssh/sshd_config

Port 22
Protocol 2
PermitRootLogin yes
PasswordAuthentication yes

/etc/init.d/sshd restrat

service sshd status

netstat -an|grep 22

发现没有端口22,日阿


解决方法:
______________________________________
一、开启SSH
以root用户登录Linux,打开终端,运行: /etc/init.d/sshd restrat
______________________________________
二、关闭防火墙
1.在终端运行 setup
2,.选择 firewall 回车
3.按tab键切换到disablede项,然后按空格键选择,然后再按tab键切换到ok,按空格件选择
4.按tab键切换到quit,按空格件选择
然后用客户端ssh登录Linux
______________________________________
三、关闭防火墙的另一种方式
/etc/init.d/iptables stop
______________________________________
补充:
红旗linux的某些版本,不允许root用户远程登陆的,需要修改设置#vi /etc/ssh/sshd_config 中
PermitRootLogin no
#这就不允许root用户远程登录,要修改成PermitRootLogin yes 并重启sshd服务才行的
#service sshd restart



再拿SecureCRT 连接,必能连。


VMWARE 采用HOST ONLY ,先保证能Ping通。

posted @ 2010-05-06 11:37 北国狼人的BloG 阅读(930) | 评论 (0)编辑 收藏
 改一个文件
 /etc/inittab
 把这一行,5改成3
id:3:initdefault:
 然后重启机器,就好了
posted @ 2010-05-05 18:56 北国狼人的BloG 阅读(176) | 评论 (0)编辑 收藏

今天看到一个as3 的性能tip
取反(Sign flipping using NOT or XOR)


另人奇怪的是这个居然快了300%!

i = -i;
//相当于:
i = ~i + 1;
//或者
i = (i ^ -1) + 1;


但对位操作有点生疏了。

其实就是     0010      正2    取反 变成 1101    但计算是以补码保存的。所以真值是什么?求反+1,按道理,真值求反+1是补码,应该逆操作,-1求反,但他妈的二进制牛鼻之处,先-1求反,跟求反+1竟然是一样的。所以补码再次进行求反+1就是真值了。


这下你明白了么?再不明白,你就看下面的,看完还不明白,就不要搞计算机了。



在计算机内,定点数有3种表示法:原码、反码和补码

所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

   反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

1、原码、反码和补码的表示方法

(1)    原码:在数值前直接加一符号位的表示法。

例如:      符号位  数值位

[+7]原=   0    0000111  B

[-7]原=   1    0000111  B

     注意:a. 数0的原码有两种形式:

             [+0]原=00000000B    [-0]原=10000000B

           b. 8位二进制原码的表示范围:-127~+127

(2)反码:

     正数:正数的反码与原码相同。

     负数:负数的反码,符号位为“1”,数值部分按位取反。

例如:     符号位 数值位

     [+7]反=  0   0000111  B

     [-7]反=  1   1111000  B

注意:a. 数0的反码也有两种形式,即

         [+0]反=00000000B

         [- 0]反=11111111B

      b. 8位二进制反码的表示范围:-127~+127

(3)补码的表示方法

1)模的概念:把一个计量单位称之为模或模数。例如,时钟是以12进制进行计数循环的,即以12为模。在时钟上,时针加上(正拨)12的整数位或减去(反拨)12的整数位,时针的位置不变。14点钟在舍去模12后,成为(下午)2点钟(14=14-12=2)。从0点出发逆时针拨10格即减去10小时,也可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可映射为+2。由此可见,对于一个模数为12的循环系统来说,加2和减10的效果是一样的;因此,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。10和2对模12而言互为补数。

同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满8位也就是256个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,8位二进制数,它的模数为28=256。在计算中,两个互补的数称为“补码”。

2)补码的表示:

    正数:正数的补码和原码相同。

    负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。

例如:       符号位 数值位

      [+7]补=   0   0000111  B

      [-7]补=   1   1111001  B

补码在微型机中是一种重要的编码形式,请注意:

a.             采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。采用补码进行运算,所得结果仍为补码。

b.            与原码、反码不同,数值0的补码只有一个,即       [0]补=00000000B。

c.             若字长为8位,则补码所表示的范围为-128~+127;进行补码运算时,应注意所得结果不应超过补码所能表示数的范围。

2.原码、反码和补码之间的转换

由于正数的原码、补码、反码表示方法均相同,不需转换。

在此,仅以负数情况分析。

(1)    已知原码,求补码。

例:已知某数X的原码为10110100B,试求X的补码和反码。

解:由[X]原=10110100B知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。

1  0  1  1  0  1  0  0   原码

1  1  0  0  1  0  1  1   反码,符号位不变,数值位取反

                     1   +1

1  1  0  0  1  1  0  0   补码

故:[X]补=11001100B,[X]反=11001011B。

(2)    已知补码,求原码。

分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 有方法。

例:已知某数X的补码11101110B,试求其原码。

解:由[X]补=11101110B知,X为负数。求其原码表示时,符号位不变,数值部分按位求反,再在末位加1。

1  1  1  0  1  1  1  0   补码

1  0  0  1  0  0  0  1   符号位不变,数值位取反

                     1   +1

1  0  0  1  0  0  1  0   原码

1.3.2  有符号数运算时的溢出问题

请大家来做两个题目:

两正数相加怎么变成了负数???
1)(+72)+(+98)=?

0 1 0 0 1 0 0 0 B    +72

     +  0 1 1 0 0 0 1 0 B    +98

        1 0 1 0 1 0 1 0 B    -42

两负数相加怎么会得出正数???
2)(-83)+(-80)=?

1 0 1 0 1 1 0 1 B    -83

     +  1 0 1 1 0 0 0 0 B    -80

        0 1 0 1 1 1 0 1 B    +93

   思考:这两个题目,按照正常的法则来运算,但结果显然不正确,这是怎么回事呢?

   答案:这是因为发生了溢出。

如果计算机的字长为n位,n位二进制数的最高位为符号位,其余n-1位为数值位,采用补码表示法时,可表示的数X的范围是   -2n-1≤X≤2n-1-1

当n=8时,可表示的有符号数的范围为-128~+127。两个有符号数进行加法运算时,如果运算结果超出可表示的有符号数的范围时,就会发生溢出,使计算结果出错。很显然,溢出只能出现在两个同符号数相加或两个异符号数相减的情况下。

对于加法运算,如果次高位(数值部分最高位)形成进位加入最高位,而最高位(符号位)相加(包括次高位的进位)却没有进位输出时,或者反过来,次高位没有进位加入最高位,但最高位却有进位输出时,都将发生溢出。因为这两种情况是:两个正数相加,结果超出了范围,形式上变成了负数;两负数相加,结果超出了范围,形式上变成了正数。

而对于减法运算,当次高位不需从最高位借位,但最高位却需借位(正数减负数,差超出范围),或者反过来,次高位需从最高位借位,但最高位不需借位(负数减正数,差超出范围),也会出现溢出。

在计算机中,数据是以补码的形式存储的,所以补码在c语言的教学中有比较重要的地位,而讲解补码必须涉及到原码、反码。本部分演示作何一个整数的原码、反码、补码。过程与结果显示在列表框中,结果比较少,不必自动清除,而过程是相同的,没有必要清除。故需设清除各部分及清除全部的按钮。测试时注意最大、最小正负数。用户使用时注意讲解不会溢出:当有一个数的反码的全部位是1才会溢出,那么它的原码是10000...,它不是负数,故不会溢出。

    在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负;其余n-1位为数值位,各位的值可为零或一。当真值为正时,原码、反码、补码数值位完全相同;当真值为负时,原码的数值位保持原样,反码的数值位是原码数值位的各位取反,补码则是反码的最低位加一。注意符号位不变。

      总结:提示信息不要太少,可“某某数的反码是某某”,而不是只显示数值。

posted @ 2010-04-29 15:52 北国狼人的BloG 阅读(839) | 评论 (1)编辑 收藏
安装MySQL之前,先检查是否已经有没用的旧有MySQL

不卸载,有乱七八糟的问题会出现

rpm -qa|grep mysql -i

发现老版本的,就卸载

rpm ---nodeps --allmatches mysql-4.1.22-2.e14

下面开始安装,强制安装丫的

rpm -ivh MysqlServer.rpm --nodeps --force

安装顺序  server dev share client debuginfo

netstat -nat

察看是否启动。

配置/etc/my.cnf

# The following options will be passed to all MySQL clients
[client]
#password       
= your_password
port            
= 3306
socket          
= /data/mysql/database/mysql.sock

# Here follows entries 
for some specific programs

# The MySQL server
[mysqld]
port            
= 3306
socket          
= /data/mysql/database/mysql.sock
datadir         
= /data/mysql/database/
pid
-file        = /data/mysql/database/mysql.pid

skip
-locking
key_buffer_size 
= 2048M
max_allowed_packet 
= 2M
table_open_cache 
= 512
sort_buffer_size 
= 8M
read_rnd_buffer_size 
= 4M

query_cache_size 
= 1M
query_cache_type 
= 1

# Try number of CPU
's*2 for thread_concurrency
thread_concurrency = 16
thread_cache_size 
= 8
innodb_file_per_table

read_buffer_size 
= 4M
myisam_sort_buffer_size 
= 4M
myisam_recover
myisam_repair_threads
=4

server
-id = 1
log
-bin=/data/mysql_backup/binlogs/database
max_binlog_size 
= 512M
expire_logs_days 
= 3
long_query_time 
= 2 
log
-slow-queries = slow.log 
log
-queries-not-using-indexes
event_scheduler
=1
# Uncomment the following 
if you are using InnoDB tables
innodb_data_home_dir 
= /data/mysql/database/
innodb_data_file_path 
= ibdata1:20M;ibdata2:10M:autoextend
#innodb_log_group_home_dir 
= /var/lib/mysql/
#innodb_log_arch_dir 
= /var/lib/mysql/
# You can set .._buffer_pool_size up to 
50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size 
= 10000M
innodb_additional_mem_pool_size 
= 4M
# Set .._log_file_size to 
25 % of buffer pool size
innodb_log_file_size 
= 8M
innodb_log_buffer_size 
= 4M
#innodb_flush_log_at_trx_commit 
= 1
#innodb_lock_wait_timeout 
= 50

##
#interactive_timeout
=6048000

wait_timeout
=31536000
interactive_timeout
=31536000
connect_timeout
=60
max_connect_errors
=100000000
max_connections
=50

[mysqldump]
quick
max_allowed_packet 
= 16M

[mysql]
no
-auto-rehash
# Remove the next comment character 
if you are not familiar with SQL
#safe
-updates

[isamchk]
key_buffer_size 
= 256M
sort_buffer_size 
= 256M
read_buffer_size 
= 128M
write_buffer_size 
= 128M

[myisamchk]
key_buffer_size 
= 256M
sort_buffer_size 
= 256M
read_buffer_size 
= 128M
write_buffer_size 
= 128M

[mysqlhotcopy]
interactive
-timeout

service mysql stop

如果目录改变了,那么需要重新建立新数据库目录

那么my.cnf中两个目录的属主需要配置,否则也会有问题

chown -R mysql.mysql /data/mysql

chown 
-R mysql.mysql /data/mysql_backup

mysql_install_db --defaults-file=/etc/my.cnf --user=mysql

输出正常自己察看

看看/data/mysql/下面的database中是否有ib开带头的几个文件,ibdata1 ibdata2  log 等。InnoDB数据实际都放在一个大文件里面

service mysql start

新install_db 的不需要密码,如果mysql -uroot -p
再回车,需要数据密码才能登录,那肯定不对。

检查ps -efww|grep mysql  看看进程使用的my.cnf是否正确。

正常登录后
mysql> show engines;

+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine     | Support | Comment                                                        | Transactions | XA   | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE  | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV        | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| FEDERATED  | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| ARCHIVE    | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance         | NO           | NO   | NO         |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+


无需密码。我们设置一下。

注意MySql 5.1 使用old_password函数设置,java程序才是对,否则程序总是会报Access Denied,其实密码是对的。格式如下

  use mysql; 
  update user set password
=old_password("new_pass") where user="root";修改密码 
  flush privileges; 刷新权限

mysql>GRANT ALL ON *.* TO 'root'@'%' 
mysql
>flush privileges;

设置一下其他地址使用root 登录mysql的远程访问权限

nohup mysql -uroot -ppassword --default-character-set=utf8 < /data/t.sql &

 ps -aux|grep mysql

什么时候Done了,就导完数据。

ll -h /data/mysql/database

mysql -uroot --/data/mysql/database/mysql.sock

有时候,会mysql等不了或者关闭不了,必须找到驱动才能关闭或者登陆

mysqladmin -uroot --/data/mysql/database/mysql.sock shutdown

备份数据dump操作

mysqldump -uroot --/data/mysql/database/mysql.sock --B tianwen tianwen_log -> /data/bak0408.sql

 =================

优化Innodb 的my.cnf

grep innodb /etc/my.cnf

innodb_additional_mem_pool_size = 20M
innodb_buffer_pool_size 
= 12G
innodb_data_file_path 
= ibdata1:4G;ibdata2:50M:autoextend
innodb_file_io_threads 
= 8
innodb_thread_concurrency 
= 16
#innodb_flush_log_at_trx_commit 
= 1
innodb_log_buffer_size 
= 16M
innodb_log_file_size 
= 256M
innodb_log_files_in_group 
= 3
innodb_max_dirty_pages_pct 
= 90
#innodb_lock_wait_timeout 
= 120
innodb_file_per_table
=1
innodb_rollback_on_timeout

max_connections = 1200  也最好设置大点,大规模操作数据会比较顺畅。
posted @ 2010-04-10 13:38 北国狼人的BloG 阅读(196) | 评论 (0)编辑 收藏

nohup mysql -uroot -ppassword --default-character-set=utf8 < /data/t.sql &

ps -aux |grep mysql

看看是否跑起来


ll -h /data/mysql/database

grep innodb /etc/my.cnf

posted @ 2010-04-09 10:39 北国狼人的BloG 阅读(267) | 评论 (0)编辑 收藏
rpm -qa|grep mysql -i

然后把系统没用的mysql 都卸掉

rpm -e --nodeps --allmatches mysql-4.1.22-2.e14

还有一个需要停mysql

mysqladmin -uroot -p -S /data/mysql/database/mysql.sock shutdown

mysql -uroot -p -S /data/mysql/database/mysql.sock

mysqldump -uroot -p -S /data/mysql/database/mysql.sock -F -B tianwen tianwen_log -Q > /data/bak0408.sql

posted @ 2010-04-08 22:06 北国狼人的BloG 阅读(214) | 评论 (0)编辑 收藏

到底懂不懂系统

mysql_install_db --defaults-file=/etc/my.cnf --user=mysql

使用该命令初始化必须保证my.cnf中的目录创建

还要配置属主
chown -R mysql.mysql /data/mysql

chown -R mysql.mysql /data/mysql_backup

 

# The following options will be passed to all MySQL clients
[client]
#password       
= your_password
port            
= 3306
socket          
= /data/mysql/database/mysql.sock

# Here follows entries 
for some specific programs

# The MySQL server
[mysqld]
port            
= 3306
socket          
= /data/mysql/database/mysql.sock
datadir         
= /data/mysql/database/
pid
-file        = /data/mysql/database/mysql.pid

skip
-locking
key_buffer_size 
= 2048M
max_allowed_packet 
= 2M
table_open_cache 
= 512
sort_buffer_size 
= 8M
read_rnd_buffer_size 
= 4M

query_cache_size 
= 1M
query_cache_type 
= 1

# Try number of CPU
's*2 for thread_concurrency
thread_concurrency = 16
thread_cache_size 
= 8
innodb_file_per_table

read_buffer_size 
= 4M
myisam_sort_buffer_size 
= 4M
myisam_recover
myisam_repair_threads
=4

server
-id = 1
log
-bin=/data/mysql_backup/binlogs/database
max_binlog_size 
= 512M
expire_logs_days 
= 3
long_query_time 
= 2 
log
-slow-queries = slow.log 
log
-queries-not-using-indexes
event_scheduler
=1
# Uncomment the following 
if you are using InnoDB tables
innodb_data_home_dir 
= /data/mysql/database/
innodb_data_file_path 
= ibdata1:20M;ibdata2:10M:autoextend
#innodb_log_group_home_dir 
= /var/lib/mysql/
#innodb_log_arch_dir 
= /var/lib/mysql/
# You can set .._buffer_pool_size up to 
50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size 
= 10000M
innodb_additional_mem_pool_size 
= 4M
# Set .._log_file_size to 
25 % of buffer pool size
innodb_log_file_size 
= 8M
innodb_log_buffer_size 
= 4M
#innodb_flush_log_at_trx_commit 
= 1
#innodb_lock_wait_timeout 
= 50

##
#interactive_timeout
=6048000

wait_timeout
=315360000
interactive_timeout
=31536000
connect_timeout
=60
max_connect_errors
=100000000
max_connections
=50

[mysqldump]
quick
max_allowed_packet 
= 16M

[mysql]
no
-auto-rehash
# Remove the next comment character 
if you are not familiar with SQL
#safe
-updates

[isamchk]
key_buffer_size 
= 256M
sort_buffer_size 
= 256M
read_buffer_size 
= 128M
write_buffer_size 
= 128M

[myisamchk]
key_buffer_size 
= 256M
sort_buffer_size 
= 256M
read_buffer_size 
= 128M
write_buffer_size 
= 128M

[mysqlhotcopy]
interactive
-timeout


初始化好, mysql -uroot -p   应该无需密码

然后看>show engines

mysql> show engines;
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine     | Support | Comment                                                        | Transactions | XA   | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE  | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV        | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| FEDERATED  | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| ARCHIVE    | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance         | NO           | NO   | NO         |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.00 sec)

posted @ 2010-04-08 21:59 北国狼人的BloG 阅读(8172) | 评论 (0)编辑 收藏
适用的情况:1 忘记密码
            2 error 1045:Access denied for user 'root'@'localhost' (using password: Yes/No)
            3 没有权限Access denied for user ''@'localhost' to database
步骤:
1 停止mysql进程;
  windows:控制面板-管理工具-服务-mysql停止;
  linux:mysql stop;
2 windows: mysqld --skip-grant-tables
  linux:mysqld_safe --skip-grant-tables
3 重新打开一个命令行窗口,输入
  mysql;进入mysql命令行
  use mysql;
  update user set password=password("new_pass") where user="root";修改密码
  flush privileges; 刷新权限

如果是MySQL 5.1 ,注意是  update user set password=old_password("new_pass") where user = "root"
select length(password) from user where user='root';不是41就对了





4 杀掉mysqld进程[任务管理器],重新启动mysql。
  windows:控制面板-管理工具-服务-mysql启动;
  linux:mysql start;











我的系统是ubuntu6.06,最近新装好的mysql在进入mysql工具时,总是有错误提示:
# mysql -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

使用网上介绍的方法修改root用户的密码:
# mysqladmin -uroot -p password 'newpassword'
Enter password:
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'

现在终于被我找到了解决方法,如下(请先测试方法三,谢谢!):
方法一:
# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit

# /etc/init.d/mysql restart
# mysql -uroot -p
Enter password: <输入新设的密码newpassword>

mysql>


方法二:
直接使用/etc/mysql/debian.cnf文件中[client]节提供的用户名和密码:
# mysql -udebian-sys-maint -p
Enter password: <输入[client]节的密码>
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit

# mysql -uroot -p
Enter password: <输入新设的密码newpassword>

mysql>


方法三:
这种方法我没有进行过测试,因为我的root用户默认密码已经被我修改过了,那位有空测试一下,把结果告诉我,谢谢!!
# mysql -uroot -p
Enter password: <输入/etc/mysql/debian.cnf文件中[client]节提供的密码>

至此,困惑多时的问题解决了!
posted @ 2010-04-08 15:56 北国狼人的BloG 阅读(249) | 评论 (0)编辑 收藏

1、下载MySQL的安装文件

 

安装MySQL需要下面两个文件:

MySQL-server-5.0.26-0.i386.rpm   

MySQL-client-5.0.26-0.i386.rpm

下载地址为:http://dev.mysql.com/downloads/mysql/5.0.html,打开此网页,下拉网页找到“Red Hat Enterprise Linux 3 RPM (x86) downloads”项,找到“Server”和“Client programs”项,下载需要的上述两个rpm文件。

 

2、安装MySQL

 

rpm文件是Red Hat公司开发的软件安装包,rpm可让Linux在安装软件包时免除许多复杂的手续。该命令在安装时常用的参数是 –ivh ,其中i表示将安装指定的rmp软件包,V表示安装时的详细信息,h表示在安装期间出现“#”符号来显示目前的安装过程。这个符号将持续到安装完成后才停止。

 

1)安装服务器端

在有两个rmp文件的目录下运行如下命令:

[root@test1 local]# rpm -ivh MySQL-server-5.0.26-0.i386.rpm

显示如下信息。

warning: MySQL-server-5.0.26-0.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5

Preparing...       ########################################### [100%]

1:MySQL-server     ########################################### [100%]

。。。。。。(省略显示)

/usr/bin/mysqladmin -u root password 'new-password'

/usr/bin/mysqladmin -u root -h test1 password 'new-password'

。。。。。。(省略显示)

Starting mysqld daemon with databases from /var/lib/mysql

如出现如上信息,服务端安装完毕。测试是否成功可运行netstat看Mysql端口是否打开,如打开表示服务已经启动,安装成功。Mysql默认的端口是3306。

[root@test1 local]# netstat -nat

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address      Foreign Address     State   

tcp  0  0 0.0.0.0:3306     0.0.0.0:*      LISTEN   

上面显示可以看出MySQL服务已经启动。

2)安装客户端

运行如下命令:

[root@test1 local]# rpm -ivh MySQL-client-5.0.26-0.i386.rpm

warning: MySQL-client-5.0.26-0.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5

Preparing...    ########################################### [100%]

1:MySQL-client  ########################################### [100%]

显示安装完毕。

用下面的命令连接mysql,测试是否成功。

登录MySQL

登录MySQL的命令是mysql, mysql 的使用语法如下:

mysql [-u username] [-h host] [-p[password]] [dbname]

username 与 password 分别是 MySQL 的用户名与密码,mysql的初始管理帐号是root,没有密码,注意:这个root用户不是Linux的系统

用户。MySQL默认用户是root,由于初始没有密码,第一次进时只需键入mysql即可。

[root@test1 local]# mysql

Welcome to the MySQL monitor. Commands end with ; or g.

Your MySQL connection id is 1 to server version: 4.0.16-standard

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>

出现了“mysql>”提示符,恭喜你,安装成功!

增加了密码后的登录格式如下:

mysql -u root -p

Enter password: (输入密码)

其中-u后跟的是用户名,-p要求输入密码,回车后在输入密码处输入密码。

注意:这个mysql文件在/usr/bin目录下,与后面讲的启动文件/etc/init.d/mysql不是一个文件。

 

MySQL的几个重要目录

MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件、配置文件和命令文件分别在不同的目录,了解这些目录非常重

要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比较复杂,如果搞不清楚MySQL的安装目录那就无从谈起深入学习。

下面就介绍一下这几个目录。

1、数据库目录

/var/lib/mysql/

2、配置文件

/usr/share/mysql(mysql.server命令及配置文件)

3、相关命令

/usr/bin(mysqladmin mysqldump等命令)

4、启动脚本

/etc/rc.d/init.d/(启动脚本文件mysql的目录)

 

修改登录密码

 

MySQL默认没有密码,安装完毕增加密码的重要性是不言而喻的。

 

1、命令

usr/bin/mysqladmin -u root password 'new-password'

格式:mysqladmin -u用户名 -p旧密码 password 新密码

2、例子

例1:给root加个密码123456。

键入以下命令 :

[root@test1 local]# /usr/bin/mysqladmin -u root password 123456

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

3、测试是否修改成功

1)不用密码登录

[root@test1 local]# mysql

ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)

显示错误,说明密码已经修改。

2)用修改后的密码登录

[root@test1 local]# mysql -u root -p

Enter password: (输入修改后的密码123456)

Welcome to the MySQL monitor. Commands end with ; or g.

Your MySQL connection id is 4 to server version: 4.0.16-standard

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>

成功!

 

这是通过mysqladmin命令修改口令,也可通过修改库来更改口令。

 

启动与停止

1、启动

MySQL安装完成后启动文件mysql在/etc/init.d目录下,在需要启动时运行下面命令即可。

[root@test1 init.d]# /etc/init.d/mysql start

2、停止

/usr/bin/mysqladmin -u root -p shutdown

3、自动启动

1)察看mysql是否在自动启动列表中

[root@test1 local]# /sbin/chkconfig –list

2)把MySQL添加到你系统的启动服务组里面去

[root@test1 local]# /sbin/chkconfig – add mysql

3)把MySQL从启动服务组里面删除。

[root@test1 local]# /sbin/chkconfig – del mysql

 

更改MySQL目录

 

MySQL默认的数据文件存储目录为/var/lib/mysql。假如要把目录移到/home/data下需要进行下面几步:

 

1、home目录下建立data目录

cd /home

mkdir data

2、把MySQL服务进程停掉:

mysqladmin -u root -p shutdown

3、把/var/lib/mysql整个目录移到/home/data

mv /var/lib/mysql /home/data/

这样就把MySQL的数据文件移动到了/home/data/mysql下

4、找到my.cnf配置文件

如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下:

[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

5、编辑MySQL的配置文件/etc/my.cnf

为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。 修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值

为:/home/mysql/mysql.sock 。操作如下:

vi  my.cnf    (用vi工具编辑my.cnf文件,找到下列数据修改之)

# The MySQL server

[mysqld]

port   = 3306

#socket  = /var/lib/mysql/mysql.sock(原内容,为了更稳妥用“#”注释此行)

socket  = /home/data/mysql/mysql.sock   (加上此行)

 

6、修改MySQL启动脚本/etc/rc.d/init.d/mysql

最后,需要修改MySQL启动脚本/etc/rc.d/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存

放路径:home/data/mysql。

[root@test1 etc]# vi /etc/rc.d/init.d/mysql

#datadir=/var/lib/mysql    (注释此行)

datadir=/home/data/mysql   (加上此行)

7、重新启动MySQL服务

/etc/rc.d/init.d/mysql start

或用reboot命令重启Linux

如果工作正常移动就成功了,否则对照前面的7步再检查一下。

 

为了在其它电脑上能用root用户登录,需进行以下动作:

 

1、mark@marklinux mark>mysql -h localhost -u root

//这样应该可以进入MySQL服务器

 

2、mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION

//赋予任何主机访问数据的权限

3、mysql>FLUSH PRIVILEGES

//修改生效

4、mysql>EXIT

//退出MySQL服务器

 

这样就可以在其它任何的主机上以root身份登录啦!

posted @ 2010-04-08 11:02 北国狼人的BloG 阅读(146) | 评论 (0)编辑 收藏
mysql>use mysql;
mysql>grant all on 数据库名字.* to '远程用户名'@'远程IP地址' identified by '远程用户的密码';
mysql>flush privileges;
mysql>\q
posted @ 2010-04-07 19:02 北国狼人的BloG 阅读(143) | 评论 (0)编辑 收藏


http://gamelook.com.cn/
posted @ 2010-04-05 16:26 北国狼人的BloG 阅读(146) | 评论 (0)编辑 收藏
taskdef flexTask.jar

内存不够用,就是用ANT_OPTS  -Xms256m -Xmx512m
posted @ 2010-04-05 15:02 北国狼人的BloG 阅读(144) | 评论 (0)编辑 收藏

打包  tar czvf static.tar.gz html/*

解压  tar xzvf server.tar.gz


描述
tar 程序用于储存或展开 tar 存档文件。存档文件可放在磁盘中 ,也可以存为普通文件。 tar是需要参数的,可选的参数是A、c、d、r、t、u、x,您在使用tar时必须首先为 tar 指定至少一个参数;然后,您必须指定要处理的文件或目录。如果指定一个目录则该目录下的所有子目录都将被加入存档。
应用举例:

1)展开 abc.tar.gz 使用命令: tar xvzf abc.tar.gz 展开 abc.tar 使用命令: tar xvf abc.tar

2)将当前目录下的 man 目录及其子目录存成存档 man.tar tar cf man.tar ./man
参数说明
运行tar时必须要有下列参数中的至少一个才可运行

-A, --catenate, --concatenate
将一存档与已有的存档合并
-c, --create
建立新的存档
-d, --diff, --compare
比较存档与当前文件的不同之处
--delete
从存档中删除
-r, --append
附加到存档结尾
-t, --list
列出存档中文件的目录
-u, --update
仅将较新的文件附加到存档中
-x, --extract, --get
从存档展开文件

其他参数

--atime-preserve
不改变转储文件的存取时间

-b, --block-size N
指定块大小为 Nx512 字节(缺省时 N=20)

-B, --read-full-blocks
读取时重组块(???!!!)

-C, --directory DIR
转到指定的目录

--checkpoint
读取存档时显示目录名

-f, --file [HOSTNAME:]F
指定存档或设备 (缺省为 /dev/rmt0)

--force-local
强制使用本地存档,即使存在克隆

-F, --info-script F --new-volume-script F
在每个磁盘结尾使用脚本 F (隐含 -M)

-G, --incremental
建立老 GNU 格式的备份

-g, --listed-incremental F
建立新 GNU 格式的备份

-h, --dereference
不转储动态链接,转储动态链接指向的文件。

-i, --ignore-zeros
忽略存档中的 0 字节块(通常意味着文件结束)

--ignore-failed-read
在不可读文件中作 0 标记后再退出???

-k, --keep-old-files
保存现有文件;从存档中展开时不进行覆盖

-K, --starting-file F
从存档文件 F 开始

-l, --one-file-system
在本地文件系统中创建存档

-L, --tape-length N
在写入 N*1024 个字节后暂停,等待更换磁盘

-m, --modification-time
当从一个档案中恢复文件时,不使用新的时间标签

-M, --multi-volume
建立多卷存档,以便在几个磁盘中存放

-N, --after-date DATE, --newer DATE
仅存储时间较新的文件

-o, --old-archive, --portability
以 V7 格式存档,不用 ANSI 格式

-O, --to-stdout
将文件展开到标准输出

-p, --same-permissions, --preserve-permissions
展开所有保护信息

-P, --absolute-paths
不要从文件名中去除 '/'

--preserve
like -p -s
与 -p -s 相似

-R, --record-number
显示信息时同时显示存档中的记录数

--remove-files
建立存档后删除源文件

-s, --same-order, --preserve-order

--same-owner
展开以后使所有文件属于同一所有者

-S, --sparse
高效处理

-T, --files-from F
从文件中得到要展开或要创建的文件名

--null
读取空结束的文件名,使 -C 失效

--totals
显示用 --create 参数写入的总字节数

-v, --verbose
详细显示处理的文件

-V, --label NAME
为存档指定卷标

--version
显示 tar 程序的版本号

-w, --interactive, --confirmation
每个操作都要求确认

-W, --verify
写入存档后进行校验

--exclude FILE
不把指定文件包含在内

-X, --exclude-from FILE
从指定文件中读入不想包含的文件的列表

-y, --bzip2, --bunzip2
用 bzip2 对存档压缩或解压

-Z, --compress, --uncompress
用 compress 对存档压缩或解压

-z, --gzip, --ungzip
用 gzip 对存档压缩或解压

--use-compress-program PROG
用 PROG 对存档压缩或解压 ( PROG 需能接受 -d 参数)

--block-compress
为便于磁盘存储,按块记录存档

-[0-7][lmh]
指定驱动器和密度[高中低]

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

打包: tar -cf soft.tar soft

解包: tar -xf soft.tar soft

压缩目录

打包压缩:tar czvf usr.tar.gz /home

解压缩:tar xzvf usr.tar.gz

压缩文件(对于目录失效)

压缩:zip good.zip good1 good2

解压:unzip good.zip
posted @ 2010-04-02 14:09 北国狼人的BloG 阅读(317) | 评论 (0)编辑 收藏

基于MINA框架快速开发网络应用程序

1.MINA框架简介 MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架。

通过使用MINA框架可以可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入到业务设计和开发当中。
MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。MINA框架当前稳定版本是1.1.6,最新的2.0版本目前已经发布了M1版本。

MINA框架的特点有:基于java NIO类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持TCP、UDP协议;控制反转的设计模式(支持Spring);采用优雅的松耦合架构;可灵活的加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能;采用回调的方式完成调用,线程的使用更容易。

2.MINA框架的常用类 类NioSocketAcceptor用于创建服务端监听; 类NioSocketConnector用于创建客户端连接; 类IoSession用来保存会话属性和发送消息; 类IoHandlerAdapter用于定义业务逻辑,常用的方法有: 方法 定义 sessionCreated() 当会话创建时被触发 sessionOpened() 当会话开始时被触发 sessionClosed() 当会话关闭时被触发 sessionIdle() 当会话空闲时被触发 exceptionCaught() 当接口中其他方法抛出异常未被捕获时触发此方法 messageRecieved() 当接收到消息后被触发 messageSent() 当发送消息后被触发

3.服务端应用开发示例 下面将以MINA2.0M1版本为基础,通过一个范例来演示一下如何使用MINA框架进行开发。开发环境为jdk6.0,开发工具NetBeans6.0,所需jar包slf4j-api.jar、slf4j-jdk14.jar、MINA-core-2.0.0-M1.jar。 首先定义一个业务逻辑处理器TimeServerHandler,继承自IoHandlerAdapter,实现的功能有:当客户端创建会话时会显示客户端设备的IP和端口;当客户端输入quit时结束会话;客户端输入其它内容时则向客户端发送当前时间。

代码如下: public class TimeServerHandler extends IoHandlerAdapter {
  @Override
  public void sessionCreated(IoSession session) {
   //显示客户端的ip和端口
   System.out.println(session.getRemoteAddress().toString());
  }
  
  @Override
  public void messageReceived( IoSession session, Object message ) throws Exception {
   String str = message.toString();
   if( str.trim().equalsIgnoreCase("quit") )
   {
    session.close();
    //结束会话
    return;
   }
   Date date = new Date();
   session.write( date.toString() );
   //返回当前时间的字符串
   System.out.println("Message written...");
  } }
  
再定义一个类MinaTimeServer用来启动服务端:
  public class MinaTimeServer {
   private static final int PORT = 9123;
   //定义监听端口
   public static void main( String[] args ) throws IOException
   {
    IoAcceptor acceptor = new NioSocketAcceptor();
    acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
    acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
    //指定编码过滤器
    acceptor.setHandler( new TimeServerHandler() );
    //指定业务逻辑处理器
    acceptor.setDefaultLocalAddress( new InetSocketAddress(PORT) );
    //设置端口号 acceptor.bind();
    //启动监听
   }
  }


4.测试
 
 首先运行MinaTimeServer,启动服务端,接着在命令行运行“telnet 127.0.0.1 9123”,
 来登录,这时会看到服务端输出如下: 2008-2-21 16:15:29 org.apache.MINA.filter.logging.LogLevel$4 log /10.64.2.137:4140 àIP和端口号
 信息: CREATED 2008-2-21 16:15:29 org.apache.MINA.filter.logging.LogLevel$4 log 信息: OPENED 在客户端输入回车,在客户端可以看到服务端返回当前的时间:
 
  Thu Feb 21 16:20:14 CST 2008 服务端输出: 2008-2-21 16:20:14 org.apache.MINA.filter.logging.LogLevel$4 log 信息: RECEIVED: HeapBuffer[pos=0 lim=2 cap=2048: 0D 0A] à接收收到回车符 Message written... 2008-2-21 16:20:14 org.apache.MINA.filter.logging.LogLevel$4 log 信息: SENT: HeapBuffer[pos=0 lim=29 cap=30: 54 68 75 20 46 65 62 20 32 31 20 31 36 3A 32 30...] 2008-2-21 16:20:14 org.apache.MINA.filter.logging.LogLevel$4 log 信息: SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]

 


5.客户端开发示例 首先定义类TimeClientHandler来处理消息接收事件:

class TimeClientHandler extends IoHandlerAdapter{
            public TimeClientHandler() { }
            @Override
            public void messageReceived(IoSession session, Object message) throws Exception {
                   System.out.println(message);//显示接收到的消息
            }
}

接着定义MinaTimeClient类用于连接服务端,并向服务端发送消息:
        public class MinaTimeClient {
              public static void main(String[] args) {
                  // 创建客户端连接器.
                  NioSocketConnector connector = new NioSocketConnector();
                  connector.getFilterChain().addLast( "logger", new LoggingFilter() );
                  connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" )))); //设置编码过滤器             connector.setConnectTimeout(30);
                  connector.setHandler(new TimeClientHandler());
                  //设置事件处理器
                   ConnectFuture cf = connector.connect( new InetSocketAddress("127.0.0.1", 9123));
                  //建立连接
                  cf.awaitUninterruptibly();
                 //等待连接创建完成
                 cf.getSession().write("hello");
                 //发送消息
                 cf.getSession().write("quit");
                 //发送消息
                 cf.getSession().getCloseFuture().awaitUninterruptibly();
                 //等待连接断开
                connector.dispose();
               }
         }

6.总结 通过上述示例可以了解到:使用MINA框架来开发的网络应用程序代码结构更清晰;MINA框架完成了底层的线程管理;MINA内置的编码器可以满足大多数用户的需求,省去了开发人员消息编码解码的工作。具称使用MINA开发服务器程序的性能已经逼近使用 C/C++ 语言开发的网络服务。因此,建议在网络应用程序开发过程中尝试使用MINA框架来提高我们的开发效率和应用程序的执行效率。

posted @ 2010-03-31 11:10 北国狼人的BloG 阅读(245) | 评论 (0)编辑 收藏

老外的想法做法就是不一样,如果你想在外企工作得好,有些潜规则你最好心里有数。



Unacceptable:


老外打小受的教育是人要以表扬鼓励为主,所以老外批评人比较含蓄。说你这件事办的unacceptable,已经算是说的很重了,中国老板在外企混久了, 也便跟着装逼起来,对你不满,写email给你,左一个unacceptable右一unacceptable。


潜台词相当于:你这个傻逼,你奶奶个熊, 给老子小心点,等等。


CC:


就是Copy。我看email,第一看标题,第二看CC给谁,第三才看内容。CC给谁基本上能够说明对方的态度,CC一大批老板的,肯定不是啥好事,对方要推卸责任。


潜台词:我这件事告诉你了哦,和我没关系了,你自己看着办吧,反正老板都知道?都盯着你呢。 最开心的是看到自己的名字在CC那一栏里面,因为那意味着那就是这封信不用回,看看就可以。有人会回的。


Concern:


中文翻译成”关注”,其实根本不是关注的意思,老外要是说他很concern, 那就是事情不妙,所谓老外打喷嚏,中国人集体感冒。


潜台词:老子很不爽,这事儿怎么这么乱七八糟,给我注意点!


Great:


刚才说了,老外打小受教育要多夸人,少批评人,所以老外一天到晚把”It”s great!”,”you did a great job!” 挂在嘴上,初听还飘飘然了几回,听久了,才知道其实压根儿就是他们口头禅,心里未必觉得你有多 great,同义词还有 fantastic! wonderful! Gorgeous! Fabulous! 等等。


潜台词:还马马虎虎啦,一般般了,还过得去。


F.Y.I:


以前一直以为是forward邮件的时候系统会自动加上这几个字,因为人家转过来的信上都有这三个字母,过了好久才知道是人家自己加的,意思是:For Your Information。看到这几个字母意味着下面内容和我有关,但是关系不大,看看就好。因为对方如果要你采取行动,一定会说清楚:Allen, please……。。而不会只是F.Y.I了事。


潜台词:和你关系不大,给你随便看看。


Issue:


中文翻译成事情,其实是贬义词,准确意思是”不好的事情”,老外说有一个issue,就是有件鸟事要处理。要有很多issue,那就是一团糟。


潜台词:事情不妙,大家都赶快处理。


Aggressive:


中文翻译成”进攻性的”,在外企里面意思含糊,褒义的有”具有开拓精神的”,”有事业心的”,贬义的有”咄咄逼人的”,”喜欢没头脑乱闯的”,”容易得罪别人的”,反正意思可褒可贬,看你自己琢磨。 面试时候说自己”aggressive”的,潜台词是:我可不是那种混日子的人,我是能干事的,招我准没错。 但是一但说别人”very aggressive”,基本上潜台词是说:这傻逼凶巴巴的,不好相处,做事没头没脑,老闯祸…不是啥好鸟。


Involve:


中文翻译成”介入”,反正involve的老板越高层事情就越复杂,director要是involve了,manager就开始紧张,VP要是involve了,中国区相关人员都别想有好日子过,得加班加得四脚朝天。


潜台词:大佬很生气,后果很严重。


RESEND!


重传。


潜台词:有没在上班的呀?还没有答复过来?是不是在混水摸鱼?我的时间很宝贵的,不快点回复你就死定了。


highlight :


强调,意思是说你搞不定一定要提前highlight出来,抗不住就早点讲,一般要highlight的东西都是比较难搞定的。


urgent :


紧急的,遇到这样的urgent的case你就有得麻烦了,电话基本不会停下来,好一阵子的热线。


appreciate :


欣赏。当事情自己解决不了的时候,需要别人帮忙的时候,或者是自己做错事无法挽回的时候,一句yourkindhelpshouldbeappreciated。就会发挥很大的作用 了。


guarantee :


保证,之前promise的东西没有出现,于是再次向别人求助的时候,对方一句Are you guarantee of it?让你很是尴尬,使对方陷入困境。对于sales来讲,此词使用 的几率教高。


myunderstandingis…


翻成中文是我的理解是。


潜台词是,应该是。你的理解有误,我在此再给你解释一下。虽然看上 去是对方在说自己的理解,但基本上是认为你的看法是错的,他的是正确的。


Im very disappointed…


中文是:我很失望。


潜台词是:你怎么搞得,弄成这样。后果有点严重,基本上这个人对你有了 一个很差的印象了。

posted @ 2010-03-23 22:02 北国狼人的BloG 阅读(157) | 评论 (0)编辑 收藏
dir  后台,把文件,横向排放,并以空格换行

gam.server.jar            
mina-core.jar       


每行空格长度不同

使用    edit -plus   Alt 列选扣出来

使用  Ctrl + H  替换      (空格点星)   

( .*)  替换 ,
posted @ 2010-03-23 20:35 北国狼人的BloG 阅读(137) | 评论 (0)编辑 收藏
Class-Path: ./lib/ant-1.6.5.jar
 ./lib/ant-junit-1.6.5.jar
注意:换行后前面加两个空格

posted @ 2010-03-23 20:30 北国狼人的BloG 阅读(464) | 评论 (0)编辑 收藏
http://code.google.com/p/golfzon-flash-library/
posted @ 2010-03-23 13:26 北国狼人的BloG 阅读(180) | 评论 (0)编辑 收藏

下面是非常有用的类库:

APIs、Libs、Components

1、as3ebaylib

http://code.google.com/p/as3ebaylib/

2、as3youtubelib

http://code.google.com/p/as3youtubelib/

3、as3flickrlib

http://code.google.com/p/as3flickrlib/

4、Yahoo ASTRA Flash Components

http://developer.yahoo.com/flash/astra-flash/

5、facebook-as3

http://code.google.com/p/facebook-as3/

6、as3awss3lib

http://code.google.com/p/as3awss3lib/

7、Adobe ActionScript. 3:resources:apis:libraries (官方,包括corelib、FlexUnit、Flickr、Mappr、RSS and Atom libraries、Odeo、YouTube)

http://labs.adobe.com/wiki/index.php/ActionScript_3:resources:apis:libraries

8、Tweener   用于过渡与切换的一组动画库

http://code.google.com/p/tweener/

9、uicomponents-as3     一组轻量级的AS3 UI组件库

http://code.google.com/p/uicomponents-as3/

10、as3ds     AS3的数据结构实现

http://code.google.com/p/as3ds/

11、mecheye-as3-libraries     一组主要用于Flash 游戏开发的AS3库

http://code.google.com/p/mecheye-as3-libraries/

12、XIFF   一套XMPP协议的AS3实现

http://svn.igniterealtime.org/svn/repos/xiff/branches/xiff_as3_flexlib_beta1/

13、FZip   一套AS3库,可用作对ZIP压缩文件的载入、修改与创建

http://codeazur.com.br/lab/fzip/

14、FlexLib   一套开源的Flex界面组件库

http://code.google.com/p/flexlib/

15、AnimatedGIfLoader Flex Component     可载入GIF的Flex组件

http://dougmccune.com/blog/animatedgifloader-flex-component/

16、goplayground     一套轻量级的,可用创建属于你自己的AS3 动画工具的库

http://code.google.com/p/goplayground/

17、AlivePDF   开源的用于PDF创建的AS3库

http://www.alivepdf.org/

18、jwopitz-lib   一组开源的Flex用户界面组件

http://code.google.com/p/jwopitz-lib/

19、as3crypto   AS3实现的一套加密库,包括多种加密算法

http://code.google.com/p/as3crypto/

20、flare     一套强大的可视化交互的AS3类库

http://flare.prefuse.org/

21、SWFAddress     一小而强大的库,可以为Flash和Ajax提供深链接的功能

http://www.asual.com/swfaddress/

22、SWFObject     用于嵌入Flash,Adobe官方也认可了

http://code.google.com/p/swfobject/

23、ulse Particle System 一套开源的强大的AS3动态粒子系统

http://code.google.com/p/pulse-particle/

http://www.rogue-development.com/pulseParticles.html

24、SpringGraph Flex Component

http://mark-shepherd.com/blog/springgraph-flex-component/

25、GoASAP     AS3动画库

http://code.google.com/p/goasap/

http://www.goasap.org/index.html

26、asaplibrary   一套开源的Flash Actionscript3.0 RIA库

http://code.google.com/p/asaplibrary/

http://asaplibrary.org/

http://asapframework.org

27、as3mathlib 开源Flex/Actionscript数学库

http://code.google.com/p/as3mathlib/

28、as3corelib 包含一些基础功能AS3库

http://code.google.com/p/as3corelib/

29、minimalcomps 一组AS3 UI组件

http://www.bit-101.com/minimalcomps/

30、as3gif

http://code.google.com/p/as3gif/

31、queueloader-as3     一组AS3库,用来进行资源序列载入及监测

http://code.google.com/p/queueloader-as3/

32、TweenMax (AS3)

http://blog.greensock.com/tweenmaxas3/

33、Atellis Reflection Component             一款Flex反射效果组件

http://labs.atellis.com/2007/07/11/atellis-reflection-component/

34、AS3Eval     简单来说,就是用AS3实现的AS3编译器

http://eval.hurlant.com/

35、ByteArray的组件、库合集,包括liquid components、mousegesture、ASZip、GIF Player、GIF Animation Encoder、AlivePDF、Live JPEG Encoder、ScaleBitmap等

http://www.bytearray.org/?page_id=82

36、AS3C     针对AVM2虚拟机,用C#写的字节码编译器

http://code.google.com/p/as3c/

37、as3httpclientlib   as3实现的http客户端

http://code.google.com/p/as3httpclientlib/

38、as3ui   一组常规的as3 ui界面库

http://code.google.com/p/as3ui/

39、as3xls 让你在flex中可以读写Excel文件

http://code.google.com/p/as3xls/

40、as3flexdb 让你的flex程序可以连接到MySQL服务器,主要是使用AMFPHP来访问PHP服务器

http://code.google.com/p/as3flexdb/

这一是一篇详细使用介绍的教程

http://itutorials.ro/viewtopic.php?f=9&t=7

41、vivisectingmedia-as3  一组AS3/Flex实用库,是作者在实践中总结出来的

http://code.google.com/p/vivisectingmedia-as3/

Actionscript. 3.0 Class

1、fZip   此类可允许你载入标准的zip文件并提取里面包含的文件

http://wahlers.com.br/claus/blog/zip-it-up/

2、AS3: Layout class for Flash CS3     一组用作布局的类

http://www.senocular.com/?id=2.8

3、CSSLoader     该类允许Flex应用程序在运行时载入CSS

http://www.rubenswieringa.com/blog/cssloader

4、AS3: QueryString     一个单例类,用来获取URL地址后所带参数值对

http://evolve.reintroducing.com/2008/07/03/as3/as3-querystring/#more-141

5、ActionScript. 3 Contextual Menu Manager Class         AS3关联菜单管理类

http://www.blog.noponies.com/archives/103

2D & 3D Engine

1、APE (Actionscript. Physics Engine)   物理引擎

APE前身是as2版本的Flade,呼声很高,优点就是清晰简单,一共没有几个类:),目 前版本alpha 0.45 ,有API文档和示例,教程有一篇quick start ,在Google Group上有一个论坛可以讨论。svn上一直在更新目前svn上的版本为0.5a

http://www.cove.org/ape/

2、Away3D

http://code.google.com/p/away3d/

3、Papervision3D

http://code.google.com/p/papervision3d/

4、Sandy     开源3D库

http://www.flashsandy.org/versions/3.0

5、FORM   一套AS3完成的用于2D刚性物体的物理引擎

http://code.google.com/p/foam-as3/

6、Five3D   基于矢量的Flash 3D 交互动画创建

http://five3d.mathieu-badimon.com/

7、Flade (Flash Dynamics Engine)   一套开源的2D物理引擎,AS2实现

http://www.cove.org/flade/

8、Box2DFlashAS3     2D物理引擎,AS3实现,基于强大的Box2D C++物理库

http://box2dflash.sourceforge.net/

9、Paradox   基于Flash的第一称3D引擎

http://animasinteractive.com/propaganda/

10、ND3D AS3 3D Engine  一款简单的AS3开源3D引擎,编译后的引擎大小仅约10K

http://code.google.com/p/nd3d/

http://www.nulldesign.de/nd3d-as3-3d-engine/

11、motor2   基于Box2d的AS3刚体引擎,也是2D的.

作者就是 AS3数据结构的作者,2007年最后一天发布

作者主页:http://lab.polygonal.de/motor_physics/

代码:http://code.google.com/p/motor2/

12、WOW-Engine   法国人写的,基于Sandy library的算法 3D物理引擎

http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/

FrameWorks

1、Cairngorm   Adobe官方出的Flex框架

http://labs.adobe.com/wiki/index.php/Cairngorm

2、PureMVC   纯AS3框架,也有其它语言的实现

http://www.puremvc.org/

3、ASWing AS3   一套开源的AS3 GUI框架

http://www.aswing.org/

4、EasyMVC   由事件驱动的MVC框架

http://projects.simb.net/easyMVC/

5、Mate 基于Tag及事件驱动的Flex框架

http://mate.asfusion.com/

6、ARP     基于模式(Pattern)的RIA框架,Flash平台,支持AS2和AS3

http://osflash.org/projects/arp

7、Gaia   开源的Flash前端框架,支持AS2和AS3,用于快速开发

http://www.gaiaflashframework.com/

8、flest   Actionscript3.0/Flex应用程序框架,用来开发企业级的RIA

http://code.google.com/p/flest/

9、Gugga     Flash Framework     更新至AS3

http://www.gugga.com/flashblog/

10、Prana 另一个提供了IOC反转控制的框架,类似著名的Spring框架

http://www.pranaframework.org/

11、OpenFlux   开源的Flex组件框架,让开发Flex组件更加快速容易

http://code.google.com/p/openflux/

12、Degrafa       声明式的Flex图形框架,允许以MXML标签的方式绘制图形、创建皮肤,还包括对CSS的支持

http://code.google.com/p/degrafa/

13、FlexMVCs   针对AS3和Flex的应用程序框架,基于PureMVC,作了些修正和精简

http://code.google.com/p/flexmvcs/

Flash & Flex Tools、Servers

1、FlexUnit     Flex/Actionscript3.0单元测试框架

http://code.google.com/p/as3flexunitlib/

2、Visual FlexUnit 增强的FlexUnit,支持“可视化断言”

http://code.google.com/p/visualflexunit/

3、RED bug       debug调试控制器,让Flash、Flex、AIR应用程序更加容易

http://www.realeyesmedia.com/redbug/

4、reflexutil 可在运行时对Flex组件进行调试

http://code.google.com/p/reflexutil/

5、FxSpy   当Flex应用程序运行时可以检测和动态的改变可视化组件属性值

http://code.google.com/p/fxspy/

6、ThunderBolt 基于Firefox的Firebug插件的日志扩展,支持AS2及AS3

http://code.google.com/p/flash-thunderbolt/

7、FlashTracer Firefox扩展,可以以侧栏的方式将Flash中trace()的结果显示

8、RIALogger 另一款Flex/AIR的Debug工具

http://renaun.com/blog/flex-components/rialogger/

9、Alcon 一款轻量级的AS2及AS3的Debug工具,AIR方式将Debug信息展示出来

http://blog.hexagonstar.com/alcon/

10、GDS (Granite Data Services) 开源,提供了Adobe LiveCycle Data Services类似功能的服务器

http://www.graniteds.org/

Flex Explorers   (大部分为Flex2版本,但同样适用于Flex3)

1、Flex3 Component Explorer   Flex各类组件示例

http://examples.adobe.com/flex3/componentexplorer/explorer.html

2、Resize ManagerFX Explorer (此为商业作品,要收费的)

http://www.teotigraphix.com/explorers/ResizeManagerFX/ResizeManagerFXExplorer.html

3、Flex3 Style. Explorer

http://examples.adobe.com/flex3/consulting/styleexplorer/Flex3StyleExplorer.html

4、Flex2 Style. Explorer(添加了Kuler功能)Flex UI组件风格定制并可输出为CSS

http://www.maclema.com/content/sek/

5、Flex2 Style. Explorer(Adobe 原始的版本)

http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html

6、Flex2 Filter Explorer   查看各类滤镜效果并可进行设置

http://merhl.com/flex2_samples/filterExplorer/

http://merhl.com/?p=40   (AIR版本)

7、Flex2 Primitive Explorer   在Flex中创建各种简单形状

http://www.flexibleexperiments.com/Flex/PrimitiveExplorer/Flex2PrimitiveExplorer.html

posted @ 2010-03-21 18:20 北国狼人的BloG 阅读(1697) | 评论 (0)编辑 收藏

香港著名经济学家——郎咸平

 

'中国99%的白领以及他们的家庭即将面临破产。而且是必然破产!无路可逃!这件事可能是发生在未来2-10年。你可以尽量去怀疑这个数字。但它必然发生,绝非危言耸听。'就如我预言中国国营企业职工必然失业一样,在当时来说没人信。但确实会发生。因为在中国这样一个发展中国家,其必然以不断的以通货膨胀和改革手段来换取经济的发展。而每一次改革所带来的阵痛都是由百姓来承担的。无论是上山下乡时迷茫的知青们还是改革开放带来的大量国企纷纷倒闭时大量下岗职工。如果他们能有一定的前瞻性的话,那么我想他们也许会为自己留一点后路。但是由于过分相信文件以及过分相信生活不会突变,所以才导致了他们的人生悲剧。

  有人说政府不会坐视不理白领破产,其实政府当然不愿意。可有的事情……怎么说呢。想想当年的下岗职工吧。引起了那么大的社会震动。又能怎样呢?今天的白领明天破产的时候也那样而已。

  而改革开放20多年来,中国的经济发展快速腾飞。但旧的体制并没有完全更改。各种重要行业依然施行的是政府垄断机制在运转。如:银行,金融,冶金,能源,信息,运输,医疗,教育,土地。在改革开放初期我国不可能对这些东西进行全方面的改革开放。但到了今天,垄断经营所带来的矛盾日益突出。
  首当其冲的就是地产。由于我国的法制不健全,尤其是金融以及改革领域里出现了各种失误导致地产节节攀升。随着地产的增加以及外来人口向大城市集中。所以城市新民工也就是所谓的'白领'收入表面上也在提升,以北京为例3000-15000元人民币的月薪处处可见。但这一部分收入主要用于支付租房或还贷。
  为了深入地了解为什么99%的白领家庭会破产,我们就必须先了解房价为什么会这么高?高在哪里?资金是运转的?(这里的白领指买房或者准备买房族。)以及发展趋势带来的相关效应。本文会分三个阶段向你阐述。
  1:导致房价爆涨的第一个因素:银行竞争下的贷款开放。
  其实房价的爆涨的因素主要是因为百姓在替政府所犯下的错误买单。比如以前一个开发商通过某银行贷款了1000万开发了一个房子。如果还不起那他就倒霉了,因为所有的银行都是一个体系,你欠了钱没还就再也没有翻身的机会。但是中国在银行改革的基础上开了一条口子,为了各银行之间的竞争所以把工行,农行,建设银行等等全部独立运营。这本来是好事。但问题是这些银行都不是私有的,而是国家的。我们不难想象。当一个开发商从工行贷款1000万的后果。他只需要用500万来开发房子,然后把售价提升,再把这个开发中的房子按他的售价标准抵押从农行再贷款2000万,然后再用这2000万中的1000万开发一套售价更高的房子来找建设银行抵押贷款4000万。就是这样一个滚雪球的疯狂贷款模式。
  房子卖不卖得出去不重要,关键是房价要高,不得降价。反正银行的钱不是私人的,所以稍微疏通一下行长加之又有'合法的'高零售价的楼盘做抵押所以自然就越来越好从银行贷款。
  那么这样造成的结果就是,房子价格只攀不跌!因为不能跌!一跌银行贷出去的款就再也回不来了。这可是政府的银行,政府的钱!所以为了堵住这个资金黑洞一些被收买的专家、媒介便开始疯狂制造舆论用各种舆论手段威逼利诱人买房子。
  比如土地资源严重紧张,再不买房将来就只能住在郊区呀之类的。导致人们不得不去买房。其实住不了市中心这种情况这根本不可能发生,城市居民是一个新老替换的过程,要上班的住城里,老人退休喜欢住郊区。只要人口不爆炸就不会出现上班族住不了市中心的情况。虽然这些舆论造成了很多人买房子,但是仅仅是这样,房价还没有高到现在这样的离谱。紧接着政府又犯了第二个错误。
2:导致房价爆涨的第二个错误:中国特色的按揭。  
  按揭本来是一种西方很流行的制度,也很合适。但这个制度一旦运用到中国就有点问题了。因为从大的体制上来说。所有银行都是国家的,而不是私人的。所以贷款这个关口就不可能控制得住。只要文件上说得过去,人们就能贷到款。  
  为了早日缓解第一个错误所带来的资金黑洞。政府开始实行个人按揭制度来售房。还经常举什么美国来太太和中国老太太的例子来诱惑人们去按揭。确实有人按揭了,而且是疯狂的按揭。只要和银行有点'路子'的人。他们先按揭一套80万的房子,自己出10万首付然后再从银行贷出70万。之后再把这个房子抬高价格到180万出售。这个时候他们的亲戚或者老爸老妈再去买下,也用按揭的方式自己出首付30万再从银行贷出150万。然后就不管了。他们不还贷款怎么办?银行爱收不收。反正根据合同我还不上钱你可以收走房子,我们两不相欠。  
  所以转了一圈,抬高了几倍价格的房子又回到了政府回到了银行手里。这就解释了为什么很多新楼盘刚开始修就被'炒房团'买走了。他们炒的不是赌房子会升值。而是拿了房子去收拾银行。  
  银行拿到这个房子怎么办?更不敢降价了。只好再加点价接着卖。所以普通老百姓现在根本别想买到真正合理价格的房子!即使你直接从开发商手里买来的房子都说不定已经转了好几次手又回到银行以及开发商手里的了。说句不好听的现在8000/平的房子里,有只有2500才是房价,有5500都是以为决策错误带来的资金黑洞!也就是说你正在替人任劳任怨地擦屁股。  
  3:第三个问题:白领家庭何时破产??  
  那么我们研究了房子价格为什么会涨,再来研究一下中国城市所谓的白领家庭破产的必然性。  
  首先国外白领收入确实是高,但是高得有价值。而中国所谓的白领则普遍素质较差。中国企业内耗严重。人人相轻,人人顽固。所以难怪外资企业一进入中国大陆市场就开始惊呼:'在中国办企业招不到人!'对此我也深有体会。那有人会说:'既然现在的白领不值这个身价,那水木周平你说说为什么他们还能拿到这样的薪水呢?'其实,这由于房地产的火爆造成的一个量子效应。银行损失的资金大量的经过少数人之手流向了市场。这些人开始在中国的其他领域疯狂投资。因为他们自己也知道房地产就快要崩盘了。他们这样一轮又一轮的投资热潮正在快速消化这些资金,他们投资互联网,投资高新技术,投资娱乐,投资很多很多。但起码付出的工资要够员工付房子月租或者月供吧。所以正是因为房价的高涨所以造就了中国城市人口工资水平的相对提升。不相信你自己算算你所在的城市白领阶级平均收入一旦交完每月的房钱,手上还能剩多少钱?我想这个问题就不用我再罗嗦了吧。大家心理有数。所以我可以说一旦房地产崩盘紧接着崩溃的就是你的工资。  
  有很多很多我认识的白领们都购了房。他们的算盘很简单:'两口子除开各种税收保险每月纯收入还12000。交3000房钱算什么?我还能再买一套呢!'是的不算什么。但因为房子贵所以什么东西都贵。吃的贵,交通贵,学费贵,医疗费用更贵!!!所以交了房钱你再除开生活费用就基本上一分钱存不下来,就算存点也赶不上正常的通货膨胀率。问题是如果能一直保持这个现状的话,理论上说应该没事。你这二十年赚来的钱正好可以弥补政府的两个错误带来的亏损。  
  但问题也出在这里。随着WTO5年缓冲期的结束,大量外资通讯,银行,医疗,保险等等公司都会陆续进入中国。到时候没有人能阻止你把钱存入花旗,存入汇丰。请问一下到那个时候谁愿意把钱存在呆帐坏帐如此之多的中国国有银行呢?即使政府再怎么采取措施也可能挤兑,所以到时候会发生什么现在还很难说。但有一点可以肯定的是到时中国国有这些银行的压力将变得非常巨大。贷款就会难上加上,因为银行根本无钱可贷!同时大量具备高素质人材的外资企业进入中国必定带来市场的强烈冲击和大量现有企业的倒闭以及白领失业。也就是说。一旦外资企业加入竞争,中国现有的99%的白领都将面临大环境下的就业压力!  
  而且外资银行一旦积累了资金开始投资房地产,那么由于它们是正常的操作流程所以造出来的房子就会便宜,其必然拉动全国房地产大幅下跌。如我刚才所说,房价一跌,紧跟着跌的就是你所在的企业的工资收入!可你之前买的房子还贷价格并不会降低或者减少,所以你将无力支付高昂的贷款。那么你的的房子会被银行收走,你的存款会被直接冻结。所以未来中国城市中的白领们最大的可能是和几十年前的中国国有企业职工一样。辛辛苦苦二十年,到头来竹篮打水一场空!
如何避免破产?  
  看到这里您应该明白,不要买房是一个避免破产的好办法。不过我还要提醒你,为了托住楼市不跌,他们还有个办法,那就是鼓吹老百姓不买房就不是个爷们儿!您别说,这还真有点效果。现在的人一张口第一句就是:'你有房吗。'似乎你没房就是个太监一样。我实在是气得连骂人的力气都没有了。还有人在百度水木周平这个帖吧里发帖说:'不买房子你住哪里?'我就奇怪了,住和买有必然联系吗?在中国一个土地都不属于你的房子卖给你和租给你有什么区别?(笑)。更别提土匪一样的物业和把人不当人的强制拆迁!这不纯粹是'皇帝的新装'吗?不过既然WTO中已经说明出版业和传媒业中国还是不对外开放的。那么舆论救市就会成为政府和开发商手中的最后一张王牌。  
  所以我们在面对很多花言巧语的时候还是自己多动动脑子。以后我们听到的房产的鬼话会越来越多,越来越令人发指!比如最近就有砖家在鼓吹房价不贵时都说:'什么即使年薪5万,两口子也是一年10万,5年就50万。所以房价当然不贵。'我奇怪的是居然有人点头称是?也许对于这种或者此类已经进化到了不吃不喝不病不穿不动且爹娘早已死绝不用赡养的砖家来说也许还真是那么回事。所以大家注意提高警惕。  
  结束语:  
  已经买房或者准备买房的白领一族必定随着房价的崩溃而崩溃,那会是一个缓慢发生的过程。短则两年,长则十年。但这是不可逆转的趋势。所以中国99%城市白领一族已经面临破产一说绝非危言耸听!今天你往银行交的每一分房钱都是替政府替炒房者补洞,只有一小部分是真正的房钱。明天大环境一变,你没有那么多资金来补洞的时候就会被市场和银行一脚踢回老家,换一批新人来接着补。不信?走着瞧呗!--PS:为什么我说99%这个数,是因为根据我的了解99%的人一旦月薪过5000就开始买房,甚至3000,4000都买。小俩口什么都不明白这样买下去人生一定会很惨。我只是替他们感到忧伤。当然如果你是那1%的智者,多劝救他们吧。独乐乐不如众乐乐。
                中国人正在上的四个大当
        第一大当:房产
        买房意味着什么?意味着你拥有了一个属于自己的房子。是的,你是这样以为,但是在中国你并无法拥有这个房子,只是租给你而已。因为房子是你的,地不是你的,只是把土地使用权70年(从现在退70年那是抗日战争时期,谁见过那时候的房子?)。房子通常情况下30年左右就会遇上拆迁或者旧房改造。也就是说你花了买房的钱,却只能得到租房的实际效果。当然这还不是最坏的。最坏的是,当几十年后你发觉上当了!有一群流氓冲进你用一辈子积蓄买下的房子,画上一个大大的拆字!然后把你的家当全部当垃圾一样的仍出门外,不顾你的苦苦哀求,甚至还在报纸上给你按一个钉子户的臭名,任大众辱骂的时候你就会知道什么叫做绝望!

  形容中国的房地产有一个很有名的笑话是这样写的:

  以前,有个地主有很多地,找了很多长工干活,地主给长工们盖了一批团结楼住着,一天,地主的谋士对地主说:东家,长工们这几年手上有点钱了,他们住你的房子,每月交租子,不划算,反正他们永远住下去,你干脆把房子卖给他们起个名堂叫做——公房出售!告诉他们房子永远归他们了,可以把他们这几年攒的钱收回来,地主说:不错,那租金怎么办?谋士说:照收不误,起个日本名儿,叫物业费!地主很快实行了,赚了好多钱,长工们那个高兴啊!

  过了几年,地主的村子发展成城镇了,有钱人越来越多,没地方住,谋士对地主说:东家,长工们这几年手上又有钱了,咱们给他们盖新房子,起个名堂叫做旧城改造,他们把手上的钱给我们,我们拆了房子盖新的,叫他们再买回去,可以多盖一些卖给别人,地主又实行了,这次,有些长工们不高兴了,地主的家丁派上用途了,长工们打掉牙只好往肚子里咽,地主又赚了好多钱。

  又过了几年,地主的村子发展成大城市了,有钱人更多了,地主的土地更值钱了,谋士对地主说:东家,咱们把这些长工的房子拆了,在这个地方建别墅,拆出来的地盖好房子卖给那些有钱的大款还能赚一笔,地主说:长工们不干怎么办?谋士说:咱给他们钱多点儿,起个名堂叫货币化安置,咱再到咱们的猪圈旁边建房子,起个名堂叫经济适用房,给他们修个马车道让他们到那边买房住,地主说:他们钱不够怎么办?谋士说:从咱家的钱庄借前给他们,一年6分利,咱这钱还能生钱崽,又没风险,地主又实行了,长工们拿到钱,地主的经济适用房到现在才建了一间,长工们只好排队等房子,直到现在,还等着呢……

  于是,长工们开始闹事了,地主有点慌,忙问谋士怎么办?谋士说:赶紧通知长工们,房子要跌价了,别买了,租房住吧,正好把我们的猪圈租给他们,结果,这么多年后,长工们的钱全没了,还在租房住,直到永远!

  这个笑话虽然有点夸张,但实际上这何尝又不是事实呢?有人说既然如此?为什么中国人还要买房?疯了一样的买?为什么?还不是愚民教育的结果,就好象60年代,鼓吹人们必须购买三大件:手表、缝纫机、自行车才算是成功人士才可嫁人娶妻。70年代鼓吹人们必须购买新四大件:电视,冰箱,洗衣机,装电话才算是出人头地才可娶妻生子一样,记得当年装电话可是要几千块钱一部啊(人均收入不到200的小城),而北京上海更有上万一部的时候,还得排队买号搭人情,和今天的买房又何其相似?

  而今天所有的狗屁学者又开始了这一套愚弄百姓的旧招:白领一族新标准,成功人士新选择X环X路小户型,X环X路商住型。收了你几十万后,还得每个月收你租金(新物业费),银行利息,以及各种巧立名目的加息、政策等等等等。总之不怕你不被整死,就怕你死得不够惨!老百姓咋就怎么乐于上当,而且百上不厌呢?我真是气得浑身都湿了!
第二大当:就业
当有人终于开始感叹:当年当知青的时候,当有人下岗之后感到没有生路,只能静坐抗议却无人理会,只能沦落街头还被人编首歌嘲笑着人生豪迈,重头再来的时候。你可曾想过!他们也曾经和今天的白领一样风光!他们的收入和地位也曾经让周围的人艳羡不已?你可曾想过20年后的今天!你一样会和他们一样沦落街头,众叛亲离?!

  有人说嘿!你不知道有失业保险,养老保险,XX保险么?呵呵,我在北京漂泊N年,交了无数保险大概有好几万吧,但失业的时候跑断腿也没人给我啥保险,反而很多保险都被冻结了说我交得断断续续的,我简直又气得……这还不算,你以为你到了60岁真的就可以拿到养老保险了吗?天上又不会掉钱!今天的老年人拿的退休金是我们在挣!而今天30-40岁的人通常都有好几个兄弟姐妹!意思就是,今天的老年人能在60岁拿到养老保险是因为有5个人供一个老人!而我们这一代老去之后则是一个人供我们两个老人!钱从哪里来?没得来!您要是能活到90岁估计能领到一些养老保险,嘿保重吧您。然而即使是这样,家长们还是疯了一样的把孩子往各种企事业国有单位里送,我身边就经常有这样的例子。我老家一个远房亲戚,找关系拖朋友,花了七万块钱通过公开招聘把儿子送进了交警队,干上合同制的police。一个月拿800块。结果第三年被竞争上岗给刷下来了。一家人哭哭啼啼,我说刷了好,你上那班一辈子挣不回那七万,赶紧先洗洗睡,改明再凑点钱做小生意去吧!没准还能赚点。

  当年我毕业的时候,我不文明用语也是领着我抱着钱,把我往XX部送。我一看负责招工那人那德行,就忍不住的恶心,再一看薪水,不文明用语呀,我这不是白干10年不吃不喝才拿回成本。所以我私下威胁了那家伙一把,吓得那个大腹便便的X科长再也不敢招收我。我才得已:离家出走。

  我就想不明白?中国人咋就这么傻?这么迷信国字呢?醒醒吧,思维正常一点行不?做事之前自己算算合算不合算成不?

  还有那些年纪轻轻的小白领们,找工作最好把薪水要高点,别要医疗保险和啥保险,然后自己把钱存起来最保险,将来用得着。

  第三大当:教育
一张文凭值多少钱?一张文凭值多少钱?一张文凭值多少钱?印刷成本两块钱顶了天了。一个老师工资多少?嘿,两个学生的学费足够一学期了!一个班的书本印刷多少钱?两个学生的足够了!一个班房租多少钱一学期?嘿嘿两个学生足够了。!嘿!中国教育你凭啥收那么多钱!?

  嘿!百姓们!我们为啥要上当?因为从小统治阶级就告诉我们考上秀才才光荣。哦对不起我说错了,是考上大学才光荣。但老百姓从来不去想一想为什么光荣?为什么光荣……大学秀才又怎样还不是废物!

  你知道你的孩子是什么人在教么?在中国一般是无法适应社会的人才会沦为一个教师,举个例子。前段时间我因为一个项目的关系,找了几个大学的硕士生做程序。结果有几个人笨得很,完全不给你考虑,非得你守着才干活,而且给个文件明显有一个错别字,也不给改,等你发现了还跟你较真,是这不是他的错,是你给的就是错的。一点责任感,一都不会考虑究竟是为了做事而做事还是为了做好一件事而做事。我还是很心平气和的给他们讲道理:你们必须学会为别人思考,思考别人想要什么结果再去做事情。否则无法在社会上生存。结果那几个说:我们才不要去社会上,我们考试成绩好得很,学校要我们留校做老师。再说了本来我们就没什么错,你怎么安排我们怎么做,你不安排我们就不做。这是我们的尊严和原则。我说:如果你去守门,老板没安排你下班的时候锁好仓库你就不锁了吗?您心寒吗?以后您的孩子就是在这样的人的指导下学习和成长。您放心么?

  难怪现在读大学的同居,逃课,打架,自杀……但家长们还是愿意花钱把孩子送进学校去,而且是花一辈子的钱。

   第四大当:买车
中国人疯了吗?买车?为什么要买车???当然您有了钱花不光了,您爱怎么买怎么买,买车买房,反正油价怎么涨你也花不完钱,房子要拆迁你也不心疼。但是大多数老百姓呢?

  我以前有个同事住北二环,公司西直门那里。每天坐地铁上班最多半小时。可非得买一二手夏利,每天早上8点开始在路上堵着,然后一点一点的挪到公司。嘿,一个月停车费都不少。可人家就觉得开了车自己身份高级一点。别说开个夏利,就是开个奥迪我也没见谁对谁三磕九拜。除了显得自己比别人傻一点外完全没有别的作用。

  还有一次,我遇见一个月收入才4000的小姑娘,在计划贷款买车。于是我就问她:小姑娘,你又没做生意,自己按时上班,地铁又方便,买车干什么呢?想了半天,实在估计也想不出什么理由来了就说:有时候去超市买东西吧,打车又觉得近了点不划算,走路又远了点。所以自己开车去了!听得我差点没恶心死。你开车去超市买个方便面不觉得恶心么?装备了大哥大去拣垃圾,也是拣垃圾的!别以为买了车能证明什么。

  比如我现在自己做生意,很忙,一天大概要跑4-5个地方,见很多客户。但我就不买车,为什么?我打车随招即来,打完就走,不用担心停车没地方,不用担心挂了碰了,不用担心被贼偷了绑了,无论挂风下雨都有司机。万一碰着个堵车还可以下车坐地铁。一年也就一万多块RMB!要买一车!一年停车费都得一万多!这不是傻么?

  说别买车别买车,可就有无数的人疯了一样的去贷款买?一定要嫌自己将来死得不够惨似的!买吧,买完了加息了不是?油价涨疯了不是?停车又贵了不是?后悔了不是?新车一上路就掉价了卖也卖不掉了不是??

  告诉你,油价还得涨。一定要涨到和美圆一样的油价。嘿嘿!您拿老美1/10的收入,养和人家一个价的汽油。我看您还得瑟不。

  最后说一句,每个人都不傻,都是从小被愚民教育给弄啥了。傻点不要紧,但性命悠关的事儿您还是紧着点,多盘算盘算经济利益之间的关系!别到头来,房产一跌,油价一涨,交了半辈子钱拿了毕业证还是啥啥不会干,交了几十年苛捐杂税还啥啥福利没有。您亏的可不仅仅是差价几十万。

  有人还说什么?哎呀没办法,难道不住了,不买车啦,公车好挤呀。我说全是愚民教育出来的虚荣心在做怪。您看看我,租一个房子住才一千多块一个月,也就相当于有些人的物业费。如果要结婚我还租得起3-4千的,家具装修一应具全。而且还哪方便我住哪儿。不想搬就长期租。也和交物业费一个样。还白白省出还银行贷款、利息、首付一大堆。有事就打车,没事就地铁,一年一万顶天了,还省了车库费,停车费,罚款等一堆,油价涨到10块也乐呵,也不耽误事。俺大学没念完就跑了,一边自学一边自己钻研市场出策划跑业务,不也同样可以进外资企业,上市企业做经理么?还省出好几万学费来。

  当然有的人会说:你连个房子都不买,指定结不了婚。我心想:我是没有,您以为您有啊?有人说租房子不划算,租完了还是别人的,嘿嘿,你以为买房子还了几十年贷款,还清了就是你的了啊……

posted @ 2010-03-21 17:43 北国狼人的BloG 阅读(255) | 评论 (0)编辑 收藏

1,老鼠嘲笑猫的时候,身旁必有一个洞。

2,站在山顶和站在山脚下的两人,虽然地位不同,但在对方眼里,同样的渺      小。

3,路的尽头,仍然是路,只要你愿意走。

4,使我们不快乐的,都是一些芝麻小事,我们可以躲闪一头大象,却躲不开一只苍蝇。

5,最好的与最坏的创造了历史,平庸之辈则繁衍了种族。

6,在这世上惟一件事比别人议论更糟,那就是无人议论你。

7,成功便是站起比倒下多一次。

8,失败并不意味你浪费了时间和生命。失败表明你有理由重新开始。

9,人生中有时不去冒险比冒险更危险。

10,所有的人都站在一边并不一定是好事,譬如他们都站在船的一边。

11,许多人爬到了梯子的顶端,却发现梯子架错了墙。

12,偶然的成功比失败更可怕。

13,才华其实就是把与人相同的聪明用到与众不同的地方。

14,状态是干出来的,而不是等出来的。

15,道歉是为将来再次冒犯打下伏笔。

 

 

 

 

31,世上只有想不通的人,没有走不通的路。

32,幸运之神的降临,往往只是因为你多看了一眼,多想了一下,多走了一步。

33,失败发生在彻底的放弃之后。

34,所谓敌人,不过是那些迫使我们自己变得强大的人。

35,胆怯的人在危险前被吓住了;懦弱的人在危险中被吓住了;勇敢的人在危险过后被吓住了。

36,使人疲惫的不是远方的高山,而是鞋里的一粒沙子。

37,家庭的幸福需夫妻共同努力,而破坏它,一人就够了。

38,最了解你的人有时不是你的朋友,而是你的敌人。

39,你若不想做,会找一个或无数个借口;你若想做,会想一个或无数个办法。

40,看一个人的心术,看他的眼神;看一个人的身价,看他的对手;看一个人的底牌,看他的朋友。

41,魅力女人,就是有充分的意志力去抵挡男人的进攻,也有足够多的魅力阻挡男人的撤退。

42,山盟海誓是一种经常让高山和海洋领受尴尬的重量级承诺。

43,好女人是一所学校,好男人毕业了可留校任教。

44,你不理财,财不理你。

45,不要同一个傻瓜争辩,否则别人会搞不清到底谁是傻瓜。46,加班加点,废寝忘食有时很可能是不具备效率和工作能力的表现。

47,做父母是个专业性很强的职业,可大部分的父母未经任何培训就上岗了。

48,凡向鳄鱼池内投掷物品者,必须下池自己捡回。――肯尼亚天然动物园告示。

49,当你想丢点什么的时候请想想,千万别丢脸。――成都垃圾箱,果皮箱上语。

50,凡是上了年纪的人,大多是反对的太多,商议的太久,行动的太迟,后悔的太早。

51,做生意的过程就是一个不断怂恿别人放松警惕,而自己保持高度警惕的过程。

52,打工者做工,小老板做事,中老板做市,大老板做势――你是哪一种?

53,成功是一种观念,致富是一种义务,快乐是一种权力。

54,聪明人能洞察事物未来的发展趋势。他们在发洪水之前养鸭,而不是养鸡。

55,两种人无药可救:一是不服从命令的人,二是惟命是从的人。

56,打算开创新事业时,十人中有一两人赞成时就可开始,以免太迟。

57,买保险――用不上时痛苦,用上时更痛苦。

58,给猴一棵树,给虎一座山。――用人之道

59,世上有三种人:一是良心被狗吃了的人,二是良心没被狗吃的人,三是良心连狗都不吃的人。

60,你可以先知先觉地领导产业,后知后觉地苦苦追赶,或不知不觉地被淘汰。

 

16,所谓百依百顺,就是为了某种不可告人的目的在未完成前,所表现的不同寻常的耐心。

17,所谓儿童不宜,其实就是大人们令人感动地把犯错误的危险留给了自己。

18,你想以40km/h的速度开车到80岁,还是以80km/h的速度开车到40岁?

19,在敌人面前,谁先镇定下来,谁就离胜利不远了。

20,所有的人都是平凡的,有些人因知道这一点而真正成了平凡的人。

21,乞丐就是一种向你的良心征税的人。

22,所谓大难不死,就是有了灾祸之后,得到的不是同情,而是莫名其妙的祝贺。

23,处在社交圈中是一种烦恼,而超脱出来简直是一场悲剧。

24,厌倦,就是一个人吃完盘子里的食物后对盘子的感情。

25,参加追悼会的程序常常是,先受一次深刻的人生教育,然后大家一起抽烟喝酒打牌。

26,知识是一种使求知者吃得越多越觉得饿的粮食。

27,爱情是会沉底的,在平淡的日子里,最重要的是经常轻轻晃一晃盛装爱情的“水杯”。

28,战争:用舌头解不开就用牙齿咬吧!


29,憎恨别人就像为了逮住一只耗子而不惜烧毁你自己的房子。但耗子不一定逮到了。

30,每个人的一生都有许多梦想,但如果其中一个不断搅扰着你,剩下的就仅仅是行动了。

posted @ 2010-03-16 13:25 北国狼人的BloG 阅读(148) | 评论 (0)编辑 收藏
这个需求应该是很常见的吧,需要从 0 到 n 之间选 k 个不重复的组成一个序列。

我最早遇到这个问题是在给校ACM比赛出题时,需要随机产生一些测试数据,当时我想的是用一个辅助数组记录之前已经产生的随机,如果当前产生的随机已经出现过就再重新随机

显然这样的实现效率是很低的,设想从10000个随机产生10000个的序列,当前面9999个已经确定了时,最后一个随机到的概率是 0.0001,也就是说大概需要调用随机函数10000才会产生。类似的,第9999个随机到的概率是0.0002……
.....

我后来采用了一个改进的办法是,如果当前产生的随机a已经在之前产生过了,就顺序去找比a小的,直到找到一个之前没有产生过的,如果找不到就找比a大的

可以看到这样的改进节省了大量的时间,但是这样产生的已经不是随机序列了!

试想从1,2,3,4中随机挑选2个,假如第一次选出来的是3,那么第二再选的话,选中2的概率就变成了1/2,因为当随机出来的为2或3时,我们都选择2。

在我遇到的应用中,因为对随机序列的“随机性”要求不是很高,所以凑合着用了上述办法。

直到今天在《Programming pearls》里看到这个很完美的办法:
for(i = 0; i < n; i++)
{
x[i] = i;
}
for(i = 0; i < k; i++)
{
t = rand(i,n-1);
swap(x[i], x[t]);
out(x[i]);
}

其中,rand(a,b)产生一个 a 到 b 之间的随机,swap(a,b)交换a和b的值,out(a)把a输出作为结果。
我们来看看这个算法的完美之处吧!

首先,x数组里把0到n-1的所有都存储了,而最后输出的都是x数组里的值,所以满足输出的是k个0到n-1的

然后,我们对于第 i 随机,产生一个 i 到 n-1 的下标 t ,并把x[t] 和x[i]交换,将其输出,这样每产生的都是之前没有出现过的,因为之前出现过的都在x[0] 到 x[i-1]里呢!这样就保证了输出数据的不重复性。

最后,我们考察输出数据的“随机性”,显然,因为交换操作,使得所有没有出现过的都在x[i] 到 x[n-1]中存着呢,所以被选中的概率相等。


写完上面这些文字之后,我在想,这样经典的算法,应该是早就已经出现了,但是我竟然还不知道,这样看来,我百度实习面试遭鄙视也就是很自然的了,这也算是我之前的一个毛病,喜欢遇到问题才去想怎么解决,没问题就很少看相关的书或资料,而对于自己能解决的问题(比如上面说的这个凑合着能用的问题),我又懒得去找更好的甚或是标准的解决方法,所以才造成了我现在的知识局限,以后要多看书,多想问题,尽量多的积累知识吧……
posted @ 2010-02-21 14:21 北国狼人的BloG 阅读(4125) | 评论 (1)编辑 收藏
flash 用起来xml 来简直就跟object 点属性一样简单。

flash object 可以变成任何东西,xml object  json object .可以不去强转取值,取属性,干任何你想干的事

if(xmlobj.@name)
{
          var aaa:XMLList = xmlobj.functiondef(@perm == "superadmin");
          treecontrol.dataprovider = aaa;
}


json object 用作socket 传输的对象,java接过去再类型化。flash这边永远都是弱类型。随心所欲

messagemanager.getInstance().addMessage({
         name: "some name",
         loginPolicy: 1;
         ...
});

posted @ 2010-02-16 22:23 北国狼人的BloG 阅读(326) | 评论 (0)编辑 收藏

On occasion you may want to create classes dynamically by name. To do this in Flex 3 you can use getDefinitionByName (it's previous incarnation was getClassByName). Here's a quick example:

Actionscript:
  1. //cc() is called upon creationComplete
  2. private function cc():void
  3. {
  4.         var obj:Object = createInstance("flash.display.Sprite");
  5. }
  6.  
  7. public function createInstance(className:String):Object
  8. {
  9.         var myClass:Class = getDefinitionByName(className) as Class;
  10.         var instance:Object = new myClass();
  11.         return instance;
  12. }

The docs for getDefinitionByName say:

"Returns a reference to the class object of the class specified by the name parameter."

...so you may be wondering why in the above code we needed to specify the return value as a Class? This is because getDefinitionByName can also return a Function (e.g. 'flash.utils.getTimer' - a package level function that isn't in any class). As the return type can be either a Function or a Class the Flex team specified the return type to be Object and you are expected to perform a cast as necessary.

The above code closely mimics the example given in the docs, but in one way it is a bad example because everything will work fine for "flash.display.Sprite", but try to do the same thing with a custom class and you will probably end up with the following error:

ReferenceError: Error #1065: Variable [name of your class] is not defined.

The reason for the error is that you must have a reference to your class in your code - e.g. you need to create a variable and specify it's type like so:

Actionscript:
  1. private var forCompiler:SomeClass;

Without doing this your class will not be compiled in to the .swf at compile time - and there is reason behind this madness. The compiler only includes classes which are actually used (and not just imported). It does so in order to optimise the size of the .swf. So the need to declare a variable should not really be considered an oversight or bug, although it does feel hackish to declare a variable that you don't directly use.

Here is the code your would need to create a custom class called Person from a string (where Person resides in the top level package along with your default application).

Actionscript:
  1. //cc() is called upon creationComplete
  2. private var forCompiler:Person; //REQUIRED! (but otherwise not used)
  3.  
  4. private function cc():void
  5. {
  6.         var obj:Object = createInstance("Person");
  7. }
  8.  
  9. public function createInstance(className:String):Object
  10. {
  11.         var myClass:Class = getDefinitionByName(className) as Class;
  12.         var instance:Object = new myClass();
  13.         return instance;
  14. }

 

You can declare properties for all possible classes that you intend to create but if you are not happy with doing that inside your main app Alex Harui has another suggestion (something I've not personally tried yet):

"The code for the class has to be in a SWF. It can be in the main SWF or
loaded via a module later. There is a compiler option (-includes) that
allows you to stuff other classes into a SWF without explicitly naming
them in your source code."

Passing in Parameters

Another thing you may find yourself wanting to do is to pass parameters to the constructor of your class (indeed, this is what got me on to the subject today). As far as I'm aware this isn't possible to do this in AS3 (and isn't part of the ECMA spec so it is unlikely to change - please leave a comment or email if you know otherwise ), so you may want to set up another method which can accept and set multiple parameters . If you pass in an array you may stumble across another problem - the original array you passed in becomes the first item of a new array ... okay, that probably sounds confusing so see here for a similar example and solution. In short, the solution is to use Function.apply, and you can see how I used it below:

Actionscript:
  1. private var forCompiler:Person;
  2.  
  3. private function cc():void
  4. {
  5.         var obj:Object = createInstance("Person", ["bob", 30]);
  6. }
  7.  
  8. public function createInstance(className:String, args:Array):Object
  9. {
  10.         var myClass:Class = getDefinitionByName(className) as Class;
  11.         var instance:Object = new myClass();
  12.         instance.initArgs.apply(null, args);
  13.         return instance;
  14. }
  15.  
  16. /*********************************************************************
  17. //In person.initArgs()....
  18. //Note: the constructor also accepts name &amp; age, assigning them default values
  19. //if not specified.
  20. public function initArgs(name:String, age:uint):void
  21. {
  22.         this.name = name;
  23.         this.age = age;
  24. }
  25. *********************************************************************/

Now, I'm not sure if this is the best approach, but it works, and with a deadline approaching that's good enough for now :]



u dont have to create a variable, its enough just to reference to the class somewhere in the code;

package example
{
import example.items.*;
import flash.utils.getDefinitionByName;

// force import
example.items.Class1;
example.items.Class2;

class Test
{
public function Test()
{
var test:Class = getDefinitionByName(”example.items.Class1?) as Class;

var testInstance = new test();
}
}
}

posted @ 2010-02-14 15:40 北国狼人的BloG 阅读(228) | 评论 (0)编辑 收藏
FLEX 系统提供的事件与DOM的事件基本上完全一致 但是和传统的WEB开发不同的是  可以为自定义的组件添加自定义的事件    比如我们做了一个组件是一个登录框   当点击登录按钮的时候触发我们自定义的事件 比如叫"login"事件  虽然这个login事件 归根结底还是某个按钮的click事件 但自定义的事件比传统的事件有什么好处呢 :一是事件的名字是自定义的 可以形象的表示这个事件本身 而不像以前还要关心是哪个按钮按了一下等等  这样为组件与组件的通讯提供便利   下面的例子中自定义了一个组件叫testComponent , 这个自定义的组件中有一个按钮和一个输入框, 当按下这个按钮的时候   新建一个新的事件叫shareData
并且shareData事件被声明为一个textEvent ,  textEvent可以通过text属性来传递数据(textInput控件的值) 。

EventTest.mxml中引用了这个自定义组件testComponent 并捕获testComponent中的自定义事件shareData, 输出testComponent 中textInput控件的字符串
 
testComponent.mxml :
 
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" height="300">
<!-- 声明本组件将抛出的事件 -->
<mx:Metadata>
 [Event(name="shareData",type="flash.events.TextEvent")]
</mx:Metadata>
<mx:Script>
 <![CDATA[
  private function fnOnClick_testComp():void {
   //event 构造函数 至少传递一个事件名
   var event:TextEvent = new TextEvent("shareData");
   event.text = myTxtInput.text;
   //使用disptchEvent 来抛出创建的事件
   dispatchEvent(event);
  }
 ]]>
</mx:Script>
 
<mx:Label text="This is the Test component" />
 <mx:TextInput id="myTxtInput"/>
 <!-- 当点击按钮时进行自定义事件 -->
 <mx:Button label="clickMe" click="fnOnClick_testComp()" />
</mx:VBox>
 
eventTest.mxml :
 
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
 xmlns:view="view.*">
 <mx:Script>
  <![CDATA[
   import mx.controls.Alert;
   private function fnOnShareData(event:TextEvent):void {
    Alert.show("event has been use. event.text => " + event.text );
   }
  ]]>
 </mx:Script>
 <!-- 调用我们自定义的组件  并处理它的shareData事件  就像click事件一样使用 -->
 <view:testComponent shareData="fnOnShareData(event)"/>
</mx:Application>
 

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
     layout="absolute" width="200" height="150"
     title="请在此输入您的名字!" fontWeight="normal" fontSize="12" showCloseButton="true" close="PopUpManager.removePopUp(this);">
<mx:TextInput x="10" y="10" id="myTextInput"/>
<mx:Button x="36" y="74" label="确定" id="myButton"
         click="closeTitleWindow(event);"/>
    <mx:Script>
        <![CDATA[      
            import mx.managers.PopUpManager;
            import mx.controls.Text;
        
         // 定义一个变量来获取对主应用程序的引用
         public var myObj:Object;
        
            // 该方法用来关闭弹出的TitleWindow 容器.
            private function closeTitleWindow(event:MouseEvent):void {
                myObj.myLabel.text = "您输入的是:" + myTextInput.text;
                myObj.myLabel.setStyle("color",String(cp.selectedColor))
                PopUpManager.removePopUp(this);
            }
           
            private function close(evt:MouseEvent):void{
           
            PopUpManager.removePopUp(this);
            }
        ]]>
    </mx:Script>
    <mx:Button x="96" y="74" label="close" click="close(event);"/>
    <mx:ColorPicker x="10" y="44" id="cp" selectedColor="#F30A0A"/>
</mx:TitleWindow>

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" fontSize="12" xmlns:ns1="*" layout="absolute">
    <mx:Script>
        <![CDATA[
            import flash.events.*;
            import mx.managers.PopUpManager;
            import mx.containers.TitleWindow;   
                            
            // 响应按钮单击事件,弹出myTitleWindow对话框
            private function openWindow(event:MouseEvent):void {
                // 使用PopUpManager.createPopUp方法弹出myTitleWindow
                var aTitleWindow:title=title(PopUpManager.createPopUp(this,title, true));
                 PopUpManager.centerPopUp(aTitleWindow); //居中
                // 注意这里为自定义组件的myObj属性赋值以引用当前MXML文档
                aTitleWindow.myObj = this;
            }
        ]]>
    </mx:Script>
    <mx:Button label="打开对话框" click="openWindow(event);" x="404" y="24"/>
    <mx:Label id="myLabel" text="wait..." width="200" x="375" y="110" fontWeight="bold" fontSize="18" color="#06C9F3"/>
</mx:Application>

posted @ 2010-02-10 16:57 北国狼人的BloG 阅读(518) | 评论 (0)编辑 收藏
看到的这篇文章,虽然我不知道HP大中华区总裁孙振耀到底是怎样的人,不过这篇文章写的很诚恳,没有什么说教,是我见过的最好的感言之一,特意转载过来。这篇文章很长,不过值得花费一点时间和耐心看完。

一、关于工作与生活

我有个有趣的观察,外企公司多的是25-35岁的白领,40岁以上的员工很少,二三十岁的外企员工是意气风发的,但外企公司40岁附近的经理人是很尴尬的。我见过的40岁附近的外企经理人大多在一直跳槽,最后大多跳到民企,比方说,唐骏。外企员工的成功很大程度上是公司的成功,并非个人的成功,西门子的确比国美大,但并不代表西门子中国经理比国美的老板强,甚至可以说差得很远。而进外企的人往往并不能很早理解这一点,把自己的成功90%归功于自己的能力,实际上,外企公司随便换个中国区总经理并不会给业绩带来什么了不起的影响。好了问题来了,当这些经理人40多岁了,他们的薪资要求变得很高,而他们的才能其实又不是那么出众,作为外企公司的老板,你会怎么选择?有的是只要不高薪水的,要出位的精明强干精力冲沛的年轻人,有的是,为什么还要用你?

从上面这个例子,其实可以看到我们的工作轨迹,二三十岁的时候,生活的压力还比较小,身体还比较好,上面的父母身体还好,下面又没有孩子,不用还房贷,也没有孩子要上大学,当个外企小白领还是很光鲜的,挣得不多也够花了。但是人终归要结婚生子,终归会老,到了40岁,父母老了,要看病要吃药,要有人看护,自己要还房贷,要过基本体面的生活,要养小孩……那个时候需要挣多少钱才够花才重要。所以,看待工作,眼光要放远一点,一时的谁高谁低并不能说明什么。

从这个角度上来说,我不太赞成过于关注第一份工作的薪水,更没有必要攀比第一份工作的薪水,这在刚刚出校园的学生中间是很常见的。正常人大概要工作 35年,这好比是一场马拉松比赛,和真正的马拉松比赛不同的是,这次比赛没有职业选手,每个人都只有一次机会。要知到,有很多人甚至坚持不到终点,大多数人最后是走到终点的,只有少数人是跑过终点的,因此在刚开始的时候,去抢领先的位置并没有太大的意义。刚进社会的时候如果进500强公司,大概能拿到3k -6k/月的工资,有些特别技术的人才可能可以到8k/月,可问题是,5年以后拿多少?估计5k-10k了不起了。起点虽然高,但增幅有限,而且,后面的年轻人追赶的压力越来越大。

我前两天问我的一个销售,你会的这些东西一个新人2年就都学会了,但新人所要求的薪水却只是你的一半,到时候,你怎么办?
职业生涯就像一场体育比赛,有初赛、复赛、决赛。初赛的时候大家都刚刚进社会,大多数都是实力一般的人,这时候努力一点认真一点很快就能让人脱颖而出,于是有的人二十多岁做了经理,有的人迟些也终于赢得了初赛,三十多岁成了经理。然后是复赛,能参加复赛的都是赢得初赛的,每个人都有些能耐,在聪明才智上都不成问题,这个时候再想要胜出就不那么容易了,单靠一点点努力和认真还不够,要有很强的坚忍精神,要懂得靠团队的力量,要懂得收服人心,要有长远的眼光……

看上去赢得复赛并不容易,但,还不是那么难。因为这个世界的规律就是给人一点成功的同时让人骄傲自满,刚刚赢得初赛的人往往不知道自己赢得的仅仅是初赛,有了一点小小的成绩大多数人都会骄傲自满起来,认为自己已经懂得了全部,不需要再努力再学习了,他们会认为之所以不能再进一步已经不是自己的原因了。虽然他们仍然不好对付,但是他们没有耐性,没有容人的度量,更没有清晰长远的目光。就像一只愤怒的斗牛,虽然猛烈,最终是会败的,而赢得复赛的人则象斗牛士一样,不急不躁,跟随着自己的节拍,慢慢耗尽对手的耐心和体力。赢得了复赛以后,大约已经是一位很了不起的职业经理人了,当上了中小公司的总经理,大公司的副总经理,主管着每年几千万乃至几亿的生意。

最终的决赛来了,说实话我自己都还没有赢得决赛,因此对于决赛的决胜因素也只能凭自己的猜测而已,这个时候的输赢或许就像武侠小说里写得那样,大家都是高手,只能等待对方犯错了,要想轻易击败对手是不可能的,除了使上浑身解数,还需要一点运气和时间。世界的规律依然发挥着作用,赢得复赛的人已经不只是骄傲自满了,他们往往刚愎自用,听不进去别人的话,有些人的脾气变得暴躁,心情变得浮躁,身体变得糟糕,他们最大的敌人就是他们自己,在决赛中要做的只是不被自己击败,等着别人被自己击败。这和体育比赛是一样的,最后高手之间的比赛,就看谁失误少谁就赢得了决赛。

二、 根源

你工作快乐么?你的工作好么?

有没有觉得干了一段时间以后工作很不开心?有没有觉得自己入错了行?有没有觉得自己没有得到应有的待遇?有没有觉得工作像一团乱麻每天上班都是一种痛苦?有没有很想换个工作?有没有觉得其实现在的公司并没有当初想象得那么好?有没有觉得这份工作是当初因为生存压力而找的,实在不适合自己?你从工作中得到你想要得到的了么?你每天开心么?

天涯上愤怒的人很多,你有没有想过,你为什么不快乐?你为什么愤怒?

其实,你不快乐的根源,是因为你不知道要什么!你不知道要什么,所以你不知道去追求什么,你不知道追求什么,所以你什么也得不到。

我总觉得,职业生涯首先要关注的是自己,自己想要什么?大多数人大概没想过这个问题,唯一的想法只是——我想要一份工作,我想要一份不错的薪水,我知道所有人对于薪水的渴望,可是,你想每隔几年重来一次找工作的过程么?你想每年都在这种对于工作和薪水的焦急不安中度过么?不想的话,就好好想清楚。饮鸩止渴,不能因为口渴就拼命喝毒药。越是焦急,越是觉得自己需要一份工作,越饥不择食,越想不清楚,越容易失败,你的经历越来越差,下一份工作的人看着你的简历就皱眉头。于是你越喝越渴,越渴越喝,陷入恶性循环。最终只能哀叹世事不公或者生不逢时,只能到天涯上来发泄一把,在失败者的共鸣当中寻求一点心理平衡罢了。大多数人都有生存压力,我也是,有生存压力就会有很多焦虑,积极的人会从焦虑中得到动力,而消极的人则会因为焦虑而迷失方向。所有人都必须在压力下做出选择,这就是世道,你喜欢也罢不喜欢也罢。

一般我们处理的事情分为重要的事情和紧急的事情,如果不做重要的事情就会常常去做紧急的事情。比如锻炼身体保持健康是重要的事情,而看病则是紧急的事情。如果不锻炼身体保持健康,就会常常为了病痛烦恼。又比如防火是重要的事情,而救火是紧急的事情,如果不注意防火,就要常常救火。找工作也是如此,想好自己究竟要什么是重要的事情,找工作是紧急的事情,如果不想好,就会常常要找工作。往往紧急的事情给人的压力比较大,迫使人们去赶紧做,相对来说重要的事情反而没有那么大的压力,大多数人做事情都是以压力为导向的,压力之下,总觉得非要先做紧急的事情,结果就是永远到处救火,永远没有停歇的时候。(很多人的工作也像是救火队一样忙碌痛苦,也是因为工作中没有做好重要的事情。)那些说自己活在水深火热为了生存顾不上那么多的朋友,今天找工作困难是当初你们没有做重要的事情,是结果不是原因。如果今天你们还是因为急于要找一份工作而不去思考,那么或许将来要继续承受痛苦找工作的结果。

我始终觉得我要说的话题,沉重了点,需要很多思考,远比唐笑打武警的话题来的枯燥乏味,但是,天下没有轻松的成功,成功,要付代价。请先忘记一切的生存压力,想想这辈子你最想要的是什么?所以,最要紧的事情,先想好自己想要什么。

三、什么是好工作

当初微软有个唐骏,很多大学里的年轻人觉得这才是他们向往的职业生涯,我在清华bbs里发的帖子被这些学子们所不屑,那个时候学生们只想出国或者去外企,不过如今看来,我还是对的,唐骏去了盛大,陈天桥创立的盛大,一家民营公司。一个高学历的海归在500强的公司里拿高薪水,这大约是很多年轻人的梦想,问题是,每年毕业的大学生都在做这个梦,好的职位却只有500个。

人都是要面子的,也是喜欢攀比的,即使在工作上也喜欢攀比,不管那是不是自己想要的。大家认为外企公司很好,可是好在哪里呢?好吧,他们在比较好的写字楼,这是你想要的么?他们出差住比较好的酒店,这是你想要的么?别人会羡慕一份外企公司的工作,这是你想要的么?那一切都是给别人看的,你干吗要活得那么辛苦给别人看?另一方面,他们薪水福利一般,并没有特别了不起,他们的晋升机会比较少,很难做到很高阶的主管,他们虽然厌恶常常加班,却不敢不加班,因为“你不干有得是人干”,大部分情况下会找个台湾人香港人新加坡人来管你,而这些人又往往有些莫名其妙的优越感。你想清楚了么?500强一定好么?找工作究竟是考虑你想要什么,还是考虑别人想看什么?

我的大学同学们大多数都到美国了,甚至毕业这么多年了,还有人最近到国外去了。出国真的有那么好么?我的大学同学们,大多数还是在博士、博士后、访问学者地挣扎着,至今只有一个正经在一个美国大学里拿到个正式的教职。国内的教授很难当么?我有几个表亲也去了国外了,他们的父母独自在国内,没有人照顾,有好几次人在家里昏倒都没人知道,出国,真的这么光彩么?就像有人说的“很多事情就像看A片,看的人觉得很爽,做的人未必。”

人总想找到那个最好的,可是,什么是最好的?你觉得是最好的那个,是因为你的确了解,还是因为别人说他是最好的?即使他对于别人是最好的,对于你也一定是最好的么?

对于自己想要什么,自己要最清楚,别人的意见并不是那么重要。很多人总是常常被别人的意见所影响,亲戚的意见,朋友的意见,同事的意见……问题是,你究竟是要过谁的一生?人的一生不是父母一生的续集,也不是儿女一生的前传,更不是朋友一生的外篇,只有你自己对自己的一生负责,别人无法也负不起这个责任。自己做的决定,至少到最后,自己没什么可后悔。对于大多数正常智力的人来说,所做的决定没有大的对错,无论怎么样的选择,都是可以尝试的。比如你没有考自己上的那个学校,没有入现在这个行业,这辈子就过不下去了?就会很失败?不见得。

我想,好工作,应该是适合你的工作,具体点说,应该是能给你带来你想要的东西的工作,你或许应该以此来衡量你的工作究竟好不好,而不是拿公司的大小,规模,外企还是国企,是不是有名,是不是上市公司来衡量。小公司,未必不是好公司,赚钱多的工作,也未必是好工作。你还是要先弄清楚你想要什么,如果你不清楚你想要什么,你就永远也不会找到好工作,因为你永远只看到你得不到的东西,你得到的,都是你不想要的。
可能,最好的,已经在你的身边,只是,你还没有学会珍惜。人们总是盯着得不到的东西,而忽视了那些已经得到的东西。

四、普通人

我发现中国人的励志和国外的励志存在非常大的不同,中国的励志比较鼓励人立下大志愿,卧薪尝胆,有朝一日成富成贵。而国外的励志比较鼓励人勇敢面对现实生活,面对普通人的困境,虽然结果也是成富成贵,但起点不一样,相对来说,我觉得后者在操作上更现实,而前者则需要用999个失败者来堆砌一个成功者的故事。

我们都是普通人,普通人的意思就是,概率这件事是很准的。因此,我们不会买彩票中500万,我们不会成为比尔盖茨或者李嘉诚,我们不会坐飞机掉下来,我们当中很少的人会创业成功,我们之中有30%的人会离婚,我们之中大部分人会活过65岁……

所以请你在想自己要什么的时候,要得“现实”一点,你说我想要做李嘉诚,抱歉,我帮不上你。成为比尔盖茨或者李嘉诚这种人,是靠命的,看我写的这篇文章绝对不会让你成为他们,即使你成为了他们,也绝对不是我这篇文章的功劳。“王侯将相宁有种乎”但真正当皇帝的只有一个人,王侯将相,人也不多。目标定得高些对于喜欢挑战的人来说有好处,但对于大多数普通人来说,反而比较容易灰心沮丧,很容易就放弃了。

回过头来说,李嘉诚比你有钱大致50万倍,他比你更快乐么?或许。有没有比你快乐50万倍,一定没有。他比你最多也就快乐一两倍,甚至有可能还不如你快乐。寻找自己想要的东西不是和别人比赛,比谁要得更多更高,比谁的目标更远大。虽然成为李嘉诚这个目标很宏大,但你并不见得会从这个目标以及追求目标的过程当中获得快乐,而且基本上你也做不到。你必须听听你内心的声音,寻找真正能够使你获得快乐的东西,那才是你想要的东西。
你想要的东西,或者我们把它称之为目标,目标其实并没有高低之分,你不需要因为自己的目标没有别人远大而不好意思,达到自己的目标其实就是成功,成功有大有小,快乐却是一样的。我们追逐成功,其实追逐的是成功带来的快乐,而非成功本身。职业生涯的道路上,我们常常会被攀比的心态蒙住眼睛,忘记了追求的究竟是什么,忘记了是什么能使我们更快乐。

社会上一夜暴富的新闻很多,这些消息,总会在我们的心里面掀起很多涟漪,涟漪多了就变成惊涛骇浪,心里的惊涛骇浪除了打翻承载你目标的小船,并不会使得你也一夜暴富。“只见贼吃肉,不见贼挨揍。”我们这些普通人既没有当贼的勇气,又缺乏当贼的狠辣绝决,虽然羡慕吃肉,却更害怕挨揍,偶尔看到几个没挨揍的贼就按奈不住,或者心思活动,或者大感不公,真要叫去做贼,却也不敢。

我还是过普通人的日子,要普通人的快乐,至少,晚上睡得着觉。

五、跳槽与积累

首先要说明,工作是一件需要理智的事情,所以不要在工作上耍个性,天涯上或许会有人觉得你很有个性而叫好,煤气公司电话公司不会因为觉得你很有个性而免了你的帐单。当你很帅地炒掉了你的老板,当你很酷地挖苦了一番招聘的HR,账单还是要照付,只是你赚钱的时间更少了,除了你自己,没人受损失。

我并不反对跳槽,但跳槽决不是解决问题的办法,而且频繁跳槽的后果是让人觉得没有忠诚度可言,而且不能安心工作。现在很多人从网上找工作,很多找工作的网站常常给人出些馊主意,要知道他们是盈利性企业,当然要从自身盈利的角度来考虑,大家越是频繁跳槽频繁找工作他们越是生意兴隆,所以鼓动人们跳槽是他们的工作。所以他们会常常告诉你,你拿的薪水少了,你享受的福利待遇差了,又是“薪情快报”又是“赞叹自由奔放的灵魂”。至于是否会因此让你不能安心,你跳了槽是否解决问题,是否更加开心,那个,他们管不着。

要跳槽肯定是有问题,一般来说问题发生了,躲是躲不开的,很多人跳槽是因为这样或者那样的不开心,如果这种不开心,在现在这个公司不能解决,那么在下一个公司多半也解决不掉。你必须相信,90%的情况下,你所在的公司并没有那么烂,你认为不错的公司也没有那么好。就像围城里说的,“城里的人拼命想冲出来,而城外的人拼命想冲进去。”每个公司都有每个公司的问题,没有问题的公司是不存在的。换个环境你都不知道会碰到什么问题,与其如此,不如就在当下把问题解决掉。很多问题当你真的想要去解决的时候,或许并没有那么难。有的时候你觉得问题无法解决,事实上,那只是“你觉得”。

人生的曲线应该是曲折向上的,偶尔会遇到低谷但大趋势总归是曲折向上的,而不是象脉冲波一样每每回到起点,我见过不少面试者,30多岁了,四五份工作经历,每次多则3年,少则1年,30多岁的时候回到起点从一个初级职位开始干起,拿基本初级的薪水,和20多岁的年轻人一起竞争,不觉得有点辛苦么?这种日子好过么?

我非常不赞成在一个行业超过3年以后换行业,基本上,35岁以前我们的生存资本靠打拼,35岁以生存的资本靠的就是积累,这种积累包括人际关系,经验,人脉,口碑……如果常常更换行业,代表几年的积累付之东流,一切从头开始,如果换了两次行业,35岁的时候大概只有5年以下的积累,而一个没有换过行业的人至少有了10年的积累,谁会占优势?工作到2-3年的时候,很多人觉得工作不顺利,好像到了一个瓶颈,心情烦闷,就想辞职,乃至换一个行业,觉得这样所有一切烦恼都可以抛开,会好很多。其实这样做只是让你从头开始,到了时候还是会发生和原来行业一样的困难,熬过去就向上跨了一大步,要知道每个人都会经历这个过程,每个人的职业生涯中都会碰到几个瓶颈,你熬过去了而别人没有熬过去你就领先了。跑长跑的人会知道,开始的时候很轻松,但是很快会有第一次的难受,但过了这一段又能跑很长一段,接下来会碰到第二次的难受,坚持过了以后又能跑一段,如此往复,难受一次比一次厉害,直到坚持不下去了。大多数人第一次就坚持不了了,一些人能坚持到第二次,第三次虽然大家都坚持不住了,可是跑到这里的人也没几个了,这点资本足够你安稳活这一辈子了。

一份工作到两三年的时候,大部分人都会变成熟手,这个时候往往会陷入不断的重复,有很多人会觉得厌倦,有些人会觉得自己已经搞懂了一切,从而懒得去寻求进步了。很多时候的跳槽是因为觉得失去兴趣了,觉得自己已经完成比赛了。其实这个时候比赛才刚刚开始,工作两三年的人,无论是客户关系,人脉,手下,和领导的关系,在业内的名气……还都是远远不够的,但稍有成绩的人总是会自我感觉良好的,每个人都觉得自己跟客户关系铁得要命,觉得自己在业界的口碑好得很。其实可以肯定地说,一定不是,这个时候,还是要拿出前两年的干劲来,稳扎稳打,积累才刚刚开始。
你足够了解你的客户吗?你知道他最大的烦恼是什么吗?你足够了解你的老板么?你知道他最大的烦恼是什么吗?你足够了解你的手下么?你知道他最大的烦恼是什么吗?如果你不知道,你凭什么觉得自己已经积累够了?如果你都不了解,你怎么能让他们帮你的忙,做你想让他们做的事情?如果他们不做你想让他们做的事情,你又何来的成功?

六、等待

这是个浮躁的人们最不喜欢的话题,本来不想说这个话题,因为会引起太多的争论,而我又无意和人争论这些,但是考虑到对于职业生涯的长久规划,这是一个躲避不了的话题,还是决定写一写,不爱看的请离开吧。

并不是每次穿红灯都会被汽车撞,并不是每个罪犯都会被抓到,并不是每个错误都会被惩罚,并不是每个贪官都会被枪毙,并不是你的每一份努力都会得到回报,并不是你的每一次坚持都会有人看到,并不是你每一点付出都能得到公正的回报,并不是你的每一个善意都能被理解……这个,就是世道。好吧,世道不够好,可是,你有推翻世道的勇气么?如果没有,你有更好的解决办法么?有很多时候,人需要一点耐心,一点信心。每个人总会轮到几次不公平的事情,而通常,安心等待是最好的办法。

有很多时候我们需要等待,需要耐得住寂寞,等待属于你的那一刻。周润发等待过,刘德华等待过,周星驰等待过,王菲等待过,张艺谋也等待过……看到了他们如今的功成名就的人,你可曾看到当初他们的等待和耐心?你可曾看到金马奖影帝在街边摆地摊?你可曾看到德云社一群人在剧场里给一位观众说相声?你可曾看到周星驰的角色甚至连一句台词都没有?每一个成功者都有一段低沉苦闷的日子,我几乎能想象得出来他们借酒浇愁的样子,我也能想象得出他们为了生存而挣扎的窘迫。在他们一生最中灿烂美好的日子里,他们渴望成功,但却两手空空,一如现在的你。没有人保证他们将来一定会成功,而他们的选择是耐住寂寞。如果当时的他们总念叨着“成功只是属于特权阶级的”,你觉得他们今天会怎样?

曾经我也不明白有些人为什么并不比我有能力却要坐在我的头上,年纪比我大就一定要当我的领导么?为什么有些烂人不需要努力就能赚钱?为什么刚刚改革开放的时候的人能那么容易赚钱,而轮到我们的时候,什么事情都要正规化了?有一天我突然想,我还在上学的时候他们就在社会里挣扎奋斗了,他们在社会上奋斗积累了十几二十年,我们新人来了,他们有的我都想要,我这不是在要公平,我这是在要抢劫。因为我要得太急,因为我忍不住寂寞。二十多岁的男人,没有钱,没有事业,却有蓬勃的欲望。

人总是会遇到挫折的,人总是会有低潮的,人总是会有不被人理解的时候的,人总是有要低声下气的时候,这些时候恰恰是人生最关键的时候,因为大家都会碰到挫折,而大多数人过不了这个门槛,你能过,你就成功了。在这样的时刻,我们需要耐心等待,满怀信心地去等待,相信,生活不会放弃你,机会总会来的。至少,你还年轻,你没有坐牢,没有生治不了的病,没有欠还不起的债。比你不幸的人远远多过比你幸运的人,你还怕什么?路要一步步走,虽然到达终点的那一步很激动人心,但大部分的脚步是平凡甚至枯燥的,但没有这些脚步,或者耐不住这些平凡枯燥,你终归是无法迎来最后的那些激动人心。

逆境,是上帝帮你淘汰竞争者的地方。要知道,你不好受,别人也不好受,你坚持不下去了,别人也一样,千万不要告诉别人你坚持不住了,那只能让别人获得坚持的信心,让竞争者看着你微笑的面孔,失去信心,退出比赛。胜利属于那些有耐心的人。

在最绝望的时候,我会去看电影《The Pursuit of Happyness》《JerryMaguire》,让自己重新鼓起勇气,因为,无论什么时候,我们总还是有希望。当所有的人离开的时候,我不失去希望,我不放弃。每天下班坐在车里,我喜欢哼着《隐形的翅膀》看着窗外,我知道,我在静静等待,等待属于我的那一刻。

原贴里伊吉网友的话我很喜欢,抄录在这里:

每个人都希望,自己是独一无二的特殊者
含着金匙出生、投胎到好家庭、工作安排到电力局拿1w月薪这样的小概率事件,当然最好轮到自己
红军长征两万五、打成右派反革命、胼手胝足牺牲尊严去奋斗,最好留给祖辈父辈和别人
自然,不是每个吃过苦的人都会得到回报
但是,任何时代,每一个既得利益者身后,都有他的祖辈父辈奋斗挣扎乃至流血付出生命的身影
羡慕别人有个好爸爸,没什么不可以
问题是,你的下一代,会有一个好爸爸吗?
至于问到为什么不能有同样的赢面概率?我只能问:为什么物种竞争中,人和猴子不能有同样的赢面概率?
物竞天择。猴子的灵魂不一定比你卑微,但你身后有几十万年的类人猿进化积淀。

七、入对行跟对人

在中国,大概很少有人是一份职业做到底的,虽然如此,第一份工作还是有些需要注意的地方,有两件事情格外重要,第一件是入行,第二件事情是跟人。第一份工作对人最大的影响就是入行,现代的职业分工已经很细,我们基本上只能在一个行业里成为专家,不可能在多个行业里成为专家。很多案例也证明即使一个人在一个行业非常成功,到另外一个行业,往往完全不是那么回事情,“你想改变世界,还是想卖一辈子汽水?”是乔布斯邀请百事可乐总裁约翰·斯考利加盟苹果时所说的话,结果这位在百事非常成功的约翰,到了苹果表现平平。其实没有哪个行业特别好,也没有哪个行业特别差,或许有报道说哪个行业的平均薪资比较高,但是他们没说的是,那个行业的平均压力也比较大。看上去很美的行业一旦进入才发现很多地方其实并不那么完美,只是外人看不见。

说实话,我自己都没有发大财,所以我的建议只是让人快乐工作的建议,不是如何发大财的建议,我们只讨论一般普通打工者的情况。我认为选择什么行业并没有太大关系,看问题不能只看眼前。比如,从前年开始,国家开始整顿医疗行业,很多医药公司开不下去,很多医药行业的销售开始转行。其实医药行业的不景气是针对所有公司的,并非针对一家公司,大家的日子都不好过,这个时候跑掉是非常不划算的,大多数正规的医药公司即使不做新生意撑个两三年总是能撑的,大多数医药销售靠工资撑个两三年也是可以撑的,国家不可能永远捏着医药行业不放的,两三年以后光景总归还会好起来的,那个时候别人都跑了而你没跑,那时的日子应该会好过很多。有的时候觉得自己这个行业不行了,问题是,再不行的行业,做得人少了也变成了好行业,当大家都觉得不好的时候,往往却是最好的时候。大家都觉得金融行业好,金融行业门槛高不说,有多少人削尖脑袋要钻进去,竞争激励,进去以后还要时时提防,一个疏忽,就被后来的人给挤掉了,压力巨大,又如何谈得上快乐?也就未必是“好”工作了。

太阳能这个东西至今还不能进入实际应用的阶段,但是中国已经有7家和太阳能有关的公司在纽交所上市了,国美苏宁永乐其实是贸易型企业,也能上市,鲁泰纺织连续10年利润增长超过50%,卖茶的一茶一座,卖衣服的海澜之家都能上市……其实选什么行业真的不重要,关键是怎么做。事情都是人做出来的,关键是人。

有一点是需要记住的,这个世界上,有史以来直到我们能够预见得到的未来,成功的人总是少数,有钱的人总是少数,大多数人是一般的,普通的,不太成功的。因此,大多数人的做法和看法,往往都不是距离成功最近的做法和看法。因此大多数人说好的东西不见得好,大多数人说不好的东西不见得不好。大多数人都去炒股的时候说明跌只是时间问题,大家越是热情高涨的时候,跌的日子越近。大多数人买房子的时候,房价不会涨,而房价涨的差不多的时候,大多数人才开始买房子。不会有这样一件事情让大家都变成功,发了财,历史上不曾有过,将来也不会发生。有些东西即使一时运气好得到了,还是会在别的时候别的地方失去的。

年轻人在职业生涯的刚开始,尤其要注意的是,要做对的事情,不要让自己今后几十年的人生总是提心吊胆,更不值得为了一份工作赔上自己的青春年华。我的公司是个不行贿的公司,以前很多人不理解,甚至自己的员工也不理解,不过如今,我们是同行中最大的企业,客户乐意和我们打交道,尤其是在国家打击腐败的时候,每个人都知道我们做生意不给钱的名声,都敢于和我们做生意。而勇于给钱的公司,不是倒了,就是跑了,要不就是每天睡不好觉,人还是要看长远一点。很多时候,看起来最近的路,其实是最远的路,看起来最远的路,其实是最近的路。

跟对人是说,入行后要跟个好领导好老师,刚进社会的人做事情往往没有经验,需要有人言传身教。对于一个人的发展来说,一个好领导是非常重要的。所谓“好”的标准,不是他让你少干活多拿钱,而是以下三个。

首先,好领导要有宽广的心胸,如果一个领导每天都会发脾气,那几乎可以肯定他不是个心胸宽广的人,能发脾气的时候却不发脾气的领导,多半是非常厉害的领导。中国人当领导最大的毛病是容忍不了能力比自己强的人,所以常常可以看到的一个现象是,领导很有能力,手下一群庸才或者手下一群闲人。如果看到这样的环境,还是不要去的好。

其次,领导要愿意从下属的角度来思考问题,这一点其实是从面试的时候就能发现的,如果这位领导总是从自己的角度来考虑问题,几乎不听你说什么,这就危险了。从下属的角度来考虑问题并不代表同意下属的说法,但他必须了解下属的立场,下属为什么要这么想,然后他才有办法说服你,只关心自己怎么想的领导往往难以获得下属的信服。

第三,领导敢于承担责任,如果出了问题就把责任往下推,有了功劳就往自己身上揽,这样的领导不跟也罢。选择领导,要选择关键时刻能抗得住的领导,能够为下属的错误买单的领导,因为这是他作为领导的责任。

有可能,你碰不到好领导,因为,中国的领导往往是屁股决定脑袋的领导,因为他坐领导的位置,所以他的话就比较有道理,这是传统观念官本位的误区,可能有大量的这种无知无能的领导,只是,这对于你其实是好事,如果将来有一天你要超过他,你希望他比较聪明还是比较笨?相对来说这样的领导其实不难搞定,只是你要把自己的身段放下来而已。多认识一些人,多和比自己强的人打交道,同样能找到好的老师,不要和一群同样郁闷的人一起控诉社会,控诉老板,这帮不上你,只会让你更消极。和那些比你强的人打交道,看他们是怎么想的,怎么做的,学习他们,然后跟更强的人打交道。

八、选择

我们每天做的最多的事情,其实是选择,因此在谈职业生涯的时候不得不提到这个话题。

我始终认为,在很大的范围内,我们究竟会成为一个什么样的人,决定权在我们自己,每天我们都在做各种各样的选择,我可以不去写这篇文章,去别人的帖子拍拍砖头,也可以写下这些文字,帮助别人的同时也整理自己的思路,我可以多注意下格式让别人易于阅读,也可以写成一堆,我可以就这样发上来,也可以在发以前再看几遍,你可以选择不刮胡子就去面试,也可以选择出门前照照镜子……每天,每一刻我们都在做这样那样的决定,我们可以漫不经心,也可以多花些心思,成千上万的小选择累计起来,就决定了最终我们是个什么样的人。

从某种意义上来说我们的未来不是别人给的,是我们自己选择的,很多人会说我命苦啊,没得选择阿,如果你认为“去微软还是去IBM”“上清华还是上北大”“当销售副总还是当厂长”这种才叫选择的话,的确你没有什么选择,大多数人都没有什么选择。但每天你都可以选择是否为客户服务更周到一些,是否对同事更耐心一些,是否把工作做得更细致一些,是否把情况了解得更清楚一些,是否把不清楚的问题再弄清楚一些……你也可以选择在是否在痛苦中继续坚持,是否抛弃掉自己的那些负面的想法,是否原谅一个人的错误,是否相信我在这里写下的这些话,是否不要再犯同样的错误……生活每天都在给你选择的机会,每天都在给你改变自己人生的机会,你可以选择赖在地上撒泼打滚,也可以选择咬牙站起来。你永远都有选择。有些选择不是立杆见影的,需要累积,比如农民可以选择自己常常去浇地,也可以选择让老天去浇地,诚然你今天浇水下去苗不见得今天马上就长出来,但常常浇水,大部分苗终究会长出来的,如果你不浇,收成一定很糟糕。

每天生活都在给你机会,他不会给你一叠现金也不会拱手送你个好工作,但实际上,他还是在给你机会。我的家庭是一个普通的家庭,没有任何了不起的社会关系,我的父亲在大学毕业以后就被分配到了边疆,那个小县城只有一条马路,他们那一代人其实比我们更有理由抱怨,他们什么也没得到,年轻的时候文化大革命,书都没得读,支援边疆插队落户,等到老了,却要给年轻人机会了。他有足够的理由象成千上万那样的青年一样坐在那里抱怨生不逢时,怨气冲天。然而在分配到边疆的十年之后,国家恢复招研究生,他考回了原来的学校。研究生毕业,他被分配到了安徽一家小单位里,又是3年以后,国家第一届招收博士生,他又考回了原来的学校,成为中国第一代博士,那时的他比现在的我年纪还大。生活并没有放弃他,他也没有放弃生活。10年的等待,他做了他自己的选择,他没有放弃,他没有破罐子破摔,所以时机到来的时候,他改变了自己的人生。你最终会成为什么样的人,就决定在你的每个小小的选择之间。

你选择相信什么?你选择和谁交朋友?你选择做什么?你选择怎么做?……我们面临太多的选择,而这些选择当中,意识形态层面的选择又远比客观条件的选择来得重要得多,比如选择做什么产品其实并不那么重要,而选择怎么做才重要。选择用什么人并不重要,而选择怎么带这些人才重要。大多数时候选择客观条件并不要紧,大多数关于客观条件的选择并没有对错之分,要紧的是选择怎么做。一个大学生毕业了,他要去微软也好,他要卖猪肉也好,他要创业也好,他要做游戏代练也好,只要不犯法,不害人,都没有什么关系,要紧的是,选择了以后,怎么把事情做好。

除了这些,你还可以选择时间和环境,比如,你可以选择把这辈子最大的困难放在最有体力最有精力的时候,也可以走一步看一步,等到了40岁再说,只是到了40多岁,那正是一辈子最脆弱的时候,上有老下有小,如果在那个时候碰上了职业危机,实在是一件很苦恼的事情。与其如此不如在20多岁30多岁的时候吃点苦,好让自己脆弱的时候活得从容一些。你可以选择在温室里成长,也可以选择到野外磨砺,你可以选择在办公室吹冷气的工作,也可以选择40度的酷热下,去见你的客户,只是,这一切最终会累积起来,引导你到你应得的未来。

我不敢说所有的事情你都有得选择,但是绝大部分事情你有选择,只是往往你不把这当作一种选择。认真对待每一次选择,才会有比较好的未来。

九、选择职业

职业的选择,总的来说,无非就是销售、市场、客服、物流、行政、人事、财务、技术、管理几个大类,有个有趣的现象就是,500强的CEO当中最多的是销售出身,第二多的人是财务出身,这两者加起来大概超过95%。现代IT行业也有技术出身成为老板的,但实际上,后来他们还是从事了很多销售和市场的工作,并且表现出色,公司才获得了成功,完全靠技术能力成为公司老板的,几乎没有。这是有原因的,因为销售就是一门跟人打交道的学问,而管理其实也是跟人打交道的学问,这两者之中有很多相通的东西,他们的共同目标就是“让别人去做某件特定的事情。”而财务则是从数字的层面了解生意的本质,从宏观上看待生意的本质,对于一个生意是否挣钱,是否可以正常运作有着最深刻的认识。

公司小的时候是销售主导公司,而公司大的时候是财务主导公司,销售的局限性在于只看人情不看数字,财务的局限性在于只看数字不看人情。公司初期,运营成本低,有订单就活得下去,跟客户也没有什么谈判的条件,别人肯给生意做已经谢天谢地了,这个时候订单压倒一切,客户的要求压倒一切,所以当然要顾人情。公司大了以后,一切都要规范化,免得因为不规范引起一些不必要的风险,同时运营成本也变高,必须提高利润率,把有限的资金放到最有产出的地方。对于上市公司来说,股东才不管你客户是不是最近出国,最近是不是那个省又在搞严打,到了时候就要把业绩拿出来,拿不出来就抛股票,这个时候就是数字压倒一切。

前两天听到有人说一句话觉得很有道理,开始的时候我们想“能做什么?”,等到公司做大了有规模了,我们想“不能做什么。”很多人在工作中觉得为什么领导这么保守,这也不行那也不行,错过很多机会。很多时候是因为,你还年轻,你想的是“能做什么”,而作为公司领导要考虑的方面很多,他比较关心“不能做什么”。

我并非鼓吹大家都去做销售或者财务,究竟选择什么样的职业,和你究竟要选择什么样的人生有关系,有些人就喜欢下班按时回家,看看书听听音乐,那也挺好,但就不适合找个销售的工作了,否则会是折磨自己。有些人就喜欢出风头,喜欢成为一群人的中心,如果选择做财务工作,大概也干不久,因为一般老板不喜欢财务太积极,也不喜欢财务话太多。先想好自己要过怎样的人生,再决定要找什么样的职业。有很多的不快乐,其实是源自不满足,而不满足,很多时候是源自于心不定,而心不定则是因为不清楚究竟自己要什么,不清楚要什么的结果就是什么都想要,结果什么都没得到。
我想,我们还是因为生活而工作,不是因为工作而生活,生活是最要紧的,工作只是生活中的一部分。我总是觉得生活的各方方面都是相互影响的,如果生活本身一团乱麻,工作也不会顺利。所以要有娱乐、要有社交、要锻炼身体,要有和睦的家庭……最要紧的,要开心,我的两个销售找我聊天,一肚子苦水,我问他们, 2年以前,你什么都没有,工资不高,没有客户关系,没有业绩,处于被开的边缘,现在的你比那时条件好了很多,为什么现在却更加不开心了?如果你做得越好越不开心,那你为什么还要工作?首先的首先,人还是要让自己高兴起来,让自己心态好起来,这种发自内心的改变会让你更有耐心,更有信心,更有气质,更能包容……否则,看看镜子里的你,你满意么?

有人会说,你说得容易,我每天加班,不加班老板就会把我炒掉,每天累得要死,哪有时间娱乐、社交、锻炼?那是人们把目标设定太高的缘故,如果你还在动不动就会被老板炒掉的边缘,那么你当然不能设立太高的目标,难道你还想每天去打高尔夫?你没时间去健身房锻炼身体,但是上下班的时候多走几步可以吧,有楼梯的时候走走楼梯不走电梯可以吧?办公的间隙扭扭脖子拉拉肩膀做做俯卧撑可以吧?谁规定锻炼就一定要拿出每天2个小时去健身房?你没时间社交,每月参加郊游一次可以吧,周末去参加个什么音乐班,绘画班之类的可以吧,去尝试认识一些同行,和他们找机会交流交流可以吧?开始的时候总是有些难的,但迈出这一步就会向良性循环的方向发展。而每天工作得很苦闷,剩下的时间用来咀嚼苦闷,只会陷入恶性循环,让生活更加糟糕。

虽然离开惠普仅有十五天,但感觉上惠普已经离我很远。我的心思更多放在规划自己第二阶段的人生,这并非代表我对惠普没有任何眷恋,主要还是想以此驱动自己往前走。

万科王石登珠穆朗玛峰的体验给我很多启发,虽然在出发时携带大量的物资,但是登顶的过程中,必须不断减轻负荷,最终只有一个氧气瓶和他登上峰顶。登山如此,漫长的人生又何尝不是。
我宣布退休后,接到同事朋友同学的祝贺。大部分人都认为我能够在这样的职位上及年龄选择退休,是一种勇气,也是一种福气。
还有一部分人怀疑我只是借此机会换个工作,当然还有一些人说我在HP做不下去了,趁此机会离开。
我多年来已经习惯别人对我的说三道四,但对于好友,我还是挺关心大家是否真正理解我的想法,这也是写这篇文章的目的。
由于受我父亲早逝的影响,我很早就下定决心,要在有生之年实现自己的愿望,我不要像我父亲一样,为家庭生活忙碌一辈子,临终前感伤,懊恼自己有很多没有实现的理想。
一本杂志的文章提到我们在生前就应该思考自己的墓志铭,因为那代表你自己对完美人生的定义,我们应该尽可能在有生之年去实现它。
我希望我的墓志铭上除了与家人及好友有关的内容外,是这样写着:
1.这个人曾经服务于一家全球最大的IT公司(HP)25年,和她一起经历过数次重大的变革,看着她从以电子仪表为主要的业务变革成全球最大的IT公司。
2.这个人曾经在全球发展最快的国家(中国)工作16年,并担任HP中国区总裁7年,见证及经历过中国改革开放的关键最新突破阶段,与中国一起成长。
3.这个人热爱飞行,曾经是一个有执照的飞行员,累积飞行时数超过X小时,曾经在X个机场起降过。
4.这个人曾经获得管理硕士学位,在领导管理上特别关注中国企业的组织行为及绩效,并且在这个领域上获得中国企业界的认可。
我费时25年才总结1和2两项成果,我不知还要费时多久才能达成3和4的愿望,特别是第4个愿望需要经历学术的训练,才能将我的经验总结成知识。
否则我的经验将无法有效影响及传授他人。因此重新进入学校学习,拿一个管理学位是有必要的,更何况这是我一个非常重要的愿望。
另一方面,我25年的时间都花在运营(operation)的领域,兢兢业业的做好职业人士的工作,它是一份好工作,特别是在HP,这份工作也帮助我建立财务的基础,支持家庭的发展。
但是我不想终其一生,都陷入在运营的领域,我想象企业家一样,有机会靠一些点子(ideas)赚钱,虽然风险很高,但是值得一试,即使失败,也不枉走一回,这也是第4个愿望其中的一部份。
Carly Fiorina曾经对我说过“这个世界上有好想法的人很多,但有能力去实现的人很少”,2007年5月21日在北大演讲时,有人问起那些书对我影响较大,我想对我人生观有影响的其中一本书叫“TriggerPoint”,它的主要观点是:人生最需要的不是规划,而是在适当的时机掌握机会,采取行动。
我这些愿望在我心中已经酝酿一段很长的时间,开始的时候,也许一年想个一两次,过了也就忘掉,但逐渐的,这个心中的声音,愈来愈大,出现的频率也愈来愈高,当它几乎每一个星期都会来与我对话时,我知道时机已经成熟。
但和任何人一样,要丢掉自己现在所拥有的,所熟悉的环境及稳定的收入,转到一条自己未曾经历过,存在未知风险的道路,需要绝大的勇气,家人的支持和好友的鼓励。有舍才有得,真是知易行难,我很高兴自己终于跨出了第一步。
我要感谢HP的EER提前退休优惠政策,它是其中一个关键的TriggerPoints,另一个关键因素是在去年五六月发生的事。
当时我家老大从大学毕业,老二从高中毕业,在他们继续工作及求学前,这是一个黄金时段,让我们全家可以相聚一段较长的时间,我为此很早就计划休一个长假,带着他们到各地游玩。
但这个计划因为工作上一件重要的事情(Mark Hurd访华)不得不取消。这个事件刺激了我必须严肃的去对待那心中的声音,我会不会继续不断的错失很多关键的机会?
我已经年过50,我会不会走向和我父亲一样的道路?人事部老总Charles跟我说,很多人在所有对他有利的星星都排成一列时,还是错失时机。
我知道原因,因为割舍及改变对人是多么的困难,我相信大部分的人都有自己人生的理想,但我也相信很多人最终只是把这些理想当成是幻想,然后不断的为自己寻找不能实现的藉口,南非前总统曼德拉曾经说过,“与改变世界相比,改变自己更困难”,真是一针见血。
什么是快乐及有意义的人生?我相信每一个人的定义都不一样,对我来说,能实现我墓志铭上的内容就是我的定义。
在中国惠普总裁的位置上固然可以吸引很多的关注及眼球,但是我太太及较亲近的好友,都知道那不是我追求的,那只是为扮演好这个角色必须尽力做好的地方。
做一个没有名片的人士,虽然只有十多天的时间,但我发现我的脑袋里已经空出很多空间及能量,让我可以静心的为我ChapterII的新生活做细致的调研及规划。
我预订以两年的时间来完成转轨的准备工作,并且花多点时间与家人共处。这两年的时间我希望拿到飞行执照,拿到管理有关的硕士学位,提升英文的水平,建立新的网络,多认识不同行业的人,保持与大陆的联系。希望两年后,我可以顺利回到大陆去实现我第四个愿望。
毫不意外,在生活上,我发现很多需要调整的地方。
二十多年来,我生活的步调及节奏,几乎完全被公司及工作所左右,不断涌出的deadline及任务驱动我每天的安排,一旦离开这样的环境,第一个需要调整的就是要依靠自己的自律及意志力来驱动每天的活动,睡觉睡到自然醒的态度绝对不正确,放松自己,不给事情设定目标及时间表,或者对错失时间目标无所谓,也不正确,没有年度,季度,月及周计划也不正确。
担任高层经理多年,已经养成交待事情的习惯,自己的时间主要花在思考,决策及追踪项目的进展情况,更多是依靠一个庞大的团队来执行具体的事项及秘书来处理很多协调及繁琐的事情。
到美国后,很多事情需要打800号电话联系,但这些电话很忙,常让你在waitingline上等待很长的时间,当我在等待时,我可以体会以前秘书工作辛苦的地方,但同时也提醒我自己,在这个阶段要改变态度,培养更大的耐性及自己动手做的能力。
生活的内容也要做出很大的调整,多出时间锻炼身体,多出时间关注家人,多出时间关注朋友,多出时间体验不同的休闲活动及飞行,一步步的,希望生活逐步调整到我所期望的轨道上,期待这两年的生活既充实又充满乐趣及意义。
第一个快乐的体验就是准备及参加大儿子的订婚礼,那种全心投入,不需担忧工作数字的感觉真好。同时我也租好了公寓,买好了家具及车子,陪家人在周末的时候到Reno及Lake Tahoe玩了一趟,LakeTahoe我去了多次,但这次的体验有所不同,我从心里欣赏到它的美丽。
但同时我也在加紧调研的工作,为申请大学及飞行学校做准备,这段时间也和在硅谷的朋友及一些风险投资公司见面,了解不同的产业。
我的人生观是“完美的演出来自充分的准备”,“勇于改变自己,适应不断变化的环境,机会将不断出现”,“快乐及有意义的人生来自于实现自己心中的愿望,而非外在的掌声”。
我离开时,有两位好朋友送给我两个不同的祝语,Baron的是“多年功过化烟尘”,杨华的是“莫春者,风乎舞雩,咏而归”,它们分别代表了我离开惠普及走向未来的心情。
我总结人生有三个阶段,一个阶段是为现实找一份工作,一个阶段是为现实,但可以选择一份自己愿意投入的工作,一个阶段是为理想去做一些事情。
我珍惜我的福气,感激HP及同事、好朋友给我的支持,鼓励及协助,这篇文字化我心声的文章与好友分享。
posted @ 2010-01-23 11:29 北国狼人的BloG 阅读(297) | 评论 (0)编辑 收藏
update monster set exp=exp*2
posted @ 2010-01-20 10:06 北国狼人的BloG 阅读(200) | 评论 (0)编辑 收藏



posted @ 2010-01-07 11:18 北国狼人的BloG 阅读(209) | 评论 (0)编辑 收藏

1、dataProvider
     在Adobe ActionScript 3.0里面的定义如下:
    要查看的数据集。此属性允许您将大多数类型的对象用作数据提供程序。如果将 dataProvider属性设置为 Array,则会将其转换为 ArrayCollection。如果将该属性设置为 XML对象,则会将其转换为仅包含一个项目的 XMLListCollection。如果将该属性设置为XMLList,则会将其转换为 XMLListCollection。如果将该属性设置为实现 IList 或 ICollectionView接口的对象,则可直接应用此对象。受转换操作的影响,在您获取 dataProvider属性时,该属性值将始终为 ICollectionView,所以此值不一定是您设置的对象类型。如果要修改数据提供程序中的数据,则了解以下行为非常重要:可能不会检测对原始数据所做的更改,但将检测对从 dataProvider属性获取的 ICollectionView 对象所做的更改。默认值为 null.此属性可用作数据绑定的源。
    上面那一大堆的东西其实就说明以下几点:
    a、凡是具有dataProvider的组件,都可以将Array、XML等内容作为数据源。
    b、将这些作为数据源的内容“自动”绑定并显示在这些控件上面。
    所以通常的做法,当Flex获取了外部数据后,可以将其直接赋值为dataProvider,然后通过一些设定,就可以在这些组件上面显示数据了。
    关于这个例子我就不在这里复述了,大家可以自行去找一下,或者直接看这里的内容:http://livedocs.adobe.com/flex/3_cn/mx/controls/ComboBox.html#includeExamplesSummary

2、itemRenderer项目渲染器)及其data属性。
     itemRenderer的作用就是可以自定义一些组件的项目显示效果,例如我们熟知的Combobox、List、DataGrid等都具有这样的属性,也就是说,我们可以利用itemRenderer来改善ComBoBox里面的下拉的显示效果。当然,List、DataGrid也是这样的。
     当ComboBox中自定义了一个渲染器后,同时使用dataProvider的方式绑定了一个数据源,这个时候,如何与我们自定义的渲染器里面的item发生作用呢?就是使用data方式。
     也就是说,dataProvider可以绑定数据到UI、如果这个组件使用了自定义渲染器,那么就可以使用data.XXX的方式获取到dataProvider里面的数据。

okay,以上介绍的两个知识点是关于Flex组件的数据处理能力,其中dataProvider可以把Array、XML等内容作为数据源直接绑定并显示到UI上面,而itemRenderer里面的data是实现组件与其渲染器之间的数据处理。

下一篇的内容是关于Flex与后台进行通讯的常见的几种方式:HTTPService、WebService、Remote等方式,而通过这几种方式可以轻松的让一些例如Java、C#、Python、Ruby、PHP等主流编程语言为Flex所服务:)

附加:
关于dataProvideritemRendererdata的具体用法有些抽象,因此我特此列举一个例子来说明一下。
这是一个HorizontalList组件,而且其中它的itemRenderer=ToolBoxRenderer,想让我们看一下HorizontalList的片段代码:
<mx:HorizontalList id="myHorizontalList" itemRenderer="ToolBoxRenderer">
         <mx:dataProvider>
             <mx:Array>
                   <mx:Object tooltip= "rubber" styleName="rubber" language="{ _language }"/>
             </mx:Array>
         </mx:dataProvider>
</mx:HorizontalList> 

然后是ToolBoxRenderer的片段代码:

<mx:Canvas width="30" height="30">
         <mx:Button
            width="30" height="30" 
            toolTip="{ data.tooltip }" 
            styleName="{ data.styleName }"/>
</mx:Canvas>

再让我们看看itemRenderer是如何与我们今天这个主题联系起来的。
1、在myHorizontalList中定义了一个dataProvider,通过代码可以看出是一个Array类型的变量,然后将其赋值给dataProvider。这个时候,其实就应该将数据显示到myHorizontalList上面了,这也就是dataProvider的用处。
2、在dataProvider包含的Array中,定义如下的结构:<mx:Object tooltip= "rubber" styleName="rubber" language="{ _language }"/>
3、我们不仅设定了dataProvider,还是同时设定了itemRenderer,即为ToolBoxRenderer。
4、在ToolBoxRenderer里面,定义了一个Button,同时我们使用类似于这样的方式可以取得dataProvider里面的数据:toolTip="{ data.tooltip }" 

以上就是一个非常简单,但是又非常典型的一个dataProvideritemRendererdata的用法,希望大家可以理解:)

posted @ 2010-01-04 22:26 北国狼人的BloG 阅读(1224) | 评论 (0)编辑 收藏
是直接写在包里的函数,包里没有类,只有函数,这样的函数叫函数闭包
函数在类里出现通常叫方法,


http://help.adobe.com/zh_CN/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f54.html
函数闭包 是一个对象,其中包含函数的快照及其“词汇环境”。函数的词汇环境包括函数范围链中的所有变量、属性、方法和对象以及它们的值。无论何时在对象或类之外的位置执行函数,都会创建函数闭包。函数闭包保留定义它们的作用域,这样,在将函数作为参数或返回值传递给另一个作用域时,会产生有趣的结果。

例如,下面的代码创建两个函数:foo()(返回一个用来计算矩形面积的嵌套函数 rectArea())和 bar()(调用 foo() 并将返回的函数闭包存储在名为 myProduct 的变量中)。即使 bar() 函数定义了自己的局部变量 x(值为 2),当调用函数闭包 myProduct() 时,该函数闭包仍保留在函数 foo() 中定义的变量 x(值为 40)。因此,bar() 函数会返回值 160,而不是 8。

function foo():Function
{
   var x:int = 40;
   function rectArea(y:int):int // function closure defined
   {
       return x * y
   }  
   return rectArea;
}
function bar():void
{
   var x:int = 2;
   var y:int = 4;
   var myProduct:Function = foo();
   trace(myProduct(4)); // function closure called
}
bar(); // 160

方法的行为与函数闭包类似,因为方法也保留有关创建它们的词汇环境的信息。当方法提取自它的实例(这会创建绑定方法)时,此特征尤为突出。函数闭包与绑定方法之间的主要区别在于,绑定方法中 this 关键字的值始终引用它最初附加到的实例,而函数闭包中 this 关键字的值可以改变。有关详细信息,请参阅方法。
posted @ 2009-12-29 14:29 北国狼人的BloG 阅读(205) | 评论 (0)编辑 收藏
     摘要: 前期准备:       点击 File 菜单 -> New -> MXML Component ,然后弹出一个对话框。 在对话框中输入组件名,选择此组件继承的类型,如: Canvas , DataGrid , ComboBox …… 等。 然后选择组件的大小,点击 Finish 即可。  ...  阅读全文
posted @ 2009-12-24 16:06 北国狼人的BloG 阅读(454) | 评论 (0)编辑 收藏

as3 + java

action script 3 真不错了
posted @ 2009-12-23 16:33 北国狼人的BloG 阅读(187) | 评论 (0)编辑 收藏
表现:
使用ModuleManager去加载一个Module的时候, 所有的事件都激发不了.

代码:

  1.                 var testModule:IModuleInfo = ModuleManager.getModule('modules/pub/User.swf');
  2.                 testModule.addEventListener(ModuleEvent.READY,onModuleReady);
  3.                 testModule.addEventListener(ModuleEvent.SETUP, onModuleSetup);
  4.                 testModule.addEventListener(ModuleEvent.PROGRESS,onModuleLoading);
  5.                 testModule.load();

打个赌, ModuleEvent里所有的事件都不会被激发.


原因:

addEventListener之后, testModule的Event Listeners就可能被GC了.




解决:

不要声明局部IModuleInfo对象.


相关链接:
http://bugs.adobe.com/jira/browse/SDK-14021
https://bugs.adobe.com/jira/browse/SDK-11389

Gaurav Jain 同学说: 
"References to IModuleInfo must be maintained to keep the event listeneres alive. If the IModuleInfo is defined in function local scope the event listeners may get garbage collected. "
他表示:
"This is NAB. The weak reference was a change to fix a memory leak bug (https://bugs.adobe.com/jira/browse/SDK-9467) "

Not a bug~ 为了修复另一个bug, 牺牲这个....
posted @ 2009-12-23 16:31 北国狼人的BloG 阅读(236) | 评论 (0)编辑 收藏