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

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

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

posted @ 2011-08-28 13:49 北国狼人的BloG 阅读(1160) | 评论 (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 阅读(1097) | 评论 (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 阅读(1896) | 评论 (0)编辑 收藏
http://game-develop.net/blog/?p=17
posted @ 2010-12-01 13:33 北国狼人的BloG 阅读(263) | 评论 (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 阅读(1133) | 评论 (0)编辑 收藏
这个软件又好用,又实用,能缩放,比Captivate 好用多了。

posted @ 2010-06-29 16:58 北国狼人的BloG 阅读(1190) | 评论 (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 阅读(1117) | 评论 (0)编辑 收藏
-Xms256m -Xmx512m
posted @ 2010-06-04 18:32 北国狼人的BloG 阅读(845) | 评论 (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 阅读(1206) | 评论 (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 阅读(925) | 评论 (0)编辑 收藏
 改一个文件
 /etc/inittab
 把这一行,5改成3
id:3:initdefault:
 然后重启机器,就好了
posted @ 2010-05-05 18:56 北国狼人的BloG 阅读(172) | 评论 (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 阅读(831) | 评论 (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 阅读(189) | 评论 (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 阅读(261) | 评论 (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 阅读(208) | 评论 (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 阅读(8156) | 评论 (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 阅读(243) | 评论 (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 阅读(142) | 评论 (0)编辑 收藏
mysql>use mysql;
mysql>grant all on 数据库名字.* to '远程用户名'@'远程IP地址' identified by '远程用户的密码';
mysql>flush privileges;
mysql>\q
posted @ 2010-04-07 19:02 北国狼人的BloG 阅读(136) | 评论 (0)编辑 收藏


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

内存不够用,就是用ANT_OPTS  -Xms256m -Xmx512m
posted @ 2010-04-05 15:02 北国狼人的BloG 阅读(139) | 评论 (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 阅读(312) | 评论 (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 阅读(240) | 评论 (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 阅读(153) | 评论 (0)编辑 收藏
dir  后台,把文件,横向排放,并以空格换行

gam.server.jar            
mina-core.jar       


每行空格长度不同

使用    edit -plus   Alt 列选扣出来

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

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

posted @ 2010-03-23 20:30 北国狼人的BloG 阅读(459) | 评论 (0)编辑 收藏
http://code.google.com/p/golfzon-flash-library/
posted @ 2010-03-23 13:26 北国狼人的BloG 阅读(173) | 评论 (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 阅读(1692) | 评论 (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 阅读(227) | 评论 (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 阅读(143) | 评论 (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 阅读(4119) | 评论 (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 阅读(321) | 评论 (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 阅读(222) | 评论 (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 阅读(508) | 评论 (0)编辑 收藏