vim一些高级替换技巧

vim中一些高级替换技巧

1.替换变量
在正规表达式中使用 \( 和 \) 符号括起正规表达式,即可在后面使用\1、\2等变量来访问 \( 和 \) 中的内容。
example:
·将 data1 data2 修改为 data2 data1
———————————–
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1
———————————–
·将 Doe, John 修改为 John Doe
———————————–
:%s/\(\w\+\), \(\w\+\)/\2 \1/
———————————–
2.利用函数式替换
用法:
—————————
:s/替换字符串/\=函数式

发表在 Linux | 标签为 | 留下评论

ARGB颜色合成与提取公式

色彩合成:
设alpha,red,green,blue都是0~255之间的数
color32 = alpha << 24 | red << 16 | green << 8 | blue;

色彩提取:
alpha = color32 >> 24;
red = color32 >> 16 & 0xFF;
green = color32 >> 8 & 0xFF;
blue = color32 & 0xFF;

发表在 as3&webgame | 标签为 , | 留下评论

公司注册流程

工商局流程:
一、查名(需1周时间)
所需材料:
1、 全体投资人的身份证复印件(投资人是公司的需要营业执照复印件)
2、 注册资金的额度及全体投资人的投资额度
3、 公司名称(最好提供5个以上)、公司大概经营范围。
二、 验资(即办即完)
凭工商所核发的查名核准单及银行询证函去银行办理注册资金进账手续,办理完后从银行领取投资人缴款单和对账单,随后由会计事务所办理验资报告。
三、 办理营业执照(需2周时间)
所需材料:
1、公司董事长或执行董事签署的《公司设立登记申请书》
2、公司申请登记的委托书
3、股东会决议
4、董事会决议
5、监事会决议
6、章程
7、股东或者发起人的法人资格证明或自然人身份证明
8、董事、监事、经理、董事长或者董事的任职证明
9、董事、监事、经理的身份证复印件
10、验资报告
11、住所使用证明(租房协议、产权证)
12、公司的经营范围中,属于法律法规规定必须报经审批的项目,需提交部门的批准文件
资料齐全后报工商局审批 ,随后核发营业执照

税务局流程:
办理税务登记证(需2周时间)
一、准备材料
所需材料:
1、《企业法人营业执照》原件、复印件各一份
2、《组织机构统一代码证》原件、复印件各一份
3、《验资报告》原件、复印件各一份
4、企业章程或协议书或可行性研究报告或合同书原件、复印件各一份
5、法定代表人、财务负责人和办税人员的《居民身份证》原件、复印件各一份
6、经营地的房产权或使用权或租赁证明(加贴印花税)原件、复印件各一份
二、提出登记申请,领取税务登记表及其他附表,并如实填写有关内容
三、报送税务登记表,审查税务登记表及提供有关文件及证件
四、案头核审并审批
五、打印税务登记证并领取税务登记证

注册完毕后的后续事项
1、 去税务所进行税种登记,确定公司的性质(贸易型税率4%、生产型6%、服务型5%等)
2、 去税务所进行税种核定,确定企业所得税的征收方式(查账征收一年一交:税率为纯利3万以下交18%,3-10万交27%,10万以上交33%;核定征收一月一交,税率基本为2.31%)
3、 去税务所进行购买发票申请,确定公司购买发票的种类
4、 每月1-10之间需进行报税,或代理或直接去都可。

发表在 私人日志 | 标签为 , | 留下评论

AS3位运算

左位移几就相当于乘以2的几次方( Left bit shifting to multiply by any power of two )
//将一个值向左侧移动一位与这个值乘以 2 等效 。浮点数通过舍去小数点后面的所有位来转换为整数。
大约快了300%

x = x * 2;
x = x * 64;
//相当于:
x = x << 1;
x = x << 6;

右位移几就相当于除以2的几次方(Right bit shifting to divide by any power of two)
//将一个值右移一位等效于将它除以 2 并舍去余数。浮点数通过舍去小数点后面的所有位来转换为整数。
大约快了350%

x = x / 2;
x = x / 64;
//相当于:
x = x >> 1;
x = x >> 6;

Number 到 integer(整数)转换

在AS3中使用int(x)快了10% 。尽管如此位操作版本在AS2中工作的更好

x = int(1.232)
//相当于:
x = 1.232 >> 0;

提取颜色组成成分

不完全是个技巧,是正常的方法 (Not really a trick, but the regular way of extracting values using bit masking and shifting.)

//24bit
var color:uint = 0×336699;
var r:uint = color >> 16;
var g:uint = color >> 8 & 0xFF;
var b:uint = color & 0xFF;
//32bit
var color:uint = 0xff336699;
var a:uint = color >>> 24;
var r:uint = color >>> 16 & 0xFF;
var g:uint = color >>> 8 & 0xFF;
var b:uint = color & 0xFF;

合并颜色组成成分

替换值到正确位置并组合他们 (‘Shift up’ the values into the correct position and combine them.)

//24bit
var r:uint = 0×33;
var g:uint = 0×66;
var b:uint = 0×99;
var color:uint = r << 16 | g << 8 | b;
//32bit
var a:uint = 0xff;
var r:uint = 0×33;
var g:uint = 0×66;
var b:uint = 0×99;
var color:uint = a << 24 | r << 16 | g << 8 | b;

使用异或运算交换整数而不需要用临时变量

很可爱的技巧, 在本页顶端的链接里有详细的解释 ,这里快了 20%

var t:int = a;
a = b;
b = t;
//相当于:
a ^= b;
b ^= a;
a ^= b;

自增/自减(Increment/decrement)

这个比以前的慢不少,但却是个模糊你代码的好方法;-)

i = -~i; // i++
i = ~-i; // i–

取反(Sign flipping using NOT or XOR)

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

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

使用bitwise AND快速取模 (Fast modulo operation using bitwise AND)

如果除数是2的次方,取模操作可以这样做:

模数= 分子 & (除数 – 1);

这里大约快了600%

x = 131 % 4;
//相当于:
x = 131 & (4 – 1);

检查是否为偶数(Check if an integer is even/uneven using bitwise AND)

这里快了 600%

isEven = (i % 2) == 0;
//相当于:
isEven = (i & 1) == 0;

绝对值

忘记 Math.abs()吧 (Forget Math.abs() for time critical code.)

version 1 比 Math.abs() 快了2500% ,version 2 居然比 version 1 又快了20% !

//version 1
i = x < 0 ? -x : x;
//version 2
i = (x ^ (x >> 31)) – (x >> 31);
发表在 as3&webgame | 标签为 , | 留下评论

如何在七天内完成游戏原型[转]

原文出处:How to Prototype a Game in Under 7 Days: Tips and Tricks from 4 Grad Students Who Made Over 50 Games in 1 Semester

本文是于 2005 年时发表的文章,虽然距今已有几年历史了,但绝对无损这篇文章的价值。同时,本文也与极具创意的优秀独立游戏作品《World of Goo》,有非常深的渊源以及关连性存在。

Kyle Gabler、Kyle Gray、Matt Kucic 与 Shalin Shodhan 是四位就读于卡内基美隆大学 (Carnegie Mellon University) 研究所的学生。在 1 个学期的时间内,他们仅仅凭藉着 4 个人的力量,完成了超过 50 个游戏的原型 (Prototype)!同时他们也设置了一个名为 Experimental Gameplay Project 的网站发表他们所制作的各款游戏原型;其中最受欢迎的游戏之一,就是由 Kyle Gabler 所制作的《Tower of Goo》,而这个游戏原型也正是《World of Goo》的前身作品!

为了达到 1 个学期之内完成 50 款游戏原型作品这项近似于不可理喻且不可思议的目标,他们将自己锁在房间内,遵循着以下三项规则进行开发工作:

  1. 每个游戏必须在 7 天以内完成。
  2. 每个游戏必须从头到尾以 1 人之力完成。
  3. 每个游戏必须立基于一般常见的主题,例如「重力」、「植物」或「群聚生物」等等。

7 天,1 人,以及 1 个主题,制作成为一个游戏原型作品。许多人好奇他们是如何在这么短的时间内完成一款 游戏原型作品?又是如何能够维持上述规则与纪律,长达一整个学期之久?在此,四位作者共同将这段过程中所学习到的各种宝贵知识,包括正确以及不可行的尝试 经验沈淀整理之后,分为准备、设计、开发以及游戏性四个项目,一一阐述如下:

准备:敏捷,是一种意向的状态

敏捷式原型开发 (Rapid Prototyping),不只是前置开发时期的有用工具,同时也可以是一种生活方式。从思维层面出发,首先要使自己的心理状态合乎「敏捷」的原则,才能够真正成为一位敏捷式的原型开发者。首先,第一步就是要乐于拥抱失败的可能性。

优秀的原型开发者能够瞭解,失败是一件可以接受的事情!而那也正是建立原型的目标,所以请大胆地放手去做吧!万 一最终真的失败了,也能够从其中的过程学习到某些具有价值的经验,并且唯有藉由拥抱失败的可能性,才有可能得到有所回报的实验结果。在 Gray 所制作的《Mime After Mime》与《A Mime to Kill》中,很大胆地只使用位置性音源 (Positional Audio) 做为游戏性 (Gameplay) 的来源;虽然这两个游戏是全然失败的作品,但也充分证明了仅有音源游戏性的游戏设计概念,是一项不可行的作法。

坚持实行极短的开发週期,是另外一项快速开发的诀窍。开发者们似乎会很自然地说:「嘿,既然我们在 1 週内完成了一个很棒的游戏,那么如果我们花费 2 週的时间进行开发,我们将会得到一个 2 倍优秀的游戏作品!」事实上,他们发现一般来说,任何游戏性都能够有效地在一週内完成原型建置;额外的投入时间,总是会倾向于产生功效递减的结果。举例来 说,有些原型仅仅花费一个晚上的时间组装完成,另外有些原型则使用了额外的一两週时间,而令人意外的是,每个原型所花费的时间,与其最终获得的成功程度, 并没有相互关连性存在。

在他们所制作出的成功游戏原型中,多数都是出自于特定的主题,他们曾经探索过的主题包括了「重力」、「弹簧」、「演化」、「声音」、「植物」与「平衡」等等。不知为何,当有限制存在的时候,反而会更易于产生创意。 另外,与团队成员同时进行某个特定主题的原型开发,某种程度上也能够避免着力于太过显而易见的游戏性,迫使所有人都必须接受挑战,探索在这个主题下的所有 游戏性的可能性。如果缺少了稳固明确的主题限制,游戏将会花费更多的时间创造,同时也会减损团队的方向目标,以及那种使他们能够挤压出最后一滴创造能力的 友善竞争感。

每一位团队成员都必须能够独立面对并且负责游戏开发的所有面向,包含程式、美术、声音以及其他所有将成为最终成品的必需品。但是个人的才能并不代表一切,团队成员必须体认到对于这种形式的开发方式来说,「设计」才是至高无上的准则,而包括程式、美术与所有其他的东西在内,都只是为了服务最终的设计结果而存在。一位不具备这种思维的优秀工程师,将不会比完全瞭解这项关键要点的平庸工程师来得更为成功。

当团队建立完成后,他们就开始停止与其他成员一起工作。「啥?这样还算是团队吗?」听起来或许有些奇怪,但是四个人分头并进,同时开发四个游戏原型的「不协同合作」方 式有许多益处,像是减少风险(四个成品中至少会有一、二个成功的结果)、友善竞争感、更广阔的主题探索(避免设计出与别人相同的游戏性),以及相互分享彼 此所习得的知识。在每个原型开发週期的起始和最终阶段,团队合作是最具有价值的期间,而当进入开发期之后,与其他成员一起工作只会造成分心,而无法产生良 好的正面效应。

设计:创意以及脑力激盪之谜

A great idea takes a split second to happen, but waiting for that lightning to strike can be excruciating.

Tower of Goo

一个伟大的点子或许能够在须臾间诞生,然而等待那个被闪电击中的时刻,却会使人备受痛苦与折磨。各位应该都听过「脑力激盪」 (Brainstorming) 这项引导创意思考的团体活动吧!他们曾排定脑力激盪的会议,尝试过各种不同的创意发想方法,最后在他们开发出来的全部游戏里,没有任何一个作品是出自于团 体脑力激盪议程所得出的成果,这实在是一项相当令人挫败且震惊的结论。经过许多次的研究后,他们终于发现了一个事实:「你就是无法为创意安排时程。」(You just cannot schedule creativity.) 你不能够说:「嘿,我们的计画是在 4:15 时开始脑力激盪,然后到了 5:00 我们就能得到 4 个超杀的绝妙点子,然后就可以开始动手了!」不过,脑力激盪至少能够使团队开始进行思考。

做为脑力激盪方式的替代方案,他们发现蒐集美术与音乐材料,特别有助于创造出具有情感的目标。以《Tower of Goo》为例,这个游戏背后的想法,源自于当 Gabler 听完了《Tango Apasionado》(电影《春光乍现》的主题曲)曲目后,在回家的路上,想像在某一个小镇里,当太阳下山时,镇上的每个人都扛起他们的桌子椅子或其他东西走出房子,为了某个神秘的理由,试图堆叠建立起一座高耸入云的巨塔,毫不停歇地向上攀升;然而这些居民并不是很称职的工程师,所以玩家必须协助他们建造这座高塔。

为了制作出令人喜爱的游戏,你必须先在脑海中想像玩家们会如何发出「哇!」的赞嘆声,然后依循此目标由后向前进行各项设计与开发。对于他们多数充满 乐趣且获得成功的游戏作品,其实并不是令人感到意外的结果。在最佳的状况下,甚至在动手开始写任何一行程式码之前,就已经能够明确知道游戏点子是否稳固, 因为他们已经事先在自己的脑袋中运行了模拟与实验的程序。没有任何游戏是偶然或者意外成功的;在见到成品之前,最终的成果早已昭然若揭。

开发:没有人知道你如何达成,也没有人会在乎

当你想出了绝妙的游戏点子后,接下来就是要在很短的时间内开发出游戏原型。首先,必须从核心机制 (Core Mechanic) 开始着手动工,建造出一个「玩具」; 所谓的玩具,应该是核心机制减去任何游戏层面的实质目标或决定。不论该原型的核心机制是弹簧系统、生物群聚行为、重力机制或者其他系统,最多只会花费几个 小时的时间就能够建构完毕。玩具并不存在赢或输的状态,只是一个有趣且可供玩耍的小玩意儿。先打造出玩具,能够让开发者及早确认核心游戏性的稳固性,并且 找出设计层面的潜在问题。

在专案的进行过程中,他们所学到最重要的一课就是:「正确」的解决方案,通常不是最佳的解决方案。策略性地使用 伪装的方法,能够节省你的时间与金钱,使你能够更快速地制作游戏。当你能够使用可预先制作的贴图,就不要设置复杂的光影系统;当你能够使用同样的效果蒙混 过去时,就不要设置样式辨识系统以分析图画;当你能够延展点阵图达到相同且快速的效果时,就不要画出 Spline 曲线或者制作向量图形函式库。请大方而且经常性地进行伪装吧!

刚开始进行游戏原型开发时,每个人都会有种想要拯救所有东西的渴望:「只要再多花一点点时间与努力,一定能够把一个本来很糟糕的游戏,转变成一个很 棒的游戏成品!」然而事实并非如此。以「弹簧」主题的游戏原型为例,起先是以一个非常精巧的弹簧系统做为出发点,结果到最后反而无法使这个核心机制转化成 为一个优秀的游戏。对于原型开发者来说,必须要能够迅速辨认出已走入死路的游戏点子,然后断然地终止花费于其中的损失,继续朝着下个目标前进。比起花费时 间试图拯救既存的程式码,保持开发时程的纪律与自发性更为珍贵。

如果原型的游戏性差劲透顶,就不会有復原的方法,即使放入了许多精美而丰富的内容物,也无法使游戏获得救赎。所有的美术、音乐以及衍生物内容,都无法使糟糕的游戏性最终转变成一个优秀的游戏,玩家很快就会发现在精美的图像与动人的旋律中,其实游戏本身并没有深厚的内涵,而不过是虚有其表而已。虽然如此,但游戏的整体美学仍然很重要;一个经过仔细琢磨的游戏,的确能够使一个好游戏变得更具可玩性,提供给玩家更好的游戏体验。

需要再次提醒的是,一位优秀的工程师未必能够成为一位优秀的敏捷原型开发者。「正确性」或「復用性」的解决方案通常不是敏捷原型开发者所追求的目 标。面对每个问题与挑战,敏捷原型开发者必须要能够想出一堆解决方案,并且从中选择最快的方法。如果陷入了过度工程 (Over-Engineering) 的迷思当中,最终成果很容易产出一般性的工具或是技术展示程式,而非一个真正可玩的游戏。请记得:对于游戏原型的最终使用者们来说,他们从不会看见你的伟大工程技术,而且他们也不会在乎。

游戏性:官能领域中的「多汁」乐趣

复杂的东西未必具有乐趣。如果人类能够在几千年来,以各种不同的「球与平面」发展成各种球类运动来娱乐我们自己,那么游戏开发者或许在游戏乐趣的尝 试上太过于努力了。想想《Tetris》、《Pac Man》以及其他的经典机台游戏,我们完全有可能使用基本的元素制造出丰富的游戏乐趣。透镜炫光、凹凸贴图以及其他新技术很不错,但它们并不能使游戏变得 更加有趣。请先向你自己证明,以一个简单的游戏原型来说,你的核心机制的确具有价值存在;当你确信之后,就可以更进一步地装扮它,使它变得更加闪亮动人。

On A Rainy Day

在不断发想、制作以及发表原型作品的过程中,他们发现具有最高可重复游玩价值的游戏,是那些拥有某种创造或客制化层面的游戏,例如像是「用手和雨伞 制造出一棵怪树」、「画出你的房子」、「建造你的高塔」或是「演化你的变异种族生物」等等游戏目标。只要提供给玩家独一无二的「所有权」感觉,就能够使他 们满足而且想要获得更多的乐趣。实验并不意味着复杂。在这项计画的早期,他们所制作出来的游戏,往往远超过这些游戏应有的复杂度;不只是使用者介面令人困 惑,而且按键对应至行动的方法也不够自然直觉。

对于以撰写程式为乐的人来说,请记得如果没有游戏性的目标,游戏原型就只是个「玩具」,而不是个「游戏」。所谓的游戏性目标,可以是任何东西,例如:在 X 时间内蒐集 Y 个元件,或是保持系统的稳定度,或是通过这个空间并且不触碰任何阻碍物体等等。而他们发现最佳的游戏目标,是如同《Tower of Goo》中与生俱来的游戏性,也就是不断地向上建造高塔而已。

最后,请记得让游戏看起来很「多汁」(Juicy)!「多汁」所代表的意思,就是游戏中接连不断而且丰富的「使用者回应」(User Feedback) 设计。 当你碰触它的时候,多汁的游戏会跳动、摇动、喷射并且发出一点声响,让玩家感觉它像是活生生的,而且会对于你所做的每件事情做出回应。使用者回应是游戏中 比较微小却非常关键的要素,能够让玩家感觉自己是真正掌控着游戏世界中的一举一动,并且藉由每次的互动行为,训练玩家逐渐熟悉游戏所制订的种种规则。

进行敏捷式的游戏原型开发,就像是孕育自己的小孩一样,或许未必每次都会有美好的结果,但你总是能够从每次的经验中学到些什么新的东西。无论如何,这些过程与结果通常都非常好玩!整理以上四项内容,可以归纳出下列纲要:

准备:敏捷,是一种意向的状态

  • 拥抱失败的可能性——它会鼓励开创性的风险承担
  • 坚持实行极短的开发週期(更多的时间不等于更好的品质)
  • 限制创意能够使你渴求更多
  • 召集优秀的团队成员以及一位客观的顾问——思维与才能同样重要
  • 平行开发以获得最大化的成果

设计:创意以及脑力激盪之谜

  • 正式的脑力激盪程序只有 0% 的成功率
  • 聚集概念美术与音乐以创造情感化的目标
  • 在你的脑袋中模拟——前置开发你的原型

开发:没有人知道你如何达成,也没有人会在乎

  • 首先建立玩具
  • 在可接受的情况下使用伪装
  • 终止你的损失并且学习如何断然捨弃
  • 着重于游戏内容物无法救赎差劲的设计
  • 整体美学仍然重要——运用有益的美术、声音与音乐
  • 没有人会在乎你的伟大的工程技术

游戏性:官能领域中的「多汁」乐趣

  • 复杂未必代表乐趣
  • 创造出所有权的感觉使玩家想要获得更多
  • 实验并不意味着复杂
  • 朝向具有良好定义的目标建置开发
  • 让它多汁!

在游戏开发领域中,游戏原型究竟具有什么样的重要性?在投入庞大的资源与人力之前,如果可以预先进行游戏概念或者核心机制的原型开发,不仅能够早期验证游戏设计的良窳与否,更有机会大幅降低专案开发时期的风险, 避免到了专案中后期时才发现「这种玩法根本不有趣」的残酷事实,而只能够将已完成的游戏机制整个砍掉,然后重新来过。由知名游戏制作人 Will Wright 所主导的游戏《Spore》,在开发时期中甚至制作了上百款游戏原型,用以验证游戏中的各项设计机制与表现细节。他们也很大方地在游戏的官方网站上公开其 中数款游戏原型,让感兴趣的玩家自行下载。

Super Tummy Bubble

之前偶然从 Gamasutra 的档案库里翻出这篇数年前的好文章,我觉得自己实在是非常非常地幸运!由这四位作者共同发起的 Experimental Gameplay Project,竟然能够在短短的一个学期内,完成超过 50 款游戏原型。不仅要在极为紧迫的週期内,完成游戏原型的开发工作,同时又要兼顾忙碌的研究所课业,一般人可能在制作出几个作品后就会产生放弃的念头,他们 却能够保持纪律持之以恆地进行这项专案,绝对是一项相当难能可贵的成就。如果我是教授游戏开发课程的教师,我一定也会很乐意依循着这样的模式与原则,指导 学生们进行如此具有乐趣与学习效果的游戏原型开发专案!

对于身处程式设计领域的人来说,即使你不知道如何制作精美的图片、不懂得如何谱出美妙的音乐,但只要你的脑袋里装满了「做出来应该会很有趣」的游戏点子,不妨大胆地放手一试吧!「左手只是辅助,工具也只是辅助。」不 论你熟悉的开发工具是 OGRE、SDL、Torque 或者自己打造的引擎,条条大路通罗马,这些工具全都能够协助我们到达游戏开发疆土中的美丽境界。而对于美术、设计或具有其他专业的人来说,即使你所擅长的 技能并不是程式设计,但只要能够学习使用 Flash 以及简单的 ActionScript 语法,同样能够以简单的工具创造出令人赞嘆的游戏原型。

以前的我,总认为如果想要制作一款游戏作品,必定要经过非常缜密的规划与周全的设计,才能够真正开始着手动工:「一定要有一个非常棒的游戏引擎,一 定要有一个前无古人后无来者的游戏点子,一定要有一份超级详尽的游戏设计文件,一定要……」有许许多多的先决条件存在,一定要满足了这些条件以后,才能真 正开始动手撰写游戏。但是过度的顾虑与计画,最后反而成为理想实践道路上的最大阻碍。所以与其戒慎恐惧而迟迟不敢跨出一步,不如豪迈地向前跨出步伐,大方拥抱包括失败在内的一切未知性与可能性吧!

阅读完这篇文章以后,给了我很大的鼓舞与激励,我也已经下定决心,准备要开始动手尝试游戏原型的实验开发计画。你呢?Happy Prototyping! :)

发表在 as3&webgame | 标签为 , | 留下评论

监控系统的平均负载

1.为什么要监控系统的平均负载?
有时我们会感觉到系统响应很慢,但是又找不到具体原因,这时要查平均负载,检查是否有大量的进程在排队等待

2.平均负载是什么?
特定时间间隔内运行队列中的平均进程数,好象还不够明白:就是进程队列的长度,有多少个进程在排队等待运行

3.什么是”进程队列”?
一个进程满足以下条件就会位于进程队列中
A>它没有在等待I/O操作的结果
B>它没有主动进入等待状态(即没有调用wait)
C>它没有被停止

4.如何查看平均负载?
最简单的命令是 uptime
bash# uptime
00:44:22 up 1:17, 3 users, load average: 8.13, 5.90, 4,94

5.显示的内容是什么意思?
load average: 8.13,5.90,4,94
显示的是过去的1,5,15分钟内进程队列中的平均进程数量

6.如何衡量当前系统是否负载过高?
如果每个cpu(可以按CPU核心的数量计算)上当前活动进程数不大于3,则系统性能良好,
不大于4,表示可以接受
如大于5,则系统性能问题严重
上面例中的8.13,如果有2个cpu核心,则8.13/2=4.065, 此系统性能可以接受
建议设置严格的报警值为: CPU核心的数量
比如:CPU核心数量为2,则设置报警值为2
(这样设置是合理的,因为毕竟不是每个应用都支持多CPU及多核心)

7.其他查看平均负载的命令

tload    #能够绘制出负载变化的图形
uptime   #同时显示开机以来的时间
w        #同时显示出已登录的用户
top      #这个对资源占用太高,不建议使用
cat /proc/loadavg   #通过/proc系统信息得到平均负载

8.如果你要持续的观察平均负载,建议用 watch uptime 或 watch cat /proc/loadavg
关于watch:每隔一定时间执行指定的程序,并全屏显示结果。时间默认是2秒

发表在 Linux | 标签为 , | 留下评论

10个百度统计热力图邀请码

十个百度统计热力图邀请码,先到先得,速抢啊!
beebc56e74d1c29f
5104a35687ab7878
5710818c7ab83c08
671332919a7ea81d
599f5b1a2f5aa2c9
f65cc2fc064de104
b9c52549be0e5774
fe2570c80620f444
52787315b1fd6192
d76a7ad5a688d775

新增
b580cbc46b49473b

发表在 做站心得 | 标签为 , , | 留下评论

CentOS 6.0正版发布,附下载地址

经过一轮一轮的跳票过,CentOS 6.0 终于出现了,虽然现在 CentOS 官方还没有出现 CentOS 6.0 正式发布的相关消息,不过在外部的镜像服务器里已经有了 CentOS 6.0 的镜像文件。RHEL 6 也出来很久很久了,CentOS 6 应该到了!CentOS 是 RHEL(Red Hat Enterprise Linux)源代码再编译的产物的免费版,它继承了 Red Hat Linux 的稳定性,而且又提供免费更新。因此,它在IDC中装机量几乎是最大的一个 Linux 发行版。

CentOS 6.0 正式版下载地址

CentOS 6.0 64 位

CentOS-6.0-x86_64-bin-DVD1.iso 07-Jul-2011 15:18    3.9G
CentOS-6.0-x86_64-bin-DVD2.iso 07-Jul-2011 15:18    1.1G
CentOS-6.0-x86_64-netinstall.iso 07-Jul-2011 15:07   211M

CentOS 6.0 32 位

CentOS-6.0-i386-bin-DVD.iso 07-Jul-2011 14:52 4.4G
CentOS-6.0-i386-netinstall.iso 07-Jul-2011 14:49 173M

由于 CentOS 在IDC的 Linux 系统服务器中装机量是最大的,因此它的每一次升级都受到了业内的高度关注,同时也会掀起一波升级的系统的热潮。每一次大的版本更新都会进一步提高安全安全 性能,提供更多的硬件支持和性能改善。当然也不建议在生产环境的服务器上轻易升级。最后大家 enjoy !!

发表在 Linux | 标签为 , | 留下评论

无需翻墙,直接访问Google+

203.208.46.29 plus.google.com
203.208.46.29 talkgadget.google.com
203.208.46.29 picasaweb.google.com
203.208.46.29 lh1.ggpht.com
203.208.46.29 lh2.ggpht.com
203.208.46.29 lh3.ggpht.com
203.208.46.29 lh4.ggpht.com
203.208.46.29 lh5.ggpht.com
203.208.46.29 lh6.ggpht.com
203.208.46.29 lh6.googleusercontent.com
203.208.46.29 lh5.googleusercontent.com
203.208.46.29 lh4.googleusercontent.com
203.208.46.29 lh3.googleusercontent.com
203.208.46.29 lh2.googleusercontent.com
203.208.46.29 lh1.googleusercontent.com

附:
分享给经常性改 hosts 文件的朋友:

notepad “%SystemRoot%\system32\drivers\etc\hosts”
ipconfig /flushdns
exit

复制以上内容然后保存为 .bat 格式,双击就可以方便地更改 hosts文件了。适用于 Windows 系统。(此方法最初是由Shiverse Zheng分享的)

我的 G+: https://plus.google.com/102407852192198986693

发表在 未分类 | 标签为 , , | 留下评论

如何去掉PNG的Alpha通道(转)

为PNG去除Alpha通道的方法很多,设计师可以使用PS或Fireworks。
为什么要为PNG图形去除Alpha通道,一张图片通常由 RGBa4个标识位构成,称为32bit图片。而目前大多数移动设备上,用Flash创作应用,无法很有效的支持Alpha通道,图片都是24bit的。 所以,将PNG用于移动应用开发,先要去除Alpha通道,以此做到第一步优化。

这里的简单方法:
1.下载Pngcrush工具,地址 http://pmt.sourceforge.net/pngcrush
2.使用以下命令行:pngcrush -cc originalwithalpha.png newwithoutalpha.png

原文:http://www.7yue.com/post/461.html

发表在 as3&webgame | 标签为 , , | 留下评论

Flash开发者将成为中国移动开发市场的黑马(转)

之前,一说起移动开发,大家只会想到Android开发者和iOS开发者, 而认为Flash程序移植在Android和iOS设备上不靠谱,与移动开发无缘。 但事实上,这个信息和观点已经过时。3月27日下午,在全球最大的Flash社区9RIA.com超500人的开发者大会上,传出一个清晰的信号:
庞大的Flash开发者群体即将进军移动开发!

新浪微博也对本次主题“移动与3D”的Flash开发者大会很重视,到大会现场为我们架设了专门的直播频道
weibo.jpg

我在会议上演示了Flash移植到Android M9手机上的Flash小游戏,效率达到了20.4-27帧/秒,占用内存4M-8M左右,已经能满足大多数手机游戏用户的体验。

我认为,移动开发将是Flash开发者4年以来面临的最大机遇,Flash开发者将扮演重要角色。理由:一大背景、三大原因
一大背景就是:现在移动端渴求内容相当一大部分都是轻量级娱乐化的应用,比如:小游戏、富媒体内容。这和中国现有PC上Flash内容和Flash开发者相当吻合,内容移植针对点强。
三大原因是:
一、 之前限制Flash开发者进军移动开发的两大门槛已经消失。
二、 Flash开发者目前的整体数量和开发质量超过年轻的Android和iOS开发者群体。Flash开发者数量充足,质优价美。
三、 基于Flash跨终端跨设备开发的绝对低成本优势。
因此,对内容和应用移植饥渴无比的业界,没有理由不重视Flash开发者在移动时代即将占据的巨大份量!

详细阐述Flash开发者的机遇原因:

两大门槛消失:性能门槛和iOS商业门槛。

1. 性能门槛消失:

a) 执行效率给力。

自从3月初,Adobe AIR 2.6发布之后, Flash在Android设备和iOS设备上的性能大幅提升,并且可以直接使用硬件加速。Adobe即将发布的基于Flash Runtime的Molehill3D技术,更是可以让Flash直接调用移动设备底层的GPU和OpenGL接口,进行高效率的3D渲染,而不占用 CPU。

b) 硬件性能提升

昨天在现场演示游戏的是M9,只是国内中端的Android机型。而且众所周知,M9的Android内核还有待改进。即使在这样的情况下,黑羽团 队移植的Flash小游戏依然轻松的跑到了全屏20多帧的效率上。Android设备性能日新月异,可以想象3个月后的Android设备是不是更加轻松 呢。而现场展示的盛大麻球手机游戏盒子,更是直接包含了60多款Flash手机小游戏,运行流畅。

2. iOS商业门槛
乔布斯大爷之前不让Flash开发的游戏和应用在AppStore上架,是Flash开发者心中的一个大痛。但实际上,这条限制在去年底已经消失,只是外 界不太知晓。据到场的Adobe专家Peter介绍,苹果早已经允许Flash开发的应用在商店中出售了,而Adobe也将在近两月内推出针对iOS应用 的Packager新版。现场有消息人士指,新版的iOS Packager能让Flash 开发的应用在iOS设备上的运行效率提高2-3倍。

Flash开发者数量充足物廉价美

下面是一些中国Flash开发者和Android开发者,iOS开发者对比的数据。 数量上,中国Flash开发者为34.5万,远超Android 5.33万和iOS 2.2万开发者人数。

从开发年限上,中国Android的40%和iOS开发者的48%只有半年不到的开发经验,中国Android的70%和iOS开发者中的78%的 开发年限不足一年。所以,之前艾媒咨询公司CEO张毅所言不虚:“虽然Android开发者数量增长快速,但真正出应用成品的开发者仅占15%~20%, 大部分开发者所开发的还只是半成品。”

相比之下,经过数年游戏开发市场的培养,Flash在一年以上开发经验的开发者占比64%,远远超过Android和iOS开发者。中国Flash游戏在全球的成功,也证明了中国游戏开发者的成熟。事实上,从2010年起,中国已经成为全球最大的Flash开发者聚集地。

更重要的是,这些Flash开发者一直以来就是进行富媒体开发和游戏开发的,这方面行业知识远比临时从其他语言转到移动开发上来的Android开 发者要靠谱。(当然我要在此声明,这是就总体而言。我有好些朋友是Android开发和iOS开发者,那意识也是一流的,不过这样的开发者毕竟在 Android和iOS占好少了。)

被行业催热的Android开发者和iOS开发者月薪像火箭一样给劲,但却拉高了移动行业的整体成本。相比之下,Flash开发者物美价廉。

Flash跨设备的巨大优势:不可抗拒的低成本诱惑

对内容生产商来讲,如何将内容低成本、快速的发布到各种终端设备上是头等重要的大事。 目前两大平台Android和iOS相互移植成本过高,再加上可能还有个PC端版本,更加头疼。 而Flash开发者天生可以利用Flash的跨平台优势。一个项目的核心代码和逻辑,无需重写和改动,只需改动屏幕布局和部分交互。因此,移植成本和开发周期大大降低。时间就是生命。 另外,如果计算周边的整套开发流程成本,Flash开发远远低于Objective-C、java。因为,美工设计人员、交互人员与Flash开发者的协作成本是最低的,都是一套Adobe公司类型的工具在整合使用。

再加上,Flash业界在游戏开发、富媒体开发上累积的多年优势,比如成熟的开发者社区、海量的第三方Flash开源工具、物理引擎、3D引擎等,其生态圈与移动开发颇有针对性。

总体而言,作为Flash开发者,没有理由错过这么好的机遇。作为轻量级内容生产商,没有理由不选择可跨平台的Flash开发者作为首选。
这就是3月27日会议上的重要讯息:
庞大的Flash开发者群体即将进军移动开发!
本活动由9RIA.com天地会主办,盛大麻球与Adobe协办,新浪微博现场架设直播频道。
现场综合报道贴和资料下载,持续更新:http://bbs.9ria.com/thread-77195-1-1.html

补充:
说了优势后,必须要说一下劣势:
1)Flash在移动端无论怎么优化,在执行效率上肯定还是比不上Objective-C等原生语言。在当前高端Android机型上,运行速度能到40 帧左右。但离苹果60帧左右的速率还有差距。但我认为,对于普通用户而言,20-30帧左右的屏幕流畅度已经足够,使用体验已经OK。要知道 AngryBird高清版在iPad上只有24帧左右的平滑度。况且硬件效能提升步伐很快,执行效率的提升也是OK的。
因此,如果你的应用极度强调效率,那么不要使用Flash开发移动应用

2)Flash目前不适合开发重型的移动应用
如果你的应用很复杂,逻辑很多,比如像新浪微博客户端一样,需要大量交互展示、处理图片和硬件交互。建议等Flex 4.5中的专门针对移动端优化后的组件框架出来后再试试。

原文:http://www.kingda.org/archives/kingda/2011/03/flash_6.html

发表在 as3&webgame | 标签为 , , , | 留下评论

vi按了Ctrl+S后假死的解决办法

使用vim时,如果你不小心按了 Ctrl + s后,你会发现不能输入任何东西了,像死掉了一般,其实vim并没有死掉,这时vim只是停止向终端输出而已,要想退出这种状态,只需按Ctrl + q 即可恢复正常

发表在 Linux | 标签为 , , | 3 条评论

AS3中的Endian类

flash.utils.Endian类
Endian 类中包含一些值,它们指示用于表示多字节数字的字节顺序。 字节顺序为 bigEndian(最高有效字节位于最前)或 littleEndian(最低有效字节位于最前)。

Flash Player 可通过使用服务器的二进制协议直接与服务器连接。 某些服务器使用 bigEndian 字节顺序,某些服务器则使用 littleEndian 字节顺序。 Internet 上的大多数服务器使用 bigEndian 字节顺序,因为“网络字节顺序”为 bigEndian。 littleEndian 字节顺序很常用,因为 Intel x86 体系结构使用该字节顺序。 使用与收发数据的服务器的协议相匹配的 Endian 字节顺序。

公共 常量
BIG_ENDIAN : String = “bigEndian”
[static] 指示多字节数字的最高有效字节位于字节序列的最前面。
十六进制数字 0×12345678 包含 4 个字节(每个字节包含 2 个十六进制数字)。 最高有效字节为 0×12。 最低有效字节为 0×78。 (对于等效的十进制数字 305419896,最高有效数字是 3,最低有效数字是 6)。

使用 bigEndian 字节顺序(最高有效字节位于最前)的流将写入:

12 34 56 78

LITTLE_ENDIAN : String = “littleEndian”
[static] 指示多字节数字的最低有效字节位于字节序列的最前面。
十六进制数字 0×12345678 包含 4 个字节(每个字节包含 2 个十六进制数字)。 最高有效字节为 0×12。 最低有效字节为 0×78。 (对于等效的十进制数字 305419896,最高有效数字是 3,最低有效数字是 6)。

使用 littleEndian 字节顺序(最低有效字节位于最前)的流将写入:

78 56 34 12

发表在 as3&webgame | 标签为 , , , | 留下评论

“我操”的四种说法

在姜文的电影《阳光灿烂的日子》中,马小军偷看老师上厕所时,用各种声调连说了好几句“我操”,十分有趣。我曾一度坚持“我操”是北京的骂人话,但是上了大学之后和来自各地的同学交流,发现他们说这个词的历史好像并不比我短多少。当时我还颇有一些优越感,以为家乡的骂人话传遍大江南北,说明本地方言很有生命力,但是周围也有不少人似乎并不同意“我操”是北京话。有人反驳说,“我从小就说这个,怎么成了你们北京的了?”可见“我操”早已成为很普遍的骂人话,究其根源似乎已经变得不再重要。鉴于这个小小的主谓短语已经如此流行,我根据自己的经验,总结了“我操”的四种说法,在此和大家分享。有很多很多人对于这个词的理解,水平远在我之上,如果认为我说的有什么不妥,欢迎指正。

1 wo3 cao4 表愤怒
这是这个词最标准的发音,但是实际上是最少用到的一种说法。因为很少有人会把这两个字如此郑重其事念出来。因此,一旦这么念了,所蕴含的意义也是很大的。我觉得这个读法是我操的所有念法中,带有最强烈感情色彩的读法,表达了说话人强烈的愤怒感情。当你面对眼前的局面,要表达自己的愤怒快要突破临界值的时候,可以选择这种用法。比如你遇到仇人,对方向你做了各种挑衅之后,你已经忍无可忍,马上就要出拳的一刻,可以使用这个念法。但是一定要注意字正腔圆,两个字都要发音饱满,嘴巴张大,声音洪亮。“我”和“操”要用一口气说完,但是说完”我”之后要有停顿。
具体的方法是,先撅嘴,之后缓缓将嘴张大,发出一个饱满的我,之后闭嘴,用舌头抵住上膛,阻止气息流通,此时的嘴唇是打开的,可以看到牙齿,相当于呲牙。当感觉口腔内气压已经足够时,便可突然打开舌头和牙齿,以“摩擦音”的方式发出“操”字。练习时可以用A4纸挡在嘴前,如果能用“操”字将纸吹动,就算是到位了。需要注意的是,千万不要变音,念标准的“我”和“操”,说操字的时候要控制住口型,嘴巴一定不要张得太大。总体而言,念我时相当于蓄力,之后操相当于击发,可视情况延长“我”的时间,但是要注意操的时间一定要比我长。
这个相当于最基本读法,其他的都由此简化衍生而来。
例句:[你收到了一封据信]wo3 cao4!
2 wo4 cao4 表惊叹
这种念法表达说话人对眼前事物的惊叹之情,褒义大于贬义。相比第一种念法,这种读法就要轻松许多。由于不需要表达愤怒感,不必追求气势,所以限制较少。把我念成卧,之后操字念完之后不必控制口型,可以稍微把嘴张大,得到夸张的效果。重音即可在前,也可在后,两个字的长度可以灵活掌握。
例句:[你听说某大牛拿到top1 offer] wo4 cao4!
3 wo1 cao1 表轻蔑
这是一种表示惊讶之中带有轻蔑的口气。可以说得稍微轻快活泼一些。我字一定要快,操可以适当拉长音,也可以说得很轻快。如果想表达惊讶大于轻蔑,可以把cao1换成cao4,wo介于一声和四声之间。
例句:[你听说连我都拿到了保底校的offer] wo1 cao1!?
4 wo3 cao2 表疑问
这种说法不带有蔑视色彩,但依然有总惊讶的感觉。比如你算一到题,算完发现正好是答案的二倍,就可以用这句话表达感慨。我字很快,快到几乎来不及发成三声,有点像一声的感觉,之后操适当拉长音,把调门挑上去。
例句:[你收到一个你没申的老板的邮件] wo3 cao2 ?
5 其他变化
除了第一种,我操很多时候都会和“哎呦”连用,哎呦的声调视我操的声调而灵活掌握。比如用第三种我操时,可读成 ai1 you1,用第二种时,可读成ai1 you1 ai1 you4或者 ai2 you4。
另外,还有一些念法,是在以上四种基本型之上演化而来的,比如 “我操~” 念成 wo3 cao2 cao4 表达一种较弱的惊喜感觉。熟练运用基本型之后,变体自然没什么难的,甚至可以发明自己的变体。
练习题:
喝一碗汤,喝出一只苍蝇,应该使用哪种我操?
喝一碗菜汤,喝出一只虾仁,应该使用哪种我操?
喝一碗汤,最后发现喝汤的碗是名贵的青花瓷,应该使用哪种我操?
喝一碗汤,汤里的鹌鹑蛋用筷子怎么也夹不住,应该使用哪种我操?

发表在 非技术相关 | 标签为 | 留下评论

忽略PNG透明区域的事件(AS/Flash)(转)

效果(左边的PNGLoader加截的png忽略透明,右边的为普通Loader):

PNGLoader与普通Loader区别演示

代码:

PNGLoader.as

package net.l4cd.display
{
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.geom.Matrix;
	import flash.net.URLRequest;
	import flash.system.LoaderContext;
	import flash.utils.ByteArray;

	/**
	 * PNGLoader,主要解决png图片透明像素处事件的问题
	 * @author L4cd.Net
	 *
	 */
	public class PNGLoader extends Sprite
	{
		private var loader:Loader = new Loader();
		private var hit:Sprite = new Sprite();
		public function PNGLoader()
		{
			addChild(loader);
			addChild(hit);
			hit.visible = false;
            hit.mouseEnabled = false;
            mouseChildren = false;
			hitArea = hit;
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,complete);
			loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,error);
			loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,progress);
		}
		private function complete(e:Event):void
		{
			dispatchEvent(e);
			update();
		}
		private function error(e:IOErrorEvent):void
		{
			dispatchEvent(e);
		}
		private function progress(e:ProgressEvent):void
		{
			dispatchEvent(e);
		}
		public function load(request:URLRequest,context:LoaderContext=null):void
		{
			loader.load(request,context);
			clear();
		}
		public function loadBytes(bytes:ByteArray,context:LoaderContext=null):void
		{
			loader.loadBytes(bytes,context);
			clear();
		}
		public function unload():void
		{
			loader.unload();
			clear();
		}
		public function close():void
		{
			loader.close();
			clear();
		}
		private function clear():void
		{
			hit.graphics.clear();
		}
		private function update():void
		{
			if(!loader.content)return;
			var bit:BitmapData = new BitmapData(loader.width,loader.height,true,0x00000000);
			bit.draw(loader);
			//重绘图象到bit
			clear();
			hit.graphics.beginFill(0);
			for(var x:uint=0;x<bit.width;x++)
			{
				for(var y:uint=0;y<bit.height;y++)
				{
					if(bit.getPixel32(x,y))hit.graphics.drawRect(x,y,1,1);
				}
			}
			//以graphics画出bit的无透明区域
			hit.graphics.endFill();
		}
	}
}

PNGLoaderExample.as

package
{
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.filters.GlowFilter;
	import flash.net.URLRequest;

	import net.l4cd.display.PNGLoader;

	[SWF(width="600",height="400")]
	/**
	 * PNGLoaderExample
	 * @author L4cd.Net
	 *
	 */
	public class PNGLoaderExample extends Sprite
	{
		public function PNGLoaderExample()
		{
			var pl:PNGLoader = new PNGLoader();
			pl.load(new URLRequest("10020601.png"));
			addChild(pl);
			pl.y = 20;
			pl.addEventListener(MouseEvent.ROLL_OUT,o);
			pl.addEventListener(MouseEvent.ROLL_OVER,o);

			var ld:Loader = new Loader();
			ld.load(new URLRequest("10020601.png"));
			addChild(ld);
			ld.x = 320;
			ld.y = 20;
			ld.addEventListener(MouseEvent.ROLL_OUT,o);
			ld.addEventListener(MouseEvent.ROLL_OVER,o);

			graphics.lineStyle(1);
			graphics.drawRect(20,20,250,250);

			graphics.drawRect(320,20,250,250);
		}
		private function o(e:MouseEvent):void
		{
			e.target.filters = (e.type == MouseEvent.ROLL_OVER)?[new GlowFilter()]:[];
		}
	}
}
发表在 as3&webgame | 标签为 , , , | 留下评论

flashdevelop 常用快捷键

1.文件夹搜索是Ctrl+I
2.注释//         Ctrl+Q
3.      /*…*/   Ctrl+Shift+Q
4. 代码提示   Ctrl+Alt+space
5. 复制一行   Ctrl+D
6. 交换行     Ctrl+T
7. ctrl+shift+1    自动完成代码,这个功能是FD代码提示最有用一个,他可以用来自动生成GET、SET,自动申明变量、方法,自动导入类(还有些以后补)
8. ctrl+b        范例代码        for、if等代码段的模板,只要按下这个键就可生成
9. ctrl+shift+k        颜色代码拾取器
10. ctrl+shift+f    代码收起
11. ctrl+shift+a     代码全部收起
12. ctrl+shift+e    代码全部展开
13. ctrl+shift+n   复制代码到一个新文件
14. ctrl+shift+i     生成了uid
15. F4    跳转到指定方法或类或变量被定义的地方
16. shift+f4    跳回到之前所有的地方
17. 选中代码段后–右键– Save As Snippet    保存为模板
18. ctrl+\    移到下个大写或标点或空格后
19. ctrl+]    移动下个空行后
20. ctrl+space 自动完成代码
21. ctrl+alt+space 自动生成代码

发表在 as3&webgame | 标签为 , , | 留下评论

使用[Embed]标签嵌入资源的压缩问题

当我们使用[Embed(source=.........)]标签将图片嵌入到swf中时,图片是不进行压缩的,这样使用嵌入资源方式开发出来的swf文件会很大。
而我们用CS4做出来的同样的swf文件却很小。

例如,我使用[Embed]嵌入一个图片,编译成swf,大小为1.5M,使用CS4导入图片到库中,然后做成swc在程序中调用,编译之后swf大小只有190KB。

怎么解决这样头疼的问题呢?

这里介绍一个工具Reducer,可以将生成的swf文件压缩处理。

官方连接:http://blog.joa-ebert.com/2009/08/08/reducer/

下载连接:http://www.joa-ebert.com/files/zip/reducer.zip

源码:http://blog.joa-ebert.com/2009/08/11/apparat-is-now-open-source/

使用方法:

java -jar reducer.jar -input old.swf -output new.swf

java -jar reducer.jar -input old.swf -output new.swf -quality 0.5

发表在 as3&webgame | 标签为 , , | 留下评论

使用ImageLazyLoad技术,对图片延迟加载

ImageLazyLoad技术,就是在下拉滚动条的时候加载图片,这种比较
适合一个网页上有很多图片的情况,例如我的网站:www.uucc5.com
满页都是图片,那么如果用户访问的时候,会在加载完整个页面等待很长时间,而用第一眼看到的只是第一屏的内容,所以第二屏、第三屏等的内容加载时间其实是
在浪费时间!如果用户只看了第一屏,而不翻屏就关掉了浏览器,那么第二屏第三屏下载的资源也是一中流量的浪费!
并且加载用户体验也不好!那么这就有了这个小技巧,使用javascript来实现图片缓冲,只加载用户要看的屏幕的资源,这个小技巧的好处是提高访问速
度,提高用户体验,对seo没有什么帮助!,不废话,说做法:

一、使用JQuery插件 ,插件名: jquery.lazyload(7kb大小),压缩后(3kb大小):

1.导入JS插件
<script src=”http://bchuan.com/jquery.js” type=”text/javascript”></script>
<script src=”http://bchuan.com/jquery.lazyload.js” type=”text/javascript”>
</script>
2.在你的页面中加入如下的javascript:
$(“img”).lazyload();
这将会使所有的图片都延迟加载。

当然插件还有几个配置项可供设置:
1.改变threshold
$(“img”).lazyload({ threshold : 200 });
把阀值设置成200 意思就是当图片没有看到之前先load 200像素。

2.当然了你也可以通过设置占位符图片和自定事件来触发加载图片事件
复制代码
代码如下:

$(“img”).lazyload({
placeholder : “img/grey.gif”,
event : “click”
});

3.可以通过定义effect 参数来定义一些图片显示效果
复制代码
代码如下:

$(“img”).lazyload({
placeholder : “img/grey.gif”,
effect : “fadeIn”
});

LazyLoad(延迟加载)技术不仅仅用在对网页中图片的延迟加载,对数据同样可以,Google Reader和Bing图片搜索就把LazyLoad技术运用的淋漓尽致;

缺陷:
1.与Ajax技术的冲突;
2.图片的延迟加载,遇到高度特别高的图片,会出现停止加载的问题;
3.写代码不规范的同学要注意了,不管由于什么原因,如果您的页面中,img标签的height属性未定义,那么我建议您最好不要使用ImageLazyLoad

二、使用淘宝的延迟加载技术:(2kb大小)
http://a.tbcdn.cn/kissy/1.0.0/build/imglazyload/imglazyload-min.js
调用方法也是很简单的:
<script src=”http://a.tbcdn.cn/kissy/1.0.0/build/imglazyload/imglazyload-min.js
type=”text/javascript”>
</script>
<script type=”text/javascript”>//
<![CDATA[KISSY.ImageLazyload();//]]></script>
注:该脚本依赖 yahoo-dom-event, 页面中需要加载 yui 2.x,你也可以直接引用下面的地址:
<script src=”http://kissy.googlecode.com/svn/trunk/third-party/yui2/yahoo-dom-event/yahoo-dom-event.js” type=”text/javascript”>
</script>

配置参数如下:

<script type=”text/javascript”>
KISSY.ImageLazyload({
mod: “manual”, // 延迟模式。默认为 auto
diff: 200 // 当前屏幕下多远处的图片开始延迟加载。默认两屏外的图片才延迟加载
});
</script>

manual 模式时,需要手动将页面中需要延迟加载的图片的 src 属性名更改为 data-lazyload-src. 比如 SRP 页面,宝贝列表的后20个图片延迟加载。 输出时,html 代码为:
<img data-lazy-src=”http://jianzi0307.blog.163.com/blog/path/to/img” alt=”something” />

如果您是Jquery,Prototype等这些JS框架的粉丝,他们都有定制的LazyLoad Plugin提供:http://www.appelsiini.net/projects/lazyload

LazyLoad(延迟加载)技术不仅仅用在对网页中图片的延迟加载,对数据同样可以。

{完}

btw: 编辑器好讨厌,一些链接自动替换为“http://jianzi0307.blog.163.com/blog/”,这种做法太SB,烦!!!!

发表在 做站心得 | 标签为 , | 留下评论

如何理解人民币升值?

2010年,一个美国人到中国旅游,此时人民币对美元的比值是6.8:1,于是老美用10万美元兑换到68万元人民币。老美在中国吃喝玩乐了一年,花了 18万元人民币,还剩下50万元人民币。

2011年,老美要回国了。此时人民币兑美元升值到5:1了,于是老美去中国银行用剩下的50万元人民币兑换到了10万美元。来中国时带了10万美元,回国去还是10万美元,老美白玩了中国人一回。

发表在 非技术相关 | 标签为 | 留下评论

滚动地图层的方法

玩rpg游戏的时候,会看到角色始终在屏幕中间移动,感觉是地图在动,人物位置不动,这是如何来实现的呢?

看了下面这个例子你便知道其中的道理,原理是利用DisplayObject的ScrollRect:

package
{
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Rectangle;
	import flash.net.URLRequest;

	/**
	 * 滚动地图的例子:
	 * 将window.x和window.y放在EnterFrame中,实时修改为角色走动的坐标即可实现地图平滑滚动
	 * 这里简单用鼠标点击坐标作为角色的位置
	 * jianzi 2010.7.8
	 */
	public class Main extends Sprite
	{
		//地图尺寸
		private static const mapWidth:int = 2762;
		private static const mapHeight:int = 1558;

		//地图入口坐标
		private static const enterX:int = 1000;
		private static const enterY:int = 1200;

		//滚动区域
		private var window:Rectangle;

		//地图层
		private var scene:Sprite

		public function Main()
		{
			//地图层
			scene = new Sprite();
			scene.graphics.beginFill(Math.random() * 0xffffff);
			scene.graphics.drawRect(0,0,mapWidth,mapHeight);
			scene.graphics.endFill();

			//加载地图
			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
			loader.load(new URLRequest("map.jpg"));
			scene.addChild(loader);
			addChild(scene);

			//滚动区域,设置为stage大小,定位地图在入口点(enterX,enterY)
			window = new Rectangle();
			window.x = enterX - stage.stageWidth/2;
			window.y = enterY - stage.stageHeight/2;
			window.width = stage.stageWidth;
			window.height = stage.stageHeight;
			this.scrollRect = window;
			this.addEventListener(MouseEvent.CLICK,onClick);
		}

		private function onComplete(e:Event):void
		{
			//......................
		}

		private function onClick(e:MouseEvent):void
		{
			var posX:Number = int(mouseX) - stage.stageWidth/2;
			var posY:Number = int(mouseY) - stage.stageWidth/2;
			if (posX < 0)
                            posX = 0;
                        else if ((posX+stage.stageWidth) > mapWidth)
                            posX = mapWidth - stage.stageWidth;
			if (posY < 0)
                            posY = 0;
			else if ((posY+stage.stageHeight) > mapHeight)
                            posY = mapHeight - stage.stageHeight;
			window.x = posX;
			window.y = posY;
			trace(window.x,window.y);
			this.scrollRect = window;
		}
	}
}
发表在 as3&webgame | 标签为 , | 留下评论