[转]一种基于消息摘要的人机验证应用研究

一种基于消息摘要的人机验证应用研究

An approach to captcha based on message digests

刘振兴/ Liu Zhenxing

摘要:自动识别机器或真人的服务(CAPTCHA)被广泛应用在网络空间的很多场景。传统的人机验证机制为系统随机地生成一段消息保存在服务器端,然后发送给用户终端以扭曲的形式展示给用户,以此区分用户终端是来自机器或真人。本文详细分析了常用人机验证机制的优劣,然后提出一种基于消息摘要(单向哈希)的方式进行人机验证。与传统方法相比,不需要额外的存储随机消息,在部署方式和成本方面有更好的表现。[1]

关键词:消息摘要,人机验证,验证码,CAPTHCHA

Abstract: Applications of telling computers and humans apart (CAPTCHA) have been widely-implemented and deployed in several scenarios on cyberspace. Traditional man-machine verification is to generate a random message stored in server-side, and then send a distorted representation of the message to client-side in order to distinguish the client from the machine or human being. This paper explains the widely-used method in great detail and shows some of its merits and demerits. This paper analyzes the merits and demerits of this commonly-used man-machine verification mechanism, and then presents a new approach to man-machine verification based on message digest (one-way hash). Compared with the traditional method, no additional storage of random messages, in terms of deployment and cost, it has a better performance.

Keywords: Message Digest, Man-machine Verification, Verification Code, CAPTCHA

 

  1. 背景及问题
    • 背景

人机验证被广泛应用于各种在线网络服务中,如预防垃圾内容、保护用户注册和登录、保护在线投票、预防词典攻击等各种需要阻止机器自动进行的各种暴力破坏性行为。

人机验证(识别)也即全自动区分计算机和人类的公开图灵测试(Completely Automated Public Turing test to tell Computers and Humans Apart,CAPTCHA) [1] [2]。在实际应用中也被通俗地称之为“验证码”,它是一种区分终端用户(客户端)是计算机或人类的公共全自动程序。在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

一种常用的CAPTCHA测试是让用户输入在一个扭曲变形的图片上所显示的字符,扭曲变形是为了避免被光学字元识别(Optical Character Recognition,OCR)之类的终端机器自动辨识图片上的字符而失效。由于这个测试是由计算机来考人类,而不是标准图灵测试中那样由人类来考计算机,人们有时称CAPTCHA是一种反向“图灵测试”。为了满足无法看到图像的身心障碍者,替代的方式使用语音读出字符,进一步地为了防止终端机器进行语音辨识分析出声音所代表的字符,声音的内容会伴有干扰音以加大机器识别的难度。

人机验证过程涉及到问题生成、传输、呈现和校验。人机验证的安全性在各个实现环节进行深入分析并各有针对性的解决方法,其中多数的攻防思路集中对扭曲展现形式的生成与破解上。实际上,供应链上的每一个环节都值得注意并赋予同等重要性地位。目前对图形图像识别的机器辨识讨论较多,但对人机验证过程及环节较少,本文尝试分析和研究的是后者这一领域的问题。

  • 问题

根据CAPTCHA测试的定义,产生用于验证的图片或其他扭曲展示的算法必须公开,比如常见的随机(或伪随机)生成。这样做是为了证明想破解就需要解决一个不同的人工智能难题,而不是依靠发现原来的算法。即便这种随机过程是伪随机 [3],由于其与终端(客户端)Id不存在任何映射(算法)关系,其被认为是符合CPATCHA定义,要破解这样的验证码的任务就等同于解决类似计算机识图、计算机辨音等人工智能任务。这一应用领域的研究大多集中在如何破解及反破解这一类似人工智能问题上 [4] [5] [6]。

实际应用中,服务器端生成随机码并与客户端Session Id做配对并保持这一状态,多数情况下是在HTTP(S)等无状态的应用协议下实现和维护一种“对话”状态,需要额外的部署一种服务,也即Session会话管理服务。这种服务能够进行完成上述目标——对新终端用户生成Session Id并保持相应的状态信息,如果该终端用户没有通过人机验证,则还需要为用户生成一对问题、答案配对,并维持其与Session Id的对应关系。这需要一种额外的存储开支需求,同时存在应用服务器与Session会话管理服务的通信成本。

另外,这种维护在服务器端的关系对,可能会被截获并重复利用 [7] [8],Session列表可能被Flooding攻击。

针对人机验证在服务器端的部署和应用问题,我们开展了相关研究,通过一系列对比分析和综合实验,我们找到一种基于消息摘要的人机验证新方法。

本文提出一种无需在服务器端维持“对话”状态人机验证服务的实现方法,通过基于消息摘要(单向哈希)的算法来保证其达到通用验证码服务的功能要求。

余下全文分为四章。第二章列举和分析了多数现行人机验证实现的方式方法,第三章提出本文主题,一种基于消息摘要的人机验证应用设计,第四章进行安全性、实用性等分析与讨论,第五章进行简要小结。

  1. 相关研究及应用
    • 人机验证机制

现行的人机验证服务通常由三部分组成:用户终端(客户端)、服务器端(应用服务)和Session服务端(会话服务)。用户终端(客户端)发起人机验证请求;服务器端收到验证请求,进一步联系Session服务器端;Session服务器端根据用户请求生成对应的Session ID、问题Q和答案A,并以队列的形式将Session ID等信息保存在Session服务器端,并将Session ID和问题Q的配对返回给应用服务器端;服务器收到Session ID和问题Q后,进一步地前转返回给用户终端。

用户终端收到Session ID和问题Q后,进行作答,完成作答后客户端将Session ID和答案A’发送给应用服务器端进行检验请求;服务器端收到Session ID和答案A’后,以Session ID向Session服务器端查询对应的问题Q和答案A,在获得答案A后,对比终端用户的答案A’和Session服务器端的答案A。

如果用户答案A’与Session服务器端答案A相一致,则验证通过,成功完成进行下一步;反之,则验证不通过,失败返回重试。

传统的人机验证机制的服务架构如下图(Figure 1)所示。

用户终端   应用服务器端   Session服务器端
         
发起验证请求        
    从Session服务器端获得Session ID、问题Q,

返回给客户端

   
        生成Session ID,问题Q、答案A,以队列形式保存在服务器端
根据问题Q作答

发送答案A’、Session ID进行检验

       
    根据Session ID获取问题Q和答案A,

检验答案A’与答案A

   
   

 

    根据Session ID从保存队列返回问题Q和答案A
收到检验结果

对 或 错

       
         

Figure 1 传统人机验证流程

在一些小微的网络应用或解决方案中个,也有将服务器端和Session服务器端合二为一,集成到一起,但在稍微复杂或者大中型网络应用中,都需要依靠单独的Session服务端来完成人机验证服务。无论是集成到一起还是单独部署,Session服务的功能和角色成为必选项。

  • 复合图形图像验证码

在前述人机验证的机制下,网络上出现各种各样的具体实现和应用部署方式,其中影响较为广泛的应用有Google reCAPTCHA [3]和中国铁路总公司12306网站人机验证服务的验证码 [10] [11]。

reCAPTCHA借助于人类对计算机难以识别的字符的辨别能力,进行对古旧书籍中难以被OCR识别的字符进行辨别的技术。也就是说,reCAPTCHA不仅可以反垃圾邮件、预防机器人注册登录等,而且同时还可以帮助进行书籍的数字化工作。

每次reCAPTCHA会显示两个单词让人来识别,其中一个是需要用户识别的难认词,另外一个是答案已知的真正的CAPTCHA 词。软件将能够正确识别CAPTCHA词的用户看作是人类,当CAPTCHA 词被正确识别出来后,程序会纪录用户对无法阅读的词的回答并将其添加到它的数据库中。这样就完成了一次人工的光学字符识别(OCR)过程。这一过程的核心人类对图形图像的识别,其部署方式仍需要独立的第三方的Session会话管理。由于人工智能领域的进步,计算机识图能力大幅提升,其改进版的“No CAPTCHA reCAPTCHA”已经推出。

也是基于计算机识图能力的提升,改进的中国铁路总公司将问题也进行了图示化,同时加大了对识图能力和逻辑推理能力的考察。这些是在对人工智能的深层次的验证,其背后的服务器端的部署,仍沿用较传统的应用服务器和Session服务器配合使用的方式。只不过验证从考察识别字符到识别图像并能够“理解”图像再进行作答。

  1. 一种基于消息摘要的人机验证
    • 消息摘要、单向哈希

消息摘要是一段消息的“指纹”,通常使用单向哈希函数完成一种固定的映射y=f(x) [6] [7],其主要特征是根据摘要信息不可逆推出消息原文。这些单向哈希函数方法MD(Message Digest),可能是MD5,MD6,SHA1,SHA128等其中的一个,设若m为消息原文,d为消息摘要,对于任意给定消息m,有且只有唯一对应的d生成;对于任意给定的d无法逆向还原消息原文m,也即,

d = MD(m),

可以根据m生成对应的消息摘要d,而不能根据d反向推导出消息原文m来。消息摘要的另外一个特征是,任意发生在原文m中的改动必将引起在消息摘要d上的变化。因此也被广泛应用在安全领域,做私密性、完整性和鉴权(CIA)的多种实现技术手段之一。

下图(Figure 2)展示一种消息摘要在安全通信中的应用情况 [14]。在左侧消息发送方(Originator)在消息原文使用私钥加密后,再使用消息摘要方式对加密后的消息生成相应的“摘要”。摘要信息连同密文一起发送给右侧接收方(Recipient),接收方使用发送方的公钥对消息进行解密,揭秘后的原文只能说明是来自于发送方的私钥加密后的内容(私密性),而不能保证在这一过程中没有被改动。满足这一“一致性”需求的实现方式是附带在密文后面的“摘要”,在成功解密原文后,按约定的单向哈希函数生成新的消息摘要,如果新生成的消息摘要也与所附摘要相一致,则说明原文在传输过程中没有被修改。

message.digest.201708
Figure 2 消息摘要在安全通信中的应用 [7]

根据其这一特征,我们可以将这种一致性保证应用在我们所设计的一种新的人机验证方法中。

  • 一种人机验证的新方法

在应用服务器端常量K作为预设私有密钥保存在服务器端,变量U为终端用户动态信息,如IP地址、浏览器(User-Agent)名称和访问时间等信息,也即,

U ≈ (IP, User-Agent, Time) ,

变量R为伪随机函数RD所生成的伪随机字符串,也即,

R = RD () ,

问题Q通过消息摘要方式使用上述内容生成,也即,

Q = MD(R, U|K) ,

在终端用户发起验证的请求中,服务器端将问题Q扭曲、封装为图形图像验证码或图像推理题等展现形式返回给终端用户,同时附带返回随机消息R给客户端。

终端用户根据问题Q完成作答,将答案A连同随机消息R一同发回至服务器端,服务器根据终端用户进行检验的请求,做如下判断:

获取用户动态信息,使用与上述相同的算法,也即,

U’ ≈ (IP, User-Agent, Time) ,

根据已生成的U’、检验请求中附带的随机消息R和服务器端私有常量K,使用与发起验证请求处理过程中相同的算法生成新的问题Q’,也即,

Q’ = MD(R, U’|K) ,

由于终端用户在发起验证和进行验证中是同一个客观对象,U’应完全等同于U,根据上述公式分析可知,新问题Q’ 应该完全等同于原问题Q,此时对比答案A与问题Q’,如果答案A与问题Q’相一致,答案正确,人机验证成功完成;如果答案A与问题Q’不相一致,答案不正确,人机验证失败,非真人或者真人答错情况。

上述基于消息摘要的人机验证的机制描述如下图(Figure 3)所示。

用户终端   应用服务器端
     
发起验证请求    
    根据K、U生成R、Q,

返回给终端用户

根据问题Q作答

发送答案A、R进行检验

   
    根据K、U’、R生成Q’,

检验答案A与问题Q’

收到检验结果

对 或 错

   
     

Figure 3 基于消息摘要的人机验证流程

新式的这种人机验证方式中,对话和通信发生在用户终端和应用服务器之间,与此前方案相比,减少了与Session会话管理服务的角色。在这样的人机验证过程中,不需要Session会话管理服务的介入。

应用服务器在这一过程中承担获取用户动态信息,构建人机验证问题,校验用户答案等任务,当通过人机验证后的请求再进一步继续后面的服务流程。

这一过程中,应用服务器的私钥保密,生成问题的算法可以公开,符合前述CAPTCHA测试不依赖算法的要求。将求解问题答案的过程等价于根据消息摘要逆推导消息原文的过程。

  • 人机验证实验

在通用管理信息系统应用软件(-gMIS, -吉密斯) [15]中,我们进行了一项基于消息摘要的人机验证服务的实验。gMIS的用户登录模块行使在用户进行身份验证之前,此时我们并不知道终端用户是否是合法、被授权的用户,因此需要进行基于账号的登录验证。

在进行登录验证之前,为预防机器人登录或者暴力攻击账号等行为,我们首先需要知道终端用户是真人而非机器人。自然这里要用上CAPTCHA测试,以探明终端用户首先是人类,然后再进行账号校验。

在设计中,我们在服务器端预设了密钥常量K,并在登录界面使用隐式HTML表单字段的形式,将问题的“消息摘要”以明文的方式列在登录表单项中。

在生成的伪随机数R时,我们使用了如下含有65个字符的字符集

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz._,

所生成的伪随机字符串长度为100字节,则其探测和计算空间为

S = 65100 = 1.9558505399828548460859657546779e+181

也即,1后面181个零这么一个天文数字。

基于这一随机消息R,我们通过一定的算法使用其中一部分,以图形验证码的方式将问题Q发给终端用户。

在终端用户填写用户名、用户密码信息后,对所展示的人机验证问题进行作答;完成作答后,用户点击“递交”,此时HTML登录表达将用户信息(用户名、密码)、问题信息(答案和问题摘要)一并递交给应用服务器端。

应用服务器端接收到登录请求后,按前述方法进行人机验证。显而易见,随机数R所使用部分越长,也即验证码越长,暴力攻击的可能性就越小。

这一实现的源代码公布在源码托管网站GitHub上(-R/12SP)。

  1. 分析与讨论
    • 安全性分析

对比传统人机验证流程(Figure 1)与新式基于消息摘要的人机验证流程(Figure 3),其中一个主要变化是Session服务器端不再参与验证流程。在传统方式下,需要Session服务器端生成用户Session ID,问题Q、答案A并将这些数据以列表的形式存储在Session服务器端。新式人机验证的流程中,通过预设常量K、随机数R动态生成的问题Q可以通过用户验证请求中的随机数R进行重现,从而节省了在Session服务器端保存列表数据的步骤,这是新式人机验证主要特征之一。

单向不可逆的哈希函数为这一流程提供了安全保证。客户端无法根据已经曝露的公开消息摘要逆变还原出消息原文,从而也无法获得用于人机验证的验证码。只有具备较高识图、读题能力的“人类”依靠真人的能力对验证码、验证问题进行识别,人机验证功能得以实现。消息摘要无法逆向的前提是搜索空间巨大,无法在现有计算能力的基础上在可接受时间范围内实现逆向搜索,进而无法根据消息摘要d找到消息原文m。

这种验证方式的主要应用思想是基于明文连接实现安全通信,相应地做法已经得到证明 [8]。其理论依据是消息摘要的不可逆性,而不是私有的替换、交换或置换、加长或截断等变通技巧,也不是加上时间因子、随机数因子等,尽管这些技巧也能够起到增大了破解、逆向难度的作用。

随着计算能力的提升尽管偶尔有针对哈希碰撞的安全性突破,多数是以海量计算条件为前提条件。 [16]叙述了针对MD5的碰撞, [17]报告了第一例成功的针对SHA1的碰撞攻击。

当求解较大数配对所耗费资源较大(较长时间或(与)较宽广的计算空间),就可能将之视同于求解一个人工智能任务,从而在应用层面满足CAPTCHA的规范性要求,也即,无法找到从问题到答案的映射函数y=f(x)。解决这个问题Q,寻求映射函数算法的计算空间近视于解决一个人工只能问题的计算空间,则CAPTCHA约束继续成立。

此外值得注意的是短时间内的二次应用的防范。一次成功的人机验证之后,客户端以“人类”的能力获得公开消息摘要和验证码的配对,可能将这一成功配对进行二次应用。一个可能的场景是,人类识别出某个伪随机数R与某个验证码相匹配成功时,可以做二次应用,针对这样的情况,可以在时间、空间等维度进行做限定,比如给每个R赋予一个有效期,然后维护一个有效R的“池”,以使得每个R与验证码的成功配对能用且只用一次。

  • 部署便捷性与成本

人机验证过程中无需Session会话服务的接入,可以在一定成都上预防基于Session的拦截攻击 [12],同时,也避免Session服务的单点故障,任一应用服务器可以独立地进行人机验证的部署,在终端用户被验证之前,无需联系Session进行ID及问题和答案的生成。

这种应用服务器单独承担人机验证功能的部署适合在多点负载均衡系统中应用,每个负载均衡的前端节点可以依靠自有的资源完成人机验证全过程。

另外,新式人机验证服务还能够节省Session服务,在终端用户未被识别为人类之前,不占用Session服务资源,无需在服务器端维护终端用户Id与问题对应列表。从而避开了基于应用层的Session Flooding攻击 [18]。

然而,计算机识图能力(或其他“智力”)的提升将加剧人机验证矛盾升级。目前的人机验证,基于人类识图能力这一基本特征展开,随着人工智能的发展机器识图能力逐年提升,在可见的未来,机器可能具备和人类一样的识图能力,甚至在某些专门领域机器的识图能力将超过人类的水平。届时,单纯基于识图能力的人机验证将面临新的挑战,这是本文所讨论议题的延续,人机验证必将基于另外一些人类所特有的特征开展新的人机验证的方式方法,而其中的实现原理是不变的,随机生成一条消息,以一种扭曲、不易或不被机器识别的形式展现给客户端,从而实现人机验证。当其理论所依据的“图灵测试”被机器所攻破时,人类还会继续寻找其他可行的人机识别的新思路。

  1. 小结

本文先后梳理和回顾了图灵测试、人机验证相关历史背景及其应用发展问题,分析了现存人机验证在服务器端请求处理方面的优劣。我们发现多数人机验证领域研究集中在对问题编排和破解,研究重点越来越多涉及到人工智能领域。然而在人机验证应用的部署和使用上,大多数依赖Session会话管理服务这一必需的角色,循此我们对人机验证的服务器部署及使用流程进行深入分析。

在此基础上提出了一种基于消息摘要的人机验证新设计,并对该机制安全性、实用性等方面进行了充分讨论。相比较此前传统人机验证设计,新的基于消息摘要的人机验证方法不需要额外的消息对存储,无需Session会话管理服务器端维护“对话”信息,与HTTP无状态匹配较好,在部署成本、易用性和便捷性方面有一定的优势。

 

References

[1] A. e. a. Turing, “Can automatic calculating machines be said to think?(1952),” B. Jack Copeland, 2004, p. 487.
[2] M. B. N. H. L. Luis von Ahn, “The Offical CAPTCHA,” Carnegie Mellon University, 2000. [联机]. Available: http://www.captcha.net/. [访问日期: 03 2017].
[3] P. C. v. O. S. A. V. Alfred J. Menezes, “Pseudorandom Bits and Sequences,” 出处 Handbook of Applied Cryptography, CRC Press, 1996, p. 173.
[4] M. M. J. M. Elie Bursztein, “Text-based CAPTCHA strengths and weaknesses,” 出处 CCS ’11 Proceedings of the 18th ACM conference on Computer and communications security, Illinois, 2011.
[5] L. v. A. B. J. H. Langford, “CAPTCHA: Using Hard AI Problems for Security,” 出处 Advances in Cryptology — EUROCRYPT 2003, Berlin, 2003.
[6] P. Golle, “Machine learning attacks against the Asirra CAPTCHA,” 出处 CCS ’08 Proceedings of the 15th ACM conference on Computer and communications security, Virginia, 2008.
[7] 李爽, “Session安全性研究及应用,” 电子世界, 卷 2013, 编号 23, 2013.
[8] M. W. Y. Y. J. M. J. W. Nikiforakis N., “SessionShield: Lightweight Protection against Session Hijacking,” 出处 Engineering Secure Software and Systems, Berlin, 2011.
[9] G. Developers, “What is reCAPTCHA?,” Google, [联机]. Available: https://developers.google.com/recaptcha/. [访问日期: 03 2017].
[10] 中国铁路客服服务中心, “12306登录,” 中国铁路客服服务中心, [联机]. Available: https://kyfw.12306.cn/otn/login/init. [访问日期: 03 2017].
[11] J. L. a. J. Z. W. Ritendra Datta, “IMAGINATION: A Robust Image-based CAPTCHA Generation System,” 出处 Proceedings of the ACM Multimedia Conference, Singapore, 2005.
[12] H. S. L. L. L. Y. Z. K. W. Zhenxing Liu, “A hash-based secure interface on plain connection,” 出处 Communications and Networking in China (CHINACOM), 2011 6th International ICST Conference on, Shanghai, 2011.
[13] A. Kahate, “Digital Signatures,” 出处 Cryptography and Network Security, New Delhi, Tata McGraw-Hill Education, 2013, p. 165.
[14] TechNet, “Message Digest Functions,” Microsoft, [联机]. Available: https://technet.microsoft.com/en-us/library/cc962033.aspx. [访问日期: 03 2017].
[15] Z. Liu, “gMIS, general Management Information System,” 10 2011. [联机]. Available: https://ufqi.com/dev/gmis/. [访问日期: 03 2017].
[16] X. W. a. D. F. a. X. L. a. H. Yu, “Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD,” Cryptology ePrint Archive, p. 199, 2004.
[17] E. B. P. K. A. A. Y. M. Marc Stevens, “The first collision for full SHA-1,” 02 2017. [联机]. Available: https://shattered.it/static/shattered.pdf. [访问日期: 03 2017].
[18] Z. L. H. C. X. C. Jie Yu, “A Detection and Offense Mechanism to Defend Against Application Layer DDoS Attacks,” 出处 Networking and Services, 2007. ICNS. Third International Conference, Athens, Greece, 2007.

 

[1] 作者简介:刘振兴,原人民网研究院网络技术研究员,主要研究领域包括计算机网络通信协议、互联网后台支撑技术和网络架构与安全等,先后在Journal of Cloud Computing、IEEE Conferences、《计算机应用与软件》、《中国计算机学会通讯》、《互联网天地》等刊物发表多篇中英文论文,是Base62x、NatureDNS、GWA2、gMIS和GTAjax的主要创建者。


原文刊登于<<网络安全技术与应用>>, 2017年7月号.

发表在 -gMIS, 编程技术, 计算机技术 | 标签为 , , , , | 留下评论

亮月亮科技Apache SoftwaresPdf DriveOpenAI ChatGPT

gMIS吉密斯更新:Pivot透视+图示,List+观察模式

gMIS 吉密斯 持续更新升级,本次更新主要如下數據透視增加圖示\List視圖增加觀察模式等几点,备忘如下。

  1. Pivot透视增加图示,直方图,统计数据
    按 “-gMIS更新:数据透视和hasId等” 的描述,本次继续完善,增加针对透视数据的图示化显示,默认的图示为横向的直方图。
    功能入口, 在List視圖下, 點擊”透視”.

    然後進入下面的操控頁面:

    (gMIS 數據透視圖1)

    數據分析依然是先檢索數據結果集然後對結果集進行數據分析透視.
    如上圖所示,(1)在分組項列,選擇 國家”, 在求值相列選擇對收入進行求和”, 在排序項中種選擇按收入降序排列
    點擊遞交之後,生成下面的橫向的直方圖(3), 其中,
    (2)処對應的是分組列項;
    (4)処對應的是求值列項;
    (5)処對應的是該行數值在整體數據中的占比, 12.6% 表示 ID的收入, 在該月份佔全部收入的比例其中紅色字體表示第一名灰色表示最後一名;
    整體上, 條形圖表示相應的比值其中最大的比值將沾滿窗口其餘的依比例遞減.

    這一圖示化數據功能將更加直觀和生動的展示數據變化趨勢, 鮮明地呈現數據對比效果, 為決策支持提供多一種感官體驗.
    此外, 這一功能是普適性的, 將同時在所有被 -gMIS 管理的模塊中適用. 因此其可以為所有數據提供與 Microsoft Office Excel 的透視相同的功能, 甚至比 Microsoft Excel 更强大, 能夠處理更大的數據集\更加複雜的數據檢索等.
    如下是針對多個統計維度同時生成可視化圖形進行對比的運行效果圖.

    (gMIS 數據透視圖2)

    此外2, 普通意义上的统计数据,此前已经有了总计(合计, 並針對不同數值類型提供了計數和求和),这次增加了
    +平均值
    +最大值
    +最小值

    (gMIS 數據匯總統計)
    在技術實現上, gMIS 的透視圖使用JavaScript方式, 依據已經從服務器端獲取到的Table Grid數據, 在客戶端進行圖示化操作. 也即, 此功能的增加並沒有相應地增加服務器端的計算, 而是依靠客戶端瀏覽器運行的JavaScript來完成相應直方圖的繪製.

  2. List视图增加观察模式
    在默认的List模式下已经提供了 “刷新” 和 “初始页” 等功能,有时候会面临某种监视的需求,也即对一些需要实时更新的数据,如果每次都通过点击刷新等页面来实现,就显得繁琐,将这种手工刷新变为自动刷新就是这次增加的 “观察模式”.
    使用者打开某个页面数据List视图,点击 “观察” 之后,

    (gMIS 觀察模式)
    頁面刷新, 按鈕隨之變化為”觀察中…“, 頁面在重新生成后, 使用JavaScript通過registerAct方式, 在客戶端生成下次自動刷新的時間, 從而實現數據自動更新的功能. 其時間間隔靠 inc/config中的 “watch_interval” 配置項來控制.
    相應地, 為滿足這一需求, 我們在配置文件inc/config中增加如下設置項 watch_interval, 其默認值為 5 分鐘.
    inc/config.class 中, 增加配置項:
    $conf[‘watch_interval’] = 5 * 60; # seconds
    目前至少有兩處自動更新依靠此配置項, 其分別是, 登錄后的默認首頁 和 List 視圖下的觀察模式.
    同樣地, 這一觀察模式具有普適性, 可以應用于所有被 -gMIS 管理的數據表.

    (gMIS 觀察模式–觀察中)
    儅使用者擬結束觀察模式時, 可以通過點擊 “觀察中...” 按鈕來終止後續的自動更新任務.
  3. 其他Bugfix和Improvements
    在使用檢索功能的“并搜”、 “或搜” 时,修正了前置搜索条件无法被搜索条件重置都问题;
    修正了Wht::getIp中局域网识别逻辑, 增加了對 10.0.0.0 IP段的内網識別;
    修正了Firefox下getElementByEvent兼容性问题, 在Firefox下調用時, 帶入被調用對象作爲參數;

    gmis-logo-201606

    -gMIS 是一种基于 -GWA2 的通用管理信息系统软件,具有可配置的输入和输出接口。
    可以在其上构建各种管理应用软件系统,如
    内容管理系统(CMS),客户资源管理(CRM), 企业资源计划管理(ERP),
    办公自动化系统(OA)等, 以及各种行业应用管理系统软件,如
    人力资源管理系统(HR),学生管理,档案管理,旅游管理,图书管理,
    商品管理及业务运营支撑系统等等。
    实现零代码开发、搭建各种管理信息系统(MIS).

    Lower Costs, Better Productivity.
    降低成本, 提高效率.

发表在 -gMIS, 服务器运维, 编程技术, 计算机技术 | 标签为 , , , | 留下评论

UfqiFina有福金融UfqiWork有福工坊UfqiNews有福常在Google Books

驾电动汽车行北戴河


2017年8月初带上家人第一次开北汽EU260电动汽车走高速出远门旅行,期间经历一些,记如下。

1. 充电

相比燃油汽车,电动汽车最大的问题是续航,北京距离北戴河大约300km,中间需要充电,抵达后还要充电。出发前做功课,国家电网的“e充电”网点已覆盖全程。

去程满电北京出发,走京哈高速天津宝坻新安服务区充电,抵达后北戴河国林宾馆充电,返程走沿海高速秦滨高速唐山唐海服务区充电。

其中新安服务区充电需要排队等;唐海服务区走到就充很顺利。

最困难的是北戴河国林宾馆充电,遇到油车占位问题。起初打充电公司电话请求协助挪车腾位,接电话的忙了半天未果。有困难找警察,拨打122,请求帮助,后接转到当地的另外一个电话,报违章停车车号后,不一会来人挪出一个车位供充电用,为北戴河交警点赞!

呼吁所有好司机不要占用充电桩,那真是电车的命根子!

2. 电动汽车

这台北汽Eu260是第一次上高速走远程,能撒丫子跑起来。在d档油门踩到底,车速在90-100km,没法超车,也没法走快车道。

切换到s档以后,它有点脱缰野马一般,車身變輕盈, 一瞬間速度可以提升到 120KM 左右, 這個速度已經開始觸發超速警告, 對於超車的任務也變得很容易.

全程開空調, 聼音樂, 電車的里程表的增速等同于導航軟件的降速, 也即里程表裏增加1KM, 導航軟件裏距離目的地減少1KM, 很準確, 由此可以推斷, 如果有良好的駕駛習慣, 關閉空調和音樂, 或者降低負載, 續航里程應該會超過 260KM, 接近 300KM.

來往之間, 車上都是滿載滿員, 還拉了一些行李. 整體感覺里程標稱準確, D檔行車不用擔心超速问题, 也別想超車, S檔上, 動力充沛, 一不小心就超速了.

由于Eu260带了刹车能量回收功能,基本上我不喜欢总踩刹车,所以会与前车保持一个较大的距离,这样前车刹车时,我放开油门(备着刹车),触发能量回收(减速)功能,这个挺贴心的。

3. 高速路

不得不說, 由於車多, 京哈高速等很好的高速路開成了一般城市道路的感觉, 主要是由於輕微交通事故\一般剮蹭所引起的交通拥堵. 与城市区的交通拥堵一样,如果只是车多,只是走得慢,但并不会堵,而一旦发生交通事故,轻则堵上一个车道、二 个车道甚至是全部堵死,情况非常严重。

开车以来,所见堵各种情况,基本都是交通规则遵守的不够好,或者交通不文明,所有的参与者都不喜欢加塞儿的对方,而所有的加塞人都不喜欢对方不让加塞儿。一个简单的排队引起都是几十人几百人上千人都长达几十分钟、几个小时都拥堵,其社会成本是巨大的。

去程的京哈高速大约有4-5起交通事故,一路上走走停停;回程时根据表弟的建议,绕远走沿海高速、京津高速回京,一路上顺畅上顺畅了一些,只是沿海高速两车道,路上全是大货车,期间的一段拥堵,也是由于交通事故所致。

相比之下,京津高速走起来还不错,除了进入北京的安检之外,一路几乎没有停顿。此次拉高速,也就是在这里才全速前进,一马平川。

关于加塞儿与被加塞儿,这个问题估计将来应该能解决,随着物联网的普及,v2v的通讯称为标配之后,一辆车半道插入某个队列后,就被记为违规。每个加塞儿扣1分,罚100元,估计能减少一些总是耍横秀车技的,同时减少交通事故,降低社会交通成本。

4. 北戴河

一路欢欣,一直happy,看着那么多人喜欢大海,中国那么长的海岸线,为何不多开发一些海滩?即便是北戴河中海滩(金台度假酒店附近),为何就对公众开发一小段,两边大片的海滩圈起来封闭?

发表在 社会生活 | 标签为 , , , , | 留下评论

捐助乌克兰Help Ukraine老板选址BossXuanzhiUfqiFina有福金融UfqiWork有福工坊

-gMIS扩展功能模块开发参考/ext modules

-gMIS 主要面向数据表的管理与操作,提供一种数据表即管理信息系统的便捷路径。

随着应用场景的增多和所承担功能的丰富,在信息信息系统中增加一些特有的功能成为必需,在 -gMIS 中通过扩展模块功能来开发实现。

在 -gMIS 的建构中, extra 子目录用来存储一些特殊功能 的实现,如下以一个名为 helloworld的扩增模块功能来描述 -gMIS 扩展开发的过程。此前 -gMIS 内建的extra包括 可视化编辑器(集成 -baidu-editor),树形目录Xdirectory ,邮件发送sendMail,关联表挂接linkTbl等扩展功能。

由于 gMIS 是通过 -GWA2 来进行开发的,所以 gMIS 的扩展控件开发仍然沿用 -GWA2 中常见的 MVC 的设计思路。

0. 设置入口
在 系统管理 — 菜单管理 中设置扩增功能模块的访问入口。
其中模块名称字段留白,在动态参数中从 ext/子目录开始写起,如,
extra/helloworld.php

1. 程序结构
入口程序放入项目子目录 ext/ 下,为 extra/helloworld.php
视图程序放入项目子目录 view/ 下, 为 view/helloworld.html
由于 -gMIS 是基于 -GWA2 进行开发,所以在控制器 ext/helloworld.php 中,可以引入运行时全局变量,共享基础设施,其中 $gtbl 为GTbl.class 的实例化.

extra/helloword.php  的大致结构如下:

require(“../comm/header.inc.php”);
include_once($appdir.”/comm/tblconf.php”);
# Objects
include($appdir.”/class/class.helloworld.php”);
# Variables
$helloObj = new HelloWorld();
$act = Wht::get($_REQUEST, “act”);
# Actions
if($act == “step1”){
    # somthing to do
}
else if($act == “step2”){
    # something to do
}
# Outputs
$smttpl = “helloworld.html”;
$smt->assign(“output”, $out);
$smt->assign(“sid”, $sid);
$smt->assign(“rtvdir”, $rtvdir);
require(“../comm/footer.inc.php”);

在 extra子目录下默认给了一个 extra_example.php 的示例程序。

视图文件是基于 -Smarty 模板系统实现,模板环境变量由 $smt 对象提供,其中 $smttpl 为指定要呈现的视图文件,这些在 -GWA2 的开发文档中有相应的说明。

view/helloworld.html 的大致结构如下:

{include file=”header.html”}
<!– main content bgn –>
{$output}
<!– main content end –>
{include file=”footer.html”}

-Smarty 相关的语法标识,可以参考 -GWA2 开发文档或者 -Smarty 开发手册.

3. 程序间的耦合
当 comm/navimenu 模块通过 系统设置 — 菜单调整 读取到 modulename 为空而动态参数不为空的设置项时,按约定生成指向动态参数的目标地址,同时向该地址附带用于用户身份鉴权的全局 $sid 参数。

依靠 $sid 参数的透传,运行时环境变量可以由数据表管理空间共享给扩展模块,同样可以通过扩展模块读写数据表空间数据,以此程序间的耦合实现对功能的集成。

为实现对访问路径的统一化视图,modulepath 生成模块单独进行封装,新增 comm/modulepath.inc.php, 默认在 ido.php 中进行调用,在其他 extra模块中,也可以引用该功能,快捷生成模块的访问路径。

4. 其他更新
这期间,还对 gMIS 的首页进行了优化,增加显示了当前一段时间内登录活跃用户情况;
修正Memcached缓存bug;
优化显示了相关模块的功能,默认显示当前页面同级别的功能列表。

gMIS 源代码同时托管在 -OSChina 上,并获得“推荐 -gMIS”。

-gMIS 是一种基于 -GWA2 的通用管理信息系统软件,具有可配置的输入和输出接口。
可以在其上构建各种管理应用软件系统,如
内容管理系统(CMS),客户资源管理(CRM),  企业资源计划管理(ERP),
办公自动化系统(OA)等, 以及各种行业应用管理系统软件,如
人力资源管理系统(HR),学生管理,档案管理,旅游管理,图书管理,
商品管理及业务运营支撑系统等等。
实现零代码开发、搭建各种管理信息系统(MIS).

Lower Costs, 较低成本; Better Productivity, 较高效率.

发表在 -gMIS, -GWA2, 编程技术, 计算机技术 | 标签为 , , , | 留下评论

亮月亮科技Apache SoftwaresPdf DriveOpenAI ChatGPT

自由是一种责任

本文为7月1日上午,张维迎教授在2017年北京大学国家发展研究院毕业典礼上的演讲。

同学们好!首先祝贺大家毕业!

“北大人”是一种光环,也是意味着责任,特别是对我们这个苦难深重、饱受蹂躏的民族的责任。

中华文明是世界最古老的文明之一,并且是唯一延续至今的古老文明。古代中国有过辉煌的发明创造,为人类进步做出了重要贡献。但在过去500年,中国在发明创造方面乏善可陈。让我用数字说明这一点。

根据英国科学博物馆的学者Jack Challoner的统计,从旧石器时代(250万年前)到公元2008年之间产生了1001项改变世界的重大发明,其中中国有30项,占3%。这30项全部出现在1500年之前,占1500年前全球163项重大发明的18.4%,其中最后一项是1498年发明的牙刷,这也是明代唯一的一项重大发明。在1500年之后500多年全世界838项重大发明中,没有一项来自中国。

经济增长源自新产品、新技术、新产业的不断出现。传统的社会只有农业、冶金、陶瓷、手工艺等几个行业,其中农业占据绝对主导地位。现在我们有多少个行业?按照国际多层分类标准,仅出口产品,两位数编码的行业有97个,4位数编码的行业有1222个,6位数编码的行业有5053个,而且还在不断增加。这些新的行业全是过去300年里创造的,每一件新产品都可以追溯到它的起源。在这些众多的新产业和新产品中,没有一个新行业或重要产品是中国人发明的!

以汽车产业为例。汽车产业是1880年代中期由德国人卡尔·本茨、戴姆勒和迈巴赫等人创造的,之后经历一系列的技术进步,仅从1900到1981年间,就有600多项重要创新(Albernathy, Clark and kantrow (1984))。中国现在是第一汽车生产大国,但如果你写一部汽车产业的技术进步史,榜上有名有姓的发明家数以千计,里边有德国人、法国人、英国人、意大利人、美国人、比利时人,瑞典人、瑞士人、日本人,但不会有中国人!

即使像冶金、陶瓷、纺织等这些在17世纪之前中国曾经领先的传统行业,过去三百年里的重大发明创造,没有一项是我们中国人做出的。

我要特别强调一下公元1500年之前和1500年之后的不同。1500年之前,全球分割成不同的区域,各区域之间基本处于封闭状态,一项新技术在一个地方出现,对其他地方的影响微乎其微,对人类整体的贡献非常有限。比如说,东汉的蔡伦于公元105年发明了造纸,但中国的造纸技术到公元751年后才传到伊斯兰世界,又过了三四百年才传到西欧。我上小学的时候,练字还得用“土盘”,用不起纸。

但1500年之后,全球开始一体化,不仅技术发明的速度加快,技术扩散的速度变得更快,一项新技术一旦在一个地方出现,很快就会被其他地方引进,对人类整体的进步发生重大影响。比如,德国人于1886年发明了汽车,15年之后,法国成为世界第一汽车生产国,又过了15年,美国取代法国成为第一汽车生产大国,到1930年,美国汽车普及率已达到60%。

因此,1500年之后,创新才真正有了国家间的可比性,谁优谁劣一目了然!中国在过去500年没有做出一项可以载入史册的发明创造,意味着我们对人类进步的贡献几乎为零!比我们的祖先差远了!

我还要强调一下人口规模问题,国家规模有大有小,国家之间简单比较谁的发明创造多,容易产生误导。

理论上讲,给定其他条件,一个国家的人口规模越大,创新越多,技术进步越快。并且,创新之比与人口之比是指数关系,不是简单的等比例关系。原因有二:第一,知识在生产上具有重要规模经济和外溢效应;第二,知识在使用方面不具有排他性。

10多年前,美国物理学家Geoffrey West等人发现,在城市生活中,人类的发明创造与人口的关系遵循正5/4指数缩放规则: 如果一个城市的人口是另一个城市的10倍,那么,发明创造总量是后者的10的四分之五次方,即17.8倍。

以此来看,中国对世界发明创新的贡献与中国的人口规模太不成比例。中国人口是美国人口的4倍,日本的10倍,英国的20倍,瑞士的165倍。按照知识创造的指数缩放法则,中国的发明创造应该是美国的5.6倍,日本的17.8倍,英国的42.3倍,瑞士的591倍。

但实际情况是,近代500年里,中国在发明创新方面对世界的贡献几乎为零,不要说与美国、英国比,我们甚至连瑞士的一个零头也达不到。瑞士人发明了手术钳,电子助听器,安全带,整形技术,液晶显示器,等等。中国人民银行印刷人民币使用的防伪油墨是瑞士的技术,中国生产的面粉有60%-70%是由瑞士布勒公司的机器加工的。

问题出在哪里?难道是中国人基因有问题吗?显然不是!否则,我们就没有办法解释古代中国的辉煌。

问题显然出在我们的体制和制度。创造力依赖于自由!思想的自由和行动的自由。中国体制的基本特点是限制人的自由,扼杀人的创造性,扼杀企业家精神。中国人最具创造力的时代是春秋战国时期和宋代,这不是偶然的。这两个时代也是中国人最自由的时代。

公元1500年之前,西方不亮,东方昏暗。公元1500年之后,西方一些国家经过宗教改革和启蒙运动,逐步走向自由和法治,我们却原地踏步,甚至反其道而行之。

我必须强调,自由是一个不可分割的整体,当心灵不自由的时候,行动不可能自由;当言论不自由的时候,思想不可能自由。只有自由,才有创造。让我用一个例子来说明这一点。

今天,饭前便后洗手已成习惯。但是,1847年,匈牙利内科医生伊格纳兹·塞麦尔维斯(Ignaz Semmelweis)提出医生和护士在接触产妇前需要洗手的时候,他冒犯了同行,并因此丢掉了工作,在一个精神病院死去,终年47岁。伊格纳兹·塞麦尔维斯的观点基于他对产褥热的观察,当时他所在的医院有两个产房,一个服务于富人,由专业医生和护士精心照料,这些医生不断在接生和解剖尸体之间转换工作;另一个服务于穷人,由接生婆负责。他发现,富人得产褥热的比例是穷人的三倍。他认为,原因是医生不洗手。但他的看法与当时流行的医学理论相矛盾,他也不能对自己的发现给出科学证明。

人类的卫生习惯是怎么改变的?这与印刷机的发明有关。

1440年代,德国企业家约翰内斯·古腾堡发明了活字印刷机。印刷机使得书籍和阅读普及开来,许多人突然发现,他们原来是“远视眼”,由此对眼镜的需求出现了爆发式的增长。在印刷机发明一百年后,欧洲出现了数千家眼镜制造商,并由此掀起一场光学技术的革命。

1590年,荷兰眼镜制造商JANSSEN父子把几个镜片累在一起放一个圆筒里,发现透过玻璃所观察的物件被放大,由此发明了显微镜。英国科学家Robert Hook用显微镜发现了细胞,引起了科学和医学一场革命。

但最初的显微镜分辨率并不高,直到1870年代,德国镜片制造商Carl Zeiss生产出了新的显微镜,它是基于精确的数学公式构造的。正是借助这种显微镜,德国医生罗伯特·科赫等人发现了肉眼看不见的微生物细菌,证明当年匈牙利医生塞麦尔维斯的观点是正确的,由此创立了微生物理论和细菌学。正是微生物学和细菌学的创立,逐步改变人类的卫生习惯,并由此导致人类预期寿命的大幅度延长。

我们可以设想一下:如果当初古腾堡的印刷机被禁止使用,或者只被允许印刷教会和行政当局审查过的读物,那么,阅读就不会普及开来,对眼镜的需求就不会那么大,显微镜和望远镜就不会被发明出来,微生物学就不会创立,我们不可能喝上消毒牛奶,人类的预期寿命也不会从30多岁增加到70多岁,更不要幻想探索宇宙空间了。

过去三十多年,中国经济取得了举世瞩目的成就。这一成就是建立在西方世界过去300年发明创造所积累的技术的基础上,支撑中国经济高速增长的每一项重要技术和产品,都是别人发明的,不是我们自己发明的。我们只是套利者,不是创新者,我们只是在别人建造的大厦上搭建了一个小阁楼,我们没有狂妄自大的理由!

牛顿花了30年的时间发现了万有引力,我花了三个月的时间搞明白了万有引力定律,如果我宣称自己用三个月的时间走过了牛顿30年的道路,你们一定觉得可笑。如果我再反过来嘲笑牛顿,那只能说明我太无知!

我们常说中国用世界7%的可耕地养活了世界20%的人口,但我们需要问一问:中国何以做到这一点?简单地说,就是大量使用化肥。中国人食物中大约一半的氮来自无机化肥。如果不使用化肥,一半的中国人会饿死。

氮肥的生产技术是那来的呢?是100多年前,德国科学家弗里茨·哈伯和BASF公司的工程师卡尔·博什发明的,不是我们自己发明的。1972年尼克松访问中国后,中国与美国做的第一单生意,就是订购13套当时世界上规模最大、最现代化的合成氨尿素生产设备,其中8套来自美国的 KELLOGG公司。

再过五十年、一百年重写世界发明创新史,中国能否改变过去500年史上的空白?答案很大程度上依赖于我们能否持续提升中国人享有的自由。因为,只有自由,才能使中国人的企业家精神和创造力得到充分发挥,使中国变成一个创新型国家。

因此,推动和捍卫自由,是每一个关心中国命运的人的责任,更是每个北大人的使命!不捍卫自由,就配不上“北大人”的称号!

谢谢!

-R/i2SL 

发表在 社会生活 | 标签为 , | 留下评论

UfqiFina有福金融UfqiWork有福工坊UfqiNews有福常在Google Books

四款充电桩app应用横向截屏比较

现在流行制作&使用App/客户端/应用程序,与之对应的是网站/网页——寄托于第三方浏览器的应用程序。比如新能源汽车/电动汽车,需要充电,跟之前车主需要找停车场一样,也需要一个充电桩App,如下对比了三个找充电桩的App(e充网,e充电,星星充电)和一个地图应用(高德地图)的查找周边的充电桩的截图信息,优劣高下,一目了然。

上图星星充电App在作者所在位置的打开情况,有4个信息,且都较远。

上图来自国家电网的e充电的App,在同一位置,只有2个信息,且都较远。

不同的是这个信息与之前的信息不重复,显然如果上面两个信息叠加起来,应该会更好,于是就有下面这个 e充网App.

上图e充网App的信息明显丰富很多很多了,值得赞一个,信息多,也可以看到将各类型的充电桩信息集合到一起,除了国电和星星的,还有普天等其他充电运营商。

这样比较起来,选择充电App,在北京这里的话,e充网的优势很明显。然而,对于找什么位置来说,导航App应该也可以一显身手,如下是在高德地图里搜索充电桩的情况显示。

上图在浏览器应用中打开 -ditu 或者 http://ditu.amap.com 然后搜索充电站,就能够看到上面的信息,也一目了然,情况比e充网的还有好。

充电桩App在核心功能为用户寻找充电位置方面不如导航或地图软件。如果不是更丰富或专业的功能或服务,充电桩App在提供位置信息方面,如何超越导航或地图软件,是要面临的大问题。

以上测试属个例。个例感受 e充网 > 高德地图 > 星星充电 > e充电 。

题外,这些App的命名真随意,“e充网”和“e充电”是截然不同的两个实体。市面上还有很多其他各样的充电桩App,未一一实测。

发表在 社会生活 | 标签为 , , , , , , | 留下评论

Pdf DriveOpenAI ChatGPT