科学网

 找回密码
  注册
科学网 标签 应用程序 相关日志

tag 标签: 应用程序

相关日志

2015年将成为“反科技年”吗
kejidaobao 2015-7-3 15:04
据国外媒体报道:“ 多年来,拥有最新的电子设备或者应用程序一直是地位的一种象征。这种事情很快就要发生改变。根据专家们的预测,2015年将成为‘反科技年’,人们将开始抛弃电子设备、社交网站以及其他科技产品,转而追求简单的生活。”为什么会出现这一情况?伦敦通讯机构Hotwire的《数字技术发展趋势报告》告诉我们:“ 科技产品人气下降的一个重要原因在于应用程序、网站和其他屏幕上的广告不断增多。”就是说,科技产品带来广告泛滥这一消极后果是重要原因之一。所以,这一报道看似耸人听闻,其实它所涉及的是以下3个基本问题。 如何看待科技与反科技 在古代,科学技术主要是人类生产活动经验的概括和总结;文艺复兴以后,人类找到了定量表达自然认识、运用实验检验自然认识,从而推动自然认识在继承与批判的交互作用中进步的方法,于是近代科学诞生了。随后发生的几次科技革命,使得科学与技术携起手来,不仅形成二者的良性互动和科学技术的加速发展,而且也使得科学技术对社会的推动作用急剧增强。从根本上说,科学技术是系统化的自然知识体系、人类认识自然和改造自然的社会活动和一种社会建制。尽管科学技术的发展有其内在的逻辑性和较强的自主性,但从整体和根本上看,社会需求始终是科学技术发展强大的推动力。科学技术成果一旦问世,一般都会投入应用,以满足人类物质和精神上的需要以及社会进步的需要。 基于科学技术是现代社会发展的支配力量或“第一生产力”的现实,反科技是错误的、要不得的。进入20世纪以后,反科技思潮在西方的抬头,与后现代主义密不可分。起初,它源于对科学消极作用乃至对科学理性的省思,本来有一定的合理性,只不过,在一些人那里走向了极端,公然站到了科学和理性的对立面,于是,就成为众矢之的了。可以肯定地说,置科学技术在现代社会中举足轻重的地位与功能于不顾,坚持反科技的立场,无异于反文明。 如何看待科学技术的消极作用 关于科技发展所带来的积极作用和消极作用应强调以下3点。 1)消极作用和积极作用相伴而生。 科技成果的研究对象通常是个别的、局部的,而客观世界的一切事物则通常是一个系统,具有整体性;科技成果本身是客观的、一元的,而人类的价值需求则是主观的、多元的。因此,任何一项科学技术成果在发挥积极作用的同时,都会带来相应的消极作用。例如,电子产品在给人类带来极大便利的同时,也带来了电磁波辐射、网络安全和广告泛滥等问题。因此,对于科技成果出现意想不到的消极作用不必大惊小怪。那种认为科技不应有消极作用的观点是对科技的一种幻想甚至迷信。在对科技成果的消极作用缺乏思想准备上,反科技与科技迷信是一致的。科技迷信与反科技两极相通,前者是滋生后者的温床。 2)消极作用因对科技成果的滥用和误用而严重放大。科技成果本来就有作用上的两面性,而一些人为了个人、小集团或本阶层的利益,置消极作用于不顾,一味滥用科技成果,使得许多不应该出现的消极作用出现了。基于这种情况,人们通常认为,社会根源是科技成果消极作用加剧的罪魁祸首。例如,人类违禁使用剧毒、高毒农药屡禁不止的现象就是典型。 3)消极作用和积极作用同步升级。随着科学技术的高速发展,人们见证了科技积极作用的迅速扩张,也见证了科技消极作用的日益加剧。二者之间呈现出“魔高一尺,道高一丈”不断循环的互相斗法、轮番升级的景象。随着科技发展,人类将会享受到科技所提供的便利越来越多,也会遭遇到越来越多它带来的麻烦。事实上,通过克服消极作用而获得进步,乃是20世纪以来科技发展的新常态。我们根本不必因噎废食、讳疾忌医,因科技的消极作用而走“远离科技”甚至“反科技”的极端路线。 如何应对科学技术的消极作用 原则上说,解决科技所带来的各种消极作用需要多管齐下,如,社会制度的改变、人类认识的提高、舆论和道德的约束以及法律制度的完善等。但无论如何,科技手段是必要条件,也是解决科技消极作用最直接、最有效的手段。在不少情况下,各种社会因素的参与往往都是为科技手段的顺利研制、恰当应用和扩大积极作用而提供保障的。原则上不存在人类永远都不能解决的科技消极作用,而科技所衍生的消极作用又必定是一波未平一波又起的。所以,对科学技术发展持乐观态度没有错,但不可盲目乐观,不可对科技的消极作用麻痹大意。 具体到科技产品所产生的广告干扰问题也是这样。首先,广告干扰并不单单是科技产品本身所带来的问题,而是掺杂了诸多社会因素的影响。广告早已有之,电子科技产品只是提供了一种新的载体,使得它有可能泛滥成灾。其次,它是可以解决的。例如,制定合理而严格的广告法,以及在科技产品上安装相应的控制广告软件或广告拦截程序等,都是解决广告干扰问题的必要措施。 事实上,报道中的Hotwire报告显示,在一部分人扬言远离科技甚至反科技的同时,有超过60%的人拥有1个以上的科技产品。报告称随着平板电脑的价格不断降低以及可穿戴装置的进一步普及,人均拥有的科技产品数量还将继续增多。这说明反科技不得人心,也不会得逞。不仅2015年不会成为反科技年,以后任何年份都不会成为反科技年。 文/马来平 作者简介 山东大学儒学高等研究院,教授。 (编辑 王丽娜)
个人分类: 栏目:科技纵横捭阖|762 次阅读|0 个评论
赛门铁克加速NSX安全化编排,或将拥抱ACI
SDNLAB123 2015-6-8 13:27
随着数据中心不断向云化的演变,物理和虚拟之间的界限越来越模糊。企业要将重要数据和应用程序迁移到基于云的环境中,但是对于安全来说面临着重重挑战。为了保护物理和虚拟服务器, IT 专家一直以来都依靠防病毒等传统的防护技术,但这些传统安全解决方案往往造成了安全空白。 赛门铁克( Symantec )看到了网络虚拟化扎根数据中心在策略和自动化编排领域的机会,其运营总监负责 DCS 生产线的安全策略和自动化部署,该生产线集成了 VMware 的 NSX 虚拟化平台。像 NSX 提供自动化网络配置一样,赛门铁克希望卖给客户基于安全策略的自动化网络配置服务。 这种服务或许将成为数据中心虚拟化安全市场的重要组成部分。就在本周 , 英特尔安全启动了一个类似于集成 NSX 的服务 , 使英特尔的安全控制器能在虚拟层自动提供安全化工具。 目前,赛门铁克尚未将 DCS 服务扩展到 Cisco 的 Application-Centric Infrastructure ( ACI )中(二者在 SDN 处于竞争对手地位,不过 VMware 的 NSX 是纯软件的,而思科的 ACI 则是软件与专有硬件的混合)。不过 Doherty 表示赛门铁克的 CIO Sheila Jordan 正在推进这项工作。 Symantec 技术联盟的副主席 Sean Doherty 和安全数据中心的首席架构师 Deb Banerjee 都相信在 5 年内,软件定义数据中心将标准化。 本文转载自 SDNLAB ,更多新闻请关注: http://www.sdnlab.com/news/
个人分类: 技术交流|1859 次阅读|0 个评论
为什么OpenStack这么受金融服务业青睐?
SDNLAB123 2015-5-28 13:30
编者按:频发的金融危机迫使金融业作出各种调整, OpenStack 成为金融业调整的一个重大方向,这表明他们正在竞相部署面向客户的应用程序,试图将银行逐渐从实体的分支机构转移到移动 web app 上。 众所周知,自从 2008 年美国金融危机以来,银行的日子并不好过。在雷曼兄弟破产后的 6 年多内,美国商业银行的数量下降了 20% 以上,减少至 5500 家。一方面是因为美国新的紧缩政策给银行业带来的压力,另一方面是因为在线金融服务的兴起加剧了竞争。 为了应对这种情况,一些大型的金融服务公司很早开始就对 OpenStack 开源云架构平台产生做过一些尝试,试图通过推出移动在线银行服务来打破目前的局面,包括美国运通 (American Express) 、富国银行 (Wells Fargo) 和西班牙对外银行( Spain-based BBVA )在内的几大银行都在尝试在他们的私有数据中心部署 OpenStack ,有消息显示美国运通 (American Express) 在生产环境中的部署规模已经达到了 4W 核。 各大银行对 OpenStack 的热衷表明他们正在竞相部署面向客户的应用程序,试图将银行逐渐从实体的分支机构转移到移动 web app 上。 “我们给客户提供价值的主要途径就是通过应用程序。”西班牙对外银行( Spain-based BBVA )创新业务部的全球首脑 Jose-Maria Sanjose 在去年 11 月的巴黎 OpenStack 峰会上这么说到。 对于银行的大量交易数据来说存储的成本至关重要。 Cavium 公司(一家基于 ARM 处理器制造商)的董事 Larry Wikelius 曾表示:他们在华尔街的客户曾经透露,永久保存所有数据比筛选出那些允许被删除数据的成本要低很多。 Wikelius 说目前有多家公司正在对 OpenStack 与开源存储系统 Ceph 的对接进行测试。 美国银行 (Bank of America) 和 TD 银行也在重点推进 OpenStack 部署,据说这两家公司将会在本周温哥华举办的 OpenStack 峰会上出现。 “成百上千的初创公司为传统银行的转型投入了大量的人力物力,”摩根大通( JPMorgan )董事长兼首席执行官杰米•戴蒙 (Jamie Dimon) 在最近的一次致股东的信中写道:“硅谷来了。” 本文转载自: SDNLAB
个人分类: 技术交流|1114 次阅读|0 个评论
基于ONOS的SDN-IP架构概述篇
SDNLAB123 2015-1-8 14:37
编者按: SDN-IP 是 ONOS 上的一个应用程序,允许软件定义网络使用标准的边界网关协议( BGP )连接到外部网络。从 BGP 角度看, SDN 网络表现为单一的自治系统( AS ),其行为与任何传统的 AS 一样。基于 AS 的 SDN-IP 应用提供 BGP 和 ONOS 之间的集成整合机制,在协议层 SDN-IP 的行为作为一个有规则的 BGP 发言人。从 ONOS 的角度来看,它只是使用其服务,在 SDN 数据平面安装和更新相应的转发状态的应用程序。 1 架构目标 1.1 SDN-IP 设计目标 (1) 兼容性 Compatibility : SDN-IP 可以与已经使用 BGP 的网络集成,外部、内部、或两者之间都可以,兼容性很好。 (2) 操作灵活性 Operational flexibility : SDN-IP 可以在一个或多个 ONOS 实例中运行。 SDN-IP 也可以在多种 BGP 的部署方案中使用,体现出很强的灵活性。 (3) 高可用性 High availability ( HA ): SDN-IP 应用程序本身提供 HA 服务。只要有其中一个 SDN-IP 应用实例在运行, SDN-IP 服务就会保持无缝连接。此外, SDN-IP 利用提供 ONOS 的 HA 机制在数据平面中维持一致的转发状态。 (4) 可扩展性 Scalability :可以通过正在运行的基于 BGP 网络和多个 ONOS 集群的 SDN-IP 控制大型的软件定义网络。 (5) 协议兼容性和供应商的独立性 Protocol compatibility and vendor independence : SDN-IP 依赖于标准的 BGP 协议交换网络信息,并且不需要任何专有或特定于供应商的扩展。 1.2 架构概述 SDN-IP 架构如图所示: 2 连通性 2.1 SDN-IP 应用 intents 下面是两种类型的 SDN-IP 使用应用 intents 的简要说明。 ( 1 )单点对单点的 intents 在外部路由器和 SDN BGP Speakers 之间建立 BGP 对等会话使用单向单向 intents 。每个 intents 在 SDN 网络中连接两个连接点。每个连接点包含以下信息: SDN 交换机的 DPID 、交换机 Port 和连接的 BGP Speaker 路由器的 MAC 地址。 ( 2 )多点对单点的 intents 多点对单点的 intents 用于与外部网络的主机连接在一起的单向 intents 。每个 intent 与每个 IP 前缀(目的 IP )相关联,并连接 SDN 网络的入口连接点与单一的出口连接点,指向下一跳路由器的目的 IP 。在 SDN 网络的边缘入口,一个 IP 包匹配目的 IP 地址。选择最好最优的转发项匹配转发数据包到相应的出口连接点。此外,该数据包被转发之前,应用“改变目的 MAC 地址”,使得包含出口 IP 路由器的数据包转发到目的 MAC 地址。 2.2 SDN 数据平面连通 在 SDN-IP 网络的数据平面主要用于以下情况: ( 1 )进行内部 BGP Speaker 和外部 BGP 路由器(配置 eBGP peerings )之间的 BGP 流量控制。 ( 2 )横穿 SDN-IP 网络的外部 IP 网络之间数据流量传输。 eBGP 控制流量与每个 eBGP 对等的操作有关。这种流量在 eBGP 对等操作配置的基础上是点对点的、双向的,且终点是相对静态设定的。当一个数据平面失败,可能会导致终点之间的路径改变。这种故障可被自动检测且相关的 intents 会被 ONOS 重新设置路由。目前,具体的连接点与每个 BGP Speaker 相关,且外部 BGP 路由器需要在 SDN-IP 配置文件中手动配置,但是将来这种需求会被淘汰。 传输数据流量的路径是通过由外部 BGPpeers 发布的 BGP 路由定义。类似于常规的 BGP 部署,这些路由是相对动态的,且它们的数量非常大。如果 BGP peer 通告特定 IP 前缀的路由,并且被选为路由最好的下一跳地址, SDN-IP 将负责建立相应的数据路径。所有的流量决定进剩余外部 IP 网络的 IP 前缀被转发向最匹配的外部下一跳 BGP 路由器上。 ONOS 应用 intents 的情况下,通过创建一个多点对单点应用 intents 实现 IP 前缀:出口路由器(即最佳的下一跳路由器)是(出口)单点 intent ,其余外部 BGP 路由器是(入口)多点的 intents 。 SDN-IP 应用负责生成多点对单点的应用 intents 请求和用于更新 BGP 路由动态响应的 intents 。 ONOS 本身负责汇编这些请求、在交换机数据平面安装相应的转发流和以防 SDN 网络发生故障重新设置路由的 intents 。 2.3 SDN 控制平面连通 在 SDN 网络和 SDN-IP 应用程序实例中 BGP Speaker 通信使用 iBGP 。对等会话在控制平面中创建,因此,每一个 BGP Speaker 连接到它。 在任何的 BGP 部署中 BGP Speaker 和 SDN-IP 应用实例是互连的:一个完整的 iBGP 网状、路由反射等。唯一的区别是,在 SDN-IP 实例它们之间不需要 iBGP peerings ,他们只需要与 BGP Speaker 互连即可。 SDN-IP 实现了 IBGP 协议的子集:只接收处理来自 BGP Speaker 的 BGP 路由信息,但从来不发起或重新发送 BGP 路由。一旦 SDN-IP 接收来自外部路由器(经由 BGP Speaker 接收)的通知,它将路由信息变换成 intents 请求给 ONOS 。 ONOS 本身将其转换交换机中的 OpenFlow 流表项。 BGP Speaker 使用 iBGP 传输路由信息给 SDN-IP 应用实例,当在常规的 BGP 部署中,通过全网或者使用路由相应服务器实现互连通是非常重要的。因此,我们可以使用 BGP 本身所提供的故障失效性。 SDN-IP 应用程序实例之间是不需要 iBGP peering 的: peering 是在 BGP Speaker 和 SDN-IP 应用程序实例之间的。 2.4 高可用性支持 SDN-IP 提供使用热备份模式支持高可用性。 SDN-IP 应用程序可以加载在多个 ONOS 实例。所有的 SDN-IP 应用监听路由更新 BGP 的到达信息,但只有一个 SDN-IP 实例被指定为主实例负责推送 intents 到 ONOS 。如果主实例失败,剩余实例中的一个将成为新的主实例继续推送 intents 到 ONOS 。 SDN-IP 使用 ONOS 领导选举服务来选择主 SDN-IP 实例。我们必须确保在任何时间只有一个实例推送 intents ,防止错误的 intents 被推送到 ONOS 。当每个 SDN-IP 实例启动时,它参与领导选举试图成为主实例。选举确保在任一时间只有一个实例可以是主实例。当主实例发生故障,选举机制检测到故障,并允许另一个实例接管负责成为主实例。新的主实例首先进行 intents 同步保证 intents 更新之前学习的 BGP 路由。一旦同步完成,主实例正常工作,为响应 BGP 更新继续安装和删除 intents 。 尽管 SDN-IP 应用程序支持 HA (高可用性),该系统仍然容易受到组件故障,除非内部 BGP Speaker 和 BGP peer 会话之间有冗余。每个 SDN-IP 实例能够接收来自 BGP Speaker 的 BGP 更新,确保多个内部 BGP Speaker 部署在 SDN 网络中。 3 限制 在 SDN-IP 应用程序的当前实施中具有以下限制: (1) 详细配置信息只能在 SDN-IP 启动之前配置。启动后用户不能改变配置,例如,当 SDN-IP 运行时,用户不 能添加其他外部 BGP peer 。 (2) 只有传输 IP 流量被支持。也就是说, SDN-IP 网络里来自主机的或者决策于主机的 IP 流量不支持。作为 应 急措施,用户可以手动创建专门的 intents 允许内部主机与外部网络的通信未来这应该是 SDN-IP 自动完成 的。 (3)SDN-IP 应用默认监听 BGP 连接的是非标准端口 2000 ,这不是用于 BGP 连接的正常标准端口 179 。但是这个 端口号是可配置的,它可以配置为 179 ,但必须以 root 身份运行绑定到一个受保护的端口。以 root 身份运 行 ONOS 目前还不支持。 (4) ONOS 实例之间 SDN-IP 不会进行负载均衡。所有的工作是由一个单一的主实例进行。如果一个实例失败, 可以切换到备份的情况下运行。 (5) 在 SDN-IP 应用端没有明确的 IBGP 会话配置。默认情况下, SDN-IP 应用将接受所有 BGP 开放消息,并会自 动配置来使用原始 BGP Speaker 的 AS 号。 (6) 如果所有的 SDN-IP 应用程序实例被卸载,相关的应用程序 intents 不会自动从 ONOS 中删除。 (7) 如果下一跳的 MAC 地址发生变化,不会更新 intents 而使流量将停止流动。 (8) 目前只支持 IPv4 。 (9) 外部 BGP 路由器和内部 BGP Speaker 间的 peer 会话必须使用 TCP 端口 179 进行对等连接。只有 TCP 连接到端 口 179 才被允许进出 SDN 网络的对等 IP 地址。 (10) 由于 intents 框架的局限性,在 1.0.0 版本系统可以处理约 15000 路由。 本文来源于 SDNLAB ,可点击此 阅读原文 。如果您对本文感兴趣,可参与以下互动方式与作者近距离交流。 如果 您对 本文 感兴趣,可参与 以下 互动方式与作者近距离交流。 (1) 微博( http://weibo.com/sdnlab/ ) (2) 微信 ( 账号 : SDNLAB ) (3) QQ 群 SD N研究群(214146842) OpenDaylight研究群(194240432)
个人分类: 技术交流|2749 次阅读|0 个评论
Blast+使用的小“陷阱”
michael0214 2014-10-31 11:52
自1989年被NCBI首次推出以来,Blast程序无疑是生物信息领域应用最广泛的软件之一(或者没有之一)。序列相似度分析依然是基因注释的一个重要指标。2009年NCBI推出了加强版的Blast - Blast+. 与之前的版本不同,这款Blast+具有两大特色:1)与之前的blastall 功能一体化不同,Blast+中对blastn, blastp等分别设计了独立的应用程序(或者叫模块化);2)推出了-remote参数,即用户可以将数据提交至NCBI server进行分析,类似于Web版本。 闲话 少叙,直奔主 题 。今天在使用新的 Blast+ 的 blastn 功能 将已经注释过的 CDS序列对应相应基因组序列时,竟然发现有两条CDS返回的结果是 0 hits. 提取出相应地序列后发现一个特点是两条序列长度都非常短。第一个想到的问题可能是用于基因组注释的版本与这里使用的基因组序列版本不一致。但是通过其他可以match的序列后发现两者的基因组序列是吻合的,而且根据注释信息竟然从基因组序列中提取到了一致的序列。最后经过仔细考察Blast+的manual http://www.ncbi.nlm.nih.gov/books/NBK1763/ , 发现了问题。原来Blastn程序包含了megablast, 且default value即为magablast. Megablast 是在intraspecies 或者very closely relatedspecies中使用blast版本,其特点是word_size较大(默认值为28bp),这样就可以在initial match过程排除掉很多情况,从而加快比对速度。而在这里,对于上述的两个较短片段就无法搜寻到结果了。原有基础上增加 –taskblastn后即一切正常了。当然这时也可以设置 word_size参数,发现25bp是这里的临界值。Word_size 超过25bp时,一些短序列blast结果即为no hits.
3535 次阅读|0 个评论
云计算基础知识
helloating1990 2014-9-13 18:32
云计算核心服务可以分为三个子层: (1)IaaS: 基础设施即服务层 ——提供基础设施部署服务,为用户提供实体或虚拟的计算、存储和网络等资源,数据中心是基础。 ——使用者上传数据、程序代码和环境配置 (2)PaaS:平台即服务层 ——云计算应用程序运行环境,提供应用程序部署与管理服务 —— 使用者上传数据、程序代码 (3)SaaS:软件即服务层 ——基于云计算基础平台所开发的应用程序 —— 使用者上传数据 ——对用户来讲,SaaS将桌面应用程序迁移到互联网,可实现应用程序的泛在访问。
个人分类: 大数据 云计算|1230 次阅读|0 个评论
[转载]【数据库类】【SQLite入门与分析】
lcj2212916 2014-7-13 19:48
【名稱】:SQLite入门与分析 【作者】:--- 【大小】:441KB 【格式】:docx 【語言】:簡體中文 【內容簡介】:   1 、 SQLite 介绍   自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。正与数据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源,增加了管理的复杂性。随着软件应用程序逐渐模块模块化,一种新型数据库会比大型复杂的传统数据库管理系统更适应。嵌入式数据库直接在应用程序进程中运行,提供了零配置(zero-configuration)运行模式,并且资源占用非常少。   SQLite是一个开源的嵌入式关系数据库,它在2000年由D. Richard Hipp发布,它的减少应用程序管理数据的开销,SQLite可移植性好,很容易使用,很小,高效而且可靠。    SQLite 嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个 RDBMS ,但在进程内部,它却是完整的,自包含的数据库引擎。 .................. 【下載載點】: http://www.400gb.com/file/68398352
1439 次阅读|0 个评论
[转载]【系统相关】【Windows Server 2008 安装指南】
lcj2212916 2014-7-11 18:55
【名稱】:Windows Server 2008 安装指南 【作者】:--- 【大小】:2.54MB 【格式】:PPT 【語言】:簡體中文 【內容簡介】: Windows Server 2008 是专为强化下一代网络、应用程序和 Web 服务的功能而设计,是有史以来最先进的 Windows Server 操作系统。拥有 Windows Server 2008,您即可在企业中开发、提供和管理丰富的用户体验及应用程序,提供高度安全的网络基础架构,提高和增加技术效率与价值。 Windows Server 2008 虽是建立在 Windows Server 先前版本的成功与优势上,不过,Windows Server 2008 已针对基本操作系统进行改善,以提供更具价值的新功能及更进一步的改进。新的 Web 工具、虚拟化技术、安全性的强化以及管理公用程序,不仅可帮助您节省时间、降低成本,并可为IT基础架构提供稳固的基础。 1. WindowsServer2008优点介绍; 2. 系统和硬件设备要求 3. 安装方式 4. 安装前的注意事项 5. 安装WindowsServer2008 6. 排除故障 【下載載點】: http://www.400gb.com/file/68284103
1145 次阅读|0 个评论
[转载]【网络编程】【PHP的十个高级技巧】
lcj2212916 2014-5-16 18:37
【名稱】:PHP的十个高级技巧 【作者】:--- 【大小】:12K 【格式】:TXT 【語言】:簡體中文 【內容簡介】: 全球超过300万个互联网网站的管理员都在使用PHP,使得它成为最为普及的服务器端脚本语言之一。其特点是运行速度快、稳定可靠、跨平台,而且是开放源代码软件。随你使用的水平不同,PHP可以很简单,也可以很复杂,可以只使用它发送HTML表格元素,还可以在PHP应用程序中集成Java和XML。 如果你对PHP有一定的了解或者看过一些初步的教材,这些技巧可以扩展你对PHP的认识,使你掌握一些常见的和高级的PHP功能。 【下載載點】: http://www.400gb.com/file/64806378
1232 次阅读|0 个评论
Polhemus Fastscan Scorpion三维立体扫描仪手持激光扫描仪
cangdongbo 2014-1-20 12:21
使用FastSCAN对整个物体的表面进行平稳扫描,即可迅速得到该物体的三维尺寸——其扫描过程有如喷漆一般。物体图像可迅速出现在你的计算机屏幕上,扫描结果将结合任一种重叠扫描方式进行处理,从而显著降低了开发物体局部或非金属物体模型表面的次数。内部集成了FASTRAK技术,FastSCAN结合了方便的手持功能,可实时进行三维模型的“自动缝合”。扫描的数据可以很容易地被输出到业内标准的图形应用程序:动画/CAD设计/虚拟现实。选用数字化探笔可以准确地记录隐蔽处的位置和方向。 FastSCAN还包括了一个文件包大小的手提箱。 Scorpion由于采用双激光头,扫描速度是Cobra的两倍,适合于扫描复杂的物体。 功能: 当你需要一个快速又简便的方法产生三维图像时,FastScan手持激光扫描仪可以帮你实现梦想! 1.便携:作为一个工业标准的易携带、重量轻的手持扫描仪,FastScan可以带你到从没有扫描仪去过的地方:考古挖掘地、作物栽培基地,甚至进入对光敏感的医疗监测室。从打开箱子开始,5分钟之内就可以做好准备工作。 2.快速:可以将被扫描的物品线条迅速编结在一起,得到一个精确的模型复制品。即刻产生三维图像:像是在变魔术一样,物体被扫描过的部分实时显现在你的计算机屏幕上,并将扫描过的部分进行交替处理。 3.多种图形输出格式:被扫描物体的三维图形数据可以被保存成12种以上的工业标准格式,可以用来做三维建模,图形设计,以及CAD项目。 4.运动物体的扫描:扫描仪中的魔力来自Polhemus公司的专利产品 FASTRAK 动作追踪技术。磁性追踪器用来确定扫描仪的位置和方向,使计算机能够完整地复制出物体的三维表面。这仅需给物体附上第二个追踪接收器。 5.公制或英制测量单位:允许以毫米或英寸来表示测量的单位。 应用领域: 动画制作、考古、建筑、广播和电影、计算机游戏、教学、工业设计、医疗、多媒体和网页制作、快速范例和逆向工程。 FastSCAN很轻,便于携带,可以到实物现场工作。因为采用手持方式,对于生理方面的扫描工作就免除了机械上的束缚。 这种扫描仪使用起来就像在喷漆:通过手握扫描仪的把柄,对着目标平滑移动,即时采集三维物体的表面数据。目标的图像同时显现在您的计算机屏幕上,扫描完的数据可以自动消除重叠的部分,极大地节省了三维非金属目标的建模时间。这些数据可以保存成标准的图形格式,应用在其它软件程序中。 FastSCAN Cobra 可以扫描非金属、不透明的物体。扫描仪通过投射一束激光到物体上,来记录物体表面的轮廓截面数据。嵌入的FASTRAK,被用于探测手柄的位置和方位,使得计算机能够重建全部的物体的三维表面。至于移动的扫描对象,可以在上面附加一个空间传感器。 扫描人物 手持激光扫描仪可用于数字化人物外形来制作动画、多媒体、特定的时装设计、生物医学研究等等。以下的例子表明扫描仪能够: 快速扫描保持静止状态的人 1.使用第二个空间传感器,把它固定在头巾上来追踪人物的运动。 2.可以旋转扫描得到清晰的图像。 扫描物体 手持激光扫描仪可用于动画制作、快速生成虚拟原型、三维测量、文物等模型化存档等。以下的例子表明扫描仪能够: 1.迅速数字化物体的完整三维表面 2.以标准的图形格式保存这些数据,应用在其它软件程序中。 技术指标 与计算机的接口:USB 自带软件 灵便、直观的图形界面 三维图形显示模式:点云,网格,可选是否叠加法线的平滑表面 三维控制:旋转,缩放,移动,中心点会聚 在屏幕上直接测量两点间距 可选分辨率,细小表面碎块的合并,外露层的切除 选定并删除某些表面;选定并删除某次扫描;设定背景和图像的颜色以及亮度。 可以输出的格式包括:3D Studio Max? (.3ds), ASCII (.txt), AutoCAD (.dxf), IGES (.igs), Lightwave (.obj), Matlab (.mat), STL (.stl), 虚拟现实建模语言 (.wrl), Wavefront (.obj), Open Inventor (.iv), 和Visualization Toolkit (.vtk) 分辨率 在距离被扫描物体20厘米范围内,可分辨到0.5mm;最佳可分辨0.1毫米。 扫描速度是每秒50线,线和线之间的间隔取决于激光头的移动速度,在每秒50毫米的移动速度下,分辨率是1毫米。 工作范围:发射天线和扫描仪之间可达75厘米距离;也可选用更大功率的发射天线(TX4),工作范围可达105厘米。 精度: 0.178毫米 环境要求:大的金属物体和强电磁环境会影响扫描的效果,透明/半透明的,黑色的,强反射的物体表面都会影响扫描效果,这些表面需要做人工的处理(如涂上白漆)。 标准系统构成: - 定制的电子处理器,11.0 英寸 x 11.4英寸x 3.6英寸 - 扫描杖长度为230mm - 激光器670nm, 1mW, Class II - 系统选项,如 可选的RBF软件:是用来修补没扫描地方出现的孔、洞(插值计算处理);可自动进行洞穴填补,表面平滑外推,网格简化,以及输出封闭网格 - 自动填补洞穴 - 平滑的表面推算 - 保留扫描细节的网格简化 - 输出封闭的水密网格 - 通过更多统一的三角形使网格特色化 - 扫描低通过滤(平滑)处理 可选的Delta软件:是做物体表面测量和分析的软件。 例如,可以分别在美容手术前后对人的面部进行扫描,用Delta软件进行两组数据的对比,如鼻梁的高度,曲面形状等。譬如,同一颗植物,对比前后两天的形状数据,比较变化的特点。 可选的数字化探笔:提供的数字参考符号可以准确地指出标记点的位置和方向。扫描工作一旦开始,按动笔式扫描器上的按钮便可在追踪器空间系统中产生指示器的位置和方向。 可选的发射天线和接收器 可选不同功率和大小的位置追踪发射天线 可选不同大小的附着在被扫描的移动物体上的接收传感器 常见问题 我们研究虚拟作物,已经有了FASTRAK, 为什么还要买FASTSCAN? 如果利用FASTRAK去采集数据,在植物已经长高的情况下是比较繁琐。这时需要激光扫描仪,其实FastScan就是在FASTRAK基础上发展的手持三维扫描仪,手的相对植物的运动(远近,高低)不会影响采集数据的准确性。FASTRAK所带的LongRanger和Stylus,都可以和FastScan共享。 野外如何使用? 如果在野外,因为FastScan需要交流电,就必须配备一个逆变器,可以把从汽车上的点烟器引出的直流电,变成交流电。 精度: 1mm 分辨率:0.178mm 范围:15英尺。 数据传输速度:每秒100线 用途:医疗、大学研究、军事仿真和训练以及计算机辅助设计 动画制作、考古、建筑、广播和电影、计算机游戏、教学、工业设计、医疗、多媒体和网页制作、快速范例和逆向工程
4110 次阅读|0 个评论
[转载]使用Visual Studio新建项目时,win32控制台
EnergeticYi 2013-8-7 20:39
( 中国无鼻子无脸人、中国有鼻子有脸人、重庆整形人、中国人有什么关系?) 带有"中国"字样的,是一类人,都属于"中国人"。重庆是中国的一个市,"重庆整形人"也属于"中国人"。 所以,"Win32控制台应用程序"、"空项目(准确的说应该是win32空项目)"、"MFC应用程序"都属于"win32项目"。带有"win32"字样的都属于一类,只不过"MFC"是其中的一个异类。 “win32控制台应用程序”就是那个"中国无鼻子无脸人",长得不帅,黑漆漆的一张脸,做起事来有效率,但是如果派他去做坏事,比如入侵女生宿舍什么的,会被发现。他的脸不会改变,总是黑漆漆的。那啥,没鼻子的脸,也是一张脸。 "MFC应用程序"是"重庆整形人",没有"中国人"就没有"重庆整形人",所以"MFC"是基于"win32"的。不管怎样,他都是好面子的人,所以他总是会有一张脸。而且这个脸可以自己弄,而且很方便。要鼻子?不用你自己弄,我这有个模型,你说说尺寸大小就行了。还有嘴巴?行! "win32项目"就是"中国人"了,我给你一个人,要脸还是不要脸?要鼻子还是要嘴巴?这个你自己弄,我这也没模型,哥们儿你自己动手,丰衣又足食啊! "空项目",空的项目,自然是什么都没有,不仅什么都没有,而且最后能不能弄出一个人来都还是一个问题。 ----------------------------- Win32控制台应用程序和Win32项目的区别 ​ 空项目就是指不加载编译工具自动生成的代码,由开发人员自己组织工程文件架构。 win32与控制台应用程序 实际上两者并没有多大区别。最大的区别当然是程序入口了,console的入口是main,Windows的入口时WinMain。而程序的入口点是可以重新设置的。我们可以在console应用程序中设置其入口点为WinMain,反之亦然。
0 个评论
多态与应用程序框架
baibing 2013-5-31 14:17
在C++模板实现静态多态时,有一种叫做Barton-Nackmann 技巧或者称 奇异 循环模板模式(Curiously Recurring Template Prattern)。 这个模式的根本就是在派生类定义时,将自身类名传递到基类的模板参数中。 据说,这种方式就可以实现静态多态。 也就是在基类中可以实现对派生类的函数调用。 有的人就提出问题:为什么要用这个技巧?我直接用普通的派生,不照样既可以访问到基类的函数也可以访问到本派生类的函数了? 这个问题有道理,但是也反映了没有理解多态的根本用途。 我们在visual c++ 开发中,利用程序向导生成了程序,我们看到的并不是程序框架, 因为,许多基类代码被隐藏了,就连整个应用程序的脉络--Winmain函数也是被隐藏的, 我们看到的只是程序的几个简单的派生类。 也就是说,微软希望我们的软件开发模式,只不过是增补一些与用户具体应用有关的类,这些类以派生类的方式写出来就行了,这些类自动被应用程序框架所调用。 但是,问题是,应用程序框架 是微软已经帮我们写好了,并隐藏起来了,他是怎样在骨干程序的运行过程中,知道我们用户将来开发出来的派生类的代码呢?他通过什么机制从先开发出来的老的骨干程序调用新的派生类的代码呢? 因此,他需要一个这样的访问机制。对,MFC的虚函数就是这样一种机制。 根据虚函数的原理,在骨干程序中,先期存在的指向老的、基类对象的指针 是可以访问到派生类对象的虚函数的:此时,通过基类指针的虚函数调用,就会:子类有的调用子类的,子类没有的调用父类的。 这正是一种多态。反过来说,多态机制是实现 在 先期框架内访问后期 用户派生类函数的 一种典型应用。 再回过头来看模板静多态。模板静态多态也是一种实现 上述动态多态目的的一种实现方式:在老的框架代码中调用后期的新的派生类的代码。 上文提到的一些人的疑问,假如我们不用模板静多态,而是只用普通的派生技术,那么,此时,在 老的 基类框架代码中是无法访问到将来的 派生类的代码的,所有的实际使用都只能通过派生的对象 作为借口去调用函数。 总结: 在编程时,我们怎么看待MFC和wtl这些编程框架 对应的开发模式和开发心理? 微软 希望的是:框架骨干程序他们来做,用户要做的不是骨干,而是用户特定的细枝末节。 就像一颗大树,怎么骨干怎么生长,他们已经搞好了,用户只需要在上面嫁接枝节,这些枝节自动会被骨干的营养系统循环到。 这个循环机制就是C++多态机制---在骨干中调用派生类的代码! 用户进行开发时,最好做好分工和心态的调整: 如果是做库 以及框架 这些开发工作,那就好好地设计好 接口、模板这些东西,这些东西是公用的基础, 把精力集中到这个上面来,这是供给者的心态。 如果只是作普通应用开发,那就是 做一些细枝末节的类,不要考虑架构,要考虑自己的应用类 如何适应 人家的接口或模板。 下一个博文对WTL中应用这种奇怪技巧 有精彩介绍。
个人分类: 编程|6 次阅读|0 个评论
[转载]MATLAB 生成独立的应用程序
zhaolewen 2013-5-9 19:33
关于matlab生成独立应用程序的实现 一. 在这里我来说一下如何生成独立应用程序的步骤,主要是在没有安装matlab的机器上运行程序,希望对于新手来说有一个帮助.我应用的版本是7.1的. 在没有安装matlab环境的机器中运行matlab程序的步骤: 1.应用matlab编写完成你要实现功能的程序; 2.输入命令mcc -mv *.m 等待matlab处理文件,matlab会生成好多文件的,慢,需要等待; 3.在matlab安装的文件夹中,寻找C:\Program Files\MATLAB71\toolbox\compiler\deploy\win32这个文件夹,然后将这个文件夹中的所有内容复制到你所需要运行matlab程序的机器上。运行MCRInstaller这个程序,将可以matlab的运行库安装到机器上,准备工作完成了,很简单的,可我却弄了很长时间才明白, ; 4.把matlab编译完成的所生成的所有文件,考到你所需要运行matlab程序的机器上; 5.运行所生成的*.exe文件,就可以了。 二, 资料一: 7.3.4 编译后程序的发布 无论编译后产生的是可执行文件,还是动态连接库,要使它们能够发布到别的没有安装 MATLAB的计算机上使用,必须在目标计算机上安装MCR,不能只是简单地把编译后产生的文 件复制到目标计算机上。 可以利用MATLAB命令buildmcr来创建可以发布给最终用户的MCR安装文件。buildmcr的功能 是创建一个包含MCR需要的所有文件的ZIP压缩文件。buildmcr有如下两种调用方式: zipfile = buildmcr zipfile = buildmcr(dirname) 其中返回值zipfile是产生MCRInstaller.zip的完整路径名。在没有输入参数的情况下, buildmcr会把产生的MCRInstaller.zip保存到地址 $MATLAB/toolbox/compiler/deploy/arch /MCRInstaller.zip。 其中$MATLAB代表MATLAB的安装目录,arch代表不同的计算机架构。比如在Windows上,默 认的MCRInstaller.zip的路径为$MATLAB\toolbox\compiler\deploy\win32\ MCRInstaller.zip。 相应地,在Linux上,默认的MCRInstaller.zip的路径为$MATLAB/toolbox/compiler/ deploy/glnx86/MCRInstaller.zip。 也可以使用输入参数dirname来指定MCRInstaller.zip的保存目录。buildmcr('.')将把产生 的MCRInstaller.zip保存到当前工作目录。 一般来说,需要发布的文件有3个: (1)编译得到的可执行文件或者库函数。 (2)CTF文件。 (3)MCRInstaller.zip。 在最终用户的计算机上,首先需要把MCRInstaller.zip解压,并把MCR中可执行文件所在目 录加到系统路径上,然后就可以使用编译后的程序了。 注意:MCR不支持在startup.m中使用addpath命令增加搜索路径。 startup.m是一个可以让用户设置一些关于MATLAB运行的个性化设置。如果你在运行MATLAB 编译器的计算机上使用startup.m来给MATLAB增加一些特别的搜索路径,那么发布的程序运 行时会报错。必须让addpath命令只在非发布情况下才有效。利用isdeployed命令,在 startup.m判断是否运行相关的命令: if ~isdeployed addpath(…) %其他一些命令 endif 另外,编译后发布的程序在运行时需要先把CTF解压。所以在运行这些程序时需要确保对CTF 文件所在目录有写权利。否则,发布的程序在执行时会报错。如果编译后的程序以光盘的方 式发布,那么程序必须先复制到硬盘的某个目录,然后才运行。 资料二: 1、使用matcom方法,但是matcom函数太少,不适合使用。 2、将matlab文件通过命令生成动态链接库dll,在VC程序中调用。(注:与资料一的叙述有 矛盾这处) 3、直接在客户机上安装$MATLAB\toolbox\compiler\deploy\win32目录下的 MCRInstaller.exe程序(83M),就可以了。或者通过matlab命令生成一个CRInstaller.zip 文件,解压缩到客户机上,并将动态链接库目录(??是bin目录吗?)添加到PATH环境变 量中。相比之下还是运行MCRInstaller.exe省事一些,虽然比MCRInstaller.zip要大一点。 三, 一般我们在编写matlab中的gui时,我们都是生成一个fig文件和一个m文件的,但是如果我们要生成独立的应用程序,就是exe程序时,最后让它把两个文件合成一个文件,这样容易生成。方法是在figure窗口中点击file下的export就行了,生成默认文件名为×_export.m文件。(比如a_export.m) 然后我们需要安装matlab complier,如果你已经安装就直接运行mcc -m a_export.m 上面的命令的默认是a_export.m在当前的工作目录下面,如果不是就拷贝过来,或者加上绝对路径就行了。 安装matlab complier的过程如下: mbulid -setup 出现: Please choose your compiler for building standalone MATLAB applications: Would you like mbuild to locate installed compilers /n? 输入y,然后回车,出现 Select a compiler: Lcc-win32 C 2.4.1 in D:\MATLAB\R2007b\sys\lcc None Compiler: 如果你机器上有vc++之类的编译器的话,也会被列出来的,我电脑上没有,所以只有一个 matlab自带的编译器,这里我们输入1,然后回车,出现如下: Please verify your choices: Compiler: Lcc-win32 C 2.4.1 Location: D:\MATLAB\R2007b\sys\lcc Are these correct?( /n): 然后输入y,表示确认就行了,出现安装成功信息,如下: Trying to update options file: C:\Documents and Settings\FreeFly\Application Data\MathWorks\MATLAB\R2007b\compopts.bat From template: D:\MATLAB\R2007b\bin\win32\mbuildopts\lcccompp.bat Done . . . 转自: http://blog.sina.com.cn/s/blog_646f4bc60100m5pi.html
5205 次阅读|0 个评论
国内公司的生财之道
wya 2013-4-2 15:59
某国内企业承担一近200万元的工程项目,提供给用户作为控制终端的苹果IPAD的电源线竟然是英式插头,估计该ipad为港版货。做政府的项目,竟然敢使用走私货! 而且高薪聘请的监理公司对此竟全然不知,没有为进场设备把好关。 此外,他们说自行开发的控制终端apple软件需要向苹果交纳授权费,即单独新购买一台IPAD还不行,要使用他们为本项目开发的软件,还需要另外交纳授权费! 不好好钻研核心技术,为客户做好监理工作,靠这些小伎俩,国内企业难成大器!
个人分类: 社会观察|2652 次阅读|0 个评论
[转载]C#线程同步 互斥量 Mutex
shixuanlv305 2013-3-3 22:52
转自: http://xxinside.blogbus.com/logs/47162540.html 什么是Mutex   “mutex”是术语“互相排斥( mut ually ex clusive)”的简写形式,也就是互斥量。互斥量跟临界区中提到的Monitor很相似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。当前占据资源的线程在任务处理完后应将拥有的互斥对象交出,以便其他线程在获得后得以访问资源。互斥量比临界区复杂,因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。.Net中mutex由Mutex类来表示。 先绕一小段路   在开始弄明白Mutex如何使用之前,我们要绕一小段路再回来。   读书的时候,大家接触互斥量、信号量这些玩意儿应该是在《操作系统》这一科。所以,其实这些玩意儿出现的原由是作为OS功能而存在。来看看Mutex的声明: public sealed class Mutex : WaitHandle 类上有个属性:ComVisibleAttribute(true),表明该类成员对COM成员公开。不去管它,只要知道这玩意儿跟COM有关系了,那大概跟Windows关系比较密了; Mutex它有个父类:WaitHandle   于是我们不得不再走远一些,看看WaitHandel的声明: public abstract class WaitHandle : MarshalByRefObject, IDisposable   WaitHandle实现了一个接口,又继承了一个父类。IDisposable在 C#线程同步(2)- 临界区&Monitor关于Using的题外话 中已简单提到,这里就不再多说了。看看它的父类 MarshalByRefObject : MarshalByRefObject 类 允许在支持远程处理的应用程序中跨应用程序域边界访问对象。 …… 备注 : 应用程序域是一个操作系统进程中一个或多个应用程序所驻留的分区。同一应用程序域中的对象直接通信。不同应用程序域中的对象的通信方式有两种:一种是跨应用程序域边界传输对象副本,一种是 使用代理交换消息。 MarshalByRefObject 是通过使用代理交换消息来跨应用程序域边界进行通信的对象的基类。……   好啦,剩下的内容不用再看,否则就绕得太远了。我们现在知道Mutex是WaitHandle的子类(偷偷地告诉你,以后要提到的EventWaitHandle、信号量Semaphore也是,而AutoResetEvent和ManualResetEvent则是它的孙子),而WaitHandle又继承自具有在操作系统中跨越应用程序域边界能力的MarshalByRefObject类。所以我们现在可以得到一些结论: Mutex是封装了Win32 API的类,它将比较直接地调用操作系统“对应”部分功能;而Monitor并没有继承自任何父类,相对来说是.Net自己“原生”的(当然.Net最终还是要靠运行时调用操作系统的各种API)。相较于Monitor,你可以把Mutex近似看作是一个关于Win32互斥量API的壳子。 Mutex是可以跨应用程序/应用程序域,因此可以被用于应用程序域/应用程序间的通信和互斥;Monitor就我们到目前为止所见,只能在应用程序内部的线程之间通信。其实,如果用于锁的对象派生自MarshalByRefObject,Monitor 也可在多个应用程序域中提供锁定。 Mutex由于需要调用操作系统资源,因此执行的开销比Monitor大得多,所以如果仅仅需要在应用程序内部的线程间同步操作,Monitor/lock应当是首选。 有点象Monitor?不如当它是lock。   好了,终于绕回来了。来看看怎么使用 Mutex 。 WaitOne() / WaitOne(Int32, Boolean) / WaitOne(TimeSpan, Boolean) :请求所有权,该调用会一直阻塞到当前 mutex 收到信号,或直至达到可选的超时间隔。这几个方法除了不需要提供锁定对象作为参数外,看起来与Monitor上的Wait()方法及其重载很相似相似。不过千万不要误会, WaitOne()本质上跟Monitor.Enter()/TryEnter()等效,而不是Monitor.Wait()! 这是因为这个WaitOne()并没有办法在获取控制权以后象Monitor.Wait()释放当前Mutex,然后阻塞自己。 ReleaseMutex() :释放当前 Mutex 一次。注意,这里强调了一次,因为拥有互斥体的线程可以在重复的调用Wait系列函数而不会阻止其执行;这个跟Monitor的Enter()/Exit()可以在获取对象锁后可以被重复调用一样。Mutex被调用的次数由公共语言运行库(CLR)保存,每WaitOne()一次计数+1,每ReleaseMutex()一次计数-1,只要这个计数不为0,其它Mutex的等待者就会认为这个Mutex没有被释放,也就没有办法获得该Mutex。 另外,跟Monitor.Exit()一样,只有Mutex的拥有者才能RleaseMutex(),否则会引发异常。 如果线程在拥有互斥体时终止,我们称此互斥体被遗弃(Abandoned)。在MSDN里,微软以警告的方式指出这属于“严重的”编程错误。这是说拥有mutex的拥有者在获得所有权后,WaitOne()和RelaseMutex()的次数不对等,调用者自身又不负责任地中止,造成mutex 正在保护的资源可能会处于不一致的状态。其实,这无非就是提醒你 记得在try/finally结构中使用Mutex 。   回想我们在《C#线程同步(2)- 临界区&Monitor》中提到的关于 生产者和消费者的场景 ,由于这两个函数不等效于Monitor的Wait()和Pulse(),所以仅靠这ReleaseMutex()和WaitOne()两个方法Mutex还无法适用于我们那个例子。   当然Mutext上还“算有”其它一些用于同步通知的方法,但它们都是其父类WaitHandle上的静态方法。因此它们并不是为Mutex特意“度身订做”的,与Mutex使用的方式有些不搭调(你可以尝试下用Mutex替换Monitor实现我们之前的场景看看),或者说Mutex其实是有些不情愿的拥有这些方法。我们会在下一篇关于EventWaitHandle的Blog中再深入一些地讨论Mutex和通知的问题。这里暂且让我们放一放,直接借用MSDN上的示例来简单说明Mutex的最简单的应用场景吧: // This example shows how a Mutex is used to synchronize access // to a protected resource. Unlike Monitor, Mutex can be used with // WaitHandle.WaitAll and WaitAny, and can be passed across // AppDomain boundaries. using System; using System.Threading; class Test { // Create a new Mutex. The creating thread does not own the // Mutex. private static Mutex mut = new Mutex(); private const int numIterations = 1; private const int numThreads = 3; static void Main() { // Create the threads that will use the protected resource. for ( int i = 0; i numThreads; i++) { Thread myThread = new Thread( new ThreadStart(MyThreadProc)); myThread.Name = String.Format( "Thread{0}" , i + 1); myThread.Start(); } // The main thread exits, but the application continues to // run until all foreground threads have exited. } private static void MyThreadProc() { for ( int i = 0; i numIterations; i++) { UseResource(); } } // This method represents a resource that must be synchronized // so that only one thread at a time can enter. private static void UseResource() { // Wait until it is safe to enter. mut.WaitOne(); Console.WriteLine( "{0} has entered the protected area" , Thread.CurrentThread.Name); // Place code to access non-reentrant resources here. // Simulate some work. Thread.Sleep(500); Console.WriteLine( "{0} is leaving the protected area\r\n" , Thread.CurrentThread.Name); // Release the Mutex. mut.ReleaseMutex(); } }   虽然这只是一个示意性的实例,但是我仍然不得不因为这个示例中没有使用try/finally来保证ReleaseMutex的执行而表示对微软的鄙视。对于一个初学的人来说,第一个看到的例子可能会永远影响这个人使用的习惯,所以是否在简单示意的同时,也能“简单地”给大家show一段足够规范的代码?更何况有相当部分的人都是直接copy sample code……一边告诫所有人Abandoned Mutexes的危害,一边又给出一段一个异常就可以轻易引发这种错误的sample,MSDN不可细看。   我不得不说Mutex的作用于其说象Monitor不如说象lock,因为它只有等效于Monitro.Enter()/Exit()的作用,不同之处在于Mutex请求的锁就是它自己。正因为如此,Mutex是可以也是必须(否则哪来的锁?)被实例化的,而不象Monitor是个Static类,不能有自己的实例。 全局和局部的Mutex   如果在一个应用程序域内使用Mutex,当然不如直接使用Monitor/lock更为合适,因为前面已经提到Mutex需要更大的开销而执行较慢。不过Mutex毕竟不是Monitor/lock,它生来应用的场景就应该是用于进程间同步的。   除了在上面示例代码中没有参数的构造函数外,Mutex还可以被其它的构造函数所创建: Mutex() :用无参数的构造函数得到的Mutex没有任何名称,而进程间无法通过变量的形式共享数据,所以没有名称的Mutex也叫做 局部(Local)Mutex 。另外,这样创建出的Mutex,创建者对这个实例并没有拥有权,仍然需要调用WaitOne()去请求所有权。 Mutex(Boolean initiallyOwned) :与上面的构造函数一样,它只能创建没有名称的局部Mutex,无法用于进程间的同步。Boolean参数用于指定在创建者创建Mutex后,是否立刻获得拥有权,因此Mutex(false)等效于Mutex()。 Mutex(Boolean initiallyOwned, String name) :在这个构造函数里我们除了能指定是否在创建后获得初始拥有权外,还可以为这个Mutex取一个名字。只有这种命名的Mutex才可以被其它应用程序域中的程序所使用,因此这种Mutex也叫做 全局(Global)Mutex 。如果String为null或者空字符串,那么这等同于创建一个未命名的Mutex。因为可能有其他程序先于你创建了同名的Mutex,因此返回的Mutex实例可能只是指向了同名的Mutex而已。但是,这个构造函数并没有任何机制告诉我们这个情况。因此,如果要创建一个命名的Mutex,并且期望知道这个Mutex是否由你创建,最好使用下面两个构造函数中的任意一个。最后,请注意 name是大小写敏感 的。 Mutex(Boolean initiallyOwned, String name, out Boolean createdNew) :头两个参数与上面的构造函数相同,第三个out参数用于表明是否获得了初始的拥有权。这个构造函数应该是我们在实际中使用较多的。 Mutex(Boolean initiallyOwned, String name, out Booldan createdNew, MutexSecurity) :多出来的这个MutexSecurity参数,也是由于全局Mutex的特性所决定的。因为可以在操作系统范围内被访问,因此它引发了关于访问权的安全问题,比如哪个Windows账户运行的程序可以访问这个Mutex,是否可以修改这个Mutext等等。关于Mutex安全性的问题,这里并不打算仔细介绍了,看看 这里 应该很容易明白。   另外,Mutex还有两个重载的 OpenExisting() 方法可以打开已经存在的Mutex。 Mutex的用途   如前所述,Mutex并不适合于有相互消息通知的同步;另一方面而我们也多次提到局部Mutex应该被Monitor/lock所取代;而跨应用程序的、相互消息通知的同步由将在后面讲到的EventWaiteHandle/AutoResetEvent/ManualResetEvent承担更合适。所以,Mutex在.net中应用的场景似乎不多。不过,Mutex有个最常见的用途:用于控制一个应用程序只能有一个实例运行。 using System; using System.Threading; class MutexSample { private static Mutex mutex = null; //设为Static成员,是为了在整个程序生命周期内持有Mutex static void Main() { bool firstInstance; mutex = new Mutex(true, @"Global\MutexSampleApp", out firstInstance); try { if (!firstInstance) { Console.WriteLine ("已有实例运行,输入回车退出……"); Console.ReadLine(); return; } else { Console.WriteLine ("我们是第一个实例!"); for (int i=60; i 0; --i) { Console.WriteLine (i); Thread.Sleep(1000); } } } finally { //只有第一个实例获得控制权,因此只有在这种情况下才需要ReleaseMutex,否则会引发异常。 if (firstInstance) { mutex.ReleaseMutex(); } mutex.Close(); mutex = null; } } }   这是一个控制台程序,你可以在编译后尝试一次运行多个程序,结果当然总是只有一个程序在倒数计时。你可能会在互联网上找到其它实现应用程序单例的方法,比如利用 Process 查找进程名、利用Win32 API findwindow 查找窗体的方式等等,不过这些方法都不能保证绝对的单例。因为多进程和多线程是一样的,由于CPU时间片随机分配的原因,可能出现多个进程同时检查到没有其它实例运行的状况。这点在CPU比较繁忙的情况下容易出现,现实的例子比如傲游浏览器。即便你设置了只允许一个实例运行,当系统比较忙的时候,只要你尝试多次打开浏览器,那就有可能“幸运”的打开若干独立的浏览器窗口。   别忘了,要实现应用程序的单例,需要在在整个应用程序运行过程中都保持Mutex,而不只是在程序初始阶段。所以,例子中Mutex的建立和销毁代码包裹了整个Main()函数。 使用Mutex需要注意的两个细节 可能你已经注意到了,例子中在给Mutex命名的字符串里给出了一个“Global\”的前缀。这是因为在运行终端服务(或者远程桌面)的服务器上,已命名的全局 mutex 有两种可见性。如果名称以前缀“Global\”开头,则 mutex 在所有终端服务器会话中均为可见。如果名称以前缀“Local\”开头,则 mutex 仅在创建它的终端服务器会话中可见,在这种情况下,服务器上各个其他终端服务器会话中都可以拥有一个名称相同的独立 mutex。如果创建已命名 mutex 时不指定前缀,则它将采用前缀“Local\”。在终端服务器会话中,只是名称前缀不同的两个 mutex 是独立的 mutex,这两个 mutex 对于终端服务器会话中的所有进程均为可见。即:前缀名称“Global\”和“Local\”仅用来说明 mutex 名称相对于终端服务器会话(而并非相对于进程)的范围。最后需要注意“Global\”和“Local\”是大小写敏感的。 既然父类实现了IDisposalble接口,那么说明这个类一定需要你手工释放那些非托管的资源。所以必须使用try/finally,亦或我讨厌的using,调用 Close() 方法来释放Mutex所占用的所有资源! 题外话:   很奇怪,Mutex的父类WaitHandle实现了IDisposable,但是我们在Mutex上却找不到Dispose()方法,由于这个原因上面代码的finally中我们用的是Close()来释放Mutex所占用的资源。其实,这里的Close()就等效于Dispose(),可这是为什么?   再去看看WaitHandle,我们发现它实现的Disopose()方法是protected的,因此我们没有办法直接调用它。而它公开了一个Close()方法给调用者们用于替代Dispose(),因此Mutex上也就只有Close()。可这又是为什么?   话说.Net最初的设计师是微软从Borland公司挖过来的,也就是Delphi之父。熟悉Delphi的人都知道,Object Pascal构架中用于释放资源的方法就是Dispose(),所以Dispose()也成为.Net构架中的重要的一员。   不过从语义上来讲,对于文件、网络连接之类的资源“Close”比“Dispose”更符合我们的习惯。因此“体贴”的微软为了让用户(也就是我们这些写代码的人)更“舒服”,在这种语义上更适合用Close的资源上,总是提供Close()作为Disopose()的公共实现。其实Close()内部不过是直接调用Dispose()而已。对于这种做法,我在感动之余实在觉得有些多余了,到底要把一个东西搞得多么千变万化才肯罢休?   如果你实在喜欢Dispose(),那么可以用向上转型 ((IDisposable)((WaitHandle)mutex)).Dispose()把它找出来。即强制把mutex转换为WaitHandle,然后再把WaitHandle强制转型为IDisposable,而IDisposable上的Dispose()是public的。不过我们终究并不确定Mutex以及WaitHandle的Close()中到底是不是在override的时候加入了什么逻辑,所以还是老老实实用Close()好了~
个人分类: 编程|0 个评论
[转载]【Ubuntu】使用技巧
zhenghui2915 2013-2-23 23:27
1.怎样在Ubuntu桌面显示计算机,主文件夹,回收站 Ubuntu安装完成,进入你的Ubuntu系统时,你会发现一个干净整洁而没有图标的桌面和一个好看的主题。 怎样才能在Ubuntu桌面显示计算机,主文件夹,回收站。 在终端terminal中输入gconf-editor或按ALT+F2呼出运行应用程序 在出现的图形化设置界面中,选择apps-nautilus-desktop 选中对应下述: /apps/nautilus/desktop/computer_icon_visible 在桌面上显示计算机图标 /apps/nautilus/desktop/home_icon_visible 在桌面上显示主文件夹图标 /apps/nautilus/desktop/trash_icon_visible 在桌面上显示回收站图标 /apps/nautilus/desktop/network_icon_visible 网络服务器图标 然后退出就OK了~~ 看看,现在Ubuntu桌面上已经显示计算机,主文件夹,回收站了。 Ubuntu桌面显示计算机,主文件夹,回收站 2. Ubuntu 10.04安装中文输入法 安装SCIM输入法的步骤 打开终端,在终端输入执行以下命令: 1).终端输入:sudo apt-get remove scim 删除安装系统的时候装的那个scim(个人觉得没什么用,因为一般新安装是操作系统没有装这个) 2)sudo apt-get install scim 然后下载安装scim输入法。下载完了系统会自己装上,中间会有提示,直接y就OK了 3)sudo apt-get install scim-chinese 这一步是最重要的,这是下载安装中文输入法,前面那一步只是下载一个可以运行输入法的 平台 ,现在是在这个具体平台上安装 中文输入法 4) sudo nano /etc/X11/Xsession.d /95xinput 这个步骤就利用nano新建一个95xinput的 文件 ,该文件的具体内容如下: /usr/bin/scim -d XMODIFIERS="@im=SCIM" export XMODIFIERS export GTK_IM_MODULE=scim 然后,确定无误后,保存, 按ctrl + o,输入文件名保存 ,ctrl+x 退出 5)exit 退出终端 6)在系统管理中:语言支持的键盘输入方式调整为scim 7) 重新启动电脑,进入系统通过Crtl+Space切换输入法 PATH="$PATH:/home:/opt/gamit10.4/gamit/bin:/opt/gamit10.4/kf/bin:/:/opt/gamit10.4/bin" HELP_DIR="/opt/gamit10.4/help/" INSTITUT="IGG" export PATH export HELP_DIR export INSTITUT
个人分类: Ubuntu|3079 次阅读|0 个评论
Angewandte iPad 应用程序常见问题解答
WileyChina 2013-1-25 09:26
期刊地址: http://onlinelibrary.wiley.com/journal/10.1002/(ISSN)1521-3773 iPad 应用程序下载地址: https://itunes.apple.com/us/app/angewandte-chemie-international/id547984912?ls=1mt=8 从 1 月 9 日开始,用户将可以通过这个应用程序浏览 AngewandteChemieInternationalEdition 大多数文章,机构用户可以设置漫游访问来体验这种全新的阅读方式。 个人用户通过应用程序订购 AngewandteChemie 可以享受折扣价,马上下载吧! Q :我可以在哪种设备上使用这个应用程序? A :任何具有 5.0 版 iOS 或更高版本 iOS 的 iPad 。目前, iPhone 设备或 Android 设备上并未提供该应用程序。 Q :我的机构或学会订阅了这本期刊,我应该如何在该应用程序中浏览? A :用户需要在机构的 IP 范围内申请进行漫游访问,申请者必须拥有 WileyOnlineLibrary 个人账户,没有个人账户的用户可以进入 onlinelibrary.wiley.com ,使用任何有效的电子邮箱和密码来创建。只要机构订阅有效且漫游访问已激活 ( 有效期限为 90 天 ) ,用户可以在任何地方打开该应用程序,登录浏览 AngewandteChemieInternationalEdition(ACIE) 的内容。请注意,非订阅用户无法浏览文章全文。 Q :我使用 WileyOnlineLibrary 账户登录了该应用程序,但我无法看到完整的文章。 A :原因可能是: 1. 用户未在其机构 IP 范围内激活漫游访问。 2. 用户所在的机构不具有有效的 ACIE 访问许可。 3. 用户的漫游访问已到期(有效期限为 90 天)。 4. 用户试图访问不在订阅范围内的内容(个人用户订阅的仅限于在线浏览或在移动设备上浏览的内容往往不完整)。 Q :我在应用程序内购买了这本期刊后,可以同时通过 WileyOnlineLibrary 阅读吗? A :很抱歉,在应用程序内购买后,仅限于在通过使用应用程序来阅读,因为此类订购可以获得折扣。直接通过 WileyOnlineLibrary 购买或使用机构订阅权限的用户,可以同时在 WileyOnlineLibrary 和该应用程序中阅读 ACIE 。 Q :我通过所在机构获得了该期刊的访问权限,可是为什么我点击文章中的参考文献却不能直接打开阅读呢? A :此应用程序只能访问 ACIE 的大部分内容。点击参考文献中的文章后将跳转到网页浏览器,进入该文章所属出版机构的数据库,如果用户没有该数据库的访问权限,则无法阅读。
个人分类: Physical Science|3760 次阅读|0 个评论
虚拟化不是云计算——资源访问的间接访问方式都是虚拟化
isaer 2013-1-17 16:58
资源访问的间接方式都可以算是虚拟化。例如,操作系统对物理硬件的虚拟化,其通过统一的访问接口,供应用程序访问硬件资源,这是虚拟化的一种。这种情况下操作系统提供者统一硬件接口,硬件供应商编写符合接口的驱动程序,软件编写者通过接口调用硬件功能,操作系统即提供了虚拟化功能。 简单理解的话,当两个部分需要功能通信时,两者通信协议格式不同,需要转换,那实现转换的功能部分,就是提供虚拟化服务的部分。从这种观点来看,虚拟化是普遍存在的一种技术。 虚拟化是快速实现云计算的一种技术基础,不能认为虚拟化就是云计算。历史遗留系统、异构系统,这些可以应用虚拟化技术迁移到大型分布式系统中运行,利用系统的大规模计算能力。 (附:系统迁移后,用户都通过互联网访问,这就是云计算吗?大数据处理能力,大规模数据存储,这些是云计算吗?)
2208 次阅读|0 个评论
C语言循环写入文件
dubo 2012-11-19 19:24
// cyc_file.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv ; int m; for (int m=0;m5;m++){ sprintf(filename,"m%d.txt",m); fp=fopen(filename,"w"); fclose(fp); } return 0; }
个人分类: C语言|4283 次阅读|0 个评论
[转载]不支持鼠标滚轮的软件中使用鼠标滚轮
baibing 2012-11-4 16:36
Mouse Wheel Control 可以为您增强鼠标滚轮的功能。使用该软件,您可以在以前不支持鼠标滚轮的软件中使用鼠标滚轮。现在有太多的软件不支持鼠标滚轮或者对鼠标滚轮的支持不尽如人意。Mouse Wheel Control 可以为您解决这些问题。 当您滚动鼠标滚轮时,Mouse Wheel Control 可以使用您选定的组合键来代替滚动信号。您可以为每一个程序来配置不同的替换方式。此外,你还可以为一个应用程序的不同的部分来指定不同的设置。 Mouse Wheel Control 主要功能: 1.不限制已控制的应用程序的数量。 2.按应用程序进程名称、窗口标题与窗口类型名称探测应用程序。 3.应用程序进程名称、窗口标题与窗口类型名称支持通配符。 4.可以使用任意的组合键来替换鼠标滚轮滚动。 5.可以自定义一个激活键来控制鼠标滚轮。如果你设置激活键为 Shift, 那么只有当你按住 Shift 键再滚动鼠标滚轮时才可以进行替换。 6.支持 Windows 98/2000/XP/2003。 7.友好的用户界面 http://www.cr173.com/soft/6328.html MouseWheelControl .rar
个人分类: 学习随笔|2414 次阅读|0 个评论
netcdf用户手册—引言—表现
cwjwang 2012-9-29 16:32
(3)netcdf的表现 netcdf的一个目标之一就是支持高效的获取大型数据集的子集。为了实现这个目标,netcdf采取直接读取而不是间接读取的方式。这样更高效,当数据读的方式与数据写的方式不一样的时候,以及必须以不同方式读取以满足不同的需求的时候。可移植型的开销的数量外部特征取决于许多的因素,包括数据的类型,计算机的类型、数据获取的粒度以及计算机运行的协调。这种开销一般很小相比某一应用程序所有的资源。在任何情况下外部开销的表达层经常为数据的可移植型牺牲。尽管在设计和运行netcdf的时候数据的高效是很重要的方面,但它还是有可能失效的如:请求一片从不同记录需要单变量的数据片。
3133 次阅读|0 个评论
netcdf 手册(1)引言——接口
cwjwang 2012-9-29 12:01
引言 (1) netcdf 接口 netcdf 是数据库用来贮存和恢复数组数据的接口函数。数组是n(n=0,1,2,3...)维的矩形结构,由统一形式的元素组成(如:8位的字符,32位的整型数据)。标量(简单的单值变量)是0维数组。netcdf是数据的提取接口,而这种接口支持把数据看成自我描述、可移植的。数组变量可直接获得,不必知道数据如何贮存的细节。且数据的辅助信息如:数据的单位与可能储存在数据里。通用的函数和应用程序可读取netcdf的数据库以及变幻、重组、分析、展示某一领域的数据。这些应用的发展,已经提高了数据的获得能力、软件对数组型数据再利用、管理、分析、展现能力。netcdf实现对数据类型的提取,这意味着在netcdf数据库的所有操作必须使用接口提供的一系列函数。数据的代表型就是用接口的应用程序的隐藏后面,因此数据的储存不会受到外在的程序的影响;netcdf物理属性的代表是其设计独立于计算机的。netcdf支持c、fortran77、fortran90、c++接口,且在不同计算机系统运行。
3736 次阅读|0 个评论
[转载]云性能评测工具
libing 2012-8-29 23:33
在把应用程序放到云计算环境中以后,某个程序的执行情况怎么样?对于那些正在比较各种云服务的IT组织来说,这是一个基本的问题。当前,这个问题很难回答。苹果和苹果的比较几乎是不可能的。 Bernard Golden是HyperStratus顾问公司的CEO,同时,他也是CIO.com的博客作者。他说:“ 不幸的是,目前为止,还没有一种理论可以告诉专业的评测公司,某个云服务的性能到底怎么样,而且,在评测的时候,也没有一套完整的工具集可以帮助评估云服务的性能。”(HyperStratus的博客:http://www.cio.com/blog/index/topic/3112) 云市场策略方面的博客作者,高性能的Web应用程序开发者GigaSpaces的首席营销官 Geva Perry指出:“实际上,要比较不同的云提供商之间的价格,就已经很困难了,更不用说比较云服务的性能了。”(关于Geva Perry的观点,可以参考如下文章:http://gevaperry.typepad.com/main/shopping-the-cloud) 希望:云评测标准 Bitcurrent在6月的评测标准研究报告中指出:“在云计算方面,还没有一种工业级的评测标准可以比较所有的服务,或者是终端用户访问它们的时候需要使用的标准网络。”(关于Bitcurrent的报告,具体可以参考:http://www.bitcurrent.com/new-report-on-cloud-performance/) 451 Group的研究主管Sean Hackett指出:“大多数的终端用户公司都没有能力或资源为它们自己的应用程序做这样的测试,所以,它们不得不改进它们平常使用的价格和性能分析方式来适应云。” Bitcurrent的研究监控了响应时间,内部的I/O,网络性能,和其他常见的评测指标,得出的结论是那些服务本身就是变化多端的,编程需求,地理位置和它们的客户的内部的IT基础设施都可以在很大程度上影响评测的结果,所以很难比较。那份报告警告道:“你的评测结果可能是变化多端的。” 在过去的一年中,尤其是在过去的一个月中,为了满足这方面的需求,许多云评测服务应运而生,从针对特定领域的,到通用的,几乎无所不包。 网络性能评测服务提供商Apparent Networks的CEO Jim Melvin说:“人们正在使用云来运行许多性能消耗较大的应用程序,比如:VoIP,视频会议,高清视屏,灾难恢复等,他们正在寻找可以提供良好的互操作性和连通性的ISV(independent software vendor)载体,但是关于性能,他们却无法给你提供太多的参考资料。” Melvin说:“对于那些类型的应用程序来说,性能和地理位置,以及数据从你的站点到它们的数据中心所经过的路径有很大的关系。通过这些还不足以了解你的带宽,还有延迟,不稳定性和数据丢失率等因素也需要考虑。” 新的服务尽力在填补这个空白 这周,Apparent Networks发布了一个免费的服务(具体可以参考:http://www.apparentnetworks.com/cpc),通过这个服务,IT经理可以观察到两个城市之间的广域网的平均性能。 这个服务通过全美12个网络评测点来追踪一组选定的云提供商的网络性能,其中包括Rackspace, Salesforce.com和其他处于领先地位的云服务提供商。 Apparent提供的这个服务的付费版本每个月每个站点的收费是100美金,这个服务通过把一个微型的设备插入到某个客户的网络端口来识别出需要在它们之间追踪性能的两个地理位置。 其他的性能评测服务包括: Webmetrics,这个服务提供了SaaS(Software-as-a-service)版本的通用的性能监控,它可以按照客户的要求来追踪Web站点的性能。 (Webmetrics: http://www.webmetrics.com/products/global_watch.html ) CloudCMP,这个服务是杜克大学和微软(MSFT)共同努力的结果。它提供了一些工具来检测各种云服务,让用户可以比较它们。 (CloudCMP: http://cloudcmp.net/ ) CloudSpeedTest,它是测试带宽的工具,它对云的性能进行快速而简单评测,它是由云评测标准的专家提供的。 (CloudSpeedTest: http://cloudharmony.com/speedtest ) CloudHarmony,它为用户提供了一系列更有深度,更加具体的评测和分析。 (CloudHarmony: http://cloudharmony.com/services ) Compuware Gomez,这个著名的Web和Web应用程序监控公司正在扩展它的网络性能监控代理来涵盖云服务。 (Compuware Gomez:http://www.compuware.com/solutions/gomez.asp) CloudSleuth,它一套分析工具和一些相关的学习资料。 Model Metrics是一家云集成与顾问公司,它过去的主要业务是性能评测。Model Metrics公司的 John Barnes说:“有许多IT人对云有一点担心,他们担心云会让他们丢掉工作,同时,担心云的安全性。这就是你看到有很多人对私有云比较感兴趣的原因,因为它听上去要更加安全一些。” Barnes说:“今天,云提供商们正在尽力地提供在线的性能和安全监控服务,来增加云服务对客户的透明度。” 但是,这并不意味着IT组织可以把一个提供商的指标和另一个供应商的指标进行比较。 原文名: Cloud Performance Metrics: No Standards, So Mileage Varies 作者:Kevin Fogarty
个人分类: 云与服务|2463 次阅读|0 个评论
[转载]美用有机分子创建新型铁电性晶体材料
crossludo 2012-8-26 14:56
美用有机分子创建新型铁电性晶体材料 据物理学家组织网8月23日(北京时间)报道,美国西北大学一个研究小组利用两个小有机分子之间的极强吸引力,创建出具有铁电性理想特性的长晶体,这种材料具有很强的记忆力,未来有望成为低廉易制的计算机和手机内存应用程序(包括云计算)的应用材料。该研究成果发表在最新一期《自然》杂志上。 常规的铁电材料聚合物和陶瓷材料的特殊品种生产起来复杂而昂贵。而新型化合物简易且成本低廉,可快速灵活地制作成重量轻、具有扩展性新型电子材料,包括计算机内存、感测装置、太阳能系统和纳米电子设备。 新型超分子晶体材料的特性不是来自于分子本身,而是源于两个有机小分子之间多次重复的特殊 交替互动 ,促使它们 自组装成有序的网络 。在室温而非以前低于液氮的温度下,两个 互补 的分子在电子的作用下相互吸引,紧紧并拢形成很长的晶体。这种晶体是基于苯四甲酸二酰亚胺和萘、芘、四硫富瓦烯衍生物受体的复合物,以氢键为基础形成高度有序的3D网络。 化学、材料科学与工程教授塞缪尔·斯特普说,新发现将作为设计铁电性材料的新指导方式。这种分子设计,使我们可以发明一个几乎是无穷大的铁电材料库。铁电性材料具有 自发极化 ,可以在外加电场的作用下发生极性反转,这两个可能的方向,吸引研究人员将该材料开发成计算机内存:因为一个特定方向可以对应于1,而另一个则对应0。 该大学温伯格学院艺术与科学学院化学教授弗雷泽·斯图达特爵士则认为,新创建材料的行为是复杂的,但超晶格结构很简单,特别有助于解决云计算非常昂贵的维修费。 Facebook 、Google、基于Web的电子邮件和其他服务都依靠易失性存储器将信息存储在云中。当电源关闭,易失性存储器就会“忘记”其保存的信息,故而电源要保持不断。如果采用新型铁电性材料开发出非易失性存储器,即使电源关闭时,仍可保留信息。预计如果在美国云计算和电子设备中操作非易失性存储器,每年电力成本将节省60亿美元。 【圈点】 过去的几十年里,铁电体一面坐拥悠久历史,一面表现出了难能可贵的“与时俱进”适应能力:早能追溯到留声机的扬声器,近可去看本文中的计算机处理系统;比大它可以在水下工程中接受声波,拼小又能用于肌肉组织界面间的声波反射。铁电体对基础理论和技术应用都起到了莫大的推动作用。但其实,铁电体在性质上根本与“铁”没啥关系,反倒是许多物理表现与铁磁体比较类似,又能比铁磁体更好地抵抗住外界辐射,难怪它一直都是材料学和凝聚态物理研究的宠儿。
个人分类: 综合科研|3356 次阅读|0 个评论
Android应用开发(一 前记)
热度 2 hbwang1427 2012-8-2 10:39
受到最近OpenCV支持Android系统的启示,决定开始研究Android系统上的应用程序开发,希望可以制作出一两款具有视觉功能的应用软件。 在决定体验Android系统之前,iOS实际是我的第一亲睐对象,不过基于两点原因还是选择了Android:首先,iOS的开发工具Xcode只能在Mac系统上使用,而我只有日夜相伴的小黑,还是放弃吧;其次,做了一个小小的市场调研,看到Android开源策略的成功,料想日后必定引领移动操作系统市场。调研的内容其实很简单,即2012年中美智能手机市场上Android和iPhone的占有率 (使用Google搜索到的,姑且相信数据真实),根据对几个网站数据的综合,可以得到如下的图表: 表一、中国 表二、美国 可见,Android在中美两国的市场份额都已赶超iOS,这一方面有价格的因素,另一方面,随着Android不断完善,更多的厂商和用户正在被吸引过来。与iOS相比,虽然Android略显混乱,虽然存在不同版本,。。。,虽然有着各种虽然,但是我仍然坚信,开源的总是光明的,希望可以每天花费一个小时来跟进这一项目。第一步? 当然是赶紧进一款Android了。
个人分类: 技术体验|2554 次阅读|2 个评论
[转载]加州大学医生开发出AsthmaMD 有助患者监控哮喘病况
digela 2012-7-26 08:55
这一应用程序是由加州大学旧金山分校的医生兼研究员SamPejham博士研发的,它允许哮喘患者或他们的家长记录哮喘状况。 它包括峰流量计量、症状、诱发物、注释以及一个峰流量表的记录。它还允许输入用药情况。相关记录和图表可以通过电子邮件发送到患者医疗护理的提供商(或其他任何人)。这个程序也被Pejham博士作为一个研究工具以使用来匿名收集患者数据。而对于那些不想提交他们的个人数据信息的患者,也完全可以选择不参与这一研究。 医疗目标: 正如此应用程序的用途说明描述的那样:“为了使患者或他们的父母很方便的记录峰流量等数据,并采取由他们的医生指示的适当的举措,以及将此数据信息发送到他们的医疗保健提供商那儿。” 价格: 免费 优点 : 1,支持多用户 使用 2, 使用方便 3, 形象化 的图表清楚地说明了如何控制 好 用户的哮喘 4, 有 书面和视频 两种形式的 应用程序 使用说明 5,数据可以通过电子邮件发送给医疗服务提供 商 6, 可追踪 药物 治疗情况 7,密码保护 8,能够轻松地 在 “良好” 、 “差”和“ 危险 ” 3个等级 设置 中 调整 缺点 : 1, 有关 加密 及 匿名数据收集的声明和解释应该更加显眼。 2,建议附加 一个 功能:为 那些提供商在患者护理中不使用 电子邮件 的 用户提供 一个记录 和图表 的 打印 功能 概 要: AsthmaMD 是一款被设计来 帮助 患者 和他们的 医疗 供应商监 测 峰流量 、 症状 、诱发物 和药物使用 等数据的应用程序,同时 研究人员 可 匿名跟踪 这些 数据, 并据此 以确定哮喘耀斑 形成 的原因和区域。这款软件外观悦目 直观,而且 采纳了 由美国国立卫生研究院和开发慢性疾病护理 的 其他 公司所 提出的哮喘监测的 推荐规范 。
2143 次阅读|0 个评论
[转载]【VC++】InnoSetup 打包文件夹的解决方案
zhenghui2915 2012-7-23 19:48
Q: 我用inno setup 打包安装程序时,每次在添加文件夹时是添加起了,可是总在用打包好的安装程序时,每次都会把原来添加的文件夹下的文件直接装在应用程序的文件夹里,要怎么才能改成比如说打包C:\123\12文件夹下的文件,在添加的时候就添加12文件夹,可是安装程序打好凶后,12文件夹下的文件直接被安装到应用程序目录了,怎么才能改成原来的呀? A: 第一,你可以添加文件夹,将整个 12 文件夹添加进去而不是添加 12 中的文件。 第二,你将安装程序脚本稍作修改,例如: Source: "C:\123\12\*"; DestDir: "{app}"; 改为: Source: "C:\123\12\*"; DestDir: "{app}\12"; 我就不信还能装到安装文件夹。 Q: 求教,如何在inno setup里添加子文件夹而包括主文件夹 A: Source: "原文件夹\*.*"; DestDir: "C:\目标文件夹\子文件夹"; Flags: recursesubdirs 注意后面的Flags: recursesubdirs只有这样才能包括子文件夹。 您说的主文件夹不知道是什么意思,一般通过修改“原文件夹”和“目标文件夹”及“子文件夹”可以解决。 Q: 用Inno Setup 编译器打包VC程序时,如何使文件夹包含其中,如在安装后,在安装路径下资源文件仍放在res文件夹中? 我试着点击添加文件夹,结果是包含了文件夹里的文件,使里面的文件放在安装路径下. A: 在 段下,添加下面代码 Source: "执行文件.exe"; DestDir: "{app}"; Flags: igNoreversion Source: "要打包的目录\*"; DestDir: "{app}\安装后释放文件的目录\"; Flags: igNoreversion recursesubdirs createallsubdirs -------------------------------- 说明: 如果“要打包的目录”和"安装后释放文件的目录"一样的话,就达到了你的要求。 这样写: Source: "res\*"; DestDir: "{app}\res\"; Flags: igNoreversion recursesubdirs createallsubdirs 我的实例: Source: "E:\zhenghui\DataProc-HGV1.8\dlls\*"; DestDir: "{app}\dlls"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "E:\zhenghui\DataProc-HGV1.8\help\*"; DestDir: "{app}\help"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "E:\zhenghui\DataProc-HGV1.8\dlls\*"; DestDir: "{app}\dlls\"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "E:\zhenghui\DataProc-HGV1.8\help\*"; DestDir: "{app}\help\"; Flags: ignoreversion recursesubdirs createallsubdirs
个人分类: VC++|5541 次阅读|0 个评论
[转载]blastall
wangleibio 2012-7-16 08:19
BLASTALL 用法 a.格式化序列数据库 格式化序列数据库— —formatdb formatdb简单介绍: formatdb处理的都是格式为 ASN.1和 FASTA,而且不论是核苷酸序列数据库,还是蛋白质序列数据库;不论是使用Blastall ,还是Blastpgp,Mega Blast应用程序,这一步都是不可少的。 formatdb命令行参数: formatdb - 得到formatdb 所有的参数显示(见附录二)和介绍, 主要参数的说明: -i 输入需要格式化的源数据库名称 Optional -p 文件类型,是核苷酸序列数据库,还是蛋白质序列数据库 T – protein F - nucleotide Optional default = T -a 输入数据库的格式是ASN.1(否 则是FASTA) T - True, F - False. Optional default = F -o 解析选项 T - True: 解析序列标识并且建立目录 F - False: 与上相反 Optional default = F 命令示例: formatdb -i ecoli.nt -p F -o T 运行此命令就会在当前目录下产生用于BLAST搜索的7个文件,一旦如上的formatdb命令执行完毕,就不 再需要ecoli.nt,可以移除。此时,blastall可以直接使用。 b.Blastall常用参数简析 -p Program Name 所用程序名称 ,用 户可以根据需要从blastn,blastp,blastx,tblastn,tblastx中任选一程序。 -d Database default = nr 所用序列数据库的名称 ,默认为:nr -i Query File default = stdin 所用查询序列文件 , 默认为:stdin,本文例为 test.txt -e Expectation value (E) default = 10.0 期望值 默认为10.0 描述搜索某一特定数据 库时,随机出现的匹配序列数目。 -m alignment view options: 比对显 示选项,其具体的说明可以用以下的比对实例说明 0 = pairwise,显示具体匹配信息(缺省) 1 = query-anchored showing identities,查询-比上区域,显示一致性 2 = query-anchored no identities,查询-比上区域,不显示一致性 3 = flat query-anchored, show identities,查询-比上区域的屏文形式,显示一致性 4 = flat query-anchored, no identities,查询-比上区域的屏文形式,不显示一致性 5 = query-anchored no identities and blunt ends,查询-比上区域,不显示一致性,无突然的结束 6 = flat query-anchored, no identities and blunt ends,查询-比上区域的屏文形式,不显示一致性 7 = XML Blast output,XML格式的输出 8 = tabular,TAB格式的输出 9 =tabular with comment lines,带注释行的TAB格式的输出 10 =ASN, text,文本方式的ASN格式输出 11 =ASN, binary default = 0,二进制方式的ASN格式输出 -m 8 用法举例说明如下: A_query B_Sbjct 97.61 585 3 3 309 886 94498 95078 0.0 1017 A_query B_Sbjct 100.00 303 0 0 913 1215 95092 95394 2e-172 601 A_query B_Sbjct 100.00 209 0 0 1 209 94196 94404 3e-116 414 A_query B_Sbjct 100.00 123 0 0 1234 1356 95413 95535 6e-65 244 A_query B_Sbjct 100.00 41 0 0 210 250 94096 94136 5e-16 81.8 A_query B_Sbjct 100.00 35 0 0 251 285 94440 94474 2e-12 69.9 A_query B_Sbjct 100.00 29 0 0 885 913 95747 95775 7e-09 58.0 A_query A_query 97.61 585 3 3 309 886 403 983 0.0 1017 A_query A_query 100.00 303 0 0 913 1215 997 1299 2e-172 601 A_query A_query 100.00 209 0 0 1 209 101 309 3e-116 414 A_query A_query 100.00 123 0 0 1234 1356 1318 1440 6e-65 244 A_query A_query 100.00 41 0 0 210 250 1 41 5e-16 81.8 A_query A_query 100.00 35 0 0 251 285 345 379 2e-12 69.9 A_query A_query 100.00 29 0 0 885 913 1652 1680 7e-09 58.0 Query= A_query (1356 letters) .... B_Sbjct Length = 96095 Score = 1017 bits (513), Expect = 0.0 Identities = 567/585 (96%), Gaps = 11/585 (1%) Strand = Plus / Plus Query: 309 tcccctgtgacgtctctctcccatgtctagggtctccctgggccccaaggtgccgttggc 368 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| Sbjct: 94498 tcccctgtgacgtctctctcccatgtctagggtctccctgggccccaaggtgccgttggc 94557 Query: 842 ttcctgcctcctttcatcccagcccagaccctgggcctcccatct 886 ||||||||||||||||||||||||||||||||||||||||||||| Sbjct: 95034 ttcctgcctcctttcatcccagcccagaccctgggcctcccatct 95078 这个结果中总共11个gap,上面7个gap,下面11个gap, 95078-94498=580; 886-309=577;585=95078-94498+1+4; 结果12列 Query id,Subject id,% identity(感觉不太对的上),alignment length,mismatches,gap openings,q. start,q. end,s. start,s. end,e-value,bit score 第一列为Query(递交序列), 第二列为数据库序列(目标序列sbjct), 第三列为: 97.61???? 96% 第四列为:填补进gap后整体的长度 第五列为:错配个数 第六列为:gap所开个数 第七列和第八列为:Query开始碱基位置和结束碱基位置 第九列和第十列为:Sbjct开始碱基位置和结束碱基位置 第十一列为:E值 第十二列为:Score值
13338 次阅读|0 个评论
[转载]美国关闭800个数据中心并非易事
evonchang 2012-7-8 09:06
早在2010年年底,美国白宫就宣布,计划通过整合联邦政府数据中心和应用程序以及采用所谓的“云计算优先”政策来重组政府IT架构。美国联邦政府首席信息官(CIO)维克昆德拉(Vivek Kundra)对外公布了政府推广云计算架构的计划,并呼吁在2015年之前将目前政府的2100个数据中心至少削减掉800个,同时还要求各级政府将部分工作转移到商用、个人以及政府用云计算系统上。此举的目的就是要帮助各个政府机构来分享服务以避免大量不必要的重复工作。根据计划,美国政府将于2011年底前关闭195个数据中心,另有178个数据中心将于2012年被关闭,其中有60个数据中心在首都华盛顿地区。2012年底关闭的数据中心总数将达373个。迄今为止,美国政府已关闭81个数据中心。 依目前的情况来看,政府如何克服重重困难在2015年前关闭800个数据中心仍有待商讨。 据杰科网络公司发布的一项调查称,美国政府管理预算局已制定了一个极高的目标。在接受调查的200名联邦IT信息主管中,仅有10%认为政府能达到目标;23%认为政府实际上会建立更多的数据中心。美国政府管理预算局的目标与利益相关者的预测产生矛盾主要在于两方面因素:复杂性和市场需求。 旧应用程序需要旧的载体 复杂性是一个问题,因为政府运行了太多的老旧程序。如果现有的应用程序不再需要已经使用几十年或者不适应新环境的定制堆栈,那么整合业务流程和虚拟化基础设施或将业务转移到云上会更容易。 60%的调查对象讲到他们的数据中心运行了20多个操作系统,16%讲到他们管理的操作系统达100多个。同样软件管理也是如此,48%的调查对象讲到他们使用20多个应用程序,6%讲到他们使用100多个应用程序。除非代理机构愿意改写应用程序从而利用新的应用环境和工具,也许会更少的但复杂性更高的操作系统或应用程序整合起来,驱动云计算、虚拟化服务和数据中心的发展。标准应用叠加和硬件资源使得购买和使用云服务更加便宜。 目前,至少两个主要的联邦IT机构—NASA和国防部—已经部署了云基础设施,以规范新应用程序发展和管理。 然而,一位杰科网络公司发言人通过邮件向我解释说,“困难在于应用程序的发展推动基础设施的发展,并且联邦机构里的许多应用程序都是客户定制的老旧应用程序,,,改写应用程序的成本抑制了许多机构建立全方位标准化的、基于英特尔的服务器基础设施。” 更多的需求,更少的数据中心? 另外,需求问题也不容忽视—用更少的空间处理空前增长的计算能力需要和大数据问题。据杰科网络公司的调查显示,目前数据中心的利用率在61%左右,而未来5年为了满足不断增长的需求,需要增加34%的数据中心基础设施。 由于政府已经制定了“云计算优先”的政策来重组政府IT架构,因此部分需求将转移到云上。Apps.gov就是生产云应用和基础设施的中心。 但是对于一些由于安全和技术原因不能在公有云上运行的应用来说,仍然需要依赖当地的供应商。上周在电话里,Equinix公司负责全球业务的总经理Greg·Adgate讲到,虽然对于某些机构来说,在先进的数据中心部署应用程序可以满足效率和稳定性的要求,但是获得建立基础设施的资金并不容易。因此对于像Equinix这类可以直接提供存储空间并拥有服务提供商认证资格的公司来说是一个有利的机会。 就算政府不能达到既定目标,甚至会如一些人预测有更多的数据中心出现,但这并不意味着完全的失败,因为在某种程度上,降低能源成本是整合数据中心的主要原因之一。斯坦福大学教授Jonathan·Koomey的研究发现,数据中心的能效问题还有很大的提升空间。 由于数据中心的复杂性,政府不太可能像谷歌一样采用创新型的数据中心冷却技术,但政府应从中吸取经验。Koomey的研究报告估计,谷歌拥有全球0.8%的数据中心基础设施,但能耗仅占全球数据中心能耗的0.011%。 无论如何,现在预测政府是否能达到既定目标还为时尚早。
2084 次阅读|0 个评论
[转载]云计算分布式服务器负载均衡原理
evonchang 2012-7-8 09:04
许多企业组织正在和IT人员谈论,关于向云环境转移和/或使用虚拟机技术,从而获得更好的可扩展性。能够根据需求访问更多的资源,让您的企业拥有向内部和外部客户提供卓越的最终用户体验的能力。应用程序可以运行得更快,并且可在处理网络流量高峰时减少中断服务。   在分布式服务器的世界里,负载均衡是任何系统可扩展性功能的核心方面。长期的负载均衡工作的秘诀是自动化。让我们一起来看看在负载平衡的基础。然后,我们可以看看自动化是如何使程序更快,更便宜,更有效的。   什么是负载均衡?它是如何工作的?   负载平衡将网站流量分送到多个服务器,以帮助确保资源得到有效利用,并确保每次都没有服务器的工作负载过重。服务器网络之间分配需求,可以限制时间延迟和提高响应速度。有了负载平衡,如果一个或多个服务器由于故障或日常维护而宕机,应用程序将不一定会被彻底关闭。相反,余下的服务器会直接接过任务。你可以在本地布置多台服务器,或者你也可以选择云网络模型里面的分布式服务器。   在分布式计算云里面,服务器可以位于许多不同的地理区域的安全数据中心中。即使一个数据中心遭受了自然灾害,仍然会有大量分布在其他地方可用的服务器来处理工作量。利用拥有一个完整的基础设施即服务(IaaS)包的私有云,负载平衡能够为一个特定的企业客户保留的一组专用服务器。   在公共云中,您的IP流量与许多其他客户一起在广泛分布的网络服务器上负载平衡。从一个真正的可扩展性的角度来看,在公共云中负载均衡可能是最容易的,因为你可以从主要云服务提供商那里得到无限的服务器资源。当然,检查的任何潜在的云服务提供商的业绩记录也是很重要的,以确保他们的客户真正有体验到轻松的可扩展性需求的经验。   关注可扩展性并不意味着整个程序必须转移到云上。也有可以利用的混合选项。   例如,亚马逊提供了2个EC2(亚马逊弹性云端运算)版本的Zeus(流量管理器和简单的负载均衡器),允许企业和小型企业客户根据需求在云上均衡网络流量负载。这给客户提供了两种选择,正常流量的时候使用本地服务器,而流量高峰期则暂时扩展到云上。   与厂商探讨负载均衡   在购买可扩展性负载平衡工具时需要询问的一些功能:   具有收集在分配工作量中使用的详细实时统计数据的能力。单独使用历史数据作出预测,是一个万无一失方式,防止猜测错误。   一个虚拟的网络环境,表现为一个单一的服务器设备资源。当涉及到管理云应用程序时,这是一个重要的特性。一个简单的界面,使管理任务变得更容易。   负载均衡服务,可以在应用层“看到”负载,而不是仅仅在实例层。在云中可能存在大量的应用实例同时运行时,这是可扩展性中的一个方面。   负载平衡器本身具有创建新实例的能力,并且在必要的时候配置平衡器满足客户的要求。理想的情况下,应该有一个应用程序编程接口(API)支持特定业务应用程序的高度集成。   负载平衡包括监控功能,以识别不健康的应用实例,并且把它重新定向到健康的实例。仅仅因为一个服务器或应用程序是“可用的”,并不意味着它处于最佳运作状态。   自动扩展的能力,基于预设的阈值,使更多额外的虚拟服务器能够被添加--当有新的服务器时,能够在现有的和新加入的服务器之间自动重新均衡工作量。这种重新均衡应该发生任何服务中断,重新启动,或IT方面需要的其他请求的时候。   自动化问题   在云上负载平衡从理论上听起来非常好。但它不是由于魔法而发生的。例如,一个企业组织可能会选择追求在存储区域网络(SAN)上存储整合,以更好地利用服务器硬件资源。有许多公司已经尝试过这种方法,发现他们不断地重新延展工作量,以避免空间或存储的限制。   这是一个劳动密集型,重复的任务,随着时间的推移,数据量趋于增加,并且工作量本身也处于波动状态。手动处理此过程中涉及到分析当前和预测的容量和性能需求,提供额外的存储配置,重新配置应用程序,关闭和重新启动服务器和应用程序等。每次当工作量有显着的变化时,或一些服务器将超过负载,而另一些保持空闲时,就必须重复这个过程。   在这种情况下,总是会有资源消耗,但没有被有效使用。负载均衡任务也有可能占用IT管理员的所有有效时间。更糟的是,因为这种类型的预测和计算需要执行适当的负载平衡是如此的复杂并且相互关联,因此偶尔会发生错误。当扩大或缩减资源的需求提高时,任何的误算都会都回增加服务器宕机时间。   使用虚拟化技术,就不必手动重新配置资源和自动化,确保数据是最优的放置在存储区域网络(SAN),从而节省IT部门的时间和金钱。这些功能可以大大提高性能。它只是一个简单的问题,然而这个工作使用软件比人做得更好。有许多平凡的,重复的系统维护任务,适合这一类--但却远远超出这个存储区域网络(SAN)的例子。   当然,自动化仅仅和执行创建的脚本一样好。无论硬件价格如何变动都没有关系,只要你设计的Java应用程序不能最好的利用服务器--无论在本地或在云上。
2015 次阅读|0 个评论
[转载]Apes With Apps | 玩苹果/应用程序的猿猴
sincos 2012-7-5 20:47
Apes With Apps Using tablets and customized keyboards, bonobos can become great communicators By Ken Schweller/July 2012 Share on print Share on email Share on facebook Share on twitter Share on stumbleupon Share on google_plusone Share on reddit More Sharing Services 17 Page 1 2 3 4 5 // View All Photo: Gregg Segal Can we talk? Kanzi, a 31-year-old bonobo, can converse with humans by selecting “lexigram” symbols on his Motorola Xoom tablet. Have you ever watched a toddler play with an iPhone? Most likely, the child was completely captivated and surprisingly adept at manipulating the tiny icons. Two-year-old Teco is no different. Sitting with his Motorola Xoom tablet, he’s rapt, his dark eyes fixed on the images, fingers pecking away at the touch screen. He can’t speak, but with the aid of the tablet app I created for him, he’s building a vocabulary that will likely total several thousand words. What’s more, he’ll be able to string those words together into simple sentences and ask questions, tell jokes, and carry on conversations. Such talents wouldn’t seem exceptional in a human child, but Teco is an ape— a bonobo, to be precise . To the uninitiated, bonobos look very much like chimpanzees , but they are in fact a separate species with distinct physical and behavioral traits. More collaborative and sociable than their chimp cousins, bonobos also seem to be more adept at learning human language. And they are endangered, found in the wild only in the Democratic Republic of the Congo . Recent estimates put the wild bonobo population at between 10 000 and 50 000. Fewer than 150 live in captivity. Along with the chimpanzee, they are our species’ closest relatives. For more than three decades, researchers have been working with a small group of bonobos, including Teco, to explore their amazing cognitive and linguistic abilities. Teco’s father, Kanzi, is the group’s most famous member : Anderson Cooper has interviewed him, and he’s played piano with Paul McCartney and Peter Gabriel. Animal lovers worldwide have marveled at his ability to communicate by pointing to abstract symbols. He recognizes nearly 500 of these “lexigrams,” which he uses to make requests, answer questions, and compose short sentences. The spoken words he understands number in the thousands. Even so, many people question these abilities. Indeed, for more than a century scientists have debated whether apes could ever truly comprehend human language. Many researchers argue that language is the exclusive domain of humans, and several influential studies in the 1980s concluded that supposedly “talking” apes were merely demonstrating their capacity for imitation, with lots of unintentional cuing by the animals’ handlers. Linguist Noam Chomsky has likewise argued that the human brain contains a species-specific “ language acquisition device ,” which allows humans, and only humans, to acquire language. But the bonobo research I’ve been involved with, led by primatologist Sue Savage-Rumbaugh at the Bonobo Hope Great Ape Trust Sanctuary , in Des Moines, strongly suggests otherwise. Today, the wide availability of touch screens, tablet computers, digital recording, and wireless networking is giving researchers the world over powerful new ways to study and unambiguously document ape communication. The results of these studies are in turn helping to spark a renaissance of technology-aided research into primate development and cognition and shedding light on the origins of culture, language, tools, and intelligence. Source: http://spectrum.ieee.org/computing/software/apes-with-apps/?utm_source=techalertutm_medium=emailutm_campaign=070512
1847 次阅读|0 个评论
山寨企业的福音:美法院裁决应用接口不受版权保护
yuedongxiao 2012-6-3 10:46
在最新ORACLE对GOOGLE的著作权诉讼中,主审的美国联邦法官裁决,JAVA应用程序接口(API)不受版权保护(注)。 这个判决具有相当深刻的影响,这将意味着,山寨企业从此可以放心大胆地往前走,生产与现有指令接口相同的计算机山寨产品。如果说目前的山寨产品只是貌似,那么以后的山寨产品完全可以雷同。 首先,我简单回顾一下ORACLE对GOOGLE就JAVA语言的诉讼。ORACLE拥有JAVA语言的著作权,ORACLE授权公众免费使用JAVA语言,但是基于一个前提条件:那就是使用者必须保证JAVA程序的兼容性。GOOGLE在开发ANDROID过程中,借用了JAVA的程序名称及结构,开发了一款山寨版JAVA,但不满足与JAVA的兼容性。ORACLE认为,GOOGLE这样做,违背了获得JAVA授权的先决条件,因此侵犯了ORACLE的著作权。 在相关的审判中,美国联邦法院法官指令陪审团:先假设JAVA的程序接口是受著作权保护的,请裁决GOOGLE是否侵权。结果,陪审团一致裁决,GOOGLE侵犯了JAVA的著作。用英文说就是,GOOGLE infringed Oracle's copyright in Java. 法官在法庭上显然对这个结果GOOGLE失败的结果很不满意,干脆转身给ORACLE当头一棒:你的JAVA程序接口根本不受COPYRIGHT保护,没有著作权可言,陪审团的侵权裁决也就无效。判决链接见 http://assets.sbnation.com/assets/1151284/1202.pdf 。这个判决的分析是否符合逻辑、是否自洽,读者可以自行判断。 无论如何,这是美国联邦法院在金肯斯-拉颇特法则(Jenkins-Laporte Doctrine)之后,对著作权法的又一次发展。这个判决对于山寨企业来说,绝对是个福音。 注:法官试图解释其判决不具有普适性,但其论证过程完全可以适应于类似争端
个人分类: 知识产权|3470 次阅读|0 个评论
矿井通风管理信息化建设
kejidaobao 2012-5-25 14:32
矿井通风系统是矿井重要的辅助系统,与瓦斯事故防治、火灾防治、热害处理、粉尘治理有密切关系,直接影响到井下人员的生命安全。随着信息技术的飞速发展,先进、高效的生产装备的引进和应用,要求研究和开发符合中国国情、具有国际先进水平的矿山信息化管理技术平台和应用系统。“数字矿山”建设已成为世界各国矿业界共同关注的课题,作为“数字矿山”的一个重要方面,矿井通风管理信息化平台是分析、管理矿井通风系统的有力工具。因此其亦成为国内外学者研究的热点。 1953年,Scott和Hinsley首先使用计算机来解决矿井通风网络问题。宾夕法尼亚州州立大学Stefanko和Ramani通过提出一系列的相关数学公式对矿井通风网络分析的发展做出很大贡献。国内学者也在矿井通风领域做出很多成果,开发出许多通风软件,从不同角度解决矿井通风中的不同实际问题。现在用于解决矿井通风基本参数(风阻、风量和压降等)的应用程序逐渐趋于成熟,有些软件可实现模拟特殊情况如火灾、粉尘、瓦斯、爆破炮烟等污染物浓度分布,对通风系统进行实时控制,为未来通风计划的编制提供依据。 传统的矿井通风是在二维图形显示基础上进行二维设计,随着开采技术的发展和开采深度的增加,二维技术难以表达复杂采矿过程中的地下三维地质与工程问题,在处理许多问题时很难精确地反映、分析或显示有关信息。近10年来,国外先进的、以三维可视化技术为基础的矿业软件的引入与应用,推动了中国矿山信息化观念的改变和技术进步,促进了中国矿业企业技术和管理方式的改变,将矿业技术从二维带入了三维时代。目前国内部分软件利用GIS技术、融合虚拟现实技术实现矿井通风系统三维模型的构建。 本期20—24页刊登了王李管等的文章“矿井通风系统三维可视化及网络解算优化”,开展了新型矿井通风系统三维可视化研究,提出了新的改进解算算法,使其能够解决复杂的通风网络解算问题;根据新的矿井通风系统双线巷道自动生成算法逐层生成闭合轮廓线,将各层轮廓线三角化并将所有的三角化网格合并,生成封闭的三维联通实体巷道;采用“层次式平台+插件”的方法进行系统开发。实现了通风系统三维可视化模拟、网络解算优化、通风管理信息化;与矿山数字化软件相结合,可有效集成监控监测系统,实现数据管理一体化和矿山安全管理。封面图片为三维环境下矿井通风系统的解算界面,分支巷道上的数字显示该分支的风量,节点上的数字显示该节点的风压。双击其中的任何一条分支,可以查看巷道参数、风量等属性。封面图片由王喆提供,金功博设计。 (责任编辑 吴晓丽)
个人分类: 栏目:封面图片说明|2939 次阅读|0 个评论
Elsevier征集创意应用程序
gaojianguo 2012-5-15 23:19
移动办公估计是一个发展趋势, Elsevier 刚才发邮件征集能够帮助作者在移动中也可以投稿的应用程序创意。世界是运动的,物质是运动的,运动是绝对的。未来科学家一有灵感和想法甚至可以在手机上迅速写出论文,进而快速的投稿和发表。看来,广大科研工作者不仅可以在博客、 Facebook 和 Google 上 发表自己的想法,也可以在办公室之外的空间正儿八经的发表在主流期刊上。 Elsevier 只是想让广大科研工作者参与和提出这样的应用程序可能是什么样子的,不知科网的网友可否描述一下未来的愿景?他们的问题: 1. What does your application do? 2. What issues will your application solve? 3. How will your application solve these issues? 4. Describe your ideas for the visual layout of the application on the mobile device: 5. Is the application intuitive and easy to use i.e. requiring no learning curve for the user? Please explain your reasoning below: 6. Lastly, we would be delighted to receive your feedback about any publishing-based iPad applications you have used on a personal or professional basis. Please let us know the name of the iPad application and tell us why you like it! 链接: http://www.elsevierauthormobileapp.com/
个人分类: 生活点滴5|4124 次阅读|0 个评论
[转载]盗梦的智能闹钟——浅睡唤醒
热度 1 crossludo 2012-5-14 11:25
盗梦的智能闹钟——浅睡唤醒 Sleep Cycle应用程序能让iPhone把你唤醒。在使用此应用程序时,你要将iPhone面朝下放在床上。 Sleep Cycle应用程序可以分析人的睡眠模式。 Zeo包括一个头带,装有可测量脑电波和眼部活动电脉冲的银电极,可通过蓝牙与iPhone设备连接。 在选择闹钟时,人们考虑的最主要因素通常是合适的闹铃声──要够刺耳,这样才能强迫你起床,但又不能太吓人,否则会影响你一整天的心情。现在,一批“智能闹钟”有了新卖点:在最理想的时间唤醒你。 据销售智能闹钟的公司称,这种闹钟可以监测你的睡眠,在你处于浅睡阶段时轻柔地唤醒你,从而减轻醒来后昏昏沉沉的感觉。但睡眠专家对这种闹钟能否让人醒来时更清醒表示怀疑,他们强调晚上睡个好觉才是关键。 有几种设备的原理是利用“静息活动监测仪”来监测你的身体活动,因为人们在浅睡眠时更容易动。这类闹钟通过探测身体活动的情况来决定唤醒你的最佳时间,设备既可以佩戴在身上,也可以放在床上。你可以设定一个你想被叫醒的时间段,比如半个小时。 能在最佳时间把人唤醒的闹钟至少在2005年左右就面市了,但它们价格高昂,用法常常也很复杂。当前出现的新一代智能闹钟用法要简单一些,而且也便宜一些。 也有一些设备不使用静息活动监测仪,Zeo便是其中之一。Zeo是一个头带,装有可测量脑电波和眼部活动电脉冲的银电极。Zeo有一种移动设备款,可通过蓝牙(Bluetooth)与iPad、iPhone或安卓(Android)设备连接,售价为99美元。另有一款是放在床头的闹钟,售价为149美元。Zeo公司总部位于马萨诸塞州牛顿(Newton),其网站显示,其系统可以在“你睡眠周期的最佳时间轻柔地唤醒你”,该公司网站还称,这个最佳时间是在浅睡眠向快速动眼期(有时被称为REM或者有梦睡眠期)过渡的阶段。 睡眠专家小肯尼斯•P•赖特(Kenneth P. Wright Jr.)说,醒后那种昏昏沉沉的状态(在这一阶段你的认知和运动功能较弱)被称为“睡眠惯性”。他说,研究已经证实,人从深睡眠中被唤醒时,睡眠惯性是最严重的,但现有文献对最佳唤醒时间的看法“有些不一致”,比方说,有人认为是在浅睡眠阶段,也有人认为是在REM睡眠阶段。赖特是科罗拉多大博尔德分校学(University of Colorado in Boulder)睡眠实验室的负责人,同时担任Zeo公司的有偿顾问。 总部位于亚特兰大的睡眠监测用品公司Innovative Sleep Solutions LLC的网站显示,该公司出售一种名为SleepTracker的腕表式闹钟,售价149美元,这种闹钟可以在“真正的最佳时间”唤醒你,也就是当你的身体活动显示你睡眠变浅的时候。你可以在震动和音乐这两种铃声之间任选一种,或者两种同时使用。 售价99美分的Sleep Cycle是一种iPhone应用程序,可以放在床垫上。开发该程序的瑞典公司Maciek Drejak Labs AB称,该应用程序用一个算法分析人的睡眠模式,让iPhone“在你睡眠最浅的阶段”把你唤醒。 这三种设备都没有经过临床试验,证明用户在使用智能闹钟功能后能变得更加警觉和清醒。这些设备都可以绘出睡眠曲线图供你分析,但只有Zeo证明了其可以精确区分睡眠阶段。 《睡眠研究期刊》(Journal of Sleep Research)去年发表了一项由Zeo公司赞助的研究,该研究显示,Zeo预测的睡眠周期与一家实验室的专业睡眠设备测得的结果在大约75%的时间里是吻合的,而两家独立专业实验室之间的吻合率则为86%。Zeo公司首席执行长戴维•迪金森(David Dickinson)说,Zeo可以帮助你监测睡眠,能测出哪些措施──比如下午不喝咖啡──可以改善睡眠。 一些睡眠专业医师对此持怀疑态度。耶鲁大学(Yale University)的睡眠专家迈尔•克里格(Meir Kryger)说,“如果睡眠不足,我的脾气就会不好。我不确定这样一种机器对我有没有帮助,而且现在肯定没有科学文献能证明这种产品值得推荐。”他说,就算这种产品真的能减轻昏昏沉沉的感觉,其效果可能也只能在你醒后维持15或20分钟;至多能维持一到两个小时。 Zeo的移动款很有意思,用法也很简单。我喜欢它下载到我iPad上的详细的睡眠曲线图,它还能记录我的REM睡眠状态。这个头带一开始令我感觉不爽,让我额头上起了些红包。在我按照公司的建议用手洗掉头带上的生产残留物之后,这个问题就解决了。 SleepTracker一般会在我设置的时间段结束时唤醒我。有两次我已经醒了。Innovative Sleep Solutions的执行合伙人李•洛里(Lee Loree)说,该设备使用一种“专有的算法”来确定该在什么时候唤醒你。他还说,设备可能是认为我没睡够,所以允许我睡得长一点。 在使用Sleep Cycle应用程序时,你要设定闹钟,并将iPhone面朝下放在床上。清晨似乎只要我身体一动,闹钟就会响;我的猫在床上跳上跳下也会启动闹钟。 Sleep Cycle 的首席开发员马西克•德勒雅克(Maciek Drejak)说,这个应用软件确实能记录小的动作,但它在分析你的睡眠模式时,可以“过滤”那些它认为不相关的动作。他还说,这个应用程序不能用来减少你需要的睡眠──只能在你已经休息好的前提下,在适当的时候叫醒你。他还说,来自用户的反馈显示,该软件能让用户醒来时有个好心情。(来源:华尔街日报)
个人分类: 物联工程|2204 次阅读|3 个评论
[转载]应用程序正常初始化 0x0150002失败
hailuo0112 2012-5-5 15:00
用VC2005编译的程序,编译时没有任何错误,但是运行时就是提示“应用程序正常初始化失败”!! 查找了各方面资料,做了各种尝试,网上说什么的都有:有让安装vc2005 sp1补丁的;有让安装vcredist_x86.exe的; 有让把CRT库的dll直接拷贝到程序目录的; 有让清理注册表的;有让装.NetFramework新版本的;有让查manifest的;   结果我尝试了半天,几乎都是浪费时间。上面最后一条说的还算正确,只是作者把事情描述得太繁琐了。。现在把处理的方法说一下,省得大家再走弯路:   1. VC2003、VC2005、VC2008及其后续版本,对底层最基本的CRT、MFC、ATL库都进行了重构,为了避免不同版本的库引起冲突,重构后的库文件一般放在 C://windows/WinSxS 文件夹中,并用特定的文件夹/文件名称进行标识;   2. 与VC6不同, VC2003、VC2005、VC2008及其后续版本,引入了manifest清单的概念,即应用程序编译后会同时生成对应的.manifest文件,并将该.manifest文件作为资源编译到dll或者exe中去。.manifest文件实际上是一个XML格式的文本文件,里面记录了dll或exe中要引用的CRT、MFC、ATL库的版本和名称。VC6编译的应用程序对CRT、MFC、ATL的dll都是直接调用,而VC2003、VC2005、VC2008编译的程序都是先查询编译到资源中的manifest中的记录,然后按照记录提供的版本和名称去搜寻对应的CRT、MFC、ATL库以及随库发布的.manifest文件,搜寻的路径包括当前目录、C://windows/WinSxS 等等,如果没有找到对应的库文件,则提示“应用程序正常初始化失败”;   3.因此解决这个问题的办法就是:(a)用文本编辑器打开exe或dll对应的.manifest文件,查看它引用的CRT、MFC、ATL库的版本;或者,用UltraEdit直接打开exe或者dll,从资源区中找到编译进去的.manifest信息,找到它引用的CRT、MFC、ATL库的版本;或者,运行程序,当程序弹出“应用程序正常初始化失败”对话框时,在桌面上右键点击“我的电脑”-“管理”-“事件查看器”-“系统”,双击查看其中的记录,可以看到出错的原因是因为缺少了某某版本的CRT、MFC、ATL库,记录下这个版本信息;(b)记录到的库的版本信息一般类似于“Microsoft.VC90.DebugCRT”,之后到C://windows/WinSxS 或者VC200X的安装文件夹中搜索包含这个字符串的文件夹和文件,将搜索到的dll和.manifest文件都拷贝到应用程序所在的文件夹中,其中,.manifest文件必须重命名为“Microsoft.VC90.DebugCRT.manifest”(这里以Microsoft.VC90.DebugCRT为例),这样应用程序就可以正常运行了;(c)注意:库的.manifest文件和dll要一同拷贝到应用程序根目录去,因为应用程序会将编译到内部的manifest信息与外部的.manifest文件进行对比,之后才会对库的dll进行调用。如果只拷贝库的dll文件是没有用的;   4.如果本机编译和运行程序都ok,但是将编译好的程序拿到其它机器上确无法运行,则多半也是这个原因。另外,如果提示"应用程序配置不正确",大多也是因为上面所说的CRT、MFC、ATL库版本与应用程序不匹配导致的,可以如法炮制进行解决;
个人分类: OpenCV|4430 次阅读|0 个评论
[转载]GO 分析工具
helloating1990 2012-5-4 21:51
GO分析的相关工具(转) GO委员会工具 AmiGO AmiGO 提供检索和浏览GO委员会提供的本体学(ontology)和注释(annotation)数据。用户可以通过检索蛋白获得相应的GO术语,可以检索GO术语得到相应的细节和相关的蛋白注释,AmiGO还提供了BLAST搜索引擎,比对有GO术语注释的基因和基因产物的序列。 OBO-Edit OBO-Edit是一个开源的、与平台无关的应用程序,用于显示和编辑OBO格式的本体文件.OBO-Edit是基于图的工具,强调本体的全部图结构,给生物学家提供了一个友好的接口。OBO-Edit是个很好的工具,关注于相对简单的门类的相互关系,有助于本体学的快速更新。 非GO委员会工具 用于搜索和浏览GO的工具:显示、浏览和搜索相应的本体和注释 ** CGAP GO Browser 提供浏览GO词汇,可以找人和小鼠基因对应的GO术语, 每隔几个月更新GO的数据。 ** COBrA 一个基于Java的本体编辑器,区别于其它编辑器在于其提供了两个本体间概念上的连接,以及提供了精细的分析和验证功能。除了支持GO和OBO格式之外,COBrA还能导入和导出本体为语义web(Semantic Web)格式如RDF、RDFS、OWL。 ** Comparative Toxicogenomics Database CTD是一个公用的数据库,加强了对环境中化学物质对人类健康的理解,整合了GO数据和GO浏览器。使得用户可以理解暴露在化学物质下相关靶标的生物功能、过程和细胞定位。 ** DynGO 是一个客户端-服务器模式的应用程序,提供了许多高级的功能,除了标准的浏览功能外,DynGO允许用户批量地检索一系列基因和基因产物的GO注释,以及语义检索一系列基因和基因产物所共有的相似GO注释,结果根据GO的等级显示为树状结构,支持许多动态显示的选项如对树节点排序或改变树的方向。对于GO管理者和经常使用GO的用户,DynGO提供了快速和方便的访问GO注释数据。DynGO广泛地应用到有GO术语注释的任意数据集。 ** EP GO Browser EP GO Browser是EBI的Expression Profiler中的一个组件(Expression Profiler是一个工具集,用于聚类、分析和可视化显示基因表达和其它基因组数据),通过它,你可以搜索GO术语和识别基因相关的节点,以及相应的子节点。 ** Gene Class Expression Gene Class Expression允许使用GO数据库对SAGE数据进行功能注释。这个工具对每一个SAGE标签在GO数据库里进行搜索,对选定的GO类别和选定的等级进行关联。这个系统对于映射SAGE数据到GO结构上提供了用户友好的数据导肮和可视化。还对SAGE标签在每一个GO类别里的百分比提供了图形可视化以及置信区间和假设检验。 ** GeneInfoViz GeneInfoViz是一个基于web的工具,提供批量检索基因功能信息、可视化GO结构和构建基因相关网络。用户需要提供一个基因列表(格式可为LocusLink ID、UniGeneID、gene symbol、accession number),结果返回功能基因组信息。基于对给定基因的GO注释,GeneInfoViz允许用户以GO的DAG结构显示这些基因,以及在选定的DAG水平上构建基因相关网络。 ** GeneOntology at RZPD RZPD提供了GO标识符和相关联的UniGene ClusterIDs、Genes(Name/Symbol)、Clones的检索,目前GO注释关联了人和小鼠的基因/克隆。 ** GenNav 检索GO术语和注释的基因产物,提供在GO DAG图中可视化显示GO术语。 ? ** GOblet GOblet服务器考虑了GO术语,执行序列(cDNA,蛋白)分析。如相似性搜索(BLAST),在使用已有的GO注释构建的不同物种的数据库的前提下,服务器展示了所有匹配的细节描述以及基于匹配到的GO术语构建GO概要树(summary tree) ** GoFish GoFish是在线的java程序,也可以下载到本地运行。允许用户使用GO属性构建任意的布尔检索,对符合条件的基因产物进行排列,GoFish也对每一个基因产物估算其符合布尔查询的概率 ** GONUTS GONUTS是基于wiki的GO术语和少量物种基因关联的浏览器,wiki接口允许用户创建和分享每一个GO术语用法的注解。 ** MGI GO Browser 通过MGI GO Browser可以搜索GO术语和显示所有小鼠基因注释到每一个术语或子术语。也可以浏览本体来观察术语之间的关系、术语定义、对于给定的术语和它的子术语所注释的小鼠基因数量。MGI GO Browser直接访问MGI数据库中的GO数据(每晚更新)。 ** Ontology Lookup Service OLS整合了公开的可用生物医学本体到单一的数据库。所有修正的本体是每天更新的。一个当前加载的本体列表可以在线获得,这个数据库能够通过检索获得单一术语的信息或使用AJAX浏览完整的本体。自动补齐提供一个用户友好的搜索机制。一个基于AJAX的本体显示器可以有效地浏览完整的本体或其子集。一个可编程接口可以通用使用SOAP来检索网络服务。服务由一个WSDL描述器描述,此文件可在线获得。一个简单的java客户端使用SOAP来连接网络服务,可以从SourceForge上下载到。所有的OLS源代码是公开的,使用Apache许可证发布。OLS提供了一个用户友好的单一入口指向公开可获得的本体(Open Biomedical Ontology格式)。 ** PANDORA 使用PANDORA可以搜索蛋白的任何非一致集(non-uniform sets)和检测共享独特生物属性的蛋白子集,以及这些集合的交集。PANDORA支持GO注释和额外的关键字(来自于UniProt Knowledgebase, InterPro, ENZYME,SCOP等等)。PANDORA被整合进ProtoNet system,从而允许测试上以万计的自动产生的蛋白家庭。PANDORA已经取代了由同一个团队开发的ProtoGO浏览器。 ** QuickGO at EBI QuickGO是一个GO浏览器,由EBI开发,是InterPro的一个组件,可以搜索GO术语来观察它的相关节点和定义,还可以映射到SWISS-PROT关键词、酶分类,转运分类数据库或者InterPro入口。GO数据每日更新。 ** TAIR Keyword Browser 搜索和浏览GO、TAIR解剖(Anatomy)、TAIR发育阶段术语(developmental stage terms),允许显示术语的细节及其相关的术语。包括基因、文献、芯片实验和相应术语的或子术语的注释之间的关联。 ** Tk-GO 这个工具是对BDGP的GO::AppHandle库基本功能的一个GUI包装。GO术语在一个explorer-like浏览器里展示,程序可以通过修改perl脚本来配置。Tk-GO使用的GO数据库(默认直接连接BDGP的数据库)是用户可以修改的。 注释工具:使用GO对基因和基因产物注释的工具 ** g:Profiler g:Profiler是一个公用的web服务器,用于挖掘高通量基因组数据。g:Profiler有一个简单、用户友好的网页接口,对于获取GO、通路或转录结合因子在单个基因水平上的富集等具有强大的可视化功能。除了标准的多重检验校正(multiple testing corrections)外,引进了一个对复杂结构(如GO)进行多重检验的真实效果估算的改良方法。解释基因列表通过一个高效的算法由同一接口支持。其它实用的数据分析通过模块支持。整合进g:Profiler的模块有:g:Convert转换不同数据库的ID,g:Orth找寻不同物种的直向同源基因(orthologous genes),g:Sorter搜索绝大部分的公用基因表达数据找寻共表达的数据。g:Profiler支持31个不同的物种,数据定期从数据源(如Ensembl数据库)更新。生物信息学社区希望g:Profiler能支持简单的文本输出。 ? ** GeneTools GeneTools收集了许多基于web的工具,从许多不同的资源里收集信息,提供可用的基因组分析,两个主要的工具连接到这一数据库是NMC注释数据库V2.0和eGOn V2.0。NMC注释数据库V2.0提供了来自于UniGene、EntrezGene、SwissProt和GO的信息。 ** GOanna 使用相似性搜索来找寻蛋白的注释,输入可以是一系列的ID或是一系列FASTA格式的序列。如有需要GOanna会检索序列,并对用户指定的数据库进行BLAST搜索。结果包含BLAST搜索到的相似性高的序列的GO注释和序列比对的结果。 ** GoAnnotator 此工具对从文献里提取的蛋白GO术语注释进行验证。 ** GOCat:Gene Ontology Categorizer? GOCat是一个自动的文本分类器,此工具归类任意的输入文本(几个词,一篇摘要,一系列的PubMed识别符等等)到GO分类。这个系统目标在于通过文本挖掘方法方便对基因和基因产物进行功能注释。对于每一个的预测类别,提供一个置信打分和一段抽取于输入文本的简短文本。 ** GoFigure 对未知的检索序列通过BLAST来识别其同源的注释,以此来预测其GO注释。DNA或蛋白质序列都允许提交,多重的检索可以通过提交包含FASTA格式的文件来完成。检索到的结果通过email返回给用户,结果显示为图或者是tab分割的文件。结果可以通过tar打包文件下载。 ** GoPubMed GoPubMed是一个网络服务器,允许用户结合GO探索PubMed搜索结果,GoPubMed提交用户的关键字到PubMed,检索摘要,检测摘要中的GO术语,显示与最初检索结果相关的GO子集,允许用户通过语义浏览和显示相应的文献和它们的GO注释。 ** GOtcha GOtcha提供了对于给定的检索序列相关GO术语的预测。每一个术语相对于引用搜索是分数独立(scored independently)和分数校准(scores calibrated)的,以便给出正确性的准确百分比可能性(to give an accurate percentage likelihood of correctness)。 ** HT-GO-FAT:High Throughput Gene Ontology Functional Annotation Toolkit HT-GO-FAT允许高通量映射未知或其它基因序列如ESTs、mRNA、蛋白数据到GO注释、EC numbers、KEGG通路。它使用序列相似性和结构域匹配。此工具使用自定义的校正数据库以及拥有诸如窗口局域网分布式BLAST(windows LAN distributed BLAST),能够通过窗口局域网分布高通量的BLAST搜索。HT-GO-FAT还拥有高通量的BLAST输出观察器,以及能对匹配度高或人工校正的数据导出为许多的文件格式。数据能导出为AmiGO相关的文件,通路图会高亮显示用户数据集中的酶/基因。 ??? ** InGOt (商业软件) InGOt是Inpharmatica的新模块系统中的一个模块。这个系统用于蛋白注释,是一个应用GO到所有蛋白的一个商业系统。它提供一个无与伦比的资源来阐释蛋白功能:它的图形用户界面让你轻松地从各个链接中跳转,从汇总数据到分层语境(hierachical context)和文献/证据(literature/evidence)。InGOt拥有比公开资源更为丰富的序列和最广泛的GO关联资源。InGOt可以和其它模块整合,如Domain Professor用于蛋白结构域的细节注释和Blu-Chip用于即时和准确的探测蛋白赋值(protein assignments)。 ** InterProScan 蛋白结构域和功能位点数据库对于蛋白功能的预测是一个关键的资源。十年来,许多标识识别(signature-recognition)方法逐步形成来解决不同序列分析问题。产生不同和独立的数据库。由于强调不同的分析方法,这些资源有着各自不同的优点和缺点,各自有着不同的最优应用。从而,为了得到最好的结果,搜索策略必须完美地结合所有的资源。InterProScan是一个基于Perl的程序,它能够结合不同的蛋白标识识别方法到一个资源上。 ** JAFA:Joint Assembly of Functional Annotations JAFA接收蛋白序列,提交它到数个功能预测程序,并将预测结果聚集到一个单一的、易读的、基于GO术语的文件,用户可以点击各个服务器、AmiGO和QuickGO。JAFA还提供包含所有结果的XML文件下载。 ** Manatee Manatee是基于web的基因评估和基因组注释工具,Manatee能够存储和显示原核和真核基因组注释。Manatee界面允许生物学家快速识别基因以及对其进行高质量的功能赋值(诸如GO分类,使用搜索数据,paralogous家族和由自动分析所产生的注释),Manatee能够下载和安装,运行于CGI网络服务器,比如Apache。 ** PubSearch PubSearch是基于web的文本管理工具,允许管理者搜索和注释基因到文献的关键字。它的后端有一个简单的mySQL数据库,PubSearch使用一系列Java伺服小程式和JSPs来完成检索、修改、增加基因、基因注释和文献信息。此工具可以从GMOD上下载到。 用于基因表达/芯片分析的工具 ** Avadis - gene expression analysis with GO browser (商业软件) Avadis是基因表达数据的数据分析和可视化工具,内置一个显示GO等层的浏览器,许多基因有共同的本体途径(common ontology paths),对基因表达聚类可以通过GO语义进行聚类以识别功能标识(functional signatures) ** BiNGO 开源的java工具,在一个基因集合里确定那个GO类别是统计上过表达(over-represented)的。BinGO以Cytoscape的插件实现,Cytoscape是分子相互作用网络数据整合和可视化的软件平台。BinGO映射给定基因集的主要功能主题到GO等级上,并输出这一映射为Cytoscape图。 ** CLENCH:CLuster ENriCHment CLENCH允许拟南芥(A. Thaliana)研究者从TAIR上执行自动的GO注释检索并计算给定的基因集(相对于参考集)的GO术语富集。在计算富集之前,CLENCH允许把返回的注释映射到GO slim术语表(能够被用户编辑)和本地安装的GO上的任何粗糙水平, ** DAVID:Database for Annotation, Visualization and Integrated Discovery 基于web的工具,提供由高通量技术产生的基因组水平数据集(诸如表达谱和蛋白组平台)的注释和分析的整合解决方案。分析结果和图形显示保留动态链接到主要的数据库和外部数据仓库,从深度和广度上覆盖数据。DAVID为数据收集到生物意义的转变提供便利,加速了基因组水平数据的分析。 ** EASE EASE对于一个给定的基因列表概述主要的生物学主题。给定的基因列表来自于表达谱或其它的基因组水平实验,EASE能够快速计算相对于数据集里所有基因每一个统计上可能的过表达GO术语。 ** eGOn v2.0:explore Gene Ontology 基于web的工具,映射表达谱数据到GO结构上。多个的输入文件能够同时分析以比较两个或多个实验的注释基因的分布。 eGOn V2.0的核心特性: .可视化:基因注释以GO DAG可视化显示或以表格的形式显示,GO DAG的尺寸能够由用户自由定义。 .过滤:GO注释能够基于evidence codes进行过滤。 .包含用户定义的GO注释:事先加入到NMC注释数据库中。 .统计分析:多个基因列表能够同时分析以比较GO等级上注释基因的分布,统计测验设计成允许用户在两个基因列表之内或之间计算GO注释的不同(dissimilarities)。 .连接注释数据库:连接到NMC注释数据库,基因和蛋白的信息直接由GO DAG或导出的数据提供。 .导出:GO DAG信息、统计结果、基因和蛋白信息能够导出为Excel、text、XML格式。 ** ermineJ 分析表达数据中的基因集(用户定义或通过GO术语定义)的工具。这个软件设计为给只有很少或没有信息学背景的生物学家使用。为想使用ermineJ脚本的用户提供一个命令行接口。实现了多个不同的对基因集的打分方法,不是简单地集中于依赖过分表达(over-representaion)方法上。 ** FatiGO FatiGO对给定的基因集,以代表性的功能信息(低表达或过表达GO术语)对其赋值。通过多重检验纠正(multiple-testing correction)得到统计显著性。FatiGO被设计成在DNA芯片数据分析的上下文里进行功能注释,FatiGO链接到基因表达模式分析套件(Gene Expression Pattern Analysis Suite)里。FatiGO使用主要的基因组和蛋白组数据库(GeneBank, UniProt, Unigene, Ensembl,etc)的基因IDs。FatiGO适用于任何类型的大规模实验进行功能注释。 ** FIVA:Functional Information Viewer and Analyzer FIVA协助原核生物社区的研究者进行转录组分析时快速识别相关生物过程。此软件分析大量基因的功能谱并对影响的生物过程产生一个综合的概述 ** FuncAssociate FuncAssociate是一个基于web的工具,接受一个基因列表作为输入,并返回输入列表中过表达或低表达(over- or under-represented)的GO属性。经过多重假设检验后只有那些统计上具有显著性的过表达或低表达的属性才会被报道。目前有10个物种被支持。除了输入基因列表外,用户还可以指定a)这一列表是否被认为是排序还是乱序的。b)FuncAssociate所认为的总基因(the universe of genes)。c)单独报道过表达或低表达的属性,还是两者都报道。d)p-value cutoff值。 新版的FuncAssociate(还处于测试阶段)支持更广泛的基因命名方案,并使用更为频繁更新的GO相关文件(GO associations),然而原来版本的一些特性诸如按LOD排序或查看基因属性表格的选项还没有实现。 ** FuncExpression FuncExpression是一个基于web的资源,对大规模的基因组数据进行功能解析。FuncExpression能对植物、动物和真菌的基因列表(从基因组和蛋白组实验中产生)进行功能比较。多个的基因列表能够被分类、比较和可视化显示。FuncExpression支持双通道整合(two way-integration)植物功能信息和基因表达数据,这使得后续的交叉验证(cross-validation)成为可能,交叉验证使用BarleyBase相关实验获得的植物芯片数据。 ** FunCluster:FunCluster, Functinal Profiling of Microarray Expression Data FunCluster是一个基因组数据分析工具,设计成对cDNA芯片实验产生的基因表达数据进行功能分析。除了自动对基因表达数据进行功能注释外,FunCluster通过特定设计的共棸类对涉及到的生物注释和基因表达数据进行功能分析,能够检测出共调控的生物过程(注释基因组主题所展示)。FuncCluster的功能分析依赖于GO和KEGG注释,并且只支持三个物种:人(Homo sapiens)、小鼠(Mus musculu)和酿酒酵母(Saccharomyces cerevisiae)。 ** FunNet:Functional Analysis of Transcriptional Networks FunNet设计为一个分析基因共表达网络(由芯片表达数据所构建)的整合工具,此工具的分析模块的实现涉及到两个抽像层:转录(如基因表达谱)和功能(如转录分析所显现的生物学主题)。依赖于GO和KEGG注释的功能分析技术,应用于从基因芯片表达数据中抽提一系列相关生物学主题。多重情况表达(multiple-instance representations)用来关联注释转录本和相关的生物学主题。一个原创(original)的非线性动态模型被用来量化相关基因组主题(genomic themes)上下文的接近度,这一量化基于在基因共表达网络(如在注释主题中捕获转录本的相似的表达谱)中基因组主题的增殖模型(patterns of propagation)。最后,一个非监督的多重情况光谱聚类过程(an unsupervised multiple-instance spectral clustering procedure)被用来探索共表达网络的模块结构,这是通过聚集共表达网络所显示出来的显著性相互关系的生物主题来实现的。提供了共表达网络的功能、转录表达、相关的转录和基因组主题的上下文详细信息。 FunNet提供了基于web的工具以及作为一个标准的R包。标准R实现能够运行在任何能运行R环境的操作系统(windows, Mac OS, 各种Linxu和Unix)上,能够从FunNet网站或者从CRAN的镜像站上下载到。两种实现的FunNet都是使用GPL2.0发布的。 ** G-SESAME G-SESAME包含了一系列工具,分别是: 1.衡量GO术语语义相似性的工具。 2.衡量基因功能相似性的工具。 3.基于GO术语注释信息聚类基因的工具。 ** GARBAN GARBAN是对cDNA芯片和蛋白质组技术产生的数据进行分析和快速功能注释的工具,GARBAN实现为生物信息学工具,以快速比较、分类和图形展示各种数据集(genes/ESTs或proteins),目的在于为病理和药学研究中识别分子标记(molecular markers)提供便利。GARBAN链接到主要的基因组和蛋白质组数据库(Ensembl, GeneBank, UniProt Knowledgebase, InterPro,etc.)并遵循GO委员会的标准进行语义分类。代码是共享的: e-mail garban@ceit.es ** GENECODIS GENECODIS是一个基于web的对基因列表进行功能分析的工具,它整合了不同的信息资源来搜索最频繁的共存在基因集的注释,并通过统计显著性排列它们。注释分析来自于不同的数据库如GO,KEGG或SwissProt。 ** GeneMerge GeneMerge对于一个给定的基因集返回功能基因组信息,并提供此基因集里过表达的特定功能或分类的统计秩值(statistical rank scores)。展示了所有的GO类别和功能基因组数据。 ** GFINDer: Genome Function INtegrated Discoverer GFINDer是一个多重数据库系统(multi-database system)提供了大规模的用户分类的序列标识列表和基因组生物学信息以及列表中不同基因类别的特征生物学功能谱。GFINDer自动从不同的资源检索更新功能分类的注释信息,识别用户分类的基因列表中每个分类的富集类别。并计算每一个类别的统计显著性。而且,GFINDer能够根据挖掘的功能类别对基因进行功能分类并且对这些分类进行统计分析,使得能够更好地解释芯片实验结果。 ** GOALIE: Generalized Ontological Algorithmic Logical Invariants Extractor GOALIE是用来构建时间序列依赖富集的工具,需要ODBC连接到GO数据库。 ** GOArray GOArray是一个Perl程序,输入一系列基因注释为“感兴趣(of interest)”(GOI)或者不感兴趣,并确定相关的GO术语对于GOI是否过表达。一个置换检验(permutation test)是可选的,用来评估结果的可靠性。输出包括了多个可视化图和补充信息以及进一步的参考,还有对所使用的统计方法的概述。 ** GOdist GOdist是一个Matlab程序,用于分析Affymetrix芯片表达数据,实现了Kolmogorov-Smirnov(KS)连续统计方法。还引入一个两侧超几何分布(two-tailed hypergeometric distribution)使用Fisher exact检验实现了离散方法。GOdist能够检测出芯片基因相关的GO术语相对于不同总体的差别,总体可是是全局芯片总体、分析的GO术语的直接父节点或全局父节点。 ** GOHyperGAll 检验样本总体基因得到过表达的GO术语,R/BioC函数GOHyperGAll对所有的GO节点进行超几何分布检验计算并返回相应的P值,后续的过滤函数使用默认的或自定义的GO Slim类别执行GO Slim分析,使用此工具必须有基本的R和BioConductor知识。 ** GoMiner and MatchMiner High-Throughput GoMiner是一个工业级别的整合GO工具,用于解析多芯片实验。GOMiner是基于Java的程序包,对感兴趣的基因(如芯片实验里上调或下调基因)在GO的上下文里进行生物学解析。GoMiner提供定量和统计的输出文件和两个有用的可视化文件:(i)树状结构类似于AmiGO浏览器里所显示的(ii)一个压缩的,动态交互的DAG。GoMiner所展示的基因链接到主要的公开生物信息学资源。一个陪伴工具(companion)MatchMiner用于做前处理,为GoMiner或其它的GO工具的输入获取基因名称,提供了一个自动化脚本以便于安装本地化的数据库。 ** GOstat GOstat是一个易于使用的web工具,用于确定基因列表中过表达或低表达的GO类别的统计显著性。数据每月更新。 ** GoSurfer GoSurfer在分析基因集(来自于基因组范围的计算、芯片分析或其它相应的高端方法)时使用GO信息,GoSurfer包含了严格的统计检验,交互的图形和自动更新注释信息(基因标识符(UniGene,LocusLink)或Affymetrix探针集)。 ** GO Term Finder GO Term Finder对给定基因列表的基因产物的GO术语或其父节点作显著性的分析。Saccharomyces Genome Database 实现了一个基于web的GO Term Finder用于为出芽酵母基因产物搜索注释。一个通用的GO Term Finder由Standford Microarray Database创建,可以从CPAN下载到。这个代码被普林斯顿基因组研究组(Princeton genomics group)用于创建基于web的通用GO Term Finder,通过该web工具提供了分析GO站点上所公开的有GO注释的任何种属(包括人)的基因。 ** GOTM:Gene Ontology Tree Machine GOTM是一个基于web的工具,基于GO等级结构分析和显示感兴趣的基因集。这个工具提供了用户友好的数据导航和可视化。产生可扩展的树用于浏览GO等级结构,以HTML的形式生成固定的树用于对不同注释水平进行归档并生成柱状图,GOTM提供统计分析以显示GO类别和相对富集的基因数目以及暗示(suggest)了进一步研究的生物领域。富集的GO类别能够以子树或DAGs的形式展示。基因的子集能够检索GO术语或进行关键字搜索。每一个基因的细节信息能够直接从GeneKeyDB里检索到。 ** GOToolBox GOToolBox是一系列基于web的程序,允许从一个基因集(相对于被检索的参考基因集)识别统计上过表达或低表达的术语、基因集里对功能相关的基因进行聚类和检索基因集里共享的注释。GO注释能够限制在GO slim等级上或者是给定的GO术语水平上,而且术语可以使用evidence codes进行过滤。GO和基因关联文件每月更新。 ** L2L L2L是一个简单但功能强大的工具,用于发现芯片数据中隐藏的生物学显著性,通过易于使用的web界面,L2L挖掘GO术语显著富集的上调或下调的基因,L2L还将基因列表与数据库中上以千计的芯片实验作比较,以识别共有的基因调控模式。此工具可以下载到一个命令行的版本,可以自定义运行或者批量分析。 ** Machaon Clustering and Validation Environment Machaon Clustering and Validation Environment是一个聚类验证的工具,将样本或基因按相似的基因表达模式进行分类并评估聚类的质量。在基因表达数据分析中GO术语用于衡量基因间的相似性(生物学距离)以支持生物医学知识发现(biomedical knowledge discovery)。 ** MAPPFinder MAPPFinder是GenMAPP的辅助程序。这个程序允许用户检索任何存在的,相对于GO基因相关和GenMAPP芯片通路谱(MAPPs, microarray pathway profiles)的表达谱数据标准。分析产生的结果能够通过选择感兴趣的术语或MAPPs直接以GO等级或在GenMAPP中展示出来。 ** Onto-Compare Onto-Compare是一个基于web的工具,可以基于GO对商业芯片进行比较。Onto-Compare允许用户对每一个芯片做功能偏好性评估并确定对于某个特定生物学现象(由GO术语描述)最好的芯片。 ** Onto-Design Onto-Design允许用户设计定制芯片,通过选择一系列UniGene cluster IDs,这些IDs代表了一个给定的生物过程子集(使用GO术语描述)。 ** Onto-Express Onto-Express搜索公共数据库并返回一系列表格,包换相关表达谱、基因细胞发生定位(cytogenetic gene locations)、生物医学和分子功能、生物过程、细胞组分和翻译的蛋白的细胞功能。 ** Onto-Miner Onto-Miner允许用户通过clone ID, UniGene gene symbol, LocusLink ID, accession number等搜索不同的公开生物信息学数据库,允许使用基因列表进行批量检索。第三方开发者可以把这个站点作为资源,提供对于任意的基因列表的详细基因信息。 ?? * Onto-Translate Onto-Translate是基于web的工具,允许用户对下列ID进行快速转换:accessions IDs, Unigene cluster IDs 和Affymetrix probe IDs。Onto-Translate使用不同的数据库并降低任意基因列表的冗余,帮助识别相同的信息。 ** OntoGate OntoGate提供使用GO术语和与GO术语相关的外部数据库进入GenomeMatrix(GM)的入口,以找寻GM中不同物种的基因,这些基因能到映射到GO术语上。OntoGate包含了对相应注释基因的氨基酸序列进行BLAST搜索。 ** Ontologizer Ontologizer能够对一组或多组基因或基因产物产生相应 的GO注释,并根据每一个聚类的使用频率进行排列,以HTML或XML格式显示。如果提供了总体的数据集,程序会对每一个GO术语执行过表达的统计分析。产生“Dot"(GraphViz)文件对过表达的GO术语提供图形化概述。提供了每一个基因的详细列表。 ** Ontology Traverser Ontology Traverser是芯片基因列表富集工具,此工具为一些cDNA芯片和相对于芯片类型所使用的所有探针/克隆集列表提供了简单的上传格式,接收AffyIDs和NIAIDs。支持许多报告格式:flat html,flat tsv, xml和展示GO结构的动态可点击HTML。对每一个GO节点报告不同的统计/结果:列表fq, 芯片fq, fold change,? Fisher's exact test P值和基因的映射到的节点或子节点的标识。 ** Probe Explorer Probe Explorer是一个开放使用的基于web的生物信息学程序,显示芯片寡核苷酸探针和在基因组上下文中的转录本的关联,此软件很灵活,可以简单地作为基因组和转录组的浏览器。提供了15种后生动物(metazoa)和两种酵母提供基因组实体(genomic entities)(位点, 外显子, 转录本)的序列和对等物包括矢量图输出。序列比对工具用来建立Affymetrix芯片探针序列和转录组(人,小鼠,大鼠和酵母)之间的关联。提供使用任何的DNA或蛋白序列进行关键字搜索、用户搜索和在基因组上进行比对。 ** ProfCom: ProfCom, Profiling of Complex Functionality ProfCom是基于web的工具,用于对实验相关的基因列表进行功能解释。使得ProfCom成为独特工具的一个特征是除了GO术语外还可以使用复杂函数(complex function)进行富集分析。复杂函数由可用的GO术语的布尔组合构建。ProfCom对复杂函数作推断能够更加特异地比较单个的术语并更为准确地描述基因的功能。 ** SeqExpress SeqExpress是一个综合的分析和可视化软件包,用于基因表达实验。组合了特定开发的技术和通用的统计学方法,GO被用来对聚类的功能富集进行打分。这些结果能够在内嵌的浏览工具或通过通过网页进行浏览。SeqExpress还支持许多数据转换,投影(projection),可视化显示,文件输入/输出,搜索,与R整合,和聚类等选项。 ** SerbGO SerbGO是基于web的工具,帮助研究者确定那一个基因芯片分析工具、GO语义分析工具适合他们的项目。SerbGO是一个双向(bidirectional)程序。用户能通过检索表单索要感兴趣的工具的特性,用户还能比较每一个工具所实现的特性。 ** SOURCE SOURCE编辑来自多个公开访问的数据库(包括UniGene, dbEST, UniProt Knowledgebase, GeneMap99, RHdb, GeneCards和LocusLink)的信息,SOURCE使用的GO术语与LocusLink相关。 ** Spotfire Gene Ontology Advantage Application (商业软件) Spotfire Gene Ontology Advantage Application整合GO注释和基因表达分析。研究者在DecisionSite里可视化地选择一个子集的基因,软件展示了基因的GO等级分布。类似地,在GO等级里选择任何的过程、功能或细胞定位可以在DecisionSite里可视化地显示其相应的基因。 ** STEM: Short Time-series Expression Miner STEM是一个Java程序,用于聚类、比较和可视化短时间序列的基因表达数据(少于或等于8个时间点)。STEM允许研究者识别显著性的时间表达谱和与这些表达谱相关的基因,并比较不同条件下这些基因的行为。STEM完整地整合了GO数据库,并支持对具有相同的时间表达谱的基因集做GO类别富集分析。STEM还支持对特定GO类别的基因行为进行简易的识别和可视化,识别在这些基因中那些时间表达谱被富集。 ** T-Profiler T-Profiler使用t检验对预定义的基因集的平均活性改变进行打分。基因集分别基于GO类别、ChIP-chip实验、上游与相应的转录因子结合模体匹配、在相同染色体上的定位进行定义。一个大折刀(jack-knife)过程使得计算比其它软件要更为稳健。T-Profiler使得对芯片数据进行解析以直观和严格统计成为可能,而不需要结合实验或者选择参数。 ** THEA:Tools for High-throughput Experiments Analysis THEA是一个整合的信息处理系统,用于分析后基因组数据。可以自动化进行数据(由通过选择的生物学信息包括GO进行分类)注释。用户可以对这些注释手动搜索和浏览,或根据统计标准(数据挖掘)产生有意义的概述。 其它工具 ** APID:Agile Protein Interaction Data Analyzer? APID是一个交互的生物信息学web工具,在一个统一的和比较性的主要平台,用于整合和分析,目前已知的信息是由特定的小规模或大规模的实验方法所展示的蛋白质相互作用。目前,此应用程序包含来自于5个主要数据库资源的信息,装入于单一服务器以探索4万个不同蛋白和接近于15万已证实的不同相互作用。网站包含搜索工具以检索和浏览数据,允许通过计算的参数选择相互作用对,这些参数衡量每一个特定的蛋白相互作用的可靠性。蛋白的参数是连通性、聚类系数、GO功能环境、GO环境富集;相互作用方式的数目、GO重叠(GO overlapping)、iPfam结构域-结构域相互作用。APID同样包含了一个图形互动的工具用来显示选择的子网或者整个网络以及对其导航。 ** Blast2GO B2G基于GO注释和功能分析进行相似性搜索。B2G对基因功能信息可能性提供直接的统计分析并在GO有向非循环图中高亮显示相应的功能特性。而且B2G包含了不同的统计图表概述了包括BLASTing、GO映射、注释和富集分析(Fisher's Exact Test)。所有的分析过程是可配置的以及支持在任何分析阶段进行数据的输入和输出。这一程序同样接受已存在的BLAST或注释文件并将它们加入到后续的分析中。这个工具还提供了非常合适的平台来进行非模式生物的高通量功能基因组研究。B2G是一个不依赖于物种、直观和互动的桌面程序,允许监示和理解整个注释和分析过程,分析过程支持附加的特性如GO Slim整合,考虑evidence code(EC),批量模式或GO多水平饼图。 ** Db for Dummies! DBD是一个小数据库,导入GO Slim,它允许数据以树的形式显示。 ** Flash GViewer Fash GViewer是一定制的Flash电影能够轻易地被嵌入到网页以显示染色体上单独特性的位点。它试图提供特定特征集(如基因相关的特定GO术语等)的基因组位点的概述,而不是显示基因组的特性。特性能超链接到外部的网页以获得细节信息,使得GView能够作为一个导航工具。提供了大鼠、小鼠、人和线虫的基因组图谱(其它的基因组图谱也能够创建)。注释数据以静态的文本文件提供或者通过服务器端的脚本产生XML文件。 这个工具不是GO特异的,但是设计成可以显示GO注释数据。 ** FunSpec FunSpec是一个基于web的工具,对基因和蛋白集(如共调控基因、蛋白复合体、基因相互作用)基于已存在的注释包括GO术语进行统计评估。 ** FuSSiMeG:Functional Semantic Similarity Measure between Gene Products 能够通过比较基因注释中GO术语间的语义相似性来衡量基因产物间的功能相似性。还可以对任意GO术语进行语义相似性评估。 ** Generic GO Term Mapper Generic GO Term Mapper映射基因列表中的粒状GO注释(granular GO annotations)到更为广泛、更高水平的GO父节点术语(有时候索引到GO Slim术语上),允许把基因归到更大的类别里。 ** Genes2Diseases Gene2Disease是一个映射到人类遗传疾病的候选基因的数据库。通过使用分析相关的表型特征和生化实体(chemical objects)、从生化实体到GO蛋白功能术语以及基于MEDLINE和RefSeq数据库产生了本数据库。能够用来显示特定遗传疾病相关的所有GO术语。 ** GO Slim Mapper GO Slim Mapper用来注释出芽酵母基因产物,使用SGD GO Slim集,映射特定的粒状GO术语(granular GO terms)到相应的更为通用的GO slim父节点术语上。 ** GO Terms Classification Counter GO Terms Classification Counter以一个包含GO术语IDs的格式化或非格式化文本文件作为输入,用户选择以下可供选择的类别如GO_slim、GOA、EGAD、MGI_GO_slim或GO-ROOT,程序执行计数,并返回结果于网页上(如果时间长的话,程序会给用户发送含有结果的链接)。结果包含了计数表格、百分比和一个饼图。 ** GOBU:Gene Ontology Browsing Utility GOBU是一个基于Java的程序,使用GO和用户定义的等级两大目录(catalogs)在一个可扩展的体系下整合生物学注释目录(biological annotation catalogs)。GOBU拥有以下的特性:(1)用户特定的等级数据作为输入数据,(2)用户定义描述不同注释的数据类型,(3)一个处理用户定义的数据类型的可扩展软件体系。 ** GOChase GOChase是一系列基于web的工具,用于检测和纠正基于GO注释的错误。 .GOChase-History解决所有GO IDs修改的历史。 .GOChase-Correct高亮显示整合的GO IDs和重定向到正确主术语并进一步到整合的二级ID。对于过时的GO术语,GOChase推荐使用最短距离的非丢弃父术语。这个功能被用于GO浏览器如AmiGO和QuickGO以修复失效的超链接。 .完整的数据库(如LocusLink)可以作为平文件载入到GOChase里,报导注释错误和GOChase的纠正。 .当给一个GO ID输入时,GOChase会给出所有主要数据库里被这一GO ID所注释的所有基因产物。 ** GOProfiler GOProfiler对AgBase中可用的GO注释提供一个概述。用户提供一个物种(分类学id),GOProfiler显示此物种GO相关的数目和蛋白注释的数目。结果以evidence code列出,并提供了一个未被注释的蛋白列表。 ** GORetriever 用户提供一个蛋白ID列表,GORetriever在AgBase里搜索相应的GO注释,目前支持的ID类型是Uniprot ID、Uniprot Accession、GO ID。GORetriever产生蛋白和相应注释的列表以及一个没有GO注释的入口列表(list of entries)。没有GO注释的列表可以作为Goanna工具的输入以寻找相似序列(如果有注释的话会提供)。 ** GOSlimViewer GOSlimViewer对一个数据集提供高水平的GO类别概述。它设计成使用GORetriever的输出。你可以为GORetriever文件添加附加的注释(来自于GOanna或其它的资源).GOSlim Viewer目前只支持GOSlim集。 ** ProteInOn ProteInOn能够找寻相互作用的蛋白、找寻相应的GO术语并计算蛋白相似的功能语义并获取信息内容和计算每个GO术语的功能语义相似性。 ** TXTGate TXTGate基于web-service,结合选择的公开生物学资源的文献索引到一个灵活的文本挖掘系统以分析不同的基因集。通过裁剪词汇表(tailored vacabularies)、选择文本文件、LocusLink的MedLine摘要和索引SGD。子聚类(subcluster)和到各个外部资源的链接提供了对结果进行深度分析。 ** Wandora Wandora是一个基于Topic Maps(ISO 13250)的通用知识抽提、管理和发布环境。Wandora支持OBO平文件v1.2格式,能够对OBO文件(包括GO)和topic map进行相互转换。Wandora对于非常适合于显示OBO以及结合OBO、RDF和Topic Map资源进行知识整合(knowledge mashups)。 ** WEGO:Web Gene Ontology Annotation Plot WEGO是一个简单但有用的工具,用于绘制GO注释结果图。与其它的商业软件的图表创建不同,WEGO设计成处理GO的有向非循环图(directed acyclic graph, DAG)结构以便于为GO注释结果创建直方图。WEGO已经在许多的生物学研究项目中得到应用,包括水稻基因组项目和蚕基因组项目。它已经成为一个下游基因注释分析的有用工具,特别适合于执行比较基因组任务。 ** Whatizit Whatizit是一个web程序,重点突出在文档中所有感兴趣的东西。它的一个模块标识所有的GO术语和来自于UniProt蛋白跟基因的名称,并分别链接到GO和UniProt上。 为了您的安全,请只打开来源可靠的网址 打开网站 取消 来自: http://hi.baidu.com/createmiracle/blog/item/6f03bc19e1dcba61dbb4bd57.html
个人分类: 数据挖掘/机器学习|5005 次阅读|0 个评论
[转载]在Win32应用程序中启用控制台Console输出
runningabc 2012-4-28 13:12
在某些时候,我们可能需要在Win32窗口应用程序中打开控制台窗口,打印一些消息,或者作为当前程序的另外一个人机交互界面,或者为了帮助调试程序。为了达到这种效果,需要了解函数AllocConsole和C-Runtime的freopen函数。 AllocConsole函数会为当前的窗口程序申请一个Console窗口。这是MSDN上对AllocConsole的介绍: ALLOCCONSOLE The AllocConsole function allocates a new console for the calling process. BOOLAllocConsole( void ); 函数调用成功,返回非零值,调用不成功则返回0. 在为当前窗口程序申请到console后,我们需要调用C-Runtime的freopen函数将标准输出(stdout)重定位到新申请的console。 freopen的原型如下: FILE * freopen( const char * path, const char * mode, FILE * stream ); 我们调用的时候是这么着传入参数的: freopen( " CONOUT$ " , " w " ,stdout); 其中"CONOUT$"是指代当前console的特殊字符串,"w"表明以written模式打开这个console,stdout指代的是系统的标准输出设备。 下面是整个的代码: if (AllocConsole()) { freopen( " CONOUT$ " , " w " ,stdout); printf( " hello,world! " ); } 以上内容转载于: http://www.cppblog.com/hugai/archive/2009/05/17/83196.html ******************************************************************************************** 以下内容转载于: http://blog.csdn.net/winux/article/details/134707 在Windows程序中打开控制台的程序 //在Windows程序中打开控制台的程序 #include stdio.h #include io.h #include fcntl.h BOOL CreateConsole(void) { FreeConsole(); if ( AllocConsole() ) { int hCrt = _open_osfhandle((long) GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT); *stdout = *(::_fdopen(hCrt, "w")); ::setvbuf(stdout, NULL, _IONBF, 0); *stderr = *(::_fdopen(hCrt, "w")); ::setvbuf(stderr, NULL, _IONBF, 0); return TRUE; }return FALSE; } 在程序启动时调用该函数即可
7793 次阅读|0 个评论
[转载]Matlab与C语言程序的应用编程接口
linpandr 2012-4-10 14:21
Matlab与C语言程序的应用编程接口   MATLAB作为世界顶尖的数学应用软件,以其强大的工程计算、算法研究、工程绘图、应用程序开发、数据分析和动态仿真等功能,在航空航天、机械制造和工程建筑等领域发挥着越来越重要的作用。而C语言功能丰富,使用灵活方便,目标程序效率高。既有高级语言的优点,又有低级语言的特点。因此,C语言是目前应用最广的编程语言。虽然MATLAB是一个完整的、功能齐全的编程环境,但在某些情况下,与外部环境的数据和程序的交互是非常必须而且有益的。   众所周知,MATLAB是用M语言编程,不能在M文件中直接调用C语言程序。可以通过MATLAB提供的应用编程接口(API)来实现与外部的接口,在MATLAB环境中实现调用C语言或Fortran程序、输入或输出数据以及和其他软件程序间建立客户/服务器关系等功能。   MATLAB中调用C语言程序,必须通过MEX文件来实现。    一、 C语言的MEX文件的结构   C语言的MEX文件是一种动态连接子程序,可以象调用M文件一样调用它。MEX文件主要有以下几方面的应用:   (1)在MATLAB中,M文件的计算速度特别是循环迭代的速度远比C语言慢,因此可以把要求大量循环迭代的部分用C语言编写为MEX文件,提高计算速度。   (2)已经开发的C语言程序,则不必将其转化为M文件而重复劳动,通过添加入口程序mexFunction,可以由MATLAB调用。   (3)直接控制硬件,如A/D采集卡,D/A输出卡等,以用于数据采集或控制应用。   C语言的MEX文件的源程序由两个非常明显部分组成:   (1)计算程序,即在MEX文件中完成计算功能的程序代码,计算程序可以是普通的C语言程序,按照C语言规则编写即可   (2)入口程序,将计算程序与MATLAB连接的入口函数mexFunction。入口程序mexFunction相对要复杂一些,函数中有四个参数nlhs、plhs、nrhs和prhs。这里nlhs是输出数据的个数,plhs是指向mxArray(MATLAB中所有数据都由mxArray定义)的输出数据的指针,nrhs是输入数据的个数,prhs是指向mxArray的输入数据的指针。   图1显示了如何向MEX文件输入数据,通过接口函数调用计算程序完成运算过程,最后向MATLAB返回计算结果的过程。 二、 使用MEX文件   上面所述的MEX文件的两个主要部分在使用中可以是独立的,也可以是组合在一起的。不管是哪一种情况,MEX文件都必须包含头文件"mex.h",以便正常申明入口程序。入口程序的名字必须是mexFunction而且必须包含这些参数:    void mexFunction(int nlhs,mxArray *plhs )   在C语言的MEX文件中,参数nlhs和nrhs包含输出和输入变量的数目,借助于这两个参数,MEX文件被调用。参数plhs和prhs是包含指向MEX文件输出和输入变量的指针的向量,prhs是长度为nrhs的输入变量的指针数组,plhs是长度为nlhs的输出变量的指针数组。比如从MATLAB命令窗口来调用一个MEX文件:    x=fun(y,z);   则MATLAB编译器使用下面的变量来调用mexFunction:    nlhs=1    nrhs=2    plhs=(pointer)-/*unassigned*/    prhs=(pointer)-y    (pointer)-z   plhs指向只有一个元素的C语言数组,并且这个元素为空指针。prhs指向含有两个元素的C语言数组,其中第一个元素指向mxArray型变量Y,第二个元素指向mxArray型变量Z。   这里,plhs指向空的数组是由于输出x在子程序执行前尚未产生,入口程序的作用就是创建输出数组并分配指针plhs 指向该数组。如果plhs 没有赋值,MATLAB将给出输出变量没有赋值的警告信息。    三、C语言程序MEX文件实例   MATLAB 5 API提供了一系列程序来处理MATLAB所支持的各种数据类型,每一种数据类型都有对应函数共你使用来处理对应的数据。下面给出一个简单的C语言程序和与之对应的MEX文件代码,该程序的功能是将标量x加倍。   C语言程序如下: #include "math.h" void timestwo(double y ) { y =2.0*x ; return; } 下面是与C语言程序功能相同的MEX文件: #include "mex.h" void timestwo(double y ) { y =2.0*x ; } void mexFunction(int nlhs, mxArray *plhs ) { double *x, *y; int mrows, ncols; /*检查正确的参数数目*/ if(nrhs!=1){ mexErrMsgTxt("需要一个输入参数."); } else if(nlhs1){ mexErrMsgTxt("输出参数太多."); } /*输入变量必须是非复数类型的标量*/ mrows=mxGetM(prhs ); ncols=mxGetN(prhs ); if(!mxIsDouble(prhs ) || mxIsComplex(prhs ) || !(mrows==1 ncols==1)){ mexErrMsgTxt("输入变量必须是非复数类型的标量."); } /*为返回参数创建矩阵*/ plhs =mxCreateDoubleMatrix(mrows, ncols, mxREAL); /*分配输入输出参数的指针*/ x=mxGetPr(prhs ); y=mxGetPr(plhs ); /*调用timestwo子函数*/ timestwo(y, x); }   C语言是在编译的时候检查函数参数。MATLAB可以在M函数中传递任意数量和类型的参数,MEX文件也是如此,不过在程序中必须可靠地处理输入输出参数的数目。如果将上面的MEX文件命名为timestwo.c,就可以对它进行编译和链接,在MATLAB命令窗口下输入:    mex timestwo.c   这是产生MEX文件timestwo.***所必需的步骤,该文件的扩展名所运行的系统平台的类型。Windows系统下,扩展名为dll。此时,就可以象调用M函数一样调用timestwo了。   在MATLAB命令窗口中输入:     x=2;     y=timestwo(x);   就可以得到:     y=4;    四、小 结   MEX文件虽然具有较强大的功能,但并不是对所有的应用都恰当。MATLAB是一个高效率的编程系统,特别适合于工程计算、系统仿真等应用。它的最大优点就是将人们从繁杂的程序中解放出来。因此,能够用M文件完成的程序,应尽量使用MATLAB编写,除非遇到必须使用MEX文件的情况。   MATLAB的应用编程接口是一个功能强大的系统,除了调用C或Fortran程序,还可以实现从MATLAB环境中输入输出数据、在MATLAB中和其他程序建立客户/服务器关系等功能。
个人分类: MATLAB|2594 次阅读|0 个评论
[转载]Pro/ENGINEER的二次开发(3)-Toolkit核心
rxl 2012-2-23 16:39
3.1 应用程序开发基本过程 除了编辑源程序外,应用程序的开发还应该经历编译、注册等基本过程。 用Pro/TOOLKIT开发的程序一般包括资源和程序两个部分。资源包括注册文件和菜单资源文件。注册文件用于在Pro/ENGINEER启动时动态加载Pro/TOOLKIT程序。菜单资源存储了用户定制的Pro/ENGINEER菜单信息,每个菜单项对应Pro/TOOLKIT程序中的一个功能函数。 3.1.1确定运行模式 Pro/TOOLKIT应用程序有两种工作模式。在前面已经介绍了Pro/TOOLKIT的两种工作模式(异步模式和同步模式)的工作方式,以及它们之间的优缺点等。最后,确定在本课题中采用同步模式的MFC DLL模式来开发应用程序。 3.1.2 设计菜单 程序运行模式确定(从而也确定了VC开发时的项目类型)后,就可以进行程序框架设计。对Pro/TOOLKIT应用程序来说,所谓程序框架设计,时指根据功能要求设计菜单,然后给每个菜单设计动作函数。 例如,一个零件模型建模系统,其功能要求通过定义零件主驱动参数、零件内部关系式来完成零件建模,定义主驱动参数和关系式集之后,要保存这些信息以及模型,供以后使用。这就要求能把主驱动参数、关系式、模型的存放位置加入到数据库中,要使数据库记录这些信息,就需要一个提交模型的菜单。 功能分析完后,就可以设计出菜单。 3.1.3 编写信息文本 菜单设计完后就应该编写菜单的信息资源文本。 信息资源文件用于提供菜单的标签文本(包括其他语言版本的标签)和帮助信息,如过要向Pro/ENGINEER中添加菜单,就必学使用信息资源文本,否则所添加的菜单不会在Pro/ENGINEER菜单栏显示。信息资源文本有固定的格式, 第一行是引文版本下显示的菜单文本标签,第二行是在其他语言下显示的菜单文本标签。第三、第四航都写成“#”号,是系统为将来的功能扩展预留空间。 菜单栏菜单只有菜单标签,没有帮助信息,所以只有一条信息。而一般的菜单项,都含有一行的帮助信息。如右所示的“用户登陆界面”就是对“用户登陆”的解释。 3.1.4 新建项目和设置开发环境 程序开发的第一步是根据运行模式确定的项目类型新建一个项目,然后设置开发环境。 使用VC开发环境来开发程序对初学者来说常常遇到的问题是VC开发环境的设置。为什么要设置?VC开发环境的设置适用于指定Pro/TOOLKIT函数库的目录位置,以便VC开发环境可以在程序的编译连接过程中,找到相应的二次开发函数所在的函数库。 3.1.5 定义初始化函数和结束函数 完成项目的创建和开发环境的设置后,就开始定义初始化函数和结束函数。 初始化函数和终止函数是每个同步模式程序都必须添加的。初始化函数主要用来设置需要添加的菜单,以及其他一些初始值设置,这个函数相当C++类的构造函数或者C语言中的main()函数。终止函数是处理程序结束时需要处理的工作,如释放程序中动态分配给全局变量的内存,这个函数相当于C++中析构函数。 初始化函数和终止函数的形式如下: extern "C" int user_initialize(int argc ,char* argv ) { return 0; } extern "C" void user_terninate(void) { } 到时候只要在其中添加相应的操作就可。 3.1.6 编写源代码 在项目设置以及初始化函数和终止函数添加完毕后,就可以使用VC提供的所有类和函数来开发程序。在编写程序的过程中如果要使用Pro/TOOLKIT函数,添加相应的头文件即可调用。 3.1.7 编写注册文件 在程序编写好后就可以编写注册文件了。注册文件也可以在编写程序之前就写好。推荐先写好注册文件,以便在Pro/ENGINEER系统中调试。 (1)注册文本格式 同步模式的程序必须先把注册文件注册到Pro/ENGINEER的辅助程序中才能在Pro/ENGINEER系统中运行,程序存放的位置、资源信息文件存放的位置、程序启动的类型(是DLL模式还是多进程模式)、程序何时启动(是打开Pro/ENGINEER的时候自动运行还是手工方式)、是否可以手工停止程序(如果不能手工停止运行,那么程序的状态不会出现在注册窗口中)等。 注册文件的文件名必须是以.dat作为扩展名。 (2)自动注册 除可以手工的方式在辅助程序中注册Pro/TOOLKIT程序,Pro/TOOLKIT还支持自动注册,也就是Pro/ENGINEER启动的时候就自动把程序注册到辅助应用程序中。要让Pro/ENGINEER能自动注册程序,需要遵循两个条件。 首先是注册文件的名称。注册文件的文件名使用protk.dat或者prodv.dat。一个文件里面可以记录多条注册记录。 其次是文件的存放位置。Pro/ENGINEER启动的时候会自动查找一些目录,判断是否有文件protk.dat或prodv.dat,如果有则进行注册。这些木主要是以下几个: l Pro/ENGINEER的启动目录; l Pro/ENGINEER配置文件中,指定以“PROTKDAT”、“PRODEVDAT”或者“TOOLKIT_REGISTRY_FILE”变量所存储的位置; l $LOADDIR/$MACHINE_TYPE/text/LANGUAGE目录; l $LOADDIR/text目录 一般在开发阶段入股哦要自动注册可以把文件放到启动目录下,当程序最终完成之后,可以放在后三个目录中任意一个目录下。 3.1.8编译程序并运行 编译连接Pro/TOOLKIT函数库和VC类库,最终生成解决方案。 3.2应用程序的结构 由于DLL模式是将Pro/TOOLKIT应用程序集成到Pro/ENGINEER中的标准方 法。一般开发应用程序都选择这种方法。所以我们这里着重介绍的是DLL模式下的应用程序的结构。 3.2.1应用程序包含的头文件 所有的DLL模式下的Pro/TOOLKIT应用程序第一个包含的头文件是 ProToolkit.h,而且该文件必须为第一个包含头文件,因为它定义了宽字符串wchar_t的值,而在其它头文件中都需要引用该值。由于在ProToolkit.h头文件中还包括了stdio.h,string.h,stddef.h,stdlib.h四个标准库文件,这几个库文件包含了最常用的C函数的定义。故没有必要在文件中包含这些库文件。当你在应用程序中使用了某个Pro/TOOLKIT函数,都必须把含有该函数原型的库文件包含进来,否则在编译的时候,编译器将不能检查函数的参数类型。我们不必显式包含ProObjects.h头文件,因为在含有函数原型的头文件中均间接包含了这个头文件。如果在应用程序中使用了Pro/DEVELOP的函数,则必须加入头文件Prodevelop.h。 3.2.2 Pro/TOOLKIT的核心 user_initialize()和user_terninate()这两个函数是所有的Pro/TOOLKIT应用程序都必须含有的,这两个函数由用户自己编写,但是要由Pro/ENGINEER在启动和终止应用程序时调用它们。user_initialize()函数用来初始化一个同步模式的应用程序,任何同步模式的应用程序都必须有该函数才能为Pro/ENGINEER所调用,在Pro/ENGINEER启动、图形界面产生后系统就会自动调用user_initialize(),所以用户应该在user_initialize()函数中对Pro/TOOLKIT应用程序进行初始化,包括对Pro/ENGINEER原有菜单的修改(如增加新按钮)。当user_initialize()函数调用时它提供了许多参数,当Pro/ENGINEER激活时,这些参数提供了命令行参数信息,版本号和进程序列号。user_initialize()函数的所有输入和输出参数都是可选的,可根据需要选用。初始化函数必须返回0以说明Pro/TOOLKIT函数初始化成功。其它返回值则视为失败,系统会提示用户Pro/TOOLKIT应用程序失败。使用user_initialize()的可选参数以指明失败信息。 原文地址: http://www.hzynh.cn/html/proengineer-second-develop-3-toolkit.html
2534 次阅读|0 个评论
[转载]连接池
willzhang198 2012-2-19 00:22
数据库连接是一种关键的有限的昂贵的资源,数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素: 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费。 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。   连接池是为每一个唯一的连接字符串所创建的。它采用一种算法,根据与连接字符串的准确匹配对连接池中的连接进行关联。这个匹配包含大小写、名称/值对的顺序,甚至是名称/值对之间的空格。动态生成的连接字符串必须相同、以便使用连接池。如果使用了委托,每个委托用户都将有一个连接池。如果使用了事务,将为每个事务环境创建一个连接池。连接对象被创建并添加到连接池中,以满足指定的最小连接池大小。当应用程序请求一个连接并且连接池已经达到最大数量时,这个连接请求会排队。这个请求可以通过重新分配一个释放回连接池的连接(当它们关闭或撤销时)来得到满足。连接池管理器从连接池中移除过期的连接以及服务器已经完成了服务的连接。当一个 Connection 对象不再需要时,应该尽快关闭,是它可以被添加或返回到连接池。未显示关闭的Connection 对象可能无法添加或返回到连接池。   参与事务的连接是从连接池提取的,并且根据与请求线程的事务环境以及连接字符串的准确匹配进行分配。每个连接池为没有事务环境的连接划分一个子区,并且为与特定事务环境相关联的连接划分0~n个分区。当一个与一个特定事务环境相关联的线程请求一个连接时,就会从这个事务中所登记的适当连接池中自动返回一个连接。当一个连接连接被关闭时,它根据事务环境被返回到连接池中的适当分区。这就允许一个连接即使在一个分布式事务尚未提交时仍然能够被关闭,而不会产生错误,这个事务可以在以后被提交或关闭。   我们可以使用连接字符串、编辑注册表或在程序中使用相应 API 控制 SQL Server、OLE DB、Oracle、ODBC 数据提供程序的连接池。 (1)SQL Server   SQL Server 的连接字符串形如:   Data Source=(local);Integrated Security=SSPI;Initial Catalog=MyTest;Connection Timeout=15;Connection Lifetime=0;Min Pool Size=0;Max Pool Size=100;Pooling=true;   相应的属性如下: Connection Lifetime:表示一个连接在创建之后多少秒被销毁,默认为0,表示具有最长的存活时间。 Connection Reset:指定了当一个连接从连接池中移除时是否重置这个连接,默认值为 true。 Enlist:指定了当事务环境存在时是否把这个连接在创建线程的当前事务环境中自动登记,默认值为 true。 Load Balance Timeout:一个连接从连接池中移除之前可以保持多少秒。 Min Pool Size:连接池中维护的最少连接数,默认0。 Max Pool Size:连接池中允许的最大连接数,默认100。 Pooling:指定这个连接是从连接池中获取还是根据需要创建并添加到连接池,默认值为 true。  (2)Oracle   连接池的相应的属性如下: Connection Lifetime:表示一个连接在创建之后多少秒被销毁,默认为0,表示具有最长的存活时间。 Enlist:指定了当事务环境存在时是否把这个连接在创建线程的当前事务环境中自动登记,默认值为 true。 Min Pool Size:连接池中维护的最少连接数,默认0。 Max Pool Size:连接池中允许的最大连接数,默认100。 Pooling:指定这个连接是从连接池中获取还是根据需要创建并添加到连接池,默认值为 true。  (3)OLE DB   OLE DB 资源连接池配置是使用注册表控制的,不存在对这些项进行设置的界面,必须直接修改注册表。     相关的注册表项由Provider's CLSID标识的。有些 Microsoft OLE DB 提供程序的 CLSID 值是:   (a)SQLOLEDB(SQL Server)     HKEY_CLASSES_ROOT\CLSID\{0C7FF16C-38E3-11d0-97AB-00C04FC2AD98}      (b)Microsoft.Jet.OLEDB.4.0(Jet)     HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}   (c)MSDAORA(Oracle)     HKEY_CLASSES_ROOT\CLSID\{e8cc4cbe-fdff-11d0-b865-00a0c9081c1d}   (d)MSDASQL(OLE DB Provider for ODBC)     HKEY_CLASSES_ROOT\CLSID\{c8b522cb-5cf3-11ce-ade5-00aa0044773d}   会话池超时时间是一个未使用的会话在连接池中超时并关闭之前所维持的秒数,配置选项是:HKEY_CLASSES_ROOT\CLSID\Provider's CLSID\SPTimeout,这是个 DWORD 值,若在注册表中未指定,它的默认值是60。   下面的注册项对所有提供程序通用:     HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DataAccess\Session Pooling\RetryWait   当连接失败时,服务组件试图再次连接服务器之前所等待的时间,这是个 DWORD 值,若在注册表中未指定,它的默认值是64。     HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DataAccess\Session Pooling\ExpBackOff   决定了当连接失败时,服务组件的重新连接尝试之前将等待的时间,这是个 DWORD 值,若在注册表中未指定,它的默认值是2。     HKEY_CLASSES_ROOT\CLSID\{2206CDB0-19C1-11D1-89E0-00C04FD7A829}   这个 DWORD 值,指定了一个连接池以秒为带我的最长生命周期,默认值是600。   为一个提供程序所启用的默认 OLE DB 服务是由注册表 HKEY_CLASSES_ROOT\CLSID\Provider's CLSID\OLE_DBSERVICES 指定的,我们也可以在连接字符串中为 OLE DB Services 属性指定一个值,以重写默认的 OLE DB 提供程序服务,以下是相应的 DWORD 值:   OLE_DBSERVICES值   对应的 OLE DB Services 属性值     描述         0xffffffff         -1                 所有服务(默认) 0xfffffffe         -2                 除了连接池之外的所有服务 0xfffffffc         -4                 除了连接池和自动事务登记之外的所有服务 0xfffffffb         -5                 除了客户游标引擎之外的所有服务 0xfffffff8         -8                 除了连接池、自动事务登记和客户游标引擎之外的所有服务 0x00000003        3                 只包含连接池和自动事务登记、会话层的聚合 0x00000000        0                 无服务 missing value                         无聚合,所有服务都被禁用 (4)ODBC   下面两个注册表设置用于控制 ODBC 连接池:   Wait Retry     当服务器不响应时连接池的阻塞时间(秒)。这个设置影响所有使用 ODBC 驱动程序的应用程序。这个注册表指定了一个 REG_SZ 值:     HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Driver_Name\CPTimeout   CPTimeout     未使用的连接在连接池中保留的时间(秒)。这个设置影响所有使用 ODBC 驱动程序的应用程序。这个注册表指定了一个 REG_SZ 值:     HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Connection Pooling
个人分类: 电脑技术|2671 次阅读|0 个评论
[转载]ASP内建对象Application 和 Session和cookie的用法
willzhang198 2012-2-15 14:31
一 让我们先来看看 Application 对象。在同一虚拟目录及其子目录下的所有 .asp 文件构成了 ASP 应用程序。 我们非但可以使用 Application 对象,在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久的保存数据。 而且,Application 对象还有控制访问应用层数据的方法和可用于在应用程序启动和停止时触发过程的事件。    下面就让我们一起来学习 Application 对象。    一、属性    虽然 Application 对象没有内置的属性,但我们可以使用以下句法设置用户定义的属性也可称为集合。    Application(" 属性 / 集合名称 ")= 值    我们可以使用如下脚本声明并建立 Application 对象的属性。 % Application("MyVar") = "Hello" Set Application("MyObj") = Server.CreateObject("MyComponent") %    一旦我们分配了 Application 对象的属性,它就会持久地存在,直到关闭 WEB 服务器服务使得 Application 停止。由于存储在 Application 对象中的数值可以被应用程序的所有用户读取,所以 Application 对象的属性特别适合在应用程序的用户之间传递信息。    二、方法    Application 对象有两个方法,它们都是用于处理多个用户对存储在 Application 中的数据进行写入的问题    1、Lock 方法禁止其他客户修改 Application 对象的属性。    Lock 方法阻止其他客户修改存储在 Application 对象中的变量,以确保在同一时刻仅有一个客户可修改和存取 Application 变量。如果用户没有明确调用 Unlock 方法,则服务器将在 .asp 文件结束或超时后即解除对 Application 对象的锁定。    让我们来看看下面这段用 Application 来记录页面访问次数的程序 : % Dim NumVisitsNumVisits=0 Application.Lock A pplication("NumVisits") = Application("NumVisits") + 1 Application.Unlock % 欢迎光临本网页,你是本页的第 %= Application("NumVisits") % 位访客 !    将以上脚本保存在你的 .asp 文件中,就轻而易举地给你的页面添加了一个计数器。    2、和 Lock 方法相反,Unlock 方法允许其他客户修改 Application 对象的属性。    在上面的例子中,上述例子中,Unlock 方法解除对象的锁定,使得下一个客户端能够增加 NumVisits 的值。    三、事件    1、Application_OnStart    Application_OnStart 事件在首次创建新的会话 ( 即 Session_OnStart 事件 ) 之前发生。当 WEB 服务器启动并允许对应用程序所包含的文件进行请求时就触发 Application_OnStart 事件。Application_OnStart 事件的处理过程必须写在 Global.asa 文件之中。    Application_OnStart 事件的语法如下 : SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server Sub Application_OnStart. . . End Sub /SCRIPT    2、Application_OnEnd    Application_OnEnd 事件在应用程序退出时于 Session_OnEnd 事件之后发生,Application_OnEnd 事件的处理过程也必须写在 Global.asa 文件之中。    下面让我们来看看在使用 Application 对象时必须注意的一些事项。    不能在 Application 对象中存储 ASP 内建对象。例如,下面的每一行都返回一个错误。 % Set Application("var1")=Session Set Application("var2")=Request Set Application("var3")=Response Set Application("var4")=Server Set Application("var5")=Application Set Application("var6")=ObjectContext %    若您将一个数组存储在 Application 对象中,请不要直接更改存储在数组中的元素。例如,下列的脚本无法运行。 % Application("StoredArray")(3) = "new value" %    这是因为 Application 对象是作为集合被实现的。数组元素 StoredArray(3) 未获得新的赋值。而此值将包含在 Application 对象集合中,并将覆盖此位置以前存储的任何信息。建议您在将数组存储在 Application 对象中时,在检索或改变数组中的对象前获取数组的一个副本。在对数组操作时,您应再将数组全部存储在 Application 对象中,这样您所做的任何改动将被存储下来。下列的脚本对此进行演示。 ---asp8a.asp--- % dim MyArray() Redim MyArray(5) MyArray(0)="hello" MyArray(1)="some other string" Application.Lock Application("StoredArray")=MyArray Application.Unlock Response.Redirect "asp8b.asp" % ---asp8b.asp--- % LocalArray=Application("StoredArray") LocalArray(1)=" there" Response.Write LocalArray(0)LocalArray(1) Application.Lock Application("StoredArray")=LocalArray Application.Unlock %    二 SESSION对象 与 Application 对象具有相近作用的另一个非常实用的 ASP 内建对象就是 Session。 我们可以使用 Session 对象存储特定的用户会话所需的信息。 当用户在应用程序的页之间跳转时,存储在 Session 对象中的变量不会清除, 而用户在应用程序中访问页面时,这些变量始终存在。 当用户请求来自应用程序的 Web 页时,如果该用户还没有会话, 则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话 通过向客户程序发送唯一的 Cookie 可以管理服务器上的 Session 对象 。当用户第一次请求 ASP 应用程序中的某个页面时,ASP 要检查 HTTP 头信息, 查看是否有在报文中有名为 ASPSESSIONID 的 Cookie 发送过来,如果有,则服务器会启动新的会话, 并为该会话生成一个全局唯一的值,在把这个值作为新 ASPSESSIONID Cookie 的值发送给客户端, 正是使用这种 Cookie,可以访问存储在服务器上的属于客户程序的信息。 Session 对象最常见的作用就是存储用户的首选项。 例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。 另外其还经常被用在鉴别客户身份的程序中。要注意的是,会话状态仅在支持 cookie 的浏览器中保留,如果客户关闭了 Cookie 选项,Session 也就不能发挥作用了。    一、属性    1、SessionID    SessionID 属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识。会话标识以长整形数据类型返回。在很多情况下 SessionID 可以用于 WEB 页面注册统计。    2、TimeOut    Timeout 属性以分钟为单位为该应用程序的 Session 对象指定超时时限。如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。    二、方法    Session 对象仅有一个方法,就是 Abandon,Abandon 方法删除所有存储在 Session 对象中的对象并释放这些对象的源。如果您未明确地调用 Abandon 方法,一旦会话超时,服务器将删除这些对象。当服务器处理完当前页时,下面示例将释放会话状态。    % Session.Abandon %    三、事件    Session 对象有两个事件可用于在 Session 对象启动和释放是运行过程。    1、Session_OnStart 事件在服务器创建新会话时发生。服务器在执行请求的页之前先处理该脚本。Session_OnStart 事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。    尽管在 Session_OnStart 事件包含 Redirect 或 End 方法调用的情况下 Session 对象仍会保持,然而服务器将停止处理 Global.asa 文件并触发 Session_OnStart 事件的文件中的脚本。    为了确保用户在打开某个特定的 Web 页时始终启动一个会话,就可以在 Session_OnStart 事件中调用 Redirect 方法。当用户进入应用程序时,服务器将为用户创建一个会话并处理 Session_OnStart 事件脚本。您可以将脚本包含在该事件中以便检查用户打开的页是不是启动页,如果不是,就指示用户调用 Response.Redirect 方法启动网页。程序如下 : SCRIPT RUNAT=Server Language=VBScript Sub Session_OnStart startPage = "/MyApp/StartHere.asp" currentPage = Request.ServerVariables("SCRIPT_NAME") if strcomp(currentPage,startPage,1) then Response.Redirect(startPage) end if End Sub /SCRIPT    上述程序只能在支持 cookie 的浏览器中运行。因为不支持 cookie 的浏览器不能返回 SessionID cookie,所以,每当用户请求 Web 页时,服务器都会创建一个新会话。这样,对于每个请求服务器都将处理 Session_OnStart 脚本并将用户重定向到启动页中。    2、Session_OnEnd 事件在会话被放弃或超时发生。    关于使用 Session 对象需要注意的事项 Application 对象相近,请参照前文。    会话可以通过以下三种方式启动 :    1、一个新用户请求访问一个 URL,该 URL 标识了某个应用程序中的 .asp 文件,并且该应用程序的 Global.asa 文件包含 Session_OnStart 过程。    2、用户在 Session 对象中存储了一个值。    3、用户请求了一个应用程序的 .asp 文件,并且该应用程序的Global.asa 文件使用 OBJECT 标签创建带有会话作用域的对象的实例。   如果用户在指定时间内没有请求或刷新应用程序中的任何页,会话将自动结束。这段时间的默认值是 20 分钟。可以通过在 Internet 服务管理器中设置“应用程序选项”属性页中的“会话超时”属性改变应用程序的默认超时限制设置。应依据您的 Web 应用程序的要求和服务器的内存空间来设置此值。例如,如果您希望浏览您的 Web 应用程序的用户在每一页仅停留几分钟,就应该缩短会话的默认超时值。过长的会话超时值将导致打开的会话过多而耗尽您的服务器的内存资源。对于一个特定的会话,如果您想设置一个小于默认超时值的超时值,可以设置 Session 对象的 Timeout 属性。例如,下面这段脚本将超时值设置为 5 分钟。    % Session.Timeout = 5 %    当然你也可以设置一个大于默认设置的超时值,Session.Timeout 属性决定超时值。你还可以通过 Session 对象的 Abandon 方法显式结束一个会话。例如,在表格中提供一个“退出”按钮,将按钮的 ACTION 参数设置为包含下列命令的 .asp 文件的 URL。    % Session.Abandon % 实例一 在login.asp页面中记录session %dim action action=saferequest("action") if action="in" then user=trim(replace(request.Form("User"),"'","")) key=trim(replace(request.Form("key"),"'","")) if user="" or key="" then response.Write "script language=javascriptalert(""请输入用户名和密码!"");location.href='adm_login.asp'/script" response.end end if set rs=server.createobject("adodb.recordset") rs.open "select * from where name='"user"'",conn,1,1 if rs.eof then response.write "script language=javascriptalert(""该用户不存在!"");location.href='adm_login.asp'/script" response.end end if if rs("pass")key then response.write "script language=javascriptalert(""密码错误!"");location.href='adm_login.asp'/script" response.end end if session("adm_username")=trim(rs("name")) session("adm_oskey")=trim(rs("oskey")) if rs("name")="admin" then session("adm_oskey")="管理员" end if rs.close set rs=nothing response.redirect "adm_enroll.asp" end if% 在其他页面种判断session '判断session if session("adm_username")="" or session("adm_oskey")="" then response.Redirect "adm_login.asp" response.end end if dim city,total '管理员权限 if session("adm_oskey")"管理员" then response.write "script language=javascriptalert(""您没有操作权限!"");history.back();/script" response.end end if 三 COOKIE对象 简单的说也是用来存储访问者信息的 利用cooklie能做什么?   有2种使用cookie的基本方式:   1、将cookie写入访问者的计算机(使用 RESPONSE 命令)   2、从访问者的计算机中取回cookie(使用 REQUEST 命令)   创建cookie的基本语法    Response.Cookies("CookieName")=value   执行下面的代码将会在访问者的计算机中创建一个cookie,名字=VisitorName,值=Ken Response.Cookies("VisitorName")="Ken"   执行下面的代码将会在访问者的计算机中创建一个cookie,名字=VisitorName,值=表单中UserName的值 Response.Cookies("VisitorName")=Request.Form("UserName")    读取cookie的基本语法    Request.Cookies("CookieName")   可以将Request值当作一个变量看待,执行下面的代码,将取回名字为KensCookie的cookie值,并存入变量MyVar: MyVar=Request.Cookies("KensCookie")   执行下面的代码,将判断名字为KensCookie的cookie值是否为“Yes”: If Request.Cookies("KensCookie")="Yes" then...    功能丰富的cookie   你可以扩展上面的代码成为Cookie子关键值(CookieSubName),代码如下: Response.Cookies("VisitorName")("FirstName")="Ken" Response.Cookies("VisitorName")("LastName")="Baumbach"    讲解例子前,最后讨论2个概念:命令约定和使用到期时间。    命名约定   同其他变量的命名一样,合适地、独特地命名cookie,有利于在程序中前后连贯地使用它。你可以使用下面的1个或者2个 cookie属性进行cookie变量的命名:    域属性(Domain): 域属性表明cookie由哪个网站产生或者读取,默认情况下,cookie的域属性设置为产生它的网站,但你 也可以根据需要改变它。相关代码如下:Response.Cookies("CookieName").Domain = "www.mydomain.com"    路径属性(Path): 路径属性可以实现更多的安全要求,通过设置网站上精确的路径,就能限制cookie的使用范围。例如: Response.Cookies("CookieName").Path = "/maindir/subdir/path"    使用到期时间   通常情况下,当浏览器关闭时,一个cookie就不存在了。但是在许多时候,比如下面将要讨论的web站点例子,我们希望能更长时间地在访问者的计算机上保存cookie。很幸运,有这样的实现方法。下面的代码,就可以设置cookie的使用到期时间为2010年1月1日: Response.Cookies("CookieName").Expires=#January 01, 2010#   执行下面的代码,将设定cookie的过期时间为“cookie的创建时间+365日”: Response.Cookies("CookieName")=Date+365
个人分类: 电脑技术|1673 次阅读|0 个评论
[转载]QT应用程序开发
热度 1 huozhenhua 2012-2-14 16:21
现 在越来越多的华人开始用 Linux 了.也越来越多的华人开始写我门自己的 Linux 下面的应用程序了. 开发我门自己的程序,中文当然是一个必不可少的东西了. 这里就来说说 Linux 下面的中文程序的开发. 小弟才疏学浅,只是因为看到网络上面这方面的文章不是很多很全面.所以动手写了这些东西.如果有错误,还望大家多多包含,多多指正. QT QT 现在被越来越多的人所喜爱.也有了越来越多的人选择 QT 作为开发Xwindow 下面 GUI 环境的语言. 在 Linux 中,绚丽的 KDE 桌面环境就是用 QT 开发出来的. 现在来看看如何在 QT 下面处理中文. 本文中全部在 QT 3 的环境下运作.如果您用的是比较旧的 QT 版本, 请注意: Tips: 如果您的 Linux 系统中找不到 findtr3 那么请尝试找 findtr2 或者 findtr Tips: 如果您的 Linux 系统中找不到 msg2qm2 那么请尝试找 msg2qm Tips: 可以用 which findtr3 或者 whereis msg2qm2 来寻找您的系统 Tips: 如果您希望在自己的计算机中编译本文中的范例, 您需要安装 g++, qt, qt-devel, make 这些 套件. 下面我们来看一个简单的 QT 程序: 代码: /* chinese.h */ #include #include #include #include class Chinese: public QWidget { Q_OBJECT public: Chinese(); private: QLabel *label; QLineEdit *input; private slots: void display(); }; 这里我们简单的定义了一个基于 QWidget 的 class, 命名为 Chinese 然后我们定义了一个 Label *label 和一个 LineEdit input 并且定义一个 代码: void slot display() /* chinese.cpp */ #include "chinese.moc" #include Chinese::Chinese() { resize(200,100); label=new QLabel( "Input Line:", this); label-setGeometry(10,10,90,30); input=new QLineEdit(this); input-setGeometry(10, 40, 180, 30); input-setFocus(); connect(input, SIGNAL(returnPressed()), this, SLOT(display())); } void Chinese::display() { QCString string; string=input-text(); cout } 在 .cpp 文件中. Chinese::Chinese() 中,我们只做了四件最简单的事情 1. 显示一个叫做 Input Line: 的 label 在 10,10 这个位置上. 大小为 90 30. 然后显示一个可以用来输入的 LineEdit 在 10, 40, 大小为 180, 30. 然后告诉程序,当程序打开的时侯,将 focus 用 setFocus() 放在 input ( QLineEdit )上面.也就是说,程序一打开,我们打 keyboard 就可以直接输入到 input 这个 QLineEdit 中. 然后我们告诉程序,当在 input 中接收到 Enter 键的时侯,去呼叫 display() 这个 slot Chinese::display() 中.我们有三个动作. 1. 定义一个 QCString 用作 QT 与 C++ 之间的沟通. string=input-text() 把我们输入在 input 中的 string 抓下来,放到 string 中.然后用 cout 把 string 显示在您的 X 终端模拟中. (rxvt, qterm, xter Konsole 之类的程序) 代码: /* main.cpp */ #include #include "chinese.h" main (int argc, char **argv) { QApplication a(argc, argv); Chinese w; a.setMainWidget (w); w.show(); return a.exec(); } 这个就不多说了.是 chinese 的 main 程序.用来显示 chinese 的. 然后建立一个如下的 Makefile: 代码: INCL= -I$(QTDIR)/include -I/usr/include/kde CFLAGS= -pipe -O2 -fno-strength-reduce LFLAGS= -L$(QTDIR)/lib -L$(KDEDIR)/lib -L/usr/X11R6/lib LIBS= -lkdecore -lkdeui -lqt -lX11 -lXext -ldl CC=g++ MOC=moc chinese: chinese.moc chinese.o main.o $(CC) $(LFLAGS) -o chinese chinese.o main.o $(LIBS) chinese.moc: chinese.h $(MOC) chinese.h -o chinese.moc main.o: main.cpp chinese.o: chinese.cpp clean: rm -f *.o rm -f *.bak rm -f *.moc rm -f chinese .SUFFIXES: .cpp .h .cpp.o: $(CC) -c $(CFLAGS) $(INCL) -o $@ $ 通 过 make 指令.我们就可以 build 出一个可执行的文件 chinese 执行 ./chinese 可以看到我们的小程序. 我们在程序中那个可以输入的地方,随便打些东西进去(请输入英文)然后按 enter 键. 我们就会看到我们在程序中输入的那些东西会被显示在我们的 X 终端模拟中. 但是目前这个程序既不能显示中文,同样的也不能接受中文输入. 不相信的话,您可以尝试在那个输入文字的地方打入随便几个中文. 例如 "中文测试" 然后按 Enter 键.您会发现 X 终端模拟中显示的只有 "??" 之类的东西. 原因后面会讲到. 首先,我们第一部需要的是让我门的程序显示中文.相信大家一定都知道, QT 中已经帮我们做好了 i18n 了.只要去用就好. 首先我们需要在 chinese.h 的文件中加入: #include qtranslator.h 是给 QTranslator 用的 include 文件. 然后在 chinese.cpp 中 Chinese::Chinese 需要改成下面的样子: 代码: Chinese::Chinese() { resize(200,100); QTranslator translator(this); translator.load("chinese", "."); qApp-installTranslator(translator); label=new QLabel(tr( "Input Line:"), this); label-setGeometry(10,10,90,30); input=new QLineEdit(this); input-setGeometry(10, 40, 180, 30); input-setFocus(); connect(input, SIGNAL(returnPressed()), this, SLOT(display())); } 首 先,我们定义了 QTranslator translator 在 this. 然后 translator.load 去载入 chinese.qm 这个文件.这里 .qm 这个全名称我们是不需要的. QT default 就会去找 .qm 了. 所以虽然我们的中文对应的翻译文件全名是 chinese.qm ,但是我们这里只需要打入 chinese 就好了. qApp-installlTranslator(translator)就会帮我们把翻译成中文的信息, 加载我们的程序中. 同 时, label=new QLabel("Input Line:", this) 要改成下面这样 label=new QLabel(tr( "Input Line:"), this) 这里的 tr 是代表信息需要翻译 (translator)的意思. tr 也是给 findtr 来寻找哪里需要信息翻译的一个标志 (flag) 现在用 make 重新编译我们的程序. 编译完后,我们还需要做出 qm 文件来给 QTranslator 用. 首先,我们需要用到 findtr3 这个程序. findtr3 会帮我们找出程序中所有用到 tr 的地方.同时帮我们自动产生 po 文件. findtr3 chinese.cpp chinese.po 现在用您最喜爱的文字编辑器(vim, emacs, joe or other)打开 chinese.po 这个文件,我们会看到: 代码: # This is a Qt message file in .po format. Each msgid starts with # a scope. This scope should *NOT* be translated - eg # from French to English, "Foo::Bar" would be translated to "Pub", # not "Foo::Pub". msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "POT-Creation-Date: 2002-06-22 20时09分00秒 EDT\n" "PO-Revision-Date: YYYY-MM-DD\n" "Last-Translator: FULLNAME \n" "Content-Type: text/plain; charset=iso-8859-1\n" #: chinese.cpp:15 msgid "Chinese::Input Line:" msgstr "" 这 里 findtr3 帮我们找到,在 chinese.cpp 这个程序中的第 11 行,有一处用到 tr 的地方. 而 tr 后面的内容是 Input Line: 还记得我们的 label 是怎么写的吗? label=new QLabel(tr( "Input Line:"), this); 没错, 这里找到的就是 "Input Line:" 这几个字. 下面我们开始翻译 po 文件了 我们真正需要动到的只有两个地方,就是: "Content-Type: text/plain; charset=iso-8859-1\n" 和下面的 msgstr "" 就足够了. 代码: #: chinese.cpp:15 msgid "Chinese::Input Line:" msgstr "" 首先我们需要设定我们是用哪种于言编码来翻译 po 的.同时 qt 也会用这种语言编码来显示我们所翻译的信息.所以我们需要改成: 代码: "Content-Type: text/plain; charset=big5\n" 或者: 代码: "Content-Type: text/plain; charset=gb2312\n" 其中 big5 是繁体中文所以用的编码, gb2312 (GBK) 则是简体中文所使用的. 接下来,我就需要更改 msgstr 了: msgid "Chinese::Input Line:" msgstr "请输入中文:" Tips: 注意,如果您是用 gb2312 简体来输入的那么 您需要在 charset 中选择 gb2312. 同样的, big5 繁体输入,就需要选择 charset=big5 您不能用同一种编码的输入法,同时去写两 个 po 文件. 也就是说,不能用 xcin 的繁 体输入,同时去翻译 gb2312 的 po. 也不 能用 chinput 的简体输入来翻译 big5 的 po. 如果您需要同时翻译繁体,简体的 po 那么建议您用您所熟习的语言环境翻译好 一份出来,然后用 big5=gb 的转码工具 转出另外一个编码的po文件来.同时记得更 改所转出来的文件中的 charset 当然,如果您愿意,也可以把 "PO-Revision-Date: YYYY-MM-DD\n" "Last-Translator: FULLNAME \n" 加入适当的信息 PO-Revision-Date: 加入您翻译的信息 Last-Translator: 加入您的个人信息以及 e-mail "PO-Revision-Date: 2002-06-22\n" "Last-Translator: Goldencat \n" 然后存盘,退出.先在我们还需要最后一步,就是把 chinese.po 文件转成 chinese.qm 的格式给程序来读.这时侯我们就用到了一只叫做 msg2qm2 的程序. msg2qm2 chinese.po chinese.qm 现在我们就算是完成了. 执行我们的文件 ./chinese 看看,那个 "Input Line:" 已经变成中文的 "请输入中文:" 了. 下一步,我们来解决在 QT 中输入中文,然后把中文显示出来的问题. Tips: QT 中的中文输入也很重要.写一个程序,不光是 表面上看起来信息都变成中文的,就叫做中文化 了.举一个最简单的例子:现在有一个中文的 MySql 数据库.我们的 QT 程序需要正确的输入 查询中文的数据.这就需要 QT 可以正确无误的 接受并且处理我们的中文输入才可以. 在 QT 中,我们有一个 QTextCodec 可以用. QTextCodec 就是专门来为我们处理不同编码的. 为了使用 QTextCodec 我们首先需要在 chinese.cpp 中,把 qtextcodec.h 给 include 进来. include 现在来看看我们的 void Chinese::display() 吧. 代码: void Chinese::display() { QString string; string=input-text(); QTextCodec *codec=QTextCodec::codecForName("big5"); QCString chinese_string=codec-fromUnicode(string); cout } 这 里我们看到,同样的, 把 input 中我们输入的 string 扔给 string. 下面就用到了 QTextCodec 了.我们可以把 QTextCodec *codec=QTextCodec::codecForName("big5"); 写成两行,这样比较方便看: 代码: QTextCodec *codec; codec=QTextCodec::codecForName("big5"); 第一行是通过 QTextCodec 建立 codec 第二行呢,告诉 QT 我们的 codec 是用 big5 编码的. (简体中文就要用 gb2312) 最 后,我们通过 codec-formUnicode(string) 把 Unicode 转换成我们需要用的 big5 码. ( QT default 全部是用 Unicode,这也就是为什么开始的时侯,如果我们没有通过 QTextCodec 转码,看到的中文都是 ?? 了.因为 Unicode 的标准就是不认得的 code 一律用 ?? 来表示)最后我们定义一个 QCString chinese_string, 代码: QCString chinese_string=codec-fromUnicode(string); 而 chinese_string就是已经被 codec 转码过的 big5 code 的了. codec-fromUnicode(string) 这里是做转码的动作. 现在重新 make 所 build 出来的 chinese 就已经具备了最基本的中文程序的要求了.现在在输入中文到程序中,您就可以在 X 终端模拟中看到中文了. 那么这个程序已经具备了中文处理能力,为什么还被叫做最基本的呢中文处理呢?因为我们的程序目前并不会判断 locale, 而自动设定相应的编码.现在我们把这个 chinese 的程序作成一个相对完整的中文程序. QTextCodec 中还给我们提供了一个读取当然于言环境的 function 叫做 locale. QTextCodec::locale() 就会返回当前使用者的 locale. 现在让我们来看看一个相对完整的中文程序: Tips: 这个程序中对 locale 名称的定义 是按照 RedHat 7.3 中对中文 locale 的定义为标准的,也就是说: 繁体中文 : zh_TW.Big5 简体中文 : zh_CN.GB2312 代码: /* chinese.h */ #include #include #include #include #include class Chinese: public QWidget { Q_OBJECT public: Chinese(); private: QLabel *label; QLineEdit *input; QString locale; private slots: void display(); }; 我们这里加入了一个新的 QString locale, 用来做 locale 的判断. 代码: /* chinese.cpp */ #include "chinese.moc" #include #include Chinese::Chinese() { resize(200,100); QTranslator translator(this); locale=QTextCodec::locale(); translator.load("chinese."+locale, "."); qApp-installTranslator(translator); label=new QLabel(tr( "Input Line:"), this); label-setGeometry(10,10,90,30); input=new QLineEdit(this); input-setGeometry(10, 40, 180, 30); input-setFocus(); connect(input, SIGNAL(returnPressed()), this, SLOT(display())); } void Chinese::display() { QString string; string=input-text(); QTextCodec *codec; if (locale == "zh_TW.Big5") codec=QTextCodec::codecForName("big5"); if (locale == "zh_CN.GB2312") codec=QTextCodec::codecForName("gb2312"); QCString encoded_string=codec-fromUnicode(string); cout } 在 chinese.cpp 里面, Chinese::Chinese 我们加入 locale 的判断. 从而自动加载相应的 .qm 文件. locale=QTextCodec::locale() 就把 QTextCodec 返回的值,也就是当前使用的 locale 传给了 locale. (locale 是一个 QString)然后我们用 translator.load("chinese."+locale, "."); 实际上就是说 chinese.+当然 locale (zh_TW.Big5 或者 zh_CN.GB2312)也就是说,最后我们加载的 locale 是 chinese.zh_TW.Big5 或者是 chinese.zh_CN.GB2312. 这样只要对应不同的 locale 环境翻译不同的 .po 然后制作成基于 locale 名称的 qm, QT 就可以帮我们自动判断在哪个locale 要加载那个文件了. (chinese.zh_TW.Big5.qm 或者 chinese.zh_CN.GB2312.qm) Tips: QT 在载入 .qm 文件的时侯,如果该文件不存在.那么 就会用程序中的语言来显示.所以不需要为了程序是否 可以找到该 .qm 文件而担心.(不用去写 这方面的 error handle) 而 在 void Chinese::display() 中,我们也做一个自动的判断,用来判断使用者是在哪个中文环境中输入中文的. 如果是 zh_TW.Big5 我们就把转码设定为 big5, 如果是 GB2312 就设定为 gb2312. 而如果是其它的,就忽略不管了. 同时在修改一下我们的 Makefile 代码: INCL= -I$(QTDIR)/include -I/usr/include/kde CFLAGS= -pipe -O2 -fno-strength-reduce LFLAGS= -L$(QTDIR)/lib -L$(KDEDIR)/lib -L/usr/X11R6/lib LIBS= -lkdecore -lkdeui -lqt -lX11 -lXext -ldl CC=g++ MOC=moc chinese: chinese.moc chinese.o main.o $(CC) $(LFLAGS) -o chinese chinese.o main.o $(LIBS) chinese.moc: chinese.h $(MOC) chinese.h -o chinese.moc main.o: main.cpp chinese.o: chinese.cpp po: findtr3 chinese.cpp chinese.zh_TW.Big5.po findtr3 chinese.cpp chinese.zh_CN.GB2312.po qm: msg2qm2 chinese.zh_TW.Big5.po chinese.zh_TW.Big5.qm msg2qm2 chinese.zh_CN.GB2312.po chinese.zh_CN.GB2312.qm clean: rm -f *.o rm -f *.bak rm -f *.moc rm -f chinese .SUFFIXES: .cpp .h .cpp.o: $(CC) -c $(CFLAGS) $(INCL) -o $@ $ 在 Makefile 中加入 po 和 qm. 这样我们用 make po 就会产生 chinese.zh_TW.Big5.po 和 chinese.zh_CN.GB2312.po 了.把这两个 po 翻译好以后.用 make qm 就会做出 chinese.zh_TW.Big5.qm 和 chinese.zh_CN.GB2312.qm 这两个 qm 文件.现在试试看.在简体或者繁体的 X 终端模拟环境下.我们的程序会自动的显示相应的翻译信息.也会自动接受相应 locale 下面的中文输入法了. GTK+ 在 Linux 下面,还有一个常用的 GUI 环境开发语言.就是GTK+ 了. 大家都知道, gnome 这套桌面环境就是由 GTK+ 开发出来的. 现在我们来看看 GTK+ 如何处理中文. Tips: 这里我们以 GTK 1.x 为例. (因为 GTK 2.x 目前 还不算是非常的稳定) Tips: 如果您希望在自己的计算机中编译本文中的范例, 您需要安装 gcc, gtk+, gtk+-devel, make , gettext, 这些套件. 首先我们先来用 GTK 写一个跟前面 QT 中的那个程序功能完全一样的程序. 代码: /* chinese.c */ #include #include void display (GtkWidget *widget, GtkWidget * entry) { const gchar *entry_text; entry_text=gtk_entry_get_text( GTK_ENTRY (entry)); printf ("%s\n", entry_text); } void destroy(GtkWidget *widget, gpointer *data) { gtk_main_quit(); } int main(int argc, char *argv ) { GtkWidget *window; GtkWidget *vbox; GtkWidget *entry; GtkWidget *label; gtk_set_locale(); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); gtk_init(argc, argv); window=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(destroy),NULL); gtk_container_border_width(GTK_CONTAINER(window),10); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_show(vbox); label= gtk_label_new(_("Input Line")); gtk_box_pack_start(GTK_BOX (vbox), label, TRUE, TRUE, 0); gtk_widget_show(label); entry= gtk_entry_new(); gtk_signal_connect(GTK_OBJECT(entry), "activate", GTK_SIGNAL_FUNC(display), entry); gtk_box_pack_start(GTK_BOX (vbox), entry, TRUE, TRUE, 0); gtk_widget_show(entry); gtk_widget_show(window); gtk_main(); return 0; } 首 先我们需要 locale.h 和 libintl.h 然后还要定义 PACKAGE, LOCALEDIR 这里的 PACKAGE 就是我们翻译后的 mo 文件的名称. 这里把它定义为 chinese 因为我们的程序就叫做 chinese, GTK+ 会在固定的地方寻找 mo 文件.在 RedHat 7.3 中,会在 /usr/share/locale/你的locale/LC_MESSAGES 下面寻找 mo 文件. 对于中文来说,也就是 /usr/share/locale/ 下面的 zh_TW zh_TW.Big5 zh_CN zh_CN.GB2312 这几个目录中的 LC_MESSAGES 下面.去寻找 mo 文件. 这里我们去定义 LOCALEDIR 就是告诉 gtk+ 我们希望 gtk+ 到哪里去寻找 mo 文件. /home/goldencat/program/gtk/chinese/final 就是 chinese.c 的位置.也就是我们的当前工作目录.这样 gtk+ 就不会再去 /usr/share/locale/ 下面找相应语言环境中的 LC_MESSAGES 中寻找 mo 文件了. 而是在您 LOCALEDIR 中定义的位置.(配合 bindtextdomain 使用) 而 后面的 #define _(STRING) gettext(STRING) 只是说把 gettext(STRING)换成 _(STRING) gettext 就好像前面 QT 中的那个 tr 一样.在产生 po 文件的时侯,就是根据 gettext 来决定哪些信息是需要翻译的.只不过每个需要翻译的信息都把 ("English String") 改成 (gettext("English String")) 未免有些麻烦.所以 GTK+ 中,大家都把 gettext(STRING) 换成 _(STRING), 这样我们就只需要 (_("English String") 就可以了. Tips: 如果您在您的计算机中编译这些东西,请记得把 #define LOCALEDIR "/home/goldencat/program/gtk/chinese/final" 改换成您自己的工作目录 在 gtk_init() 之前,我们需要告诉 gtk 我们有翻译的信息.所以要有下面三个动作: gtk_set_locale(); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); get_set_locale() 告诉 gtk 去找我们现在用的 locale (QT 中的 TextCodec::locale())这样 gtk+ 就会自动判断出当前 locale 的环境,然后去相应的环境下面找 mo 文件. bindtextdomain() 则是告诉 gtk 去哪里找 mo 文件. 这里我们要它去我们定义的 LOCALEDIR 下面找 PACKAGE (chinese) textdomain() 就是载入翻译的信息啦. 最后就是把 label= gtk_label_new("Input Line"); 改成 label= gtk_label_new(_("Input Line")); 这样 xgettext 就可以找到需要翻译的信息了. 现在我们就算是完成了程序这边对中文化的支持了. gtk+ 需要用 xgettext 来产生 po 文件的.所以我们用: xgettext -k_ chinese.c -o chinese.po 这里的 -k_ 就是说 keywork 是 _ ,也就是说 xgettext 会去找程序中的 _(STRING) 出来. 现在打开 chinese.po 看看: 代码: # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2002-06-23 17:44-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: chinese.c:38 msgid "Input Line" msgstr "" 跟翻译 QT 的 po 一样,我们真正需要动到的只有 charset 和 msgstr " " 而已.当然,您也可以加入相应的翻译信息, PO-Revision-Date: 翻译时间 "Last-Translator: 翻译人 翻译人_E-Mail地址 Language-Team: 翻译团队 翻译团队_E-Mail_地址 下面是翻译好的 po 代码: # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2002-06-23 17:44-0400\n" "PO-Revision-Date: 2002-06-23 14:45-0400\n" "Last-Translator: Goldencat l; ruili@worldnet.att.net \n" "Language-Team: LANGUAGE l; ruili@worldnet.att.net \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=Big5\n" "Content-Transfer-Encoding: 8bit\n" #: chinese.c:38 msgid "Input Line" msgstr "中文输入" 存档以后.我们用: msgfmt -o chinese.mo chinese.po 生成 mo 文件. 跟 QT 不同的是, GTK+ 不是通过判断 mo 名子来载入不同的的 mo 的. 在 GTK+ 下面.任何 locale (语言环境)的 mo 名子都叫做 chinese.mo 那么 GTK+ 是如何分辨不同的 locale 需要加载相对语言的 mo 呢? GTK+ 是通过把不同的 mo 放在不同的目录下,然后通过判断目录名称来找到相应的 mo 文件的. 所以存放 GTK+ mo 文件的目录名,需要跟相应的 locale 一致. GTK+ 就会在这个目录下的 LC_MESSAGES 中找到所需要的 mo 文件了. 所以我们首先需要在当前目录下做出相应的存放 mo 文件的目录. $mkdir zh_TW $mkdir zh_TW/LC_MESSAGES $cp -r zh_TW zh_TW.Big5 $cp -r zh_TW zh_CN $cp -r zh_TW zh_CN.GB2312 这样我们就有了中文所需要的四个最基本的目录了. 现在我们把 chinese.mo 放到相应的目录下面 $cp chinese.mo zh_TW/LC_MESSAGES $cp chinese.mo zh_TW.Big5/LC_MESSAGES 然后在做一份 GB2312 的 mo 放在 zh_CN 和 zh_CN.GB2312 实 际上,在 RedHat7.3 中, export LANG=zh_TW.Big5 情况下(LC_MESSAGES=zh_TW.Big5)GTK+ 会在 zh_TW/LC_MESSAGES 下面寻找 mo 文件. 而 export LANG=zh_CN.GB2312 的情况下(LC_MESSAGES=zh_CN.GB2312)GTK+ 则是在 zh_CN.GB2312/ LC_MESSAGES 下面寻找 mo 文件. 现在试试在不同的 locale 运行一下 ./chinese 您会看到, 程序已经被中文化了.那个 Input Line 已经换成中文的 "中文输入" 了. 最后,我们再来改一下我们的 Makefile, 帮助我们产生 po, mo 并且放到相应的语言目录下. 代码: INCL= -I/usr/lib/glib/include/ -I/usr/include/gtk-1.2/gdk/ -I/usr/include/gtk-1.2/ \ -I/usr/include/glib-1.2/ LIBS= -L/usr/X11R6/lib LFLAGS= -lglib -lgdk -lgtk -lX11 -lXext -lm CC=gcc chinese: chinese.c $(CC) $(INCL) -o chinese chinese.c $(LIBS) $(LFLAGS) clean: rm -f chinese rm -f *.bak po: xgettext -k_ chinese.c -o chinese_big5.po xgettext -k_ chinese.c -o chinese_gb2312.po mo: msgfmt -o chinese_big5.mo chinese_big5.po msgfmt -o chinese_gb2312.mo chinese_gb2312.po mo_install: cp chinese_big5.mo zh_TW/LC_MESSAGES cp chinese_big5.mo zh_TW.Big5/LC_MESSAGES cp chinese_gb2312.mo zh_CN/LC_MESSAGES cp chinese_gb2312.mo zh_CN.GB2312/LC_MESSAGES .SUFFIXES: .c .c.o: $(CC) -c $(CFLAGS) $(INCL) -o $@ $ C/C++ 其是在 C/C++ 的一般程序中,也是可以中文化的. 在 C/C++ 程序中.中文化的步骤跟 GTK+ 己乎是一样的. 这里简单介绍一下: 代码: /* chinese.c */ #include main () { printf(_("This is a test.\n")); } 现在我们来中文化这只程序: 首先我们需要 libintl.h 和 locale.h 再就是 #define PACKAGE "chinese" #define _(STRING) gettext(STRING) 然后用 setlocale() 和 textdomain() 来完成中文化 代码: #include #include #include #define _(STRING) gettext(STRING) #define PACKAGE "chinese" main () { setlocale(LC_MESSAGES, ""); textdomain(PACKAGE); printf(_("This is English.\n")); } 然后跟 GTK+ 中的制作 mo 的方法一样.用 xgettext 制作出 po 文件. 翻译好以后,用 msgfmt 制作成 mo 文件. 把这个 mo 文件 copy 到 /usr/locale/你的_locale/LC_MESSAGES下面. textdoamin 会去那里找 mo 文件.现在再重新跑您的程序. "This is English" 就变成您改的中文了. l转自~~~http://www.linuxdiyf.com/viewarticle.php?id=54650
个人分类: C/C++|2983 次阅读|2 个评论
[转载]如何全面优化ASP应用程序的性能
willzhang198 2012-2-13 21:13
ASP 本身并不是一种脚本语言,它只是提供了一种使镶嵌在 HTML 页面中的脚本程序得以运行的环境,而在ASP中最常用的脚本语言就是VBScript了。虽然ASP的脚本语言很简单,但是要想让一个ASP程序能够最优化的运行也不是一件简单的事情。   现在国内的网络带宽很有限,网络十分拥挤,如何使得自己的ASP应用程序能够快速的运行就成为了每一个ASP程序员的梦想了。那就跟随我来一同加速你的ASP程序吧! 一. 有关操作数据库的优化方法   我们使用ASP最主要的用途就是对数据库进行操作了,如何更快速的完成这些动作呢? 1. 不要任意使用“SELECT  *  ......”   请尽量拾取你所需要的那些字段,比如,一个Table中有10个字段,但是你只会用到其中的一个字段(name),就要使用“select name from yourtable”,而不是用“select * from yourtable”。你或许会说,我是这么做的阿,但是,如果一个table中有50个字段,你需要用到其中的23个字段的时候,你会怎么做呢?为了节省打字以及查找对应字段名称的麻烦,你就不一定会老老实实的用“select name,sex,age... from yourtable”了吧!   实际证明,尽量拾取你所需要的那些字段来使用select语句将会是你的ASP程序至少加快5%左右。 2. 尽可能使用系统存储过程(针对MS SQL Server)   有的时候完成一个读取操作,使用SQL语句和存储过程同样可以完成,但是使用存储过程将会大大加快完成读取操作的速度,也就提高了你的ASP程序运行的速度。 3. 注意你的游标使用方法   如果你仅仅是对一个table进行读取操作,那么请你使用forward-only,read-only游标,因为这种游标读取数据库是最为快速的,尤其是你的读取数据量很大的情况下。 4. 不要打开无用的独立记录集   也许你在笑了,我会打开没有用的记录集吗?是的,你当然会,比如在生成一个树型记录集的时候,你不得不打开父记录集以及对应的子记录集,甚至还有孙记录集,其实你可以使用ADO提供的Data Shaping技术来替代打开多个独立的记录集,那样会加快程序的运行速度。(关于Data Shaping的用法可以参考ADO帮助) 5. 一定要记着关闭打开的记录集对象以及连接(Connection)对象   有些朋友总是奇怪为何自己的ASP程序刚开始的时候运行速度很快,可是多运行几遍就越来越慢了呢?甚至出现服务器死机的情况。发生这种情况,就很可能是你打开了太多的记录集对象以及连接(Connection)对象而最后却没有关闭他们引起的。使用如下方法进行关闭: YourRecordSet.close Set YourRecordSet=Nothing Set YourConnection=Nothing 6. 取得数据库数据的方法比较   你是如何得到记录集的数据的呢?是不是用YourRecordSet(字段编号),还是YourRecordSet("字段名称")?其实还有其他的使用方法,现在我们就比较一下吧(100条记录): Rs("字段名称") Rs("字段名").Value Rs("字段编号") Set方法 数据库回应时间 2.967秒 2.936秒 1.650秒 0.586秒 2.824秒 2.914秒 1.611秒 0.602秒 2.893秒 2.943秒 1.613秒 0.594秒 平均回应时间 2.895秒 2.931秒 1.625秒 0.594秒   这下知道了吧,前三种方法大家都可以看的明白,我就说说第四种方法(Set方法)如何使用: Dim strSQL StrSQL="select name,sex,age from yourtable" Dim rs Set rs=server.createobject("ADODB.RECORDSET") Rs.open strSQL,conn,1,1 Const fieldsOrder=2 Dim objOrder Set objOrder=rs(fieldsOrder) Response.write objOrder  'Set方法 二. 有关ASP内置对象使用方面的优化方法 1. 尽量减少Session对象和Application对象的使用   虽然ASP中提供的这两个对象对我们的编程提供了很大的帮助,但是,对这两个对象要合理的使用,不要滥用。因为大量的使用这两个对象将会极大的增大服务器的负担,严重消耗系统资源。也将使你的ASP程序运行慢如老牛。 2. 要及时的关闭不再使用的对象(尤其是Session和Application)   不及时的关闭你所使用的对象会导致系统运行速度变得缓慢。也许你会问,Session和 Application不是可以自动消失的吗?完全正确,系统默认30分钟内用户如果没有任何操作就自动触发Session_OnEnd和 Application_OnEnd事件,但是大量的用户频繁的读取服务器,服务器将在很长的一段时间保持那些已经没有用的 Session,Application对象,如果不及时关闭使用完的Session和Application后果将不堪想象了。 关闭的方法是:    Set 对象=Nothing 三. 合理使用Include文件   我们这里说的是指用!--#include file="xxx"--形式包含进来的文件,并且文件内容全是ASP程序,也就是说你将一些公共的函数放到一个文件中,并在其他有可能调用其中函数的页面包含进来。 建议你不要将所有的函数放到一个包含文件中,因为你在其他页面包含这个文件的时候,服务器端是要进行预编译的,很可能在一个包含文件里面有上百个函数,而你只是想要使用其中的一个函数,这样就得不偿失了。所以,尽可能的分割你的包含文件成为多个小的包含文件。这样也可以提高程序的运行速度哦。 四. 有关VBScript语言方面的优化方法 1.尽量使用系统函数代替自己编写的函数    比如要想分割一个有规律的字符串("sss,ddd,fff,ggg"),就不必自己使用什么Mid(),Instr等等函数来分析了,其实VBScript就提供了一个函数 Split(),这样既省时间,又提高了速度,何乐而不为呢? 2.减少动态数组的使用 3.尽可能的养成提前声明变量的习惯    不要小看了这一条,提前声明变量会加快程序的解释执行时间。相反,从不声明变量,不但程序难以阅读,整个程序在服务器的执行效率也会大打折扣的。 五. 其他方面的优化方法 1. 在ASP文件中尽量使用%%嵌入到HTML标签中,而不要使用Response.write的方式,比如: html body %If ok =1 then %   Hello! World! %End If% /body /html 就远远比: % Response.write "html" Response.write " body"             If ok =1 then   Response.write "Hello! World!"             End If Response.write " /body" Response.write "/html" % 的运行速度要快,尤其是你的ASP文件比较大的情况下。因为,第二种方式增加了服务器端的解释时间,因而也就降低了ASP程序的性能。 2. 尽量用一个ASP文件完成一个动作   很多人喜欢在一个ASP程序中同时完成诸如添加,删除,查找等等多个动作,不要认为这样是有效的利用了文件,相反,这样做的结果是使得应用程序的运行速度减慢很多。 应当将添加,删除,查找等分割成单个的独立的ASP文件来完成。这样使得文件不会过于庞大,降低服务器端解释执行的负担,并且阅读程序也很快捷。   好了,经过我们的全面优化,你的ASP应用程序是不是运行的更加稳定,更加快速了呢?
个人分类: 电脑技术|1397 次阅读|0 个评论
[转载]2011最糟密码榜出炉
jiangyongshuai 2012-1-15 23:18
网络世界,黑客攻击此起彼伏。美国密码管理应用程序提供商“飞溅数据”(SplashData)公布2011年度最糟密码榜单,“密码”英文password排名第一。   “最糟”意味着最易被黑客破解。上榜的25个密码大多有规律可循,多为键盘上的临近键组合或常见名称。    “password”列榜首   数列123456和12345678分列榜单第二、第三位;由键盘上位置相邻的字母组成的qwerty排名第四,qazwsx排名第23位。   由于一些网站要求密码同时包含数字和字母,abc123成为榜单上糟糕度排名第五的密码。   受password一词“拖累”,用户即便把其中的字母o换成数字0,这一组合依然排在榜单第18位。   常见数列111111、1234567、654321、123123、及一些常用名字,如ashley、michael等均榜上有名。   “飞溅数据”称,他们通过分析黑客张贴在网上的数百万个被盗用户名和密码,得出这份榜单。公司首席执行官摩根·斯莱恩因此敦促设置了名单在列密码的个人和机构立即更改密码。    建议定期变换密码   斯莱恩说,黑客只是通过反复尝试普遍性的密码便可轻松掌握多个账户,尽管曾多次强调密码设置的重要性,但仍有不少人会选择那些易于猜测、安全性较低的密码。   美国网络安全专家西蒙·埃尔森针对密码设置提供了一些建议,比如定期更换密码;在设置密码时应选择不同类型的字符,包括数字、字母和特殊字符等;选择8位或更长的密码;独立短词应用空格或下划线;不要在多个网站使用相同密码和用户名组合;使用网上密码管理程序监管不同账户;不要把所有密码保存在一处,等等。   英国《每日邮报》援引埃尔森的话报道:“每个人都可能犯的最大错误就是所有账户用相同密码,那使你更易遭到黑客攻击。”    12位密码较为适当   密码长固然安全性提高,但是变得不易记住。综合考虑安全、方便等因素,多长的密码最合适?美国佐治亚理工学院去年8月一项研究显示,12位密码较为适当。   研究人员假设一名熟练黑客利用计算机每秒能够生成1万亿个密码组合。在这种情况下,黑客需耗费180年破解一个11位密码。但如果用户使用12位密码,以目前技术水平,黑客得耗费17134年才能破解。   研究人员还说,密码必须越来越长,因为电脑和显卡的运转速度越来越快,黑客破解密码水平亦随之提高。 最糟密码榜单    25个密码依次为   password,   123456,   12345678,   qwerty,   abc123,   monkey,   1234567,   letmein,   trustno1,   dragon,   baseball,   111111,   iloveyou,   master,   sunshine,   ashley,   bailey,   passw0rd,   shadow,   123123,   654321,   superman,   qazwsx,   michael,   football
个人分类: 随笔|1019 次阅读|0 个评论
[转载]给IIS6加速,用好应用程序缓冲池!
willzhang198 2011-12-11 13:06
实验证明,在给网站配备了应用程序缓冲池之后,网站的访问效率提高的几倍甚至十几倍。IIS 6.0最大的改进之一就是应用程序缓冲池允许隔离。IIS 5.0中,所有WEB应用程序只允许共用一个缓冲池。由于将web应用程序隔离在独立的单元将会导致严重的性能下降,因此没有实现应用程序隔离。 通常一个web应用程序的失败会影响同一服务器上其他应用程序。然而,IIS 6.0在处理请求时,通过将应用程序隔离成一个个叫做应用程序池的孤立单元这种设计上的改变,成倍的提高了性能。每个应用程序池中通常由一个或多个工作进程。这样就允许确定错误的位置,防止一个工作进程影响其他工作进程。这种机制也提高了服务器以及其上应用的可靠性。 这样的结构明显很不合理,造成了权限的混乱。而在IIS 6.0中,也许是微软汲取了非典期间的智慧,把各个缓冲池进行了隔离。可以设定多个缓冲池,定义它们的名字。指定在网站,目录,甚至虚拟目录中的WEB程序到任何一个缓冲池。 首先要选择到底采用IIS 5.0还是采用IIS 6.0的隔离措施。出于对旧版本的兼容性,IIS 6.0允许仍然采用IIS 5.0的方式。但两种方式不能同时启用。 点击“开始”→“设置”→“控制面板”→“管理工具”→“IIS管理器”,右键单击网站,点击“属性”→“服务”,把“以IIS 5.0的隔离模式运行WWW服务”复选框前的钩去掉。 单击“应用程序池”,右键单击右边空白处,点击“新建”→“应用程序池”,给新建的应用程序池设置一个名字,点击确定即可。这里所谓的依照某一模板新建,是指新建的应用程序池的属性配置与之前建好的某应用程序池。点击“网站”前的加号,展开当前目录下的所有网站,右键单击目标网站,点击“属性”→“主目录”→“应用程序池”,选定刚刚建好的缓冲池。重复这些步骤,便可为不同的网站设立不同的应用程序缓冲池。这些缓冲池是隔离开的,提高了服务器的稳定性和安全性。 1.右击适当的应用程序池,然后单击“属性”。出现应用程序池的属性对话框。 单击“回收”选项卡,然后设置适当的应用程序池设置。“内存回收”是等效于 memoryLimit ASP.NET 进程模型设置的应用程序池设置。它指定辅助进程可以使用的最大内存量。如果辅助进程超出了这一数量,将创建新的进程来替换它,并且当前所有请求都被重新分配给该新进程。 2.右击适当的应用程序池,然后单击“属性”。出现应用程序池的属性对话框。 单击“性能”选项卡,然后设置适当的应用程序池设置。“空闲超时”是指定辅助进程或应用程序池在开始处于不活动状态后,过多长时间将其关闭。 默认情况“空闲超时”是启用的而且设置为 20 分钟。通过更改数值调节框中的值,可以指定一个不同的时间限制。“请求队列限制”指定在异常终止后等待辅助进程启动时在 ASP.NET ISAPI 中排队的请求的最大数目。默认情况下“请求队列限制”是启用的而且设置为 1000 个请求。通过更改数值调节框中的值,可以对排队的请求的数目指定不同的限制。 3.右击适当的应用程序池,然后单击“属性”。出现应用程序池的属性对话框。 单击“健全”选项卡,然后设置适当的应用程序池设置。“启用 ping”是指定 ASP.NET ISAPI 检查辅助进程是否存在的时间间隔。如果没有辅助进程,则重新启动辅助进程。默认情况下“启用 ping”是启用的而且设置为 30 秒。 通过更改数值调节框中的值,可以指定一个不同的时间间隔。“关闭时间限制”是指定提供给辅助进程的用来正常关闭的时间长度。如果辅助进程在指定的时间长度内没有关闭,则 ASP.NET ISAPI 将结束该辅助进程。默认情况下“关闭时间限制”设置为 90 秒。通过更改数值调节框中的值,可以指定一个不同的时间限制。
个人分类: 电脑技术|2479 次阅读|0 个评论
[转载]此贴教你如何自动修改.exe文件shortcuts图标
ChenboBlog 2011-12-9 14:03
原文地址: http://www.ilovematlab.cn/viewthread.php?tid=30739sid=O3KTuQ 我也是最近要生成一个matlab的 应用 程序 ,但是发现matlab自身生成的图标很难看,如图1,而且matlab做的应用程序并没有打包 安装 等过程,所以对于应用程序的发布不是一个很好的选择。所以我利用了installshield professional此处是基于Standard Edition。由于要打包源 代码 ,所以也就可以顺便修改生成应用程序快捷方式图标。 简要步骤如下: 1、生成一个installshield的工程,具体方法有很多种,可参考 http://www.yesky.com/124/1893124_1.shtml 。 2、在Resources-Shell Objects-Desktop-ATS或Start Menu-Programs-ATS-ATS(注:ATS为自己创立的 文件 夹及快捷方式)。单击快捷方式ATS,见图2 在属性修改区双击可出现快捷方式属性(shortcuts properties)对话框,选中“Setting”页面,在Icon旁编辑框内 输入 快捷图标完整路径如:G:\matlabwork\LongNanHospital exe \exe2\Icon_1.ico,在对应用程序发布安装时就可自动生成对应快捷图标的快捷方式,见图3。 完毕 附件 exe.JPG (2.84 KB) 2009-4-20 14:56 图1 exe1.JPG (96.52 KB) 2009-4-20 14:56 图2 3.JPG (2.02 KB) 2009-4-20 17:06 图3
3995 次阅读|0 个评论
[转载]Matlab GUI封装-如何将gui生成exe
ChenboBlog 2011-11-7 16:04
如何将gui生成exe 方法一: 已有gui.m文件和gui.fig文件 1 在matlab的command窗口中输入 mcc -B sgl GUI.m 2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器 此时仍需matlab所必需的动态连接库。 3. 将 matlab path /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上 4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录, 其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共 有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。 而toolbox目录则必须与应用程序同一目录。 方法二: matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab也提供了这样的工具。 1. 转化为c/c++程序并编译为.exe 先验证mcc是否可用,用matlab中的example验证即可 建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装) 由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure 编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等 程序发布需要.exe、bin\、.fig 2. 在未装matlab的电脑上运行程序需要数学 运行时库、图像运行时库以及用到的工具箱mex文件 前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径 另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同 3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布 以下通过注册表自动添加path路径 %-------------------------------------------------------------------------------------- Screen.Next(); -- 进入下一个屏幕 resultDialog = Dialog.Message("注意", "向环境变量中加入matlab数学库及图象库的安装路径?", MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1); if (resultDialog == IDYES) then --加入安装路径 strPath = Registry.Get(HKEY_CURRENT_USER, "Environment", "path", true); if strPath ~= "" then strPath = String.Concat(strPath, ";"); end strPathToAdd = SessionVar.Expand("%AppFolder%"); strPathToAdd = String.Concat(strPathToAdd,"//MATLAB6p5//bin//win32"); -- 如果路径中无该位置,则加入 if String.Find(strPath,strPathToAdd) == -1 then strPath = String.Concat(strPath, strPathToAdd); Registry.Set(HKEY_CURRENT_USER, "Environment", "path", strPath, REG_SZ); end end %-------------------------------------------------------------------------------------- 方法三: 在网上搜了一个方法,还没有用过, 贴在这里仅供参考: 一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗--- 首先,使用mcc编译得到.exe文件,具体参数见帮助文件; 其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件 第三,在MATLAB环境,执行命令 mcc -m -B sgl file.m 或者 mcc -p -B sglcpp file.m 请键入help mcc看帮助。 mcc是在“command windows” 用的吗? 只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗. 还有“添加环境变量path”是path到.exe文件的环境中是吧? 二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的comtest.cbl工程文件打开,再点component--package component就实现了打包,此时到comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的_install.bat就可以实现安装 三、 如何将gui生成exe ? 已有gui.m文件和gui.fig文件 1 在matlab的command窗口中输入 mcc -B sgl GUI.m 2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器 此时仍需matlab所必需的动态连接库。 3. 将 matlab path /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上 4. 在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。 5.大功告成。
18286 次阅读|0 个评论
[转载]vc++小技巧
Sunteresa 2011-11-3 15:55
窗口篇 让窗口一启动就最大化 把应用程序类(CxxxApp)的 InitInstance() 函数中的 m_pMainWnd-ShowWindow(SW_SHOW); 改为 m_pMainWnd-ShowWindow(SW_SHOWMAXIMIZED); 则窗口一启动就最大化显示。 如何设置窗口的初始尺寸 在将应用程序类(CxxAPP)的 InitInstance() 函数中加入: m_pMainWnd-SetWindowPos(NULL,x,y,Width,Height,SWP_NOMOVE); Width为窗口宽度,Height为窗口高度 SWP_NOMOVE表示忽略位置(x,y)。 如: BOOLCDzyApp::InitInstance() { AfxEnableControlContainer(); …… //Theoneandonlywindowhasbeeninitialized,soshowandupdateit. m_pMainWnd-SetWindowPos(NULL,0,0,750,555,SWP_NOMOVE);//设置窗口的初始大小为750*555 m_pMainWnd-ShowWindow(SW_SHOW); m_pMainWnd-UpdateWindow(); returnTRUE; } 让窗口居中显示 以下两种方法可任选其一: ①在应用程序类(CxxxApp)的 InitInstance() 函数中加入: m_pMainWnd-CenterWindow( GetDesktopWindow() ); ②在主框架类(MainFrm.cpp)的OnCreate()函数中加入: CenterWindow( GetDesktopWindow() ); 如: intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct) { if(CFrameWnd::OnCreate(lpCreateStruct)==-1) return-1; …… //TODO:Deletethesethreelinesifyoudon'twantthetoolbarto //bedockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(m_wndToolBar); CenterWindow(GetDesktopWindow());//使窗口打开时处于屏幕正中 return0; } 如何修改窗口标题 窗口标题一般形式为: 文档标题 - 程序标题 1、设置文档标题: 在文档类(CxxxDoc)的OnNewDocument()函数中加入语句:SetTitle("文档名"); 如:TextEditorDoc.cpp: BOOLCTextEditorDoc::OnNewDocument() { if(!CDocument::OnNewDocument()) returnFALSE; //TODO:addreinitializationcodehere //(SDIdocumentswillreusethisdocument) SetTitle("未命名.txt");//设置文档标题 returnTRUE; } 2、设置程序标题: 在框架类(CMainFrame)的PreCreateWindow()函数中加入语句:m_strTitle = _T("程序标题"); 如:MainFrm.cpp: BOOLCMainFrame::PreCreateWindow(CREATESTRUCTcs) { if(!CFrameWnd::PreCreateWindow(cs)) returnFALSE; //TODO:ModifytheWindowclassorstylesherebymodifying //theCREATESTRUCTcs m_strTitle=_T("文本整理器");//设置程序标题 returnTRUE; } 以上两点比较适用于视图-文档结构的程序,在新建文档时,系统会自动运行OnNewDocument()函数,在其中可以设置合适的标题。对于未采用文档的程序可以用下面的方法修改标题: 3、修改窗口标题: 修改窗口标题一般在打开文件函数OnFileOpen()和另存为函数OnFileSaveAs()中进行,可以使用下面的函数: AfxGetMainWnd()-SetWindowText("文档标题"+" - "+"程序标题"); 其中文档标题和程序标题可使用定义过的串变量。 项目篇 如何干净的删除一个类? 1、先删除项目中对应的.h和.cpp文件,(选中后用Delete键删除) 2、保存后退出项目,到文件夹中删除实际的.h和.cpp文件; 3、删除.clw文件; 4、重新进入项目,进行全部重建(rebuild all)。 如何建立一个新类? 从“插入”(Insert)菜单中选择“新建类”(New Class),在弹出的对话框中选择基类(Base class),在Name中输入新类的名字(一般都以C开头)即可。 如果想要建立一个没有基类的自定义类,则在New Class对话框中把Class type设置为generic,再输入类名即可。 如何把外来文件添加到项目中? 先把外来文件复制到当前项目的目录下,从“项目”(Project)菜单下选择“添加项目”(Add to Project)下的“Files”菜单项,从弹出的打开文件对话框中把外来文件打开即可。 如何在一个工作区中打开多个项目? 一般编程者都有这样的经历:做了一个项目,由于不满意,想从头重做,但又想把旧项目的一些可用内容拷到新项目中来,以免做重复工作,这时就需要在新项目中打开旧项目。 先打开新项目,从“项目”(Project)菜单下选择“插入项目到工作区”(Insert Project into Workspace),从弹出的打开文件对话框中打开旧项目的.asp文件即可。 之后,可以利用“项目”(Project)菜单下的“设置活动项目”(Select Active Project)的选项中切换各打开的项目。 注意:在一个工作区中打开的各项目不能同名。 如何把项目中的文件分类存放? 当我们往项目中添加新类时,它会把源文件放在Source Files下,头文件放在Header Files下。当项目中文件很多时,管理不便,最好添加新节点,把文件分类放置。 右击项目节点树的根节点,选择“New Folder...”,在弹出的对话框中填入新节点名,则新节点就建立了,用鼠标节点树中的文件拖入新节点,就可以把文件分类了。 以上分类只是在项目的节点树中分类,它不影响文件在磁盘上的位置,所有.cpp文件和.h文件仍在项目的根目录下,最好文件本身也能分类存放在不同文件夹中。 在Windows下,用“新建文件夹”在项目的根目录下建立子文件夹,如DialogClass,把所有对话框类的.cpp文件和.h文件拖入其中。 回到VC下,右键单击项目树中更改了路径的节点,选择“Properties”,在弹出的对话框中修改文件路径,如:把原路径“.\Dialog1.cpp”改为“.\DialogClass\Dialog1.cpp”。 打开Dialog1.cpp文件,修改它包含的文件路径。如: #include "stdafx.h" #include "PluckBox.h" #include "Dialog1.h" 改为: #include "stdafx.h" #include "..\\PluckBox.h" #include "Dialog1.h" 打开ClassWizard,它会提示你文件不存在,单击“确定”后,从对话框中用“Browse...”选择文件所在路径,则ClassWizard也可正常使用了。 编辑篇 编辑代码时,跟随提示消失了怎么办? 单击“工具”(Tools)菜单中的“设置”(Options)菜单项,在弹出的Options对话框中选择Editor制表页,把它最下方的四个复选框都选中(Auto list member、Auto type info、Code comments、Auto parameter info),这样,当用户输入“-”或“.”时,会自动显示跟随提示,减少了输入负担。 对话框篇 如何修改对话框的背景色 在对话框的OnPaint()函数中加入下面语句: CRect rect; GetClientRect(rect);//计算对话框的尺寸 dc.FillSolidRect(rect,RGB(192,248,202));//绘制对话框背景色 如何让弹出式对话框具有统一的背景色 在应用程序类CxxxApp的InitInstance()函数中加入下面的语句: SetDialogBkColor( RGB(192,248,202) ); 则所有用户定义的弹出式对话框都以RGB(192,248,202)为背景色,就不需要逐个进行设置了。 如何让打开文件对话框能进行多项选择 在定制打开文件对话框时,增加OFN_ALLOWMULTISELECT属性,就可以使打开文件对话框进行多选了。 如: CFileDialog m_Dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT, NULL, NULL ); 之后,用GetStartPosition()函数获取选择的起始文件位置,用GetNextPathName()函数获取各位置上的文件名。 如: if( m_Dlg.DoModal() == IDOK ) { POSITION pos; pos = m_Dlg.GetStartPosition(); while( pos ) { m_Path = m_Dlg.GetNextPathName(pos); ………… } } 为什么用打开文件对话框选择多个文件到一定数目时,文件没有打开? CFileDialog为文件列表设置有缓冲区,当选择文件过多时,会造成缓冲区溢出,造成一些文件没有被打开。可以采用自定义大缓冲区代替系统缓冲区的方法解决。 如: CFileDialog m_Dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT, NULL, NULL );//定制打开文件对话框 char* pBuf = new char ;//申请缓冲区 m_Dlg.m_ofn.nMaxFile = 20480;//让pBuf代替CFileDialog缓冲区 m_Dlg.m_ofn.lpstrFile = pBuf; m_Dlg.m_ofn.lpstrFile = NULL; ………… delete ; GetModuleFileName( NULL, m_Path, MAX_PATH ); //获取程序路径(包括程序名) int i = 0, j; while( m_Path !=0 ) { if( m_Path =='\\' ) j = i; i++; } m_Path = '\0'; m_exePath.Format( "%s", m_Path );//分离路径名(去掉程序名) 这段程序执行后,字符串变量m_exePath中放置的就是程序所在路径,其中不包括程序名。 获取程序的位置有什么用呢? 1、打开与应用程序在一起放置的数据文件: 如果你运行程序过程中使用过打开文件对话框打开过其它路径下的文件,这时系统的默认路径就发生了改变,有可能使你原定的数据文件打不开了,如果采用以下方法就可以没问题了: CFile file; file.Open( m_exePath+"数据文件名", CFile::modeRead ); 2、放置程序运行中的临时文件: 同样,当系统的默认路径发生改变后,程序中生成的临时文件就会放得到处都是,成了一个个垃圾文件,采用以下方法可使临时文件只放在程序所在路径下: CFile file; file.Open( m_exePath+"临时文件名", CFile::modeCreate | CFile::modeWrite ); …… 程序结束时,用下面的方法删除临时文件: CFile::Remove( m_exePath+"临时文件名" ); 如何在你的程序中执行其它程序 在自己的程序中调用其它程序的方法有好几种,这里我介绍我用过的两种: 一、WinExec()函数: 一般用法:WinExec(m_PathName,SW_SHOWNORMAL); m_PathName为执行程序的路径名,必须为可执行文件。 如:WinExec("C:\\Program Files\\Internet Explorer\\iexplore.exe",SW_SHOWNORMAL);为打开IE浏览器 二、ShellExecute()函数: 一般用法:ShellExecute(NULL,NULL,m_PathName,NULL,_T("c:\\temp"),SW_SHOWNORMAL); m_PathName为打开的程序路径名; _T("c:\\temp")为工作目录; 与WinExec()不同的是ShellExecute()函数也可以打开非可执行文件,比如你指定的文件为.txt,结果会打开记事本装入该文件。我用这种方法调用自己制作的帮助文件(.chm)效果很好。 如果不使用串行化,如何在程序结束时保存文件? 在文档-视图结构中,用串行化自动保存文件在各种VC书上都有介绍。现在的问题是我不使用串行化,而是自己动手保存,当点击窗口的关闭按钮时,如何提示并保存文档。 用ClassWizard在文档类(CxxDoc)中添加函数CanCloseFrame(),再在其中加入保存文件的语句就可以了。 例: //退出程序 BOOL CEditDoc::CanCloseFrame(CFrameWnd* pFrame) { CFile file; if(b_Flag)//b_Flag为文档修改标志,在修改文档时将其置为True { int t; t=::MessageBox(NULL,"文字已经改变,要存盘吗?","警告", MB_YESNOCANCEL | MB_ICONWARNING);//弹出提示对话框 if(t==0 || t==IDCANCEL) return false; if(t==IDYES) { CString sFilter="Text File(*.txt)|*.txt||"; CFileDialog m_Dlg(FALSE,"txt",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,(LPCTSTR)sFilter,NULL); //定制文件对话框 int k=m_Dlg.DoModal(); //弹出文件对话框 if(k==IDCANCEL || k==0) return false; m_PathName=m_Dlg.GetPathName(); //获取选择的文件路径名 file.Open(m_PathName,CFile::modeCreate | CFile::modeWrite); file.Write(m_Text,m_TextLen); //数据写入文件 file.Close(); } } return CDocument::CanCloseFrame(pFrame); } 这样当你单击窗口上的关闭按钮时,如果数据已修改了,就会弹出一个提示保存数据的对话框,提示你保存数据。 程序中的b_Flag是数据修改标志,应该在修改数据时进行设置,m_Text是准备保存的数据,放在文档内。 POSITION怎么用? POSITION类型数据用于表征各种列表中元素的位置,它类似于数组的下标,但又有所不同。主要区别是: 我们不能访问POSITION型数据的值,也不能对POSITION数据型数据进行加减、比较等运算。 用POSITION型数据访问列表时,都是采用迭代法,一般格式为: POSITION pos; //定义pos型变量 pos = GetHeadPosition(); //获取列表起始元素位置 while( pos ) { x = GetNext(pos); //获取pos处的列表值,同时修改pos为下一个元素位置 } GetNext()就是一种迭代,其格式为: TYPE GetNext(POSITION rPosition); 首先,它返回当前pos位置处的元素;再就是把pos值修改为下一个元素位置。这样循环时,可依次取得列表中各元素的值;当到达列表尾时,pos为NULL,循环结束。 所以使用POSITION型数据时,你不要试图用加减等操作去修改它,只能用GetNext()(向后迭代)或GetPrev()(向前迭代)反复迭代来修改它的值。 如果你想直接到达指定值,还可以用Find()函数或FindIndex()函数获得指定值的POSITION值。 POSITION Find(TYPE Value);用于在列表中查找值为Value的元素的POSITION值; POSITION FindIndex(int nIndex);用于获取列表中第nIndex个元素的POSITION值,nIndex从0开始。 如: pos = FindIndex(5);//求列表中第5个元素的位置 x = GetNext(pos);//读取元素的值 总之,POSITION类型在多种涉及列表的类中提供,不同的类提供的函数有所不同,但用法都是类似的。 如何从完整的文件路径中分离文件名和路径名? 从路径中分离文件名: CStringGetFileName(CStringpathname) { for(inti=pathname.GetLength()-1;i=0;i--) { if(pathname =='\\') break; } returnpathname.Mid(i+1); } 从路径中分离路径名(去除文件名): CStringGetPath(CStringpathname) { inti=0,j; while(ipathname.GetLength()) { if(pathname =='\\') j=i; i++; } returnpathname.Left(j+1); }
个人分类: opencv学习|2514 次阅读|0 个评论
[转载]编写一个基本的Android应用程序
putin24 2011-9-18 23:24
[转载]编写一个基本的Android应用程序
本节展示如何构建一个 Android 应用程序。示例应用程序非常简单:一个修改后的 “Hello Android” 应用程序。您将进行一个微小的修改,使屏幕背景全部变为白色,以便把手机用作手电筒。这个例子不是很有创意,但是可以作为一个有用的例子。请 下载 完整的源代码。 为了在 Eclipse 中创建应用程序,选择 File New Android project ,这将启动 New Android Project 向导。 图 1. New Android project 向导 接下来,创建一个简单的应用程序,该应用程序有一个活动,并且在 main.xml 中有一个 UI 布局。布局包含一个文本元素,您将修改这个文本元素,以显示 Android FlashLight。下面的清单显示了这个简单的布局。 清单 1. Flashlight 布局 ?xml version="1.0" encoding="utf-8"? LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/all_white" TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:textColor="@color/all_black" android:gravity="center_horizontal"/ /LinearLayout 在 strings.xml 中创建两个颜色资源。 清单 2. strings.xml 中的颜色 ?xml version="1.0" encoding="utf-8"? resources string name="hello"Android FlashLight/string string name="app_name"FlashLight/string color name="all_white"#FFFFFF/color color name="all_black"#000000/color /resources 主屏幕布局有一个定义为 all_white 的背景色。在 strings.xml 文件中,可以看到 all_white 被定义为一个值为 #FFFFFF 的 RGB 三元组,即纯白。 布局包含一个 TextView,这实际上是一块静态文本。它是不可编辑的。文本被设为黑色,并通过 gravity 属性设为水平居中。 该应用程序有一个名为 FlashLight.java 的 Java 源文件,如以下清单所示。 清单 3. Flashlight.java package com.msi.flashlight; import android.app.Activity; import android.os.Bundle; public class FlashLight extends Activity { /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } 该代码是直接来自 New Project 向导的模板代码: 它是 Java 包 com.msi.flashlight 的一部分。 它有两个 import: 一个用于 activity 类 一个用于 bundle 类 当该活动发起后,onCreate 方法被调用,传入一个 savedInstanceState。对于我们来说,不必关心这个 bundle。只有在暂停然后恢复活动时才会用到。 onCreate 方法覆盖了同名的 activity 类方法。它调用超类的 onCreate 方法。 对 setContentView() 的调用将关联 main.xml 文件中定义的 UI 布局。main.xml 和 strings.xml 中的任何内容都自动映射到 R.java 源文件中定义的常量。任何时候都不要直接编辑这个文件,因为它随着每次构建而改变。 运行该应用程序可以看到一个白色屏幕,其中有黑色文本。 图2:flashlight 的白色屏幕 下面显示用于 FlashLight 应用程序的 AndroidManifest.xml 文件。 清单 4. 用于 FlashLight 的 AndroidManifest.xml ?xml version="1.0" encoding="utf-8"? manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.msi.flashlight" android:versionCode="1" android:versionName="1.0.0" application android:icon="@drawable/icon" android:label="@string/app_name" activity android:name=".FlashLight" android:label="@string/app_name" intent-filter action android:name="android.intent.action.MAIN" / category android:name="android.intent.category.LAUNCHER" / /intent-filter /activity /application /manifest 该文件是由用于 Eclipse 的 Android Developer Tools 插件自动创建的。您不需要做任何事情。 FlashLight 源代码 os-android-devel-FlashLight.zip 参考资料 学习 The Open Handset Alliance 是一个由 47 家技术和移动公司组成的组织,这些公司共同致力于加快移动领域的创新,并提供更丰富、更廉价、更好的移动体验。他们一起开发了 Android,这是第一个完整的、开放的、免费的移动平台。 Android 开发人员站点 提供了文档、下载、日志等。 了解更多关于 Dalvik Virtual Machine 的信息。 观看 YouTube 上深入讨论 Dalvik VM 的 教程 。 Unlocking Android: A Developer's Guide 提供了 Android 操作系统和开发工具的简明、实用的说明。 要收听有关软件开发人员的有趣访谈和讨论,请浏览 developerWorks podcasts 。 随时关注 developerWorks 技术活动 和 网络广播 。 追随 developerWorks on Twitter 。 查阅最近将在全球举办的面向 IBM 开放源码开发人员的研讨会、交易展览、网络广播和其他 活动 。 访问 developerWorks 开放源码专区 ,获得丰富的 how-to 信息、工具和项目更新,帮助您用开放源码技术进行开发,并与 IBM 产品结合使用。 查看免费的 developerWorks 演示中心 ,观看并了解 IBM 及开源技术和产品功能。 获得产品和技术 下载 Android SDK 。 获得最新的 Eclipse IDE 。 使用 IBM 试用软件 改进您的下一个开发项目,这些软件可以通过下载获得。 下载 IBM 产品评估版 ,或者 在 IBM SOA Sandbox 中进行在线试用 ,获得来自 DB2®、 Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。
个人分类: 技术研究|3944 次阅读|0 个评论
Chrome Web Store“ 目前无法获取该应用程序”的解决办法
FrankZhao 2011-8-16 22:05
Chrome Web Store“ 目前无法获取该应用程序”的解决办法
Chrome是个异常强大的浏览器,前提是你选对应用程序和插件。 我最近在chrome的网络应用商城Chrome Web Store上安装应用程序的时候发现如下错误: 后来发现是因为被当局墙在外面了,普通的扩展可以在出现不能下载时把https中的s去掉,然后就可以下载了,但是这个办法对于应用程序的安装有时还是不可以,那么下面这个就是目前来说最好的解决办法: 打开hosts文件然后添加几条记录如下 ##Chrome 网上应用店 203.208.46.146 chrome.google.com 203.208.46.146 clients0.google.com 203.208.46.146 clients1.google.com 203.208.46.146 clients2.google.com 203.208.46.146 clients3.google.com 203.208.46.146 clients4.google.com 203.208.46.146 www.googleusercontent.com 203.208.46.146 lh0.googleusercontent.com 203.208.46.146 lh1.googleusercontent.com 203.208.46.146 lh2.googleusercontent.com 203.208.46.146 lh3.googleusercontent.com 203.208.46.146 lh4.googleusercontent.com 203.208.46.146 lh5.googleusercontent.com 203.208.46.146 lh6.googleusercontent.com 203.208.46.146 clients1.googleusercontent.com 203.208.46.146 clients2.googleusercontent.com hosts 所在位置: WindowsNT/2000/XP/Vista/win7(即微软NT系列操作系统): 默认位置为windows\system32\drivers\etc\ 一般在此位置直接修改会要求管理员权限,不知怎么处理的话可以将hosts文件复制到别处,以记事本形式进行修改之后再粘回去覆盖即可 也可以在桌面为hosts新建个快捷方式,需要用的时候就直接用记事本打开。
个人分类: 效率|13340 次阅读|0 个评论
谈谈网络实名和匿名的问题
热度 5 gzchengzhi 2011-8-3 11:08
  首先我这里想要明确一下的就是,就网络技术而言,并不存在什么实名和匿名之分,实名和匿名只是在网络的应用层之上,一种用户使用应用程序的习惯而已。如果在Internet的四个层次中可以采用匿名方式,则通信过程就不可能有效地进行下去,因为说到通信,就一定是涉及到通信双方的事情。   当然在应用层中还有一种公开密钥技术,能够实现数字签名,能够有效标志文件所有者的信息。这与我们平常理解的实名和匿名是不同的。还有一种叫做DDOS的黑客技术,利用了多台计算机同时向一台服务器发送数据请求,可以在一定程度上混淆发动攻击的黑客计算机信息,给调查取证带来一定的难度。这也有点类似于匿名的通信方式。   而最早的在应用层采用所谓匿名方式进行通信的可能是FTP协议。在使用FTP协议的时候,如果允许匿名登录,则用户不输入个性化的用户名和密码,只需要输入一个通用的anonymous作为用户名,任意一个电子邮件地址作为密码来进行登录。本质上来说,这并不能够起到完全隐藏自己的身份的作用。它只是采用了一个通用的用户名和密码而已。在客户机与主机建立连接的过程中,客户机已经通过各种网络协议将本机的所有重要信息都传给了服务器。但因为应用层之上的使用者并不了解网络技术各层次的工作原理,自信自己已经采用了一种神不知鬼不觉的方法来从服务器上下载文件,而服务器管理员又疏于时间去对日志文件仔细审查,匿名方式的神话也就逐渐为大家所知晓。   网络匿名方式在一段时间被人误解达到了高峰。记得在上个世纪九十年代,国外流传了一个很有趣的笑话,说的是:“在网络上没有人知道你是一条狗”。现在看起来笑话本身也成了笑话。当某些地区某些网友因为在某些贴吧中发表了对某些领导不满的言论以后,自以为采用的是匿名的方式,没有人知道是他说的。结果第二天还是被抓了起来。我们无疑应该对这种打击公民言论自由的行为进行谴责。但是作为网民,对网络进行了错误的解读也是一种深刻的教训。   我想指出的是在网络上,无论你采用的是匿名的方式,还是实名的方式进行讨论,对于网站管理机构、相关的主管机构、部门等来说,都是实名可以追查的。追查的方式也很简单,就是通过分析你通信过程中使用的通信线路、经过了那些网关、使用了那个ISP等等信息,很短时间就可以确定你发送信息的时候使用的是那台计算机、使用计算机的时间、计算机所在的街道、门牌号、楼层、房间等。这远比用户在登录时候使用的用户名、密码这点信息要丰富得多了。因此我认为实名方式对于一个人的身份信息确认的用处不大。但还是有一点用处的。比如在论坛中,其他用户除了阅读网友的帖子以外,还想了解这个网友的其他信息,则通过网友的用户名可以节省一些交流的时间。但有时这些信息也还不太够。比如我们在发表论文的时候,经常要书写详细的个人资料,这就是为了提供作者的基本信息,便于联系和交流。这要看每个人或机构的喜好不同。但我想,这应该跟一个人的责任感等道德方面的判断没有直接联系。   从上面的分析我们可以看出,匿名和实名的方式并不依赖于网络。因此匿名实名讨论方式并不是网络特有。早在网络出现之前就存在。一些非常专业的方式,比如论文的匿名评审、项目的匿名评审等。这些工作并不需要依赖网络来进行。而之所以采用了匿名的方式,则是期望评审专家能够专注于论文或项目质量问题,而不会受到其他无关因素的干扰。当然由于现实生活中,一些人士刻意隐藏自己的身份信息,犹如马季先生相声里所指出的那样:“只花八分钱,让那小子恶心半年”,这可能就是涉及到了个人道德修养问题了。   同网络时代进行对比,传统方式中,那种刻意隐藏自己身份信息的做法,类似于现在的黑客。而一般网络用户在符合论坛等网络交互场所规定的情况下,采用匿名的方式,则类似于论文项目的匿名评审。因为网络用户并没有刻意隐藏自己的身份信息,比如刻意使用代理服务器、恶意穿越防火墙等。   最后想谈一谈“网络实名制”的问题。本质上来说,网络实名制是一种制度,而我这里只是讨论实名和匿名的技术问题,二者有比较大的差距。但网络实名制的起源跟使用实名还是匿名方式来进行讨论是有联系的,故还是有必要在本文中略微涉及一下。   为何要提出“网络实名制”,其原因目前还不太清楚。形式上来说,网络实名制应该就是要确保每一个人上网的时候使用的是真实的身份。但这种真实的身份的显示到底应该是怎么样的程度,目前并没有一个标准。如果说是连接到网络必须实名,我想其关口应该是ISP。如果说是开设博客或进入论坛讨论需实名,则把关人应该是网站管理员。除此之外,还要考虑一下打开一个网站浏览信息是否应该使用真实身份登陆等。   尽管有些技术性的问题需要解决,不过已经有网络实名制实施的实例了,这就是韩国的网络实名制。韩国的网络实名制源于几年前出现的所谓“狗屎女”事件,相关资料可以在网络上搜索到。但我个人的看法,韩国之所以实行网络实名制,应该跟朝鲜半岛局势紧张有关。目前全世界只有韩国实行网络实名制也能说明这一问题。但韩国实行网络实名制以后效果如何,我并没有查阅到相关的研究资料,故这里就不好进行深入判断了。
10396 次阅读|22 个评论
[转载]本土化是国产智能机获胜的关键
dongzg101 2011-7-26 09:08
本土化是国产智能机获胜的关键 2011-07-20 22:01:01 归档在 通信市场 | 浏览 16155 次 | 评论 8 条 手机市场已经跑步进入智能时代,功能手机的出货量虽然还在增长,但智能手机所体现出来的超速前进动力已经让所有业内厂家动心。苹果的成功也好像给行业指明了方向,手机厂商只要抓住客户需求的变化,抓住市场快速发展的机遇,就一定会在智能手机市场上风声水起。 中国这个市场非常特殊,用户众多,习惯各异,消费存在严重的鸿沟,不仅仅是两级分化,而是多样分化,比如,像超大屏幕、超长待机等等,这是中国市场上两个特俗需求,却几乎成为决胜中国市场的关键因素。 智能手机是移动互联网发展的最重要终端,也是其最大的优势所在,而移动互联网的体验好坏并不仅仅依赖终端硬件的设计,其应用程序更需要本土化,否则再好的应用也无法给力。在这一点上,苹果也无能为力,应用程序商店上成千上万的好东西,但并不是为中国市场准备的,不要说中国本地资源结合的不够,就很多英文程序就绝不是绝大多数中国人能消受得起。 还有,苹果搞了一个云服务,据说是可以将很多应用给一揽子解决,帮助用户更好的在多终端之间享受同样的一致性的应用体验,但好像苹果提供服务的平台里面并不包括中国人最喜欢使用的一些互联网业务,这也让很多智能手机达人有些失望。 因此,在中国,移动互联网发展起来后,真正好用易用的智能手机或许并不是苹果谷歌诺基亚,很有可能是中国的本土品牌。其实,在 IT 领域早就有这样一个规律,当这个产品高高在上不需要本土资源支撑的时候一定是洋牌子最牛,但一旦开始普及深入基层之后,中国的本土品牌便可能后来居上。 在中国本土手机企业中,酷派算是在智能手机领域扎根时间很长的,作为一家专注于智能手机业务的主流终端制造商,其发展的整个历史都没有离不开过本土两个字。酷派与三家运营商都有紧密的合作,特别是在双网双待手机领域更是独占鳌头,此前酷派推出的 coolmart 这个类似苹果 app 的本地化应用商城以及酷云(本地化的手机云计算应用及服务平台),都是酷派基于本土化的需求提出的本土化应用和服务,假以时日必定会成为国内众多移动互联网用户的重要平台。此外,酷派的商业模式主要是与运营商绑定,同时借助社会化渠道做产品推广,酷派这种充分借助本地企业完成其相关服务的做法也对消费者更为便捷。 中国的移动互联网发展很快,中国的市场前景广阔,也希望更多的中国本土企业开发出更好的本土化应用集成的终端与平台,让中国的老百姓更好的享受信息服务的好处。
1164 次阅读|0 个评论
[转载]gcc、glibc和binutils模块之间的关系,以及在现有系统上如何
onewaystreet 2011-7-24 17:01
一、关于gcc、glibc和binutils模块之间的关系 1、gcc(gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”,以及提供了与编译器紧密相关的运行库的支持,如libgcc_s.so、libstdc++.so等。 2、binutils提供了一系列用来创建、管理和维护二进制目标文件的工具程序,如汇编(as)、连接(ld)、静态库归档(ar)、反汇编 (objdump)、elf结构分析工具(readelf)、无效调试信息和符号的工具(strip)等。通常,binutils与gcc是紧密相集成 的,没有binutils的话,gcc是不能正常工作的。 3、glibc是gnu发布的libc库,也即c运行库。glibc是linux系统中最底层的api(应用程序开发接口),几乎其它任何的运行库 都会倚赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现,主要的如下: (1)string,字符串处理 (2)signal,信号处理 (3)dlfcn,管理共享库的动态加载 (4)direct,文件目录操作 (5)elf,共享库的动态加载器,也即interpreter (6)iconv,不同字符集的编码转换 (7)inet,socket接口的实现 (8)intl,国际化,也即gettext的实现 (9)io (10)linuxthreads (11)locale,本地化 (12)login,虚拟终端设备的管理,及系统的安全访问 (13)malloc,动态内存的分配与管理 (14)nis (15)stdlib,其它基本功能 二、在现有系统上如何升级(redhat9上实践的) 1、升级这些库时,最好不要覆盖系统中缺省的;因为这些库,尤其是glibc库,是系统中最核心的共享库和工具,如果盲目覆盖,很可能导致整个系统 瘫痪,因为一般更新glibc库时,其它所有以来libc库的共享库都需要重新被编译一遍。因此,为了调试某个程序进入glibc时,最好把glibc安 装到/usr/local/lib下。 2、首先编译glibc库。注意最好令建立一个glibc-build的目录,configure时加上--enable-add-ons=linuxthreads选项。make install安装到/usr/local下。 3、修改gcc的spec文件(/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/specs),更改ld-linux.so.2为/usr/local/lib下的新的共享库装载器。 4、编译binutils库,此时被编译出的程序会连接到/usr/local/lib下的新的libc库。注意,在configure前,需要设 置ld缺省连接的路径(LIBRARY_PATH=/usr/local/lib:/lib:/usr/lib),否则binutils会 configure出错,找不到libc中的一些符号。具体步骤如下: (1)export LIBRARY_PATH=/usr/local/lib:/lib:/usr/lib (2)mkdir binutils-build cd binutils-build (3)../binutils-2.13.90.0.18/configure (4)make (5)make -C ld clean (6)make -C ld LIB_PATH=/usr/lib:/lib:/usr/local/bin(设置编译后的ld的缺省库搜索路径,后面的比前面的优先级高) (7)make install 三、总结 1、运行时,动态库的装载依赖于ld-linux.so.6的实现,它查找共享库的顺序如下: (1)ld-linux.so.6在可执行的目标文件中被指定,可用readelf命令查看 (2)ld-linux.so.6缺省在/usr/lib和lib中搜索;当glibc安装到/usr/local下时,它查找/usr/local/lib (3)LD_LIBRARY_PATH环境变量中所设定的路径 (4)/etc/ld.so.conf(或/usr/local/etc/ld.so.conf)中所指定的路径,由ldconfig生成二进制的ld.so.cache中 2、编译时,搜索库的路径顺序如下: (1)ld-linux.so.6由gcc的spec文件中所设定 (2)gcc --print-search-dirs所打印出的路径,主要是libgcc_s.so等库。可以通过GCC_EXEC_PREFIX来设定 (3)LIBRARY_PATH环境变量中所设定的路径,或编译的命令行中指定的-L/usr/local/lib (2)binutils中的ld所设定的缺省搜索路径顺序,编译binutils时指定。(可以通过“ld --verbose | grep SEARCH”来查看) 3、二进制程序的搜索路径顺序为PATH环境变量中所设定。一般/usr/local/bin高于/usr/bin 4、编译时的头文件的搜索路径顺序,与library的查找顺序类似。一般/usr/local/include高于/usr/include
个人分类: linux学习|1792 次阅读|0 个评论
Java调用dll之64bit篇
热度 1 xirongguo 2011-7-22 19:34
在64bit系统下调用32bit必须使用x86的JDK,这是由于64bit/32bit dll不能混合调用,而x64JDK默认调用64bit dll所致,具体原因如下: (转)64位应用程序的第一条规则是:你绝对不能把32位和64位代码混和在同一个应用程序内。如果你有一个64位应用程序,所有与这个应用程序相关的东西,包括DLL文件,必须是64位的。这就有一个有趣的挑战,因为有时候很多应用程序都依靠一个共同的DLL文件。幸运的是,Windows保持32位的DLL文件和64位的DLL文件处于隔离状态。   如果你查看一下在32位操作系统内的\Windows文件夹,你会发现两个子目录:一个名为SYSTEM,还有一个名为SYSTEM32。SYSTEM目录是Windows 3.x遗留下来的,用来保持Windows的对一些旧的应用程序的向下兼容性。一般说来,16位的DLL文件(以及其它的支持文件)被存放在\Windows\System文件夹里,32位DLL文件和不同支持文件被存放在\Windows\System32文件夹里。   32位版本的Windows保持16位和32位DLL文件的方式是非常简单的,但是64位版本的Windows保持64位和32位DLL文件的方式就不这么简单了。 理论上说,微软将要创建一个名为\Windows\System64的文件夹来用其存放64位DLL文件,但是取而代之的是,微软创建了一个新的名为SysWOW64的文件夹来存放32位的DLL文件。第一眼看起来,让人感觉这个文件夹应该存放64位应用程序的,但是注意,32位应用程序本来应该存放它们的DLL文件到\Windows\System32文件夹里面。   \Windows\System32文件夹在64位版本的Windows内仍然存在。但是微软使用这个文件夹做为64位DLL的仓库,而不是32位DLL文件的。我不清楚微软使用\Windows\System32文件夹来存放64位DLL的原因,但是我听说这么做是为了向下兼容性。   那么是不是所有32位应用程序该存放它们的DLL文件到\Windows\System32文件夹呢?这又让事情变得混乱。   如我之前所提及的,32位代码不能默认在64位版本的Windows内运行。为了运行32位的应用程序,Windows使用WOW64 emulator,来让这些应用程序还认为它们在32位版本的Windows内运行。   当你安装一个32位的应用程序,安装向导通过WOW64 emulato运行。32位和64位代码并不混和。一旦一个应用程序(包括一个安装向导)从WOW64 emulator开始运行,它必须接着在WOW64内继续运行。这意味着当你安装一个应用程序,安装向导并不知道这个程序被安装到64位版本的Windows内,并且和它运行在32位操作系统一样把DLL文件写到\Windows\System32文件夹里面。   当然,WOW64知道安装向导通过emulator来运行的32位应用程序。同时也知道64和32位代码不能混合在一起。所以,WOW64 emulator 给\Windows\SysWOW64创建一个别名。这意味着任何时候32位应用程序要写入到\Windows\System32文件夹或者从\Windows\SysWOW64文件夹读取,WOW64 emulator都能使其改道到\Windows\SysWOW64文件夹。   所有这些都意味着如果你需要手动操作\Windows\System32文件夹内的内容,你可能要非常的麻烦。我最近了解到一个管理员需要安装一些小的支持脚本到一个已经安装的应用程序,这个脚本的指导上说明这些脚本需要被存放到\Windows\System32文件夹。当然这些脚本的说明假定这个应用程序是在32位操作系统上运行的。   这些脚本没有引起系统崩溃。然而Windows给人幻想永远不用进行更新。当管理员运行应用程序,它将被改道到\Windows\SysWOW64文件夹。管理员知道他自己把这些脚本放到\Windows\System32文件夹并且能通过Windows浏览器看到这些脚本,但是不能指出为什么应用程序不能看到这些脚本。考虑到这个问题是和权限相关的,他花费了一些时间来研究这个,所以知道了关于64位版本的Windows保存DLL文件隔离的方法,所以他能够把这些脚本放到\Windows\SysWOW64文件夹。 附上一款好用的DLL依赖查看器:Dependence walker ( http://www.dependencywalker.com/ )
个人分类: 系统工程|11728 次阅读|3 个评论
[转载]mcc、mbuild和mex命令详解
songhaiyu 2011-7-16 22:15
http://www.matlabsky.com/thread-544-1-1.html 好多学习Matlab扩展编程的人经常把这几个命令给搞混淆的,下面我就给大家仔细讲讲,希望呢给大家讲明白! 先简单的说说mcc、mbuild和mex到底怎么回事: mcc将M文件转换成C/C++文件和相应的MEX包裹文件(需要Matlab编辑器),但在特定条件下可以自动调用mbuild或者mex mex将C/C++文件(入口函数为mexfunction())编译成MEX(DLL)文件(需要C/C++编辑器) mbuild将C/C++文件(入口函数为main())生成可独立运行的C应用程序(需要C/C++编辑器) 复制代码 一 mcc命令 Matlab编译器使用 mcc命令能将一个M文件翻译成C文件,同时生成一个相应的包裹文件 ,这个包裹文件包含了编译器产生的代码和它支持的可执行文件类型之间所需的接口。利用改包裹文件提供的接口,生成的C文件能用在任何编译器所支持的可执行文件类型(如MEX文件、EXE文件、DLL文件)中,这些C文件与最终生成的可执行文件是相互独立的。 Matlab编译器(Lcc)在 特定的条件下能自动调用mex和mbuild函数 ,尤其是mcc –x/-m/-p时。 (1)创建MEX文件 mcc –x filename (注意这个命令在2008a中已经去掉了) 将M文件filename.m翻译成C代码,并生成一个可被Matlab直接调用的C的MEX。 (2)创建simulink S函数 mcc –s filename 将M文件filename.m翻译成C代码,并生成一个相应的simulink S函数,该函数的输入输出变量的大小可动态改变。 (3)创建可独立执行的C程序 mcc –m filename 将M文件filename.m翻译成C代码,生成的可执行文件能独立于Matlab运行环境。 (4)创建可独立运行的C++程序 mcc –p filename 将M文件filename.m翻译成C++代码,生成的可执行文件能独立于Matlab运行环境。 (5)创建可独立运行的C图形库函数 mcc –B sgl filename 如果filename.m中包含了对Matlab图形处理函数的调用,上述命令,将filename转换成为C语言,并生成一个能独立于Matlab运行环境的可执行程序。 (6) 创建可独立运行的C++图形库函数 mcc –B sgl cpp filename 如果filename.m中包含了对Matlab图形处理函数的调用,上述命令,将filename转换成为C++语言,并生成一个能独立于Matlab运行环境的可执行程序。 (7)创建C函数库 mcc –m –W lib:libfoo –T link:libfoo.m 创建一个C函数库 二 mex命令 用户可以在Matlab中按简单的M文件语法规则设计出来完成特定计算的算法。然后用 Matlab编译器调用mex命令创建C共享库函数(DLL)或C++静态函数库 ,最后将它们整合到C/C++应用程序中,编译完这些C/C++应用程序,就可以用这些算法来实现特定的计算功能。当然这过程中也隐藏了算法和加快了代码的执行效率。 由于MEX文件执行效率高,故如果有文件重名的话,Matlab将优先调用MEX文件 ,下面以一个例子说明: function theimage=gasket(numpoits) theimage=zeros(1000); corners= ; startpoit= ; therand=ceil(rand(numpoits,1)*3); for ii=1:numpoits startpoit=floor((corners(therand(ii),:)+startpoit)/2); theimage(startpoit(1),startpoit(2))=1; end imagesc(theimage) colormap( ); axis equal tight 复制代码 现在直接调用 tic ,gasket(5000000);toc Elapsed time is 7.240129 seconds. 复制代码 接着把它编译成mex文件在调用试试 mcc -p tic gasket;tic ,gasket(5000000);toc Elapsed time is 1.23861 seconds. 复制代码 三 mbuild命令 要建立独立运行的C应用程序,系统中需要 安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数 。 Matlab编译器使用 mbuild命令可以直接将C/C++源代码编译为独立运行程序 ,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。 虽然生成的 可执行程序可以脱离Matlab环境运行,但是它需要Matlab C/C++数学库文件或者图形库文件的支持才能运行 。但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调用,则不仅可以独立与Matlab环境,也不需要那两个库函数的支持。 对于如何在其他环境中运行那个生成的exe文件,大家看看这个帖子: http://www.matlabsky.com/thread-543-1-1.html 下面说说一些比较和区别: 1. MEX文件和EXE文件的差别 Mex文件与Matlab解释器在同一个过程空间运行,当用户调用一个MEX文件时Matlab解释器就会动态的连接到MEX文件。 可独立运行的C/C++应用程序(exe)可以独立于Matlab环境而运行, 而MEX文件则不行,它需要Matlab的支持 。还有EXE中可以调用MEX文件。 2.mex和mbuild编译的C/C++文件的差别 使用mbuild命令编译的C/C++源文件中, 必须包含main()函数 ,它能独立于Matlab运行。而mex命令编译的C/C++源文件中不含main()函数, 它是以mexfunction()函数作为入口的 ,编译后生成的是mex文件,被Matlab调用。 下面是我的一些使用心得 由于真正掌握C/C++接口编程比较麻烦, 故对初学者较少直接使用mex命令 (花费那么大的精力去学习那些接**术,接着利用接**术编写C/C++文件,再使用mex命令来编译它),一般大家都是先写好M文件再使用mcc –x命令让它生成MEX (DLL)文件。 但对纯正的C/C++大家却都比较熟悉,故mbuild命令还是有些市场的
个人分类: 程序设计|4843 次阅读|0 个评论
[转载]企业信息化应采用“五个一”
zlhua 2011-7-10 20:16
刘小兵早在2000年的时候就提出了五个一,即“一个机房、一个数据库、一套服务器、一套应用程序、一个维护班子”。在那时他所提的数据大集中,被很多专家认为是不可能实现的事。但是双汇这么多年一直坚持数据大集中,从一个几百人的小厂,发展到如今年销售400多亿的企业,这期间IT起到了不可或缺的作用。 “我参观过一些著名大型企业,为了显示企业实力,让我们看他有机房很大,分布在全国各地,结果,投入了大量资金、人力、物力去管理,IT支出惊人,形成了IT黑洞,这样不但无端增加了很多管理成本,更增加了能耗,关键是企业集团内的数据还不能共享,高层领导不能随时掌握集团各项数据,在数据大集中方面,双汇集团、工商银行都领先了一步。”刘小兵给记者算了一笔帐:“目前双汇只有一个机房,真正管机房的只有一个半人,而且完全满足了双汇集团这个年产销400亿规模的企业集团的所有信息化需求。”他介绍说,企业在取得上述丰硕信息化成果的同时,也收获了低碳这个“副产品”:由于库存水平显著下降,双汇集团的冷库使用量大大降低,节约了大量电力;运输线路优化和回程配货大大减少了车辆的无效运行,直接减少大量的尾气排放;无纸化办公不仅节省资源,而且保护了森林,有助于二氧化碳的吸收;减少差旅有效地降低了对社会运输资源和酒店等资源的占用和消耗…… 呼吁央企信息化采用“双汇模式” 刘小兵呼吁,央企应该采用双汇信息化管理模式,一个机房,一个数据库、一套程序,这样不但数据更新快,降低业务成本,同时也便于集团高层随时掌握全面数据,更能实现减少碳排放的这一全民目标。 “实现数据大集中是一个趋势,哪个企业不顺应这个趋势,他的信息化就会被淘汰掉,他的CIO就不是一个负责任的CIO。”刘小兵也同时指出,“企业实现数据大集中就像飞机飞行途中换发动机,风险确实大,但是,哪个企业先换,哪个企业就能赢得先机。” 中国缺少国家级CIO 令记者没有想到的是,一向低调的刘小兵在采访中竟然语出惊人,他认为:“要真正实现减少碳排放目标,中国缺一个国家级的CIO,应该在国家里面选择一个懂IT的人,这个CIO一定要对信息化非常理解,而且还得懂企业,懂管理。应该有一个国家CIO站的国家的高度,去整合我们国家的多元信息。” 他举例说:“像我们国家在物流行业,应该利用信息化手段加强资源的整合,把物流资源整合起来,还要把需求整合起来。比如对于食品行业,应该把各个企业的渠道和物流需求整合起来。现在我们企业的渠道是各走各的,蒙牛走蒙牛的渠道,双汇走双汇的渠道,娃哈哈走娃哈哈取得,可乐走可乐的渠道。各自走各自的渠道,各自有各自的物流。如果能够整合一下,协同起来,不但企业会降低成本,整个社会物流体系的效率也能提高很多。” 那么这种整合模式,与曾经的计划经济似有很多相似点,对此,刘小兵坦承:“事事无绝对,不能说计划经济不好,也不能说市场经济不好,它们两个,结合在一起最好。怎么样既满足市场需求,又能做到计划生产呢,当然只能靠信息化了。” 来源:双汇软件
个人分类: 快乐学习|1807 次阅读|0 个评论
[转载]多线程中使用CheckForIllegalCrossThreadCalls = false访问窗口
dolphinzhu 2011-7-2 14:39
如下: 在窗口构造函数中将CheckForIllegalCrossThreadCalls设置为 false public Form1() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; } 【msdn】 如何:对 Windows 窗体控件进行线程安全调用 使用多线程提高 Windows 窗体应用程序的性能时,必须注意以线程安全方式调用控件。 示例 访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。 .NET Framework 有助于在以非线程安全方式访问控件时检测到这一问题。在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用该控件,则调试器会引发一个 InvalidOperationException ,并提示消息:“从不是创建控件 control name 的线程访问它。” 此异常在调试期间和运行时的某些情况下可靠地发生。强烈建议您在显示此错误信息时修复此问题。在调试以 .NET Framework 2.0 版之前的 .NET Framework 编写的应用程序时,可能会出现此异常。 注意 可以通过将 CheckForIllegalCrossThreadCalls 属性的值设置为 false 来禁用此异常。这会使控件以与在 Visual Studio 2003 下相同的方式运行。 转自: http://www.cnblogs.com/lanru/archive/2010/07/15/1777892.html
个人分类: CSHARP|2843 次阅读|0 个评论
[转载]C# winform 自定义应用程序配置文件
dolphinzhu 2011-6-28 00:17
C#读取配置文件需要注意的一些问题: C#读取配置文件1.了解配置文件概述: 应 用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的。它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序。配置文件的根节点是 configuration。我们经常访问的是appSettings,它是由.Net预定义配置节。我们经常使用的配置文件的架构是象下面的形式。先大 概有个印象,通过后面的实例会有一个比较清楚的认识。下面的“配置节”可以理解为进行配置一个XML的节点。 常见配置文件模式: ﹤configuration﹥ ﹤configSections﹥ //配置节声明区域,包含配置节和命名空间声明 ﹤section﹥ //配置节声明   ﹤sectionGroup﹥ //定义配置节组 ﹤section﹥ //配置节组中的配置节声明 ﹤appSettings﹥ //预定义配置节 ﹤Custom element for configuration section﹥ //配置节设置区域 C#读取配置文件2.只有appSettings节的配置文件及访问方法 下面是一个最常见的应用程序配置文件的例子,只有appSettings节。 ﹤?xml version= "1.0" encoding= "utf-8" ?﹥ ﹤configuration﹥ ﹤appSettings﹥ ﹤add key= "connectionstring" value= "User ID=sa;Data Source=.; Password=;Initial Catalog=test;Provider=SQLOLEDB.1;" /﹥ ﹤add key= "TemplatePATH" value= "Template" /﹥ ﹤/appSettings﹥ ﹤/configuration﹥ 下面来看看这样的配置文件如何方法。 string _connectionString=ConfigurationSettings.AppSettings ; 使用ConfigurationSettings类的静态属性AppSettings就可以直接方法配置文件中的配置信息。这个属性的类型是NameValueCollection。 C#中读取配置文件3.自定义配置文件 3.1 自定义配置节 一个用户自定义的配置节,在配置文件中分为两部分:一是在﹤configSections﹥﹤/ configSections﹥配置节中声明配置节(上面配置文件模式中的“﹤section﹥”),另外是在﹤ configSections﹥﹤/ configSections ﹥之后设置配置节(上面配置文件模式中的“﹤Custom element for configuration section﹥”),有点类似一个变量先声明,后使用一样。声明一个配置文件的语句如下: ﹤section name= " " type= " " /﹥ ﹤section﹥:声明新配置节,即可创建新配置节。 name:自定义配置节的名称。 type:自定义配置节的类型,主要包括 System.Configuration.SingleTagSectionHandler、 System.Configuration.DictionarySectionHandler、 System.Configuration.NameValueSectionHandler。 不同的type不但设置配置节的方式不一样,最后访问配置文件的操作上也有差异。下面我们就举一个配置文件的例子,让它包含这三个不同的type。 ﹤?xml version= "1.0" encoding= "utf-8" ?﹥ ﹤configuration﹥ ﹤configSections﹥ ﹤section name= "Test1" type= "System.Configuration.SingleTagSectionHandler" /﹥ ﹤section name= "Test2" type= "System.Configuration.DictionarySectionHandler" /﹥ ﹤section name= "Test3" type= "System.Configuration.NameValueSectionHandler" /﹥ ﹤/configSections﹥ ﹤Test1 setting1= "Hello" setting2= "World" /﹥ ﹤Test2﹥ ﹤add key= "Hello" value= "World" /﹥ ﹤/Test2﹥ ﹤Test3﹥ ﹤add key= "Hello" value= "World" /﹥ ﹤/Test3﹥ ﹤/configuration﹥ 我们对上面的自定义配置节进行说明。在声明部分使用﹤section name="Test1" type="System.Configuration.SingleTagSectionHandler"/﹥声明了一个配置节它的名字叫 Test1,类型为SingleTagSectionHandler。在设置配置节部分使用﹤Test1 setting1="Hello" setting2="World"/﹥设置了一个配置节,它的第一个设置的值是Hello,第二个值是World,当然还可以有更多。其它的两个配 置节和这个类似。 下面我们看在程序中如何访问这些自定义的配置节。我们用过ConfigurationSettings类的静态方法GetConfig来获取自定义配置节的信息。 public static object GetConfig( string sectionName); C#读取配置文件之访问配置节的代码: //访问配置节Test1 IDictionary IDTest1 = (IDictionary)ConfigurationSettings.GetConfig( "Test1" ); string str = ( string )IDTest1 + " " +( string )IDTest1 ; MessageBox.Show(str); //输出Hello World //访问配置节Test1的方法2 string ; IDTest1.Values.CopyTo(values1,0); MessageBox.Show(values1 + " " +values1 ); //输出Hello World //访问配置节Test2 IDictionary IDTest2 = (IDictionary)ConfigurationSettings.GetConfig( "Test2" ); string ; string ; IDTest2.Keys.CopyTo(keys,0); IDTest2.Values.CopyTo(values,0); MessageBox.Show(keys + " " +values ); //访问配置节Test3 NameValueCollection nc=(NameValueCollection)ConfigurationSettings.GetConfig( "Test3" ); MessageBox.Show(nc.AllKeys .ToString()+ " " +nc ); //输出Hello World 通过上面的代码我们可以看出,不同的type通过GetConfig返回的类型不同,具体获得配置内容的方式也不一样。 配置节处理程序 返回类型 SingleTagSectionHandler Systems.Collections.IDictionary DictionarySectionHandler Systems.Collections.IDictionary NameValueSectionHandler Systems.Collections.Specialized.NameValueCollection 3.2 自定义配置节组 配置节组是使用﹤sectionGroup﹥元素,将类似的配置节分到同一个组中。配置节组声明 部分将创建配置节的包含元素,在﹤configSections﹥元素中声明配置节组,并将属于该组的节置于﹤ sectionGroup﹥元素中。下面是一个包含配置节组的配置文件的例子: ﹤?xml version= "1.0" encoding= "utf-8" ?﹥ ﹤configuration﹥ ﹤configSections﹥ ﹤sectionGroup name= "TestGroup" ﹥ ﹤section name= "Test" type= "System.Configuration.NameValueSectionHandler" /﹥ ﹤/sectionGroup﹥ ﹤/configSections﹥ ﹤TestGroup﹥ ﹤Test﹥ ﹤add key= "Hello" value= "World" /﹥ ﹤/Test﹥ ﹤/TestGroup﹥ ﹤/configuration﹥ C#读取配置文件之访问配置节组的代码: NameValueCollection nc=(NameValueCollection)ConfigurationSettings.GetConfig( "TestGroup/Test" ); MessageBox.Show(nc.AllKeys .ToString()+ " " +nc ); //输出Hello World C#读取配置文件的相关内容就向你介绍到这里,希望对你了解和学习C#读取配置文件有所帮助。 //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// 1. 配置文件概述: 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的。它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序。配置文件的根节点是configuration。我们经常访问的是appSettings,它是由.Net预定义配置节。我们经常使用的配置文件的架构是象下面的形式。先大概有个印象,通过后面的实例会有一个比较清楚的认识。下面的“配置节”可以理解为进行配置一个XML的节点。 常见配置文件模式: configuration configSections //配置节声明区域,包含配置节和命名空间声明 section //配置节声明   sectionGroup //定义配置节组    section //配置节组中的配置节声明 appSettings //预定义配置节 Custom element for configuration section //配置节设置区域 2. 只有appSettings节的配置文件及访问方法 下面是一个最常见的应用程序配置文件的例子,只有appSettings节。 ?xml version="1.0" encoding="utf-8"? configuration appSettings add key="connectionstring" value="User ID=sa;Data Source=.;Password=;Initial Catalog=test;Provider=SQLOLEDB.1;" / add key="TemplatePATH" value="Template" / /appSettings /configuration 下面来看看这样的配置文件如何方法。 string _connectionString=ConfigurationSettings.AppSettings ; 使用ConfigurationSettings类的静态属性AppSettings就可以直接方法配置文件中的配置信息。这个属性的类型是NameValueCollection。 3.自定义配置文件 3.1 自定义配置节 一个用户自定义的配置节,在配置文件中分为两部分:一是在configSections/ configSections配置节中声明配置节(上面配置文件模式中的“section”),另外是在configSections/ configSections 之后设置配置节(上面配置文件模式中的“Custom element for configuration section”),有点类似一个变量先声明,后使用一样。声明一个配置文件的语句如下: section name=" " type=" "/ section:声明新配置节,即可创建新配置节。 name:自定义配置节的名称。 type:自定义配置节的类型,主要包括System.Configuration.SingleTagSectionHandler、System.Configuration.DictionarySectionHandler、System.Configuration.NameValueSectionHandler。 不同的type不但设置配置节的方式不一样,最后访问配置文件的操作上也有差异。下面我们就举一个配置文件的例子,让它包含这三个不同的type。 ?xml version="1.0" encoding="utf-8" ? configuration configSections section name="Test1" type="System.Configuration.SingleTagSectionHandler"/ section name="Test2" type="System.Configuration.DictionarySectionHandler"/ section name="Test3" type="System.Configuration.NameValueSectionHandler" / /configSections Test1 setting1="Hello" setting2="World"/ Test2 add key="Hello" value="World" / /Test2 Test3 add key="Hello" value="World" / /Test3 /configuration 我们对上面的自定义配置节进行说明。在声明部分使用section name="Test1" type="System.Configuration.SingleTagSectionHandler"/声明了一个配置节它的名字叫Test1,类型为SingleTagSectionHandler。在设置配置节部分使用 Test1 setting1="Hello" setting2="World"/设置了一个配置节,它的第一个设置的值是Hello,第二个值是World,当然还可以有更多。其它的两个配置节和这个类似。 下面我们看在程序中如何访问这些自定义的配置节。我们用过ConfigurationSettings类的静态方法GetConfig来获取自定义配置节的信息。 public static object GetConfig(string sectionName); 下面是访问这三个配置节的代码: //访问配置节Test1 IDictionary IDTest1 = (IDictionary)ConfigurationSettings.GetConfig("Test1"); string str = (string)IDTest1 +" "+(string)IDTest1 ; MessageBox.Show(str); //输出Hello World //访问配置节Test1的方法2 string ; IDTest1.Values.CopyTo(values1,0); MessageBox.Show(values1 +" "+values1 ); //输出Hello World //访问配置节Test2 IDictionary IDTest2 = (IDictionary)ConfigurationSettings.GetConfig("Test2"); string ; string ; IDTest2.Keys.CopyTo(keys,0); IDTest2.Values.CopyTo(values,0); MessageBox.Show(keys +" "+values ); //访问配置节Test3 NameValueCollection nc=(NameValueCollection)ConfigurationSettings.GetConfig("Test3"); MessageBox.Show(nc.AllKeys .ToString()+" "+nc ); //输出Hello World 通过上面的代码我们可以看出,不同的type通过GetConfig返回的类型不同,具体获得配置内容的方式也不一样。 配置节处理程序 返回类型 SingleTagSectionHandler Systems.Collections.IDictionary DictionarySectionHandler Systems.Collections.IDictionary NameValueSectionHandler Systems.Collections.Specialized.NameValueCollection 3.2 自定义配置节组 配置节组是使用sectionGroup元素,将类似的配置节分到同一个组中。配置节组声明部分将创建配置节的包含元素,在configSections元素中声明配置节组,并将属于该组的节置于sectionGroup元素中。下面是一个包含配置节组的配置文件的例子: ?xml version="1.0" encoding="utf-8" ? configuration configSections sectionGroup name="TestGroup" section name="Test" type="System.Configuration.NameValueSectionHandler"/ /sectionGroup /configSections TestGroup Test add key="Hello" value="World"/ /Test /TestGroup /configuration 下面是访问这个配置节组的代码: NameValueCollection nc=(NameValueCollection)ConfigurationSettings.GetConfig("TestGroup/Test"); MessageBox.Show(nc.AllKeys .ToString()+" "+nc ); //输出Hello World 转自: http://fdm0111.blog.163.com/blog/static/813758200852523953920/ 转自: http://hi.baidu.com/huahua382811/blog/item/27d43cef3bd587f7b3fb956d.html
个人分类: CSHARP|6336 次阅读|0 个评论
[转载]构建正则表达式模式的技能
chnfirst 2011-6-2 08:56
http://blog.csdn.net/yishengxiao/archive/2008/07/28/2723312.aspx 磨练 构建正则表达式模式的技能 通过本文的学习,您可以增加一些有用的设计实际正则表达式 (regexp) 的技能。构建正则表达式是任何管理员日常工作中的一部分。为了构造返回所需条件的成功正则表达式,需要学习以模式匹配的角度进行思考,而这种技能需要花大量的时间进行练习。 引言 UNIX 管理员每天都需要构建和使用正则表达式 (regexp) 进行文本模式匹配。大多数语言都支持正则表达式的某种实现。有的应用程序(如 EMACS)具有正则表达式搜索功能,并且您可以通过各种命令行工具使用正则表达式。无论什么应用程序,构建正确的正则表达式的关键之处在于,识别仅满足需要匹配的数据的模式,以便在输入中排除其他不必要的内容。 出于这个目的,本文将逐步介绍几种正则表达式模式构建技巧,并介绍它们如何帮助您完成各种常规任务。 使用正则表达式 (regexp) 除非特别说明,否则本文中使用的示例都是扩展可移植操作系统接口(扩展 POSIX)的正则表达式。如果通过命令行(如使用 egrep 实用工具)使用它们,您应该根据需要引用各种正则表达式。请记住,不同的正则表达式实现之间存在一些区别,您可能不得不适应所使用的特定的工具、应用程序或语言中的具体实现。 匹配整行内容 ^ 元字符匹配行首,而 $ 匹配行尾,如果将它们组合在一起(如 ^$),它们将匹配空行。(这个表达式的镜像,即 $^,是不可能匹配成功的,它将永远 都无法匹配到有效行。)这个基本的正则表达式是许多复杂正则表达式的基础,如果您还不习惯使用这个基本的正则表达式,那么您应该逐步养成使用它的习惯。使用它来构建匹配整行内容 的模式。 在用户字典文件 (/usr/dict/words) 中搜索是一个很好的基本模式。(有些版本的 UNIX 将用户字典放在 /usr/share/dict/words 中。) 例如,假设您忘记了如何拼写单词 fuchsia。其中是否包含 sh 或 cs 呢?您所知道的只是,它以 fu 开头并以 ia 结尾。 尝试使用这个模式进行搜索: $ egrep -i '^fu.*ia$' /usr/dict/words -i 标志表示在搜索过程中不区分大小写。在这个示例中,因为 fuchsia 拼写正确,所以在返回的单词中包括这个单词。 根据长度匹配行 使用大括号元字符 ({ }) 指定前面的正则表达式匹配多少次,如表 1 所示。当您将它们添加到刚才介绍的整行搜索中时,您可以指定行的长度。 表 1. 大括号元字符的含义 示例 描述 {X} 这个字符对前面的正则表达式匹配 X 次。 {X,} 这个字符对前面的正则表达式匹配 X 或更多 次。 {X,Y} 这个字符对前面的正则表达式匹配至少 X 而不超过 Y 次。 并不是所有扩展正则表达式的实现都支持大括号。此外,根据具体的实现,您可能需要先使用反斜杠对其进行转义。 您可以使用这个正则表达式得到字典中以单词长度为顺序的报告。所获得结果的数目取决于本地系统的字典文件中单词的数目,然而,它应该与清单 1 所示类似。在这个示例中,最常见的单词长度是 9 个字母,该字典中有 32,380 个匹配单词。该字典中不包括 25 个字母或更长的单词,并且最长的单词并不是您认为的 21 个字母长的 disestablishmentarian(有 81 个同样长度的单词,包括 superincomprehensible 和 phoneticohieroglyphic),这个 UNIX 字典中最长的单词有 5 个,包括 pathologicopsychological。 清单 1. 计算字典中 X 个字母的单词的个数 $ for i in `seq 1 32` { echo "There are" `egrep '^.{'$i'}$' /usr/dict/words \ | wc -l` "$i-letter words in the dictionary." } There are 52 1-letter words in the dictionary. There are 155 2-letter words in the dictionary. There are 1351 3-letter words in the dictionary. There are 5110 4-letter words in the dictionary. There are 9987 5-letter words in the dictionary. There are 17477 6-letter words in the dictionary. There are 23734 7-letter words in the dictionary. There are 29926 8-letter words in the dictionary. There are 32380 9-letter words in the dictionary. There are 30867 10-letter words in the dictionary. There are 26011 11-letter words in the dictionary. There are 20460 12-letter words in the dictionary. There are 14938 13-letter words in the dictionary. There are 9762 14-letter words in the dictionary. There are 5924 15-letter words in the dictionary. There are 3377 16-letter words in the dictionary. There are 1813 17-letter words in the dictionary. There are 842 18-letter words in the dictionary. There are 428 19-letter words in the dictionary. There are 198 20-letter words in the dictionary. There are 82 21-letter words in the dictionary. There are 41 22-letter words in the dictionary. There are 17 23-letter words in the dictionary. There are 5 24-letter words in the dictionary. There are 0 25-letter words in the dictionary. There are 0 26-letter words in the dictionary. There are 0 27-letter words in the dictionary. There are 0 28-letter words in the dictionary. There are 0 29-letter words in the dictionary. There are 0 30-letter words in the dictionary. There are 0 31-letter words in the dictionary. There are 0 32-letter words in the dictionary. $ 匹配单词 围绕字符 \ 和 \ 是非常有用的模式构造器:它们将要匹配的整个单词 括起来,这表示,它们不会匹配带括号的模式,除非该模式本身就是一个单词。单词 定义为两侧由非单词字符描述的、任意数目组成单词的字符(数字、字母和下划线字符)。非单词字符包括下面的所有字符: •行首 •空白字符 •标点符号 •行尾 •任何除字母、数字或下划线以外的字符 这些围绕字符可以节省大量的时间,但是它们常常没有被充分地利用,可能是因为并非所有的正则表达式实现都支持它们。如果您的正则表达式实现支持它们,那么您应该逐步养成使用它们的习惯。 将需要单独匹配的单词括起来,如下所示: \system\ 这个示例中的正则表达式不会匹配单词 ecosystem、systemic 或 system/70,也不会匹配模式 system 出现在行中任意位置的那些行,它将仅仅 匹配 system 作为独立的单词出现的那些行。 围绕字符与圆括号中的分组结合在一起,可以用来匹配部分 单词。 要匹配包含以 pre 开头 的单词的那些行,可以使用: \\(pre\).*\ 前面的示例将匹配包含单词 preface 和 preposterous 的行,但不会匹配 spread 或 Dupre。 匹配重复单词 这里介绍一种使用单词围绕字符匹配重复单词的快速方法,重复单词表示一个单词在空格之后再次出现。您还可以使用逆向引用,这是大多数流行的正则表达式实现中的一种递归特性,它可以匹配模式本身的某一部分。(将模式中需要引用的部分使用圆括号括起来,然后使用反斜杠加上需要进行引用的围绕字符编号来调用逆向引用:1 表示第一个圆括号分组,2 表示第二个圆括号分组,依此类推。) 要查找重复的单词,搜索在任意数目的空格之后再次出现该单词的情况,可以通过对第一个使用圆括号的部分进行逆向引用来实现: (\.*\)( )+\1 这个示例匹配缩写形式和任何类型的单词,但是它不会匹配由标点符号分隔的重复单词,如 It's been a long, long time。 要匹配所有的重复单词,包括由空格和 任意标点符号分隔的重复单词,可以使用下面的表达式: (\.*\).?( )+\1 如果需要对这些正则表达式使用 grep,则务必使用 -i 标志,以便在搜索中不区分大小写。 匹配小时 让我们再来看另外一类常见的问题:时间和日期。这里介绍了一些设计匹配正确模式的正则表达式所需要考虑的事项。 您无法搜索任何两位的数字来匹配分钟和秒,因为它们仅仅是从 0 到 59,要匹配它们,您需要使用方括号将表示十位和个位的范围括起来: •要匹配标准的 12 或 24 小时格式的小时,可以使用下面的表达式: (( ? )|( )):( )(: )? •要匹配 12 小时 AM/PM 格式、带或不带秒数的时间,甚至匹配大写或小写、不带后缀 AM 或 PM 标识符的时间,可以使用下面的表达式: ( )( ? ){1}(((:( ){1}( ){1}){1,2})|(( )?( M)|( m)))? 如果在上一个示例中没有开始的否定语句,它将匹配不带冒号的时间,这将取决于输入数据,可能会匹配中波广播电台(在美国称为调幅 AM 电台),如 1450 AM。 匹配月份 匹配 12 个月中的任何月份需要一个使用 | 操作符进行分隔的列表,但有时会使用不同的方式对日期进行缩写: •要查找完整拼写或三字母缩写的 12 个月份,可以使用下面的表达式(位于一行): Jan(uary)?|Feb(uary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?| Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)? •您可以加以想象并搜索完整拼写或三字母缩写的变形,即仅当后面紧跟着一个空格或点号的情况,可以使用下面的表达式(位于一行): Jan(uary| |\.)|Feb(uary| |\.)|Mar(ch| |\.)|Apr(il| |\.)|May( |\.)|Jun(e| |\.)|Jul(y| |\ .)|Aug(ust| |\.)|Sep(tember| |\.)|Oct(ober| |\.)|Nov(ember| |\.)|Dec(ember| |\.) 请注意,在上面的这两个示例中,May 是一个特殊的例外。在所有的月份中,它是唯一的完整拼写与三字母缩写相同的月份,所以成功的匹配必须包含这两种变形中的任何一种 作为其缩写,因此像“Mayflower”这样的单词不会导致误报。 当匹配模式前面的字符不是空格或行首时,这些示例还是会失败(返回误报的结果)。这不太可能会出现在英语散文中,但是可能出现在程序源代码中,因为其中可能使用了像 NumOct 这样的变量名。 要修复这些问题,可以执行下面的操作: •使用圆括号将整个正则表达式括起来,并在它的前面加上另一个限定符,用于匹配行首或者空格字符,如下所示(位于一行): (^| )(Jan(uary| |\.)|Feb(uary| |\.)|Mar(ch| |\.)|Apr(il| |\.)| May( |\.)|Jun(e| |\.)|Jul(y| |\.)|Aug(ust| |\.)|Sep(tember| | \.)|Oct(ober| |\.)|Nov(ember| |\.)|Dec(ember| |\.)) •另一种完成这个任务的方法是,在该正则表达式的前面加上一个限定符,以匹配非文字数字的字符,如下所示(位于一行): ( )(Jan(uary| |\.)|Feb(uary| |\.)|Mar(ch| |\.)| Apr(il| |\.)|May( |\.)|Jun(e| |\.)|Jul(y| |\.)|Aug(ust| |\.)| Sep(tember| |\.)|Oct(ober| |\.)|Nov(ember| |\.)|Dec(ember| |\.)) 但是仍然存在潜在的问题,对于搜索整篇英文散文,这些示例并不可靠,因为它们可能返回错误的匹配结果,如“Janelle”或“Augury”这样的单词。要修复这个问题,您必须使用单词围绕字符将每个月份括起来。 本文开头提到,正确的正则表达式应该仅返回需要匹配的数据,以便在输入中排除其他不必要的内容。这种措词是经过仔细考虑的,因为对于构建正则表达式来说,这与上下文有关。对于有些情况,前面的示例非常适合,无需添加额外的单词围绕字符。在其他的情况下,可以对其进行相当程度的简化,例如,如果您正在搜索仅包含大写的日期数值数据的日志文件,那么只需要使用像 这样的正则表达式来匹配包含月份名称的行。 匹配日期 您可以结合一些表 1 所示的数量匹配来匹配日期。 要匹配“month, day, years”,可以使用下面的正则表达式(因为撇号字符是该正则表达式的一部分,所以必须使用双引号将它括起来,如下所示): " {3,10}\.? {1,2}, ( {4}|'? {2})" 这个正则表达式匹配 9 种不同的日期格式: 1.MONTH D, YY 2.MONTH D, 'YY 3.MONTH D, YYYY 4.MON. D, YY 5.MON. D, 'YY 6.MON. D, YYYY 7.MON D, YY 8.MON D, 'YY 9.MON D, YYYY 这个正则表达式的误报包括“Order 99, 99”,要消除这些误报,可以将这个正则表达式与用于月份的正则表达式结合起来,如上所述,以便能够仅匹配实际的月份名称。另外,更改数值范围以避免错误的匹配,并且通过使逗号成为可选项,重复了 18 种可能的格式。 这将得到一个很长的正则表达式。尝试下面的表达式: "( )(Jan(uary| |\.)|Feb(uary| |\.)|Mar(ch| |\.)| Apr(il| |\.)|May( |\.)|Jun(e| |\.)|Jul(y| |\.)|Aug(ust| |\.)| Sep(tember| |\.)|Oct(ober| |\.)|Nov(ember| |\.)| Dec(ember| |\.)) ? {1}(,)? ( {4}|'? {2})" 同样,根据您的需要仔细设计正则表达式。匹配模式通常比较容易,这是因为它存在于特定输入的上下文中,而不是因为它可能独立于数据集而存在。后代人将会发现,前面那个很长的正则表达式中仍然存在 Y10K 错误,因为它能匹配的最大可能的年份为 9999。 匹配整数 正如您在前几个示例中看到的,使用方括号中的范围可以很好地匹配数值。 要匹配任意长度的整数,可以在数值范围后面加上 +;要包括负值,可以在它的前面加上可选的负号(连字号)匹配: -? + 前面的例子可以匹配 0,因为 0 是指定范围中可选的字符。 对于数值匹配,使用圆括号将某些部分括起来也非常有效。要匹配任意的十进制数值,可以使用包含小数点加上一个或多个数值的可选围绕字符,以此对前面的正则表达式进行扩展: -? +(\. +)? 可以使用方括号指定十进制数值的小数位数。例如,要匹配小数位数为 5 或更多小数位数的正数值,可以使用下面的表达式: +\.( ){5,} 更多实际的匹配 范围加上使用括号括起来的元字符,在查找符合任何特定格式的数值时非常有用。将前面介绍的一些技术结合起来,可以构建匹配各种数据的正则表达式: •要匹配美国的电话号码,可以使用: ((\( {2}\))?\ ?| {2}(?:\-?|\ ?)) {2} ? {4} 这个正则表达式可以匹配美国 15 种格式的电话号码: 1.(NPA) PRE-SUFF 2.(NPA) PRE SUFF 3.(NPA) PRESUFF 4.(NPA)PRE-SUFF 5.(NPA)PRE SUFF 6.(NPA)PRESUFF 7.NPA PRE-SUFF 8.NPA PRE SUFF 9.NPA PRESUFF 10.NPAPRE-SUFF 11.NPAPRE SUFF 12.NPAPRESUFF 13.PRE-SUFF 14.PRE SUFF 15.PRESUFF 它还可以匹配美国免费 WATS 号码,尽管 1-800 的“1-”前缀或其他的免费号码不是匹配的一部分,但它本身可以匹配 10 位的数值。对于以 1 或 1+ 开头的美国号码和任意数目的空格,也完全一样,长途电话拨号前缀本身无法匹配,但是只要它后面跟着实际的号码,这个正则表达式就能够将其找出来。 •要匹配两或三位域的电子邮件地址,可以尝试下面的表达式: \ +\@ +?\. {2,3} •要匹配如今所有流行的 URL,可以使用下面的正则表达式: (((http(s)?|ftp|telnet|news)://|mailto:) ]+) 这个表达式可以正常运行,但是匹配 URL 并不像您想象的那么简单。匹配任何可能的 URL 的正则表达式,如 RFC 1738 中的定义,发表在“Regexp for URLs”(请参见参考资料部分)一文中,它非常巨大并且看起来令人生畏。现在应该将它合并为一个 类(如果有用于处理类似数据种类的各种新的类,如 ,那就好了)。 结束语 本文涉及到一些用于编写正则表达式的模式构建技术,以及如何使用它们来完成管理员时常碰到的特定类型数据匹配的工作。在此过程中,向您介绍了大量有价值的实际正则表达式,您可以将它们添加到自己的管理工具库中。 本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/yishengxiao/archive/2008/07/28/2723312.aspx
个人分类: 电脑、办公|0 个评论
[转载]云服务:降低风险,保持可用性
libing 2011-6-1 17:59
根据交付模型方案(SaaS、PaaS 或 IaaS),云服务安全策略关注云安全性的不同方面: 软件即服务 (SaaS) 策略主要关注对出租给消费者的应用程序的访问管理,无论消费者是个人、企业还是政府机构。黑客可能通过分配恶意实例资源的恶意软件攻击 SaaS 应用程序,策略应该降低这种风险。例如,一个应用程序允许得到授权的牙医助理在指定的办公时间段下载牙医记录,黑客可能把这个时间段恶意地改为早上很早的时候以便于攻击。 平台即服务 (PaaS) 策略主要关注保护数据,以及对在整个业务生命周期中由独立软件厂商、创业企业或大企业的部门创建和驻留的应用程序的访问管理。策略应该降低僵尸网络(botnet)使用 PaaS 作为命令和控制中心直接安装恶意应用程序(比如弄乱牙医记录)的风险。 基础设施即服务 (IaaS) 策略主要关注管理虚拟机,以及保护数据和管理对云环境中虚拟机底层的传统计算资源的基础设施的访问。这个策略应该实现治理框架以降低虚拟机面对的风险。僵尸网络曾经使用 IaaS 作为命令和控制中心直接恶意更新虚拟机的基础设施。 本文简要讨论云服务安全问题的重要方面,然后描述风险评估和降低风险的步骤。 云服务安全性 云服务安全性会受到以下方面的威胁: 有缺陷的虚拟化系统管理程序(hypervisor)、缺少阈值策略、膨胀的负载均衡、不安全的密码技术,我们来详细讨论每一项。 有缺陷的虚拟化系统管理程序 所有类型的云服务都在虚拟机上运行,虚拟机在底层的虚拟化系统管理程序上运行,虚拟化系统管理程序允许多个操作系统共享同一硬件主机。不同信任级别的群体访问这些服务:用户、租用者和云管理员。例如,一个租用者可能签订包含 1000 个用户许可证的合约以访问某个 SaaS。 如果虚拟化系统管理程序有缺陷或被攻破了,那么所有实例资源和数据请求队列就都暴露了。攻击者可以恶意地影响阈值策略;阈值策略用于在工作负载高峰期间监视实例资源的消耗和数据请求队列 。对虚拟机之间通信所用的内部虚拟网络的控制不够明确,难以实施安全策略。对虚拟机的网络和安全控制职责可能没有很好地分隔。 黑客可以伪装成具有管理控制权的高特权用户,控制虚拟机,然后在虚拟化系统管理程序上执行恶意程序。例如,他可以访问目录文件以及恶意地为另一个虚拟机重新分配实例资源。他可以破坏在相同虚拟机上的租用者之间隔离存储、内存和路由的机制。 黑客可以从虚拟机中重新分配的实例资源中获取还没有清除的残留数据,从中窃取敏感的信息。黑客可以利用有缺陷的系统管理程序识别健康的虚拟机的邻居并监视它们的活动。他可以进入邻居的虚拟机并在 PaaS 应用程序中添加恶意代码。 缺少阈值策略 在使用服务之前,最终用户应该评估服务提供商的安全策略。需要对比云计算与内部环境的安全状况,确保云服务安全策略包含 实例资源、用户和数据请求阈值策略。资源阈值策略用于监视在工作负载高峰期间额外消耗的实例资源量。用户阈值策略检查同时登录和退出云服务的用户数量,以及用户数量是否正在接近许可证指定的最大用户数量。如果不建立这些策略,会有以下风险: 如果没有资源阈值策略,就无法知道实例资源是否达到总容量,这会导致云服务提供商在不发出警告的情况下关闭服务。 如果没有用户阈值策略,就无法知道当前的用户数量是否接近最大数量,以及有多少用户在使用完云服务之后没有退出。黑客可以识别这些用户。 如果没有数据请求阈值策略,就无法知道数据请求队列的大小。黑客可以用恶意数据请求(比如 SQL 注入的请求)淹没队列,造成这些队列达到最大容量。 膨胀的负载均衡 负载均衡用于分发实例资源和数据请求。例如,每个实例资源的负载应该不超过容量的 50%,这样如果一个实例出现故障,健康的实例可以接管失败的实例的业务事务。每个队列的数据请求负载应该不超过队列容量的 50%,这样如果一个队列出现故障,健康的队列可以接管原本发给失败的队列的数据请求。如果虚拟机中的恶意软件破坏了实例资源的负载均衡,就可以用恶意事务淹没这些资源,导致每个资源达到容量的 100%。不可能把业务事务从失败的资源实例转移到健康的实例。膨胀的负载均衡无法实现故障转移机制,比如实例资源或负载共享冗余。 不安全的密码技术 需要用某种形式的加密技术保护数据的机密性和完整性。即使数据不是敏感数据或个人数据,在云中传输和操纵数据时也应该用密码技术加以保护。黑客可以利用密码分析技术或恶意的实例资源破解密码算法。他们可以寻找密码算法中的缺陷,然后恶意修改它们,让强的加密算法变弱。黑客还可以查明密码算法的最新版本,然后在自己的计算机上执行反向工程以了解算法的工作过程。 降低云服务的风险 可以按经济有效的方式通过应用安全控制降低风险,从而降低黑客攻破资产的漏洞并威胁到实现的可能性。 在尝试降低风险之前,需要识别要保护的资产。最简单的风险评估过程如下: 1、识别资产,2、分析风险,3、应用安全对策,4、执行运行后或事件后评估。 要记住的关键概念是,在任何阶段都可以再次执行前面的步骤,从而加入新增的或原来没有发现的变量。 首先识别资产 — 硬件、软件、网络组件、个人、用户、文档和设备;这些和其他资产是云服务的直接组成部分。在识别资产之后,尝试分析风险;在此期间,如果发现遗漏了某些资产,随时可以重复第一步以更新资产集,然后重复第二步。 如果在执行第三步(应用安全对策)期间发现没有考虑到某些风险,可以返回到第二步,分析这些风险,判断每个风险的潜在损失或发生的可能性。可以从第三步返回到第一步以更新要保护的资产集。 在第四步中,定期地重新评估风险,因为新的风险、安全控制措施、基础设施技术和法律会影响安全状况。 我们来详细讨论每个步骤。 步骤 1. 识别资产 云消费者和提供商需要识别硬件和软件资产,估算更换每个资产的成本。他们应该维护并定期更新资产集,当出现组织重组、能源效率更高的技术、更好的故障转移机制和新的数据私密性法律时,资产集可能会发生变化。 当使用 PaaS 模型和 IaaS 模型时,消费者有更多的控制能力,但是如果向 SaaS 提供商租用服务,消费者需要识别的硬件和软件资产要少得多。 现在,看看对于每个云服务类型需要识别的资产。 SaaS 资产 因为云消费者具有的控制能力只是从他的桌面、笔记本电脑或移动设备访问应用程序,所以他需要识别的资产只有移动设备操作系统、应用程序和默认程序。因此,把设备资产集限制为使用 SaaS 所需的程序是很重要的。把个人使用的程序(比如下载的游戏)与访问 SaaS 所需的程序放在同一设备上是不合适的。云提供商至少应该控制以下资产:操作系统、硬件、网络基础设施、访问管理应用程序、实例资源、SaaS 应用程序升级和补丁。消费者不负责识别它们。 PaaS 资产 云消费者需要识别的资产就是他们能够控制的资产:平台的整个业务生命周期中的所有应用程序(例如电子表格、文字处理、备份、帐单、工资处理、发票处理)。在 PaaS 模型中,云提供商至少应该控制以下资产:操作系统、硬件、网络基础设施、实例资源。云消费者不负责识别这些资产。 IaaS 资产 云消费者需要识别的资产就是他们能够控制的资产:操作系统、网络设备以及在虚拟机级部署的应用程序。消费者可以增加或减少实例资源和虚拟服务器的数量或存储区域块。云消费者无法控制基础设施和底层组件。提供商需要识别这些资产。 步骤 2. 分析风险 风险就是黑客利用云服务的漏洞可能导致的损失或发生这种情况的可能性。如果不应用经济有效的对策,云服务就很容易受到漏洞的影响,黑客可能利用漏洞发起攻击。 风险可能给资产带来的损失取决于风险对每个资产的影响(例如,对于总是可用的文档资产,没有影响;对于云环境中的实例资源资产,如果没有足够的保护措施,影响可能非常大)。风险可能给资产带来的损失还取决于威胁出现的频繁程度。 如何利用漏洞 我们通过一个简单的示例看看黑客如何综合利用以下漏洞发起对实例资源资产的攻击。这些漏洞是: 应用程序缺少阈值模块、在实例资源中残留的数据、在虚拟化网络中基于网络的控制不足、对特权用户的监视不足。 好的应用程序划分为模块,模块相互交互以执行一个或一系列任务;这意味着开发人员很容易通过重用现有模块或添加新模块修改应用程序。如果应用程序缺少阈值模块(它设置实例资源的最大容量和数据请求的数量),消费者和提供商就无法知道实例资源或数据请求是否已经达到限制。他们无法知道黑客是否在驻留健康虚拟机的物理服务器上创建了恶意虚拟机,等他们发现时已经太晚了(例如已经发生了拒绝服务攻击)。黑客可以用恶意实例资源和恶意数据请求淹没恶意虚拟机的邻居,由此实现拒绝服务攻击。他们诱使受害者增加虚拟机数量,直到达到物理服务器的最大容量。 如果以前分配的实例资源在没有完全清除数据的情况下重新分配给相同或不同的用户,就会出现残留的数据。实例资源包括内存、缓存、进程、会话、阈值和存储资源。黑客可以在实例资源中寻找受害者的个人信息。 如果网络级的安全控制在 IaaS 网络基础设施中无效,就会出现在虚拟化网络中基于网络的控制不足。这会限制得到授权的管理员对基础设施的访问。IaaS 管理员无法在虚拟网络中应用基于 IP 的网络分段等标准控制措施,黑客可以利用这一情况。IaaS 提供商可能不允许基于网络的漏洞扫描,因为他们无法区分善意的网络扫描和攻击活动。区分真实网络与虚拟网络上的通信流的控制也不足(例如,同一服务器上的系统管理程序上两个或更多虚拟机之间的通信)。 如果提供商对黑客的恶意活动没有进行足够的监视,就会出现对特权用户的监视不足。在这种情况下,黑客可能伪装成具有管理访问权的特权用户,从系统管理程序获得对虚拟机的访问权。例如,具有这种访问权的黑客可以创建恶意的实例资源和数据请求队列,而提供商无法发现他们在做什么。另一个示例是把健康虚拟机的实例资源恶意地重新分配给另一个虚拟机。 对漏洞的严重性进行分级 当然,您必须开发自己的分级系统,对不同类型的漏洞的潜在损失进行分级。我按照以下优先级对各种漏洞的潜在损失进行分级: 黑客如何进入、他在寻找什么、他有什么工具。 例如,黑客可以伪装成具有管理访问权的特权用户进入系统并执行恶意操作,而真正的系统管理员不会马上注意到。黑客还可以通过发送 SQL 注入找到文件名,然后寻找这些文件中的残留数据。 黑客进入虚拟机之后,他可以使用黑客工具启动恶意的网络扫描攻击活动,并把这些活动伪装成善意的网络扫描。攻击活动包括列出每个应用程序中的模块。如果黑客发现应用程序没有包含阈值模块,就可以通过使用或创建工具分配实例资源,直到达到最大容量。 步骤 3. 应用安全对策 安全评估的下一步在概念上相当简单,但是与许多事情一样,真正做起来有点儿困难 — 判断降低风险的对策是否经济有效,即实现对策的好处是否超过成本。应该降低黑客利用漏洞的可能性,同时提高 ROI。 有一点很重要:如果发现对策不是经济有效的,那么仍然会残留一些风险,无法降低这些风险。您需要学会承受它们,而不是花更多的钱解决它们。这是风险评估和应对中最不容易让人接受的概念之一:降低某些风险的成本太高,与它提供的好处相比不值得。 但是,如果有过多残留的风险 而且经济有效的对策太少,由于几个原因您应该重复风险评估步骤: 如果这是您在风险评估和应对方面最初的尝试之一,您可能希望重复风险评估步骤,以此提高识别资产、分析和了解风险以及判断对策的广度和深度及应用方法的技能。 还希望随时关注经济有效的新对策和云基础设施技术。 另外,如果购买保险比实现对策便宜的话,应该考虑通过购买保险转移一些残留的风险。 本文中提到的示例可以采用以下对策: 确保建立实例资源、用户和数据请求阈值策略。 在重新分配实例资源之前,彻底清除其中的残留数据。 实现故障转移机制、业务连续性和灾难恢复计划。 监视特权用户;检查这些用户的背景和登录活动,监视物理服务器、网络和其他基础设施组件的状态。 向消费者和提供商说明降低风险的对策的好处。 步骤 4. 执行后期评估 应该每三年进行一次风险评估。如果出现以下情况,可能需要更频繁地重新评估风险: 出现了新的云服务技术,它们可能影响软件、硬件和网络资产。 出现了新漏洞和新威胁。 出现了新的对策,它们可以有效地降低以前残留的风险。 想出了降低风险的新方法。 组织的变化(比如合并)对所有类别的资产产生了重大影响。 法律和法规出现了重大变化。 实际上,如果您负责组织的云服务的风险评估和应对,可能应该每周检查一次这些方面的信息。可以考虑通过新闻 feed 了解新的威胁和漏洞。 结束语 降低云服务的风险并保持高可用性需要前瞻性的风险计划,从而解决相关的问题,包括对于每个云类型要识别什么资产、要分析什么风险、哪些对策是经济有效的以及在降低风险 之后要评估什么。开发人员、用户和业务分析师需要相互协作以降低云服务的风险。团队会发现解决这些问题会让降低云服务风险的工作容易得多。
个人分类: 云与服务|2243 次阅读|1 个评论
[转载]移动云计算及开发应用程序的发展与变革
libing 2011-6-1 17:49
  新一代的信息服务将浏览器和设备视为同样的客户端。目前所面临的挑战是如何建立其这样的服务。   是否能利用本机代码开发移动应用程序或者利用诸如HTML和JavaScript等Web技术来进行部署?开发商们就此问题一直存在着分歧。   史蒂夫·乔布斯最初建议iPhone的开发人员们能够按照需要通过设备内置的浏览器部署任何应用程序。但那是在苹果公司推出了业界领先的iTunes应用程序商店之前。   从那时起,甚至网站的建立都往往选择利用本机应用程序向移动设备发布并提供他们的内容,而不是简简单单的试图将其硬塞进手机浏览器上。尽管在HTML5上有所改进,许多开发商仍然觉得针对智能手机和上网本的网络技术独特需求不足。   如果这是真的,那么,现在已经是时候让我们好好反思一下在线信息服务是如何进行开发和部署的了。在过去,发展商往往是首先兴建网站,然后再为移动应用程序改编相同的内容。但在如今的市场上,移动设备越来越多的成为用户上网的主要手段,之前的做法无疑可以说是相当落后的了。   我们需要的是移动设备的发展变革,类似于我们早期在Web应用程序发现的那样。第一批企业级Web应用程序只是将代码由传统大型机输出到了浏览器,使其看上去漂亮一些。但是,随着基于浏览器的计算变得日渐规范,应用程序逻辑移出主机和HTML输出成为主要目标。移动设备应用程序正在经历同样的转变。下一代的信息服务会将桌面浏览器和移动应用设备视为同样的客户端,同一逻辑应用程序将为这二者提供内容。   同样重要的是,在同一时间,这种转变在另一个重要的领域IT行业也发生着巨变,其正在向云计算方向大步迈进。随着平台即服务(PaaS)产品的日趋成熟,越来越少的信息服务提供商还在他们的私人基础设施上提供主机应用程序。   连接设备到云   对于应用程序开发人员来说,同时管理如此众多的应用程序的迁移绝对可以说是一项相当艰巨的任务。庆幸的是,平台供应商已经提供了相关的工具,使尽可能轻松的过渡到混合网络/移动应用程序。   近期,在旧金山举行的谷歌I/O开发人员大会上,这家搜索引擎巨头推出了其新的测试版本的谷歌插件Eclipse 平台(GPE)。该工具能够允许开发人员创建、测试,并上传应用程序到谷歌的应用程序引擎云平台(Google App Engine),所有的都是利用Java语言Eclipse IDE集成开发环境。   GPE的早期版本可以让开发人员利用集成支持为谷歌网页工具包(GWT)建立应用程序引擎,这是一个框架,用于创建复杂的基于Web的UI。新的2.4测试版GPE新增加了对Android应用程序的支持。实际上,开发人员可以为引擎应用构建应用程序逻辑,然后同时为Web和移动客户端生成I/O代码。   同样,微软也将其Windows Azure定位为一款移动应用程序的后端云平台。与人们所期望的相反的是,其不是仅仅限于为Windows Phone 7的操作系统而服务。新的Windows Azure工具包将适用于苹果IOS设备和Android设备。   很容易看出微软的雄心壮志。虽然IOS是目前最顶级的移动平台之一,远远超过Windows Phone 7,但苹果公司到目前为止,尚未推出一款可以和微软的Windows Azure、谷歌的Google App Engine、以及亚马逊的弹性计算云服务Elastic Compute Cloud相抗衡的云计算平台。该传闻说苹果可能正在研发相关产品,但除非iPhone的制造商们加快动作,否则,微软很有机会作为移动后端应用服务提供商赢得IOS。   未来的挑战   是否能利用本机代码开发移动应用程序或者利用诸如HTML和JavaScript等Web技术来进行部署使用?似乎看来是两者皆可。你可以投身到混合云平台。虽然这是一个好主意,但是,开发商必须意识到目前的移动应用程序云架构是一个重要的陷阱。   首先,目前在云基础设施上托管的任何应用程序都存在着一定的风险。至少存在中断的风险,这可能会削弱云备份应用程序。到目前为止,还没有云计算平台被证明是百分之百可靠的,亚马逊、谷歌和微软的用户都出现过中断。   同样重要的是,越来越多的开发人员抱怨移动平台供应商的“围墙花园”,云计算平台的用户还可能被供应商锁定。大型数据存储服务之间的移动可以说是非常具有挑战性,而且在许多情况下应用程序逻辑在提供商之间迁移的时候往往需要进行调整。 相当多的企业正在积极努力购买部署互操作性云计算服务 ,包括Apache软件基金会和美国电气和电子工程师协会(IEEE),但这些努力是不成熟的,几乎没有诱因促使云供应商们本身开展互助合作。   但最大的挑战可能是简单地寻找可以成功地开发云和移动开发程序的供应商。上述两种方法都相对较新。特别是移动开发人员的需求会持续不断的提升,许多公司都是通过采用外包或昂贵的再培训,以获得用于创建移动应用程序所需的技能。而想要找到建立了方便企业熟练应用的云平台的移动开发商似乎就显得要求要高得多了。   当然,对目前的项目经理们来说,想要招聘到新的人才貌似前景不容乐观,而聪明的开发商应该敞开大门。应用程序的开发也正在发生改变。再次重申,时间将证明一切。 原文链接: http://cloud.chinabyte.com/351/12090351.shtml
个人分类: 云与服务|2320 次阅读|0 个评论
VC6.0将程序打包成一个可执行文件
热度 1 dishengbin 2011-5-4 08:40
想用VC6.0生成一个可执行的.exe文件,但方法自己总是记不住,每次都需要Google。 一般情况下在编译之后的Debug文件中文生成一个.exe文件,但是该文件双击后立马消失。 为了下次的使用方便,把其设置粘贴至此: (1)控制台应用程序 首先打开程序,工程—设置,左侧下拉列表选择Win32 Release,右侧"Microsoft 基础类",不选择,确定。 然后选择组建—批组建,去掉debug前面的钩,保留release前面钩,确定,完成。完成之后会在主目录下生成Release文件夹,里面的exe文件拷出来可以独立运行。 (2)MFC程序 首先打开程序,工程—设置,左侧下拉列表选择Win32 Release,右侧"Microsoft 基础类",选择“使用MFC作为静态链接库”,确定。 然后选择组建—批组建,去掉debug前面的钩,保留release前面钩,确定,完成。 完成之后会在主目录下生成Release文件夹,里面的exe文件拷出来可以独立运行。
2509 次阅读|0 个评论
热度 1 zhudingju 2011-4-29 10:23
天 2011-4-29 天在眼里并不大,但没有谁知道天有多大 天下有很多看不见的蚂蚁,但蚂蚁能看见自己 蚂蚁在迷茫地,却不知迷茫地奔波 蚂蚁在无所谓快乐也无所谓不快乐地,却有时快乐地有时不快乐地奔波 蚂蚁在无所谓有意义也无所谓无意义地,却有时高昂有时失落地奔波 蚂蚁汗流浃背地奔波,囤积了很多在他们看来最重要的利 蚂蚁不厌其烦地舞动触角,争取在他们看来最重要的名 蚂蚁就像计算机代码一样,只要不按停机就会永不停息 蚂蚁就像计算机代码一样,似乎主宰着数据,却始终与数据分离 天下有很多蚂蚁看不见天 能看见天的蚂蚁没有时间停下来看看天 只有几只懒惰的能抬头看天的蚂蚁看见了天 古代有,现代也有 东方有,西方也有 有的蚂蚁看见了天书 有的蚂蚁看见了天路 看见天书的蚂蚁把天书告诉了其他蚂蚁,其他蚂蚁觉得没有用,如同计算机中的协议规范没有应用程序想去遵从 看见天路的蚂蚁把天路告诉了其他蚂蚁,其他蚂蚁开始捉摸如何上天折腾,如同计算机中的应用程序想控制操作系统 也许有一天,蚂蚁能真正看懂天,到那一天,蚂蚁会发现,天一直在任何地方 也许有一天,蚂蚁能真正看懂天,到那一天,蚂蚁会发现,懂它不一定要控制它,爱它不一定要占有它 也许有一天,蚂蚁能真正看懂天,到那一天,蚂蚁会停下奔波的脚步,与云一样悠然自得,与水一样源远流长
2310 次阅读|0 个评论
[转载]如何在MFC程序中使用Open Inventor
zhangbanglei 2011-3-14 17:52
本文将介绍如何在MFC程序中使用Open Inventor(以下简称OIV)开发库。文中将使用VC 2003作为开发环境,使用SIM公司( www.coin3d.org )公司提供的Coin3D OIV作为Open Inventor开发库。关于OIV在Visual C++中的设置,请阅读网站 “Open Inventor-Coin3D开发环境” 中的内容。 1.创建工程 首先启动VC 2003,使用MFC Wizards创建一个MDI 应用程序(本文只讨论MDI类型的应用程序,但SDI或Dialog程序只需要稍微做一些修改,也是同样可以使用OIV的)。我们假定MDI应用程序的名称叫做“MFCViewer”。 2.增加Coin和SoWin代码 1. 打开MFCViewer.cpp文件,在文件开始部分增加下列头文件: #include Inventor/Win/SoWin.h 编辑CMFCViewerApp::InitInstance(),在函数中增加上: SoWin::init(""); 这行代码将初始化SoWin和Coin库,必须在调用任何Coin或SoWin函数之前调用这行代码。 2. 打开MFCViewerView.h文件,增加下列头文件列表(增加到预编译头文件-#ifdef/#pragma once/#endif 序列之后) #include Inventor/Win/SoWin.h #include Inventor/Win/viewers/SoWinExaminerViewer.h 增加一个公共数据成员变量 SoWinExaminerViewer * viewer; SoWinExaminerViewer主要用于渲染我们的场景,以可以和显示的内容做交互式操作(像旋转物体,选择部分场景等) 3. 打开MFCViewerView.cpp文件,修改构造函数: CMFCViewerView::CMFCViewerView() { viewer = NULL; } 修改析构函数: CMFCViewerView::CMFCViewerView() { if (viewer != NULL) delete viewer; } 3.创建场景 我们希望当用户创建了一个新文档后(点击菜单File | New),新创建的窗口中会有一个OIV场景。 1. 打开MFCViewerDoc.h文件,在CMFCViewerDoc类定义之上增加下列代码: class SoSeparator; 这行代码主要是告诉编译器,我们要使用一个叫做SoSeparator的类。 2. 向CMFCViewerDoc类增加一个公共数据成员变量: SoSeparator *root; 这是我们场景的根节点。 3. 打开MFCViewerDoc.cpp文件,增加下列头文件: #include Inventor/nodes/SoSeparator.h #include Inventor/nodes/SoMaterial.h #include Inventor/nodes/SoCone.h #include Inventor/nodes/SoTranslation.h #include Inventor/nodes/SoText2.h 这些都是我们准备在场景中使用的节点,因此需要首先包含它们的头文件。 4. 修改函数OnNewDocument() BOOL CMFCViewerDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; root = new SoSeparator; root-ref(); SoMaterial *myMaterial; root-addChild(myMaterial = new SoMaterial); myMaterial-diffuseColor.setValue(1.0, 0.0, 0.0); root-addChild(new SoCone); SoSeparator * instructsep = new SoSeparator; root-addChild(instructsep); instructsep-addChild(myMaterial = new SoMaterial); myMaterial-diffuseColor.setValue(0.5, 1.0, 1.0); SoTranslation * instructtrans = new SoTranslation; instructtrans-translation = SbVec3f(-2.0f, 1.3f, 2.0f); instructsep-addChild(instructtrans); SoText2 * instructions = new SoText2; const char * str[] = { "Instructions for the MFCViewer tutorial", "", "Left mouse button = rotate", "Middle mouse button = move", "CTRL + middle mouse button = zoom", "Right mouse button = options" }; instructions-string.setValues(0, sizeof(str) / sizeof(char *), str); instructions-justification = SoText2::LEFT; instructsep-addChild(instructions); return TRUE; } 我们通过向根节点增加子节点来建立场景。请记住,OIV会自己删除所有的场景对象,因此这里不需要程序员记住这些对象的指针,在以后的时候删除它们。(事实上如果这样做将会发生内存错误)。OIV是通过一种叫做引用计数的技术来实现这个功能的。 5. 修改构造和析构函数,增加上下列代码: CMFCViewerDoc::CMFCViewerDoc() { root = NULL; } CMFCViewerDoc::~CMFCViewerDoc() { if (root) root-unref(); } 调用root-unref(),告诉OIV,我们已经不再使用根节点对象了。所以OIV将会自动删除根节点。 6. 打开MFCViewerView.cpp文件,增加上下列代码: #include Inventor/nodes/SoSeparator.h 修改函数CMFCViewerView::OnDraw(CDC* pDC): void CMFCViewerView::OnDraw(CDC* pDC) { CMFCViewerDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (viewer == NULL) { viewer = new SoWinExaminerViewer( m_hWnd ); viewer-setDecoration(FALSE); SoSeparator *root = GetDocument()-root; viewer-setSceneGraph(root); } } 上面的代码将WinExaminerViewer嵌入到CMFCViewerView窗口中,其中WinExaminerViewer四周的 Toolbar(即Decoration)是不显示的。 编译并执行此应用程序 本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/robinhao/archive/2007/09/03/1770580.aspx 本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/robinhao/archive/2007/09/03/1770580.aspx
2826 次阅读|0 个评论
老外收集的windows软件替代品[转载]
osos 2009-8-27 19:47
老外收集的windows软件替代品 The Linux Equivalent Project Welcome to the Linux Equivalent Project. The goal is to provide an informational and available website for all linux users. The website is currently in beta form. I will be periodically updating the database with Windows software and the Linux equivalents and alternatives. http://www.linuxeq.com/ Comments and suggestions: submit@linuxeq.com . Read my blog about the site. New! There is now a form for submissions here. Windows Software Linux Equivalent 3D Studio Max Blender ( http://www.blender.org/ ) Adobe Audition Audacity ( http://audacity.sourceforge.net/ ) Adobe Illustrator Inkscape ( http://www.inkscape.org/ ) Karbon14 ( http://www.koffice.org/karbon/ ) Xara Xtreme for Linux ( http://www.xaraxtreme.org/ ) Adobe PageMaker Scribus ( http://www.scribus.net/ ) Adobe PhotoAlbum F-Spot ( http://f-spot.org/Main_Page ) digiKam ( http://www.digikam.org/ ) Adobe Photoshop Krita ( http://www.koffice.org/krita/ ) GIMP ( http://www.gimp.org/ ) Adobe Premier LiVES ( http://lives.sourceforge.net/ ) Kino ( http://www.kinodv.org/ ) Cinelerra ( http://cvs. cinelerra .org/ ) kdenlive ( http://kdenlive.sourceforge.net/ ) AOL Instant Messenger (AIM) Kopete ( http://kopete.kde.org/ ) Gaim ( http://gaim.sourceforge.net ) APC PowerChute Apcupsd ( http://www.apcupsd.com/ ) PowerD ( http://power.sourceforge.net/ ) CDex Sound Juicer ( http://www.burtonini.com/blog/computers/sound-juicer ) Rubyripper ( http://wiki.hydrogenaudio.org/index....tle=Rubyripper ) Grip ( http://nostatic.org/grip/ ) Dreamweaver Quanta Plus ( http://quanta.kdewebdev.org/ ) Nvu ( http://www.nvu.com/index.php ) Screem ( http://www.screem.org/ ) Bluefish ( http://bluefish.openoffice.nl/index.html ) DVDShrink k9copy ( http://k9copy.sourceforge.net/ ) OGMRip ( http://ogmrip.sourceforge.net/ ) Thoggen ( http://thoggen.net/ ) xdvdshrink ( http://dvdshrink.sourceforge.net/ ) qVamps ( http://vamps.sourceforge.net/ ) dvd::rip ( http://www.exit1.org/dvdrip/ ) AcidRip ( http://untrepid.com/acidrip/ ) FruityLoops LMMS ( http://lmms.sourceforge.net/ ) Hydrogen ( http://www.hydrogen-music.org/ ) iTunes Banshee ( http://banshee-project.org/Main_Page ) SongBird ( http://www.songbirdnest.com ) Exaile ( http://www.exaile.org/ ) Amarok ( http://amarok.kde.org/ ) Legacy Family Tree GRAMPS ( http://gramps-project.org/ ) Microsoft Frontpage Quanta Plus ( http://quanta.kdewebdev.org/ ) Nvu ( http://www.nvu.com/index.php ) Bluefish ( http://bluefish.openoffice.nl/index.html ) Microsoft HyperTerminal minicom ( http://alioth.debian.org/projects/minicom/ ) GtkTerm ( http://freshmeat.net/projects/gtkterm/ ) Microsoft Internet Explorer Opera ( http://www.opera.com/download/ ) Firefox ( http://www.mozilla.com/firefox/ ) Konqueror ( http://www.konqueror.org/ ) Microsoft Office KOffice ( http://www.koffice.org/ ) OpenOffice ( http://www.openoffice.org/ ) Microsoft Outlook (Express) Thunderbird ( http://www.mozilla.com/thunderbird/ ) Evolution ( http://www.gnome.org/projects/evolution/ ) Microsoft Project Planner ( http://live.gnome.org/Planner ) Microsoft Visio Dia ( http://www.gnome.org/projects/dia/ ) Kivio ( http://www.koffice.org/kivio/ ) Microsoft Windows Media Center Freevo ( http://freevo.sourceforge.net/ ) Elisa Media Center ( http://www.fluendo.com/elisa/ ) MythTV ( http://www.mythtv.org ) mIRC BitchX ( http://www.bitchx.org/ ) Xchat ( http://www.xchat.org/ ) ChatZilla! ( http://chatzilla.hacksrus.com/ ) irssi ( http://www.irssi.org/ ) Gaim ( http://gaim.sourceforge.net ) Mp3tag EasyTAG ( http://easytag.sourceforge.net/ ) Audio Tag Tool ( http://pwp.netcabo.pt/paol/tagtool/ ) MSN messenger aMSN ( http://amsn-project.net/ ) Gaim ( http://gaim.sourceforge.net ) Nero Burning Rom X-CD-Roast ( http://www.xcdroast.org/ ) Brasero ( http://perso.orange.fr/bonfire/index.htm ) GnomeBaker ( http://gnomebaker.sourceforge.net/ ) K3b ( http://www.k3b.org/ ) NetMeeting Ekiga ( http://www.gnomemeeting.org/ ) NetStumbler SWScanner ( http://www.swscanner.org/ ) Notepad gedit ( http://www.gnome.org/projects/gedit/ ) Scribes ( http://scribes.sourceforge.net/ ) tpad ( http://tclpad.sourceforge.net/ ) Quicken KMyMoney ( http://kmymoney2.sourceforge.net/ ) GNUcash ( http://www.gnucash.org/ ) Gnofin ( http://gnofin.sourceforge.net/ ) Grisbi ( http://www.grisbi.org/ ) SoulSeek Nicotine ( http://nicotine.thegraveyard.org/ ) Nicotine-Plus ( http://nicotine-plus.sourceforge.net/ ) Winamp XMMS ( http://www.xmms.org/ ) Windows Movie Maker LiVES ( http://lives.sourceforge.net/ ) Avidemux ( http://fixounet.free.fr/avidemux/ ) Cinelerra ( http://cvs. cinelerra .org/ ) kdenlive ( http://kdenlive.sourceforge.net/ ) WS_FTP gFTP ( http://gftp.seul.org/ ) FireFTP ( http://fireftp.mozdev.org/ ) ZoneAlarm Firestarter ( http://www.fs-security.com/ )
个人分类: 生活点滴|9922 次阅读|0 个评论
Linux下推荐应用程序列表【2008-07-24】(转自水木)
osos 2009-7-27 10:40
发信人: zhlyang (庄稼汉玩Linux), 信区: LinuxApp 标 题: Linux下推荐应用程序列表【2008-07-24】 发信站: 水木社区 (Mon May 12 12:04:21 2008), 站内 发信人: cyb (想去欧洲), 信区: LinuxApp 标 题: Linux下推荐应用程序列表【2008-07-31】 发信站: BBS 水木清华站 (Thu Aug 12 11:28:41 2004), 站内 * 特殊软件: windows下访问ext2fs, ext3fs: http://www.ext2fs-anywhere.com/ http://fs-driver.org/ 修复分区表:Disk Genius(原名DiskMan), diskfix 分区大小调整:parted,gparted(分区大小无损调整) * 批量更改文件名:rename (可能位于rename这个软件包) * 媒体播放: 1)mplayer/totem-xine + w32codecs,vlc 2)rm影片:realplayer11 for linux, mplayer 3)mp3: amarok, Audacious, beep media player, Banshee,MPD, songbird,moc 4)ape: xmms+monkey's audio plugin( http://supermmx.org/linux/mac/ ) http://www.sourceforge.net/projects/mac-port/ 5)cue支持:amarok,audacious 6)其他格式(wma, wmv, mkv, quicktime): mplayer * 各种格式的文档和文件 1)打开微软的office文档: openoffice wvware( http://wvware.sourceforge.net/ ) 2)查看pdf文件: evince, xpdf, acroread for linux, ggv, epdfview, okular 3)查看ps文件: gsview, ggv, kghostview 4)chm文件: archmage,chmsee, Xchm,kchmviewer, chmreader, gnochm 5)mht文件: ripmime,firefox+MAF插件,opera 6)图表绘制: dia, OpenOffice.org draw 7).bin虚拟光盘: 用bin2iso或bchunk转成iso后mount 8)压缩文件 .rar: rar for linux或unrar .zip: unzip .bz2: bunzip2 .tar/.tgz: tar .jar/.xpi: ark .deb:ar * 中文输入法: scim-pinyin,scim-python, fcitx, ibus-pinyin, fitx, sun-pinyin * BBS软件:qterm, fqterm, pcmanx-gtk2 {rxvt,xterm,gnome-terminal,...}+BBSbot * 即时通讯: 1) QQ: lumaqq, pidgin, eva, qq4lin 2) MSN: eMeSeNe, kopete, kmess, amsn 3) icq,yahoo: pidgin, kopete 4) skype 5) IRC: xchat, chatzilla, irssi, erc(emacs插件), konversation, weechat 6) 飞信:linux-fetion(libfetion) * web浏览器:mozilla-firefox, opera, konquerer, epiphany, midori * ftp客户端(图形界面) :gftp, Iglooftp, filezilla,kuftp,kftpgrabber * ftp客户端(终端) : lftp, ncftp * ftp服务器: pureftpd, proftpd(gproftpd), vsftpd * http下载: wget, aria, curl, prozilla, axel, DownloadThemAll(Firefox插件), Multiget * bt下载: bittorrent(终端), azureus(图形界面),mldonley(多协议支持), ctorrent * 电驴下载:amule、mldonkey * email软件(图形界面):thunderbird, sylpheed, evolution, opera M2, kmail * email终端:claws-mail, mutt, alpine, gnus * RSS:liferea * SMTP client: msmtp, esmtp * 编辑器 1) 文本: vim, emacs, jedit, nedit, gedit, kate, lyx, geany 2) 16进制: hexedit, ghex, mc * 图片浏览: gImageView, gqview, zgv(console), fbida(console), eog, gpicview, gthumb gwenview, digikam * 图片处理: gimp, ImageMagick * 屏幕抓图: 抓成图片: ksnapshot, ImageMagick 的 import, gimp, xwd, scrot http://addons.mozine.org/firefox/209/ (抓网页) 抓成视频: vnc2swf, vncrec, xvidcap * 录音、音频处理: audacity, mhwaveedit, glame * 视频处理: Cinelerra * 音频格式转换: SoX * 刻录: k3b, brasero, cdrecord, gnomebaker, Nero4Linux * 英汉字典: stardict(屏幕取词,词库大,英汉,汉英, 英英) ibmdict(包含科技词典,词库大,英汉,汉英) dictd:英汉 汉英 可以使用stardict的全部词库. cdict:英汉 汉英 使用安装方便,彩色显示. * 科学计算: matlab, octave, scilab * 科学作图: gnuplot, metapost,Asymptote * 虚拟机 1) win下虚拟linux: cygwin, 老版virtual-pc, colinux 2) Linux下虚拟机: vmware, bochs, qemu, virtualbox, kvm, xen 3) linux下运行windows程序: wine, cedega, crossover office 4) DOS模拟: dosbox * MindMap: semantik, freemind * 编程辅助: UML建模: Umbrello * 文件管理器: krusader, nautilus, pcmanfm, thunar, dolphin 其他软件: igal:从图片生成html的网络相册 kmymoney:理财软件 R rkward: 统计分析的,R的gui封装,模仿SPSS gretel: 回归分析/计量经济 g3data: 从折线图获取数据 last modified by yegle,2008-11-27 -- ※ 修改:xinliGG 于 Jul 12 20:49:50 2009 修改本文
个人分类: 生活点滴|5287 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-2 14:44

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部