显示标签为“计算机”的博文。显示所有博文
显示标签为“计算机”的博文。显示所有博文

2009年5月19日星期二

『转』如何看懂Java混淆后的反编译代码

转这篇文章 也不用说我想干什么了。。。

作者:dozb

一般情况下Java应用的开发者为了保护代码不被别人抄袭,在生成class文件的时候都java文件进行了混淆,这种class文件用反编译工具得到的结果很难看懂,并且不能进行编译。本文从研究的角度,浅析如何读懂这种反编译过来的文件。

例子一:赋值
反编译过来的代码如下:
Node node;
Node node1 = _$3.getChildNodes().item(0);
node1;
node1;
JVM INSTR swap ;
node;
getChildNodes();
0;
item();
getChildNodes();
0;
item();
getNodeValue();
String s;
s;
原始语句:
Node node;
Node node1 = currDocument.getChildNodes().item(0);
node = node1;
String s = node.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
注解:
JVM INSTR swap ; //赋值语句
练习:
String s1;
String s8 = node.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
s8;
s8;
JVM INSTR swap ;
s1;
10;
Integer.parseInt();
int i;
i;


例子二:不带参数创建对象
反编译过来的代码如下:
JVM INSTR new #244 ;
JVM INSTR dup ;
JVM INSTR swap ;
CrossTable();
CrossTable crosstable;
crosstable;

原始语句:
CrossTable crosstable = new CrossTable();
注解:
练习:
JVM INSTR new #246 ;
JVM INSTR dup ;
JVM INSTR swap ;
Database();
Object obj;
obj;

例子三:带参数创建对象
反编译过来的代码如下:
JVM INSTR new #262 ;
JVM INSTR dup ;
JVM INSTR swap ;
String.valueOf(s2);
StringBuffer();
s.substring(j, i);
append();
s6;
append();
toString();
s2;

原始语句:
s2 = (new StringBuffer(String.valueOf(s2))).append(s.substring(j, i)).append(s6).toString();
注解:
此语句实际上是:s2 += s.substring(j, i) + s6;
练习:

例子四:for循环
反编译过来的代码如下:
int k = 0;
goto _L4
_L8:
...
k++;
_L4:
if(k < as.length) goto _L8; else goto _L7

原始语句:
for(int k=0;k < as.length;k++)
{
...
}
注解:

例子五:while循环
反编译过来的代码如下:
String s1 = "";
goto _L1
_L3:
JVM INSTR new #262 ;
JVM INSTR dup ;
JVM INSTR swap ;
String.valueOf(s1);
StringBuffer();
_$2(resultset, s, l);
append();
toString();
s1;
_L1:
if(resultset.next()) goto _L3; else goto _L2

原始语句:
String s1 = "";
while(resultset.next())
{
s1 = s1 + resultSetToString(resultset, s, l);

}


原文:http://dozb.bokee.com/2774482.html

2009年5月7日星期四

【转】MIDlet的生命周期的深入理解及游戏死机问题

今天在查加密算法是无疑中看到的。虽然开发j2me的时候,我都这么做的。只是没考虑过不这么做的问题。这样做只是习惯,觉得这样写比较舒服,呵呵。今天看到这篇文章发现原来还能防止这些,转来学习下。

首先在你运行一个程序的时候,JAM会调用该midlet的构造函数来生成midlet的对象,然后被jam置于Paused状态。一旦jam认为这个midlet对象可以执行时,jam就会调用startApp()方法,并将此midlet置于Active状态。startApp()方法由于在系统来电、或者退回到系统菜单返回时会被再次调用,所以这里只可以放初始化一次的代码。或者你把初始化一次的代码放到midlet的构造函数中。例如:



public class Midlet extends MIDlet{

Display display = null;

MyCanvas can;

public Midelt(){

display = Display.getDisplay(this);

can = new MyCanvas();

}

public void startApp(){

display.setCurrent(can);//如果把can = new MyCanvas()放到这里,再来电返回时就会出问题。

}

}

或者

public class Midlet extends MIDlet{

Display display = null;

MyCanvas can;

public Midelt(){

}

public void startApp(){

if(display ==null){

display = Display.getDisplay(this);

can = new MyCanvas();

}//此处只会被运行1次,这样就不会出错

display.setCurrent(can);//这句按理放到这里最合适,你想显示那个canvas就放哪个!

}

}


在startApp()中,你调用display.setCurrent(can)的时候,首先运行的是showNotify(),接着运行paint()函数一次,如果有线程的话,此时run()方法开始运行。一般在run()方法里一般这么写。此时的run()是可以处理异步事件的,也就是你来电话的时候,这里run()还是运行的。不过他不会paint()什么东西,即使它里面有repaint(),这点放心。

public void run(){

while(flag){//flag是boolean型变量

try{

Thread.sleep(50);//时间自己设啦。

}catch(Exception e){}

repaint();

}

}


哇~~来电话了,或者你退到系统菜单。如nokia s60的手机。

hideNotify()首先会被调用,接着pauseApp()再被调用。


这么快,打完了,返回时:先调用showNotify(),接着调用paint()函数一次,最后才是调用startApp()函数。

关于run()和paint()也可以使用display.callSerially(this)语句。这个以后有时间了再说。


明白了生命周期,再来看死机问题。我说的死机问题,多是来电话返回时死机。其实只要找到了问题,一切就变的很简单。

为什么死机,归根结底还是程序问题。好像是废话。哈~~

Graphics mg;//定义的全局参数


paint(Graphics g){

mg = g;//有的程序这样写,if(mg ==null){mg =g:}这样对于n7610系列就会出错。

mg.drawString();

switch(case){

case GAME_MUNE:

drawA();

break;


case PLAY:

drawB();

break;

default:

break;

}

}

/*下面的画图函数一定要放到paint()函数里调用,不要在别的地方调用,如run()里面,上面说过,程序暂停之后返回,会先paint()一次,如果在别的地方调用就会出现问题。*/

public void drawA(){

mg.drawString();

}

public void drawB(){

mg.drawString();

}

按照上面的写法一般不会出现死机问题。当然,你也可以不定义全局的mg,可以把g单独传到各个画图子函数中。如,

paint(Graphics g){

g.drawString();

switch(case){

case GAME_MUNE:

drawA(g);

break;


case PLAY:

drawB(g);

break;

default:

break;

}

}

public void drawA(Graphics mg){

mg.drawString();

}

public void drawB(Graphics mg){

mg.drawString();

}

原帖:http://azi.javaeye.com/blog/194478

2009年4月21日星期二

oracle 收购 sun 是福是祸 是挑战

刚才才看到这条消息,确实晚了点,这么震撼的消息现在才知道惭愧。

当时传ibm收购sun,网上议论纷纷。当谈判破裂时,很多分析师说是收购失败是sun的损失,也有说是ibm的损失等等。我当时没有觉得什么损失不损失的。大家维持原状有什么损不损失的。现在oracle又是用现金收购了sun。一方面可见oracle这几年来收购的野心,另一方面可见到现在可谈损不损失的问题了。

无疑对于ibm来说是损失了。现在oracle借助sun的软硬件技术,将成为IBM在数据中心领域的一个强大竞争对手,新公司可以销售包括硬件、操作系统和架构软件在内的完整企业产品组合,而在以前只有IBM才能够提供如此完整的产品和服务。

很多人说java前途光明。我不觉得。现在oracle形成了高端java企业开发一条龙,可以说有垄断之势。对于以前同是以java作为开发语言的ibm,sap等大公司对java有所忌惮。如何处理好两者之间的关系,就看oracle的操作了。作为java的开发者现在感觉就像是我为鱼肉的感觉。

对于oracle来说,sun的硬件部分的合并,让他不再是一家软件公司了,而变成了系统厂商。这也就让从前合伙的戴尔和惠普,有所忌惮了。对于oracle来说当然是扩张的好事。但对于从事这方面的开发人员来说,可选性变小了。更本不是件好事。

我一直觉得当时ibm收购失败是件好事,没有什么损不损失的。sun处于中间位置,达到平衡。所有的厂商以java技术而不用过多担心。现在格局被打破了,我对java的将来感到担心。

我对mysql也情有独钟,小巧轻便。现在mysql真是尴尬,所有的猜测都取决于oracle的决策了。mysql实在不行就去试试PostgreSQL。但是java的前提,我很在意。java确实有很多缺点,但是真是一门好语言啊。真不想因此而减少了他的应用范围。

是福是祸 都是挑战。接下来举世瞩目oracle的决策吧。希望都是明智的。但愿。。。。

2009年4月14日星期二

一切就是那么的命中注定

今天在线上碰到了男人,问他最近境况。后得知现在在一家国企混着,等世嘉的下次面试。
呵呵,将兴趣变成了自己的工作到还真是不错。后来聊着聊着,聊到了面试第一轮的一道题。
写个一个通用的y=Asin(ax+b)+c的解法..要时间复杂越短越好。
他问我的时候,我一下子懵了下。好久没有接触高等数学了(惭愧)。依稀记得以前有什么公式可以通解。但要我立马不翻书,可真是不行了。男人说:...你们都是往这里想的.桃子也是...
。。。。我哪里想错了么?男人说:我就说把y=sinx的值按照精度要求预先存在数组中。
哈哈哈哈哈,用空间换时间么。桃子说他肯定错,我不觉得。至少别人让他面试到现在是不假的事实。我也觉得不错的方法。第一,你的算法再怎么牛,能达到系统预设的sin求解不是件容易的事情。第二:现在的要求是自己写一个要求时间复杂越短越好,当然是用空间去换时间了。我和桃子都一上来就走入误区了。
我很好奇,他当时怎么会突发如此想法的。我想正常人大多会和我和桃子的想法一样,想一个算法来解。男人说反正我看到过别人这么说.就觉得不至于不可行。
是的,也许不是他当时的突发奇想。但是平时的积累就是财富。你平时无意中捡起来的某些东西,也许暂时没用,但是总有用处的一天。一切就是这么命中注定。

2009年4月2日星期四

不要一辈子靠技术生存

来源:世界经理人
  我现在是自己做,但我此前有多年在从事软件开发工作,当回过头来想一想自己,觉得特别想对那些初学JAVA/DOT。NET技术的朋友说点心里话,希望你们能从我们的体会中,多少受点启发(也许我说的不好,你不赞同但看在我真心的份上别扔砖头啊).

一、 在中国你千万不要因为学习技术就可以换来稳定的生活和高的薪水待遇,你千万更不要认为哪些从事 市场开发,跑腿的人,没有前途。

  不知道你是不是知道,咱们中国有相当大的一部分软件公司,他们的软件开发团队都小的可怜,甚至只有1-3个人,连一个项目小组都算不上,而这样的团队却要承担一个软件公司所有的软件开发任务,在软件上线和开发的关键阶段需要团队的成员没日没夜的加班,还需要为测试出的BUG和不能按时提交的软件模块功能而心怀忐忑,有的时候如果你不幸加入现场开发的团队你则需要背井离乡告别你的女友,进行封闭开发,你平时除了编码之外就是吃饭和睡觉(有钱的公司甚至请个保姆为你做饭,以让你节省出更多的时间来投入到工作中,让你一直在那种累了就休息,不累就立即工作的状态)

  更可怕的是,会让你接触的人际关系非常单一,除了有限的技术人员之外你几乎见不到做其他行业工作和职位的人,你的朋友圈子小且单一,甚至破坏你原有的爱情(想象一下,你在外地做现场开发2个月以上,却从没跟女友见过一面的话,你的女友是不是会对你呲牙裂嘴)。

  也许你拿到了所谓的白领的工资,但你却从此失去享受生活的自由,如果你想做技术人员尤其是开发人员,我想你很快就会理解,你多么想在一个地方长期待一段时间,认识一些朋友,多一些生活时间的愿望。

  比之于我们的生活和人际关系及工作,那些从事售前和市场开发的朋友,却有比我们多的多的工作之外的时间,甚至他们工作的时间有的时候是和生活的时间是可以兼顾的,他们可以通过市场开发,认识各个行业的人士,可以认识各种各样的朋友,他们比我们坦率说更有发财和发展的机会,只要他们跟我们一样勤奋。(有一种勤奋的普通人,如果给他换个地方,他马上会成为一个勤奋且出众的人。)

二、在学习技术的时候千万不要认为如果做到技术最强,就可以成为100%受尊重的人。

  有一次一个人在面试项目经理的时候说了这么一段话:我只用最听话的人,按照我的要求做只要是听话就要,如果不听话不管他技术再好也不要。随后这个人得到了试用机会,如果没意外的话,他一定会是下一个项目经理的继任者。

  朋友们你知道吗?不管你技术有多强,你也不可能自由的腾出时间象别人那样研究一下LINUX源码,甚至写一个LINUX样的杰作来表现你的才能。你需要做的就是按照要求写代码,写代码的含义就是都规定好,你按照规定写,你很快就会发现你昨天写的代码,跟今天写的代码有很多类似,等你写过一段时间的代码,你将领略:复制,拷贝,粘贴那样的技术对你来说是何等重要。(如果你没有做过1年以上的真正意义上的开发不要反驳我)。

  如果你幸运的能够听到市场人员的谈话,或是领导们的谈话,你会隐约觉得他们都在把技术人员当作编码的机器来看,你的价值并没有你想象的那么重要。而在你所在的团队内部,你可能正在为一个技术问题的讨论再跟同事搞内耗,因为他不服你,你也不服他,你们都认为自己的对,其实你们两个都对,而争论的目的就是为了在关键场合证明一下自己比对方技术好,比对方强。(在一个项目开发中,没有人愿意长期听别人的,总想换个位置领导别人。)

三、你更不要认为,如果我技术够好,我就自己创业,自己有创业的资本,因为自己是搞技术的。

  如果你那样认为,真的是大错特错了,你可以做个调查在非技术人群中,没有几个人知道C#与JAVA的,更谈不上来欣赏你的技术是好还是不好。一句话,技术仅仅是一个工具,善于运用这个工具为别人干活的人,却往往不太擅长用这个工具来为自己创业,因为这是两个概念,训练的技能也是完全不同的。

  创业最开始的时候,你的人际关系,你处理人际关系的能力,你对社会潜规则的认识,还有你明白不明白别人的心,你会不会说让人喜欢的话,还有你对自己所提供的服务的策划和推销等等,也许有一万,一百万个值得我们重视的问题,但你会发现技术却很少有可能包含在这一万或一百万之内,如果你创业到了一个快成功的阶段,你会这样告诉自己:我干吗要亲自做技术,我聘一个人不就行了,这时候你才真正会理解技术的作用,和你以前做技术人员的作用。

[小结]

  基于上面的讨论,我奉劝那些学习技术的朋友,千万不要拿科举考试样的心态去学习技术,对技术的学习几近的痴迷,想掌握所有所有的技术,以让自己成为技术领域的权威和专家,以在必要的时候或是心里不畅快的时候到网上对着菜鸟说自己是前辈。

  技术仅仅是一个工具,是你在人生一个阶段生存的工具,你可以一辈子喜欢他,但最好不要一辈子靠它生存。

  掌握技术的唯一目的就是拿它找工作(如果你不想把技术当作你第二生命的话),就是干活。所以你在学习的时候千万不要去做那些所谓的技术习题或是研究那些帽泡算法,最大数算法了,什么叫干活?

  就是做一个东西让别人用,别人用了,可以提高他们的工作效率,想象吧,你做1万道技术习题有什么用?只会让人觉得酸腐,还是在学习的时候,多培养些自己务实的态度吧,比如研究一下当地市场目前有哪些软件公司用人,自己离他们的要求到底有多远,自己具体应该怎么做才可以达到他们的要求。等你分析完这些,你就会发现,找工作成功,技术的贡献率其实并没有你原来想象的那么高。

  不管你是学习技术为了找工作还是创业,你都要对技术本身有个清醒的认识,在中国不会出现BILL GATES,因为,中国目前还不是十分的尊重技术人才,还仅仅的停留在把软件技术人才当作人才机器来用的尴尬境地。(如果你不理解,一种可能是你目前仅仅从事过技术工作,你的朋友圈子里技术类的朋友占了大多数,一种可能是你还没有工作,但喜欢读比尔。盖茨的传记)。

2009年4月1日星期三

不得不记录下 关于s60虚拟机文件保存地点

最近在做手机的开发,基于j2me。刚开始起步,发现没遇到过什么问题。配置,测试,几个简单的入门demo。都很顺利。
由于这次手机开发是针对流媒体在线播放的,rms好像是最好个解决。但我想第一步调通播放已下载文件。所以就像先找下虚拟机内部创建文件的保存地址。sun的虚拟机很好找,搜索下就有了。接下来是塞班的s60,这个让我好找啊,以至于到现在还没睡觉。
当然第一步是在s60内部创建一个文件,然搜索下相关文件夹。奇怪的是没有找到。但后我想是不是改变文件名了,所以就文件河,全电脑监控。这下更加惊讶的事情发生了,没有相关操作!!!
是在困惑下,网上找也没找到相关回答。实在是纳闷,而且测试文件是否存在是,所创建的文件是存在的,并没有随文件突出而删除。
本人修行不够啊,实在是无法理解。后来在网上看到一篇关于塞班系统配置的,就猜想尝试下加点参数进去制定下虚拟机的e盘。epoc.ini中
_EPOC_DRIVE_D \epoc32\winscw\d
_EPOC_DRIVE_E \epoc32\winscw\e
莫名的发现指定后文件就在指定文件夹下生成了。实在无语。对于手机开发还真是菜鸟阶段啊。本来感觉j2me,比起j2ee简单多了,可以说比j2se,在编程上还简单。现在发现j2me的难点所在,就是不同机型的熟识程度。
做了三天的j2me开发,发现很有意思,你j2ee开发快多了。
如此奇怪的事情,不得不记录下。 让像我一样刚开始j2me开发的菜鸟,少走点弯路吧。累了睡觉去了。
唉,因为这件事,今天的三份报告都来不及赶了。。。。。

2009年3月24日星期二

【转】了解ruby的优点与不足

在目前的主流web开发技术例如J2EE,ASP.net,PHP,Python,Ruby当中,基于Ruby语言的rails框架是做网站开发速度最快 的工具了,可以达到J2EE框架开发速度的5-10倍,并且程序代码量也只有使用J2EE框架开发的1/5以下。因此使用Ruby来开发JavaEye网 站,能够把网站的开发周期缩短5倍左右,也就是说,如果用Java开发JavaEye网站需要5个月时间的话,那么使用Ruby仅仅1个月就够了。另外由于代码量的大幅度减少,网站整个的维护工作量也大大降低。因为使用Ruby带来的开发和维护上面 的好处实在是很诱人,能够几倍幅度的降低我们的网站开发周期和维护成本,那何乐而不为呢?
目前Ruby在国内应用很稀少,也找不到什么可以借鉴的经验.不过对于本来就是资深的开发人员,又运营高端技术社区来说,这些都不是什么障碍,Ruby无论如何,还是比Java要简单,只要适合我们,什么技术都可以拿来用,对于高水平的开发人员来说,用什么编程语言都一样,精通Java的去搞Ruby,完全没有什么障碍。
从目前的状况来说,Ruby还挑战不了Java的地位,从可以预见的将来,Ruby也不太会取代Java的地位。这是因为:

1) Java能够成为应用软件开发的主流,是有很多因素综合作用导致的,而且也有一个历史机遇的问题。当应用软件开发方式从C/S转向B/S的时候,Java 抓住了历史机遇,造就了目前全球大多数应用软件厂商都基于Java开发软件这样一个既成事实,Java的整个全球商业价值太高了,优势太大。并且从 Java自身的语法角度来说,也比较适合目前软件外包产业的大规模分工协作。此外Java并没有固步自封,在开源社区和商业厂商双重强力推动下,Java 自身仍然在快速的进步,生命力很顽强。

2)Ruby目前只是在web开发领域比Java有很强的开发效率的优势,但并没有Java那么齐全的产品线,从基础软件到Web应用软件,从桌面到嵌入式开发,无所不包。

3) Java是主流的工业级别的编程语言,就单个程序员个体的编程效率来说,远远不如Ruby,但是很多软件公司,特别是软件外包往往是几十人,上百人大规模 团队协作开发,甚至异地大规模协作,在这种情况下,个体的编程效率并不重要,重要的是团队之间协作和模块独立分割以及组合,Java能够很好的满足这种软 件开发模式的要求。但是Ruby很显然并不适合这种软件开发模式,Ruby更加适合小规模团队(一般少于10人),采用敏捷开发方式,高效率的开发软件。

但是Ruby取代不了Java,并不意味着Ruby就不值得去使用。特别是对于开发团队规模比较小,对软件开发速度有比较高要求的情况来说,Ruby肯定是更好的选择

Ruby的优势主要有:

1) Ruby是一种动态面向对象语言,具有很多强大的面向对象的高级特性,例如open class(对象的类别可以在程序运行期被动态的改变),duck typing(由对象行为决定对象类型),meta programming(元编程),block和closure(块和闭包)等等,可以轻松创造出来Java语言很难实现的功能,因此可以极大提高编程效 率,减少代码量。

2) Ruby更加贴近英语的自然语言,描述和表达能力很好,语法扩展能力很强,因此被用来作为DSL(领域专用语言),例如Ruby的构建工具rake就是一种DSL。而Java则不具备这样的能力,从而不得不借助使用XML来描述各种配置信息。

3) 基于Ruby语言的rails框架,除了充分利用了Ruby语言强大的语法能力之外,rails框架自身也有很多理念非常领先的创新性技术,例如简化的 ORM框架ActiveRecord,Database Migration,以及支持REST特性的URL Route等等。在这些方面,Java的主流框架在技术创新能力上被远远甩到了后面。

4) 除了技术因素之外,基于rails框架来开发web应用,最大的优势就是开发速度快,一般认为达到使用Java的5-10倍速度,另外代码量很少,这是Ruby吸引很多开发人员的主要原因

5) 使用Ruby on rails开发web应用,其入门门槛和学习成本要远低于使用Java,一个基础扎实的程序员通过一个月学习就可以熟练使用rails开发,但是学习三个月,都未必能够熟练运用主流Java框架来开发。
Ruby的不足:

1)从技术角度来说,Ruby解析器的性能比较差,远低于Java的JVM。不过对于Web应用来说,这个缺点没有什么影响:因为Web应用的瓶颈往往出现在数据库访问上面。另外Ruby的VM将可能在2007年底推出,届时ruby性能会有一个很大的改观。

2)相对比Java丰富的各种第三方类库来说,Ruby的第三方类库显得非常缺乏,而且不成熟,特别是针对企业应用的各种第三方类库支持,空白点很多。这是目前制约Ruby在企业应用普及的最大障碍之一。相信随着时间的推移和Ruby的普及,将会有所改善。

3)Ruby,特别是用rails开发的web应用在Windows操作系统上面得到的支持还很不够,传统上都是部署在Unix/Linux操作系统上的。Windows目前来说只能作为开发环境,而不能作为生产运行环境。
综上所述,我们不难看出Java和Ruby不是两个相互对立的开发语言,对于Ruby和Java谁更具有优势的讨论意义已经不大,首先从Java本身 来讲,,Java有其自己的优势,并且 Java将会继续处于顶峰,并在企业应用上保持良好的表现,这一点毋庸置疑,并且已经得到了市场的证明。

另外, Ruby有极强的文本处理能力,与Perl不分伯仲,同时,Ruby的语法简单,还有异常处理以及迭代器等构造使编程变得简单明了,这也正是我们所期待的下一代编程语言。

如果单从某一种语言的角度来看,我们似乎并不能看出什么,但是如果站在更高的位置,从不同的角度全面的看待问题,我们不难发现,二者将会求同存异,各自发挥自己的特长,从而使我们能构建出更加强大的应用程序。

Sun 收购JRuby的同时,Charles Nutter JRuby 的核心开发者之一, Thomas Enobo也加入了Sun。这似乎能够让我们把Ruby和Java联系在一起,Sun公司如果能够在JVM上做充足的投入,更好地支持动态语言, 拥抱新的事物,依托Sun公司的强大实力和其自身独特的优点,Ruby必将会有巨大的市场,同时,Ruby也需要一个过渡期,在市场中得到验证,让更多的 人去使用它,但就目前来讲Ruby已经从暗流涌动,开始扬帆远行!

2009年2月20日星期五

关于捆绑ie

总是时不时的看见某家浏览器公司,某个谁站出来说微软捆绑ie是垄断等等。

然后就会看到一群人在那里吵的不可开交,多半开始吵的原因的是扯到win和linux了。

win捆绑ie,让ie一家独大。这点也许确实是让ie占很大市场的主因。但是要是你自己做的浏览器确实很好,好过ie,而且在宣传上做的也不错话,你还会只有那么点市场份额么。桌面上难道多了个ie图标,就说明大家都会用ie么。我个人认为,与其花精力在状告微软上不如,把精力话在市场推广,和自身发展上。firefox一度占有率上升,就取决与推广。

其实由于专业的原因,现在几个主流的浏览器都装着。用下来日常opera,确实最让人觉得舒服。但是由于网站支持的问题,有时还要切换到ie上。opera是个非常优秀的浏览器,但为什么市场份额,这么低呢?永远孤芳自赏,这是不行的。推广力度不够。

网站是否兼容其实是相互的,某个浏览器市场份额大了,当然制作网站时,就会相对应的兼顾。(抱怨下,制作网页让每个浏览器都支持,真不是件容易的事情,ie6,ie7,ff,safari,opera,chrome哪个程序员会这么有空,一个一个测试,调整的。其实很希望能有浏览器一统天下,当然flex,silverlight,javafx也将是解决办法,扯远了=。= |||)

现在设想,微软答应不捆绑,会出现什么情况呢。大多人会处于习惯装完win后安装ie,或在安装的时候有ie选项打上钩。不改变任何问题。所以说与其期望微软放弃捆绑ie,不如大力宣传自己,努力体改自己产品的竞争力。

2009年2月17日星期二

感谢金融危机 破窗原理

这次的金融危机,甚是可怕,每天都能看见网上看的某某知名企业裁员多少人。哪个国家的哪项经济指标同比下降了多少等等。

但我也看到了很多因为这次金融危机的破窗原理,加大加快开发创造的现象。

windows7 明显提快了上线的速度。照常理来说这样肯定会影响到vista的销量,但是确实提前了上线的时间。
另外看现在的智能手机业,真可谓是百家争鸣,百花齐放了。

很多原本不做手机行业的如acer,华为,也都加入了进来。当然得感谢iphone的先驱作用和google的Android的推出。现在智能手机的迅猛发展,将可以带动手机软件的市场。外加上3g的推广,那手机上网网速的枷锁也将解除,那是手机网站,sns,等的网点,软件,又将是一块新天地。外加上云的推广,手机软件业不可小觑。

这次金融危机,进一步让世界认识,中国的重要性,以及中国在世界的地位。

金融危机的危害可以想象,危机也是机遇。笑对危机者,将立于不败之地。