2008年11月18日星期二

签名Android应用程序

签名你的应用程序

Android系统要求所有已安装的程序必须数字签名——没有适当数字签名系统不会安装或运行一个应用程序。这适用于任何地方运行的Android系统,不管是模拟器还是实际设备。基于这个原因,在你能在一个模拟器或者设备上运行或者调试应用程序前,必须为你的应用程序设置签名。

理解Android应用程序签名的要点是:
所有应用必须签名,不签名系统不会安装这个应用程序。
你可使用自签名证书来签名你的应用程序,而不需要证书管理机构。
系统仅在安装时验证签名证书的有效期。如果应用程序的签名证书在应用程序安装后有效,应用程序的功能正常使用。
你可使用标准工具——Keytool和Jarsigner——产生钥匙并签名你的应用程序的.apk文件。

当调试时,AndroidSDK工具辅助你签名你的应用程序。Eclipse的ADT插件和Ant编译工具提供两种签名模式:调试牧师和发布模式。
调试模式:编译使用Keytool工具(这个工具包含在JDK中)以创建一个keystore和带有一个明确别名和密码的key。每次编译,这个工具使用调试key来签名应用程序的.apk文件。因为密码已知,这个工具不必每次编译时提醒你keystore/key的密码。
发布模式:当你的应用程序准备发布时,你在发布签名模式编译你的应用程序。在发布模式,这个工具编译你的.apk而不签名。你必须使用Keytool产生你自己的keystore/key,然后使用Jarsigner工具(也包含在JDK中)来签名.apk文件。

签名的基本设置

为了支持keystore和调试key的产生,你应该首先保证Keytool能在你的SDK中获取。通常情况下,只要你保证你的JAVA_HOME环境变量被设置,并且指向合适的JDK,你就能告诉SDK编译工具怎么找到Keytool。还有一种办法,你可将Keytool的JDK版本加入你的PATH变量中。
如果你在提供Gnu编译器的某个Linux版本上开发,你必须指定系统使用Keytool的JDK版本,而不是GCJ版本。若Keytool已经存在于你的PATH,他可以指向/usr/bin/keytool的链接。这种情况下,检查链接目标保证指向JDK的Keytool。

在Eclipse/ADT中签名

如果你在Eclipse中开发,并且已经按照上述步骤设置Keytool,那么签名默认采用调试模式。当你运行和调试你的应用程序时,ADT签名.apk文件,并在模拟中中安装。不需要你做指定操作,因为ADT已经成功访问了Keytool。
为了在发布模式中编译你的应用程序,右击Package面板的项目,然后选择Android Tools>Export Application Package菜单,另外一种方法:你能Manifest编辑器总页面"Android Manifest Overview"里面执行"Exporting the unsigned .apk"超级链接。在你保存了输出文件.apk后,你需要在发布前携带你自己的key使用Jarsigner来签名.apk。如果你没有一个key,你可以使用Kestroe携带合适参数来创建keystore和key。如果你已经有一个Key,比如一个公司的Key,你能使用它来签名.apk文件。

在Ant中签名

如果你使用Ant生成你的.apk文件,debug签名模式默认开启,前提是你通过包含在最新SDK中的活动创建(activitycreator)工具产生的build.xml文件。当你运行Ant使用bulid.xml来编译你的应用程序,这个生成脚本产生一个keystore/key并签名.apk文件。你自己不需要做什么特定操作。
为了在发布模式下编译你的应用程序,你需要做的所有事情是使用Ant命令指定一个生成目标“release”。例如,如果你从包含build.xml文件的目录中运行Ant,Ant命令看起来是这样:
ant release
这个生成描述脚本编译应用程序为.apk,而没有签名。当编译.apk后你需要在发布前携带你自己的key使用Jarsigner来签名.apk。如果你没有一个key,你可以使用Kestroe携带合适参数来创建keystore和key。如果你已经有一个Key,比如一个公司的Key,你能使用它来签名.apk文件。


Debug认证过期

自签名认证使用DEBUG模式下签名你的医用程序,自签名认证从创建时间开始1年后过期。
当认证过期时,你将会得到一个创建错误。在Ant中编译,错误看起来这样:
debug:
[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
[exec] Debug Certificate expired on 8/4/08 3:43 PM
在Eclipse/ADT中,你在Android控制台会看到一个类似的错误。
为了纠正这个问题,简单删除debug.keystore 文件即可。在Linux/Mac OSX操作系统中,这个文件存储在 ~/.android目录中,而在win XP操作系统,这个文件保存在C:\Documents and Settings\\Local Settings\Application Data\Android目录中。在Vista,这个文件保存在C:\Users\\AppData\Local\Android目录中。
下次你生成时,生成工具将会重新产生新的keystore和调试key.
注意,如果你的开发机器正在使用非阳历地区,生成工具可能错误地产生一个已经过期的调试认证,为此,当你试图编译你的应用程序时你会得到一个错误。欲知进一步的信息,请阅读问题主题文章“I can't compile my app because the build tools generated an expired debug certificate”。

2008年11月13日星期四

创建Android运行配置

创建Android运行配置
在你在Eclipse上运行并调试Android应用程序前,你必须为之创建一个运行配置。一个运行配置指定运行项目,启动的活动,使用的模拟器选项,等等。
为了针对你的应用程序创建运行配置,根据你的Eclipse版本选择合适的步骤:
1、打开运行配置管理器
(1)3.3
选择Run > Open Run Dialog... 或者Run > Open Debug Dialog...
(2)3.4
选择Run > Run Configurations... 或者Run > Debug Configurations...
2、在左边的工程类型列表中,定位the Android Application条目,双击之或者右键> New, 以创建一个新的运行配置.
3、键入一个配置名称
4、在Android可选页, 浏览确定启动的项目和活动.
5、在Target可选页, 设置喜好的屏幕和网络特性,以及其他模拟器启动选项.
6、你也可以根据喜好在Common可选页设置额外的选项.
7、点击Apply以保存运行配置,或者选择 Run 或者 Debug 按钮.

运行和调试一个Android应用程序

一旦你为你的应用程序设置了项目和运行配置,你可以根据下面的描述运行或者调试之。
从Eclipse主菜单,根据情况选择Run > Run 或者 Run > Debug子菜单,可运行或者调试激活的运行配置。
注意:激活的运行配置是在运行配置管理器中最后选择的一项运行配置。这不一定匹配你在Eclipse导航窗体中选择的应用程序(如果有的话)。
为了设置或者修改激活的运行配置,你要使用运行配置管理器。怎样访问运行配置管理器,要知道更多信息请阅读“Creating a Launch Configuration”(创建Android运行配置)。
运行或者调试应用程序触发以下操作:
1、如果还没有模拟器在运行,则启动模拟器。
2、如果比较最后的编译文件,程序代码已经改变,则重新编译,然后在模拟器中安装应用程序。
3、使用“Run”菜单启动应用程序。
4、使用“Debug”菜单启动应用程序进入“Wait for debugger”(等待调试)模式,然后打开调试试图,针对应用程序使用EclipseJAVA调试器。

2008年11月11日星期二

Android开发步骤

在Eclipse上开发应用
为了在EclipseIDE上开发Andriod应用程序,你必须首先创建一个android项目,然后设置一个运行配置,你就可以编写、运行、调试你的应用程序。
以下提供的指导假设已经安装ADT插件。如果还没有安装ADT插件,你应该首先安装ADT插件。

创建Android项目
ADT插件提供一个新项目向导,该向导用于快速新建或者在已有代码基础上创建Eclipse项目,步骤如下:
1. 选择菜单 File > New > Project
2. 选择 Android > Android Project, 然后按Next
3. 在Contents下设置项目信息:
* 为了从新代码开始项目. 选择 Create new project in workspace
键入项目名称,基础包名称,单个活动类名称(以便创建一个JAVA桩文件),和用于你的应用程序的名字
* 为了从已存在代码开始项目,选择 Create project from existing source. 如果你打算基于SDK的简单例子创建并运行,你就使用这个选项. 例子应用程序存在于SDK的samples/ 目录
浏览包含已存在源代码的目录,然后点击OK. 如果该目录包含一个有效的manifest文件,那么ADT插件为你自动填充包、活动、应用程序名称
4. 选择 Finish.
ADT插件根据项目类型为你自动创建这些文件夹和文件:

* src/ 包含.java 活动文件
* res/ 包含资源.
* AndroidManifest.xml 项目的manifest文件

2008年11月6日星期四

android架构

android架构:

applications:
一套核心应用程序,包括:电子邮件客户端、短信程序、日历、地图、浏览器、通讯录等,所有应用程序使用JAVA开发。

Application Framework
开发人员拥有在applications中使用的API的完全使用能力。应用程序架构用于简化组件的重用,一些应用程序开放他们的功能API,另外一些应用程序使用那些功能API,但是会受限于框架规定安全约束。这些机制允许用户更换组件。
应用程序架构是一系列的服务和系统,包括:
(1)Views
提供一套丰富的扩展的视图,用于构建应用程序,包括:列表、表格、文本框、按钮、甚至嵌入式浏览器
(2)Content Provider
用于应用程序访问其他应用程序的数据,比如通讯录,或者,共享自己的数据
(3)Resource Manager
提供访问非代码的资源机制,比如本地化字符、图形、布局文件
(4)Notification Manager
为应用程序提供在状态栏显示自定义警告信息的能力
(5)Activity Manager
管理应用程序的生命周期,提供后退导航机制

Libraries
提供一套C/C++库,以供Andriod系统不同组件调用,库的开放途径是通过Application Framework,下面列举核心库:
(1)System C Library
基于BSD实现的C标准库(libc),专门针对嵌入式linux设备调整
(2)Media Library
基于PacketVideo的OpenCORE,这个库支持多数公共的视频音频格式的播放、录制,以及静态图片格式,包括MPEG4 H.264 MP3 AAC AMR JPG PNG
(3)Surface Manager
管理显示子系统的入口,无缝组合用于多应用程序的2D、3D图形层
(4)LibWebCore
一个现代Web浏览器引擎,该引擎增强andriod浏览器和嵌入式Web视图
(5)SGL
基本的2D图形引擎
(6)3D Libraries
一个基于OpenGL ES 1.0API的实现,该库使用硬件加速或者内含的高度优化的3D光栅刷新软件
(7)FreeType
位图、矢量字体渲染
(8)SQLite
用于所有应用程序的、功能强大的、轻量级关系数据库引擎

Android Runtime
Android包含一套核心库,该库提供能在核心JAVA语言核心库中获得的大多数功能。每个Android程序都运行在他自己的进程中,即Dalvik虚拟机的自主实例。Dalvik编写目的是:让一个设备能有效运行在多个虚拟机上。使用Dalvik执行文件格式(.dex)的Dalvik虚拟机针对小内存占用而优化。这个虚拟机是基于注册机制的,运行的类使用JAVA语言编译器编译,该编译器使用内置的DX工具转换成.dex文件格式。Dalvik虚拟机依赖LINUX内核,该内核提供诸如线程、低级别内存管理的基本功能

Linux Kernel
Android 基于提供诸如安全、内存管理、进程管理、网络堆栈、驱动模型功能的LINUX2.6。该内核也起着在硬件和软件堆栈之间的抽象隔离层的作用。

2008年11月4日星期二

android是什么

android是什么?
是用于移动设备一组软件。
包括开放式操作系统、中间件、关键应用程序。
android SDK提供在android平台上使用JAVA语言开发应用程序的工具和API

android特点:
1、Application Framework提供组件的复用和替换
2、Dalvik virtual machine针对移动设备最优化
3、Integrated browser基于WebKit引擎
4、Optimized graphics强力提供自建2D图形库,3D图形基于OpenGL ES 1.0规范
5、SQLite用于结构化数据存储
6、Meddia Support用于通用视频音频,更提供现有的图形格式支持,包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF
7、GSM Telephony使用硬件支持
8、Bluetooth,EDGE,3G,and WIFI使用硬件支持
9、Camera,GPS,compass(指南针),and accelerometer(加速计)使用硬件支持
10、Rich development environment包括设备模拟器、调试工具、内存和性能分析、eclipse插件

2008年11月2日星期日

转:Linux高性能计算集群

Linux高性能计算集群 - 概述

金戈 (jinge@cn.ibm.com), IBM软件工程师, IBM


1 集群

1.1 什么是集群

简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群系统的节点。

1.2 为什么需要集群

集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发。由于主要用于科学工程计算,所以这些系统并不为大家所熟知。直到Linux集群的出现,集群的概念才得以广为传播。


对集群的研究起源于集群系统的良好的性能可扩展性(scalability)。提高CPU主频和总线带宽是最初提供计算机性能的主要手段。但是这一手段对系统性能的提供是有限的。接着人们通过增加CPU个数和内存容量来提高性能,于是出现了向量机,对称多处理机(SMP)等。但是当CPU的个数超过某一阈值,象SMP这些多处理机系统的可扩展性就变的极差。主要瓶颈在于CPU访问内存的带宽并不能随着CPU个数的增加而有效增长。与SMP相反,集群系统的性能随着CPU个数的增加几乎是线性变化的。图1显示了这中情况。



图1. 几种计算机系统的可扩展性

图1. 几种计算机系统的可扩展性


集群系统的优点并不仅在于此。下面列举了集群系统的主要优点:


  1. 高可扩展性:如上所述。


  2. 高可用性:集群中的一个节点失效,它的任务可以传递给其他节点。可以有效防止单点失效。

  3. 高性能:负载平衡集群允许系统同时接入更多的用户。

  4. 高性价比:可以采用廉价的符合工业标准的硬件构造高性能的系统。



1.2.1 集群系统的分类



虽然 根据集群系统的不同特征可以有多种分类方法,但是一般我们把集群系统分为两类:


  • 高可用(High Availability)集群,简称HA集群。这类集群致力于提供高度可靠的服务。

  • 高性能计算(High Perfermance Computing)集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大的计算能力。


2 高可用集群


2.1 什么是高可用性

计算机系统的可用性(availability)是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:



MTTF/(MTTF+MTTR)*100%


业界根据可用性把计算机系统分为如下几类:

表1. 系统可用性分类

可用比例



(Percent Availability)
年停机时间

(downtime/year)
可用性分类
99.53.7天常规系统(Conventional)
99.98.8小时可用系统(Available)
99.9952.6分钟高可用系统(Highly Available)
99.9995.3分钟Fault Resilient
99.999932秒Fault Tolerant


对于关键业务,停机通常是灾难性的。因为停机带来的损失也是巨大的。下面的统计数字列举了不同类型企业应用系统停机所带来的损失。

表 2. 停机给企业带来的损失

应用系统每分钟损失(美元)
呼叫中心(Call Center)27000
企业资源计划(ERP)系统13000
供应链管理(SCM)系统11000
电子商务(eCommerce)系统10000
客户服务(Customer Service Center)系统27000




随着企业越来越依赖于信息技术,由于系统停机而带来的损失也越拉越大。

2.2 高可用集群

高可用集群就是采用集群技术来实现计算机系统的高可用性。高可用集群通常有两种工作方式:


  • 容错系统:通常是主从服务器方式。从服务器检测主服务器的状态,当主服务工作正常时,从服务器并不提供服务。但是一旦主服务器失效,从服务器就开始代替主服务器向客户提供服务。

  • 负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。



关于高可用集群的讨论很多,这里就不进行深入的阐述了。

3 高性能计算集群

3.1 什么是高性能计算集群

简单的说,高性能计算(High-Performance Computing)是计算机科学的一个分支,它致力于开发超级计算机,研究并行算法和开发相关软件。高性能计算主要研究如下两类问题:



  • 大规模科学问题,象天气预报、地形分析和生物制药等;

  • 存储和处理海量数据,象数据挖掘、图象处理和基因测序;


顾名思义,高性能集群就是采用集群技术来研究高性能计算。

3.2 高性能计算分类

高性能计算的分类方法很多。这里从并行任务间的关系角度来对高性能计算分类。



3.2.1 高吞吐计算(High-throughput Computing)


有一类高性能计算,可以把它分成若干可以并行的子任务,而且各个子任务彼此间没有什么关联。象在家搜寻外星人( SETI@HOME -- Search for Extraterrestrial Intelligence at Home )就是这一类型应用。这一项目是利用Internet上的闲置的计算资源来搜寻外星人。SETI项目的服务器将一组数据和数据模式发给Internet上参加SETI的计算节点,计算节点在给定的数据上用给定的模式进行搜索,然后将搜索的结果发给服务器。服务器负责将从各个计算节点返回的数据汇集成完整的数据。因为这种类型应用的一个共同特征是在海量数据上搜索某些模式,所以把这类计算称为高吞吐计算。所谓的Internet计算都属于这一类。按照Flynn的分类,高吞吐计算属于SIMD(Single Instruction/Multiple Data)的范畴。


3.2.2 分布计算(Distributed Computing)



另一类计算刚好和高吞吐计算相反,它们虽然可以给分成若干并行的子任务,但是子任务间联系很紧密,需要大量的数据交换。按照Flynn的分类,分布式的高性能计算属于MIMD(Multiple Instruction/Multiple Data)的范畴。

3.3 Linux高性能集群系统

当论及Linux高性能集群时,许多人的第一反映就是Beowulf。起初,Beowulf只是一个著名的科学计算集群系统。以后的很多集群都采用Beowulf类似的架构,所以,实际上,现在Beowulf已经成为一类广为接受的高性能集群的类型。尽管名称各异,很多集群系统都是Beowulf集群的衍生物。当然也存在有别于Beowulf的集群系统,COW和Mosix就是另两类著名的集群系统。


3.3.1 Beowulf集群


简单的说,Beowulf是一种能够将多台计算机用于并行计算的体系结构。通常Beowulf系统由通过以太网或其他网络连接的多个计算节点和管理节点构成。管理节点控制整个集群系统,同时为计算节点提供文件服务和对外的网络连接。它使用的是常见的硬件设备,象普通PC、以太网卡和集线器。它很少使用特别定制的硬件和特殊的设备。Beowulf集群的软件也是随处可见的,象Linux、PVM和MPI。



3.3.2 Beowulf集群和COW集群


象Beowulf一样,COW(Cluster Of Workstation)也是由最常见的硬件设备和软件系统搭建而成。通常也是由一个控制节点和多个计算节点构成。COW和Beowulf的主要区别在于:


  1. COW中的计算节点主要都是闲置的计算资源,如办公室中的桌面工作站,它们就是普通的PC,采用普通的局域网进行连接。因为这些计算节点白天会作为工作站使用,所以主要的集群计算发生在晚上和周末等空闲时间。而Beowulf中的计算节点都是专职于并行计算,并且进行了性能优化。它们采用高速网(Myrinet或Giganet)上的消息传递(PVM或MPI)进行进程间通信(IPC)。


  2. 因为COW中的计算节点主要的目的是桌面应用,所以它们都具有显示器、键盘和鼠标等外设。而Beowulf的计算节点通常没有这些外设,对这些计算节点的访问通常是在管理节点上通过网络或串口线实现的。

  3. 因为连接COW中计算节点的通常是普通的局域网,所以COW上的高性能应用通常是象SETI@HOME 这样的SIMD的高吞吐计算。而Beowulf无论从硬件、网络和软件上都对需要频繁交换数据的MIMD应用做了特别的优化。



3.3.3 Mosix集群


实际上把Mosix集群放在高性能集群这一节是相当牵强的,但是和Beowulf等其他集群相比, Mosix集群确实是种非常特别的集群, 它致力于在Linux系统上实现集群系统的单一系统映象SSI(Single System Image)。Mosix集群将网络上运行Linux的计算机连接成一个集群系统。系统自动均衡节点间的负载。因为Mosix是在Linux系统内核中实现的集群,所以用户态的应用程序不需要任何修改就可以在Mosix集群上运行。通常用户很少会注意到Linux和Mosix的差别。对于他来说,Mosix集群就是运行Linux的一台PC。尽管现在存在着不少的问题,Mosix始终是引人注目的集群系统。

2008年10月28日星期二

系统工程师综合面试

1、系统工程师职位说明书和职责要求:

(1)项目的需求管理工作
需求管理工作属于SE的主要工作,包括原始需求的分析(原始需求一般来源于售前和售后工程师,原则上SE不直接参与原始需求的收集),通过正常的渠道流程保持与用户的沟通,确认最终的用户需求,形成需求规格说明书,并对需求的开发实现进行跟踪验证,达到公司及事业部的各项考核指标。

(2)协助项目经理做好项目的管理工作,侧重于研发管理方面的工作,包括:
a)指定产品的研发技术规划,SE是项目的技术专家,在项目的技术体制、总体架构上起决定作用。作为CCB的重要成员,SE需要对技术评审的方案进行严格把关;
b)做好项目各个基线规划,作出明确的版本功能计划和进度要求,能够对基线进行严密控制;
c)做好产品的技术策划工作,对于一些关键和组网比较特殊,需求变动较大的方案,SE通过参与评审和组织审核等手段,进行技术上的把关和控制,使项目的实施具有可操作性;
d)定期更新和提供产品的技术资料,包括业务规范、信令流程等,对相关技术资料的正确性和及时性负责。

(3)对本项目的软件设计缺陷质量问题负责,通过不断的改进措施,提高产品自身的质量水平。

(4)参与项目计划的制定,负责相关研发技术的计划审核。

(5)协助项目线对重要的技术难点进行技术攻关。

(6)新技术的跟踪,产品的持续发展,需要持续的技术动力,SE在新技术的跟踪和引入上负有主要的职责。

2、系统工程师综合素质考评要素和问题

(1)沟通能力
a)您最近工作过的单位的基本情况是什么?请简单产品和市场情况。
b)您目前工作有哪些主要内容?
c)请介绍你的成长过程。

(2)分析能力
a)您在您应聘岗位上的工作经历有哪些不足?有什么改进措施?如果您到我司工作,那么您还有没有更好的改进措施?
b)北京移动提出一个需求:要求在奥运期间提供实时电话查询奥运赛事的功能,你怎么分析这个需求?
c)您刚才介绍了你的成长过程,您认为您的成长关键点是什么?为什么?

(3)自信心
a)您对幸福怎么看的?李嘉诚和一个儿孙满堂整天乐呵呵的80岁老人,哪个更幸福?
b)你认为您能胜任这份工作吗?凭什么?

(4)计划控制
a)举例说明您曾经做过的一个成功计划及实施过程。
b)假如您今天晚会有一场非常重要的约会,说说您打算怎么去应对?是随机应变?还是事先做好策划?
c)您对下属布置的任务时着重要求什么?完成任务的时间给得宽松还是紧凑?

(5)决策
a)我最近看上了苹果的IPHONE手机,要5500元,但是月收入只有5000,如果您是我,你会怎么办?
b)上司突然让你负责一个紧急项目,需要立即决策,您立即着手收集信息,到了您认为您掌握了4/3的情况的时候,您会怎么做?
c)市场部提出一个需求,要求1个月完成,但是实际上根据现有资源情况至少需要3个月,应该怎么办?