敏捷堂的第一期电子杂志

张逸在敏捷中国的邮件列表里发的,我转载上传到工作室的博客上,方便大家传阅。敏捷之道第一期

d945bbe1

Silverlight1.0开发经验总结[1]

createFromXAML的文本中要是有x:Name的话一定要价namespace,譬如xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”,无论你是否以Canvas作为根标记,哪怕你只有一个<TextBlock>,那也应该写成:

<textblock xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:name="name_txt">
</textblock>

如果写成:

<textblock x:name="name_txt">
</textblock>

就会报错 AG_E_RUNTIME_METHOD : createFromXAML,这点大家应该都很熟悉,但是还是会经常遇到,我就是为了这个问题耽误了20分钟,后来才想起来。

另外一个就是,关于children.add,当createFromXAML完成后马上就会add到container中,无论你的x:Name是在任何的容器中,只要名字一样就会报错,比如你在根节点Canvas中加入x:Name为img的一个图片,你在根节点Canvas中再加入一个Canvas并在它里面再加入一个x:Name为img的图片,就会报错AG_E_RUNTIME_METHOD : Add。这是因为在Silverlight中,全局的x:Name都不能一样,而不仅是在同一个容器中。

另外如果遇到了错误提示,请参考微软官方的Error Messages对照表

关于Silverlight2.0我比较关心的

关于Silverlight2.0我比较关心的,也是4月份会议我要去好好听听的。

1  Silverlight Control Model & Controls

2  Building LOB Apps In Silverlight 2

3  Data in Silverlight 3.0

4  IronRuby(a part of DLR on windows)

还有一些其他的比如IE8什么的,到时候再看看还有什么比较有意思的东西,不知道大家对SL2.0都有什么期待。

个人觉得嵌入什么WCF的功能纯属折腾,SL主要在表现层,应该在表现层技术上多下功夫,多提供一些API,加上类似Flash中的bitmapdata那样的API就更好了,搞成WPF的那些酷炫的功能才是SL需要努力的~~

奥运圣火互动平台——一个基于Flash的全真实互动平台

一个联系你我,见境生情的人际地理空间,这是我们给它的定义。我很少在Blog里谈产品谈工作,这是我在工作以后即Woocall以后又一个全身心投入的产品。有了很长时间的积累才酝酿出了这个产品。所以迫不及待的拿出来跟大家说说,先来看一个截图:

这个产品从技术上说,基本上前端的技术都用上了,而且都不是浅尝辄止,都是比较深入的应用,可以说算是搜狐大项目中第一个全as3项目,全部基于FlashPlayer 9,后台对架构的考验也是比较严峻,要应付大量的推广简单的技术架构肯定是不能支撑的,技术上这次是个挑战,给我们的开发时间和准备时间都不多。

从功能上说,结合了时下比较流行的SNS和类博客的综合并可以让这些内容和圈子基于一个真实的环境,那就是地图,一个用户可以基于真实的地理环境进行交友发表自己的内容等活动,这是这个平台在功能上的最大亮点。当然功能比其他的任何单一类型的网站都复杂的代价就是我们面要对用户的学习成本就比较高,用户甚至都不知道地图是能拖拽的,以后改进的空间很大,需要慢慢的迭代。

对于搜狐产品线来说:

1  我们使用了搜狐通行证,使得原有的搜狐用户只要通过简单激活就可以使用这个产品,而不用像以前一样重复注册。

2  我们使用了搜狗说吧,老乡会就是基于现有的搜狗说吧平台进行的二次开发。

3  我们使用了搜狐小纸条,同城聊天室功能就是使用搜狐小纸条的聊天室功能。

4  我们使用了go2map地图,我们的全部非三维地图数据全部是通过go2map地图的接口调用来完成的。

我在火炬平台的空间地址:http://feifei.icoke.sohu.com

另外放在icoke这个二级域名下是因为可口可乐对这个平台进行了冠名。

希望大家能在使用了这个火炬互动平台以后多给我们提一些意见来帮助我们进行产品的改进。

Help Adobe plan the future of Flex or ColdFusion[帮助Flex和ColdFusion规划未来]

Adobe is asking users of Flex or ColdFusion to take the following survey. Adobe wants to learn from a wide range of developers how they use the products today and what they would like to see in the future. The survey will take only a few minutes to complete and the responses will be invaluable.

Click on the following link to initiate the survey:

http://v2.decipherinc.com/survey/adobe/ado08002?list=5

Responses by March 21, 2008 will be greatly appreciated.

Note that this survey is being hosted by Decipher Inc, a survey company who is helping Adobe collect the data. Your responses will remain completely confidential - they will be combined with responses from others who complete this survey and the results will be reported only in aggregate form to Adobe.

Thank you for sharing your opinions,

The Adobe Global Market Research Team & the Flex and ColdFusion product teams.

如果你愿意帮助Adobe规划Flex以及ColdFusion的未来,请你点击以上链接,花几分钟时间来填写一个调查,这是一个第三方公司帮助Adobe做的在线调查,你的个人信息是完全保密的不会被其他人员或者商业公司利用。
以上信息来自Adobe负责开发者关系的Manager John Koch

敏捷 零售业销售团队的应用

如题,今天清晨,在某商厦,某某时装品牌卖场,上了一堂生动的敏捷流程课。

不断交付,拥抱变化:

卖场在昨晚打烊的时候估计已经将销售数据汇报给总公司,总公司可能在晚上或今早上反馈了整体数据,这些数据包括:服装售价变化,服装库存量、支持时间 ,销售奖励变化。

晨会, 反思,改进,调动积极性,面对面的交谈:

店长在第二天早上会和销售团队:导购,在卖场开会,介绍今天的销售目标和策略:哪些衣服要尽快售完,优先销售;哪些衣服是有奖励机制的;重点服装的库存情况。最后大家会击掌或者喊口号来鼓舞士气。

店长会将特殊销售策略与一部分店员开会说明,这部分店员可能是主力,他们承担尽快售完或者优先销售服装的工作,也可能是新手,还有一部分店员不参与,他们属于按照正常情况销售,这样会出现一部分人有很强的目标,一部分人会在外围做支援或运维工作。

培训:

店员的学历应该不会都很高,素质可能不会太好,但都接受过专业培训,懂得销售服装的技巧,他们会把每件服装的特点与顾客的特点做比较,一件衣服也许突出肤色好,他会推荐给你,并指出衣服的特点适合顾客,店员不会只是反复重复:您身材太棒了,这衣服卖的很好,很适合您。而是更有策略。

合理的团队:

店员的数量可能也经过公司的整体统计和计算,在不同面积的卖场,不同的季节,店员的数量会不一样,以便在需要的时候可以满足最大的顾客数,使大多数顾客都享受专人服务,同时又不会多雇佣店员。

不加班:

店员不加班,店长也不加班,这是我猜的,但我想也应该是,商场关门他们不走还干什么,他们在加班也无法完成他们,因为没有顾客,销售指标会安排的合情合理,度量明确,每天的工作量也都分的很明确。

有时候我们经常会说不要买某某牌子的衣服,太俗穿的人太多了,现在想想是真的设计的太差,还是太便宜,还是我们买的人太多了?是不是销售团队太强了,以至于我们很多人都买了他们销售的东西,所以才觉得俗了,我们光顾的不俗的,穿的人少的品牌,真的是好的吗?会不会是他们的销售队伍太差了,他们没有接受过培训,只能对顾客说:这衣服卖的很好,适合您,真的?他们的销售人员太没激情了,他们可以让顾客在店里走一圈,然后只说两句固定的话:欢迎光临,喜欢请试试;谢谢光临.

那我们的开发队伍呢?我们的队伍和服装销售队伍有本质区别吗?我们的队伍反而比传统行业更迟钝,到反而他们像是搞IT的。

Flex3.0和AIR1.0中国开发者交流活动

本周六下午2点的线下活动,在Adobe中国的R&D 会议室,大家感兴趣赶紧报名。Flex3.0和AIR1.0中国开发者交流活动(即RIAMeeting第四次开发者线下活动),这次活动主要是为了配合Adobe的社区活动,因此奖品特多,整整两大箱子。

报名及活动详情请访问此地址:http://www.riameeting.cn/?p=29 

会议现场会有纪念版的AIR1.0 launch T-shirt、Adobe的杯杯及其他奖品送出,另外还有一位幸运儿拥有传说中的CS4测试帐号(这个其实比较吸引我,不过负责发,把幸运留给大家咯)。

mysql-proxy使用经验

1.安装

portinstall mysql-proxy

2.启动
mysql-proxy –proxy-lua-script=/usr/local/share/mysql-proxy/你自己的lua脚本.lua

3.需求
非windows监控数据保存在status表中,windows监控数据保存在win_status表中,两张表结构完全相同
+—————-+———————–+——+—–+———————+—————-+
| Field          | Type                  | Null | Key | Default             | Extra          |
+—————-+———————–+——+—–+———————+—————-+
| StatusID       | int(8) unsigned       | NO   | PRI | NULL                | auto_increment | 
| ServerID       | smallint(4) unsigned  | NO   |     | 0                   |                | 
| IpAddress      | varchar(15)           | NO   | MUL |                     |                | 
| OtherIp        | varchar(48)           | YES  |     | NULL                |                | 
| CpuIdle        | tinyint(2) unsigned   | YES  |     | NULL                |                | 
| Uptime         | varchar(26)           | YES  |     | NULL                |                | 
……………….
想实现,根据一个IP在status表中先查询,如果status中不存在,则查询win_status表,用户发送的都是统一的SQL语句,类似:
SELECT * FROM status WHERE IpAddress=’x.x.x.x’ ORDER BY Time DESC LIMIT 1;

重点lua script如下:
1.hook查询语句,截获用户的sql语句,加以分析
function read_query_result (inj)

2.使用proxy.tokenize,拆分用户的SQL语句
    local tokens = proxy.tokenize(inj.query)
    for i = 1, #tokens do
        print (i,tokens[i][’token_id’] , tokens[i][’token_name’], tokens[i][’text’]  )
    end

3.发送一条重新构造的sql
proxy.queries:append(1, string.char(proxy.COM_QUERY) .. winsql )
return proxy.PROXY_SEND_QUERY


TOMCAT5下运行PHP5

How To Setup PHP5 with Tomcat 5

这篇文章介绍如何让PHP5与Tomcat5运行,替代apache.

真是怪异的组合,文中说应用这种场景的主要是历史遗留产物,比如以前的系统是java的,现在重要的模块还需要继续用,新系统又是PHP的。

Adobe AIR1.0 launch t-shirt

照的有点虚 大家凑或看吧

sp_a0115.jpg

sp_a0114.jpg

Adobe正式发布AIR1.0和Flex3.0

从Adobe Flex Team 这里 得到的消息,现在在Adobe的官网还没看到消息,大家已经可以在Adobe的页面中看到FlexAIR的产品页面,AIR的产品页面不过瘾看这里 try Adobe AIR,这个网站性质和Flex.org差不多。

另外Adobe的开源项目新增加了一个网站,所有的Adobe开源项目都会放到上面,连很多人认为很神秘的Tamarin都在上面。

几个AIR产品的演示

Digimix
    http://my.adobe.acrobat.com/p22223826/

Analytics Desktop for Google
    http://my.adobe.acrobat.com/p46986302/

AOL Top 100
    http://my.adobe.acrobat.com/p76129216/

eBay
    http://my.adobe.acrobat.com/p20033607/

深入解析Adobe Flex/AIR 座谈会[北京]

AIR1.0新特性介绍+Flex3新特性介绍+Flex开发快速起步

时间:08年3月4日/3月18日

地点:北京市海淀区北四环中路238号柏彦大厦

活动主题包括:

1) Adobe Flex 3 (13:00-13:45)

2) Flex快速入门 (14:00 – 16:00)

3) Adobe AIR (16:15 – 17:00)

我会负责第二部分,这次是AIR1.0和Flex3正式发布以后在中国的第一次活动,是Adobe和CSDN共同组织的,因为是周二的工作时间,大家如果有兴趣的话可以参加,在这里报名,如果没报上名又想去的,到了地方以后给我打电话。

on AIR Tour Europe

onair_logo_europe.png

美国的AIR Bus Tour一样,只是没有bus了,但是换成了火车,是不是要在欧洲之星上搞活动?另外其余的大洲也在计划进行,Asia应该也在计划之内,日本是肯定去,但是到不到中国就两说了。

活动网站:http://onair.adobe.com

各个城市的时间表:http://onair.adobe.com/blogs/tour/2008/02/19/on-air-tour-european-cities

另外,Adobe在facebook上建了一个page,facebook的用户可以关注一下:

http://www.facebook.com/pages/on-AIR-Tour-Europe-2008/8295947366

 再另外,Adobe发布了一个30onair.com的网站,是由30个30秒的视频组成的,主旨就是告诉大家Why AIR,Why Flash,Why Flex,Why Adobe,大家也可以在youtube上Tag:30onair里面这道这些视频

Optimising TCP/IP connectivity: An exploratory study in network-intensive Erlang systems

一篇关于erlang网络优化的好文章。

比较了erlang在linux,bsd,Solari三种系统上的性能差异,并通过调节各种配置参数来提升性能的。

http://www.erlang-consulting.com/thesis/tcp_optimisation/tcp_optimisation.html

phpundercontrol

http://www.phpundercontrol.org/about.html
php持续集成工具结合了phpunit,phpdoc。

不过看说明似乎是java开发的,需要java环境,这有点….鸡肋,为什么不是php开发的?


Fxspy一个类似Firebug的Flex调试工具

大家应该都熟悉Firebug这个继续Firefox的页面调试工具,而现在Fxspy就是一个基于Flex的实现。你可以把他加入到你的Flex application中,他也可以实现document tree的查看功能,以及动态的改变某一个element的属性。
这里是项目地址
如何在你的应用里加入Fxspy呢:

1 先把下载后的SWC导入

2 添加如下代码:

<mx:application xmlns:mx="http://www.adobe.com/2006/mxml">  
<mx:script> 
<![CDATA[      
import com.flexspy.FlexSpy;    
]]>     
</mx:script> 
<mx:button label="FlexSpy" click="FlexSpy.show()" id="btnFlexSpy"> /mx:button>
</mx:application>

Revactor: Erlang-style concurrency for Ruby 1.9

ruby新出的erlang并发风格的并发编程框架Revactor。

http://www.clickcaster.com/diveintoerlang

优化PHP代码的40条建议

http://www.yeeyan.com/articles/view/davidkoree/4409

1.如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。2.echo 比 print 快。

3.使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。

4.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。

5.注销那些不用的变量尤其是大数组,以便释放内存。

6.尽量避免使用__get,__set,__autoload。

7.require_once()代价昂贵。

8.在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。

9.如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。

10.函数代替正则表达式完成相同功能。

11.str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。

12.如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。

13.使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。

14.用@屏蔽错误消息的做法非常低效。

15.打开apache的mod_deflate模块。

16.数据库连接当使用完毕时应关掉。

17.$row[‘id’]的效率是$row[id]的7倍。

18.错误消息代价昂贵。

19.尽量不要在for循环中使用函数,比如for ($x=0; $x < count($array); $x)每循环一次都会调用count()函数。

20.在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。

21.递增一个全局变量要比递增一个局部变量慢2倍。

22.递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。

23.递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。

24.仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。

25.方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。

26.派生类中的方法运行起来要快于在基类中定义的同样的方法。

27.调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。

28.用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。当然,只有当你不需要在字符串中包含变量时才可以这么做。

29.输出多个字符串时,用逗号代替句点来分隔字符串,速度更快。注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。

30.Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。

31.除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。

32.尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。

33. 当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。

(举例如下)
if (strlen($foo) < 5) { echo “Foo is too short”; }
(与下面的技巧做比较)
if (!isset($foo{5})) { echo “Foo is too short”; }

调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。

34. 当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并指望它 们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变 量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。

35.并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。

36.并非要用类实现所有的数据结构,数组也很有用。

37.不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?

38.当你需要时,你总能把代码分解成方法。

39.尽量采用大量的PHP内置函数。

40.如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。

41.评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。

42.mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。

补充一条:不要一次include很多文件,需要哪些包含加载哪些文件。

祝大家春节快乐!

80s工作室全体同仁,祝大家春节快乐,全家幸福,身体健康,合家欢乐!

新的一年里,祝大家收入提高,职位提高,技术提高,全都步步高!

感谢大家对我们工作室的支持,希望大家在新一年里继续对我们工作室,生意多多关照,技术多多交流,博客多多关注,大家一起向前走,向钱进!

1_200702152357241_thumb.jpg

欢迎各位订阅本站博客,工作室博客关注: Flash Flex RIA JAVA Silverlight WPF Python PHP ErLang 产品设计 用户体验.

erlang tips 1

io:format的格式化参数。c 输出多个重复的字符。

1.io:format(”~2c”,”a”).

结果:aa,标识输出字母2次。

2.io:format(”~2.1c”,”a”).

结果:_a,标识输出2个字符,1个是后面跟的字母,另一个位置用空格补充,从左开始,如果是”~-2.1c”是从右侧开始。

s 打印字符串,按手册说只接受list,atom,2进制的结构。

w,p是标准输出,支持term,区别是p会对输出的数据做一些分行处理,w会显示在一行。

字符串连接,可以使用:

H_string = lists:append([“Hello, “, “Erlang”, “!”]).
使用append连接字符串。

self(),取得当前进程的pid.

erlang:monitor(Type, Item),用来监视制定进程的状态,type是类型现在只支持process,item可以是pid或进程注册名及node。

在进行socket链接时,server端listen有一个参数{active, false/true/once},参数可选false,true,once,按照文档介绍,感觉这是用于阻塞或非阻塞使用的,blocking or not blocking,false为阻塞,true为非阻塞,once似乎鉴于两者中间既不会被压垮也不会太慢。

在使用{active, false}的时候,必须使用gen_tcp:recv来接受消息.