签名算法

签名算法 我们使用非对称加密算法的时候,对于一个公钥-私钥对,通常是用公钥加密,私钥解密。 如果使用私钥加密,公钥解密是否可行呢?实际上是完全可行的。 不过我们再仔细想一想,私钥是保密的,而公钥是公开的,用私钥加密,那相当于所有人都可以用公钥解密。这个加密有什么意义? 这个加密的意义在于,如果小明用自己的私钥加密了一条消息,比如小明喜欢小红,然后他公开了加密消息,由于任何人都可以用小明的公钥解密,从而使得任何人都可以确认小明喜欢小红这条消息肯定是小明发出的,其他人不能伪造这个消息,小明也不能抵赖这条消息不是自己写的。 因此,私钥加密得到的密文实际上就是数字签名,要验证这个签名是否正确,只能用私钥持有者的公钥进行解密验证。使用数字签名的目的是为了确认某个信息确实是由某个发送方发送的,任何人都不可能伪造消息,并且,发送方也不能抵赖。 在实际应用的时候,签名实际上并不是针对原始消息,而是针对原始消息的哈希进行签名,即: signature = encrypt(privateKey, sha256(message)) 对签名进行验证实际上就是用公钥解密: hash = decrypt(publicKey, signature) 然后把解密后的哈希与原始消息的哈希进行对比。 因为用户总是使用自己的私钥进行签名,所以,私钥就相当于用户身份。而公钥用来给外部验证用户身份。 常用数字签名算法有: MD5withRSA SHA1withRSA SHA256withRSA 它们实际上就是指定某种哈希算法进行RSA签名的方式。 DSA签名 除了RSA可以签名外,还可以使用DSA算法进行签名。DSA是Digital Signature Algorithm的缩写,它使用ElGamal数字签名算法。 DSA只能配合SHA使用,常用的算法有: SHA1withDSA SHA256withDSA SHA512withDSA 和RSA数字签名相比,DSA的优点是更快。 ECDSA签名 椭圆曲线签名算法ECDSA:Elliptic Curve Digital Signature Algorithm也是一种常用的签名算法,它的特点是可以从私钥推出公钥。比特币的签名算法就采用了ECDSA算法,使用标准椭圆曲线secp256k1。BouncyCastle提供了ECDSA的完整实现。 https://www.liaoxuefeng.com/wiki/1252599548343744/1304227943022626

2013-04-04 · 1 min · 39 words · -

English sentence

English sentence correlation,relation correlation 相关性,主要强调两种或多种事物之间相互联动、相互影响的程度,如油价和汽车销售量的相关性等 relation 关系,不强调相互作用,只表明两种事物之间的血缘或物理关系,如外交关系,男女关系等 http://blog.sina.com.cn/s/blog_5056454d0100iw0d.html Bart Lorang may be the best boss ever. 巴特-洛朗或许将成为最佳老板。 The CEO of Denver-based internet start-up FullContact API said in a market that is competitive for top talent, he wants to keep his employees happy and refreshed. 美国丹佛的网络初创公司FullContact API的总裁巴特-洛朗表示,在各家争相雇佣顶级人才的竞争市场中,他想让自己的员工心情愉快,充满干劲。 The flip-flop wearing founder offers his employees $7,500 for what he calls “paid, paid vacation,” however there are rules. 这位穿着夹趾凉拖的公司创始人向他的每位员工提供7500美元,用于"付费带薪休假",但需遵守相关规定。 “One, you actually have to take a vacation to get the money,” Lorang said. “Two, you have to disconnect from work, so that means no calls, no emails, no tweets, no work of any kind.” ...

2013-04-04 · 2 min · 289 words · -

The MIT License

The MIT License http://baike.baidu.com/view/3159946.htm MIT许可证 (The MIT License) 是许多软件授权条款中,被广泛使用的其中一种。与其他常见的软件授权条款 (如GPL、LPGL、BSD) 相比,MIT是相对宽松的软件授权条款。MIT许可证之名源自麻省理工学院 (Massachusetts Institute of Technology, MIT) ,又称"X条款" (X License) 或"X11条款" (X11 License) MIT内容与三条款BSD许可证 (3-clause BSD license) 内容颇为近似,但是赋予软件被授权人更大的权利与更少的限制。有许多团体均采用MIT许可证。例如著名的ssh连接软件PuTTY与X Windows System (X11)即为例子。Expat, Mono开发平台库,Ruby on Rails, Lua 5.0 onwards等等也都采用MIT授权条款。被授权人权利 被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。 被授权人可根据程序的需要修改授权条款为适当的内容。 被授权人义务 在软件和软件的所有副本中都必须包含版权声明和许可声明。 其他重要特性 此授权条款并非属copyleft的自由软件授权条款,允许在自由/开放源码软件或非自由软件 (proprietary software) 所使用。 MIT的内容可依照程序著作权者的需求更改内容。此亦为MIT与BSD (The BSD license, 3-clause BSD license) 本质上不同处。 MIT条款可与其他授权条款并存。另外,MIT条款也是自由软件基金会 (FSF) 所认可的自由软件授权条款,与GPL兼容。

2013-04-01 · 1 min · 56 words · -

windows SC命令详解

windows SC命令详解 SC命令详解(一个很有用的command) 作为一个命令行工具,SC.exe可以用来测试你自己的系统,你可以设置一个批处理文件来使用不同的参数调用 SC.exe来控制服务。 一.SC使用这样的语法: SC [Servername] command Servicename [Optionname= Optionvalues] SC [command] 这里使用第一种语法使用SC,使用第二种语法显示帮助。 下面介绍各种参数。 Servername 可选择: 可以使用双斜线,如\myserver,也可以是\192.168.1.223来操作远程计算机。如果在本地计算机上操作 就不用添加任何参数。 Command 下面列出SC可以使用的命令。 config–改变一个服务的配置。 (长久的) continue-对一个服务送出一个继续控制的要求。 control–对一个服务送出一个控制。 create–创建一个服务。 (增加到注册表中) delete–删除一个服务。 (从注册表中删除) EnumDepend-列举服务的从属关系。 GetDisplayName-获得一个服务的显示名称。 GetKeyName-获得一个服务的服务键名。 interrogate-对一个服务送出一个询问控制要求。 pause–对一个服务送出一个暂停控制要求。 qc–询问一个服务的配置。 query–询问一个服务的状态,也可以列举服务的状态类型。 start–启动一个服务。 stop–对一个服务送出一个停止的要求。 Servicename 在注册表中为service key制定的名称。注意这个名称是不同于显示名称的 (这个名称可以用net start和服务控 制面板看到) ,而SC是使用服务键名来鉴别服务的。 Optionname 这个optionname和optionvalues参数允许你指定操作命令参数的名称和数值。注意,这一点很重要在操作名称和等 号之间是没有空格的。一开始我不知道,结果………………,比如,start= optionvalues,这个很重要。 optionvalues可以是0,1,或者是更多的操作参数名称和数值对。 如果你想要看每个命令的可以用的optionvalues,你可以使用sc command这样的格式。这会为你提供详细的帮助。 Optionvalues 为optionname的参数的名称指定它的数值。有效数值范围常常限制于哪一个参数的optionname。如果要列表请用 sc command来询问每个命令。 Comments 很多的命令需要管理员权限,所以我想说,在你操作这些东西的时候最好是管理员。呵呵! 当你键入SC而不带任何参数时,SC.exe会显示帮助信息和可用的命令。当你键入SC紧跟着命令名称时,你可以得 到一个有关这个命令的详细列表。比如,键入sc create可以得到和create有关的列表。 但是除了一个命令,sc query,这会导出该系统中当前正在运行的所有服务和驱动程序的状态。 当你使用start命令时,你可以传递一些参数 (arguments) 给服务的主函数,但是不是给服务进程的主函数。 二.SC create 这个命令可以在注册表和服务控制管理数据库建立一个入口。 ...

2013-03-25 · 2 min · 372 words · -

队头阻塞, head-of-line blocking

队头阻塞, head-of-line blocking 队头阻塞一般指的是TCP协议中的队头阻塞,HTTP1.1中也有一个类似TCP队头阻塞的问题 TCP队头阻塞 队头阻塞 (head-of-line blocking)发生在一个TCP分节丢失,导致其后续分节不按序到达接收端的时候。该后续分节将被接收端一直保持直到丢失的第一个分节被发送端重传并到达接收端为止。该后续分节的延迟递送确保接收应用进程能够按照发送端的发送顺序接收数据。这种为了达到完全有序而引入的延迟机制非常有用,但也有不利之处。 假设在单个TCP连接上发送语义独立的消息,比如说服务器可能发送3幅不同的图像供Web浏览器显示。为了营造这几幅图像在用户屏幕上并行显示的效果,服务器先发送第一幅图像的一个断片,再发送第二幅图像的一个断片,然后再发送第三幅图像的一个断片;服务器重复这个过程,直到这3幅图像全部成功地发送到浏览器为止。 要是第一幅图像的某个断片内容的TCP分节丢失了,客户端将保持已到达的不按序的所有数据,直到丢失的分节重传成功。这样不仅延缓了第一幅图像数据的递送,也延缓了第二幅和第三幅图像数据的递送。 HTTP队头阻塞 上面用浏览器请求图片资源举例子,但实际上HTTP自身也有类似TCP队头阻塞的情况。要介绍HTTP队头阻塞,就需要先讲讲HTTP的管道化 (pipelining)。 HTTP管道化是什么 HTTP1.1 允许在持久连接上可选的使用请求管道。 这是相对于 keep-alive 连接的又一性能优化。在响应到达之前,可以将多条请求放入队列,当第一条请求发往服务器的时候,第二第三条请求也可以开始发送了,在高延时网络条件下,这样做可以降低网络的环回时间,提高性能。 HTTP管道化产生的背景 在一般情况下,HTTP遵守“请求-响应”的模式,也就是客户端每次发送一个请求到服务端,服务端返回响应。这种模式非常容易理解,但是效率并不是那么高,为了提高速度和效率,人们做了很多尝试: 最简单的情况下,服务端一旦返回响应后就会把对应的连接关闭,客户端的多个请求实际上是串行发送的。 除此之外,客户端可以选择同时创建多个连接,在多个连接上并行的发送不同请求。但是创建更多连接也带来了更多的消耗,当前大部分浏览器都会限制对同一个域名的连接数。 从HTTP1.0开始增加了持久连接的概念 (HTTP1.0的 Keep-Alive 和HTTP1.1的 persistent),可以使HTTP能够复用已经创建好的连接。客户端在收到服务端响应后,可以复用上次的连接发送下一个请求,而不用重新建立连接。 现代浏览器大多采用并行连接与持久连接共用的方式提高访问速度,对每个域名建立并行地少量持久连接。 而在持久连接的基础上,HTTP1.1进一步地支持在持久连接上使用管道化 (pipelining)特性。管道化允许客户端在已发送的请求收到服务端的响应之前发送下一个请求,借此来减少等待时间提高吞吐;如果多个请求能在同一个TCP分节发送的话,还能提高网络利用率。但是因为HTTP管道化本身可能会导致队头阻塞的问题,以及一些其他的原因,现代浏览器默认都关闭了管道化。 HTTP管道化的限制 管道化要求服务端按照请求发送的顺序返回响应 (FIFO),原因很简单,HTTP请求和响应并没有序号标识,无法将乱序的响应与请求关联起来。 客户端需要保持未收到响应的请求,当连接意外中断时,需要重新发送这部分请求。 只有幂等的请求才能进行管道化,也就是只有GET和HEAD请求才能管道化,否则可能会出现意料之外的结果 HTTP管道化引起的请求队头阻塞 前面提到HTTP管道化要求服务端必须按照请求发送的顺序返回响应,那如果一个响应返回延迟了,那么其后续的响应都会被延迟,直到队头的响应送达。 如何解决队头阻塞 如何解决HTTP队头阻塞 对于HTTP1.1中管道化导致的请求/响应级别的队头阻塞,可以使用HTTP2解决。HTTP2不使用管道化的方式,而是引入了帧、消息和数据流等概念,每个请求/响应被称为消息,每个消息都被拆分成若干个帧进行传输,每个帧都分配一个序号。每个帧在传输时属于一个数据流,而一个连接上可以存在多个流,各个帧在流和连接上独立传输,到达之后在组装成消息,这样就避免了请求/响应阻塞。 当然,即使使用HTTP2,如果HTTP2底层使用的是TCP协议,仍可能出现TCP队头阻塞。 如何解决TCP队头阻塞 TCP中的队头阻塞的产生是由TCP自身的实现机制决定的,无法避免。想要在应用程序当中避免TCP队头阻塞带来的影响,只有舍弃TCP协议。 比如google推出的quic协议,在某种程度上可以说避免了TCP中的队头阻塞,因为它根本不使用TCP协议,而是在UDP协议的基础上实现了可靠传输。而UDP是面向数据报的协议,数据报之间不会有阻塞约束。 此外还有一个SCTP (流控制传输协议),它是和TCP、UDP在同一层次的传输协议。SCTP的多流特性也可以尽可能的避免队头阻塞的情况。 总结 从TCP队头阻塞和HTTP队头阻塞的原因我们可以看到,出现队头阻塞的原因有两个: 独立的消息数据都在一个链路上传输,也就是有一个“队列”。比如TCP只有一个流,多个HTTP请求共用一个TCP连接 队列上传输的数据有严格的顺序约束。比如TCP要求数据严格按照序号顺序,HTTP管道化要求响应严格按照请求顺序返回 所以要避免队头阻塞,就需要从以上两个方面出发,比如quic协议不使用TCP协议而是使用UDP协议,SCTP协议支持一个连接上存在多个数据流等等。 作者:熊纪元 链接:https://juejin.cn/post/6844903853985366023 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 作者:熊纪元 链接:https://juejin.cn/post/6844903853985366023 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2013-03-24 · 1 min · 60 words · -

环比 同比

环比 同比 与上一统计段比较,例如2005年7月份与2005年6月份相比较,叫环比。与历史同时期比较,例如2005年7月份与2004年7月份相比,叫同比。

2013-03-23 · 1 min · 3 words · -

linux 下解锁 nexus 7

linux 下解锁 nexus 7 Requirements You must have the sdk installed and you are able to access, and use adb and fastboot. You must have debugging enabled on your Nexus 7. Download Su here (Chainfire’s thread for supersu) (Thanks Eric_Eric_Eric) Download CWM here. Scroll down to Nexus 7 and choose whether touch or regular. Pre-Steps To make this easier, you should put the su zip on the sdcard for later. ...

2013-03-23 · 1 min · 139 words · -

左外连接,右外连接,全连接,内连接

左外连接,右外连接,全连接,内连接, left join, right join 外联接: 外联接可以是左向外联接、右向外联接或完整外部联接。 在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定: LEFT JOIN 或 LEFT OUTER JOIN, SQL 标准允许省略 OUTER 关键字,因此 LEFT JOIN 已经足够明确。 左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。 如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。 RIGHT JOIN 或 RIGHT OUTER JOIN。 右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。 FULL JOIN 或 FULL OUTER JOIN。 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。 仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回 FROM 子句中提到的至少一个表或视图的所有行,只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左向外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。 Microsoft® SQL Server 2000 对在 FROM 子句中指定的外联接使用以下 SQL-92 关键字: LEFT OUTER JOIN 或 LEFT JOIN RIGHT OUTER JOIN 或 RIGHT JOIN ...

2013-03-20 · 4 min · 657 words · -

Less

Less CSS (层叠样式表) 是一门历史悠久的标记性语言,同 HTML 一道,被广泛应用于万维网 (World Wide Web) 中。HTML 主要负责文档结构的定义,CSS 负责文档表现形式或样式的定义。 作为一门标记性语言,CSS 的语法相对简单,对使用者的要求较低,但同时也带来一些问题: CSS 需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤其对于非前端开发工程师来讲,往往会因为缺少 CSS 编写经验而很难写出组织良好且易于维护的 CSS 代码,造成这些困难的很大原因源于 CSS 是一门非程序式语言,没有变量、函数、SCOPE (作用域) 等概念。LESS 为 Web 开发者带来了福音,它在 CSS 的语法基础之上,引入了变量,Mixin (混入) ,运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,LESS 可以让我们用更少的代码做更多的事情。 http://www.w3cplus.com/css/less http://www.cnblogs.com/hooray/archive/2011/12/02/2272212.html

2013-03-20 · 1 min · 38 words · -

JavaScript里面三个等号和两个等号的区别

JavaScript里面三个等号和两个等号的区别 == equality 等同,=== identity 恒等。 ==, 两边值类型不同的时候,要先进行类型转换,再比较。 ===,不做类型转换,类型不同的一定不等。 下面分别说明: 先说 ===,这个比较简单。下面的规则用来判断两个值是否===相等: 如果类型不同,就[不相等] 如果两个都是数值,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。 (判断一个值是否是NaN,只能用isNaN()来判断) 如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。 如果两个值都是true,或者都是false,那么[相等]。 如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。 如果两个值都是null,或者都是undefined,那么[相等]。 再说 ==,根据以下规则: 如果两个值类型相同,进行 === 比较。 如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较: a、如果一个是null、一个是undefined,那么[相等]。 b、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。 c、如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。 d、如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。 js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象,令说 (比较麻 烦,我也不大懂) e、任何其他组合,都[不相等]。 举例: “1” == true 类型不等,true会先转换成数值 1,现在变成 “1” == 1,再把"1"转换成 1,比较 1 == 1, 相等。 = 赋值运算符 == 等于 === 严格等于 例: var a = 3; var b = “3”; a==b 返回 true ...

2013-03-14 · 1 min · 76 words · -

Java 常量池

Java 常量池 什么是常量 用final修饰的成员变量表示常量,值一旦给定就无法改变! final修饰的变量有三种: 静态变量、实例变量和局部变量,分别表示三种类型的常量。 Class 文件中的常量池 在Class文件结构中,最头的4个字节用于存储魔数 Magic Number,用于确定一个文件是否能被JVM接受,再接着4个字节用于存储版本号,前2个字节存储次版本号,后2个存储主版本号,再接着是用于存放常量的常量池,由于常量的数量是不固定的,所以常量池的入口放置一个U2类型的数据(constant_pool_count)存储常量池容量计数值。 常量池主要用于存放两大类常量: 字面量(Literal)和符号引用量(Symbolic References),字面量相当于Java语言层面常量的概念,如文本字符串,声明为final的常量值等,符号引用则属于编译原理方面的概念,包括了如下三种类型的常量: 类和接口的全限定名 字段名称和描述符 方法名称和描述符 方法区中的运行时常量池 运行时常量池是方法区的一部分。 Class文件常量池 CLass文件的字节码包含有类的版本、字段、方法、接口等描述信息,还有就是常量池 常量池里面主要存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。 运行时常量池相对于CLass文件常量池的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入CLass文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用比较多的就是String类的intern()方法。 常量池中主要存放两类常量。 字面量。 符号引用。 字面量 字面量,给基本类型变量赋值的方式就叫做字面量或者字面值。 比如:String a=“b” ,这里“b”就是字符串字面量,同样类推还有整数字面值、浮点类型字面量、字符字面量。 符号引用 符号引用主要设涉及编译原理方面的概念,包括下面三类常量: 类和接口的全限定名(Full Qualified Name),也就是Ljava/lang/String;,主要用于在运行时解析得到类的直接引用。 字段的名称和描述符(Descriptor),字段也就是类或者接口中声明的变量,包括类级别变量(static)和实例级的变量。 方法的名称和描述符,方法的描述类似于JNI动态注册时的“方法签名”,也就是参数类型+返回值类型,比如下面的这种字节码,表示main方法和String返回类型。 运行时常量池 运行时常量池是每一个类或者接口的常量池 (Constant Pool)的运行时的表现形式。 我们知道,一个类的加载过程,会经过:加载、连接 (验证、准备、解析)、初始化的过程,而在类加载这个阶段,需要做以下几件事情: 通过一个类的全类限定名获取此类的二进制字节流。 在堆内存生成一个java.lang.Class对象,代表加载这个类,做为这个类的入口。 将class字节流的静态存储结构转化成方法区(元空间)的运行时数据结构。 而其中第三点,将class字节流代表的静态储存结构转化为方法区的运行时数据结构这个过程,就包含了class文件常量池进入运行时常量池的过程。 所以,运行时常量池的作用是存储class文件常量池中的符号信息,在类的解析阶段会把这些符号引用转换成直接引用(实例对象的内存地址),翻译出来的直接引用也是存储在运行时常量池中。class文件常量池的大部分数据会被加载到运行时常量池。 字符串常量池 字符串常量池,简单来说就是专门针对String类型设计的常量池。 字符串常量池的常用创建方式有两种。 String a=“Hello”; String b=new String(“Mic”); a这个变量,是在编译期间就已经确定的,会进入到字符串常量池。 b这个变量,是通过new关键字实例化,new是创建一个对象实例并初始化该实例,因此这个字符串对象是在运行时才能确定的,创建的实例在堆空间上。 简单总结一下:JVM之所以单独设计字符串常量池,是JVM为了提高性能以及减少内存开销的一些优化: String对象作为Java语言中重要的数据类型,是内存中占据空间最大的一个对象。高效地使用字符串,可以提升系统的整体性能。 创建字符串常量时,首先检查字符串常量池是否存在该字符串,如果有,则直接返回该引用实例,不存在,则实例化该字符串放入常量池中。 字符串常量池是JVM所维护的一个字符串实例的引用表,在HotSpot VM中,它是一个叫做StringTable的全局表。在字符串常量池中维护的是字符串实例的引用,底层C++实现就是一个Hashtable。这些被维护的引用所指的字符串实例,被称作”被驻留的字符串”或”interned string”或通常所说的”进入了字符串常量池的字符串”! 封装类常量池 除了字符串常量池,Java的基本类型的封装类大部分也都实现了常量池。包括Byte,Short,Integer,Long,Character,Boolean 注意,浮点数据类型Float,Double是没有常量池的。 封装类的常量池是在各自内部类中实现的,比如IntegerCache(Integer的内部类)。要注意的是,这些常量池是有范围的: 常量池的好处 常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。 ...

2013-03-06 · 3 min · 573 words · -

xmllint, xml 格式化

xmllint, xml 格式化 sudo apt install libxml2-utils pacman -S libxml2 xmllint --format settings.xml > settings.xml.new ## 使用 - (“连字符/减号”)为 xmllint 的 file 参数从标准输入流而不是文件或 URL 获取其 XML 输入。 curl --silent "https://somesite.xml" | xmllint -

2013-03-05 · 1 min · 33 words · -

User Agent Stylesheet

User Agent Stylesheet 大家通常看到一个没有带任何CSS样式文件的HTML却带有不错的样式,这是由于在W3C的HTML标准里,一些HTML标签自带一些CSS样式。 不同的浏览器把实现这些HTML自带样式的模块称作User Agent Stylesheet。 不同的浏览器实现的User Agent Stylesheet不一,但大部分都能遵循W3C的标准。 个人认为chrome实现的User Agent Stylesheet是最符合人们阅读习惯,例如p前后都有1em的外边距等。 在chrome里的User Agent Stylesheet如下图所示。 从上图中还可以看出浏览器的User Agent Stylesheet的优先级是很低的,经常被其他样式覆盖,这也是设置了CSS样式文件后能够起作用的原因。 从CSS的英文全称 Cascading Style Sheet,中文译作"层叠样式表单", 其中cascading取义为层叠,即不同层级的样式表单叠加覆盖的意思。 其实W3C的CSS标准中有一套完整的CSS样式的优先级规则,高优先级的样式覆盖低优先级,后面将逐步剖析这些优先级的规则,讲解怎样能做出高效能的CSS样式表。

2013-02-28 · 1 min · 25 words · -

Scrum,Sprint Review Meeting

‘Scrum,Sprint Review Meeting’

2013-02-27 · 1 min · 3 words · -

Daily Scrum, stand-up meeting, 站会

Daily Scrum, stand-up meeting, 站会 日常站立会议 (daily stand-up meeting) 是每天早上举行的短期会议。该活动起源于敏捷开发方法,在Scrum开发中很常见。日常站立会议一般用时五到十五分钟,有时候指代站立的早晨点名或每日例会。 日常站立会议 (daily stand-up meeting) 的目的是让每个团队成员回答以下三个问题: What did I do yesterday? 你昨天做了什么? What will I work on today? 你今天要做什么? What is in my way? 你遇到什么困难了吗? 站立,而不是坐着,强化了该会议打算简短且避免浪费时间的想法。站立会议并不是一个解决问题的地方,而是让一个团队意识到现在的状态。如果需要讨论,适当部门可以安排另一个更长的会议。 在Scrum开发中,站立会议的目的是更新团队的状态,而不是管理,这一点必须得强调。在一些Scrum团队中,管理层会参加会议,但是只有团队成员讲话。https://less.works/less/framework/daily-scrum.html

2013-02-27 · 1 min · 36 words · -

迭代计划会议

迭代计划会议 迭代计划会议 重新讨论、确定本次迭代需要实现的Story,达成共同理解; 若有必要的话,则继续细化Story; 对Story进行优先级排序; 开发、测试、资料人员认领任务,估计工作量并做出承诺,这是敏捷的重要实践之一: 开发团队决定承诺完成工作量的多少,而不是由SE或项目PL安排工作量。 共同制定本次迭代的迭代开发计划。要输出针对本次迭代的详细的开发计划,开发、测试、资料是以Story为单位的,所以迭代开发计划也是以Story为核心的。计划中要包括本次迭代要开发的每个Story的开发人员是谁?测试人员是谁?什么时候开始?什么结束?谁来Review?等等。 优秀实践: 明确任务责任人 (包括开发、测试、资料) 和任务完成时间点; 任务和问题都可作为跟踪项进行跟踪; 计划中根据Story优先级和依赖关系,严格按Story驱动制定计划,尽量减少Story并行开发;

2013-02-27 · 1 min · 14 words · -

敏捷团队中的角色 agile role

‘敏捷团队中的角色 agile role’ 在ThoughtWorks一个典型的敏捷团队中,大致有四种不同角色: 项目经理、业务分析师、开发工程师、测试工程师。同时,根据项目不同可能还需要: 迭代经理,美术设计师、数据库工程师、系统工程师、交互设计师等不同人员。虽然在项目中不同的人需要确定一个角色,并担负相应的责任,但在ThoughtWorks内部,人与人之间是完全平等没有级别区分的。公司这种平等的文化,使得人与人之间的交流不会因为等级差距而丧失。同时,公司鼓励每个人向其感兴趣的其他领域发展,成为综合性人才。例如某个人现在是开发人员,但他也可以通过帮助项目经理做一些辅助工作,来学习项目管理方法,从而最终成为独当一面的项目经理。 以前公司同事写过一篇团队角色定义的文章: http://news.csdn.net/n/20060429/89961.html, 补完一些。 Project Manager 作为团队的精神支柱存在。与团队的每个人进行必要的沟通以保障项目成员的士气和稳定性。 维持开发秩序,保障团队间交流的效率和效果,负责主持必要的活动 消除外部干扰,负责与客户进行协调和协作。管理来自与客户的scope变更 跟踪团队的开发效率,维持开发速率,进行适当调整以保证开发的顺利进行 管理项目风险,维护项目风险日志,识别风险并采取措施防治风险 负责最终的项目交付成功 Business Aanlyst 需求获取与管理,与客户持续交流获取新的需求,并保持良好的客户关系。管理需求的优先级。 保障下一个迭代需要开发的需求能够预备到位。提前准备好需要的Story卡片,在Iteration Kickoff会议解释每个Story的具体需求给Developer 主持必要的会议,例如Iteration Kickoff和需求的评估活动 对需求进行初步的功能验收,保证功能的交付符合原始需求 Developer/Architect: 了解系统业务和需求,设计和演进系统整体架构,能够做出适当的技术决策 编码,并对系统的每行代码负责,保持代码的干净,保持较高的测试覆盖率 维护项目基础设施如持续集成服务器、版本控制服务器等 评估需求,并在开发完成后演示开发的需求 Quality Assurance 负责了解需求并编写需求验收条件,负责制定测试计划 负责测试开发人员完成的需求,并报告错误 负责对软件进行性能、压力、容量、负载测试等,负责项目的手工功能测试和发布测试 Iteration Manager - 小团队多由项目经理或分析师兼任 负责项目过程的顺利进行,协调项目资源 主持各种迭代会议,如Standup和Retrospective 负责跟踪需求的状态 负责项目的其他日常事务 User Interaction Designer -多和分析师为同一人 在项目初期参与前期需求的收集,提出可行的交互设计方案,保证软件的可用性 建立和维护Lo-fi prototype,负责指导项目的界面开发原则 进行用户测试,持续改进系统的可用性 Database Administrator 维护软件所需的数据库,定期进行数据备份 了解数据库重构和演化方法,负责维持数据库的每一条更新脚本 System Engineer/Webmaster 维护软件所需的各种硬件和网络系统 了解敏捷开发中的发布过程,保证每次迭代发布的实施 Art Designer - 一般团队最缺少优秀的Art Designer,了解敏捷的Art Designer更甚 了解项目的远景和规划,了解迭代方法,应用增量式美术设计方法 了解软件的交互设计,能够设计出可用性良好的系统 有一类角色,在敏捷团队中至关重要,不得不重视起来的,就是Customer。 Customer 理解迭代开发的过程,与团队进行频繁和和谐的交流,参与团队的各种必要的活动如Showcase 理解需求和排序需求的优先级 ...

2013-02-27 · 2 min · 236 words · -

DelayQueue

DelayQueue DelayQueue 是什么 DelayQueue 是一个无界的 BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。注意:不能将null元素放置到这种队列中。 二、DelayQueue 能做什么 1. 淘宝订单业务: 下单之后如果三十分钟之内没有付款就自动取消订单。 2. 饿了吗订餐通知: 下单成功后60s之后给用户发送短信通知。 3.关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。 4.缓存。缓存中的对象,超过了空闲时间,需要从缓存中移出。 5.任务超时处理。在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求等。 三、实例展示 定义元素类,作为队列的元素 DelayQueue只能添加(offer/put/add)实现了Delayed接口的对象,意思是说我们不能想往DelayQueue里添加什么就添加什么,不能添加int、也不能添加String进去,必须添加我们自己的实现了Delayed接口的类的对象,来代码 https://www.cnblogs.com/myseries/p/10944211.html DelayQueue基本原理 DelayQueue是一个没有边界BlockingQueue实现,加入其中的元素必需实现Delayed接口。当生产者线程调用put之类的方法加入元素时,会触发Delayed接口中的compareTo方法进行排序,也就是说队列中元素的顺序是按到期时间排序的,而非它们进入队列的顺序。排在队列头部的元素是最早到期的,越往后到期时间赿晚。 消费者线程查看队列头部的元素,注意是查看不是取出。然后调用元素的getDelay方法,如果此方法返回的值小0或者等于0,则消费者线程会从队列中取出此元素,并进行处理。如果getDelay方法返回的值大于0,则消费者线程wait返回的时间值后,再从队列头部取出元素,此时元素应该已经到期。 DelayQueue是Leader-Followr模式的变种,消费者线程处于等待状态时,总是等待最先到期的元素,而不是长时间的等待。消费者线程尽量把时间花在处理任务上,最小化空等的时间,以提高线程的利用效率。 以下通过队列及消费者线程状态变化大致说明一下DelayQueue的运行过程。 ———————————————— 版权声明:本文为CSDN博主「五星上炕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/dkfajsldfsdfsd/article/details/88966814

2013-02-25 · 1 min · 31 words · -

Emacs Markdown

Emacs Markdown 安装与配置 安装 markdown-mode 非常简单,只需将下载的 markdown-mode.el 文件置于 Emacs 可找到的路径,例如 ~/.emacs.d/modes。然后把下列内容添加到 .emacs 文件中即可: (add-to-list 'load-path "~/.emacs.d/modes") (autoload 'markdown-mode "markdown-mode.el" "Major mode for editing Markdown files" t) (setq auto-mode-alist (cons '("\.markdown" . markdown-mode) auto-mode-alist)) 这样,当 Emacs 打开扩展名为 markdown 的文件时,就会自动进入 Markdown 主模式。如果你定义的 Markdown 扩展名与此不同,那么你将需要替换上面配置内容最后一行中的 .markdown。 编辑命令 Markdown 模式将常用的编辑命令都绑定到了特定的组合键上,因此要插入某个项目,只需按相应的组合键。比如: C-c C-t n 插入 hash 样式的标题,其中 n 为 1~5,表示从第一级标题到第五级标题。 C-c C-t t 插入 underline 样式的标题,这是一级。 C-c C-t s 同上,这是二级。 C-c C-a l 插入链接,格式为 [text][/text] (url)。 ...

2013-02-24 · 1 min · 120 words · -

CMake

CMake build 先创建一个叫 build 的文件夹 (这个并非必须,因为 cmake 命令指向 CMakeLists.txt 所在的目录,例如 cmake .. 表示 CMakeLists.txt 在当前目录的上一级目录。cmake 后会生成很多编译的中间文件以及 makefile 文件,所以一般建议新建一个新的目录,专门用来编译) ,然后执行下列操作: mkdir build cd build cmake .. make 你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make (pmake) ,Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题: 如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。 CMake 就是针对上面问题所设计的工具: 它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到"Write once, run everywhere"。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。一些使用 CMake 作为项目架构系统的知名开源项目有 VTK、ITK、KDE、OpenCV、OSG 等 [1]。 ...

2013-02-24 · 1 min · 163 words · -