Andrew C. Oliver是一位专业的软件咨询师。他从8岁起开始编程,从Basic与dBase III+开始。他最为人所熟知的就是创建了POI项目,该项目现在托管在Apache上。在Red Hat收购JBoss之前,他还是JBoss的早期开发者之一。Andrew是Open Source Initiative的前董事会成员以及现在的顾问。除此之外,Andrew还是Open Software Integrators的董事长与创建者,这是一家专业的服务机构,分布在达拉谟、北卡罗来纳州以及芝加哥。近日,Andrew撰写了一篇文章,谈到了2014年值得关注的9项技术。 2014年充满了各种预测,我们无法控制世界未来的样子,不过我们可以成为自身命运的主人。下面就是2014年值得关注的9项技术,与你一同分享。 1. 文档数据库 很多IT系统基本上都包含了将数据结构写到结构化存储这一部分,同时又要求高并发的性能。文档数据库出现已经有很多年了,其中就有Lotus Domino的Notes Storage Facility,不过NoSQL与大数据革命又燃起了新的领域,其中MongoDB与Couchbase就是其中的佼佼者。 2. 键值存储 有时,你有一张很大的表,可以放到内存中。如果是网格,那么你就可以将内存中的表分发到多个结点上以加快写的速度。如果是个读多写少的小表,那么你可以将其复制到所有结点上,这样读就是个内存中的事情了。无论采用哪种方式,键值存储都值得你好好学习一下。几乎所有的键值存储都可以创建自定义的缓存负载器或是缓存存储,从而实现对RDBMS或是其他数据源的读与写。很多键值存储采用了“稍后写”或是队列写来实现对数据库的写操作。这个领域的典型代表是Couchbase、Memcached、Infinispan与GemFire。 3. 图数据库 从推荐引擎到社交网络和地理分析,再到生物分析,图数据库都带来了极大的便利性。对于传统的RDBMS来说,朋友的朋友这种查询是非常低效的,即便利用最新的特性也没有太大的起色,这是因为其结构就不对。虽然图数据库已经出现了很多年,不过只是最近的数据爆发以及个性推荐等领域才使其变得更加流行。这个领域的典型代表是Neo4j与Apache Giraph。 4. Google Drive/Apps Google Apps是个办公效率套件。我无法想象再回到原来的通过邮件发送附件的那种方式。最近,我们通过基于JavaScript的宏实现了越来越好的自动化。所有的一切都存储在云端,因此我们可以放心地睡觉。除此之外,可扩展性特性意味着只要我们能够访问云端,那么我们就可以将文档直接与其集成,反之亦然。 5. On-premises搜索 我现在还是能看到有很多人在编写着大量的and/or/like等SQL查询,其实这么做不仅会导致严重的性能问题,还会产生不清晰的代码以及不易使用的接口。这时可以看看Google的服务,无论是数据库、文档还是各种文件系统都行。Apache Solr值得你好好看看。 6. PaaS 无论是公有云还是自己的私有云,你都需要手工安装各种操作系统、应用服务器与应用,然后提前选择好将要部署的服务器与VM数量,这是十几年前的做法。PaaS是未来的趋势,能够做到实时伸缩,自动完成重复性的任务。我们所广泛使用的平台有CloudFoundry、CloudBees与OpenShift。 7. 云IDE 前不久,我们全家在打扫壁橱,我9岁的孩子不认识壁橱里面的一个很大的金属盒子到底是什么,那是什么呢?我们在隔壁房间看着我们的孩子。“我不知道,好像是个Dell的什么东西”。我们发现他确实不知道塔式机箱到底是什么,因为自从他出生以来,我们就一直在使用着笔记本(不过他看到过一台1U服务器,因为我们用它做过Hadoop的测试)。我觉得云IDE可以做到一点,那就是让下一代不知道笔记本到底是什么。为何要在硬盘上安装IDE呢?为什么不打开浏览器,然后就开始编码呢?比如说Codenvy或是Cloud9。 8. Hadoop 无论是使用MapReduce进行复杂的分析,抑或只是想做些日志分析和审计日志,Hadoop都是这个行业中最为火热的一个选择。如果你尚未使用Hadoop做过一些试点项目,那么今年就要考虑做做了。如果已经使用过Hadoop,那么我希望你能在今年对Hadoop有更好的了解与掌握。 9. 集群/分布式文件系统 从集群到HDFS,可伸缩性存储是关键。今年,你要重新思考SAN了。至少,如果还没有尝试过可以先做个试水。我预测会有很多混合方式出现。 转自:http://www.infoq.com/cn/news/2014/01/9-popular-technologies-2014
View Details亚马逊公有云落地中国 阿里、腾讯等迅速降价 本报记者纪佳鹏北京报道 12月18日,亚马逊公有云服务AWS(AmazonWebServices)宣布即将推出中国云计算平台。中国是AWS在亚太地区的第4个区域,全球的第10个区域。这意味着长期传闻入华的亚马逊AWS正式在国内落地。 而就在AWS落地中国的同一天,IBM也宣布与世纪互联合作将其云计算基础架构服务SCE+((SmartCloudEnterprise+)正式引入中国。 12月18日,微软也正式宣布联想成为中国首家微软CloudOS战略合作伙伴,联想将使用基于微软WindowsServer及Hyper-V、SystemCenter和WindowsAzurePack的微软云平台对外提供服务,成为中国首家微软CloudOS战略合作伙伴。 国内本地云计算服务提供商也坐不住了。 阿里云当天推出了“阿里云1218”活动,阿里云全线产品降价,最高降幅50%。金山推出了挖矿云主机,限量免费送,12月18日11点开抢。 12月19日,腾讯云的年终大促即将盛大开启。据消息人士透露,腾讯云此次会在云服务器、IDC带宽等服务上给予开发者前所未有的惊喜折扣,这意味着开发者可以用更低的成本去使用腾讯云。 一时间,云服务市场好不热闹。 亚马逊AWS落地中国 亚马逊方面表示,为了更好地落地中国,并遵守中国的相关法律和监管要求,亚马逊AWS中国采用了“多伙伴策略”来提供云计算服务。 一方面,北京市政府、宁夏自治区政府和亚马逊AWS、宽带资本旗下的云基地签署合作谅解备忘录,通过位于北京和宁夏的云计算基础设施为中国各地客户提供云服务;另一方面,亚马逊AWS也已经和光环新网和网宿科技合作,将为亚马逊提供必要的互联网数据中心服务和互联网接入服务,包括基础架构、带宽和网络功能。 亚马逊方面负责AWS在中国的业务发展的全球副总裁容永康表示,通过与北京和宁夏两地政府合作,亚马逊成为第一个参与到“前店后厂”的云服务厂商。容永康称,AWS是最早实践云计算服务的厂商,会将优质的技术资源带入中国,并会在中国市场长期扎根发展。 据了解,亚马逊AWS入华的消息此前一直都有传闻,但是每次都没有真正得到落实。最近一次是在今年年初,据了解当时亚马逊在中国招聘的AWS员工,而且开始游说一些企业购买亚马逊AWS服务,不过这些服务只能通过亚马逊位于海外的数据中心提供。 据介绍,包括小米、奇虎360、金山软件等数千家中国企业的海外分公司已经开始使用AWS服务。“客户在开拓在国际市场的同时,亚马逊也在不断加强对中国市场的客户需求的理解。”容永康说。 国外成熟的公有云服务提供商一直垂涎于中国市场,但是由于资质、监管等问题一直无法真正落地中国。直到去年11月1日,微软宣布与国内互联网基础设施服务提供商世纪互联达成合作,实现微软企业级云服务——Office365和WindowsAzure在中国的落地,这是国外云服务上落地中国的首个案例。据悉,其合作方式是,微软向世纪互联授权技术,由后者运营这两项服务。 紧接着,SAP和IBM也同样借道进入中国,提供公有云服务。虽然此次亚马逊方面没有透露更多的落地细节,孙永杰表示,基于国内对外资企业进入中国进行公有云服务,政策方面监管严格,亚马逊方面或许也是像其他国外等云服务提供商入华一样的路径。 国内云计算将激战 事实上,自从2006年推出云计算服务以来,由于竞争策略出色,亚马逊在此项业务中规模扩张迅速,并在行业中遥遥领先,硅谷创业公司中约90%使用亚马逊的云计算服务。 据市场研究公司Synergy估计,亚马逊第四季度云计算的营收将超过7亿美元,这意味着亚马逊将比其他所有主要云计算服务提供商,包括微软、IBM、谷歌等的营收总和还高15%。 “作为一个在行业内重量级的云计算服务提供商,AWS入华将让国内其他企业也加速发展,这有利于市场更加良性发展。”AWS在中国的合作伙伴——网宿科技(300017.SZ)副总裁刘洪涛接受21世纪经济报道记者独家专访时表示,网宿科技与亚马逊合作的谈判前后持续了三四年。网宿科技主要为AWS等云计算平台的客户提供CDN服务和IDC服务,保证云平台良好的用户体验。 在AWS宣布落地中国的同时,IBM、微软、阿里巴巴等竞争对手也在同一天推出了不同的促销策略以及宣布与其他企业的战略合作,有分析认为,各大厂商都在阻击亚马逊入华。 IT产业分析师孙永杰表示,目前国内企业真正将大多数预算放到云计算上面还比较少,市场的接受度目前还比较低,这对于对所有企业而言大家的机会基本上是均等的。 业内人士告诉21世纪经济报道记者,AWS所提供的是大而全的公有云服务,其服务产品丰富;而国内的云服务提供商包括腾讯、百度、阿里等公司都基于自己的公司特点搭建生态圈,腾讯是依赖庞大的高黏度客户,帮助合作伙伴进行推广,纵深发展客户;而百度终端客户流量大,云盘做得出色,阿里云则是基于自己建立的电商体系下的平台,通过技术的积累而发展。 “AWS落地中国也需要与其他企业同台竞技,包括价格竞争、市场教育和宣传营销的落实等。”孙永杰说,亚马逊的云服务有价格优势,性价比强,但是作为一家互联网企业,对于有些企业对更加复杂的云服务的需求,不是像IBM这种精于服务企业级的IT公司那样在行。 “AWS产品大而全,但是无法覆盖中国这么大的市场,大家都是同一起跑线上竞争,挖掘这个市场。”上述业内人士对21世纪经济报道记者说。(编辑卢爱芳) 转自:http://www.chinaz.com/news/2013/1219/331826.shtml
View Details今天再次设置java的环境变量,突然发现每次设置都只是按照步骤一步步将其设置完,并不了解为啥要设置,于是上网找了找,找到遍文章,觉得不错,就留下了。 仅供记录学习。转自:http://bbs.tech.163.com/bbs/tech_0ik1/147645925.html 在把jdk安装到计算机中之后,我们来进行设置使java环境能够使用。 首先右键点我的电脑。打开属性。然后选择“高级”里面的“环境变量”,在新的打开界面中的系统变量需要设置三个属性“JAVA_HOME”、 “path”、“classpath”,其中在没安装过jdk的环境下。path属性是本来存在的。而JAVA_HOME和classpath是不存在 的。 一:点“新建”,然后在变量名写上JAVA_HOME,顾名其意该变量的含义就是java的安装路径,呵呵,然后在变量值写入刚才 安装的路径“C:\jdk1.6”。(注:如果安装的路径不是磁盘C或者不是在jdk1.6这个文件夹,可对应修改。以下文字都是假定安装在C: \jdk1.6里面。) 二:其次在系统变量里面找到path,然后点编辑,path变量的含义就是系统在任何路径下都可以识别java命令,则 变量值为“.;%JAVA_HOME%\bin”,(其中“%JAVA_HOME%”的意思为刚才设置JAVA_HOME的值),也可以直接写上“C: \jdk1.6\bin” 三: 最后再点“新建”,然后在变量名上写classpath,该变量的含义是为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别。其值为“.;%JAVA_HOME%\lib \dt.jar;%JAVA_HOME%\lib\toos.jar (要加.表示当前路径)”,与相同“%JAVA_HOME%有相同意思” 以 上三个变量设置完毕,则按“确定”直至属性窗口消失,下来是验证看看安装是否成功。先打开“开始”-> “运行”,打入“cmd”,进入dos系统界面。然后打“java -version”,如果安装成功。系统会显示java version jdk"1.6.0"。 确保安装在C盘文件名为jdk1.6,环境变量直接复制就可以了,在dos界面中输入javac来查看该命令是否合法,同样输入java来查看该命令是否合法 这样环境变量就设置好了,下面进行对PATH,CLASSPTH,JAVA_HOME的讲解 以下为设置JAVA_HOME,CLASSPATH,PATH的目的: 1.设置JAVA_HOME: 一、为了方便引用,比如,你JDK安装在C:\Program Files\Java\jdk1.6.0目录里,则设置JAVA_HOME为该目录路径, 那么以后你要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串; 二、归一原则, 当你JDK路径被迫改变的时候, 你仅需更改JAVA_HOME的变量值即可, 否则,你就要更改任何用绝对路径引用JDK目录的文档, 要是万一你没有改全, 某个程序找不到JDK, 后果是可想而知的—-系统崩溃! 三、第三方软件会引用约定好的JAVA_HOME变量, 不然, 你将不能正常使用该软件, 以后用JAVA久了就会知道, 要是某个软件不能正常使用, 不妨想想是不是这个问题. 2.设置CLASSPATH: 这 是一个很有趣,当然也比较折磨初学者的问题, 这个变量设置的目的是为了程序能找到相应的".class"文件, 不妨举个例子: 你编译一个JAVA程序—A.java, 会得到一个A.class的类文件,你在当前目录下执行java A, 将会得到相应的结果(前提是你已经设置CLASSPATH为"."). 现在, 你把A.class移到别的目录下(例如:"e:\"), 执行java A, 将会有NoClassDefFindError的异常,原因就是找不到.class文件, 现在你把CLASSPATH增加为:".;e:\"再运行java A, 看看会有什么结果~~:)~~~, 一切正常, java命令通过CLASSPATH找到了.class文件! 3.设置PATH: 道理很简单, 你想在任何时候都使用%JAVA_HOME%\bin\java 等来执行java命令吗, 当然不会, 于是, 你可以选择把 %JAVA_HOME%\bin添加到PATH路径下, 这样, 我们在任何路径下就可以仅用java来执行命令了.(当你在命令提示符窗口输入你个代码时,操作系统会在当前目录和PATH变量目录里查找相应的应用程 序, 并且执行. 转自:http://www.cnblogs.com/kevinlocn/archive/2009/10/12/1581855.html
View DetailsAccess在小型系统开发中等到了广泛使用。虽然Access提供了可视化的操作方法,但许多开发人员还是喜欢直接用SQL语句操作数据表。如何在Access中打开SQL视图,对于初次使用Access的程序员可得费点时间呢。 1、ACESS2007 (1)点击“创建”--点击 “查询设计” (2)点击关闭 (3)点击左上角的"SQL视图"就可以打开SQL窗口了 2、ACCESS 2003 (1)点击对象里的“查询” (2)点击 “在设计视图创建查询” ,再点击“关闭” (3)再点击 左上角的"sql" (4)就可以输入sql语句了 3、Access里like语句通配符 Access里like的通配符用法是这样:“?”表示任何单一字符;“*”表示零个或多个字符;“#”表示任何一个数字。如: select * from tablename where fieldname like '*沙洲*' 拣尽寒枝不肯栖,寂寞沙洲。 转自:http://www.cnblogs.com/zhouhb/archive/2011/07/22/2114344.html
View Details一个简单的Form, 按钮btnTest是enabled=false。在btnEnable的Click事件中 创建线程,在线程中尝试设置btnTest.Enabled = true; 发生异常:线程间操作无效: 从不是创建控件“btnTest”的线程访问它。 代码如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
1 using System; 2 using System.Threading; 3 using System.Windows.Forms; 4 5 namespace TestingUIThread 6 { 7 public partial class Form1 : Form 8 { 9 Thread thread = null; 10 11 public Form1() 12 { 13 InitializeComponent(); 14 } 15 16 private void btnEnable_Click(object sender, EventArgs e) 17 { 18 thread = new Thread(new ParameterizedThreadStart(EnableButton)); 19 thread.Start(null); 20 } 21 22 private void EnableButton(object o) 23 { 24 // following line cause exception, details as below: 25 //Cross-thread operation not valid: Control 'btnTest' accessed from a thread other than the thread it was created on. 26 btnTest.Enabled = true; 27 btnTest.Text = "Enabled"; 28 } 29 } 30 } |
在默认情况下,C#不准许在一个线程中直接访问或操作另一线程中创建的控件,这是因为访问windows窗体控件本质上是不安全的。 线程之间是可以同时运行的,那么如果有两个或多个线程同时操作某一控件的某状态,尝试将一个控件变为自己需要的状态时, 线程的死锁就可能发生。 为了区别是否是创建该控件的线程访问该控件,Windows窗体控件中的每个控件都有一个InvokeRequired属性,这个属性就是用来检查本控件是否被其他线程调用的属性,当被创建该线程外的线程调用的时候InvokeRequired就为true。有了这个属性我们就可以利用它来做判断了。 光判断出是否被其他线程调用是没有用的,所以windows窗体控件中还有一个Invoke方法可以帮我们完成其他线程对控件的调用。结合代理的使用就可以很好的完成我们的目标。 上面问题的解决方法: 方法一: public Form1() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; } // // Summary: // Gets or sets a value indicating whether to catch calls on the wrong thread // that access a control’s System.Windows.Forms.Control.Handle property when // an application is being debugged. // // Returns: // true if calls on the wrong thread are caught; otherwise, false. [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [SRDescription("ControlCheckForIllegalCrossThreadCalls")] [Browsable(false)] public static bool CheckForIllegalCrossThreadCalls { get; set; } 方法二:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
1 using System; 2 using System.Threading; 3 using System.Windows.Forms; 4 5 namespace TestingUIThread 6 { 7 public partial class Form1 : Form 8 { 9 Thread thread = null; 10 11 public Form1() 12 { 13 14 InitializeComponent(); 15 } 16 17 private void btnEnable_Click(object sender, EventArgs e) 18 { 19 thread = new Thread(new ParameterizedThreadStart(EnableButton)); 20 thread.Start(null); 21 } 22 23 private void EnableButton(object o) 24 { 25 EnableButton(); 26 } 27 28 private delegate void EnableButtonCallBack(); 29 30 private void EnableButton() 31 { 32 if (this.btnTest.InvokeRequired) 33 { 34 this.Invoke(new EnableButtonCallBack(EnableButton)); 35 } 36 else 37 { 38 btnTest.Enabled = true; 39 btnTest.Text = "Enabled"; 40 } 41 } 42 } 43 } |
方法三: 通过ISynchronizeInvoke和MethodInvoker.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
1 using System; 2 using System.ComponentModel; 3 using System.Threading; 4 using System.Windows.Forms; 5 6 namespace TestingUIThread 7 { 8 public partial class Form1 : Form 9 { 10 Thread thread = null; 11 12 public Form1() 13 { 14 InitializeComponent(); 15 } 16 17 private void btnEnable_Click(object sender, EventArgs e) 18 { 19 thread = new Thread(new ParameterizedThreadStart(MyEnableButton)); 20 thread.Start(null); 21 } 22 23 private void MyEnableButton(object sender) 24 { 25 ISynchronizeInvoke synchronizer = this; 26 27 if (synchronizer.InvokeRequired) 28 { 29 MethodInvoker minvoker = new MethodInvoker(this.EnableButton); 30 synchronizer.Invoke(minvoker, null); 31 } 32 else 33 { 34 this.EnableButton(); 35 } 36 } 37 38 private void EnableButton() 39 { 40 btnTest.Enabled = true; 41 btnTest.Text = "Enabled"; 42 } 43 } 44 } |
[…]
View DetailsC#程序的几种退出 1.Application.Exit(); //好像只在主线程可以起作用,而且当有线程,或是阻塞方法的情况下,很容易失灵 2.System.Environment.Exit(0); //无论在主线程和其它线程,只要执行了这句,都可以把程序结束干净 3.this.Close(); 4.Application.ExitThread(); msdn 对前台线程和后台线程的解释:托管线程或者是后台线程,或者是前台线程。后台线程不会使托管执行环境处于活动状态,除此之外,后台线程与前台线程是一样的。一旦所有前台线程在托管进程(其中 .exe 文件是托管程序集)中被停止,系统将停止所有后台线程并关闭。通过设置 Thread.IsBackground 属性,可以将一个线程指定为后台线程或前台线程。例如,通过将 Thread.IsBackground 设置为 true,就可以将线程指定为后台线程。同样,通过将 IsBackground 设置为 false,就可以将线程指定为前台线程。从非托管代码进入托管执行环境的所有线程都被标记为后台线程。通过创建并启动新的 Thread 对象而生成的所有线程都是前台线程。如果要创建希望用来侦听某些活动(如套接字连接)的前台线程,则应将 Thread.IsBackground 设置为 true,以便进程可以终止。 所以解决办法就是在主线程初始化的时候,设置: Thread.CurrentThread.IsBackground = true; 这样,主线程就是后台线程,在关闭主程序的时候就会关闭主线程,从而关闭所有线程。 但是这样的话,就会强制关闭所有正在执行的线程,所以在关闭的时候要对线程工作的结果保存。
View DetailsC# 中没有四舍五入函数,程序语言都没有四舍五入函数,因为四舍五入算法不科学,国际通行的是 Banker 舍入法Bankers rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的Math.Round 方法默认的也是 Banker 舍入法在 .NET 2.0 中 Math.Round 方法有几个重载方法Math.Round(Decimal, MidpointRounding)Math.Round(Double, MidpointRounding)Math.Round(Decimal, Int32, MidpointRounding)Math.Round(Double, Int32, MidpointRounding)将小数值舍入到指定精度。MidpointRounding 参数,指定当一个值正好处于另两个数中间时如何舍入那个值该参数是个 MidpointRounding 枚举此枚举有两个成员,MSDN 中的说明是:AwayFromZero 当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较小的值。ToEven 当一个数字是其他两个数字的中间值时,会将其舍入为最接近的偶数。注 意!这里关于 MidpointRounding.AwayFromZero 的说明是过错的!实际舍入为两个值中绝对值较大的值。不过 MSDN 中的 例子是正确的,英文描述原文是 it is rounded toward the nearest number that is away from zero.所以,要实现四舍五入函数,对于正数,可以加一个 MidpointRounding.AwayFromZero 参数指定当一个数字是其他两个数字的中间值时其舍入为两个值中绝对值较大的值,例:Math.Round(3.45, 2, MidpointRounding.AwayFromZero)不过对于负数上面的方法就又不对了因此需要自己写个函数来处理第一个函数:double Round(double value, int decimals){if (value < 0){return Math.Round(value + 5 / Math.Pow(10, decimals + 1), decimals, MidpointRounding.AwayFromZero);}else{return Math.Round(value, decimals, MidpointRounding.AwayFromZero);}} 第二个函数:double Round(double d, int i){if(d >=0){d += 5 * Math.Pow(10, -(i + 1));}else{d += -5 * Math.Pow(10, […]
View Details类型/子类型 扩展名 application/envoy evy application/fractals fif application/futuresplash spl application/hta hta application/internet-property-stream acx application/mac-binhex40 hqx application/msword doc application/msword dot application/octet-stream * application/octet-stream bin application/octet-stream class application/octet-stream dms application/octet-stream exe application/octet-stream lha application/octet-stream lzh application/oda oda application/olescript axs application/pdf pdf application/pics-rules prf application/pkcs10 p10 application/pkix-crl crl application/postscript ai application/postscript eps application/postscript ps application/rtf rtf application/set-payment-initiation setpay application/set-registration-initiation setreg application/vnd.ms-excel xla application/vnd.ms-excel xlc application/vnd.ms-excel xlm application/vnd.ms-excel xls application/vnd.ms-excel xlt application/vnd.ms-excel xlw application/vnd.ms-outlook msg application/vnd.ms-pkicertstore sst application/vnd.ms-pkiseccat cat application/vnd.ms-pkistl stl application/vnd.ms-powerpoint pot application/vnd.ms-powerpoint pps application/vnd.ms-powerpoint ppt application/vnd.ms-project mpp application/vnd.ms-works wcm application/vnd.ms-works wdb […]
View Details<% if request("infoid")<>"" then set rs=conn.execute("select * from nproduct where id="&request("infoid")) if not (rs.eof and rs.bof) then proname=rs("proname") content=rs("proinfo") end if rs.close set rs=nothing end if %> 早几天在系统中添加文件管理的下载功能, 要求在ASPX文件中实现, 以进行权限的控件,于是添加下列代码: … Response.ContentType = mime; //相应的MIME TYPE Response.AppendHeader("Content-Disposition", "attachment; filename=\"" +fileName + "\""); Response.BinaryWrite(bytes); Response.End(); … 当fileName中包含中文时, 文件下载保存时, 文件名变成了乱码, 需要用户修改,这也就违被了我设定预设文件名的初衷. 解决办法1: 对fileName进行URL编码, 把下划线标注的那句改为Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + Server.UrlEncode(fileName) + "\"");便可. 虽然中文乱码问题解决了, 但是还有一个问题: 在测试时, 下载保存的文件名有时会变成该页面的名字(.aspx), 虽然可以把内容下载到本地, 但是需要更改文件名及类型, 这样会给用户带来很大的困惑. 还有一个办法, 可以很简单的解决以上的两个问题: 解决办法2: 假设当前的URL为 http://localhost/download.aspx?id=123, fileName为"下载.pdf", 我们只要把下载URL改为 http://localhost/download.aspx/下载.pdf?id=123 可, 上面下划线标注的那句代码则可以注释掉了, 试一下, 结果一定让你非常满意! 转自:http://www.webshu.net/jiaocheng/programme/ASPNET/200606/1427.html
View Details七宗罪(Seven deadly sins),13世纪道明会神父圣多玛斯·阿奎纳列举出各种恶行的表现。这些恶行最初是由希腊神学修道士庞义伐草撰出8种损害个人灵性的恶行,分别是贪食、色欲、贪婪、暴怒、懒惰、伤悲、自负及傲慢。 程序员生来不平等。有的伟大。有的渴望伟大。有的就是废物。 下面是一些程序员经常会走入的歧途。听起来很恐怖,但享用吧。上帝就在你身边,警惕这些危险的信号,跟随主救赎的指引。 1. 色慾(Lust) 凡犯色欲者:在硫磺和火焰中熏闷 作为程序员,这种罪恶的表现是不断的受绚丽的新事物的诱惑。下一代编程语言,最新的框架,最新的平台。 我们程序员天生好奇。我们受惑于追求高效,坚信所有的东西都要经过优化。只有用了那种最新的语言,我们才能工作。 虽然不断的追求改进是非常值得赞赏,但采用新事物也是有代价的。有避免不了的学习曲线。有适应问题。有未知的依赖问题。有未知的未知问题。 清除这些杂念。专心解决你手头上的问题。充分利用你知道的,停止贪恋那些光鲜新事物。 2. 贪食(Gluttony) 凡犯贪食者:强迫进食老鼠,蟾蜍和蛇 这是过度之罪。过度的企图多做,过度的扩展深度和广度。 不必要的功能特征溜进了产品里。大量无用的代码被生产出来。宝贵的编程时间被消耗,被浪费。 这些行为增加了不必要的复杂度,带来的高昂的维护代价。通常导致的结果是,预期不能完工。bug层出不穷。 警惕那些不该有的功能、警惕那些对不必要的复杂架构的伪辩护、警惕过早优化的迹象。让产品简洁。 3. 贪婪(Greed) 凡犯贪婪者:在油中煎熬 过度专业化和功能化会导致形成个人的领地。固步自封。我的代码。我的模块。我相干的区域。没有分享。没有合作。 一种不健康的对这些人的依赖会逐渐形成。所谓的“编程教父”,“编程巨星”和“编程领袖”就代表了这些趋势。 相反,应该建立一个崇尚代码集体所有和充分合作(比如结对编程或相互代码审查)的文化。 4. 怠惰(Sloth) 凡犯懒惰者:丢入蛇坑 根据Perl语言的创造者Larry Wall的话,懒惰是程序员的三个伟大美德之一。 但懒惰不能和冷漠混为一谈。长时间不理出现的问题。允许代码腐烂异味。不重构拷贝/粘贴过来的重复代码。 对软件开发中这些需要修改的东西要有一种紧迫感。事无巨细。这是保持软件健康的必要态度。 5. 暴怒(Wrath) 凡犯暴怒者:活体肢解 在有些地方,有些程序员是每个人都尊敬,也是每个人都害怕。你也许遇到过这样的火星极客。他们恃才放旷,为所欲为,其他人在他身边都惦着脚走。避免和他冲突。 他们喜怒无常,他们的怒气经常撒错方向。他们贬低他人,破坏团队和谐。 警惕这种不受约束的对峙气氛的滋生。拒绝忍受这样的撒野。立即辞掉他们。 6. 妒忌(Envy) 凡犯妒忌者:投入冰水之中 不满足于现有的工具和系统,有些程序员眼睛总是盯着别人的。 我曾经遇到过这样的经历,一个wiki系统正在使用中,另外一个却同时被引进,因为它的标记语法感觉更好一些。两个问题跟踪系统,多种聊天系统,不兼容的博客平台,等等。 如果你不喜欢某个工具,相信有比它更好的,那好,去找到它,使用它。但是,请完全放弃你现有的。吃着碗里又想占这锅里,只会得不偿失,给自己制造麻烦。 7. 傲慢(Pride) 凡犯傲慢者:轮裂 有些程序员喜欢孤芳自赏。对自己的能力过度自信。从不寻求帮助。 更 糟糕的,他认为所有的事情都应该由自己来完成。虽然他有能力完成任何的任务,但他却没能完成,因为他承担的太多了,无法集中精力。他分不清什么是核心什么 是次要的。在可以使用云服务时他建造自己的服务器,在能使用成熟的部署系统时他重新发明自己的,他开发出跟现有框架功能相同的框架,等等。 诚然,做研究是有趣的。这些研究经常被辩称为“基础”或“革新”,但却因没有更快捷的创造商业价值而使产品丧失市场先机。 小心“非我发明(Not Invented Here)”综合征。准确的定义你的核心目标,你的首要工作。其它的都是次要的,可以借用别人的。这没有什么好羞愧的。 [英文原文:7 Sins of Doomed Teams ] 转自:http://www.oschina.net/news/46550/7-sins-of-doomed-teams
View Details