-Base62x 新增 -Perl 版本技术实现 Base62x.pm

在此前的一篇Blog(-R/G2SW )中,“-gMIS 吉密斯优化更新+分组项区段AddGroupBySeg/+复制AddByCopy等”, 我们提到“注册动作registerAct: 改进增加 Base62x.class.js”, 初尝跨编程语言、运行时环境进行数据交换的便利,这次也因着部署一个新的 -GWA2 的项目,需要在 -PHP 和 -Perl 中进行多字节非ASCII字符数据的传递,于是就推荐了 -Base62x , 这样 Base62x in Perl 的工作就排上日程,在两个周末的实验下,完成了 Base62x in Perl 的初个版本. 如下是一些使用细节,同时也可以在 -GitHub-Wadelau 上寻找获得, 或者直接访问 -Base62x .

  1. 面向对象编程OOP的 Base62x.pm

    use Base62x;

    my $base62x = Base62x->new();
    my $str = “Hello World!\n”;
    my $encoded = $base62x->encode($str);
    $str = $base62x->decode($encoded);

    在 Perl 程序的开始,引入 Base62x.pm , 然后生成相应的对象实例,通过调用 该实例的 encode/decode 方法实现相应的编码与解码。
    同 Base62x 的其他版本相通,实现了跨编程语言、运行时环境的数据安全交换。
    同 Base62x的其他版本一样,Perl版本也实现了针对数字进制转换和ASCII快捷处理的相关方法。如,

    my $i = 100;
        # treas $i as base 10 and transform it into Base62x
    my $numInBase62x = $base62x->encode($i, 10);
        # try to decode a Base62x num into base 10
    $i = $base62x->decode($numInBase62x, 10);

    OOP的调用方式,适合进行循环内反复调用的使用场景,由于在实例化时,进行了环境变量的初始化而节省了后续重复动作。
    .

  2. 函数式编程的Base62x.pm
    除了 OOP式的写法,Base62x.pm 还提供了函数式编程的调用方式,列如下。

    use Base62x qw (base62x_encode base62x_decode);

    my $str = “Hello World!\n”;
    my $encoded = base62x_encode($str);
    $str = base62x_decode($encoded);

    函数式编程适合单一次启动并运行的使用场景。
    详细实现可以参考 Base62x.pm 的代码。
    .

截止目前,Base62x 已经可以提供的编程语言版本包括 C, Java, PHP, JavaScript, Perl. 其中JavaScript 还有两个实现, Base62x.class.js 和 npm base62x.


Base62x: An alternative approach to Base64 for only-alphanumeric characters in output.
Base62x is an non-symbolic Base64 encoding scheme. It can be used safely in computer file systems, programming languages for data exchange, internet communication systems, and is an ideal substitute and successor of many variants of Base64 encoding scheme.
Base62x 是一种无符号的Base64编码方案。在计算机文件系统、编程语言数据交换、互联网络通信系统中可以安全地使用,同时是各种变种Base64编码方案的理想替代品、继任者。

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

愛自己悅己容2nd插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板書中自有顔如玉冰糖雪梨膏儿童宝宝砀山慈梨膏

-gMIS 吉密斯优化更新+分组项区段AddGroupBySeg/+复制AddByCopy等

-gMIS 吉密斯持续更新优化升级,最近一段时间的功能改进包括如下几项,备忘如下。

  1. 数据透视Pivot模块: +分组项区段AddGroupBySeg
    这个功能面临的场景是,当我们在使用数据”透视“功能时,分组group by统计时,总是将整个字段的值参与计算,此前已经提供了 addGroupByDateYmd —— Ymd的功能是格式化时间相关的字段,以Ymd的形式参与计算。
    addGroupBySeg 则在此基础上更进一步,可以提供了截取字段值的给定区间部分参与计算。例如 iname字段的值是 abc123efg456, 如果需求希望截取iname的前三个字符参与计算,则可以调用 addGroupBySeg功能,同样地,也可以截取中间的 “efg” 出来。
    “数据透视Pivot“模块功能源自 Microsoft Excel,这一刻起,差不多要超乎 Excel的数据透视功能了。
  2. 数据操作: +复制AddByCopy
    在管理信息系统(MIS)中,录入数据是一件繁琐的事,有先后相邻两条记录差别不多时,可以通过复制前一条并做少量修改来满足实现快速录入数据的需求。AddByCopy 即是在此背景下创建的,当我们要输入相似、相邻的记录时,可以使用复制功能,快速使用此前刚刚录入的数据,极大地加快数据录入,提升工作效率。

  3. 页面Tititle修改为三级递进改进
    改进后:模块名称 – 目录名称 – 吉密斯(默认)。

  4. List模式: +字段在title hint时最长限制
    此前有字段限制在列表中显示的字段值最大长度,
    list_disp_limit = 38
    新增加在title hint时的字段长度限制,
    list_disp_title_max_length = 300
    如果不加 title hint时的长度限制,当遇到有字段类型为 text 的超长文本时,会憋坏整个浏览器进程/线程。

  5. 注册动作registerAct: 改进增加 Base62x.class.js
    计划了很久的事情,registerAct 本身由于 JavaScript的 escape有bug,当 Base62x.class.js 创制完成之后就想着替换,现在终于找到合适的时机,在服务器端使用PHP版本的 Base62x.class.php 对待注册的动作进行编码,然后在浏览器终端,使用JavaScript版本的 Base62x.class.js 对待注册的动作进行解码,进而进行动作注册,一气呵成。
    注册动作registerAct 是 -gMIS 发现的一个JavaScript进行透传待执行动作的方法。通常使用 Ajax 或者 iFrame 等方式进行服务器端/浏览器端进行数据交互时,无法将制定的 JavaScript方法释放到指定的执行域进行执行,registerAct 就是为解决这个问题而设计的。 

    同时得益于 Base62x.class.js 的引入, switchEdit 等函数也将获得更好的兼容性,inline模式的双击即编辑也将得到改善。

  6. 核心模块:db连接增加长连接
    得益于 -GWA2 的升级改进,-gMIS 在读取数据库数据时,如果探测或者根据设置,当PHP运行时环境支持数据库长连接时,则启动数据库长连接。
    至此在这方面的速度优化,又提升一点点。
    PHP + MySQL的数据库长连接是基于进程的,也即长连接在进程范围内共享,其MySQL并发的连接数大致相当于:
    Nginx/Apache所触发的PHP进程数 * Request并发数 * 每个Request实例化的数据库连接数.

  7. 安全模块Sid:+&db=
    改进 comm/ido.js , 针对 appendSid,增加了 &db= 为进一步的多数据库的支持提供保证.
  8. 安全模块移除 eval
    改进 comm/header.inc.php 中对 eval 的应用,降低外部输入带来恶意代码执行的风险。 PHP eval 类似 JavaScript eval 一样,具有不严谨的反射(Reflection), 对待执行的脚本如果检测不够严格,可能会有预留后门的隐患,已消除。
    eval 函数在 -PHP 官网( -R/P2ST  )上也被明显提示是“危险”的。

    Caution

    The eval() language construct is very dangerous because it allows execution of arbitrary PHP code. Its use thus is discouraged. If you have carefully verified that there is no other option than to use this construct, pay special attention not to pass any user provided data into it without properly validating it beforehand.

  9.  更新getUrlByTime
    增加针对字段名称中含有 ”time“的,启用”00:00:00″ — “23:59:59” 的支持。

  10. 改进站内搜索InSiteSearch 初始化的逻辑
    使之能够兼容不同的数据库的情况.
    改进判定是否可检索字段的判断系数。

  11. 改进错误输出Error Print
    当有数据库数据读取异常时,显示更为友善的提示信息,并提供“反馈给管理员”的邮件链接,使异常处理更人性化一些。
    对于写重复等信息,提供了更直白的显示和解释。

    gmis-logo-201606

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

    -gMIS is a -GWA2 based Management Information System (MIS) software with characteristics like configurable input and output interfaces, open-box-to-use.
    Various management application software systems can be built on it, such as
    Content Management System (CMS), Customer Resource Management (CRM), Enterprise Resource Planning Management (ERP),
    Office automation systems (OA), as well as different industry application management system softwares, such as
    Human Resource Management System (HR), Student Management, Archive Management, Tourism Management, Book Management,
    Commodity management and business operations support systems (BOSS), etc.
    With zero code development, -gMIS can build a set of management information systems (MIS) software in a few minutes.

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

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

書中自有顔如玉冰糖雪梨膏儿童宝宝砀山慈梨膏汽車老司機車載書中自有黃金屋

GWA2-Java built-in cache with connection pool design/带连接池的缓存流程设计

最近花很大力气在 -GWA2-Java 中实现了带连接池的缓存设计流程(GWA2-Java built-in cache with connection pool design)并部署成功。之所以花很大力气,是由于这些功能在 -GWA2-PHP 中均没有碰到,兹整理记录如下。

按此前在 -GWA2-PHP 中实现的 built-in cache( -GWA2 更新缓存调用built-in cache方法,  -R/r2SH ),其大致思路是:
1) 应用对象 myObject 调取父类 WebApp的方法,
2) WebApp进一步地前转读取 Cache 的请求给CacheAdmin (Cachea);
3) CacheA 被调用后,首先查询配置及运行时参数,决定连接哪个在线服务,
4) 在获得服务器相关信息后,进一步地的查询配置及运行时参数,决定使用哪种驱动程序;
5)获得服务信息及驱动信息后,比如最终连接 CacheMaster主机,使用 Memcached 驱动,然后Memcached的实例被创建,Memcached完成初始化后,进行读写操作;
6) Memcached获得相应结果后,前转查询结果给Cachea,Cachea进一步地前转查询结果给WebApp及myObject调用对象。

这一流程可以用上图表示,其中一个完整的查询涉及到五个对象,五个流程分叉判断。五个对象为:myObject, WebApp, CacheAdmin, CacheMaster, Memcached;
五个分叉流程判断为:
1)是否读取Db还是Object对象数据?
2)是否读取Cache?
3)连接哪个Cache主机?
4) 使用哪种驱动程序读取Cache?
5) 是否有连接池到指定的Cache主机?

相比 -GWA2-PHP 的实现,-GWA2-Java 中需要额外地创建了 CacheDriver 接口 以此来约束和规范各个驱动程序模块,额外地创建和维护连接池程序,额外地创建Memcached Java Client。

这三种新的创造,单独拿其中一块都可以大书特书一篇。CacheDriver 接口相对容易,由于在 Cachea 需要预设一种对象类型,使之能够被赋值为某种驱动模块的实例,自然这就非 Java Interface 莫属,Interface CacheDriver 同时定义和约束了各个不同的驱动模块来实现相应的方法,从而保证数据流的正常流转。

Socket Connect Pool(SocketPool)相对复杂,但思路很简单,依赖Java Servlet Container可以维护运行状态的特性,创建一个可以寄宿其上的数据对象,并约定一定的状态管理机制即可实现。与Servlet Container本身提供的连接池(如JDBC的连接池)相比,这个需要自我手工实现。幸运的是,基于Java的连接池管理,早于2005年,我们在 -ChinaM 最早的解决方案中就有相应的实践及成功应用,这次是优化升级,并增加了根据先进的 SocketStream 和 SocketString 来应对不同的IO读写。

连接池能够极大地提升服务器性能表现,所以在最常见的场景,连接数据库时,Resin,Tomcat等均提供了针对数据库的连接池。而 Session, Cache 或者其他网络服务的连接池,则需要自行手工提供。这也是 -Java 在某些地方性能优胜的关键之一。在 201807年的一次针对 -PHP 应用环境的优化分析中,由于一个改进数据库连接的修改,直接优化节省一台数据库服务器。这个数据库连接由于在开发初期被置于某个循环体内的Bug,每次运行时,都会初始化向数据库的连接,导致开销大增。

比较难的模块是Memcached Java Client (Memcached, -R/r2ST ). 这个模块在 -GWA2-PHP 中是跟随PHP源码提供的,编译进去即可。而在 -GWA2-Java 中,则需要手工实现。好在有前人探索,也不需要重新造轮子,我们经过对比,选择了 -GitHub 上的 gwhalin 的 Memcached Java Client . 由于需要融合到 -GWA2 中,而且也觉得可以在优化一些该版本,主要修改如下:
1)  expiry 参数由 Date 修改为 int ;
2) 摘除自带的 SocketIOPool,融合上文提到的 GWA2 实现的 Socket Pool;
3) 改进对传入连接主机服务的支持;
4) 改进 if(a==1) b=2; 等不规范的为 if(a==1){ b=2; } ;
5) 改进key的 sanitize操作,用 -Base62x 替代 UrlEncoder,Base62x 比 UrlEncoder提供了跟“干净、短小”的字符编码; 判断当key 长度大于 32时,启用 MD5 操作等等。
从根本上来说,Memcached也不算复杂,就是操作Socket读写,类似Java Mail等类库一样。

至此,-GWA2-Java 基本完善,一段时间针对Java版本的集中优化基本完成,可以考虑将其应用到具体生产环境了。她的各种性能表现及更高级的优化,需要在实践中不断加深、加强。

-GWA2 是”通用网络应用架构( General Web Application Architeture )”,基于 -GWA2 可以轻便构建各种网络应用程序,
包括复杂的在线购物商城、 旅游交易平台、社群或者社交网站和新闻资讯网站等,
也包括各种企事业单位网上门户,在线交互及服务作业系统等.
还可以包括为NativeApp做服务器端支持, 甚至是WebApp的全部.
-GWA2 是为数不多的支持跨开发语言的应用框架,目前支持 -Java, -PHP, -Perl, -Aspx and -Python .

-GWA2 is a “General Web Application Architecture” and based on -GWA2 developers can easily build a variety of network applications,
including complex online shopping malls, travel trading platforms, community or social networking sites and news information sites, etc.
Also the applications include various online portals of enterprises and institutions, online interaction and service operations systems.
Moreover it contains server-side support for NativeApp, or even all of the WebApp.
-GWA2 is one of the web frameworks which provide cross-language support for -Java, -PHP, -Perl, -Aspx and -Python at present.

-GWA2 is E.A.S.Y 
Easy Along, Swift Yield
轻松启动, 快速产出.

 

发表在 -GWA2, 服务器运维, 编程技术, 计算机技术 | 标签为 , , , , , | 一条评论

愛自己悅己容2nd插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板書中自有顔如玉冰糖雪梨膏儿童宝宝砀山慈梨膏

-Java forEach中 Lambda Expr中的 final变量要求

本文是关于 -Java Lambda Expression在forEach方法的应用讨论。对比其他编程语言的foreach 操作(文末附带7种主要编程语言的Loop HashMap by forEach的程序片段),Java 8引入的运用 Lambda Expression方式的 forEach操作方法是最接近语言所要表达的本意,且简洁、直接。
在持续优化 -GWA2 in -Java 过程中,由于 -GWA2 多层结构设计,层间数据传递很多依赖Map/HashMap完成,经常用到这个 forEach 并碰到一些问题(引入外部变量,有条件筛选及终止等),兹记录相关探索过程如下。

通常在 -Java 中遍历一个数据集合是常见的操作场景,比如遍历数组 (-R/G2ST ):

int[] numbers = 
             {1,2,3,4,5,6,7,8,9,10};
for (int item : numbers) {
    System.out.println("Count is: " + item);
}

再比如常规的借助 keySet遍历一个key-value结构的 Map / Hash, 哈希 (-R/k2SP ):

for (KeyType key : m.keySet()){
    System.out.println(key+", "+m.get(key));
}

-R/k2SP 列举了三种方法进行遍历key-value 的Map, 实际上根据 -R/92SS  页面上第二个回答所进行的测试,大概有十多种方法可以实现遍历一个 key-value 的Map. 这么多方法中,又以 forEach 的表达最为直接、高效,所以推荐使用 Map.forEach .

forEach 本质上是建造一个 Lambda Expression 并进行运算,其中 Map.forEach 等同的表达式也是针对  keySet的调用( -R/V2SQ )。

//- Map.forEach is equivalent to:
for (Map.Entry<K, V> entry : map.entrySet()) action.accept(entry.getKey(), entry.getValue());

//- an example
HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.forEach((key, val)->{
    System.out.println(key+”, “+val);
    });

由于 Lambda Expression 是一个 enclosing scope,它与代码区块外的沟通成为问题,外部变量无法在 Lambda 内部调用,内部变量也无法在外部访问到。在这近乎隔离的运行时环境里,还留了final变量可以穿行的缝隙,如果要实现将Lambda Expr与外部变量进行数据交换,就需要在代码区块外部定义final类型变量作为数据信息载体。常见的应用有如下两个场景.

  1. 将Map/HashMap的数据遍历并加工
    例子程序:

    HashMap<String, Integer> hm = new HashMap<String, Integer>();
    final HashMap<String, Integer> hm2 = new HashMap<String, Integer>();
    hm.forEach((key, val)->{
        System.out.println(key+”, “+val);
        hm2.put(key, val + 1);
        });

    借助 Lambda Expression 对 final变量的支持,可以容易地将遍历并加工后的数据中转取出做进一步的操作.
    final 变量由于无法再次出现在赋值语句的左边,也即无法对对象做再次赋值操作。但这不影响我们后续将 hm2的值进行遍历或者将其复制到另外一个非final的对象中去,如上例中的 hm.
    同样地,作为final的 hm2 无法整体被赋值,但可以对其本身进行操作,如上例中的,通过 hm2.put 将某个元素放入这个容器中。类似的还有,比如 StringBuffer 的操作。

    StringBuffer pageIdsb = new StringBuffer(“0”);
    pageList.forEach((k, v)->{
        HashMap tmphm = (HashMap)v;
        pageIdsb.append(“,”).append(tmphm.get(“id”));
        });

    public final class StringBuffer
    extends Object
    implements Serializable, CharSequence

    由 StringBuffer 类的定义(-R/V2SQ ),我们知道其是 final 类,于是在初始化后,可以在 Lambda Expr中通过 pageIdsb.append 的方式进行其值的操作与变化。

  2. 有条件过滤或推出、终止遍历
    在遍历Map/HashMap等对象集合时,有时候需要有条件的过滤或者终止,如果将外部约束条件带入?
    又如何定义内部自循环变量?
    一种可行的方式,依然是使用 final变量,然后基本变量类型,如果定义为final之后则不能被直接修改,无法满足循环体内计数的需求.
    于是就需要设计一个复合final类的变量,其成员一个负责约束条件,另外一个负责循环计数。

    HashMap<String, Integer> hm = new HashMap<String, Integer>();
    final HashMap<String, Integer> hm2 = new HashMap<String, Integer>(){{
        put(“iCount”, 0);
        put(“maxCount”, 4);
        }};
    hm.forEach((key, val)->{
        int iCount = Wht.parseInt(hm2.get(“iCount”));
        int maxCount = Wht.parseInt(hm2.get(“maxCount”));
        if(iCount < maxCount){
            System.out.println(key+”, “+val);
        }
        hm2.put(“iCount”, iCount + 1);
        });

    在上面的例子程序中,我们定义了循环体内计数变量 iCount 和 满足退出条件 maxCount 每次循环时取出并做对比,每次循环时, iCount++ 。
    上面例子程序中的 Wht.parseInt 是 -GWA2 的基础设施类,可以在 -GWA2@Github (-R/h2SO )下载到.
    上面例子程序中的hm2 的声明实例中,通过构造方法并以一个匿名类完成了两个 put操作。关于匿名类 Anonymous Class,参考 -Java 文档(-R/i2SP ), 在 -GWA2 in -Java 里也有不少应用。
     

-Java 中引入的 forEach 操作,尽管是以 Lambda Expression为载体的一个 Consumer / BiConsumer对象,运行在一个 enclosing scope,依靠可以外部 final 变量这个渠道,可以提供媲美其他编程语言一样的 foreach 效果,对增加程序可读性、可维护性有一定的帮助,已有的评测 forEach也表现出不错的性能,值得更多地应用。

 

-GWA2 是”通用网络应用架构( General Web Application Architeture )”,基于 -GWA2 可以轻便构建各种网络应用程序,
包括复杂的在线购物商城、 旅游交易平台、社群或者社交网站和新闻资讯网站等,
也包括各种企事业单位网上门户,在线交互及服务作业系统等.
还可以包括为NativeApp做服务器端支持, 甚至是WebApp的全部.
-GWA2 是为数不多的支持跨开发语言的应用框架,目前支持 -Java, -PHP, -Perl, -Aspx and -Python .

-GWA2 is a “General Web Application Architecture” and based on -GWA2 developers can easily build a variety of network applications,
including complex online shopping malls, travel trading platforms, community or social networking sites and news information sites, etc.
Also the applications include various online portals of enterprises and institutions, online interaction and service operations systems.
Moreover it contains server-side support for NativeApp, or even all of the WebApp.
-GWA2 is one of the web frameworks which provide cross-language support for -Java, -PHP, -Perl, -Aspx and -Python at present.

-GWA2 is E.A.S.Y 
Easy Along, Swift Yield
轻松启动, 快速产出.


(1) Loop HashMap in PHP ****

$hm = array(“a”=>1, “b”=>2, “c”=>3);
foreach($hm as $key=>$val){
    print “key:$key , val:$val\n”;
}

(2) Loop HashMap in Perl ***

my %hm = (“a”=>1, “b”=>2, “c”=>3);
foreach my $key (keys %hm){
    my $val = $hm{$key};
    print “key:$key , val:$val\n”;
}

(3) Loop HashMap in Swift *****

let hm = [“a”:1, “b”:2, “c”:3];
for (key, val) in hm {
    print(“key:\(key) , val:\(val)\n”);
}

(4) Loop HashMap in Python ***

hm = {“a”:1, “b”:2, “c”:3};
for key in hm:
    print(“key:{} , val:{}”.format(key, hm[key]));

(5) Loop HashMap in C++ *

std::map<std::string, std::int> hm {
    {“a”, 1},
    {“b”, 1},
    {“c”, 3}
};
for(const auto& key : hm){
    std::cout << “key:” << key.first
        << ” , val:” << key.second
        << “\n”;
}

(6) Loop HashMap in JavaScript ***

var hm = {“a”:1, “b”:2, “c”:3};
for (var key in hm){
    console.log(“key:”+key+” , val:”+hm[key]);
};

(7) Loop HashMap in Java ***

HashMap<String, Integer> hm = new HashMap<String, Integer>(){{
    put(“a”, 1″);
    put(“b”, 2);
    put(“c”, 3);
}};
hm.forEach((key, val)->{
    System.out.println(key+”, “+val);
    });

 

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

显白黑茶色蓝黑色板栗色三元牛奶李宁体育用品汽車老司機

参观“纪念马克思诞辰200周年主题展览”有感, Karl max, 200 Ani Exhi

2018年6月28日下午,在北京位于天安门广场东侧的国家博物馆参观了正在展出的“真理的力量——纪念马克思诞辰200周年主题展览”。

国家博物馆门口人潮涌动,工农商学兵各界,东西南北中各地的人群络绎不绝前来参观学习。主题展览位于国家博物馆的南区1、2和3号馆。入口处即是巨幅卡尔马克思的幕墙,然后映入眼帘的是卡尔马克思和弗恩格斯的合影铜像。各厅内展出了大量图像、史料、实物和相关人物,真实再现了卡尔马克思波澜壮阔的精彩人生,全面生动展示了马克思的生平、革命实践、理论贡献和精神境界,展现了马克思主义在中国传播运用和丰富发展的光辉历程。

或许是由于时序的关系,在领略其出生、成长、成才、奋斗、贡献等各个精彩的人生篇章后,当我驻足在卡尔马克思辞世的那副巨型油画前时,思绪感慨万千,久久未曾移开。

这副油画作者是当代著名艺术家艾中信先生。为纪念马克思诞辰200周年,艾中信创作了这幅油画《三月十四日》(1883年3月14日),再现了马克思在躺椅中溘然长逝的凝固瞬间。艾中信师从和追随徐悲鸿、吴作人等第一代油画大师,是我国的杰出画家、艺术家。

触动我的情感和思绪并引发我共鸣和思考的是这副油画的几个细节:老人、沙发、毛毯和掉落在地上的书籍。这无疑给人一种安详的感觉,作为全人类最为著名的无神论领袖之一,卡尔马克思辞世的瞬间却生动而自然地呈现了无疾而终天人合一至善至美的景象。

根据弗恩格斯后来在《在马克思墓前的讲话》中的细节描述,“3月14日下午两点三刻,当代最伟大的思想家停止思想了。让他一个人留在房里还不到两分钟,当我们进去的时候,便发现他在安乐椅上安静地睡着了——但已经永远地睡着了。”

卡尔马克思及其创建的共产主义是坚定的无神论者。如果不是因为这个,他的离世确切地符合佛教中的得道高僧的“圆寂”,这通常是一个人的大福报,是灵魂的得道升仙,成就不死的永恒。也许正是因为他的奋斗的一生、奉献的一世而得到上帝的垂怜或者眷顾,能够做到自然而然地油尽灯枯、溘然长逝,仿佛睡着了一般,永远地。

作为无神论者,显然不能这样推演。然而从唯物主义历史观出发,似乎有两个结论可以推测出来。一是,卡尔马克思对自身的内省认识,对个体生命的整体观念;二是弗恩格斯及其他卡尔马克思的亲密团队对生命的认识,对人生的思考。

与我们现在经常在新闻传播中听到、读到或者看到的领导人逝世,离得最近的词语就是“因病医治无效,于某某医院离世”。卡尔马克思的辞世时,为何是在家里,躺在沙发上,盖着毛毯,捧着书本? 这是多么享受的一幕,多么安详的画面,仿佛我们每个人都曾经历或者经常体验的那样——某个慵懒的午后,躺在自家的沙发上,看了一会书,然后就倦意袭来,昏昏睡去……

也许可以推测,卡尔马克思本人已经对生死有某种超然脱然的认识,所以当生命的终点或者尽头来临时,他选择的是待在自己熟悉的、温暖的家里,以自己舒服的姿势、读着自己喜欢的书,以此沉沉永远地睡去。

正是基于这一对生命的超脱认识,他选择了以家作为终点,而不是“于某某医院离世”。

其二,弗恩格斯及其他亲密团队成员,充分尊重卡尔马克思的选择,没有强行在卡尔马克思有生命危险时进行重度医疗。可以设想,以当时卡尔马克思的社会声望及地位,如果他需要医疗,可以召来全世界当时最好的医生团队,进行各种极其高精尖的治疗。

显然,卡尔马克思没有要求,甚至可以说是拒绝了进一步的治疗,信奉进化论的他懂得生死更替的大自然的规律。同时,他身边的人,也理解到这一点,并给予充分的尊重。我们无法还原每一个细节,甚至还没有充分的史料来表述与支持这些推测的想法,只能说这些或更贴近已经看到的这副油画。又或许这副油画是艺术的加工,当其时情景并不是那么和谐,这些都不重要了。

如果可以再多一些佐证的话,可以考虑近几年前离世的美国苹果公司的创始人之一史提夫乔布斯先生,当时他被诊断出某种疾病,但他淡然的接受并放弃过度医疗,自然地离去。史提夫乔布斯当时位列全球富人榜前列,以他的社会声望与财富,以近两百年后的不断进步的医学技术,他本应可以续命好多年,然而他却选择了放弃。

个体生命或许是相同的,思想的高度应是差异巨大的,尤其是在庸俗、平凡与卓越、领袖之间。这种巨大的差异不单体现在辉煌的事业上,亦表征在挥别这个美好世界的一刻。

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

迪士尼母婴显白黑茶色蓝黑色板栗色三元牛奶李宁体育用品

SQL查询优化: 既有Unique Index为何还要另加Index?

在使用 -GWA2 进行WebApp开发时,我们创建基于MySQL的相关数据表时,都会有意识地在数据表的关键字段上增加索引,以期待查询时能够较快地返回结果集。

在我们现有的生产线上的数据观测中,同样一张数据表,通常当数据达到10M+时,如果某个待检索字段(用在Where里作为查询字段)没有使用索引,一次查询大约需要耗时50s+,如果增加了相应的索引,则单次查询大约耗时5s左右,性能提升10倍以上。

所以,理论联系实际,我们都应该在相关待检索的字段上增加索引,这次要提及和澄清的是增加Unique Index还是Index? 只增加Unique Index,还是Index即可?或者两种Index都需要? 在检索方面,Unique Index保持了数据的唯一性,实际兼有Index的功能,在被检索时提供同样的优化性能。

情况稍微复杂一些的例子是这样,当一个Unique Index增加到多个字段的组合上时,其Index的作用并不能想当然地将Index效果追加到每一个组合中的字段上。如下是 -MySQL 官方文档对于组合字段的Unique Index的描述。

( -R/u2SN  ) “If the table has a multiple-column index, any leftmost prefix of the index can be used by the optimizer to look up rows. For example, if you have a three-column index on (col1, col2, col3), you have indexed search capabilities on (col1), (col1, col2), and (col1, col2, col3).
MySQL cannot use the index to perform lookups if the columns do not form a leftmost prefix of the index. ”

用简略地话来说,Unique Index的Index作用:1)当只有一个字段时,其Index作用也同样地施加到该字段上;2)当为多个字段的组合时,其Index的作用,只施加到组合的第一个字段上。

所谓差之毫厘,谬之千里。当待检索的字段是某个Unique Index的组合字段之一,且不是第一个时,被用做Where的查询条件,查询性能将急剧下降,每次皆是全表扫描,逐行对比。

这种性能隐患,在开发初期并不容易发现,只有当数据量级增长到10M+时,查询耗时才会逐步显现出来。

 

gwa2-logo-201606.v2

-GWA2 是”通用网络应用架构( General Web Application Architeture )”,基于 -GWA2 可以轻便构建各种网络应用程序, 
包括复杂的在线购物商城、 旅游交易平台、社群或者社交网站和新闻资讯网站等, 
也包括各种企事业单位网上门户,在线交互及服务作业系统等. 
还可以包括为NativeApp做服务器端支持, 甚至是WebApp的全部.
-GWA2 是为数不多的支持跨开发语言的应用框架,目前支持 -Java, -PHP, -Perl, -Aspx and -Python .
-GWA2 is a “General Web Application Architecture”, and based on -GWA2 developers can easily build a variety of network applications,
Including complex online shopping malls, travel trading platforms, community or social networking sites and news information sites, etc.
Also the applications include various enterprises and institutions online portals, online interaction and service operations systems.
And it also includes server-side support for NativeApp, or even all of the WebApp.
-GWA2 is one of the web frameworks which provide cross-language support for -Java, -PHP, -Perl, -Aspx and -Python at present.

-GWA2 is E.A.S.Y 
Easy Along, Swift Yield
轻松启动, 快速产出. 

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

三元牛奶李宁体育用品汽車老司機愛自己悅己容2nd