#
9.13至9.17日,第十四届国际软件产品线会议
(SPLC 2010)在韩国济州岛的
华美达酒店举行。这是SPLC第二次来到亚洲(上次是2007年在日本。作为软件工程知名会议,SPLC轮流在美洲、亚洲和欧洲举行,是系统化软件复用的专业会议)。
作为与工业界联系比较紧密、体现软件工业化的主流会议,SPLC 2010并未得到国内的关注,这在一定程度上体现了国内工业界的相对落后的局面(既没有产品线的实践,又缺乏对先进软件生产方式的跟踪与研究)。
本次的参会者来自国内的只有 5 人(包括我和导师,分别来自北京大学、上海交通大学、东北大学和公安部第一研究所)当然也有一些海外华人(老师和在读的博士(后))。会议论文集收录了来自国内的一篇短文、一篇Poster(我们的),以及一篇工业化论文。对我来讲,最大的收获在于开阔了视野、了解了一些当前最新进展和认识结交了一些新朋友,当然,这也是我第一次出国,虽然离家很近。
值得一提的是,来自公安部第一研究所的李东老师参加了
Software Product Line Fame of Hall竞评演讲(本次会议唯一的一个),至于能否加入Fame of Hall要等下次会议(SPLC 2011,慕尼黑)才能知晓,不过李老师所展示的航空安检系统产品线已经得到了与会绝大多数人员(好像没有发现几个不赞成的,呵呵)的认可,很可能成为国内第一家啊,祝福。
去年10月份向《计算机工程》投了一篇稿件,审稿加修改共耗时2个月,然后被录用,说安排在今年11月左右发表,结果今年10月份就发表了,本来是件好事,但我注意到的一个重要问题是文章中刊出的“收稿时间”竟然是今年的5月份,我很惊讶,于是给编辑部留言问是怎么回事,但始终没有人答复。
如此大的时间差别(去年10月份到今年5月份那可是7个月之久啊),难道是编辑“手误”,手误也应该做个解释啊,怎么就是不回留言呢。之前我也注意到一些发表的论文(10月份之前发表的)中刊出的“收稿时间”大概也在今年的2,3月份,当时我还想怎么这么多在我之后收稿的却在我之前发表呢,看来这也许是一种故意行为,“潜规则”!!!
难道出版社就为了显示自己发表周期短欺骗广大科研工作者吗?先不说这本身就是学术不端,重要的是它直接给投稿者带来了巨大的风险——剽窃。试想一篇思想类似的文章如果是在去年10分之后投稿如果发表了(当然前提是其它期刊刊出的收稿时间是真实的),那会是什么情况??不用说别人肯定认为是我剽窃,所以收稿时间应该是绝对真实的,我想这也是这个信息在文章中出现的主要价值!!!!。另外的小问题就是给投稿者的工作量/绩效统计带来不便,明明是去年的工作量怎么体现的是今年的时间,万一领导复查,怎么说清楚呢。
结论,再也不向此刊投稿了。
转自InfoQ:http://www.infoq.com/cn/news/2009/09/study-multitasking-performance
----------------------------------------------------------------------------------------------------------
斯坦福大学上个月在Proceedings of the National Academy of Sciences学报上发布了一个研究结果:“媒体行业中多工人员(multitasker)的认知控制”,强调指出一个显而易见的事实:从效率的角度考虑同时从事多任务,绝对会影响工作效率。该研究审视了IT领域中一个广为人知、却常常为人忽略的现象:不断出现、正在发生的多任务工作方式。敏捷实施者们这样写:这下可算有理由让团队只开发一个产品了,而且只能有一个产品负责人——将时间花在多个任务之上绝对是效率低下的工作方式。
Wired杂志指出:虽然其他研究重点关注多任务工作方式的眼前效果(比如:办公室里的工作人员经常检查邮件,这种情况下的工作效率),该研究提出了一个不同寻常的问题:“要是人们总在使用多任务工作方式会怎么样?”Stanford的研究者Clifford Nass、Anthony Wagner和Eyal Ophir调查了262名学生的媒体消费习惯。19名使用多任务方式最多的学生和22名多任务方式最少的学生此后参加了两个电脑测试,集中精力完成手上的测试。
他们使用了一些标准的心理测试指标,研究结果显示出:经常在多个信息流之间转换的学生,他们会在e-mail、网页、视频、聊天和电话之间来回切换,他们取得的进展远低于不怎么采取多任务方式的学生。更令研究人员惊讶的是:在任务切换能力的测试上,“重度媒体多任务人士”表现更差,“似乎他们过滤不相干任务的干扰的能力更差。”
该研究再次强调了认知科学家反复提到的事情:同时处理多个信息流的输入被认为是人类认知能力的问题。
对于造成差异的原因——被定位使用多任务方式的人是不是先存在心智上的不健全,还是说多任务方式造成了这种情况——“这是一个需要投入上百万美金才能回答的问题,可是我们没有一百万美金去取得答案。”Ness这么说。
Wagner接下来打算用脑部造影方法来研究多任务方式的神经学解释,而Ness将会研究儿童人群在多任务习惯上的发展。
本文是对:
Linda Wilbanks. IT Productivity = ??. IT Pro, November/December 2009, pp. 64, 63
的总结。
文章探讨了什么事生产效率(或工作效率,但并没有深入,只是个引子),以及如何提高(员工)的工作效率。
文章开头指出,“productivity”(生产力,此处译为工作效率)通常被定义为生产效能(efficiency)、度量(metrics),以及在生产过程中单位输入得到的产出的衡量。但对IT人员来说,什么是生产效能呢?作者给出了一个非正式的定义“一个有效率的人是指那些能够在指定的时间内以高质量的方式完成指定工作的人。”这引出下一个问题:我们如何做可以使员工更有效率?
作者援引Mr. Elgan在2009年4月5号的Computerworld那期中的一篇文章“Why Goofing Off at Work Boots Productivity"中的话说,
那些偷偷在Fackbook和Twitter上花少量时间的办公室“懒鬼”(slacker)比那些全部时间都用来做工作的人能做更多的工作。墨尔本大学的研究人员在一项新的研究中证实了这种真实性。他们的研究发现,一般来说,那些为了个人原因在工作时间内使用Internet的人比不用的人效率高9%。
作者指出,尽管Mr. Elgan没有指出这些研究者是如何衡量生产率的,但他给出了为什么那些在Internet上花费时间的人更具有效率的一些原因:
- 潜意识仍然关注于工作中的问题,解决方案通常会在随后出现;
- “游手好闲”(Goof off)的时间是一段清理个人思想、消除个人顾虑的时间。在这一小段时间后,你会回来全身心的投入到工作中;
- 从项目或任务中的短暂休息也可能是在受教育(或学习),例如读一些与工作无关的东西。这些信息有可能在以后帮你解决另外的问题。
作者接着列举了一些管理者们在不鼓励计算机游戏或网络冲浪的情况下建议所采用的提高员工效率的方式:
- 给员工有意义的工作。
- 承认/赏识员工所完成的工作。
- 给员工为了最好完成工作所需要的工具。
- 批准员工休息。
- 给予员工尊重。
作者还举了一个例子,说有个复有创造力的同事把键盘上的F1~F12都附加了新功能:
F1 Accurately reflect what’s in the building’s vending machines.
- F2 Display the current traffic report for the area.
- F3 Make every piece of software on your machine work exactly as advertised.
- F4 Play your favorite music to lower your blood pressure.
- F5 Bring up your favorite picture of the beach or of the place you plan to retire.
- F6 Show a running clock on how many hours you have left until you retire.
- F7 Show you where your kids or pets are (but be careful, this might not relieve stress!).
- F8 Automatically delete all emails that were sent “Reply All.”
- F9 Delete all meetings for the day, sending emails of regret to all attendees.
- F10 Show what your 401K balance was two years ago instead of today’s value.
- F11 Automatically start dinner/ESPN/CNN/soap opera (programmable to suit individual preferences).
- F12 Advance time to five minutes before quitting time on Friday of the current week.
作者最后指出,作为管理者,需要关注如何现实的鼓励员工发挥他们最大的效率,还需要决定如何来优化工作环境。只要求生产效而没有适当的管理支持和资源将适得其反。作者认为,不时地准备一块蛋糕(不管什么原因)可以鼓励团队和沟通。
By the way:作者是美国能源部国家核安全管理局的CIO。
转自:http://www.sciencenet.cn/m/user_content.aspx?id=275801
1个民工>2院院士
话说我国一特大型国有企业B从A国引进了一条香皂包装生产线,结果发现这条生产线有个致命缺陷:常常会有盒子里没装入香皂。总不能把空盒子卖给顾客啊。没办法,B企业向国务院S部打报告,S部指定两院和C9高校联合设计一个方案来分拣空的香皂盒,于是组成了一个11人的科研团队,计有:中科院院士1人、中国工程院院士1人、北京大学863首席科学家1人、清华大学973首席科学家1人、上海交通大学长江学者1人、浙江大学国家重点实验室主任1人、复旦大学“国家杰青”1人、南京大学国贴专家1人、哈尔滨工业大学国家大科学工程主任1人、中国科技大学引智计划1人,当中有海龟、陆龟、土鳖,还有博士后、博士、硕士、本科生,综合采用了机械、微电子、自动化、x射线探测、微机编程等技术,花了100万元,成功解决了问题。每当生产线上有空香皂盒通过,两旁的探测器会检测到,并且驱动一只机械手把空皂盒推走。
南方有个乡镇企业也买了同样的生产线,四川老板发现这个问题后大为发火,找了个湖南的小工来说:你他妈的今天给老子把这个搞定,不然明天你给老子滚蛋......小工很快想出了办法:他在生产线旁边放了台风扇猛吹,空皂盒自然会被吹走。
这个故事告诉我们:
1,知识不一定就是生产力,创造力和学历、学识、学衔不直接相关。
2,能吹是多么的重要,院士也能吹出来。
3,民科是值得尊重的,应该与官科享受同等待遇。
4,再次证明人民的智慧是无穷的,历史是群众创造的,是普通的劳动人民创造的。
本文是对Steve Vinoski. Multilanguage Programming.
IEEE Internet Computing, Vol. 12, No. 3, MAY/JUNE 2008, pp. 83-85 的总结。
本文的主要观点是:在软件开发中,要为特定的任务选择最合适的开发语言。
作者首先介绍了在软件集成和软件开发中涉及的术语/技术浩如烟海,但是开发者却只坚持某种技术,而必须使用其它技术来解决问题。这种现象在开发语言领域也是一样。开发者总是使用自己喜欢的语言,而非解决问题最优的语言,会造成设计方案的不优。
作者指出在日常开发中了解和使用多种编程语言可以带来显著的好处,因为没有任何一门语言适用于解决所有问题。而语言的存在也主要是由于它适于解决某些特定方面的问题(在解决某些问题方面比其它语言好),因此,不断有语言出现和消亡。在编程语言设计和开发中涉及许多需要权衡的因素,因此,这为许多不同的方案和变体预留了空间。
作者指出,大部分单一语言开发者倾向选择用于通用目的的语言(像Java、C++等),而不是特定的编程语言。通用的编程语言可用于解决更广范围的问题,但它们通常都是提供的折中的解决方案,不是太好,也不是太坏。当然,一些单一语言开发者尽力去挖掘语言的高级特性,来将语言的能力发挥到极致,但这些程序员仍然受制于这门语言实际的限度。
作者指出语言的选择对开发效率是一个重要因素,选择正确的语言所带来的开发效率的提升是巨大和值得这么去做的。作者以对XML的处理为例阐述了此观点。通用语言,例如Java在处理XML方面没有专门设计上的支持,这使得开发人员在使用通用语言处理XML方面忍受这种不匹配,来进行拙笨的开发,造成非优的解决方案。在这种情况下,为了提高效率,他们通常采用一些代码生成技术,把XML构造块影射为静态编程语言的构造块(通常是类)来尽量缓解这种阻抗,即便如此,这种方式仍然是十分脆弱的。因为把高度灵活的XML构造块转化为严格的静态的数据类型很容易造成彼此版本的不匹配。XML文档的任何改变都需要新的代码生成、重新构建、....这使得通过代码生成获得的一点点好处又被不断维护带来的成本所抵消。相比之下,Python、Perl、Erlang等语言都提供了XML处理模块,甚至还带版本化功能。更好的像ECMAscript for XML (E4X)和Scala,提供了对XML字面量的支持支持,开发人员可以直接在语言语法中写XML。消除了阻抗,带来了更简化的代码和更清晰的功能。
作者指出,选择适当的语言所带来的效率的提升还体现在对代码的维护上。作者援引Fred Brooks在《人月神话》中引用的的研究发现说,所需开发和维护的工作量与指令的数目(可以理解为代码行)是指数关系,而且这与所采用的语言无关。假设这个指数值是1.5的话,那么如果代码行是原来的3倍的话,那么就需要5倍的开发和维护成本,如果代码行变为原来的5倍,就需要11倍的开发和维护成本,如果代码行变为原来的10倍,那么就需要32倍的开发和维护成本。选择正确的语言,不仅可以减少代码行,更快的提供解决方案和对需要的响应,这个过程可以变为积极的循环,更少的代码带来更好的缺陷和更容易的增强(维护),这又使得用户更高兴,提供免费的广告宣传和反馈,进一步促进软件的发展。
作者指出,多语言编程的一个问题就是如何使它们协同工作。这可以分为两类。如果是用于分布式应用集成(即不同的应用用不同的语言),那么网络本身就通过协议提供了一个中立的方案,可以通过网络消息等。如果不是分布式应用,当前的主流开发语言,比如微软的CLT(公共语言运行时)所支持的语言越来越多,命令式的、动态的、函数式的,或脚本的。类似的,JVM也从一个单语言平台演化为一个可以支持许多语言的平台,包括JRuby、Scala、Groovy、JavaScript、E4X、Jython和其它的。而且,在JVM上,这些语言都容易学,因为都是基于字节码,这些语言可以与Java进行互调。因此,JVM提供了一个非常好的方式来为应用的不同部分选择最适合的语言。
作者还指出目前阻碍多语言编程的因素主要有两个:一个管理因素;另一个开发者认为学习新语言难度很大。对于第一个因素,管理者通常认为只采用一种语言易于管理,因为大家都用同样的语言,可以容易的替换开发人员,而且某个开发人员写的代码,大家也都能看懂,避免陷入只有少数人才能看懂和维护的局面。作者认为这种管理者对软件开发和维护所涉及的成本没有充分考虑。在一个JVM或CLR基础之上,选择合适的语言可以减少代码规模和开发维护的工作量,从而降低系统的总成本,而且,较小的系统需要更少的开发者,这又是一个巨大的成本减少。对于第二个因素,相比通用语言来说,那个特定的语言,像Lisp、Python等都很简练,核心概念并不多,初学者可以很快发现它们更具有生产力,而且,以往语言的经验可以帮助你学习新语言。如果你掌握的语言越多,你就能更容易的学习一门新语言,也能发现解决问题的最好方式。
最后,作者以“毕竟,难道我们真的认为我们已经学到我们所需要的最后一门(终极)语言了码?”结尾。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
欢迎您对自己所在的开发组织对于多语言编程、融合的实践和经验发表看法,谢谢!
今天是部门年会活动的日子,活动项目:滑雪、年夜饭、卡啦OK
第一次学滑雪,是挺兴奋的,11点钟开使滑,地点林海滑雪场,刚开始是50多米的小短坡, Easy,吃完午饭,开始在200米的高坡滑,跟头栽了不老少,也是长了不少经验。爽!,就是膝盖太累了...
晚上又是一顿丰盛大餐....
1. 提供了磁盘分区 - 空间方法
在File类中增加了以下方法:
public long getFreeSpace(): 返回一个分区剩余空间
public long getTotalSpace(): 返回一个分区总空间
public long getUsableSpace(): 返回一个分区已用空间
注意,以上File指代的虚拟路径必须是盘符,否则返回0。
2. Splash Screen
Mustang对于Splash Screen的实现是一个用来显示gif(可以是动画式的),PNG, jpg图片的没有修饰的窗口
使用方式:
在java命令行中加入 -splash 选项,示例如下:
java -splash mypic.jpg HelloWorld如果你的类是以jar的方式来运行,那么可以在jar文件的MANIFEST.MF文件中加入如下的一行:
SplashScreen-Image:mypic.jpg你也可以在命令行中写:
java -splash:mypic.jpg -jar helloWorld.jar
这里用的图片将替代MANIFESET.MF中定义的图片(如果有的话)
为了实现自定义的Splash Screen界面,你可以使用如下的方法:
//使用SplashScreen的静态方法获得SplashScreen对象,然后自定义
SplashScreen ss = SplashScreen.getSplashScreen ();
if (ss != null)
{
// 自定义代码。
}
在SpalshScreen中还提供了如下方法,具体使用请看JDK或访问sun网站
public Graphics getGraphics()
public URL getImageURL()
public Dimension getSize()
public void setImageURL(URL imageURL):
public void update()
值得注意的是:你必须使用 -spalsh选项或MANIFEST.MF的方式来调用SplashScreen,
否则修改是无效的。
昨晚,回到宿舍,正好赶上中央4套在播《名将之约》,这次邀请的名将是现任中国乒乓球队总教练,刘国梁。
自己小时候就很喜欢乒乓球,到现在也是一样,因此对于此类人物,自己是钦佩有加,更何况刘的辉煌战绩,在国内也是先有人出其右。本月十号,就是他三十岁的生日,以近而立之年的他,已经是中国乒乓球的总教练,让人感觉前途不可限量,要登上这个高度是非常之不易。
今年,我也已经27啦,时光飞逝,转眼就会到30岁的那一天,作为程序员这个行当中的一员,这个年龄虽然不是很大,但绝对不小,自己的明天在哪里?
30岁能达到什么高度?35,40呢?也许每一个IT人都会思考这个问题,当然也许有些牛人已经是扶摇直上九万里,不必忧心此类问题。
我们的公司很大,部门也很多,好几千人的规模,项目经理很多很多,而公司级的项目经理,也就是资深项目经理,再加上部门的领导,什么技术总监,项目总监,部长,经理......
人,只有踏踏实实的把他目前的工作做好,才能不断提升自己,我从不怀疑这样的真理。
今天又抖出这个老生常谈的话题,一是有感而发,再则警示自己:抛弃浮躁,潜心修行。
Oracle ADF(Application Developement Framework)是一套快速开发企业级J2EE的MVC框架. Oracle在Model层和业务服务层上提供的缺省实现对开发基于数据库的应用提供了极大的便利,尤其是它的ADF BC(Business components),这个微型的MVC框架提供了直接映射数据库表的能力,结合View端的展现(Oracle 提供了桌面端Swing/JClient和Web端UIX的实现),开发起来就如同用Borland的数据感知控件一样。
Spring目前是J2EE社区一个比较火的框架,应用的比较广,那如何进行二者的有机结合呢?
我们已经习惯了Spring的IOC框架,方便的使用getBean()方法来获得我们想要的对象,因此,如果能通过Spring来生成需要的对象,然后把这个对象注册为Data Control(Oracle中数据感知组件),这样就可以利用ADF BC的威力来快速构建一个数据库应用。问题的关键就在于ADF为每一个data control指定了一个工厂类属性,而这个工厂类属性的实例值需要我们用Spring来生成,就OK了。举一个实际的例子:
在Spring中,我们定义了如下的接口:
package nl.amis.spring.hrm;
import java.util.List;
public interface HrmService {
public void setEmployeeDao(EmpDAO employeeDAO);
public List getAllEmployees();
public long getSalarySum();
}
配置文件为:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSourceDBDirect"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</bean>
<bean id="employeeDAO" class="nl.amis.spring.jdbc.EmployeeJdbcDAO">
<property name="dataSource">
<ref local="dataSourceDBDirect"/>
</property>
</bean>
<bean id="hrmService" class="nl.amis.spring.hrm.HrmServiceImpl">
<property name="employeeDao">
<ref local="employeeDAO"/>
</property>
</bean>
</beans>
在Oracle JDeveloper开发环境下,我们找到
nl.amis.spring.hrmServiceImp这个类,然后用菜单命令把它注册为一个Data control组件。这个新生成的Data control缺省名字是:HrmServiceImplDataControl,查看它的属性,有一个Factory class属性,找到这个属性所指的类,修改如下源码:
Object bean = oracle.jbo.common.JBOClass.forName(beanClass).newInstance();上面的代码就是生成HrmServiceImpl对象的代码,把它改为:
ApplicationContext springCtx = new ClassPathXmlApplicationContext("SpringConfig.xml");
Object bean = springCtx.getBean("hrmService");这样主要工作就OK啦,剩下的就是修改一下Data Control的配置文件(在注册成为Data Control后生成的同名.xml文件),修改
<content>中的<AccessorAtribute>部分,把id改为:allEmployees; BeanClass 改为nl.amis.spring.hrm.Employee; IsCollection="true"; Type改为java.Util.List.
以上修改表明我们需要的是通过employeeDao获得的Employee的集合,把这个结合作为结果集应用到ADF BC中。
英文原文出自:
http://technology.amis.nl/blog/index.php?p=765