超强很小的js版俄罗斯方块

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <style> div {display:block;background-color:black;position:absolute;font:17px Tahoma;color:#fff;} span {float:left;background-color:gray;width:12px;height:12px;border:4px gray outset;margin:0 1 1 0;overflow:hidden;} p {float:left;width:8px;height:8px;border:2px gray outset;overflow:hidden;margin:0;padding:0} #main {width:375px;height:430px;display:block;background-color:gray;position:relative;} #body {width:241px;height:401px;left:15px;top:15px;border:1px solid #999;} #score {width:80px;height:24px;left:270px;top:15px;padding:4px;} #level {width:80px;height:24px;left:270px;top:50px;padding:4px;} #next {width:50px;height:50px;left:270px;top:85px;border:19px black solid;} #ctrl {width:80px;height:55px;left:270px;top:360px;padding:4px;text-align:center;background-color:gray} #ctrl button{width:80px;height:25px;} </style> <script> var G = { fs:[], fn:[], score:0, l:['#9F0','#FF3','#F33','#C0C','#33C','#0F3','#F93'], v:[0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0xFFFF], d:[[0xCC00],[0x4444,0xF0],[0x8C40,0x6C00],[0x4C80,0xC600],[0x44C0,0x8E00,0xC880,0xE200],[0x88C0,0xE800,0xC440,0x2E00],[0x4E00,0x8C80,0xE400,0x4C40]], init:function(){ var body = document.getElementById('body'); var next = document.getElementById('next'); for(var i=0;i<240;i++){ G.fs.push(body.appendChild(document.createElement("span"))); } for(var i=0;i<16;i++){ G.

转载:ACM题目难度分级列表

#IDTitleSolved byDifficulty1100The 3n + 1 problem2648512102Ecological Bin Packing106082310071Back to High School Physics95543410055Hashmat the Brave Warrior943235272TEX Quotes819236458The Decoder728947136Ugly Numbers67294810038Jolly Jumpers63194910035Primary Arithmetic626841010018Reverse and Add6061411108Maximum Sum6022412113Power of Cryptography5804513494Kindergarten Counting Game5784514299Train Swapping575251510082WERTYU5481516101The Blocks Problem5225517591Box of Bricks511351810008What's Cryptanalysis?494251910300Ecological Premium4839520575Skew Binary4732621369Combinations4543622151Power Crisis4470623382Perfection439362410370Above Average4377625160Factors and Factorials431462610189Minesweeper4303627579ClockHands4293628264Count on Cantor4237629424Integer Inquiry4214630499What's The Frequency, Kenneth?419463110110Light, More Light4189632541Error Correction4096633543Goldbach's Conjecture402173410004Bicoloring393973510107What is the Median?3891736374Big Mod3876737686Goldbach's Conjecture (II)3852738105The Skyline Problem3839739495Fibonacci Freeze3827740483Word Scramble379374110041Vito's Family378574210019Funny Encryption Method3773743256Quirksome Squares3713744138Street Numbers366174510079Pizza Cutting3627746530Binomial Showdown360974710696f913552748111History Grading353374910340All in All350185010783Odd Sum3500851476Points in Figures: Rectangles3481852344Roman Digititis3443853673Parentheses Balance343685410346Peter's Smoke3367855120Stacks of Flapjacks335985610469To Carry or not to Carry333885710127Ones3329858492Pig-Latin3265859438The Circumference of the Circle325286010327Flip Sort3214861401Palindromes321286210050Hartals3211863103Stacking Boxes3207864324Factorial Frequencies3191865146ID Codes3138866350Pseudo-Random Numbers311596710106Product308396810222Decode the Mad man303796910006Carmichael Numbers3036970568Just the Facts3033971440Eeny Meeny Moo3023972305Joseph298697310405Longest Common Subsequence2954974583Prime Factors2952975484The Department of Redundancy Department294797610302Summation of Polynomials2934977477Points in Figures: Rectangles and Circles2933978412Pi2898979446Kibbles ``n'' Bits ``n'' Bits ``n'' Bits2890980406Prime Cuts288598110260Soundex2848982640Self Numbers2846983572Oil Deposits2835984294Divisors2832985118Mutant Flatworld Explorers2816986107The Cat in the Hat2791987445Marvelous Mazes27751088112Tree Summing27551089694The Collatz Sequence27411090706LCD Display2736109110013Super long sums27021092439Knight Moves26991093443Humble Numbers26801094674Coin Change2644109510812Beat the Spread!

细数C# 4.0四大新特性

在十年前的发布会上,最难忘的莫过于C#新编程语言的发布,当然也有新的Visual Basic(VB),关于垃圾回收,Java和.NET,C#和VB.NET,C++和VB6的性能对比等高潮看点。作为微软.NET框架的标志性语言,C#在微软的开发战略中演了一个非常关键的角色。随着该语言呈现出动态和功能编程语言的特性,其角色也在不断向前发展。 一转眼,现在已经用到C# 4了。C# 4与COM互操作性、对后期绑定模型的支持也更友好,而当C#之父Anders Hejlsberg讨论动态类型如何能够简化COM接口处理和其它复杂的交互时,有一些程序员担忧C#会向新的方向分化。Hejlsberg表示他知道经常修改语言功能所带来的危险。不过他表示,“你不能对语言的底层经常进行修改。对于C#来说,它的核心设计是一个命令式的面向对象编程语言。你可以对其增加从功能编程语言和动态编程语言所借鉴来的功能,但是其核心设计并非发生改变。”文本主要是对C#以及C#4.0新特征进行详细的介绍。 在之前的文章中,我们曾介绍过C#的历史及C# 4.0新增特性,包括:dynamic、命名和可选参数、动态导入以及协变和逆变等。今天我们结合代码实例来具体看一下C# 4.0中的四个比较重要的特性。 1.dynamic ExpandoObject 熟悉js的朋友都知道js可以这么写 : #div_code img{border:0px;}var t = new Object(); t.Abc = ‘something’; t.Value = 243; 现在这个js动态语言的特性,我们也可以在c#中使用了,前提是将一个变量声明为ExpandoObject类型。如下例: #div_code img{border:0px;}static void Main(string[] args) { dynamic t = new ExpandoObject(); t.Abc = "abc"; t.Value = 10000; Console.WriteLine("t's abc = {0},t's value = {1}", t.Abc, t.Value); Console.ReadLine(); } C# 4.0中新增了一个命名空间System.Dynamic来实现对此应用的支持,这种用法的意义何在,现在我还不太清楚,也是是C#向动态语言过渡的一种试探吧。关于动态语言请参考《5月编程语言排行榜:动态语言的前世今生》。 2.泛型自动转换 在C# 4.0之前下面的代码是不可以编译通过的 #div_code img{border:0px;}IEnumerable<object> objs = new List<string> { "I'm 0","I'am 1","I'am 2"

2010年软件设计师考试注意事项

1.考试要求: (1)掌握数据表示、算术和逻辑运算; (2)掌握相关的应用数学、离散数学的基础知识; (3)掌握计算机体系结构以及各主要部件的性能和基本工作原理; (4)掌握操作系统、程序设计语言的基础知识,了解编译程序的基本知识; (5)熟练掌握常用数据结构和常用算法; (6)熟悉数据库、网络和多媒体的基础知识; (7)掌握C程序设计语言,以及C++、Java、Visual Basic、Visual C++中的一种程序设计语言; (8)熟悉软件工程、软件过程改进和软件开发项目管理的基础知识; (9)熟练掌握软件设计的方法和技术; (10)掌握常用信息技术标准、安全性,以及有关法律、法规的基本知识; (11)了解信息化、计算机应用的基础知识; (12)正确阅读和理解计算机领域的英文资料。 2.通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档;组织和指导程序员编写、调试程序,并对软件进行优化和集成测试,开发出符合系统总体设计要求的高质量软件;具有工程师的实际工作能力和业务水平。 3.本考试设置的科目包括: (1)计算机与软件工程知识,考试时间为150分钟,笔试,选择题; (2)软件设计,考试时间为150分钟,笔试,问答题。

EXCEL文本转数值方法---我找的好苦啊

我们知道,在excel中的单元格中输入数字时,如果在数字前加上一个半角单引号(')则该数字在单元格中的存储格式会自己转为“文本格式”。如果有一列(或一行)数字都是用这种方法输入的,现在又需要将其格式全部转为数值型,该如何做呢? 如果输入时没有在前面加单引号,只是将格式设置成“文本格式”的话,则可以通过更改单元格格式的办法来批量转换。但即使前面加了单引号,选中此列中所有数字,在“格式/单元格/数字”选项卡中将格式设置为“数值”,确定后发现,这些数字仍旧是以文本方式保存的,这是因为前导单引号具有“强制转换”作用。另外,由于这个单引号在此是起格式控制作用的,因此用查找替换的方法也是找不到它的。怎么办呢?其实还有更简单的方法。 第一步,在工作表选中任一空白单元格,然后在该单元格上单击鼠标右键,选择“复制”。 第二步,选中所有要转换的单元格范围,单击鼠标右键,在右键快捷菜单中选择“选择性粘贴”,在弹出的“选择性粘贴”对话框中“运算”区域选择“加”,单击“确定”按钮结束,即可一次性将所有单元格转换为数字格式。

struts2 FilterDispatcher 和 StrutsPrepareAndExecuteFilter 的区别

struts2 FilterDispatcher 和 StrutsPrepareAndExecuteFilter 的区别 FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器.! StrutsPrepareAndExecuteFilter是自2.1.3开始就替代了FilterDispatcher的.! 这样的改革当然是有好处的.! 为什么这么说.? 应该知道如果我们自己定义过滤器的话, 是要放在strtus2的过滤器之前的, 如果放在struts2过滤器之后,你自己的过滤器对action的过滤作用就废了,不会有效!除非你是访问jsp/html! 那我现在有需求, 我必须使用Action的环境,而又想在执行action之前拿filter做一些事, 用FilterDispatcher是做不到的.! 那么StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器.! 给你打个比喻, 现在有病人要做手术, 现在struts2要做两件事, 搭病床(环境),执行手术.! 那么打麻药的工作呢.? 不可能要病人站着打吧, 所以必须有病床的环境,打完麻药之后再动手术.! 这个比喻非常形象了.!

Max Sum(杭电OJ1003)解题报告

Max Sum Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14. Input The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line starts with a number N(1<=N<=100000), then N integers followed(all the integers are between -1000 and 1000).

尝试写出类的成员函数实现

已知String类定义如下: class String { public: String(const char *str = NULL); // 通用构造函数 String(const String &another); // 拷贝构造函数 ~ String(); // 析构函数 String & operater =(const String &rhs); // 赋值函数 private: char *m_data; // 用于保存字符串 }; 尝试写出类的成员函数实现。 答案: String::String(const char *str) { if ( str == NULL ) //strlen在参数为NULL时会抛异常才会有这步判断 { m_data = new char[1] ; m_data[0] = ‘\0′ ; } else { m_data = new char[strlen(str) + 1]; strcpy(m_data,str); } } String::String(const String &another) { m_data = new char[strlen(another.

几个软件项目管理的面试题

1. 在你曾参与的软件项目中,你是作为需方还是供方? 2. 假设你是某软件企业的项目经理,企业在竞标一个软件项目,现在需要你编写一份合同文本的草案,请你试着编写一份合同文本。 3. 假设你所在的单位准备加强内部信息化建设,试图找一家软件公司开发一个单位综合信息管理系统,请你拟定一份系统业务需求。

Servlet如何得到服务器的信息?

Servlet可以使用如下四种方法来得到server的name, port和info 如下代码实现用servlet取得server的信息并输出到客户端浏览器: import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class DemoServerSnoop extends GenericServlet{ public void service(ServletRequest req , ServletResponse res) throws ServletException,IOException{ res.setContentType("text/plain"); PrintWriter out= res.getWriter(); out.println("req.getServerName()" + req.getServerName()); out.println("req.getServerPort()" + req.getServerPort()); out.println("ServletContext().getServerInfo()" + getServletContext().getServerInfo()); out.println("getServerInfo() name:" + getServerInfoName(getServletContext().getServerInfo())); out.println("getServerInfo() version:" + getServerInfoVersion(getServletContext().getServerInfo())); out.println("getServerContext().getAttribute(\"attribute\")" + getServletContext().getAttribute("attribute")); } private String getServerInfoName(String serverInfo){ int slash = serverInfo.indexOf('/'); if(slash==-1) return serverInfo; else return (String) serverInfo.subSequence(0,slash); } private String getServerInfoVersion(String serverInfo){ int slash = serverInfo.

淘宝OpenAPI使用

我也使用淘宝OpenAPI也大半年了。不过了,由于阿里软件的文档比较的乱,让很多初学者分不清头绪(注:淘宝OpenAPI是开放在阿里软件的一个平台上,是什么服务集群平台吧)。当然了,在中国,能够将自己的服务资源开放出来给第三方使用,特别是淘宝网这种大型商业网站来说,阿里巴巴的这种分享精神和开放的胸怀还是令人佩服的。因此在使用OpenAPI过程中,我们如果觉得资料不是很充分,也不要过多的抱怨,开放的同时意味着责任。呵呵! 在这了,趁端午节放假,将我使用淘宝Open API的心得分享出来,先写一篇简单的入门教程,也算是分享和开放吧。 通过阅读阿里软件提供的文档,我们对如何调用淘宝OpenAPI有了基本的了解。阿里软件OpenAPI平台即服务集成平台SIP相关的文档链接如下(在使用SIP平台上的OpenAPI还是先要了解下该平台的相关策略如安全策略,访问控制策略等): http://wiki.isv.alisoft.com/index.php/%E6%9C%8D%E5%8A%A1%E9%9B%86%E6%88%90%E5%B9%B3%E5%8F%B0 服务集群平台就不多唠叨了,去上面的文档地址去看看。我就简要的讲讲就我所知道的一些值得注意的地方: 1.淘宝OpenAPI每分钟访问的次数是有限制的,好像是400次/分钟,即一个应用访问任何一个淘宝API,一分钟内最多只能访问400次; 2.在次数方面,除了上面的控制外,还有日访问次数控制。如果你的应用是上架的,则日访问量没有限制;如果你的应用没有上架,那么一天之内,你访问淘宝OpenAPI的次数累计起来不能超过1000次。不要有意见哦,人家的资源也是有限的,而且还是免费的。 3.服务集成平台的api的安全级别分为四类:无安全策略校验;签名校验;用户授权校验(包含签名校验);可选用户授权校验(包含签名校验)。淘宝OpenAPI大多都是需要用户授权的。所谓用户授权就是应用软件在操作用户的淘宝数据时,就需要用户授权。如淘宝卖家在使用店铺管理软件维护自己的店铺时,淘宝网就需要淘宝卖家对该店铺软件进行授权,只有授权了,店铺管理软件才能操作淘宝卖家的数据。 4.授权除了上面所描述的外,授权还有时效性。就是授权是有期限的,现在淘宝授权一次的最大有效时效为一个小时。如果在一个小时内,没用调用任何淘宝OpenAPI,则授权过期了,需要重新授权。而对于未上架的应用,授权时效内不管有没有调用淘宝OpenAPI,授权期限过后就需要重新授权。看来,上架的应用还是有相当大的空间优势。 其他的就不多唠叨了,还没有在阿里软件注册应用的,还得先去阿里软件平台注册一个应用,注册成功后,你会得到APPID及CERTCODE。其中APP ID是用来标记应用,即你注册应用的ID,CERT CODE则是你应用的密钥,在做签名时用。 下面直接来个demo,感受下淘宝的OpenAPI。我们调用交易类的taobao.trade.get为例,该api文档地址为:http://isp.alisoft.com/apidoc/api/apiIndex.html#isp_taobao-6-281。可以知道这个api是用户授权,即需要用户授权才可以访问该用户的交易信息。 源代码如下: import java.security.MessageDigest; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeSet; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; public class TaobaoOpenApiDemo /** * 调用淘宝的taobao.trade.get demo, * 运行该示例时,你需要将appId,appSecret,tid * 这三个参数替换为你自己的,就可以运行该demo * * 在第一次运行时 会提醒你登录淘宝进行授权, * 授权成功后 再次运行该demo就可以获取指定交易的信息 呵呵 * * 这只是一个简单的demo,只是为初学者提供方便 * 有了这个原型 大家就可以各显自己的神通了 */ public static void main(String args) // 淘宝Open API平台即SIP平台的入口

DirectUI -从配置中动态产生界面

http://www.directui.com/blog/?p=9 DirectUI -从配置中动态产生界面 从很早开始,微软的 MSN 里面就其用了 DirectUI。简单的说,这个技术就是将界面的描述用 XML 文件的进行。 国内也有人弄了一个类似的框架( SoftUI )出来,不过是收费的。最近,在 CP 上逛,看到了这篇文章: Building a Dynamic UI using a CWnd Free Pool, 它也是用 XML 来描述界面,动态产生界面。相比这两者,后者是一个框架,它需要引入一个 Theme/Skin 的技术就可以和 SoftUI 媲美了。 现在,很多软件都有了 Skin 技术的支持,我自己也做了一套,而且此前,我也在淘气包中尝试过这种技术,也就是 按钮控件。只是没有能深入下去。反过来,我发现 Codejock 的换肤做得很棒,且能支持 Win9X 和使用 WinXP 的主题文件。后面的话,我就不多说了,呵呵。 还有一个是此前关注过过的 Dhtml 技术。我想基本上储备是有的了,就是缺一个好的程序来承载这个技术,而且,我对它充满信心!而且, 类似于 Ajax 技术也能在 Win32 程序中发生,太棒了! ^)^ 还想提两个链接,刚发现的: * 启程的开源输入法 这年头,大家都做输入法,因为每天都要用啊。这是群众基础建立的好机会。 ^_^ * IE 中私有协议的使用 开启类似 QQ/SkyPE 的聊天窗口,或者强聊。

Windows 系统下的Apache性能优化

一般来说,WinNT系统下使用IIS,而Apache在Linux下应用的比较多,但是依然有很多人在WinNT系统下使用Apache而非IIS,可能是基于对Windows系统的熟悉吧。今天就来说一下在Windows系统下如果优化Apache的性能。 mpm_winnt.c 是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说 mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程。 mpm_winnt主要通过ThreadsPerChild和MaxRequestsPerChild两个参数来优化Apache,下面详细来说明一下。 ThreadsPerChild 这个参数用于设置每个进程的线程数, 子进程在启动时建立这些线程后就不再建立新的线程了. 一方面因为mpm_winnt不能启动多个进程, 所以这个数值要足够大,以便可以处理可能的请求高峰; 另一方面该参数以服务器的响应速度为准的, 数目太大的反而会变慢。因此需要综合均衡一个合理的数值。 mpm_winnt上的默认值是64, 最大值是1920. 这里建议设置为100-500之间,服务器性能高的话值大一些,反之值小一些。 MaxRequestsPerChild 该参数表示每个子进程能够处理的最大请求数, 即同时间内子进程数目.设置为零表示不限制, mpm_winnt上的默认值就是0。 官方参考手册中不建议设置为0, 主要基于两点考虑: (1) 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存; (2) 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。 因此这个参数的值更大程度上取决于服务器的内存,如果内存比较大的话可以设置为0或很大的数字,否则设置一个小的数值。需要说明的是,如果这个值设置的太小的话会造成Apache频繁重启,在日志文件中会看到如下的文字: Process exiting because it reached MaxRequestsPerChild. Signaling the parent 这样一来降低了Apache的总体性能。 另外,可以通过查看Apache提供的server-status(状态报告)来验证当前所设置数值是否合理,在httpd.conf文件中做如下设置来打开它: # 首先需要加载mod_status模块 LoadModule status_module modules/mod_status.so # 然后设置访问的地址 SetHandler server-status Order deny,allow Deny from all # 如果限制某个IP访问则设置为 Allow from 192.168.1.1 Allow from all 综合来说,因为Windows NT下Apache只能启动父子两个进程,因此只能通过增大单个进程的线程数以及单个进程能够处理的最大请求数来进行优化。其他优化的参数同Linux系统下是一样的,大家可以加以参考。下面针对上述两个参数给出一个建议的设置: ThreadsPerChild 250 MaxRequestsPerChild 5000 其它就和linux下的apache优化一样 三、apache普通配置参数 1、静态还是动态 使用apache的动态载入模块非常方便,因为在需要时模块才会被载入。虽然有些性能开销,但同时有利于减少服务器对内存的需求。 静态载入虽然一次性载入所有需要的模块,增加内存消耗。因此我们全部采用动态载入的方法。

10个免费的javascript富文本编辑器(jQuery and non-jQuery)

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://smartlife.blog.51cto.com/1146871/292897 本文介绍了10个免费易用富文本编辑器(rich text editors,RTE),其中5个是Jquery插件,另外5个是非Jquery富文本编辑器 简介 Javascript富文本编辑器使我们添加、编辑网站中的文章更加方便和容易。这些富文本编辑器提供了所见即所得(What You See Is What You Get - WYSIWYG)的功能,可以像编辑word文档一样,方便地编辑网站中文章,常用于内容管理系统和博客系统等。 下面列出了常用的10个富文本编辑器,有最基础的格式富文本编辑器,也有复杂的具有文件上传能、创建表格功能、Ajax支持的富文本编辑器。 希望大家喜欢 MarkitUp - jQuery 一个轻量级的、可定制的和灵活的富文本编辑器,常用在CMS、Blog、论坛等网站上。 markItUp不是一个所见即所得的编辑器,支持一些常用快车键和常用的浏览器。 jWYSIWYG - jQuery jWYSIWYG是比较常用的Jquery所见即所得编辑器,提供了html代码编辑功能、文字编辑功能,图片连接功能,从而保证了jWYSIWYG的简单的特性。 Lightweight RTE- jQuery Lightweight RTE是一个非常简单的Jquery富文本编辑器,体积只有7kb。提供了一些基本的文字格式化操作功能。 HTMLBox - jQuery HTMLBox跨浏览器、交互性非常好、开源的Jquery富文本编辑器,在Mozilla Firefox, Inrernet Explorer, Opera, Netscape and Safari等常用浏览器下测试通过。此编辑器用户手册可以帮住你非常容易地把此编辑器整合到自己的Web系统中 D Small Rich Text Editor - jQuery TinyMCE 国内很多网站都在使用,是一个非常不错的所见即所得编辑器,而且开源。具体功能不再赘述,大家自己发现吧。 fckeditor - Non-jQuery Fckeditor是一个功能非常强大的富文本编辑器,博客园有使用此编辑器,我做的大部分项目也使用此编辑器,是asp.net网站的首选,提供了weconfig.xml文件用来定制符合自己需求的富文本编辑器。完全可以与MS的Word媲美。 Yahoo YUI Rich Text Editor - Non-jQuery YUI Rich Text Editor是轻量级的富文本编辑器,提供了一些常用的文字编辑功能。 Xinha - Non-jQuery Xinha是一个所见即所得的富文本编辑器,提供了强大的文字,图片。视频。音频等编辑功能 本文出自“灵动生活” 博客,请务必保留此出处http://smartlife.

1631 Bridging signals nlogn最长上升子序列

'Oh no, they've done it again', cries the chief designer at the Waferland chip factory. Once more the routing designers have screwed up completely, making the signals on the chip connecting the ports of two functional blocks cross each other all over the place. At this late stage of the process, it is too expensive to redo the routing. Instead, the engineers have to bridge the signals, using the third dimension, so that no two signals cross.

Socket用法详解

一、构造Socket Socket的构造方法有以下几种重载形式: (1)Socket() (2)Socket(InetAddress address, int port)throws UnknownHostException,IOException (3)Socket(InetAddress address, int port, InetAddress localAddr, int localPort)throws IOException (4)Socket(String host, int port) throws UnknownHostException,IOException (5)Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException 各构造方法的用法如下: 1. 设定等待建立连接的超时时间: Socket socket=new Socket(); SocketAddress remoteAddr=new InetSocketAddress("localhost",8000); //等待建立连接的超时时间为1分钟 socket.connect(remoteAddr, 60000); 2. 设定服务器的地址: Socket(InetAddress address, int port) Socket(String host, int port) InetAddress类表示IP地址,其用法如下: //返回本地主机的IP地址 InetAddress addr1=InetAddress.getLocalHost(); //返回代表"222.34.5.7"的IP地址 InetAddress addr2=InetAddress.getByName("222.34.5.7"); //返回域名为"www.javathinker.org"的IP地址 InetAddress addr3=InetAddress.getByName("www.javathinker.org"); 3. 设定客户端的地址: 在一个Socket对象中,既包含远程服务器的IP地址和端口信息,也包含本地客户端的IP地址和端口信息。默认情况下,客户端的IP地址来自于客户程序所在的主机,客户端的端口则由操作系统随机分配。Socket类还有两个构造方法允许显式的设置客户端的IP地址和端口: Socket(InetAddress address, int port, InetAddress localAddr, int localPort )throws IOException Socket(String host, int port, InetAddress localAddr, int localPort ) throws IOException 4.

MySQL-Front 5 注册码

5.0版的: xrJM6I3WyKM89qwbcEviUtHrub07K57+ G0oCeccGnRml/1Z8+cIG595rmvhJOH+J 9cE5NsM6llSCCNWxg/UZbZdqY7SV5T2a 2oEUR3jy0hpPtFQq1D47ljU6yxzwQCFD H3213Mq9emTxXuKO5n/KJTXT12R/5CF6 H1on5vbQzQR+Nh52V+oir4bsfOMEAWaD EpQrIbD1LFuuavvj0j+HGADiZsjAmr2O LIqKocRl3GNB7H2QBiP2N/y1gXxwQuZT ln0/cMkkEPVDoBGa3LmiRg== 5.1版的: 9hb/ohXsGPSfScR0RNsliVuNoLmm bEM5x0HjeEhaJQKCpY8sjnlrrvjh IWkosKYTtr924jTwr9gcjXsNYTvo SobhGngx6fGzDpKc/bbgYWY4yRip 5IjIycv3GtOYlGYqSlni2bBoW/y5 1VKdqLR9M3IVwkPGD5lPzRNs/itJ jYHtM1EBfjkIYY3FlHiN1QgWxcgk WyEM57hUXivNnKfCgh/mxsU2x3qS zYRNxSOK2j3AiQH3f4343vtBV+Iy VpY5wdgBEgUA3mpkBdCE+2oLJQ==

MySQL-Front v5 注册码,注册机。

在MySQL-Front v5.0下测试通过。 NAME:xok.la Key: e1Ns2izlxZwu9Lb4X8qlcWGoxQpUU+hI 8CsVahbbMjpH2F5PfAgosxzjGhATkWJu UsE8QXsqfZ5iSs9yM7D2XMOUVFpKud9K 2977pO7s1Efi72iGWxUn+209a6tulHkq 5cgLtLSpWsK7uvsOeG4UgYZoRnbp+0T4 PJEplfQk9YpMfY9yYJG+NOUbvM1+kMcf CWd9iq3AZHrFHTm5qpSWEiJamTtIpyAD 4UuLXoNyojh5Ne0S6SWxxUJsUQS3DStB o/e0aVBzhRwmrtvg4QdUIg== 注册机下载:/file/2009/03/MySQL-Front5_key.rar 转载于:https://blog.51cto.com/holy2010/343926

SQLLDR的一个CTL样例

LOAD DATA INFILE 'E:\84db\ot_patent2008-06-29 12-27-20.txt' BADFILE 'E:\84db\ot_patent2008-06-29 12-27-20.bad' DISCARDFILE 'E:\84db\ot_patent2008-06-29 12-27-20.dsc' INTO TABLE "HPS"."OT_PATENT" FIELDS TERMINATED BY '|' TRAILING NULLCOLS (ID, NAME char(4000), APPLY_NUMBER char(4000), APPLY_DATE char(4000), PUBLISH_NUMBER char(4000), PUBLISH_DATE char(4000), PROPOSER char(4000), ADDRESS char(4000), MAIN_CLASS char(4000), ANTIBODY_CLASS char(4000), ORIGINATOR char(4000), DEPUTY char(4000), DEPUTY_INSTITUTION char(4000), URL char(4000), COUNTRY char(4000), LAWSTATE0 char(4000), LAWSTATE1 char(4000), LAWSTATE2 char(4000), LAWSTATE3 char(4000), LAWSTATE4 char(4000), LAWSTATE5 char(4000), CURRENTSTATE char(4000), PCT_APPLY_NUMBER char(4000), PCT_APPLY_DATE char(4000), PCT_OPEN_NUMBER char(4000),

EntityManager的find()与getReference()的区别(org.hibernate.lazyinitializationexception could not initialize proxy no session)

EntityManager的find()与getReference()的区别 分类:EJB 先说相同点 这两个方法都接受实体的 class和代表实体主键的对象作为参数。由于它们使用了Java泛型方法,无需任何显示的类型转换即可获得特定类型的实体对象。其中,在primaryKey上面普遍使用了java5的autoboxing(自动装箱)的特性。 再者,就是两者都会在EntityManager关闭的情况下抛出IllegalStateException - if this EntityManager has been closed. 在传入的第一个参数不是实体或者第二个参数不是一个有效的主键的情况下抛出 IlegalArgumentException - if the first argument does not denote an entity type or the second argument is not a valid type for that entity's primary key 不同点: find()返回指定OID的实体,如果这个实体存在于当前的persistence context中,那么返回值是被缓存的对象;否则会创建一个新的实体,并从数据库中加载相关的持久状态。如果数据库不存在指定的OID的记录,那么find()方法返回null。 getReference()方法和find()相似。不同的是:如果缓存中没有指定的实体,EntityManager会创建一个新的实体,但是不会立即访问数据库来加载持久状态,而是在第一次访问某个属性的时候才加载。此外,getReference()方法不返回null,如果数据库找不到相应的实体,这个方法会抛出javax.persistence.EntityNotFoundException。 EntityNotFoundException - if the entity state cannot be accessed 某些场合下使用getReference()方法可以避免从数据库加载持久状态的性能开销。 这里要着重提出的是两句话: 如果缓存中没有指定的实体,EntityManager会创建一个新的实体,但是不会立即访问数据库来加载持久状态,而是在第一次访问某个属性的时候才加载。 比如,em.find()返回的实体,我们就可以对它进行各种操作,而若对em.getReference()返回的实体,由于不会立即访问数据库来加载持久状态,对它进行的操作很可能就会出现Exception,比如在对它返回的实体做getter操作时,由于EntityManager对此采用延时加载,就会抛出org.hibernate.lazyinitializationexception could not initialize proxy no session 因此将一个新的实体传递给事务的时候通常使用find()方法,而当不连接数据库,不使用getter方法,即使用setter方法改变状态时才使用getReference()方法。(这是由于getReference返回是一个Proxy实体,即没有加载持久状态) 某些场合下使用getReference()方法可以避免从数据库加载持久状态的性能开销。 这也完全是由于getReference返回是一个Proxy实体. 比如一个简单的update操作,先使用find()获取实体,而后使用实体的setter方法;或者是getReference()方法,而后使用实体的setter方法。 对于前者JPA调用的SQL:select ****,而后才是update ****

分享几个HIFI音乐下载网站

www.51ctzs.com 楚天之声-发烧音乐 http://kwe.net.cn/ 高品质音乐下载 http://www.ape-flac.cn/ 无损音乐网 转载于:https://www.cnblogs.com/suiyc/archive/2010/06/11/2059769.html

flex 幸运大转盘 代码

<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" xmlns:local="*"> <mx:Script> <!--[CDATA[ import mx.core.UIComponent; import mx.containers.Canvas; /** *转盘块数 */ public static var zpks:int = 8; public var zp:UIComponent = new UIComponent(); public var colorList:Array = [0xFFFFFF,0xFF0000,0x00FF00,0x0000FF,0xFFFF00,0x00FFFF,0xFF00FF,0x663399]; public var ls:Shape = new Shape(); /** *圆盘半径长度 */ public var length:Number = 100; public function init():void{ // trace(testT.originX +">>"+testT.originY) // testT.play([this.test]); var wrap:UIComponent = new UIComponent(); wrap.addChild(zp); wrap.addChild(ls); // wrap.width = 500; // wrap.height = 500; wrap.

IMS与软交换的几个最大区别

· 在软交换控制与承载分离的基础上,IMS更进一步地实现了呼叫控制层和业务控制层的分离。 · IMS起源于移动通信网络的应用,因此充分考虑了对移动性的支持,并增加了外置数据库——归属用户服务器(HSS),用于用户鉴权和保存用户业务触发规则。 · IMS全部采用会话初始协议(SIP)作为呼叫控制和业务控制的信令,而在软交换中,SIP只是可用于呼叫控制的多种协议的一种,更多地使用媒体网关控制协议(MGCP)和H.248协议。 总体来讲,IMS与软交换的区别主要是在网络构架上,IMS的网络架构相比于软交换更为先进,因为IMS比软交换进行了更充分的网络解聚。网络各个层面的不断解聚是电信网络发展的总体趋势,从传统电路交换网到智能网出现,再到软交换以及IMS,无不符合这种趋势。网络的解聚使得垂直业务模式被打破,有利于业务的发展;另外,不同类型网络的解聚也为网络在不同层面上重新聚合创造了条件。这种重新聚合,就是网络融合的过程。由此可见,IMS的网络架构相比于软交换也更有利于实现固定与移动的网络融合。 但是,并不能说IMS出现以后,软交换就可以完全消失了。在提供基本的话音业务方面,软交换较IMS仍然具有优势。 IMS中全部采用SIP协议,这种协议在多媒体应用中已经展现出了它的优势。虽然SIP也能够实现最基本的VoIP,但是可以说SIP天生就是为多媒体业务而生。相比之下,在软交换中使用的MGCP和H.248协议则更多地关注语音业务,在制订这些协议时充分地考虑了保留传统电话业务中的一些特性。这使得MGCP和H.248协议比SIP更容易继承传统的电话业务。虽然SIP可以通过许多扩展来增强电话业务能力(如拍叉、二次拨号),但是,第一,这并不是发展SIP的初衷;第二,即使经过扩展,某些业务仍然无法实现(例如热线业务)。 另一方面,传统电话业务已经非常成熟,不会再有太多的业务扩展,这让IMS的架构无法发挥出业务部署灵活的优势。现有的IMS实现传统电话业务的方法是使用专用的传统电话业务应用服务器,所有呼叫都必须通过呼叫控制层进行转发,并且还要考虑用SIP去适配各种终端和协议,这些无疑都会降低业务实现的效率,这还没有考虑软交换相对于IMS的成本优势。 还有一个不可忽略的因素,就是在软交换架构下非常容易重用传统的智能网资源,而在IMS架构下实现起来有一定的难度。 由此可见,在仅需要提供传统电话业务的环境下,软交换相比于IMS具有一定的优势。软交换未来的发展,应该主要定位于传统电话业务,即通常所说的窄带话音业务。只要传统的话音业务形式不消失,软交换技术就有其存在下去的理由。

投身技术行业,你,是否已经准备好?

版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明 文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://narancia.blog.51cto.com/1365317/316607 “没有目标的船,什么风都不是顺风” 你会不会总感觉工作找来找去总是不合适? 你会不会有一切都很顺利,但你却总觉得工作时常有烦躁的感觉? 你会不会经常反思“这是我想要的生活吗”? 你会不会被他人为梦想而拼搏所感动,也想何时自己也能为梦想燃尽斗志? 最后, 你还有梦想吗? 假如你并没有被以上疑问而困惑,那么您不必往下看了。假若有,相信下文会给您答案。 当你看到这里,或许你是一个应届毕业生,正在选择人生中谋求生存的手段;或者你是一个迷茫已久,过着浑浑噩噩般生活的职业人; 又或者你是一个正想要为自己所爱的事业大展宏图的热血青年。不论你是哪一种人,请你问自己三个问题: 1.我为了什么才选择的技术行业? 2.我的爱好是否在此? 3.这种生活是不是我想要的? 相信更多的人在选择技术行业是为了高额的薪酬,不必有任何隐晦,我也一样,每个人都希望过上富裕的生活,但真正当你得到这些的时候,那时你会发现真正闪耀 的人是那些为理想拼搏而生的人们,他们是可敬的。如果你抱着追求财富名利而投身于技术领域,那么摆在你面前的将是一条痛苦之路,而路的劲头是遗憾的大门, 大门之后是无尽的悔恨。 或许有人看到这里会认为我是一个站着说话不腰疼的人,不可否认,社会是一个大的循环,有些人穷尽所有想要变得富有,而有些人愿 意放弃财富换来幸福,在这里我要声明一点,虽然我是北京人,但我敬佩所有北漂一族,他们放弃了家乡的一切孤身一人来到北京拼搏,他们比我们放弃了更多,忍 受了更多,同时也得到了更多。但是,如果你是一个工作了若干年而小有所成的职业人,我想请问:“您现在过的快乐吗?”。 更多人选择与生活妥协,但这也是没有办法的,生活所迫,来自各方的压力不允许你有更多的选择,于是很多人像我一样如此沉沦下去,浑浑噩噩的上班,下班,领 薪水,如此反复,仿佛傀儡一般,回想起大学时代与好友畅谈理想抱负的片段,或许...我已经忘记梦想的轮廓... 之所以我会写此文,是因为看到了一些人和事 一个人放弃了年薪20万的市场营销职位而投身于自己喜爱的事业中。 一个人已年近40毅然辞去现在的工作参加培训,原因只为他想圆梦。 一个人毫无基础但拼命刻苦,在半年之内每天只睡4个小时,为的只是想在自己喜爱的行业中打出一番天下。 而为了功利的你 未来后半生,都将在你不喜欢的行业中摸爬滚打; 未来后半生,都将每天看着你不感兴趣的数据参数和各种复杂的报表; 未来后半生,都只能在少之又少的业余时间中去发展你的爱好; 未来后半生,总有一天你会厌倦你的行业,那时一切已经太晚,只有遗憾陪伴你终老; 投身技术行业 现在的你,准备好了吗? ---------------------------------------- 假如你有所迷茫,假如你自己都不清楚自己想从事什么行业,那么请做一下下面这个MBTI职业性格测试,或许你能找到你的答案,请靠你的直觉去答 题,不要想得过多,这个测试十分准确(共88道题) http://www.apesk.com/mbti/dati88.asp 本 文出自 “放飞梦想 畅享人生 ” 博客,请务必保留此出处http://narancia.blog.51cto.com/1365317/316607

经纬度坐标转换函数:度分秒转换成十进制的度(VB)

'将以度分秒表示的经纬度转换为以度表示的经纬度 Function CoordinateTrans(ByVal Coordinate As String) As Double Dim sTemp() As String '判断引用值是否为数值,若不是则直接输出0 If IsNumeric(Coordinate) Then '格式化经纬度的表示方法(度.分.秒) Coordinate = Format(Coordinate, "0.00.0000") '分解出“度”、“分”、“秒” sTemp = Split(Coordinate , ".") '计算出以度表示的经纬度 CoordinateTrans = CDbl(Format(sTemp(0) + sTemp(1)/60 + sTemp(2)/600000, "0.000000000000") Else CoordinateTrans = 0 End If End Function

MySQL-Front 5 注册码(转)

[align=center]5.0版的: xrJM6I3WyKM89qwbcEviUtHrub07K57+ G0oCeccGnRml/1Z8+cIG595rmvhJOH+J 9cE5NsM6llSCCNWxg/UZbZdqY7SV5T2a 2oEUR3jy0hpPtFQq1D47ljU6yxzwQCFD H3213Mq9emTxXuKO5n/KJTXT12R/5CF6 H1on5vbQzQR+Nh52V+oir4bsfOMEAWaD EpQrIbD1LFuuavvj0j+HGADiZsjAmr2O LIqKocRl3GNB7H2QBiP2N/y1gXxwQuZT ln0/cMkkEPVDoBGa3LmiRg== 5.1版的: 9hb/ohXsGPSfScR0RNsliVuNoLmm bEM5x0HjeEhaJQKCpY8sjnlrrvjh IWkosKYTtr924jTwr9gcjXsNYTvo SobhGngx6fGzDpKc/bbgYWY4yRip 5IjIycv3GtOYlGYqSlni2bBoW/y5 1VKdqLR9M3IVwkPGD5lPzRNs/itJ jYHtM1EBfjkIYY3FlHiN1QgWxcgk WyEM57hUXivNnKfCgh/mxsU2x3qS zYRNxSOK2j3AiQH3f4343vtBV+Iy VpY5wdgBEgUA3mpkBdCE+2oLJQ==[/align]

用AS3.0开发flash版SLG游戏-1

说到经典的战棋游戏,我还是最痴迷于曹操传,以前也曾因为研究曹操传MOD而废寖忘食,也做过一个曹操传的MOD小热一时, 却没想到曹操传MOD已经发展到现在这种地步,无论是画面还是技术都有了大规模的突破 但是,修改永远是修改,总会遇到各种限制,想要突破,当然要自己动手,开发自己的引擎。 但是,在这里,我研究flash版的曹操传,目的并不是想要有任何突破,只是单纯的为了研究一下,熟悉一下用flash完成各种游戏的制作而已。 先看几个预览 下面开始制作过程 首先,先建立一个战场,显示一张地图吧, 导出一张曹操传第一关颖川的地图,把它转化成gif格式,命名为1.gif待用 然后,建立1S.xml,作为S剧本,内容 <?xml version="1.0" encoding="GB2312"?> <data> <Map>1</Map> </data> 里面的1就是地图的代号,对应的地图就是1.gif了 要显示它,就很简单了 建立两个Sprite, //最底层Sprite private var _bakSprite:Sprite; //地图Sprite private var _mapSprite:Sprite; 将地图建立在底层的Sprite,方便之后操作 _bakSprite.addChild(_mapSprite); //加载地图 _pic_loader = new Loader(); _pic_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteMap); var mapName:String = "Images/HM/" + _fightXml.Map + ".gif"; _pic_loader.load(new URLRequest(mapName)); //加载地图完毕 private function onCompleteMap(event:Event):void { _pic_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onCompleteMap); _image = Bitmap(_pic_loader.content); _mapSprite.addChild(_image); } 然后,一张地图,就可以显示出来了 当然,光显示出来还不行,因为地图很大,窗口显示不了全部的地图,这样,就要像曹操传中的那样,当鼠标移动到边界的时候,地图就发生移动,看到自己想看的位置 所以,需要加入鼠标移动事件 //鼠标移动事件 this.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); //鼠标移动事件 private function mouseMoveHandler(event:MouseEvent):void{ var intX:int = event.

为Asterisk增加中文语音合成TTS功能-eSpeak应用(转)

转自:http://www.51asterisk.com/read.php?tid=494&ordertype=desc 为Asterisk增加中文语音合成TTS功能 TTS即语音合成技术(Text To Speech),它涉及声学、语言学、数学信号处理技术、多媒体技术等多个学科技术,是中文信息处理领域的一项前沿技术,实现把计算机中任意出现的文字转换成自然流畅的语音输出。 TTS在CTI系统中可以应用在IVR(交互式语音应答)服务器上,以提供语音交互式平台,为用户电话来访提供语音提示,引导用户选择服务内容和输入电话事务所需的数据,实现对计算机数据库等信息资料的交互式访问。维护人员不必再人工录音,只须将电子文档引入系统中,系统可以自动将电子文档转换为语音信息播放给客户。数据库中存放的大量数据,无需事先进行录音,能够随时根据查询条件查出并合成语音进行播报,从而大大减少了座席人员的工作负担。 常见的TTS语音合成应用有电话银行、实时股票信息查询、气象服务、手机号码归属地查询等。 那么应如何将TTS功能附加到Asterisk应用中呢?下面介绍一个可以支持中文普通话和粤语的开放源代码语音合成软件,可以与Asterisk完美集成。 1、系统环境 我们使用的环境是: CentOS 5.2 Zaptel 1.4.11 Asterisk 1.4.21.2 Chan_SS7 OpenVox DE410P portaudio 2、下载语音合成软件eSpeak eSpeak是一个健壮的开放源代码语音合成软件,用C语言写成,支持英语和其他很多语言,支持Linux、Windows、Solaris 和 Mac OSX等操作系统,项目网址http://espeak.sourceforge.net. eSpeak提供了共享链接库或者动态链接库(DLL),方便其他程序调用,而且支持SAPI5接口,合成的语音可以导出为wav文件, eSpeak依赖于一种称为共振峰合成(formant synthesis)的技术,它的原理是处理器产生一个波形,然后让该波形通过各种滤波器以形成一个语音波。尽管这种技术具有改变话音音调和持续时间的功能,可产生的声音仍然具有明显的合成痕迹。这种技术的好处是语音库比较小。 eSpeak可以在这个页面下载到:http://espeak.sf.net/download.html 安装文档:eSpeak开发指南http://www.eguidedog.net/doc_espeak.php 3、下载中文语言包 中文普通话语言包zh_listx包括了中文字符和拼音,最新更新时间为23.Nov.2009。可以从这里下载到: http://espeak.sourceforge.net/data/zh_listx.zip 把zh_listx文件解压到eSpeak的字符文件目录,然后设置编译选项为zh: espeak --compile=zh 如果需要用到粤语,可以下载zhy_list文件包,最新更新时间为14.Jan.2009 。下载地址为: http://espeak.sourceforge.net/data/zhy_list.zip 把zhy_list文件解压到eSpeak的字符文件目录,然后设置编译选项为zh-yue: espeak --compile=zh-yue 4、编译安装eSpeak 之前需已安装portaudio,而且必须为v18版本 http://www.portaudio.com/archives/portaudio_v18_1.zip cd /usr/src unzip espeak-1.43-source.zip cd espeak-1.43-source/src make make install 5、编译安装asterisk-espeak 编译需依赖libsndfile和libsamplerate库: http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.21.tar.gz http://www.mega-nerd.com/SRC/libsamplerate-0.1.3.tar.gz asterisk-espeak是在Asterisk上应用eSpeak的插件,可以从下面网址下载到: http://sourceforge.net/projects/asterisk-espeak/files/ 复制代码 cd /usr/src tar -xzf asterisk-espeak-0.4.tar.gz cd asterisk-espeak-0.4 make make install

delphi编程里的bool跟boolean类型有什么区别

bool是LongBool类型。 Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool。后面三种布尔类型是为了与其他语言兼容而引入的,一般情况下建议使用Boolean类型。 这四种类型的布尔值占用内存的数量如下: Boolean 1 Byte ByteBool 1 Byte WordBool 2 Bytes(1 Word) LongBool 4 Bytes(2 Words) 对于ByteBool,WordBool和LongBool三种类型True常量的值为非零,False为零,可以用Ord函数验证; 而对于Boolean类型,True常量的值为1,False为零。在期望Boolean值的上下文中,编译器会将ByteBool,WordBool和LongBool三种类型的非零值转换为True。 然而,在Delphi中布尔表达式和Integer/Real是不兼容的。下面的表格对比了Boolean与ByteBool/WordBool/LongBool在异同: Boolean False < True Ord(False) = 0 Ord(True) = 1 Succ(False) = True Pred(True) = False BoolToStr(True) = -1 //这个函数很变态 BoolToStr(False) = 0 ByteBool, WordBool, LongBool False <> True Ord(False) = 0 Ord(True) <> 0 Succ(False) = True Pred(False) = True BoolToStr这个函数最莫名其妙了,明明说True的值是1,而它却告诉我们True是-1。函数的原形是: function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string;

HiddenField在js赋值后,提交后值不变的问题

也许在js中,你把value的v大写了。 例如: var hfEmployeeID = document.getElementById("<%= hfEmployeeID.ClientID %>"); if (returnValue) { hfEmployeeID.Value = returnValue.ID; alert(hfEmployeeID.Value); } javascript区分大小写哦。如果大写了就根本没有赋值到HiddenField里面去,所以在后台代码中就根本取不到值。

Spring JdbcTemplate 批量执行SQL语句

package nut.jade.db; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.List; import java.util.Map; import java.util.Set; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; import nut.jade.db.DBCPPool; import nut.jade.db.ConfigBean; /** * 数据库操作类 * * @author nut.jade * */ @SuppressWarnings("unused") public class DBUtil { /** * jdbc 操作类 */ private JdbcTemplate jdbcTemplate; /** * 事务管理模版 */ private TransactionTemplate transactionTemplate; /** * 数据源

如何用JavaScript打印Web页面

事实上IE已经为我们内嵌了WebBrowser控件,已经能够很好的支持我们常用的打印功能了。通过该控件的功能调用,用户可以将当前的Html页面输出到打印机上,用户只需要将要打印的数据组织成Html页面,然后调用WebBrowser的打印功能就可以很好的实现所见即所得的打印功能。不过这种打印存在的缺点就是打印精度不够,如果需要精确定位的打印或套打建议还是使用专用的打印控件实现。下面我们就来讨论如何用WebBrowser打印控件来实现通用报表的打印。 同其他控件一样,首先我们需要在页面中嵌入WebBrowser控件,不过由于该控件是IE浏览器自带的,支持浏览器默认安全设置,因此避免了安全性设置的麻烦。对于IE7及以上安全性要求更高的浏览器,您或许还是需要自定义IE的安全性级别。 <object ID='WB' STYLE="DISPLAY: NONE;" CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object> 下面就是该控件涉及打印的功能调用,用户可以在JavaScrip中调用: document.all.WB.ExecWB(6,1); //打印,打印当前页面 document.all.WB.ExecWB(7,1); //打印预览 document.all.WB.ExecWB(8,1); //打印设置,调出系统打印设置对话框 首先生成要打印的HTML页面,调整好打印样式,再在Script中调用上面的打印函数,您要的报表就被打印出来了。当然关于打印样式这里还有一些技巧。 <style media=print> /* media=print 声明该样式对打印有效 */ .Noprint {display:none;} /* 声明了该样式的元素将不会被打印 */ .PageBreak {page-break-after: always;} /* 分页标志,在需要分页的地方插入具有该样式的元素,将自动分页 */ </style> 还有一个不方便的问题是IE浏览器默认会添加页眉和页脚,这在实际应用中是不需要的,因此我们需要在浏览器中将页眉页脚清空,在页面设置对话框中清空页眉页脚即可。还有另一种方法是用VB Script修改本地注册表清除页眉页脚信息。下面是从网络中摘抄的具有该功能的脚本: <script language="VBScript"> dim hkey_root,hkey_path,hkey_key hkey_root="HKEY_CURRENT_USER" hkey_path="/Software/Microsoft/Internet Explorer/PageSetup" '//设置网页打印的页眉页脚为空 function pagesetup_null() on error resume next Set RegWsh = CreateObject("WScript.Shell") hkey_key="/header" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"" hkey_key="/footer" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"" end function '//设置网页打印的页眉页脚为默认值 function pagesetup_default() on error resume next Set RegWsh = CreateObject("

eclipse中改变默认的workspace的方法及说明

eclipse中改变默然的workspace的方法可以有: 1.在创建project的时候,手动选择使用新的workspace,如创建一个web project,在向导中的Location选项,取消使用"Use default location",同时在下面选择新的workspace. 2.在file菜单中选择switch workspace项,即可选择一个新的workspace 3.在eclipse安装目录下configuration/.settings目录下的 org.eclipse.ui.ide文件,修改RECENT_WORKSPACES=默认workspace路径 4.启动快捷方式用 eclipse.exe -data C:/WorkSpace... 5.在window菜单的preferences向导中,General下的Startup and Shuidown下,勾选"Prompt workspace on startup",再重新启动eclipse,即可在启动之初重新选择workspace. 上文转自:http://hi.baidu.com/sunshinesky/blog/item/858aa28bbd8cc7799e2fb488.html 上述方法中第1条适合在已经进入工作区,然后创建工程的时候不希望创建在当前工作区的情况,个人感觉这个放在这里好像不是特别合适,因为访问项目的时候,还是需要从当前工作区登录访问的,只不过是项目放在了另外的一个项目中。 第2条用于在进入eclipse之后,在不同的工作区之间跳转 第3条则应该只是修改了最近访问的工作区,而且如果存在多个工作区的话,可以发现不同的工作区之间以回车分隔 第4条则是直接进入指定的工作区,即C:/WorkSpace... 按照第5条的操作之后,eclipse在启动时会询问用户使用哪一个工作区进入,如果不小心在进入时误点了“将此值用作缺省值并且不再访问”复选框,则通过此操作修正。

sql常用的 高级编程

T-SQL 高级编程 /*-变量应用-*/ --局部变量以标记@为前缀 --全局变量以标记@@为前缀 --局部变量声明 declare @变量名 数据类型 --局部变量赋值:使用set语句或select语句 --set 赋值语句一般赋给变量指定的数据常量 set @变量名 = 值 --select 赋值语句一般用于从表中查询数据,然后再赋给变量 --当用select赋值时,不进行筛选会将最后一条记录赋给变量 select @变量名 = 列名值 from 表名 where 条件 全局变量表变量含义@@error最后一个T-SQL错误的错误号@@identity最后一次插入的标识值@@language当前使用的语言的名称@@max_connections可以创建的同时连接的最大数目@@rowcount受上一个SQL语句影响的行数@@servername本地服务器的名称@@servicename该计算机上的SQL服务器的名称@@timeticks当前计算上每刻度的微秒数@@transcount当前连接打开的事物数@@versionSQL Sever的版本信息 /*-输出语句-*/ print convert(varchar(大小),变量或字符串) --只适合打印字符和字符串 select 变量 as 自定义列名 --适合所有类型 /*-逻辑控制语句-*/ --if-else条件语句 if(条件) begin --语句块 end else begin --语句块 end --while循环语句 while(条件) begin --语句块 end --case多分支语句 case when 条件1 then 结果1 when 条件2 then 结果2 else 结果3 end 列名 = case when 列值 then 表达式 else 表达式 end/*-高级查询-*/ --简单子查询 select 列名 from 表名 where 条件列名 = (select 条件列名 from 表名 where 条件) --in和not in子查询 select 列名 from 表名 where 条件列名 in (select 条件列名 from 表名 where 条件) select 列名 from 表名 where 条件列名 not in (select 条件列名 from 表名 where 条件) --exists和not exists子查询 if exists(select * from 表名 where 条件) begin --语句块 end if not exists(select * from 表名 where 条件) begin --语句块 end/*-事务-*/ --管理事务开始事务:begin transaction 提交事务:commit transaction 回滚事务:rollback transaction --分类 显示事务:用begin transaction 明确指定事务的开始 隐式事务:通过设置set implicit_transaction on 语句,将隐式事务模式设置为开.

安规设计手册

0、概论 1、产品资料的安规设计要求 2、安规元器件 3、安规标识 4、产品的安规设计要求 4.1、工作电压的测量 4.2、电气间隙和爬电距离 4.3、温升 4.4、抗电强度 4.5、输出过载及变压器过载 4.6、输出短路 4.7、风扇堵转及通风孔堵塞 4.8、元件故障试验 5、附录 5.1、附录A 电气间隙和爬电距离表 5.2、附录B 抗电强度试验电压表 5.3、附录C异常测试时变压器绕组和电感允许的温度限值 0、概论 应用安全标准的目的在于减少由于下列危险造成伤害或危害的可能性。 —电击; —与能量能关的危险; —着火; —与热有关的危险; —机械危险; —辐射; —化学危险。 设计者不仅要考虑设备的正常工作条件,还要考虑可能的故障条件以及随之引起的故障,可预见的误用以及诸如温度、海拔、污染、湿度、电网电源的过电压和通信线路的过电压等外界影响。 1、产品资料的安规设计要求 1.1产品规格书: 产品规格书应包括: 抗电强度的描述、输入输出线与端子的描述、冷却条件的说明(如为强迫风冷且又未自带风扇,则要详细说明风扇的规格和安装位置)、完整的标签等,还应规定额定输入电压(范围)、额定输入频率(范围)、额定输出电流(范围)、最大输入电流、工作环境温度;产品规格书应对产品的安装方式或条件、保护接地方式以及安全性警告予以说明,以使公司对于用户的不规范操作带来的危害可以免除责任。另外,产品规格书中的中英文应分开、独立。 关于产品规格书的制作和内容的具体要求如下。 1.1.1产品外形及主要规格: a.型号应为产品在市场销售的名称,而不能写成公司内部的型号,如D78的产品规格的型号应为PMA52F,而不能写成D78。 b.表示范围的符号应用“-”,而不能用“~”。这个要求也同样适用于整份规格书。 1.1.2使用环境: 散热方式的自然风冷或强制风冷的条件要写清楚。如果是强制风冷且未自带风扇,则应规定风扇的规格(型号、尺寸大小、电气额定值、风扇转速等)和安装位置以及其它说明,此信息可在“强制风冷环境”一节中详细描述。 另外,环境温度要注明清楚。 注:环境温度的最大温度会影响到安规的一些测试(如温升、异常测试等),所以在客户的要求内应尽量将环境温度的上限值取低一些。 1.1.3电气特性: a.如果产品的初级为危险电压的二次电路(例如DC-48V输入。如果难以判断是否为危险电压的二次电路,可询问安规工程师),且产品本身不能承受加强绝缘的抗电强度,则应在电压输入的备注栏增加说明:“本产品应由加强绝缘隔离的变压器或电池供电”。 注:安规上的危险电压指的是高于42.4VAC峰值或60VDC的电压。 b.额定输入电压(范围)、额定输入频率(范围)、额定输出电流(范围)、最大输入电流要清楚无误。如果自然风冷、强制风冷时输出有所差异,则要详细说明。 C.额定电压和额定电压范围的问题:对于AC输入,额定电压可标明为100-240VAC或200-240VAC,额定电压范围则可以是客户指定的输入电压范围,如“85-285VAC”等。对于DC输入,额定电压可标明为“-36 - -76VDC”、“-40 - -75VDC”等形式,额定电压范围也可标明为客户指定的范围。 1.1.4安规及EMC特性: 将“绝缘强度”一词改为“抗电强度”。 1.1.5机械特性: a.应对输入、输出连接器进行详细说明。 b.如果输出有软线,则应写明各路输出和软线颜色一一对应关系。 C.如果输入、输出线有地线(指大地),则此地线必须用黄绿线。 1.1.6标贴: 参考本资料的3.1铭牌标签。 1.1.7强制风冷环境模拟: 应详细规定风扇的规格(型号、尺寸大小、电气额定值、风扇转速)和安装位置以及其它说明。 1.2 变压器规格书: 变压器规格书中应包括其所用物料的清单(包含名称、规格、制造商、认证编号的信息);对于安全性隔离变压器,其初、次级绕组出线都就套上绝缘套管并穿过挡墙1~2mm;规格书中应包括所有绕组的铜阻阻值; 如果产品需要申请UL认证,则变压器须有变压器绝缘系统认证,且变压器所用的材料及其供应商(磁芯除外)须为其绝缘系统内的材料及其供应商。 变压器的尺寸标注不应写为“XX MAX”的格式,而应为“XX±XX”的格式。 1.3 电感规格书: 如果产品需要申请TUV认证,则需要提供各电感的铜阻阻值。同样,电感的尺寸标注也不应写为“XX MAX”的格式,而应为“XX±XX”的格式。

软件研发部经理岗位职责

根据网上的一些资料以及公司实际的情况而制定: 1、负责部门人员的引进及本部门人员的绩效考评管理工作; 2、制订部门内部的改造计划,组织审定部门各项技术标准,编制、完善软件开发流程,并组织部门人员进行研究讨论; 3、抓好本部门项目组总结分析报告工作,定期进行项目分析、总结经验、找出存在的问题,提出改进工作的意见和建议,为公司领导决策提供专题分析报告或综合分析资料。 4、组织本部门人员的培训、技术指导以及技术难点突破工作; 5、配合市场部门开展工作,向市场部门提供必要的技术支持; 6、在需求调研中,配合项目组长进行需求调研工作,并对需求调研报告进行审核评定; 7、同项目组长组织设计开发工作,控制开发进度; 8、负责组织软件项目的测试工作,对软件产品的质量负责; 9、对项目组文档进行质量、数量和时间控制,并组织召开评审会; 10、对部门下面人员的日报、周报检查,了解每一个开发人员的工作情况以及工作状态; 11、规范部门内部管理,提高员工整体技术水平,把握技术发展方向,使得技术发展方向与主流技术合拍; 12、热情接待客户,并妥善处理客户的抱怨、投诉以及突发性事件; 13、视下属为兄弟姐妹,在工作生活中给予最多的关爱。 转载于:https://www.cnblogs.com/zzj/archive/2010/03/29/1699805.html

J2ee路径问题(转)

前天突然想把 做了一部分的 程序变得更安全, 就把全部的jsp视图页面给移到了 WEB-INF中 , 结果问题出来了一大堆: 全部图片, struts 的访问。 已经做的 功能全部都乱套了 , 更搞笑的是 我没有备份。。 汗。。 都是相对路径惹的祸 网上得到这段不错的 技术: (转载) JSP 中究竟采用绝对路径还是采用相对路径随着所采用技术的越来越复杂,这个问题也变得越来越难以解决。 1) 采用相对路径遇到的问题 l 相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不同的页面具有不同的相对路径,复制后必须修改每一个连接的路径。 l 如果页面被多于一个的页面所包含,那么被包含页面中的相对路径将是不正确的。 l 如果采用 Struts 的 Action 返回页面,那么由于页面路径与 Action 路径不同,使得浏览器无法正确解释页面中的路径,如页面为 /pages/cust/cust.jsp ,图片所有目录为 /images/title.gif ,这时在 /pages/cust/cust.jsp 中的所用的路径为 ”../../images/title.gif” ,但是如果某一个 Action 的 Forward 指向这个 JSP 文件,而这个 Action 的路径为 /cust/manage.do ,那么页面内容中 ”../../images/title.gif” 就不再指向正确的路径了。 解决以上问题似乎只有使用绝对路径了。 2) 采用绝对路径遇到的问题 l 随着不同的 Web 应用发布方式,绝对路径的值也不同。如 Web 应用发布为 MyApp ,则路径 ”/MyApp/images/title.gif” 是正确的,但发布为另一应用时如 MyApp2 ,这个路径就不对了,也许这个情况比较少,但以 default 方式发布 Web 应用时以上绝对路径也不同: ”/images/title.

实现LoadPE功能

// MyTestPE.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> #include "winnt.h" #include <tchar.h> #include <iostream> #include <string> using namespace std; //本程序实现打印出PE文件的段信息 / PIMAGE_DOS_HEADER pDosHeader; PIMAGE_NT_HEADERS pPEHeader; PIMAGE_SECTION_HEADER pSectionHeader; PIMAGE_DATA_DIRECTORY pDataDirectory; PIMAGE_IMPORT_DESCRIPTOR pImportDescriptor; PIMAGE_EXPORT_DIRECTORY pExportDirectory; PIMAGE_THUNK_DATA pThunkData; PIMAGE_IMPORT_BY_NAME pImportByName; //定义了文件结构 int size =1024; DWORD dwBytesRead=1024; void GetInfo(string FileName) { HANDLE h_File; char* pbuff = new char[size]; //(LPCTSTR )FileName.c_str(),_T("d://in.txt") h_File = CreateFile(_T("d://reverseMe.exe"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); //文件名的转化不懂 if (h_File==INVALID_HANDLE_VALUE) //这里这样传文件名和路径的时候打开出错,先写死了在说 { cout<<"打开文件失败!"; system("pause"); return ;

[AS3]判断两个对象是否相等

/** * 判断两个对象是否相等,它使用深层比较。 * @param a 一个对象。 * @param b 另一个对象。 * @return 如果相等,返回 true;否则返回 false。 */ public static function eqObject(a:Object, b:Object):Boolean { if(a === b) { return true; } var bytesA:ByteArray = new ByteArray() bytesA.writeObject(a); var bytesB:ByteArray = new ByteArray() bytesB.writeObject(b); return eqByteArray(bytesA, bytesB); }

要提高SQL查询效率where语句条件的先后次序应如何写

我们要做到不但会写SQL,还要做到写出性能优良的SQL语句。 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表。 (2)WHERE子句中的连接顺序: Oracle采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。 中.国.站长站 (3)SELECT子句中避免使用‘*’: Oracle在解析的过程中, 会将‘*’依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。 (4)减少访问数据库的次数: Oracle在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等。 (5)在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200。 (6)使用DECODE函数来减少处理时间: 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表。 (7)整合简单,无关联的数据库访问: 如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)。 (8)删除重复记录: 最高效的删除重复记录方法 ( 因为使用了ROWID)例子: DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO); (9)用TRUNCATE替代DELETE: 当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况) 而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息。当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短。(TRUNCATE只在删除全表适 用,TRUNCATE是DDL不是DML)。 Chinaz_com (10)尽量多使用COMMIT: 只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少,COMMIT所释放的资源: a. 回滚段上用于恢复数据的信息。 b.

Oracle delete 数据后的释放表空间问题

Oracle10g新特性shrink segment来降低HWM 数据表的庞大导致查询速度降低是必然的,所以常常将数据表的数据移走,但是使用delete后,数据是删除了,但是速度没有多大改善,忧闷了。使用备份表再drop掉原表。的确可以解决问题。但是较麻烦,今天请教了一个Oracle高手,解决了问题。 由于delete操作是不释放表空间的,要想提高查询速度则必须释放表空间。 对Oracle 9i而言,释放表空间则需要重新分析表。 analyze table itemLog compute statistics; 再进行select ,感觉的确快了很多。 另一种方法:使用exp将表导出,drop 掉表,再imp回去。 先做个简要笔记 今天,帮同事导数据,从开发环境导到测试环境中,发现一个查询变的很慢。查看执行计划,发现居然用了全表扫描(表中大约300w条记录),为啥不用索引呢,查看索引状态,一切正常。晕。 肯定是索引的问题,先分析一下表再说。 analyze table ysgl_compile_reqsub compute statistics for all indexes; 正常了。 ------------------------------------------------------ 一个论坛上的帖子: Analyze table对Oracle性能的提升 url:http://www.itpub.net/thread-295293-1-1.html 大家来讨论一下这个优化课题 我自己碰到的一个实际情况: 一个sql语句执行要1个小时,有时候还出不了结果,但分析sql涉及的表后,然后重新执行3分钟搞定! 真的有这样惊人的差异? 世事无绝对,有时候你可能发现会变慢 了解了CBO和RBO你就知道区别了 annlyze表会增加CBO执行的性能?不一定的。 我就碰到一个语句分析后要执行30多分钟,删除分析后,只要30秒。 很多情况下不一定的,最好是自己从执行计划判断

MFC中位图按钮的实现方法:( 位图必须用.bmp 格式的)

MFC中位图按钮的实现方法:( 位图必须用.bmp 格式的) 首先,我们创建一个基于对话框的应用程序CmyDialog ; Ι.MFC的CBitmapButton类,这也是最简单的功能最强的位图按钮。我们可以采取如下的步骤: 需定义CBitmapButton 对象与CButton一一对应. 1. 在创建按钮资源IDC_BUTTON时选择 owner draw (自己画); 2. 在对话框.h文件内定义位图按钮对象 CBitmapButton mybutton; 3. 在对话框.c文件内创建 BOOL Dialog::OnInitDialog() {} 如果已有就不必创建; 4.一种方法: mybutton.LoadBitmaps(IDB_BITMAP1, IDB_BITMAP1, IDB_BITMAP1,IDB_BITMAP1); mybutton.SubclassDlgItem(IDC_hangup, this); mybutton.SizeToContent(); 另一种方法: 在Oninitdialog()中VERIFY(mybutton.AutoLoad(IDC_BUTTON,this)); 创建位图,其资源ID应与按钮字符相同为:"字符U","字符D","字符X"(分别对应释放,按下,无 效. 引号也要打!) 使用CBitmapButton; 在Oninitdialog()调用 m_btnSearch.LoadBitmaps(IDB_SEARCHU, IDB_SEARCHD, IDB_SEARCHF, IDB_SEARCHX); Ⅱ.使用图标制作按钮 1. 打开ICON按钮的属性页,在Style中选中Icon 。 2. 在对话框类的头文件中定义成员变量(使用ClassWizard加入这个成员变量) CButton m_ IconBtn;//对应于图标按钮 3. 创建相应的图标或者位图资源: 图标资源:IDI_ICONBUTTON 4.在初始化中加入如下代码: … //对应于图标按钮 图标必须是.ico格式的 HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICONBUTTON); m_IconBtn.SetIcon(hIcon); … 重新编译运行我们的程序,奇妙的图像按钮呈现在我们的眼前了。 Ⅲ.使用位图制作按钮 位图必须用.bmp 格式的 1. 打开BITMAP按钮的属性页,在Style中选中Bitmap。 2. 对话框类的头文件中定义成员变量(不用ClassWizard加入这个成员变量) CBitmapButton mybutton; 3.创建位图资源: 位图资源:(IDB_BITMAP1)) 4.在初始化中加入如下代码: //对应于位图按钮 … HBITMAP hBmp=::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1)); ((CButton*)GetDlgItem(IDC_hangup))->SetBitmap(hBmp);

OSGI 远程console登录

在OSGI启动中增加port参数:osgi.console = 9527 ,注意启动参数和config.ini的参数不能重复 启动命令:java -jar org.eclipse.osgi.jar config.ini配置文件: #Assign Bundle's start order osgi.bundles=plugins/TestOSGI@start,\ org.eclipse.osgi.services@start osgi.bundles.defaultStartLevel=4 org.osgi.framework.bootdelegation=org.*,sun.*,javax.*,com.sun.* osgi.noShutdown=true osgi.console=1230 eclipse.ignoreApp=true 启动后就可以使用:telnet 127.0.0.1 9527登录

Spring Autowire自动装配

在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象。但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间和精力用于创建和维护系统中的<ref>标签。实际上,这种方式也会在另一种形式上增加了应用程序的复杂性,那么如何解决这个问题呢?Spring为我们提供了一个自动装配的机制,尽管这种机制不是很完善,但是在应用中结合<ref>标签还是可以大大的减少我们的劳动强度。前面提到过,在定义Bean时,<bean>标签有一个autowire属性,我们可以通过指定它来让容器为受管JavaBean自动注入依赖对象。 <bean>的autowire属性有如下六个取值,他们的说明如下: 1、 No:即不启用自动装配。Autowire默认的值。 2、 byName:通过属性的名字的方式查找JavaBean依赖的对象并为其注入。比如说类Computer有个属性printer,指定其autowire属性为byName后,Spring IoC容器会在配置文件中查找id/name属性为printer的bean,然后使用Seter方法为其注入。 3、 byType:通过属性的类型查找JavaBean依赖的对象并为其注入。比如类Computer有个属性printer,类型为Printer,那么,指定其autowire属性为byType后,Spring IoC容器会查找Class属性为Printer的bean,使用Seter方法为其注入。 4、 constructor:通byType一样,也是通过类型查找依赖对象。与byType的区别在于它不是使用Seter方法注入,而是使用构造子注入。 5、 autodetect:在byType和constructor之间自动的选择注入方式。 6、 default:由上级标签<beans>的default-autowire属性确定。 注意:在配置bean时,<bean>标签中Autowire属性的优先级比其上级标签高,即是说,如果在上级标签中定义default-autowire属性为byName,而在<bean>中定义为byType时,Spring IoC容器会优先使用<bean>标签的配置。

使用SecureCRT传输文件

使用SecureCRT传输文件 SecureCRT当然和以传送文件了,要不你们难道都开ftp来传送文件?这太危险了吧! SecureCRT可以使用zmodem、xmodem模式工作,当然要目标主机支持。 上传: SecureCRT里面有个transfer菜单,你选择Zmodem upload list ... ,然后选择你要上传的文件,选完之后点击close,再在命令行 cd 到你向保存的目录,然后点击transfer菜单的Start zmodem upload,就和以上传文件了 下载: 在命令行敲入 sz 文件名 ,这样文件就下载到你的SecureCRT安装目录下的download目录了 还可以在命令行使用 sx 文件名 ,然后在transfer菜单选择receive xmodem... ,选择你要保存的目录和文件名,点击receive 就可以了 我猜 SecureCRT 上传下载的工作方式是将本地机模拟成一台服务器,然后远程主机使用xmodem,zmodem协议联上本地主机进行文件传送。不知道要安装什么包才行。 lrzsz-0.12.20-7 可以试试SecureFX这个软件 用于sftp传输的,可以试一下 是win软件

面向对象的4个基本特征

面向对象的4个基本特征 在上述面向对象的基本概念基础之上,不可避免地要涉及到面向对象程序设计所具有的4个共同特征:抽象性、封装性、继承性和多态性。 1.抽象 抽象是人们认识事物的常用方法,比如地图的绘制。抽象的过程就是如何简化、概括所观察到的现实世界,并为人们所用的过程。 抽象是软件开发的基础。软件开发离不开现实环境,但需要对信息细节进行提炼、抽象,找到事物的本质和重要属性。 抽象包括两个方面:过程抽象和数据抽象。过程抽象把一个系统按功能划分成若干个子系统,进行"自顶向下逐步求精"的程序设计。数据抽象以数据为中心,把数据类型和施加在该类型对象上的操作作为一个整体(对象)来进行描述,形成抽象数据类型ADT。 所有编程语言的最终目的都是提供一种"抽象"方法。一种较有争议的说法是:解决问题的复杂程度直接取决于抽象的种类及质量。其中,"种类"是指准备对什么进行"抽象"。汇编语言是对基础机器的少量抽象。后来的许多"命令式"语言(如FORTRAN、BASIC和C)是对汇编语言的一种抽象。与汇编语言相比,这些语言已有了较大的进步,但它们的抽象原理依然要求程序设计者着重考虑计算机的结构,而非考虑问题本身的结构。在机器模型(位于"方案空间")与实际解决的问题模型(位于"问题空间")之间,程序员必须建立起一种联系。这个过程要求人们付出较大的精力,而且由于它脱离了编程语言本身的范围,造成程序代码很难编写,而且要花较大的代价进行维护。由此造成的副作用便是一门完善的"编程方法"学科。 为机器建模的另一个方法是为要解决的问题制作模型。对一些早期语言来说,如LISP和APL,它们的做法是"从不同的角度观察世界"、"所有问题都归纳为列表"或"所有问题都归纳为算法"。PROLOG则将所有问题都归纳为决策链。对于这些语言,可以认为它们一部分是面向基于"强制"的编程,另一部分则是专为处理图形符号设计的。每种方法都有自己特殊的用途,适合解决某一类的问题。但只要超出了它们力所能及的范围,就会显得非常笨拙。 面向对象的程序设计在此基础上则跨出了一大步,程序员可利用一些工具来表达问题空间内的元素。由于这种表达非常普遍,所以不必受限于特定类型的问题。人们将问题空间中的元素以及它们在方案空间的表示物称作"对象"。当然,还有一些在问题空间没有对应体的其他对象。通过添加新的对象类型,程序可进行灵活的调整,以便与特定的问题配合。所以在阅读方案的描述代码时,会读到对问题进行表达的话语。与以前的方法相比,这无疑是一种更加灵活、更加强大的语言抽象方法。 总之,OOP允许人们根据问题,而不是根据方案来描述问题。然而,仍有一个联系途径回到计算机。每个对象都类似一台小计算机;它们有自己的状态,而且可要求它们进行特定的操作。与现实世界的"对象"或者"物体"相比,编程"对象"与它们也存在共通的地方:它们都有自己的特征和行为。 2.封装 封装是面向对象编程的特征之一,也是类和对象的主要特征。封装将数据以及加在这些数据上的操作组织在一起,成为有独立意义的构件。外部无法直接访问这些封装了的数据,从而保证了这些数据的正确性。如果这些数据发生了差错,也很容易定位错误是由哪个操作引起的。 如果外部需要访问类里面的数据,就必须通过接口(Interface)进行访问。接口规定了可对一个特定的对象发出哪些请求。当然,必须在某个地方存在着一些代码,以便满足这些请求。这些代码与那些隐藏起来的数据叫作"隐藏的实现"。站在过程化程序编写(Procedural Programming)的角度,整个问题并不显得复杂。一种类型含有与每种可能的请求关联起来的函数。一旦向对象发出一个特定的请求,就会调用那个函数。通常将这个过程总结为向对象"发送一条消息"(提出一个请求)。对象的职责就是决定如何对这条消息作出反应(执行相应的代码)。 若任何人都能使用一个类的所有成员,那么可对这个类做任何事情,则没有办法强制他们遵守任何约束--所有东西都会暴露无遗。 有两方面的原因促使了类的编制者控制对成员的访问。第一个原因是防止程序员接触他们不该接触的东西--通常是内部数据类型的设计思想。若只是为了解决特定的问题,用户只需操作接口即可,无需明白这些信息。类向用户提供的实际是一种服务,因为他们很容易就可看出哪些对自己非常重要,以及哪些可忽略不计。进行访问控制的第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。例如,编制者最开始可能设计了一个形式简单的类,以便简化开发。以后又决定进行改写,使其更快地运行。若接口与实现方法早已隔离开,并分别受到保护,就可放心做到这一点,只要求用户重新链接一下即可。 封装考虑的是内部实现,抽象考虑的是外部行为。符合模块化的原则,使得软件的可维护性、扩充性大为改观。 3.继承 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类的继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且派生类可以修改或增加新的方法使之更适合特殊的需求。这也体现了大自然中一般与特殊的关系。继承性很好地解决了软件的可重用性问题。比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。 关于继承的详细讨论,将在第4.1~4.2节进行。 4.多态性 多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择"编辑"、"粘贴"操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和运行时多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序函数同名问题。 关于多态性的讨论,将在4.7~4.9节进行。 最后,以Alan Kay的话作为本节的结束语。他总结了Smalltalk(这是第一种成功的面向对象程序设计语言,也是Java的基础语言)的五大基本特征。通过这些特征,读者可以理解"纯粹"的面向对象程序设计方法。 (1)所有东西都是对象。可将对象想象成一种新型变量,它保存着数据,但可要求它对自身进行操作。理论上讲,可从要解决的问题上,提出所有概念性的组件,然后在程序中将其表达为一个对象。 (2)程序是一大堆对象的组合。通过消息传递,各对象知道自己该做些什么。为了向对象发出请求,需向那个对象"发送一条消息"。更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个子例程或函数。 (3)每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现有对象,可制作出新型对象。所以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。 (4)每个对象都有一种类型。根据语法,每个对象都是某个"类(Class)"的一个"实例"。其中,"类"是"类型(Type)"的同义词。一个类最重要的特征就是"能将什么消息发给它?"。 (5)同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法,读者不久便能理解。由于类型为"圆(Circle)"的一个对象也属于类型为"形状(Shape)"的一个对象,所以一个"圆"完全能接收"形状"的消息。这意味着可让程序代码统一指挥"形状",令其自动控制所有符合"形状"描述的对象,其中自然包括"圆"。这一特性称为对象的"可替换性",是OOP最重要的概念之一。

VC中动态改变控件和对话框字体(大小)

1 VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体。对于你的问题,需要首先用CreateFont来建立一个字体对象,然后调用控件的SetFont,就可以了。 例子: 1、改静态文体的ID,如:IDC_STATIC1 2、添加一个Edit控件,建立一个关联的控件m_editControl。 3、在OnInitDialog中添加如下代码: CFont * f; f = new CFont; f -> CreateFont( 16 , // nHeight 0 , // nWidth 0 , // nEscapement 0 , // nOrientation FW_BOLD, // nWeight TRUE, // bItalic FALSE, // bUnderline 0 , // cStrikeOut ANSI_CHARSET, // nCharSet OUT_DEFAULT_PRECIS, // nOutPrecision CLIP_DEFAULT_PRECIS, // nClipPrecision DEFAULT_QUALITY, // nQuality DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily _T( " Arial " )); // lpszFac GetDlgItem(IDC_STATIC1)-> SetFont(f); 需要注意的是,这里我们使用的是CFont指针,而不是普通的CFont局部变量, 在非MFC程序,首先用CreateFont来建立一个字体句柄,然后再用SendMessage发给控件WM_SETFONT消息,将建立的字体句柄赋值过去,就可以了。

SOCKET错误代码表

SOCKET错误代码表. Socket error 0 - Directly send error Socket error 10004 - Interrupted function call Socket error 10013 - Permission denied Socket error 10014 - Bad address Socket error 10022 - Invalid argument Socket error 10024 - Too many open files Socket error 10035 - Resource temporarily unavailable Socket error 10036 - Operation now in progress Socket error 10037 - Operation already in progress Socket error 10038 - Socket operation on non-socket Socket error 10039 - Destination address required Socket error 10040 - Message too long Socket error 10041 - Protocol wrong type for socket Socket error 10042 - Bad protocol option Socket error 10043 - Protocol not supported Socket error 10044 - Socket type not supported Socket error 10045 - Operation not supported Socket error 10046 - Protocol family not supported Socket error 10047 - Address family not supported by protocol family Socket error 10048 - Address already in use Socket error 10049 - Cannot assign requested address Socket error 10050 - Network is down Socket error 10051 - Network is unreachable Socket error 10052 - Network dropped connection on reset Socket error 10053 - Software caused connection abort Socket error 10054 - Connection reset by peer Socket error 10055 - No buffer space available Socket error 10056 - Socket is already connected Socket error 10057 - Socket is not connected Socket error 10058 - Cannot send after socket shutdown Socket error 10060 - Connection timed out Socket error 10061 - Connection refused Socket error 10064 - Host is down Socket error 10065 - No route to host Socket error 10067 - Too many processes Socket error 10091 - Network subsystem is unavailable Socket error 10092 - WINSOCK.

心灵震撼《一个8岁女孩的遗书》看完能有几人不哭...

有一个美丽的小女孩,她的名字叫余艳,她有一双亮晶晶的大眼睛她有一颗透明的童心.她是一个孤儿,她在这个世界上只活了8年,她留在这个世界上最后的一句话是“我来过,我很乖”她希望死在秋天,纤瘦的身体就像一朵花自然开谢的过程.在遍地黄花堆积,落叶空中旋舞的时候,她会看见横空远行的雁儿们.她自愿放弃治疗,把全世界华人捐给她的54万分成了7份,把生命当成希望的蛋糕分给了7个正徘徊在生死线上的小朋友. 我自愿放弃治疗 她一出生就不知道自己的亲生父母是谁,她只有一个养父. 1996年11月30日,那是当年农历10月20日,因为“爸爸”佘仕友在永兴镇沈家冲一座小巧旁的草丛中发现了一个冻得奄奄一息的这个新生儿时,发现她的胸口处插着一张小纸片,上面写着“10月20日晚上12点” 家住四川省双流县三星镇云崖村二组的佘仕友当年30岁.因为家里穷,一直找不到对象,如果要收养这个孩子,恐怕就更没有人愿意嫁进这个家门了,看着怀中小猫一样嘤嘤哭泣的婴儿,佘仕友几次放下又抱起,转身走了回头,这个小生命已经浑身冰冷,哭声微弱,在没人管只怕随时就没命了!咬咬牙,他再次抱起婴儿,叹了一口气“我吃什么,你就跟我吃什么吧” 佘仕友给孩子取名佘艳,因为她是秋天丰收季节出生的孩子,单身汉当起了爸爸,没有母乳,也买不起奶粉,就只好喂米汤,所以佘艳从小体弱多病,但是非常乖巧懂事,春去春又回,如同苦藤上的一朵小花,佘艳一天天长大了,出奇的聪明乖巧,相邻都说捡来的娃娃智商高,都很喜欢她,尽管她从小就多病,在爸爸的担惊受怕中,佘艳长大了. 苦命的孩子的确不一般,从5岁起,她就懂得帮爸爸分担家务,洗衣,煮饭,割草,她样样做得好,她知道自己跟别的孩子不一样,别家的孩子有爸爸妈妈,她家就只有她和爸爸,这个家靠她和爸爸一起来支撑,她要很乖很乖,不让爸爸多一点点忧心,生一点点气. 上小学了,佘艳知道自己要好好学习,要上进,要考第一名,不识字的爸爸在村里脸上也会有光.她从没让爸爸失望过,她给爸爸唱歌,把学校里发生的趣事一样一样的讲给爸爸听,把获得的小红花仔仔细细的贴在墙上.偶尔还会调皮的出道题考倒爸爸...每当看到爸爸脸上的笑容,她会暗自满足“虽然不能像别的孩子一样也有妈妈,但是能和爸爸这样快乐的生活下去,也很幸福了” 2005年5月开始,她经常流鼻血.有一天早晨佘艳正在洗脸,突然发现一盆清水红红的,一看是鼻子里的血正在往下滴,不管采用什么措施都止不住,实在没办法,爸爸带她到乡卫生院去打针,可小小的针眼也出血不止,她的腿上还出现了大量的红点点,医生说赶快到大医院去看,来到成都大医院,正值会诊高峰,她排不上队,独自坐在长椅上按住鼻子,鼻血像两条线,直往下掉,染红了地板,她觉得不好意思,只好端起一个便盆接血,不到10分钟,盆子里的血就盛了一半.医生见状,连忙带孩子去检查,检查后,医生开出了病危通知单.她得了“急性白血病”! 这种病的医疗费是非常昂贵的,费用一般需要30万元.佘仕友懵了.看着病床上的女儿,他没办法想太多,他只有一个念头,救女儿!借遍了亲戚朋友凑来的钱也只是杯水车薪.距离30万实在太远,他决定卖掉家里唯一能换钱的土坯房,可是因为房子太过破旧,一时找不到买主. 看着父亲那双忧郁的眼睛和日渐消瘦的脸.佘艳总有一种酸楚的感觉,一次,佘艳拉着爸爸的手,话还未出,眼泪却冒了出来:“爸爸,我想死...” 父亲一双惊愕的眼睛看着她“你才8岁,为啥要死” “我是捡来的娃娃,大家都说我命贱,害不起这病,让我出院吧...” 6月18日,8岁的佘艳代替不识字的爸爸,在自己的病历本上一笔一划的签字“自愿放弃对佘艳的治疗” 8岁女孩乖巧的安排后世 当天回家后,从小到大没有和爸爸提过任何要求的佘艳,这时像爸爸提出两个要求;她想穿一件新衣服,在照一张照片,她对爸爸解释说“以后我不在了,你想我的时候就看看照片上的我” 第二天,爸爸叫姑姑带佘艳来到镇上,花30元给佘艳买了两套新衣服,佘艳给自己选了一套粉红色的短袖短裤,姑姑给她选了一套白色红点的裙子,她试穿上就舍不得脱下来,三人来到照相馆,佘艳穿着粉红色的新衣服,双手比着V字手势,努力的微笑,最后还是忍不住掉下了眼泪... 她已经不能上学了,她长时间背着书包站在村前的小路上,目光总是湿漉漉的. 如果不是《成都晚报》的一个叫傅艳的记者,佘艳将像一片悄然滑落的树叶一样,静静的从风中飘下来. 记者阿姨从医院方面得知的情况,写了一片报道,详细叙说了佘艳的故事,旋即《8岁女孩巧安排后世》的故事在蓉城传开了.成都被感动了,互联网特被感动了,无数市民为这个可怜的女孩心痛不已,从成都到全国,乃至全世界,现实世界与互联网空间联动,所有爱心人士为这个弱小的生命捐款“和谐社会”成为每个人心中的最强者,短短10天时间,来自全球华人捐助的善款已经超过56万,手术的费用足够了.小佘艳的生命之火被大家的爱心再次点燃! 宣布募捐活动结束之后,仍然源源不断收到全球各地的捐款,所有的钱都到位了,医生也尽自己最大的努力,一个接一个的治疗难关也如愿的一一闯过!大家微笑的等待成功的那一天...有网友写到“佘艳,我亲爱的孩子......” 6月21日放弃治疗回家等待死亡的佘艳被重新接到了成都,住进了市儿童医院,钱有了,卑微的生命有了活下去的希望和理由. 佘艳接受了难以忍受的化疗.玻璃门内,佘艳躺在病床上输液,床头边放着一把椅子,椅子上放着一个塑料盆,她不时要侧身呕吐,小女孩的坚强另所有人吃惊,她的主治医生介绍,化疗期间胃肠道反应强烈,佘艳刚开始时,一吐就是大半盆,可她连吭都不吭一声,刚住院时做骨髓穿刺检查,针头从肋骨刺入,她没哭没叫,眼泪都没流,动都不动一下. 佘艳从生到死,没有得到一丝母爱的关怀,当徐鸣医生提出“佘艳,给我当女儿吧”佘艳眼睛一闪,泪珠一下就涌了出来,第二天,当徐鸣医生来到她床前的时候,佘艳竟羞答答的叫了一生“徐妈妈”徐鸣开始一愣,继而笑逐颜开,甜甜的回了一声“女儿乖” 徐鸣医生对佘艳说:“等你病好了,妈妈带你去吃肯德基” 佘艳满眼的迷茫,她实在想象不出肯德基是什么. 第二天徐妈妈到病房,给佘艳穿上了一双白色的袜子,不经意的对她说:“穿上这个,免得凉”佘艳开心的说“妈妈,这是我第一次穿袜子” 徐鸣医生瞬间觉得自己的心里像针扎一样难受,然后问她“告诉妈妈,你还想要什么?" 佘艳低头害羞了半天,然后怯怯的说“我想有一双红皮鞋,里面穿上白袜子,好像白雪公主啊” 当天夜里,徐鸣医生下班后,打车赶到一家卖童装的专卖店,花80元买了一双红皮鞋,又买了两双白袜子. 第二天到病房给佘艳穿上了红皮鞋和白袜子,佘艳坐在床边,脚不沾地,喜欢的不得了. 只可惜,只是穿了短暂的一会,打针的时间到了,脚上要扎针头输液,不一会就把袜子和皮鞋脱了下来. 所有的人都期盼着奇迹的发生,所有的人都期盼这佘艳重生的那一刻,很多市民来到医院看望佘艳,网上很多网民都在问侯这个可怜的孩子.她的生命让这个陌生的生命洒满了光明! 那段时间病房里堆满了鲜花和水果,到处弥漫着醉人的芬芳,两个月的化疗,佘艳闯过了9次鬼门关,感染性休克,败血症,溶血,消化道大出血...每次都逢凶化吉.由省内甚至国内权威儿童血液病专家共同会诊确定的化疗方案,效果很好,“白血病”本身已经被完全控制了,所有人都在期盼着佘艳康复的好消息! 但是化疗药物使用后可能引起的并发症是非常可怕的,与别的白血病的孩子比,佘艳的身体是非常弱的,此时手术后,她的体质更差了.8月20日清晨,她问傅艳“阿姨,你告诉我,他们为什么给我捐款啊” “因为他们都是善良人” “阿姨,我也做善良人” “你自然是善良人,善良人要相互帮助,就会变得更加善良” 佘艳从枕头下摸出一个数学作业本,递给傅艳“阿姨,这是我的遗书...” 傅艳大惊,连忙打开一看,果然是小佘艳安排的后世. 这是一个年仅8岁的孩子在生命垂危的时候,趴在床上用铅笔写了3页的遗书,由于孩子太小,有些字还不会写,还有很多错别字,看的出,这篇文章并不是一气呵成写完的.分成了6段,开头是“傅艳阿姨”结尾是“傅艳阿姨再见”整片文章“傅艳阿姨”,或“傅阿姨”公出现了7次,还有9次简称记者为“阿姨”这16个称呼后面,全部是关于她离世后的“拜托”以及她想通过记者向全社会关心她的人表达“感谢”与“再见” “阿姨再见,我们在梦中见,傅阿姨,我爸爸的房子要垮了,爸爸不要生气,不要跳楼.傅阿姨,你要看好我爸爸,阿姨,医我的钱给我们学校一点点,多谢阿姨给红十字会会长说,我死后,把剩下的钱给那些和我一样的病人,让他们的病好起来......” 这封遗书让傅艳看得泪流满面,泣不成声. “我来过,我很乖” 8月22日,由于消化道出血,几乎一个月不能吃东西而靠输液支撑的佘艳,第一次“偷吃东西”她掰了一块方便面放进嘴里,很快消化道出血加重,医生护士紧急给她输血,输液...看着佘艳腹痛难忍,痛苦不堪的样子,很多医生和护士都哭了,大家都愿意帮她分担痛苦,可是,想尽各种办法还是无济于事. 佘艳的腹部疼痛难忍,她哀求的对所有的医生护士说“让我死吧,我难受...” 医生护士们安慰着她,让她在坚持,很快就好了. 最后佘艳在极端的痛苦中离开了这个世界,医生在她停止呼吸之后,仍然不遗余力的抢救了80分钟,最终也没能挽回这个幼小的生命. 8岁的小佘艳终于远离了病魔的摧残,安详离世. 所有人都无法接受这个事实,那个美丽如诗,纯净如水的“小仙女”真的去了另一个世界吗?记者傅艳摸着佘艳渐渐冰冷的小脸泣不成声.再也不能叫她阿姨了,再也笑不出声音来了... 四川在线,网易等网站沉浸在泪海里,互联网被泪水打湿透了,“心痛到不能呼吸”每个网站的消息帖子下面都有上万条跟帖,花圈如山,悼词似海,一位中年男士喃喃低语“孩子,你本来就是天上的小天使,张开小翅膀,乖乖的飞吧...”8月26日,她的葬礼在下雨中举行,成都市东郊殡仪馆火化大厅内外站满了热泪盈眶的市民,他们都是8岁女孩佘艳素不相识的“爸爸妈妈”为了让这个一出生就被遗弃,患白血病后自愿放弃自己的女孩,最后离去时不至于太孤单,来自四面八方的“爸爸妈妈们”默默的冒雨前来送行. 她的墓地上有她一张笑吟吟的照片,碑文正面上方写着:“我来过,我很乖(1996.11.30.--2005.8.22)” 后面刻着关于佘艳身世的简单介绍,最后两句是“在她有生之年,感受到了人世的温暖.小姑娘,请安息,天堂有你更美丽.” 遵照小佘艳的遗愿,把剩下的54万元医疗费,当成生命的馈赠,留给了其他患白血病的孩子.这7个孩子分别是,杨心琳,徐黎,黄志强,刘玲璐,张雨婕,高健,王杰.这7个可怜的孩子,年龄最大的19岁,最小的只有2岁.都是家境非常困难,挣扎在死亡线上的贫困子弟. 9月24日,第一个接受佘艳馈赠的女孩徐黎,在华西医大成功进行手术后,她苍白的脸上挂上了一丝微笑:“我接受了你的生命赠与,谢谢佘艳妹妹,你一定在天堂看着我们.请你放心,以后我们的墓碑上照样刻着:我来过,我很乖...... 读后我感动了,毫不犹豫的转载了: 世上感动人的莫过于用心体会的真情!看着如今非主流和劲舞横行于年轻人的身边,我偶尔会很难受。那是一份堕落和悲哀!但我坚信社会进步的同时,我们的精神文明也在进步。失望之余的我们,应该能够再鼓起希望。希望不只在明天,也许曾经发生的一切,也是那么美好和感人!我会记得这句话:我来过,我很乖....我忠诚的渴望众多网友能转载这一篇文章,不为点击率,不为留言超多,只为了这份感动和意义!

上海餐饮行业的营业执照好办吗?大概要好多钱能办下来?

开店审批手续: 一些审批手续最好提前申请、咨询,这样才不会在开店的时候走冤枉路、花冤枉钱。 申请开餐馆需要前置审批,即在工商部门拿到营业执照前,必须先得到卫生许可证和环保部门的排污许可证。 具体步骤如下: 以个体工商户开一家小餐馆为例,具体程序是这样的:先拿身份证原件及复印件到当地工商所登记名称,记住这只是登记一个名称,还没到申领工商营业执照的时候。因为在领取工商执照之前,必须先到辖区内的环保部门和卫生监督所申领排污许可证和卫生许可证。 (1)排污许可证的申领:先到辖区环保局办证处申请,受理后,工作人员会上门去检查指导。 领取排污许可证的两个必须条件是:楼上不能有居民住宅;污水要能纳入市政污水管道。上门检查的工作人员会根据营业面积的大小来决定装何种抽油烟机。自己买了家用的抽油烟机或者环保没有认可过的抽油烟机都不行。 办证处的工作人员提醒:在决定租下一个店面或是装修之前,最好向环保部门咨询一下。比如:有的店主在开店装修时,排烟口或厨房的窗口正好对准了后面的住户,即使管理部门一时不知,后面的居民还是会去投诉,最后往往得再花钱调整。 (2)卫生许可证的申领:找到辖区内的卫生监督所申请受理,接着要让餐馆从业人员进行健康检查、接受食品卫生知识培训。在检查和培训合格的前提下,主要看以下几方面:一是卫生设施是否完备,主要指消毒、清洗设施;二是加工场所和营业场所面积比例是否达到。不同地段的餐馆,比例要求会不一样,事先咨询还是必要的。 (3)工商营业执照:拿到这两个证后,就可以凭这两个证及相应的房屋租赁证明、身份证,去工商所申请领取工商营业执照了。 (4)按照规定,在开业之前,还需要向消防部门进行消防申批,申领消防安全许可证,这需要在装修的时候就向所在辖区申请。 (5)税务登记:自领取营业执照之日起30日内,要向当地税务局申请领取地税税务登记号。带上营业执照的副本及复印件,还有经营者的身份证。个体工商户开的小餐馆,要交5%的营业税。另外需交城建税、教育附加税,税额是营业税的11%,还有一部分其他的税额,所占份额非常小。 小规模的钱准备好2万OK,中等规模的钱准备好4万OK。大规模的钱准备好6万OK。其实也不多,我想可能带多了, 但毕竟地方是上海。

什么是SNMP Trap 和MIB

什么是SNMP Trap和MIB 自1998以来,SNMP已经被广泛被接受和支持。 SNMP依赖的模式是管理站与代理(即是Management and Agent Model)。 SNMP Trap是SNMP的一部分,当被监控段出现特定事件,可能是性能问题, 甚至是网络设备接口宕掉等,代理端会给管理站发告警事件。 通过告警事件,管理站可以通过定义好的方法来处理告警。 管理信息数据库(MIB)是一个信息存储库,它包含管理代理中的有关配置 和性能的数据,有组织体系和公共结构,其中包含分属不同组的多个数据对象。 Mocha BSM如何实现SNMP Trap 当用户在被监控端所设置的情况符合了,被监控段将会给Mocha BSM发送特定事件。 以下是Mocha BSM处理的几个步骤: 1.SNMP Trap接收服务一直在端口162等待着请求,一旦接受任何请求,将发给SNMP Trap翻译。 2.通过MIB库的已知设备信息,SNMP Trap将会尽可能翻译Varbind的信息。 3.通过可配置的业务规则,可决定如何处理或者丢弃告警。 4.把产生的告警展现在事件管理,并且能产生相关的报警,提醒相关IT管理员。 5.如果事件与工单有绑定,可以触发相关工单。 6.系统管理员也可以通过不同格式的文件,导入新的设备信息进入Mocha BSM的MIB库。

核新同花顺数据结构[转]

核新同花顺数据结构[转] 很想了解一些交易软件的数据存储方式。看到了一篇好文章,Mark 一下。 核新同花顺数据结构(一):总览 同花顺采用了简易的数据库组织方式。在同花顺的发布文件包中包括了SQLite 3的驱动,但不是很清楚同花顺是如何使用这个驱动的。基本上,对同花顺数据结构的解析不需要这么复杂,同花顺发布文件包中的SQLite文件被核新程序员重新编译过,不过就与SQLite Manager的简单配合使用来看,并不影响对标准数据库文件的读取,当然,也不支持把同花顺数据文件当成标准的数据库文件进行读取。 基本上,同花顺的数据文件可以分为两类,一类是history\下行情数据文件,另一类是finance\下财务数据文件。 在history\下的数据文件,通过子目录名称识别市场代码,通过子目录下的文件名称识别交易标的(包括股票、期货等等)。文件格式采用的是简单格式,每个数据文件分别由: 文件头;列定义;内容; 三个部分组成。 在finance\下的数据文件,采用的是单文件容纳所有品种数据的方式,因此采用的是复合格式,每个数据文件分别由: 文件头;列定义;填充区域;复合索引数据块;内容; 五个部分组成。 文件头 文件头固定为16个字节,包括: byte [6],6 字节长度,固定为 {0x68,0x64,0x31,0x2E, 0x30,0x00},用于识别数据文件类型;dword,4 字节长度,记录“内容”区域的记录条数;word,2 字节长度,记录“内容”区域的开始位置;word,2 字节长度,记录“内容”区域每条记录的字节长度;word,2字节长度,记录“列定义”的列个数; 列定义 列定义固定为4 个字节一组,标示一个列,第4 个字节为列内容的字节长度,由于是使用1 个字节表示,因此数据文件每列的最大长度为255个字节。 填充区域 在finance\目录下的数据文件,采用的是包括索引的复合格式存储。在列定义和符合索引数据块之间存在着一个未使用的填充区域,填充区域的长度总是列定义数量的两倍,即文件头偏移 0x0E 处 WORD 类型 * 2。 就目前所知,这一区域基本上都使用 0x00 填充,可能是保留未来使用。 复合索引数据块 在finance\目录下的数据文件,文件的“内容”区域并不包含记录所隶属的证券品种,而是把此内容放置在一个单独的索引区域。索引区的开始位置 = 0x10 + 0x04 * 列定义数量 + 0x02 * 列定义数量。 复合索引数据块由三个部分组成: word,2 个字节,记录本索引数据区域的字节长度;word,2 个字节,记录本索引数据区域中所包含的索引的条数;byte[],不定长的索引记录,每条索引记录为18个字节长度,因此总长度 = 索引条数 * 0x12; 索引 每条索引的长度为18个字节,格式分别为: byte,1 字节长度,标识证券品种类型,目前已知的包括3 类4 种标示,分别是:0x10,国内证券;0x48和0x50,港股;0x4A,基金。在“权息资料”中,使用0x50标示港股,在“现金流量”中,使用0x48标示港股,不知道是设计的 bug,还是存在其他用意;byte [9],9 字节长度,标识交易品种的符号,目前已知是ASCII格式,从整个文件的多字节字符处理来看,文件的整体字符编码应该是GB2312编码,因此这一部分原始的处理应该是使用GB2312编码通读;word,2 字节长度,标识隶属此交易品种的记录区域中实际上未使用的记录条数,有关的组织方式下面再详细解释;dword,4 字节长度,标识隶属于此交易品种的记录的开始下标,注意是记录在数据文件中从0 开始排列的顺序号,而不是文件的偏移地址,其实际的偏移地址 = “内容”区域的开始地址 + 此开始下标 * 记录的长度;word,2 个字节长度,标识隶属于此交易品种的记录的条数; 总体来说,存在索引的文件其实际的完整数据由两个部分组成,一个就是索引数据区,另一个就是记录内容数据区。其与索引对应的记录内容数据采取分块的存储模式,即,每一个交易品种总是使用一个固定的、连续的内容数据区存储相对应的数据,因此在实际的数据存储过程中,存在着并未被实际使用的“空余”记录的数据区。 复合文件通过两个方法来识别有效和无效的记录,首先,索引记录其所使用的数据区总容纳的记录条数和未被使用的、无效的记录条数,两者相减可知被实际使用的记录条数;其次,复合文件的记录总是使用一个类型为Int32的4 字节用于标识时间的列开始,如果这个列的值为<=0,则表明这是无效的数据记录。 内容 数据内容开始的地址偏移在文件头0x0A处的一个word类型的2字节数据指示,其有效长度 = 列长度 * 记录条数。 附录

紫龙书部分答案

4.6.5 LR(0) items in initial: S’ -> S S -> AaAb|BbBa A -> e B ->e So , I : S’ ->·S S -> ·AaAb S -> ·BbBa A ->· B ->· FOLLOW(A) = FOLLOW(B) = {a,b} Therefore, when input ‘a’ we may get a conflict since FOLLOW(A) = FOLLOW(B). This grammar is not SLR(1) FIRST(S) = {a,b} FIRST(A) = F IRST(B) = {e} FOLLOW(S) = {$} FOLLOW(A) = FOLLOW(B)={a,b}

Linux中文朗读软件--espeak

一、 介绍 1. 用途:可识别多语言的朗读软件 2. 特点: 1) 能读中文:相对英文,更适合朗读中文 2) 可以在程序中被调用——提供c++接口及库 3) 支持词的识别和 4) 安装简单,安装文件少,依赖库少,移植方便 a) 源码32981行 b) espeak_1.36.orig.tar.gz,只有1M多,源码及数据(多语言规则) 5) 相对比较平滑 6) 能处理多音字 二、 平台 1. 有windows,linux系统版本支持 2. ubuntu 8.04系统自带espeak 三、 试试中文发音 $ espeak -vzh “hello world” $ espeak -vzh “你好” 四、 编译 1. 下载espeak-1.36-orig.tar.gz 2. 安装 $ tar xvzf espeak-1.36-orig.tar.gz $ cd espeak-1.36 $ cd src $ make $ make install 3. 注意: 它需要portaudio库的支持,如ubuntu 8.04中自带这个库,但库名不同,可做个链接 ln -s /usr/lib/libportaudio.so.0 /usr/libportaudio.so

dma使用的几个概念。burst,burst size,length

一般芯片的dma有基本功能。 1、普通的内存、外设间互传数据,一次性的。 2、支持链表的,美其名曰“scatter”,内核有struct scatter可以参考。 说一下注意点: dma有burst、burst size、transfer的概念: burst: dma实际上是一次一次的申请总线,把要传的数据总量分成一个一个小的数据块。比如要传64个字节,那么dma内部可能分为2次,一次传 64/2=32个字节,这个2(a)次呢,就叫做burst。这个burst是可以设置的。这32个字节又可以分为32位 * 8或者16位*16来传输。 transfer size: 就是数据宽度,比如8位、32位,一般跟外设的FIFO相同。 burst size: 就是一次传几个 transfer size. 现在我配置数据宽度为32位。一次传8个32位=32个字节。 那么如果总长度为128字节,那么实际dma设置的长度为 128/32 = 4. 可能讲的不是很清楚。自己配置一遍就明白了。

Hibernate插入、查询、删除操作 HQL

Hibernate的所有的操作都是通过Session完成的. 基本步骤如下: 1:通过配置文件得到SessionFactory: SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory(); 2:通过SessionFactory 得到一个Session Session session=sessionFactory.openSession(); 3:通过session进行插入,删除,修改以及查询. 插入例子:(1)声明一个事务;(2)Session执行save()操作;(3)事务提交;(4)关闭Session,可选. public void insert(Person p){ Transaction tran=session.beginTransaction(); session.save(p); tran.commit(); // session.close(); } 修改例子:(1)声明一个事务;(2)Session执行update()操作;(3)事务提交;(4)关闭Session,可选. public void update(Person p){ Transaction tran=session.beginTransaction(); session.update(p); tran.commit(); // session.close(); } 删除例子(主键删除,推荐使用):(1) 声明删除的SQl语句;(2)创建session的Query对象;(3)设置Query对象的参数;(4)执行Query的executeUpdate()操作;(5)Session事务提交 public void delete(int id){ String hql="delete Person as p where p.id=?"; Query query=session.createQuery(hql); query.setInteger(0,id); query.executeUpdate(); session.beginTransaction().commit(); } 删除例子(对象删除):(1)声明一个事务;(2)Session执行delete()操作;(3)事务提交;(4)关闭Session,可选. public void delete(Person p){ Transaction tran = session.beginTransaction(); session.delete(p); tran.commit(); session.close(); } 查询例子:(跟删除差不多) 查询语句不需要事务提交

MYSQL数据库备份恢复

数据库版本类型: MYSQL 5.0.x 社区版本 数据库重要命令:mysqldump ;mysql 系统环境: Windows Xp Sp2 示例数据库: Demo (内部表可自己任意建立) 数据库用户名: root (也可以是具有管理操作权限的用户名) 数据库登录密码: dbuserkey 测试环境中mysql已在环境变量中设置成功即 可在命令行中输入mysql启动mysql数据库引擎 A,完全导出Demo所有数据和结构 (完全备份) 在任目录中(比如 D:/mydb )建立批处理文件backup.bat,内容如下: mysqldump -uroot -pdbuserkey --add-locks --opt Demo>D:/mydb/Demo.sql; @pause B,完全导入Demo所有数据和结构 (完全恢复) 在与backup.bat同目录中建立批处理文件restore.bat 内容如下: mysql -uroot -pdbuserkey demo<D:/mydb/Demo.sql; @pause C,测试 开启mysql数据库引擎 net start mysql 运行 A中批处理 会看到D:/mydb下生成Demo.sql 然后执行 Drop Database Demo命令删除Demo数据库 建立Demo数据库 Create Database Demo; 运行 B 中比处理 即可恢复所有数据和结构 D,常用命令 登录或连接mysql数据库服务 mysql -h主机地址 -u用户名 -p用户密码; 推出mysql 数据库连接

QQ邮箱 503 : HTTP Error 503 服务暂时不可用,请刷新重试

QQ邮箱 503 : HTTP Error 503 服务暂时不可用,请刷新重试 今天打开QQ邮箱,发现: “503 : HTTP Error 503 服务暂时不可用,请刷新重试。 如果多次刷新仍未恢复正常,请稍后再尝试。 目前我们正在努力解决该问题,因此给您造成不便我们非常抱歉,请继续支持QQ邮箱。” 已经连续好几天都这样了,都准备放弃腾讯邮箱了。今天我清除了一下缓存,重新启动一下浏览器就好了。或者换个浏览器就可以了。而且,好像这个错误经常在IE8下面出现,可能是腾讯的客户端js兼容IE8有问题。 posted @ 2009-12-21 10:32 暮夏 阅读( ...) 评论( ...) 编辑 收藏

mysql MySQL 返回:#1406 - Data too long for column 'tc_name' at row 1

往mysql导入.sql文件时报错: MySQL 返回:#1406 - Data too long for column 'columnname' at row 1 把mysql的表和需要导入的文件的编码设置成一致 我的表编码是utf8,而文件是ansi,所以报错,把文件编码也改为utf8,导入即可通过 黑色头发:http://heisetoufa.iteye.com/

PostgreSQL的数据文件构成

PostgreSQL的data目录下面的各个文件的说明。原文可以从官方网站的用户手册查找(http://www.postgresql.org/docs/8.4/static/storage-file-layout.html)。 ・postgresql.conf: PostgreSQL configuration file ・pg_hba.conf: PostgreSQL Client Authentication Configuration File ・pg_ident.conf: PostgreSQL User Name Maps 表 53-1. PGDATA 的内容 項目描述PG_VERSION PostgreSQL 的主版本号。比如8.4base 包含每个数据库的子文件夹的目录global 包含像pg_database 这样的cluster中共有表的目录。pg_clog 包含事务提交状态的数据的目录pg_multixact 包含多事务状态的数据的目录。(锁共有行用)pg_stat_tmp 包含统计用的子系统中的临时性文件或者目录pg_subtrans 包含子事务状态的数据的目录pg_tblspc 包含表空间symbolic链接的子目录pg_twophase 包含用于准备好事务状态文件的子目录pg_xlog 包含 WAL (预写日志)文件的子目录postmaster.opts 一个记录 postmaster 最后一次启动时使用的命令行参数的文件postmaster.pid 记录着当前的 postmaster PID 和共享内存段 ID (在 postmaster 关闭之后不存在)

windows 下php 扩展 的好 资源

windows 下php 扩展 的好 资源 今天要找一个 php_memcache.dll 找了好久都没有找到,不小心在这里找到了。 http://downloads.php.net/pierre/ 下面是所有的下载内容: libpq-php-4.4.9-5.2.6.zip (2008-08-09 04:11 -0700) MD5 (libpq-php-4.4.9-5.2.6.zip) = a38e3834a7beab7d65064797bc643278php_apc-3.0.19-5.2-Win32-VC6-x86.zip (2009-02-04 02:40 -0800) MD5 (php_apc-3.0.19-5.2-Win32-VC6-x86.zip) = 69a012935c4ac39f2e98f6a277148bf6php_apc-3.0.19-5.2-Win32-nts-VC6-x86.zip (2009-02-04 02:53 -0800) MD5 (php_apc-3.0.19-5.2-Win32-nts-VC6-x86.zip) = c1e418fb348bdd6ca8a59a1d363816e1php_apc-3.1-5-3-nts-svn-20091026.zip (2009-10-26 05:57 -0800) MD5 (php_apc-3.1-5-3-nts-svn-20091026.zip) = 890f472c6c92722a26dfb15435b859a4php_apc-3.1-5.3-svn-20091026.zip (2009-10-26 05:58 -0800) MD5 (php_apc-3.1-5.3-svn-20091026.zip) = 17db6e2ed17b27660f69c319e63933b8php_bbcode-cvs-20090316-5.2-Win32.zip (2009-03-16 03:48 -0800) MD5 (php_bbcode-cvs-20090316-5.2-Win32.zip) = 807ece380fdfddf1b6e1a2f1ef972d44php_enchant-1.1.0-5.3-nts-vc9-x86.zip (2009-10-08 14:16 -0700) MD5 (php_enchant-1.1.0-5.3-nts-vc9-x86.zip) = 4032f6a6a2eb0edf101c947b5b1cd629php_enchant-1.1.0-5.3-vc9-x86.zip (2009-10-08 14:16 -0700) MD5 (php_enchant-1.1.0-5.3-vc9-x86.zip) = 7960faec340ad7c049b6ffa92e2190ffphp_htscanner-0.9.0-5.2-VC6-x86.zip (2009-03-03 17:08 -0800)

IP端口扫描工具(Tenable Nessus)的简介

Tenable Nessus 是一款使用方便的 IP、端口扫描工具。 利用它可以获得被扫描计算机的 ping 响应时间、主机名称、计算机名称、工作组、登录用户名、MAC地址、TTL、NetBios 信息等; 您也可以指定扫描端口,查看目标计算机开放端口的情况。 Nessus是一个顶级的漏洞扫描程序,它由Tenable Network SecurityNessus 被认为是目前全世界最多人使用的系统弱点扫描与分析软件。 Nessus的特色: -提供完整的电脑弱点扫描服务, 并随时更新其弱点数据库。 -不同于传统的弱点扫描软件, Nessus 可同时在本机或远端上摇控, 进行系统的弱点分析扫描。 -其运作效能能随着系统的资源而自行调整。如果将主机加入更多的资源(例如加快CPU速度或增加内存大小),其效率表现可因为丰富资源而提高。 -可自行定义外嵌软件(Plug-in) -NASL(Nessus Attack Scripting Language) 是由 Tenable 所开发出的语言,用来写入Nessus的安全测试选项。 -完整支援 SSL (Secure Socket Layer)。 -自从1998年开发至今已谕十年, 故为一架构成熟的软件。

实现汉字转拼音

http://wallimn.javaeye.com/blog/374917 方法一: C#代码 /// <summary> /// 生成拼音简码 /// </summary> /// <param name="unicodeString">Unicode编码字符串</param> /// <returns>拼音简码:string</returns> public static string GetPinyinCode( string unicodeString) { int i = 0; ushort key = 0; string strResult = string .Empty; //创建两个不同的encoding对象 Encoding unicode = Encoding.Unicode; //创建GBK码对象 Encoding gbk = Encoding.GetEncoding(936); //将unicode字符串转换为字节 byte [] unicodeBytes = unicode.GetBytes(unicodeString); //再转化为GBK码 byte [] gbkBytes = Encoding.Convert(unicode, gbk, unicodeBytes); while (i < gbkBytes.Length) { //如果为数字/字母/其他ASCII符号 if (gbkBytes <= 127) { strResult = strResult + (char )gbkBytes; i++; } #region 否则生成汉字拼音简码,取拼音首字母 else { key = (ushort )(gbkBytes * 256 + gbkBytes[i + 1]); if (key >= '/uB0A1' && key <= '/uB0C4' ) { strResult = strResult + "

tc 流控脚本

系统平台 RedHat AS4 [root@bridgenet software]# uname -a Linux bridgenet 2.6.9-42.ELsmp #1 SMP Wed Jul 12 23:27:17 EDT 2006 i686 i686 i386 GNU/Linux [root@bridgenet software]# rpm -ivh bridge-utils-1.0.4-4.i386.rpm [root@bridgenet software]# rpm -ivh iproute-2.6.9-3.i386.rpm 网桥启动脚本 #!/bin/sh /usr/sbin/brctl addbr br0 /usr/sbin/brctl addif br0 eth0 /usr/sbin/brctl addif br0 eth1 /sbin/ifconfig eth0 0.0.0.0 promisc /sbin/ifconfig eth1 0.0.0.0 promisc /sbin/ifconfig br0 up TC流量控制脚本 #!/bin/bash modprobe ip_tables modprobe ip_nat_ftp modprobe ip_conntrack modprobe ip_conntrack_ftp iptables -F -t nat iptables -F #iptables -A INPUT -j ACCEPT #iptables -A OUTPUT -j ACCEPT #iptables -A FORWARD -j ACCEPT #iptables -F -t mangle #iptables -X -t mangle #iptables -Z -t mangle #echo "

使用 NFSv4 ACL 的文件系统

NFSv4 (Network File System – Version 4) 协议引入了一种新的 ACL(访问控制列表)格式,这种格式扩展了现有的其他 ACL 格式。NFSv4 ACL 很容易使用,还引入了更详细的文件安全属性,因此 NFSv4 ACL 更安全。IBM® AIX®、Sun Solaris 和 Linux® 等操作系统已经在文件系统中实现了 NFSv4 ACL。 当前,IBM AIX 5L version 5.3 和更高版本中支持 NFSv4 ACL 的文件系统是 NFSv4、JFS2 with EAv2 (Extended Journaled Filesystem with Extended Attributes format version 2) 和 General Parallel Filesystem (GPFS)。在 Sun Solaris 中,ZFS 支持这种 ACL 模型。在 RedHat Linux 中,NFSv4 支持 NFSv4 ACL。 什么是 ACL? 访问控制列表 (ACL) 用来指定文件系统对象(比如文件和目录)的访问权限。它是由许多访问控制项 (ACE) 组成的列表,每个访问控制项定义一个用户或组及其权限。 关于 ZFS ACL

EXCEL 十进制角度转换为度分秒格式

写篇比较简单的文章,大家都不屑一顾的问题,但希望有人能够用上。 最近同事用到使用EXCEL将十进制角度转度分秒,找我帮忙,网上搜罗一下,大多是度分秒转为十进制的计算方法,偶有这种算法,还要判断度的位数,如30°一个算法,130°又一个算法。且精度只能精确到秒的个位,对于测量坐标转换来说,远远不够。 几经演算,反过来在同事的帮助下,写了一个通用的计算公式,可以精确得计算出结果,如下: fx=TEXT(INT(A2),"0")&“."&TEXT(INT((A2-INT(A2))*60),"00")&TEXT(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60*1000000,"000000") 其中A2代表十进制度数所在的单元格 调节其中红色数字的位数,可以取得秒的不同精度,如10000,会取到秒的小数点后四位;1000000,取到后六位。 如:130.03145632,输出130.0153242752 如果要加上度、分、秒等汉子或符号,只需在中间&符号处稍作文章,如: fx=TEXT(INT(A2),"0")&"°"&TEXT(INT((A2-INT(A2))*60),"00")&"′"&TEXT(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,"00.0000")&"″" 此处需注意后面秒的格式。精度调节此时要在后面的"00.0000"格式字符串中调节。 如:130.03145632,输出130°01′53.2428″

AC3简介及压制攻略 zz

AC3(Audio Coding 3)是Dolby(R)杜比公司于1996年开发的一种先进的音频编码模式,它是DVD音频的标准,其编码完全是数字的,压缩比约为1:9~10,但解码后可得符合人耳声学模型(0~20000Hz)的音频。其编码一般由ffmpeg完成,生成文件为*.AC3或*.A52。 大家来传播AC3高品质音乐吧!!!!! 请相互转载,宣传!!!!! AC3简介: 杜比数字AC-3(Dolby Digital Audio Coding 3)是杜比Dolby(R)公司开发的新一代家庭影院多声道数字音频系统。杜比定向逻辑系统是一个模拟系统。它的四个声道是从编码后的两个声道分解出来的,因此难免有分离度不佳、信噪比不高,对环绕声缺乏立体感,并且环绕声的频带窄等缺点。AC(Audio Coding)指的是数字音频编码,它抛弃了模拟技术,采用的是全新的数字技术。 杜比数字AC-3提供的环绕声系统由五个全频域声道加一个超低音声道组成,所以被称作5.1个声道。五个声道包括前置的"左声道"、"中置声道"、"右声道"、后置的"左环绕声道"和"右环绕声道"。这些声道的频率范围均为全频域响应3-20000Hz。第六个声道也就是超低音声道包含了一些额外的低音信息,使得一些场景如爆炸、撞击声等的效果更好。由于这个声道的频率响应为3-120Hz,所以称".1"声道。 杜比数字AC-3是根据感觉来开发的编码系统多声道环绕声。它将每一种声音的频率根据人耳的听觉特性区分为许多窄小频段,在编码过程中再根据音响心理学的原理进行分析,保留有效的音频,删除多作的信号和各种噪声频率,使重现的声音更加纯净,分离度极高。 杜比数字AC-3系统可用前置的左、右音箱,中置音箱产生极有深度感和定位明确的音场,用两个后置或侧置的环绕音箱和超低音箱表现宽广壮阔的音场,而六个声道的信息在制作和还原过程中全部数字化,信息损失的很少。全频段的细节十分丰富,具有真正的立体声。 杜比数字AC-3具有很好的兼容性,它除了可执行自身的解码外,还可以为杜比定向逻辑解码服务。因此,目前已生产的杜比定向逻辑影视软件都可以使用杜比数字AC-3系统重现。由于杜比数字AC-3系统的编码非常灵活,所以它的格式很多。目前它已被美国采用作为高清晰电视(HDTV)音频系统,最新DVD机也包含杜比数字AC-3。因此杜比AC-3环绕声系统可能是极有发展前途的技术。 AC3的特性: 码率构成 [只可为整点码率]:(16 24 32 48 64 72 80 96 112 )128 (160 192 224 256 320] [384 448 480 640]Kpbs (16 24 32 48 64 72 80 96 112 ):此段只适用于Voice Phone等低频低码率的编码,80,96,112Kpbs适合于单声道保真音频 128Kpbs:此段适合于不是过高要求的保真音频(比较适合于劲爆的音乐)和近于Mp3 44100Hz CBR 320kbps的音频(极不适合于纯色音乐,尤其是弦乐) (160 192 224 256 320] 非常适合于双声道高品质音频的传播,且文件较小,不会产生听觉疲劳(远超出lame MP3中对HiFi的定义:160kbps VBR),适合于收藏。 [384 448 480 640]:此段对于stereo来说有点奢侈,所以适合于HiFi级多声道听众享受。 频率特性: 从中可以看出192kbps 48000Hz的stereo AC3文件音域为0~20906Hz,(160 192 224 256 320]都可达此效果

磁盘碎片

磁盘碎片就是文件碎片。它是文件被分散保存到磁盘的不同位置而形成的! 文件问什么会被分散到不连续的磁盘空间?因为硬盘在使用一段时间期间,我们会对文件进行反复的写入和删除,这样磁盘上的空闲扇区会分布在整个磁盘的不同物理位置上。这样文件就不能存放在连续的扇区中了! 磁盘碎片的产生途径:一、虚拟内存的使用 二、ie等的临时文件 磁盘碎片带来的危害: 文件碎片过多会使系统在读文件的时候来回寻找,引起硬盘性能下降,严重的还要缩短硬盘寿命。另外,过多的磁盘碎片还有可能导致存储文件的丢失。 消除磁盘碎片的方法:进行磁盘碎片整理。磁盘碎片整理其实就是把硬盘上的文件重新写在硬盘上,以便让文件保持连续性。 小知识:连续长时间频繁的读写硬盘才会对磁盘造成一定的伤害!如果我们的内存不够用,我们的硬盘又小,仅够虚拟内存使用,这样就会伤害到我们的硬盘了。不过一般整理磁盘碎片不用在意影响,因为整理碎片的时间不是很长的,且不是每天都整理!

java中的锁池和等待池

在java中,每个对象都有两个池,锁(monitor)池和等待池 wait() ,notifyAll(),notify() 三个方法都是Object类中的方法. 锁池:假设线程A已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用这个对象的某个synchronized方法(或者synchronized块),由于这些线程在进入对象的synchronized方法之前必须先获得该对象的锁的拥有权,但是该对象的锁目前正被线程A拥有,所以这些线程就进入了该对象的锁池中。 等待池:假设一个线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁(因为wait()方法必须出现在synchronized中,这样自然在执行wait()方法之前线程A就已经拥有了该对象的锁),同时线程A就进入到了该对象的等待池中。如果另外的一个线程调用了相同对象的notifyAll()方法,那么处于该对象的等待池中的线程就会全部进入该对象的锁池中,准备争夺锁的拥有权。如果另外的一个线程调用了相同对象的notify()方法,那么仅仅有一个处于该对象的等待池中的线程(随机)会进入该对象的锁池. 下面通过一个例子来说明: 要求写两个线程,一个线程将某个对象的某个成员变量的值加1,而另外一个线程将这个成员变量的值减1.使得该变量的值始终处于[0,2].初始值为0. package com.tju; class Target { private int count; public synchronized void increase() { if(count == 2) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } count++; System.out.println(Thread.currentThread().getName() + ":" + count); notify(); } public synchronized void decrease() { if(count == 0) { try { //等待,由于Decrease线程调用的该方法, //所以Decrease线程进入对象t(main函数中实例化的)的等待池,并且释放对象t的锁 wait();//Object类的方法 } catch (InterruptedException e) { e.printStackTrace(); } } count--; System.out.println(Thread.currentThread().getName() + "

asterisk卡常见问题(收集整理)

以下转自:http://space.taobao.com/e2e26e6e41fda171bf6ec37c526f6893/show_blog-22524724.htm Q:系统检测不到内线模块 A:通常是因为没有插上电源接头。如果卡上有内线模块,则需要将PC机箱电源引出的插头插到卡上右边的电源接口上。 Q:模拟卡检测不到外线挂机 Q:听到的摘机信号音与普通的电话摘机信号音不一致。 A:国内用户经常反映这个问题。需要修改一下配置文件: l /etc/zaptel.conf中把 loadzone 和 defaultzont 改为cn l 在/etc/asterisk/zapata.conf 中打开忙音检测:busydetect=yes 需要重新加载zaptel和asterisk,或者重启系统。 Q:模拟卡外线通话有时候意外中断 A:某些地方的汇线通或者线路质量不佳时常出现这个问题。 需要修改/etc/modprobe.conf,将install wctdm这一行改成下面的样子: install wctdm /sbin/modprobe --ignore-install wctdm battdebounce=128 && /sbin/ztcfg Q:通话中噪音大,有回声 A: 1、首先要在配置文件zapata.conf 中激活回音消除,请把以下选项设置为yes: ² echocancel=yes ² echocancelwhenbridged=yes ² echotraining=yes 2、调整rxgain/txgain设置 为了取得好的回音消除效果,必须调整zapata.conf配置文件中的rxgain(输入增益)和txgain(输出增益)到合适的值,请按照以下步骤来进行: 1. 把rxgain/txgain的值都修改为1.0; 2. 用asterisk板卡上的通道来拨打一个电话,也就是说需要建立一个通过板卡的通道进行的通话; 3. 运行ztmonitor命令来查看通道收、发音增益是不是在一个比较优化的范围:(注,ztmonitor命令的第一个参数是你正在通话的通道号) 4. 根据你的实际情况来调整rxgain和txgain到一个优化的值。比如上图所表现的,rxgain和txgain的值都偏小,你就在配置文件Zapata.conf中增加rxgain和txgain的值,使得图形中所表示出来的值处于中间的位置。 5. 很多情况下,把rxgain和txgain的值设置为8.0会取得比较好的回音消除效果。 Q:模拟卡没有主叫显示或者显示不正确 A: 如果排除局端可能(直接接外线能正常收到主叫,经过asterisk卡后收不到主叫),这个问题通常是因为zaptel驱动版本和asterisk版本不匹配造成。Asterisk和zaptel一般是成对发布的,版本之间有对应关系,不同版本的zaptel和asterisk是否可以混用需要仔细验证。一旦发生主叫识别问题,则最为简便可靠的验证方式是使用原装的trixbox2.0光盘重新安装系统后验证主叫显示。 Q:SIP可以呼通,但听不到声音 A:一般是NAT问题造成。 如果Asterisk处在NAT的后面,则Asterisk的配置如下: -------------------------------------------------------------- sip.conf: ;externip = 200.201.202.203 externhost=dmlink.dvrdns.org localnet=192.168.0.0/255.255.0.0 rtp.conf rtpstart=10000 rtpend=20000 NAT网关端口映射: SIP端口 5060 和 RTP端口10000-20000 -------------------------------------------------------------- 需要配置externip或externhost,这是Asterisk的公网IP,还需配置localnet,这样当Asterisk判断外部来的SIP会话时(本地是localnet,对方不是localnet),会在Invite应答(200 OK)的SDP 中,将Connection Information置为外部IP,而Media Description的端口从[rtpstart,rtpend]中分配。 这样,SIP客户端收到Invite应答(200 OK)后,就知道了Asterisk的RTP公网IP+端口,SIP客户端的语音流发到这个地址,NAT网关(端口映射)转发到Asterisk。 而如果SIP客户端也处于一个NAT之后,Asterisk如何判断出SIP客户端的RTP公网地址呢? 经过Asterisk代码的分析,Asterisk的SIP并没有实现ICE(Interactive Connectivity Establishment)到SIP的映射,即没有处理ICE在SDP的Media块中定义的一个新属性alt(候选IP地址和端口),而是采用了一个简单的方式,即当NAT=yes时,从哪儿来的到哪儿去(SIP也是用这种策略处理)。 所以,Asterisk收到来自SIP客户端的RTP包后,Asterisk会记录此包的源地址和端口(是经过了客户端侧NAT转换后的公网IP+端口), Asterisk的语音流将被发到这个地址。客户端侧NAT网关会自动转发到对应的Asterisk的内网地址。 如此,一个NAT之后的SIP客户端(无需ICE)已经可以拨入一个配置了端口映射的NAT后的Asterisk了。

UE中的正则表达式

在UltraEdit中使用正则表达式 正则表达式 (UltraEdit Syntax): % 匹配行首 - 表明要搜索的字符串一定在行首. $ 匹配行尾 - 表明要搜索的字符串一定在行尾 ? 匹配除换行符外的任一单个字符. * 匹配任意个数的字符出现任意次数(不包括换行符) + 匹配前导字符或者表达式出现一次或者更多次(不包括换行符) ++ 匹配前导字符或者表达式不出现或者出现一次以上(不包括换行符) ^b 匹配页中断符 ^p 匹配DOS文件的换行符 ^r 匹配MAC文件的换行符(CR Only) ^n 匹配UNIX文件的换行符 (LF Only) ^t 匹配一个制表符 [ ] 匹配方括号中的单个的字符 删除空行: 替换 %[ ^t]++^p 为 空串 删除行尾空格: 替换 [ ^t]+$ 为 空串 删除行首空格: 替换 %[ ^t]+ 为 空串 每行设置为固定的4个空格开头: 替换 %[ ^t]++^([~ ^t^p]^) 为 " ^1" 每段设置为固定的4个空格开头: 替换 %[ ^t]+ 为 " " (如果一行是以空格开始的,则视之为一段的开始行)

爱因斯坦谜题的真正答案

爱因斯坦谜题的真正答案 前几天看博客的时候,发现有人发了一个解决爱因斯坦的谜题的文章。 http://www.cnblogs.com/yefanqiu/archive/2009/09/27/1575326.html 我也很感兴趣,就去查了一下相关的英文资料。 大多数的解法是这样的:用一个表格列出五个空房间,然后,在这五个空房间里面依次填入条件的内容,如下: House 1 2 3 4 5 Colour ? Blue ? ? ? Nationality Norwegian ? ? ? ? Drink ? ? Milk ? ? Cigarettes ? ? ? ? ? Pet ? ? ? ? ? 这里有解法: http://www.cnblogs.com/terryli/archive/2008/04/06/1138788.html 但是,你会发现,只要仔细的填写,一般人都能最后得出答案:养鱼的是德国人。 所以很多人,都觉得好夸张,为什么这样简单的问题只有 2%的人能做对呢? 这个问题,显然不是一个能难倒爱因斯坦的问题。这是由爱因斯坦提出来的一个问题。世界上 最多只有 2% 的人能做出这个问题的答案,也是爱因斯坦的原话。 仔细读读英文的原题,你会发现,问题是谁养鱼?难倒就一定有人养鱼?题目没有说,第五种宠物一定是鱼,第五种宠物可能是大象, 或者野猪。所以,正确答案是:不知道。 实际上,这个问题的提出是有一定历史背景的。当时,爱因斯坦提出相对论,没有多少人赞成。大家都觉得按照常识,相对论是不可能的。 所以,爱因斯坦提出这个谜题,讽刺那些习惯在解决一个问题时,先入为主,随意加上一些“常识”的人。大多数人,习惯加上第五种宠物是fish, 觉得这个条件是显然的,毫无疑问的。 从博客园对这个问题的回复可以看出,没有一个人是觉得 答案是有问题。但是,我在一些英文网站里面看到,很多人回复说第五种宠物不一定是鱼。 从这个问题,也可以看出国人的一些思维缺陷。中国人不习惯否定问题的本身,而是习惯于解决问题。 实际上,很多时候能够跳出问题,才能真正的把问题解决。 现在知道,为什么只有2%的人能做这个问题了吧。 下面是英文原题: Below is a quiz written by Albert Einstein. He said 98% of the people in the world cannot solve the quiz.

Exception in thread "main" java.lang.UnsatisfiedLinkError 错误及解决方法

Exception in thread "main" java.lang.UnsatisfiedLinkError,编译没有问题,运行出现问题,如果错误Exception in thread "main" java.lang.UnsatisfiedLinkError后面是某一个类名的话,很可能是java程序调用了有关dll文件而没有找到这样的dll文件造成的! 解决办法:把需要的dll文件放到和该java类相同的目录下即可!

关于ActiveX的教程[vb](转帖)

关于ActiveX的教程 Visual Basic是面向对象的程序设计语言,微软公司推出了ActiveX技术,利用ActiveX技术提出的标准,对界面的设计进行了封装,形成了一系列编程控件,即特定功能的程序模块。在程序的设计中,设计人员只需要拖动所需控件到窗体,然后对控件进行属性设置和使用其方法、事件即可,大大减轻了繁琐的程序设计。 第一节 认识并装载ActiveX控件 任务1:ActiveX控件的概念和ActiveX控件的装载方法 【任务的提出】Visual Basic工具箱上的标准控件只有21个。对于复杂的应用程序,仅仅使用一些标准控件是不够的,可以应用Visual Basic以及第三方开发商提供的大量AcitveX控件。这些控件可以添加在工具箱上。目前在Internet上大约有1000多种AcitveX控件可供下载,大大节约了我们的开发时间。 本任务主要包括以下内容: (1) 控件分类及ActiveX的概念。 (2) 装载ActiveX控件。 11.1.1 控件分类及ActiveX的概念 Visual Basic 6.0中控件主要分为三种:内部控件(标准控件)、ActiveX控件(外部控件)和可插入对象。 1.内部控件(也称标准控件) 就是我们通常使用的如标签、文本框、命令按钮等常用控件,在我们运行Visual Basic 6.0环境时,可自动在工具箱中出现。如图11-1所示。 图11-1 工具箱中的内部控件 2.ActiveX控件 (1)ActiveX部件 VB功能之所以强大,很大程度上是借助于ActiveX部件。所谓ActiveX部件是指一件可招待的代码,如一个.exe 、.dll或 .ocx文件,它们在提供对象时遵循ActiveX的规范。在VB中,具有四种类型的ActiveX部件:ActiveX 控件、ActiveX.EXE、ActiveX.DLL 、ActiveX 文档。ActiveX.EXE部件是不可视的代码部件,能够服务于多个应用程序,并且能够在远程计算机上运行,能安装在服务器端;ActiveX.DLL 部件是不可视的代码部件,能够与应用程序运行在同一个进程中,能安装在客户端;ActiveX 控件是一个可视的部件,能够作为控件被拖放到不同的应用程序中;ActiveX 文档也是一个可视的部件,能够通过Internet上的Web浏览器打开。 (2)ActiveX控件 ActiveX控件称为扩充控件。ActiveX控件是一种具有可视设计外观,并且能够作为可插件引入到应用程序中去的ActiveX部件,如ADO Data控件就是其中之一。“ActiveX控件”是一种扩展名为 .OCX的独立文件,通常存放在Windows的System目录中。 大部分应用程序可以用内部控件来设计,但是有些功能,如:多媒体、动画、计算机通讯等无法用内部控件来设计,只能通过ActiveX控件来实现。 3.可插入对象 可插入对象为Windows应用程序对象。为了在程序设计中能访问和使用Excel 、Word的文件信息,VB提供了一种控件,帮助我们把Microsoft Excel Sheet、Microsoft Word及位图文件等信息插入应用程序中,这就是可插入对象。 11.1.2 装载ActiveX控件 一般情况下,工具箱中只有内部控件。为了把所需要的ActiveX控件加到工具箱,可执行“工程”菜单中的“部件”命令,显示图10-2所示的部件对话框,从中选择并添加即可。 图11-2 装载ActiveX控件 图11-3 添加外部控件 如果在列表框未找到想要的控件,或要添加外部控件(其他用户自己设计的ActiveX控件),单击“浏览(B)…”按钮,找到要添加的ActiveX控件的.ocx文件,打开并添加进来即可,如图11-3所示。 【新的任务】 通过本任务的学习,了解了控件分类及ActiveX控件的基本概念和添加方法。现在新的任务是:把常用ActiveX控件添加到工具箱中并查看它们的基本属性及方法。 第二节 常用ActiveX控件 任务2:常用ActiveX控件浏览 【任务的提出】VB中有许多非常有用的ActiveX控件,我们不可能面面俱到,但对常用的ActiveX控件还是要做必要的了解。本任务主要包括以下内容: (1) 熟悉常用ActiveX控件的属性。 (2) 熟悉常用ActiveX控件的方法。 (3) 熟悉常用ActiveX控件的事件。 VB有许多控件,为了让大家熟悉VB中的常用ActiveX控件,我们先列出常用ActiveX控件的类名及所需文件,如表11-1所示。 表11-1 常用ActiveX控件的类名及所需文件

[Oracle]高效的PL/SQL程序设计(一)--伪列ROWNUM使用技巧

本系列文章导航 [Oracle]高效的PL/SQL程序设计(一)--伪列ROWNUM使用技巧 [Oracle]高效的PL/SQL程序设计(二)--标量子查询 [Oracle]高效的PL/SQL程序设计(三)--Package的优点 [Oracle]高效的PL/SQL程序设计(四)--批量处理 [Oracle]高效的PL/SQL程序设计(五)--调用存储过程返回结果集 [Oracle]高效的PL/SQL程序设计(六)--%ROWTYPE的使用 --1. 取前 10 行 select * from hr.employees where rownum <= 10 --2. 按照 first_name 升序,取前 10 位 -- 正确方法 oracle 处理机制 : --> hr.employees 全表扫描 --> SORT ORDER BY STOPKEY 只排序前 10 行,作为一个矩阵结构 --> 剩下的行与第 10 行进行比较,合适的进入矩阵 , 否则抛弃 -- 优点: RAM 中少量排序,速度快 ( 不需要在内存或者 temp 表空间进行全表排序 ), 并不真正排序整个结果集,但概念上做了整个结果集的排序 -- 注意第一 , 二个 rownum 的区别 select rownum,t. * from ( select rownum,employees.

在linux下使用gtk的gdk-pixbuf实现类似windows下的透明贴图

aishen944-163.com 转贴请注明出处,谢谢!! 其实透明贴图的原理就是进行xor运算, 基本公式:A xor A = 0 A xor 0 = A A xor A xor B = B 假如现在有两张图片,一张是我们要对其进行贴图的图片A, 另外一张是要被贴图的图片B 1, 复制图片B的一份拷贝为C 2, 将C中指定的背景色变为全白(0xffffff),其他颜色变为全黑(0x00) 3, 依次执行如下运算: A xor B A and C A xor B 对于C中的白色执行运算后的结果如下: ((A xor B) and 0xfffffff) xor B = A xor B xor B = A 对于C中的黑色执行运算后的结果如下: ((A xor B) and 0x0000) xor B = 0 xor B = B 以下是代码实例,例子中用到的两张图片在这里: #include <cairo.

freepbx 模块开发 [翻译]

转自:http://www.asterisk-r.cn/?p=91 1.Module.xml 这个文件用于描述一个模块,包含了模块的名字,版本,类型,种类,预定义的菜单等 Rawname: 必须唯一,还必须和当前模块的目录名称一致, Name:这个是模块的显示名称 Description:显示在模块主页上的描述信息,可以是多行 Version:当前模块的版本,当更新模块的时候要记得增加版本号,数字的版本只能是(1.2,1.2.2) Type:两个值(setup/tool),setup 通知FreePbx此模块应该出现在安装页面,tool会使模块出现在工具页面,(有两个菜单) Category:当模块被显示出来,模块以及category进行分组,标准的category取值包括modules /core / addons Menuitems:菜单项,KEY说明唯一的菜单ID,VALUE说明显示名称,可以有定义多项,菜单ID必须唯一并且要连接到当前模块的page.menuid.php文件比如, <timecondition>Time Conditions</timecondition> 显示 “Time Conditions” on the menu, and links to page.timecondition.php. 菜单项支持很多的属性 Category:分类显示,如果没有指定,默认是模块的类别 Display:显示菜单,允许页面显示一个菜单两次,需要两个不同的tag names Type:菜单显示在type里面,当前有效的值有setup/tools,以后可能会扩展很多,默认和模块的Type相同. Href:重写默认的连接,用当前的URL替代,这是唯一有用的方法连接到定制页面,URL必须完整,以http:// 开始。 target:连接打开的模式,只有当href被指定才有用,值有:_blank _parent _self _top sort:显示的顺序,取值从-10到10,-5显示在2的前面,默认为0 例子: Location:module.tgz的位置,(具体作用未知(更新?)) Info:一个包含当前模块更多信息的URL,通常是一个WIKI页在freepbx.org 上面 Depends:依赖关系,设置模块的从属关系,允许的值有 ’version’(freepbx版本,可是以这些操作符>=、)、=、==、《、〈=、!= 默认是>) ‘module’:依赖其他的模块,值是一个模块的名字,或者是模块名称后面加一个空格再加一个版本号。 ‘engine’: The telephony engine (asterisk) name and version required. Follows the same conventions as a module. ‘file’:系统中存在的一个文件,使用绝对路径, Depends中所有的值可能用and连接,必须和安装完的模块匹配。 Changlog:最近的模块更改记录, Attention:指定的字段, Module.xml 定义了模块的基本信息。

RMI 优点

一、RMI概述 Java Remote Method Invocation ( RMI -- Java远程方法调用)为采用Java对象的分布式计算提供了简单而直接的 途径。这些对象可以是新的Java对象,也可以是围绕现 有API的简单的Java包装程序。Java体现了“编写一次就 能在任何地方运行的模式。而RMI可将Java模式进行扩展 ,使之可在任何地方运行”。 RMI可利用标准Java本机方法接口JNI与现有的和原有的 系统相连接。RMI还可利用标准JDBC包与现有的关系数据 库连接。RMI/JNI和RMI/JDBC相结合,可帮助您利用RMI与目 前使用非Java语言的现有服务器进行通信,而且在您需 要时可扩展Java在这些服务器上的使用。RMI可帮助您在 扩展使用时充分利用Java的强大功能。 二、RMI的优点 从最基本的角度看,RMI是Java的远程过程调用(RPC)机 制。与传统的RPC系统相比,RMI具有若干优点,因为它 是Java面向对象方法的一部分。传统的RPC系统采用中性 语言,所以是最普通的系统--它们不能提供所有可能的 目标平台所具有的功能。 RMI以Java为核心,可与采用本机方法与现有系统相连 接。这就是说,RMI可采用自然、直接和功能全面的方式 为您提供分布式计算技术,而这种技术可帮助您以不断 递增和无缝的方式为整个系统添加Java功能。 其主要优点如下: 1、面向对象:RMI可将完整的对象作为参数和返回值进行传 递,而不仅仅是预定义的数据类型。也就是说,您可以 将类似Java哈希表这样的复杂类型作为一个参数进行传 递。而在目前的RPC系统中,您只能依靠客户机将此类对 象分解成基本数据类型,然后传递这些数据类型,最后 在服务器端重新创建哈希表。RMI则不需额外的客户程序 代码(将对象分解成基本数据类型),直接跨网传递对象 。 2、可移动属性:RMI可将属性(类实现程序)从客户机移动 到服务器,或者从服务器移到客户机。例如,您可以定 义一个检查雇员开支报告的接口,以便察看雇员是否遵 守了公司目前实行的政策。在开支报告创建后,客户机 就会从服务器端获得实现该接口的对象。如果政策发生 变化,服务器端就会开始返回使用了新政策的该接口的 另一个实现程序。您不必在用户系统上安装任何新的软 件就能在客户端检查限制条件--从而向用户提供更快的 反馈,并降低服务器的工作量。这样就能具备最大的灵 活性,因为政策改变时只需要您编写一个新的Java类, 并将其在服务器主机上安装一次即可。 3、设计方式:对象传递功能使您可以在分布式计算中充分 利用面向对象技术的强大功能,如二层和三层结构系统 。如果您能够传递属性,那么您就可以在您的解决方案 中使用面向对象的设计方式。所有面向对象的设计方式 无不依靠不同的属性来发挥功能,如果不能传递完整的 对象--包括实现和类型--就会失去设计方式上所提供的 优点。 4、安全:RMI使用Java内置的安全机制保证下载执行程序时 用户系统的安全。RMI使用专门为保护系统免遭恶意小应 用程序侵害而设计的安全管理程序,可保护您的系统和 网络免遭潜在的恶意下载程序的破坏。在情况严重时, 服务器可拒绝下载任何执行程序。 5、便于编写和使用:RMI使得Java远程服务程序和访问这些 服务程序的Java客户程序的编写工作变得轻松、简单。 远程接口实际上就是Java接口。服务程序大约用三行指 令宣布本身是服务程序,其它方面则与任何其它Java对 象类似。这种简单方法便于快速编写完整的分布式对象 系统的服务程序,并快速地制做软件的原型和早期版本 ,以便于进行测试和评估。因为RMI程序编写简单,所以 维护也简单。 6、可连接现有/原有的系统:RMI可通过Java的本机方法接 口JNI与现有系统进行进行交互。利用RMI和JNI,您就能 用Java语言编写客户端程序,还能使用现有的服务器端 程序。在使用RMI/JNI与现有服务器连接时,您可以有选择 地用Java重新编写服务程序的任何部分,并使新的程序 充分发挥Java的功能。类似地,RMI可利用JDBC、在不修 改使用数据库的现有非Java源代码的前提下与现有关系 数据库进行交互。 7、编写一次,到处运行:RMI是Java“编写一次,到处运行 ”方法的一部分。任何基于RMI的系统均可100%地移植到 任何Java虚拟机上,RMI/JDBC系统也不例外。如果使用RMI/JNI 与现有系统进行交互工作,则采用JNI编写的代码可与任 何Java虚拟机进行编译、运行。 8、分布式垃圾收集:RMI采用其分布式垃圾收集功能收集不 再被网络中任何客户程序所引用的远程服务对象。与Java 虚拟机内部的垃圾收集类似,分布式垃圾收集功能允许 用户根据自己的需要定义服务器对象,并且明确这些对 象在不再被客户机引用时会被删除。 9、并行计算:RMI采用多线程处理方法,可使您的服务器利 用这些Java线程更好地并行处理客户端的请求。 Java分布式计算解决方案:RMI从JDK 1.

WinCE BSP的 BIB .bib 文件介绍

作者:ARM-WinCE 在WinCE中使用的一个重要的文件就是BIB文件,全称Binary Image Builder File。在WinCE的编译过程中会用到BIB文件,应该是在最后的Makeimg阶段。所有的BIB文件会被合并成CE.bib文件,然后 Romimage.exe会根据BIB文件中的描述来决定哪些文件最终被包含到WinCE image中。当然,BIB文件还决定了WinCE设备内存的分配,其中定义了WinCE image占用哪块内存,Framebuffer占用哪块内存等。 在BIB文件中分为4大项:MEMORY项,CONFIG项,MODULES项和FILES项。下面分别作个解释: MEMORY:定义了内存分配的相关设置,一般在BSP中的config.bib文件中。 CONFIG:在最后的Makeimg阶段,为Romimage.exe提供一些生成WinCE image的配置属性。该项是可选的,一般也在BSP中的config.bib文件中定义。 MODULES:定义了一些会被打包到WinCE image中的模块或者文件,比如dll,exe等。这些文件会被Romimage.exe标记为加载到RAM中或者XIP。我们可以在这里添加自己的 WinCE应用程序或者模块,但是不要添加Managed Binaries,一般指.NET的程序。 FILES:定义了一些操作系统会用到的其他的文件,比如字体文件,图片等。这些文件也会在WinCE运行的时候被加载到RAM中。 下面会详细介绍上面的4大项: 1. MEMORY项 一般都在config.bib文件中定义,开头会有MEMORY的字样。这里定义了为WinCE image以及其他模块预留的RAM,同时也定义了WinCE可以使用的RAM。具体格式如下: MEMORY NAME Start Address Memory Size Type NAME:该内存区域的名字,必须是唯一的。 Start Address:该内存区域的起始地址,用十六进制表示。 Memory Size:该内存区域的大小,用十六进制表示。 Type:内存区域的类型。包涵的多种类型如下。 类型值 描述 FIXUPVAR 用于在WinCE编译的Makeimg阶段,就初始化一个内核中的全局变量。 NANDIMAGE 当创建了一个使用BinFS的image的时候,NAND设备上的WinCE kernel重定向到RAM中的区域,当系统访问该区域的时候,BinFS会负责访问Nand设备上相应的位置,并返回数据给系统,实际上就是在Nand设备上面实现了XIP的功能。 RAM 定义了被WinCE系统使用的RAM区域,这块内存必须是连续的,这里有一点要注意就是从硬件的角度来说,这块内存不能跨越两片SDRAM,也就是说整个区域空间必须在一片硬件SDRAM上。 RAMIMAGE 定义了一块内存区域用于加载WinCE image,实际上WinCE启动以后,image会被拷贝到这块内存区域上面运行。一个image只能有一个连续的RAMIMAGE区域。 RESERVED 这块内存区域会被预留出来,一般用于Frambuffer或者是DMA Buffer,或者是一块共享内存用于EBOOT传递参数给WinCE系统。 EXTENSION 定义了一块WinCE image中的区域作为ROMHDR extension的数据区域。 2.CONFIG项 一般在config.bib文件中定义,定义了一些额外的配置参数,其中一些对于WinCE image来说也很重要。具体格式如下; CONFIG ITEM=Parameter ITEM 描述 AUTOSIZE 允许未被使用的WinCE image的RAM被用作WinCE系统的RAM。默认值为ON。 COMPRESSION 允许Romimage.exe压缩WinCE image中的可写入部分。默认值为ON。 BOOTJUMP 定义了跳转跳转页在RAMIMAGE空间的地址。而不是默认情况下的RAMIMAGE的首地址。默认值为NONE。

利用wxPython中的img2py工具将图片资源转换成py文件

我们在写gui程序的时候,经常会用到一些图标图片资源,对此有几种解决办法,有人喜欢用zip模块将其打包,用的时候取出来,因为python读取zip文件也是很方便的,有人则干脆不打包,直接放在一个子目录中,用的时候直接读取。而我则喜欢将其转换为.py文件,作为模块调用。 我在看wxPython程序的例程的时候,发现它的图片是从一个模块(.py文件)中调入的,于是很好奇,顺藤摸瓜,于是发现: wxPython安装好之后,会在 wx\tools 目录下安装一些工具,其中名为img2py.py的工具。 这个工具可以很方便的将我们程序中所用到的图片或者图标资源转换成py文件,这样我们在需要使用这些图片资源的时候,只需要 import 这些扩展名为.py的模块文件即可 在命令行下输入img2py.py并回车,可以查看详细的帮助信息。而一般情况下,我们所要做的,只是将图片转换为.py文件 例如,我有一个ico文件,想用其作为我程序的托盘图标 那么我可以这样做 首先,将其转换为 .py 文件 img2py.py myicon.ico myicon.py 然后,在程序中导入这个模块 import myicon 最后,当我需要用它的时候,只需要: icon = myicon.geticonIcon() 注意,如果你的myicon.py中没有geticonIcon()方法,只需要加入如下一行语句即可: geticonIcon = icon.GetIcon 怎么样,是不是很方便? 在 wx\tools 目录下还有一些其他的工具,具体用法还有待大家发掘 更多精彩,到python吧去: http://www.python8.org 转载于:https://blog.51cto.com/python8/199411

Thread的run()与start()的区别

java中thread的start()和run()的区别: 1.start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码: 通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体, 它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止, 而CPU再运行其它线程, 2.run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码: 而如果直接用Run方法, 这只是调用一个方法而已, 程序中依然只有主线程--这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。 举例说明一下: 记住:线程就是为了更好地利用CPU, 提高程序运行速率的! public class TestThread1{ public static void main(String[] args){ Runner1 r=new Runner1(); //r.run();//这是方法调用,而不是开启一个线程 Thread t=new Thread(r);//调用了Thread(Runnable target)方法。且父类对象变量指向子类对象。 t.start(); for(int i=0;i<100;i++){ System.out.println("进入Main Thread运行状态"); System.out.println(i); } } } class Runner1 implements Runnable{ //实现了这个接口,jdk就知道这个类是一个线程 public void run(){ for(int i=0;i<100;i++){ System.out.println("进入Runner1运行状态"); System.out.println(i); } } } 同时摘取一段外文网站论坛上的解释: Why do we need start() method in Thread class?

盘点北邮IT类就业方向(补全了含外企)供师弟师妹参考

发信人: noobody (everybody), 信区: Job 标 题: 盘点北邮IT类就业方向(补全了含外企)供师弟师妹参考 发信站: 北邮人论坛 (Fri Sep 4 10:35:18 2009), 站内 进入9月份,找工作的序幕已经彻底拉开了,去年的这个时候,我很迷茫,不知道前面等待我的是什么,也不知道自己想做的是什么,我想趁着还没有淡忘,结合我 手中掌握的信息,把北邮IT类专业毕业生就业的主要去向,以及这些去向互相之间的比较给师弟师妹们介绍一下,以供参考。好了,不说废话了,开始吧。 首先从整体上比较一下国企和外企。为了方便比较,也基于公司或者单位的运作模式,暂时将公务员也划入国企,百度等民族IT公司划入外企。 国企:国企内部等级森严,公司治理、内部管控等方面都赶不上外企,但是国企掌握着资源,是拥有者。 外企:外企掌握着先进的生产力,公司治理等方面都有优势,人际关系比起国企来说相对简单,但是外企在中国,大部分都是做服务的,他们提供知识,但不掌握资源。 好了,下面开始做详细的盘点: 电信类: 1、总部:去年有听说去移动总部的,不过进总部的太少了,大多数是去研究院、设计院、北京移动、省级电信运营商之类的。 2、中国移动研究院:待遇和地位据说不如以前了。设计院我不太了解。 3、中讯邮电设计院:原邮电部直属邮电设计院。中国联通18家支撑单位的牵头单位。她的待遇是这样的:2k工资+2K奖金+1K津贴+1K房补(不知道批 下来没),看来好像不多,不过这是税后,而且没有算交通补、通讯补、饭补和差补,都加在一起税后还是不错的。这家公司的总部是新盖的,由于它原来的总部在 郑州,所以好多元老,中层也都在郑州安家落户了,过来的可能性不大,这可能也是一个独特的机会,进去之后,也许上升空间会大些。 4、工信部电信研究院:据说里面的泰尔实验室待遇超谷歌,其它还有标准所,规划所等。他们是事业单位,这个研究院的理论智能是给政府或工信部提供决策支 持,你搜索一下就会发现,网上好多关于电信领域的评论访谈都出自于该所的专家。不过目前他们的客户也在多样化,例如其规划所也为移动,联通等运营商做规 划。 5、北京市电信规划设计院:主要是为联通做项目。 6、北京移动不太了解,但是据说是B类岗位,能否转正,多久转正未知(可以请知情人士透露),去参加过他们的面试,感觉现场的北京移动员工自我感觉挺良好的。 7、广东移动,性价比较高,移动好多创新的东西都来自于广东移动,如果不是非要留京,去广移动是个不错的选择。去年坛子上有人说是税前10多W。 8、省级运营商:适合想回家发展的TX,性价比还是挺高的,至少生活方面会便利些,在北京很多人上班花在路上的时间单程都要1个小时。有一个去了家乡移动的,据说每月5k,税前税后记不清了。 总结:北邮人进运营商或者电信类的研究院规划院,当然是最对口的了,进去之后,你会发现里面好多师兄师姐,而且IT是运营商的主业,运营商们除了提供日 常通信服务,还往往给其它国企或者事业单位搞信息化,因此北邮人在运营商会有一种主流的感觉。电信行业的劣势是,目前电信行业利润趋薄,不知道3G能否给 电信行业带来新气象。 金融类 1、股份制小银行(暂时将它们归入国企,便于与其它国有银行比较):以浦发、民生等为代表,它们的特点是给的米多,工作很累,业内有句老话,“你拿民生的 钱,民生拿你的命”。据一位内部人士说,在这些银行,当你不再有提升空间时(假设你没有升到高管),也就该准备跳槽了。 2、国有四大行 工行科技部:招人很少,需要大牛,有些背景更好。 工行软开:工行软开无疑是四大行里实力最强的,而且从去年起,据说待遇有所提升,相信进去之后一定能在项目中获得锤炼。 农行科技部:由于机构调整,测试、主机、网络等岗位都划入科技部了,所以招人相对较多。 农行软开:农行的信息化建设起步较晚,落后于工行,不过也正因此,很多系统都在上,很缺人,进入农行软开,锻炼的机会也很多。 中行科技部:招人太少,可以尝试 中行软开:据说很怂,不太了解,只是知道中行当初买了一个核心银行系统,但以失败告终,目前其信息化建设前景不太明朗。 建行:建行的科技口待遇还是很不错的,只是不知道今年什么时候招人,去年很晚才签约,大概到4,5月份了吧。 3、保险公司 中国人寿、PICC的薪酬是很有竞争力的,个人认为单说薪酬略胜于国有四大银行。但是保险公司一般不自己开发,尽量外包,其IT系统的要求也没有银行高。 4、中国邮政储蓄银行 刚刚正式成立,起步晚,目前还不被允许发放大额贷款,不过也正因为如此,各项信息系统的建设缺口比较大,进去之后,个人的上升空间可能会多些。 最后比较一下金融企业的科技部和软开:科技部是信息化建设牵头单位,这里更需要的是具有IT背景的复合型人才(并不意味着,你的专业必须是复合型的,科技部里最多的还是计算机专业的),软开则和一般的IT公司没有太大区别,以开发为主要任务。 总结:金融类就业方向的待遇总体来说都不弱,待遇最好的当然还是股份制小银行以及保险公司了,但是,对IT要求最高,最能获得锻炼机会的,还是国有四大 行,尤其是工行和农行,这两家银行可以说是中国银行业的巨无霸,它们的信息系统每天要支持数千万笔的在线交易。如果在这两家之间比较的话,只能说工行的 IT已经相对成熟,农行的IT正在如火如荼的建设中,相对缺人才。 公务员 刚入职,薪酬确实微薄,不过很有保障。真想考的话,不要总听信传言,说必须得有关系,国考(中央直属部委)还是相对公平的。 其它 其它如中粮、烟草专卖局、中石化、中化、中石油等就更不用说了,据说待遇丰厚,但是感觉这些企业对信息化得要求不如运营商和金融公司。 总结: 电信类:主流,但是利润趋薄。 金融类:比起运营商不算主流,但是金融IT的要求是很高的,而且IT搞的好了,也有机会调任其它部门的经理、处长。 其它:更加非主流了,但是有些待遇丰厚的,也值得考虑。 总之还是各有利弊,个人应该依据兴趣爱好以及适合的进行选择。 补充外企部分 版上很多TX都有各色外企的实习经历,应该比我了解的多。在此我简述一下,起个抛砖引玉的效果吧。 纯IT公司 1、微软 : 去微软的话,大致上有三类方向: 1.

perl---(数组和哈希)引用

谁需要复杂的数据结构? 始终伴随着Perl 4的一个问题是怎么样来描述一个值是列表的哈希表。Perl 4 有哈希但是它的值必须是标量,不能是列表。 你为什么需要一个列表的哈希结构呢?让我们来看一个简单的例子:你有一个包含城市和国家名称的文件,如下: Chicago, USA Frankfurt, Germany Berlin, Germany Washington, USA Helsinki, Finland New York, USA 你想按照下面的格式输出,每一个国家出现一次,然后是一个按照字母顺序的该国家内城市的列表,如下: Finland: Helsinki. Germany: Berlin, Frankfurt. USA: Chicago, New York, Washington. 一个很自然的解决方法是将国家的名称设置为一个哈希结构的键,和国家名称对应的健值是这些国家内的城市的一个数组。 每一次,你读取一行输入,将其分成国家和城市两个数据。查看'国家名称'的键所对应的城市列表,然后把新的城市加入那个列表中。当你完成了整个输入,然后将整个哈希中每个健对应的健值-城市名的列表作一个排序,然后打印出来。 如果哈希值不能是列表,你就无法完成工作了。在Perl 4中,哈希的值不能是列表。它们只能是字符串。所以你必须把所有的城市名合并成一个字符串。当需要输出时,你再把这个字符串分拆成一个列表,然后对列表排序,最后将列表中的数据转成字符串输出。这样做非常烦琐并容易出错。而且让人沮丧的是,Perl已经拥有的优秀的列表功能无法使用了。 -------------------------------------------------------------------------------- 解决方法 当Perl进化到Perl 5时,我们必须考虑到哈希原来的设计:哈希的键值必须是标量。解决办法就是采用'引用'。 一个'引用'就是一个指向一个完整列表或完整哈希(或指向其他的东西,比如函数)的标量值。名字就是你比较熟悉的一种'引用'。 考虑一下美国的总统:一包杂乱的血肉。但是当我们谈到它,或者需要在计算机程序中描述它,你需要的只是一个简单的标量'George Bush'。 Perl中的'引用'就像列表和哈希的名字。它们是Perl中私有的,内部的名字,所以你可以确信它们是明确的,不像'George Bush', 一个'引用'只指向一个东西。你总是可以知道它指向什么。如果你有一个指向数组的'引用',你可以从它恢复出整个数组。如果你有一个指向哈希的'引用',你可以根据它恢复出整个哈希。但是这个'引用'仍旧是一个简单、紧凑的标量。 你不能使用一个健值是数组的哈希;哈希的健值必须是标量。我们被这个束缚住了。但是一个简单的'引用'能指向一个完整的数组,'引用'是标量,所以你可以使用指向数组的'引用'组成的哈希,它就像一个数组的哈希一样,和数据的哈希一样有用。 稍后我们会再回到这个‘城市-国家’的问题来。我们先来看一些操作'引用'的语法。 -------------------------------------------------------------------------------- 语法 创建'引用'仅有两种方法,使用它也是两种。 创建引用 创建规则 1 如果你在一个变量前加一个'/'号,你就得到了这个变量的'引用'。 $aref = /@array; # $aref 保存着指向@array的'引用' $href = /%hash; # $href 保存着指向%hash的'引用' 当你把'引用'保存在类似 $aref 或 $href的变量中,你就可以象操作其他标量一样copy或保存它。 $xy = $aref; # $xy 现在保存了指向 @array 的'引用' $p[3] = $href; # $p[3] 现在保存了指向 %hash 的'引用' $z = $p[3]; # $z 现在保存了指向 %hash 的'引用' 这些例子展示了如何创建命名变量的'引用',但是有时候,我们创建的数组或哈希没有名字。这个和你使用没有放到变量中去的字符串'/n'或数字'80'类似。 创建规则 2 [ ITEMS ] 创建了一个新的、匿名的数组,并返回一个指向这个数组的'引用'。 { ITEMS } 创建了一个新的、匿名的哈希,并返回那个哈希的一个'引用'。 $aref = [ 1, "

REST初探

REST初探 [未经本人许可 严禁转载] 本文永久链接 http://blog.csdn.net/hereweare2009/archive/2009/08/26/4487940.aspx 一、REST的基本思想 [Fielding]把REST形式化地定义为一种架构风格(architecture style),它由架构元素(element)和架构约束(constraint)组成。REST是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。REST提出了一些设计概念和准则: 1. 网络上的所有事物都被抽象为资源(resource); 2. 每个资源对应一个唯一的资源标识(resource identifier); 3. 通过通用的连接器接口(generic connector interface)对资源进行操作; 4. 对资源的各种操作不会改变资源标识; 5. 所有的操作都是无状态的(stateless)。 对于当今最常见的网络应用来说,resource identifier是url,generic connector interface是HTTP,第4条准则就是我们常说的url不变性。这些概念中的resouce最容易使人产生误解。resouce所指的并不是数据,而是数据+特定的表现形式(representation),这也是为什么REST的全名是Representational State Transfer的原因。举个例子来说,“本月卖得最好的10本书”和“你最喜欢的10本书”在数据上可能有重叠(有一本书即卖得好,你又喜欢),甚至完全相同。但是它们的representation不同,因此是不同的resource。 在web上,你能对资源采取的仅限于一些基本的操作。HTTP提供了四种基本方法,用于四种最常见的操作: 1. 获取资源的一个表示:HTTP GET 2. 创建一个新资源:向一个新URI发送HTTP PUT,或者向一个已有URI发送HTTP POST.( PUT请求是由客户端决定(被创建或更新的)资源的URI;而POST请求是向一个“集合(collection)”或 “工厂(factory)”资源发出的,是由服务器来指派URI的。) 3. 修改已有资源:向已有URI发送HTTP PUT 4. 删除已有资源:HTTP DELETE 二、REST式、面向资源的架构 REST式的架构意味着方法信息method information都在HTTP方法(如GET,POST等,默认的HTTP方法是GET)里,方法信息就是关于对数据采取什么操作的信息,即Server端提供的业务方法,不能出现在URI里;面向资源的架构Resource-Oriented Architecture意味着作用域信息scoping information都在URI里,作用域信息可以理解为业务方法所需的一组参数。将二者结合起来是很强大的,即REST式、面向资源的架构。实际上很多HTTP请求的第一行就能让Server端知道客户端要做什么了,请求的其余部分只是具体细节而已。如果HTTP方法跟方法信息对不上,那么服务就算不上是REST式的;如果作用域信息不放在URI里,那么这项服务不是面向资源的。 三、RPC式架构 RPC式的web服务通常是Server端从客户端收到一个充满数据的信封envelope,信封里或者报头包含客户端请求的方法信息与作用域信息,Server端处理请求后,同样发给客户端一个充满信息的信封。RPC式的架构意味着方法信息与作用域信息都在信封或者报头里。具体采用哪种信封,没有限制。HTTP是一种常见的信封格式,另一种常见的信封格式是SOAP,将SOAP信封放在HTTP信封里,在HTTP上传送SOAP文档。XML-RPC是最典型的RPC架构的例子。下面是一段描述XML-RPC请求的XML文档: <?xml version=”1.0”> <methodCall> <methodName>lookupRPC</methodName> <params> <param><value><string>jfksajfksajfs</string></value></param> </params> </methodCall> 这个XML文档是放在信封里传递给服务器的,这里的信封就是HTTP请求,它由HTTP方法,URI,包头和实体主体等部分组成,其中实体主题就是上面的xml文档。上面的XML文档随你调用方法的不同而有所变化,只是HTTP信封格式总是不变的,即URI与HTTP方法 POST是不变的,只是信封主体的XML文档的methodName与params有变化。REST式的服务为不同的作用域信息暴露不同的URI;而RPC式的服务为每个“文档处理器”(用于打开信封,并把信封转化为软件指令)暴露一个URI。 较多的采用或者只采用HTTP POST的服务多半是RPC式的服务。虽然这不是绝对的,但是至少可以说明该服务没有把HTTP方法用于表达方法信息。如果一个REST式的服务过多地采用HTTP POST,那么他容易变成REST-RPC混合架构。 四、REST-RPC混合架构 看这个URI: http://www.myserver.com/services/rest?api_key=xxx&method=myserver.item.get&tags=book 虽然这个URI包含着rest字样,但是它把方法信息myserver.item.get放在了URI里了,这说明它不是采用rest式的架构了;但是作用域信息却包含在URI里了,这跟REST式、面向资源的架构有点类似了。该URI的HTTP请求为: GET services/rest? api_key=xxx&method=myserver.

Oracle 中set相关的命令

SQL> set colsep' '; //-域输出分隔符 SQL> set echo off; //显示start启动的脚本中的每个sql命令,缺省为on SQL> set echo on //设置运行命令是是否显示语句 SQL> set feedback on; //设置显示“已选择XX行” SQL> set feedback off; //回显本次sql命令处理的记录条数,缺省为on SQL> set heading off; //输出域标题,缺省为on SQL> set pagesize 0; //输出每页行数,缺省为24,为了避免分页,可设定为0。 SQL> set linesize 80; //输出一行字符个数,缺省为80 SQL> set numwidth 12; //输出number类型域长度,缺省为10 SQL> set termout off; //显示脚本中的命令的执行结果,缺省为on SQL> set trimout on; //去除标准输出每行的拖尾空格,缺省为off SQL> set trimspool on; //去除重定向(spool)输出每行的拖尾空格,缺省为off SQL> set serveroutput on; //设置允许显示输出类似dbms_output SQL> set timing on; //设置显示“已用时间:XXXX” SQL> set autotrace on-; //设置允许对执行的sql进行分析 SQL> set verify off //可以关闭和打开提示确认信息old 1和new 1的显示.

Google AppEngine vs. Amazon EC2/S3

关键字: 云计算 云计算定义:从两个方面去定义,一个是底层机制,一个是用户模型 Infrastructure底层机制:Cloud Cluster Grid; 用户角度分为:Utility Computing SaaS/SOA Utility Computing代表是:Amazon EC2, Google AppEngine SaaS代表是:一些online office 和在线CRM等等 主要谈谈Utility Computing,简称UC,提出面向资源ROA,和SOA面向服务不同,Hardware as a service (HaaS), Infrastructure as a service (IaaS), Platform as a Service (PaaS) 说白了,UC就是卖可伸缩性Scalable,UC是一个伸缩机,这是它的最大价值,你一个小应用,当初没想到能搞那么大,风险资金进来了,半年访问量翻 100倍,而这些巨大访问是你当初小应用没有考虑到的;但是也不能让每个编程序的人都掌握架构师的知识:高伸缩性,就象我在jdon天天谈伸缩性,没几个人明白,明白了也不会站在这个高度来思考,所以,架构师知识少有的。Google APP Engine 都给你事先考虑好了,帮助无缝拓展,这是它的价值,也是云计算的一个核心价值。 降低费用也是UC的一个卖点,人人做一个web 2.0网站成本低,随着规模扩大,成本就降低. AMAZON EC2特点: 租个VM实例运行您的软件。按照需求变化监测和增加/减少VM数。使用步骤: 1.创建一个Amazon Machine Image (AMI),可以是: applications, libraries, data a和其他设置 2.上传AMI到Amazon S3 (只是存储) 3. 用Amazon EC2 web service配置你自己的安全策略和网络。 4. 选择OS, 启动你的AMI 5. 通过Web界面或API监控 GOOGLE APPENGINE特点: 使用Python 或Java写你的应用,然后交给它,它就给你负责其余的事情,步骤: 1.下载 AppEngine SDK

js移动DIV(来自互联网)

可以移动的层(Div)兼容IE和firefox浏览器 <html> <head> <title>移动Div</title> <style type="text/css" rel="stylesheet"> #movediv{ width:100px;height:100px;position:absolute;border:1px solid #000;background:#EAEAEA; cursor:pointer; text-align:center; line-height:100px; left:100px; top:10px; } </style> <script language="javascript" type="text/javascript"> var _IsMousedown = 0; var _ClickLeft = 0; var _ClickTop = 0; function moveInit(divID,evt) { _IsMousedown = 1; if(getBrowserType() == "NSupport") { return; } var obj = getObjById(divID); if(getBrowserType() == "fox") { _ClickLeft = evt.pageX - parseInt(obj.style.left); _ClickTop = evt.pageY - parseInt(obj.style.top); }else{ _ClickLeft = evt.x - parseInt(obj.style.left);

word 调整word中一部分格式,全文都跟着变的解决办法

在修改某一部分文字格式的时候,全文都跟着改变,按ctrl+Z后选中改变的地方不变,其他的恢复原样 解决办法: 打开->样式和格式->找到->正文->点击正文上的下拉列表->点击修改->弹出修改样式->去掉自动更新前面的勾 黑色头发:http://heisetoufa.iteye.com/

Exception and Error

Today I suddently be confused with the Exception and Error of Java. So I checked some infos about this. The Java Language Specification says that, The unchecked exceptions classes are the class RuntimeException and its subclasses, and the class Error and its subclasses. All other exception classes are checked exception classes. The Java API defines a number of exception classes, both checked and unchecked. Additional exception classes, both checked and unchecked, may be declared by programmers.

Address already in usr

当客户端保持着与服务器端的连接,这时服务器端断开,再开启服务器时会出现: Address already in usr 可以用netstat -anp | more 可以看到客户端还保持着与服务器的连接(还在使用服务器bind的端口)。这是由于client没有执行close,连接还会等待client的FIN包一段时间。解决方法是使用setsockopt,使得socket可以被重用,是最常用的服务器编程要点。具体的做法为是,在socket调用和bind调用之间加上一段对socket的设置: int opt = 1; setsockopt(socket_fd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); 附 :setsockopt的用法。 setsockopt(设置socket状态) 相关函数 getsockopt 表头文件 #include<sys/types.h>; #include<sys/socket.h>; 定义函数 int setsockopt(int s,int level,int optname,const void * optval,,socklen_toptlen); 函数说明 setsockopt()用来设置参数s所指定的socket状态。参数level代表欲设置的网络层,一般设成SOL_SOCKET以存取socket层。参数optname代表欲设置的选项,有下列几种数值: SO_DEBUG 打开或关闭排错模式 SO_REUSEADDR 允许在bind()过程中本地地址可重复使用 SO_TYPE 返回socket形态。 SO_ERROR 返回socket已发生的错误原因 SO_DONTROUTE 送出的数据包不要利用路由设备来传输。 SO_BROADCAST 使用广播方式传送 SO_SNDBUF 设置送出的暂存区大小 SO_RCVBUF 设置接收的暂存区大小 SO_KEEPALIVE 定期确定连线是否已终止。 SO_OOBINLINE 当接收到OOB 数据时会马上送至标准输入设备 SO_LINGER 确保数据安全且可靠的传送出去。 参数 optval代表欲设置的值,参数optlen则为optval的长度。 返回值 成功则返回0,若有错误则返回-1,错误原因存于errno。 附加说明 EBADF 参数s并非合法的socket处理代码 ENOTSOCK 参数s为一文件描述词,非socket ENOPROTOOPT 参数optname指定的选项不正确。 EFAULT 参数optval指针指向无法存取的内存空间 文章出处:http://www.

最近在项目中遇到的几个小小问题

最近,在项目中遇到了一些小问题,虽然说这样的问题很简单,且网上会有解决方法的,但是,自己记录下总是好的。重在积累。 1、项目中有个功能是写信息到配置文件。于是,便在每个属性结束时,使用/n来换行。后来发现,使用 记事本 和 写字板 分别打开,其中一个换行了,正是我要的效果,而另一个没有,各个属性之间只是有一个空格而已。后来,在代码中使用 /n/r 来换行,再次使用 记事本 和 写字板 分别打开,换行正常。 2、将项目中,有个功能是点击 帮助 菜单,即打开项目中的帮助文档,为chm格式的。将项目打包发布后,如果安装在不带空格的目录下,打开帮助文档正常。但是,如果安装在带空格的目录下后,则打不开。 项目中使用的语句为:Runtime.getRuntime().exec("cmd.exe /k start "+path); 查找资料时发现下面的网址 : http://www.blogjava.net/hopeshared/archive/2008/01/31/178685.html 后将项目中语句改为 : Runtime.getRuntime().exec("cmd /k "+"/""+path+"/""); 执行正常。

fopen 参数讲解

fopen参数说明 Linux编程 2009-06-28 15:54 阅读167 评论0 字号: 大 大 中 中 小 小 source: http://hi.baidu.com/05809/blog/item/166bbf1000e5d109213f2ea3.html 2009-06-03 23:03 fopen参数说明2008-07-14 11:33fopen参数说明格式:文件指针名=fopen(文件名,使用文件方式) 参数: 文件名 意义 "C://TC//qwe.txt" 文件C:/TC/qwe.txt "qwe.txt" 和程序在同一目录下的qwe.txt 文件使用方式 意 义 “rt” 只读打开一个文本文件,只允许读数据 “wt” 只写打开或建立一个文本文件,只允许写数据 “at” 追加打开一个文本文件,并在文件末尾写数据 “rb” 只读打开一个二进制文件,只允许读数据 “wb” 只写打开或建立一个二进制文件,只允许写数据 “ab” 追加打开一个二进制文件,并在文件末尾写数据 “rt+” 读写打开一个文本文件,允许读和写 “wt+” 读写打开或建立一个文本文件,允许读写 “at+” 读写打开一个文本文件,允许读,或在文件末追加数据 “rb+” 读写打开一个二进制文件,允许读和写 “wb+” 读写打开或建立一个二进制文件,允许读和写 “ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据 对于文件使用方式有以下几点说明: 1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是: r(read): 读 w(write): 写 a(append): 追加 t(text): 文本文件,可省略不写 b(banary): 二进制文件 +: 读和写 2. 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。

Some basic knowledges about the class Object (1)

Some basic knowledges about the class Object (1) Let's talk about the java.lang.Object. We've known that the class Object is the root of all java class. Just because of that, being familiar with the class Object would help us use more and useful basic functions of our code. Look at the methods. First is the clone(), so we have the code like this, ----------------------------------------------- public class SubClass { public int a;

稠密集与稀疏集

派生集如果不加过滤器,生成稠密集,其元素个数为各父集的笛卡尔积,往往造成模型占内存巨大,甚至溢出。 然而,往往有用的只是笛卡尔积的一个子集,可以通过添加过滤器(注意此时要用&1,&2,...等表示各父集索引)将这个子集筛选出来(即将无用元组滤掉)得到稀疏集,这样就能使模型体积大为缩小。