gmt, utc, timezone, daylight saving,时区和夏令时

在阿里巴巴的Java编程规范中,有一条推荐是:
13. 【推荐】前后端的时间格式统一为”yyyy-MM-dd HH:mm:ss”,统一为GMT。

( https://ufqi.com/news/ulongpage.1524.html?tit=Java開發手冊-阿里巴巴-嵩山版-11:前后端规约 )

其中的重点是“统一为GMT”, 可以设想作为跨国集团企业,由于有多个时区的在线作业系统,如果不统一时区,各个需要通信的服务器之间会乱成啥。两个都是八点服务器可能一个是早上八点,一个晚上八点,还可能是前一天的八点,或者后一天的八点

服务器之间要统一时间和时区,客户端和服务器之间也需要统一时间/时区,有些对时间敏感的通信需要验证时间,如果只报时间是八点是远远不够的。这可能是阿里巴巴在Java编程操作手册中推荐这条规约的原因之一吧。

所以跨国集团企业的服务器时间必须统一,为啥“统一为GMT”呢?

GMT 是时区timezone序列中唯一不受夏令时/冬令时/日间灯节约时间调整的时区。与之对应的是 UTC,但UTC不是时区timezone的概念

不独在Java编程规范中需要注意时间和时区的问题,在其他编程语言中,也需要注意。比如PHP中,

# standard timezone with winter or summer time
date_default_timezone_set(“Europe/London”);
# standard timezone without winter or summer time 
date_default_timezone_set(“GMT”);
# non-standard timezone, but compatible 
date_default_timezone_set(“UTC”); 

 这三个设置,在冬令时,返回的时间是一样的,但如果在夏令时,第一个返回的时间就与后面两个不一样了。

对应地,在Java编程中,除了在服务器层面设置timezone,也可以在代码层面设置运行时timezone的指定:

System.setProperty(“user.timezone”,  “Europe/London”);
System.setProperty(“user.timezone”,  “GMT+0000”);

Java JDK的相关说明: ( https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/TimeZone.html )The syntax of a custom time zone ID is:

 CustomID:
         GMT Sign Hours : Minutes
         GMT Sign Hours Minutes
         GMT Sign Hours
 Sign: one of
         + -
 Hours:
         Digit
         Digit Digit
 Minutes:
         Digit Digit
 Digit: one of
         0 1 2 3 4 5 6 7 8 9
 

Hours must be between 0 to 23 and Minutes must be between 00 to 59. For example, “GMT+10” and “GMT+0010” mean ten hours and ten minutes ahead of GMT, respectively.

当然,较好的设置timezone的方式是在服务器层面,在编程语言的配置文件中,比如 PHP中的php.inc 文件,或者 Java的Jvm参数方式:java -Duser.timezone=“Asia/Chongqing” 。

gMIS吉密斯( https://ufqi.com/dev/gmis/ )的头部运行时设置中,已经启用了将当前运行时环境的时区timezone设置为 GMT;
GWA2吉娃兔( https://ufqi.com/dev/gwa2/ )的头部运行时设置中,已经启用了将当前运行时环境的timezone时区设置为GMT。

美国人纳斯达克总是晚上开盘偷摸炒股?

-R/o2SR

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

山羊绒围巾女冬英伦百搭围脖双面格子加厚保暖披肩迪士尼母婴显白黑茶色蓝黑色板栗色三元牛奶

☘ gMIS吉密斯升级:+xTree,+图片水印等批量优化改进

对资本家和企业家予以轻视,这是现在极普通的事情。人,总喜欢嘲笑比自己的境遇更好的人。

——米塞斯Mises :人的行为Human Action, https://ufqi.com/news/ulongpage.2418.html?tit=人的行为 Human Action-72:选择的过程

How many roads must a man walk down, Before they call him a man, … The answer is blowing in the wind…

—- Blowing in the Wind , Bob Dylan

☘ gMIS吉密斯持续更新改进,这可能是gMIS自10多年前被推出以来,改进最多的一次,或者是记录改动功能点最多的一篇Blog文章。其中既有新功能的增加,也有对问题Bug的修改,更有一些是将现有功能推高到一个新的水平。

建议gMIS老用户在合适的时候,安排升级更新。

gMIS 吉密斯 持续改进细节,备注列如下。

 1. xTree: 对无限宽度和深度的层级数据支持

如同我们在之前Blog:分类、层级与编码( https://ufqi.com/blog/classify-hierarchy-code/ )和  -gMIS更新: 自动层级目录( https://ufqi.com/blog/gmis-update-xdirectory/ )中讨论的一样,我们在层级目录数据中,既可能遇到有限宽度和深度的层级目录数据,如行政地区编码,也可能遇到无限宽度和深度的层级目录数据,如文件目录。或者区块链。在后一种数据结构中,我们无法提前预知在某一层级有多少并列项(宽度),也无法预知到底会有多少层级。

为满足这种数据结构,我们设计和实现了xTree的输入与输出功能模块,用于支持对这种只知道父节点数据结构。新增了 extra/xtree.php 和 class/xtree.class.php . 可以支持无限宽度和无限深度的目录数据类型。

这一新出炉的功能,已成功部署和应用在 Boss选址(老板选址, bossxuanzhi.com )项目 和 有福工坊( UfqiWork, ufqi.com/work )项目上。

2. 改进对 Preset环境变量的支持,pnskxxx=yyy
+ act/preset-vars.inc.php , 得益于我们所设计的功能强大的Page Navigator组件( https://wadelau.gitbooks.io/gwa2/content/ ),gMIS可以通过URL参数自动生成对应的查询SQL语句,在保护安全的同时也同时提供了便捷的数据查询功能。

其中通过 Page Navigator Search Key (pnsk) 方式可以在打开相应表单时,传入查询条件. 这次改进不但在查询读取时使用pnsk等传入条件,在新增记录等环节,也可以读取和使用pnsk代入的预置条件。

3. 改进对点选pickup支持:增加筛选条件
在此之前 pickup 点选时,总是全表扫描记录,并生成各种点选候选项。此次改进,将点选候选项中植入预置条件,使得点选候选项对当前结果集更加具有针对性。

4. class/gtbl, 改进 _fillThis 对环境变量的支持

5. comm/ido.js: 改进对 pnskxxx=yyy环境变量的支持
同2.和3.的改进,在前端页面控制处,也增加相应的前置条件的使用。

6. 改进对 extra/linktbl的支持,增加 linkfield2, linkfield3的扩展
标间嵌套式,默认情况下使用外键字段进行索引,本次升级改进,使用两个及以上的字段作为条件进行标间嵌套使用。

7. 1. 改进对 extra/xdirectory的支持,增加缓存功能
此前版本的设计中,没有考虑对读取目录进行缓存设置,这次改进针对目录类型数据在服务器端进行了缓存。使得数据处理速度更快!

7.2. 改进 extra/xdirectory的功能,增加按英文字母或中文拼音排序显示iname的功能
    class/xdirectory, +sortDir, +getChild, +sortByGbk
    inc/config, +character_code_for_sort,   ascii, gbk, utf-8, see extra/xdirectory, Sat May 22 18:26:20 CST 2021
这是本次改进的重要功能之一,gMIS中使用了很多目录类型的数据,目录类型的数据通常都需要按照层级进行安排,而如果利用层级进行安排,在相等层级下,无法进行二次排序,导致使用起来多有不便。

这次改进就是把数据先按层级进行组织安排,然后在相同层级内,再按字母或拼音进行排序。对于大大量级目录数据的使用,操作人员可以快速的按拼音或者字母进行选项定位,而不只是靠目录层级进行人工查找。

模块化设计,目标数据无关/独立,使得所有此类型的数据均可使用,默认生效。强烈建议升级,极大提升数据处理效率,降低操作人员工作负荷。

8. 改进关联菜单的动态参数支持
通过读取菜单表设计的动态参数,并追加到相应的关联菜单的链接上。

9. 改进 act/updatefield 的功能
    +修正bug,增加安全检查

10.1. 改进文件上传功能
    +增加在线资源地址的引用
针对文件上传只有本地文件的情况,gMIS增加了针对在线资源的支持,通过输入在线资源地址,如 http/https/ftp等协议的在线资源文件进行支持,允许作为上传文件的方式之一。

    +修正对上传文件的安全检查
修正对上传文件的安全检查,强化对文件名的正则匹配表达式的检查。

10.2 改进对文件类型字段isImg的判断
    +增加对包含问号?文件名的检查。

11. 改进对字段默认值的计算算法
   +修正将 field comment 误读为字段默认值的 MySQL 引用。

12. 改进对 comm/modulepath.inc 的支持
    +增加 dynamicpara 在导航路径中。

13. +class/WaterMark.class, 对常见的上传图片进行打水印操作
    配置文件 inc/config.class 中,增加设置开关:
    $conf[‘watermark_for_upload_image’] = “”; # whether to put wartermark onto uploaded image or not, leave blank
if not watermark needed, Fri May 28 11:27:44 CST 2021

基于PHP内建的GD库进行透明度较高的打水印操作。使得通过管控后台上传的本地文件上传发布后能够携带上专有标志的水印Mark。
通过在 inc/config文件中可以设置水印中的文字,如果留空则表示不需要水印操作。

水印操作对于保护自有图片等资源具有一定的作用。同时半透明、不规则图形、处于图片中间区域这些特征使得在不破坏原图的情况移除水印变得相对困难。这些在一定程度上给自有资源一些保护,同时也是对自有品牌的宣传。
互联网烧钱战争火拼10年

14. 修正工具箱函数 comm/tools.function 里的 startsWith 和 endsWith
    由原来过于严格地判断判断same value 并且 same type为相等 === , 改为只判断 same value相等 == ,使得相应函数表述意义更准确,修正了此前的bug。

15. 其他一些小的修正和改进。

—-

一个看似简单的管理信息系统软件,我们制作了也使用了10多年,依然是大幅度地改进和升级,其中既有对错误的订正,也有与时俱进地新功能的加入。其中的历程,正如文章开头的歌词所唱的那样,一个男人要走过多少崎岖坎坷路才能被称之为“男人”? 一个系统软件要经过个日日夜夜的打磨,多少次的升级、改进和优化,才能被称之为一个“系统”?

操作系统微软视窗系统从3.x起,历经近30年,成为目前呈现在大众眼前的Windows 10.x。gMIS吉密斯已经多岁了,未来10年gMIS吉密斯会成长进化成什么样?
一起期待,共同打造。

—-

gMIS吉密斯,截至2021年6月份,累计更新了  379 commits,
每年大约34次成批次的更新,
除节假日外,平均几乎每周都有一次更新递交到代码库。


-gMIS (general Management Information System,吉密斯) 是一种基于 -GWA2 (General Web Application Architecture,吉娃兔,  ufqi.com/dev/gwa2 ) 的通用管理信息系统应用软件,具有可配置的输入和输出接口、开箱即用等特征。

可以在 gMIS吉米斯 上构建各种管理信息应用系统软件,例如:
内容管理系统(CMS), 客户资源管理(CRM), 企业资源计划管理(ERP),
办公自动化系统(OA)等,
也可以是各种行业应用管理系统软件,例如:
人力资源管理系统(HR),学生管理,档案管理,旅游管理,图书管理,
商品管理及业务运营支撑系统(BOSS)等等。
gMIS吉米斯 能够实现零代码开发、数分钟内快速搭建各种管理信息系统(MIS, Management Information System).

-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.
降低成本,
提高效率.

 https://ufqi.com/blog/gmis-updt-xtree/

-R/j2SS

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

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

Apache Tomcat: mod_jk 连接超时cping/cpong timeout

基于新版的Apache-2.4.46+和Tomcat-9.0.45+配置一例新的Web应用时,使用Mod_jk进行连接时,使用与之前版本相同的配置文件,各自运行起来后,Apache的JSP文件请求触发到Mod_jk并进一步地前传给Tomcat处理时,开始报错,报错信息是connection failed to backend service之类。

大致是Apache无法通过mod_jk连接到Tomcat的服务。而单独测试Apache的运行和Tomcat的运行,比如单独请求非JSP文件,或者在Tomcat的8080端口请求相应的JSP文件,均能够正常处理相应的请求。基于此,我们判断问题就出在mod_jk上,到底哪里出错了呢?

我们在 apache/conf/extra/httpd-jk.conf 中打开相应的详细日志记录。

# Our JK log level (trace,debug,info,warn,error)
JkLogLevel trace

输出所有步骤的过程记录。日志记录很快反馈回来,是无法连接到 ::1:8009 这个服务。

问题似乎一下子显现出来了。由于配置了IPv4和IPv6双栈网络地址,在一些服务层面对 localhost 的解析,可能是 ipv4地址:127.0.0.1 或者 ipv6地址 ::1 。可能由于某种原因,localhost 这个hostname在Apache的mod_jk中解析出是 ipv6地址,而Tomcat的程序中则解析出 ipv4地址。

相当于是mod_jk中的worker配置中: apache/conf/extra/workers.properties :

worker.balancer.balance_workers=node1
worker.node1.reference=worker.template
worker.node1.host=localhost 
#worker.node1.host=127.0.0.1
worker.node1.port=8009

这里启动后去连接 ::1:8009 服务, 而在 Tomcat中服务可能启动在 127.0.0.1:8009上,于是两边就这么因为ip地址的v4或者v6而错过了。问题若是如此,似乎也好解决:1)修改系统的hosts文件,修改消除主机名 localhost的歧义,只用在传统的127.0.0.1上,而针对 ::1 地址,另外命名为 localhost-ipv6;或者2)在Apache和Tomcat的配置文件中,不再使用主机名,都使用明确而具体的IP地址。 经过一番折腾,我们消除了 localhost的歧义,只指向 127.0.0.1, 同时在 Tomcat/conf/server.xml 中:

<Connector protocol=”AJP/1.3″
    port=”8009″
   address=”127.0.0.1″
   redirectPort=”8443″/>

也做了具体的IPv4地址的指定,这样按预期应该是能够连通的。
果然,经过这么一番操作,mod_jk不再报错说无法连接  ::1:8009 或者 127.0.0.1:8009的错误,但依然无法进行连接! 新的错误结果依然是 connection failed to backend service…. in error state or wrong port….

与此前所不同的是,这次明确显示出了 socket connected,连接已经被创建,不再是网络层的问题。这次的错误,增加了 timeout during cping/cpong …. ,根据这些新的报错信息,继续依靠搜索引擎的帮助,挖掘相关信息。
果然,已经有同学遇到类似问题,原来是由于 新版的Tomcat默认启用了新的配置,但未能在日志信息中给出具体而明确的指示。

-R/v2SS ) There was a change in Tomcat last year (from version 8.5.51 and version 9.0.31), which introduced a secretRequired attribute to the AJP connector with a default of true (cf. documentation). Hence you can either:

  • add a shared secret between the AJP connector and mod_jk

  • or add secretRequired="false" to the AJP connector.

直白地说,Tomcat-9.0.31+, 默认启用 secretRequired=true, 但在相应的样例配置默认设置中却没有提及。而且在错误日志中也没有提及是由于secretRequired的问题。要解决这个问题,就需要手工配置:1)增加一个共享的安全key在 AJP和mod_jk之间, 或者2)通过在AJP设置 secretRequired=false,停用这个功能。

奇怪的是这个AJP默认启用了secretRequired=true, 而 mod_jk 则是默认不启用,设置 secretRequired=false,两边自然就无法进行通信。遗憾 这样的错配,在软件层面发生了,而在错误信息里也指代不明,应该在后续予以修正。

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

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

一种便宜的数字化阅读的印版格式

新近在 有福常在(UfqiLong, https://ufqi.com/news/mod.ulong.html ) 转录一些中国传统经典作品(已进入公共版权)时,发现对传统作品的排版印刷,依然是较传统的版式。

这传统作品的版式,通常为一大段文字,其中夹杂有各种标点符号。密集的大段文字裹挟着各样的标点符号,这种版式的形成,可能有多种因素。最初,可能中文印刷等没有标点符号,一篇文章就是从头到尾的一串串字符。阅读及断句非常困难,好在当初这种制作也非常昂贵,小众,曲高和寡。

及至后来,有了低成本的印刷和功能丰富的标点符号,中文书籍才走入寻常百姓家。作为文化的载体,书籍在教化的同时,也承担了一部分娱乐的功能。如果从娱乐的角度去看,目前这种大段文字的版式,尤其是在电子屏幕上呈现出来,让人有种窒息的“密集”。

为改进 有福常在UfqiLong 的阅读体验,我们尝试使用一种新的,较便宜阅读和使用的版式对传统经典作品进行改版。比如我们将《红楼梦》( https://ufqi.com/news/ulongpage.1354.html )的章节改版成如下,将《金瓶梅》( https://ufqi.com/news/ulongpage.2186.html )的章节也取样如下。


UfqiContentFormater 改版红楼梦章节示例


UfqiContentFormater 改版金瓶梅章节示例

通过对上图左右改版前后的对比分析,直观感觉左侧传统版本很规整,通常一段较长,里面内容较丰富。右侧是使用 UfqiContentFormater进行改版后的效果,可以看得到,单个段落变短,段落数变多,行文句子不再那么工整,反而有些杂乱。然而下脚读进去,却是更容易切入,启停转合,更舒缓些。不会让人一口气读不下来,喘口气找不回歇点的“累”。

现在一些年轻人不爱读书,尤其是中规中矩的大部头,反而喜欢一些短小浅显的漫画、影视剧等,原因可能多种多样,其中之一或与版式沉闷,读起来“累”有关。
同样是经典电影,《十二怒汉》( https://ufqi.com/news/clscpage.1039.html )让普通观众看起来就有点“累”,单调的场景、严密的逻辑、环环相扣地推理,这些都需要开动脑筋全情代入进去才能继续。读一本书可能比看《十二怒汉》更累的就是要把文字转为“场景”,并全情代入。而这个场景转换,一千个人有一千个“哈姆雷特”,与看电影只有导演和编剧的“千人一面”不同,这就是读书的魅力吧。

有鉴于此,我们尝试将传统作品的版式做如下形式上的改版,使之更接近于“剧本”,以便于读者进行“场景”转换。
UfqiContentFormater 有福气内容格式化要义:
1) 段落之间用空白行隔开(留白),让读者“歇”一眼,类似WikiSource已经这么做了;
2) 单个段落长度控制在 600 – 900 字之间,太长不方便阅读,喘不过来气,太短了又零碎得像诗歌;
3) 单行字数,希望掌握在 150 字左右,太长了就换做2行,这也呼应Twitter等消息长度限制;
4) 直接引用的语句,带双引号的,后面需另起一行,不跟更多内容;
5) 段落首行适当缩进;
6) 其他一些辅助视觉识别的修饰。

使用这些格式化操作,通常会加长页数,书籍会变厚,好在是数字化阅读电子屏幕,并不会为此浪费更多的纸张。这样的便宜阅读体验,即使多翻页几次屏幕,也是值得的;有时候甚至不是翻页,而是滚屏几下即可。


试读一下不一样的,看看是否更容易上口。

https://ufqi.com/news/ulongpage.2558.html?tit=红楼梦-63:第60回 茉莉粉替去蔷薇硝 玫瑰露引出茯苓霜

https://ufqi.com/news/ulongpage.2545.html?tit=金瓶梅-100:第九十九回 刘二醉骂王六儿 张胜窃听陈敬济


一种便宜的数字化阅读的印版格式

发表在 社会生活 | 标签为 , , , | 一条评论

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

☘ gMIS吉密斯升级:多IP-Roaming漫游改进和Cache缓存优化

“完成大事业的唯一方法,但从基本上一步一步、一点一点地做起,这是行为学所重视的一个事实。”
—-米塞斯 Mises《人的行为 Human Action》,https://ufqi.com/news/ulongpage.2014.html 

 gMIS吉密斯 作为管理后台系统软件,一直默默工作在后端,鲜有抛头露面的时机。其实gMIS也在不断的优化改进,距离上次:☘ gMIS吉密斯升级:点选Pickup2.0和安全及权限系统等,已经差不多快一年没更新gMIS Blog,趁着最近一次版本的更新,记录如下,以资参考备查。

1. 单用户多IP-Roaming漫游安全鉴权改进

网络的飞速发展使得,单网络同时用户拥有和使用多个IP成为可能,比如我们在去年就针对同一个用户同时具有IPv4和IPv6两个地址的情况进行了优化改进:gMIS吉米斯升级支持IPv4/IPv6双栈网络模式
此外,移动设备的改进和移动带宽的提升,使得移动办公——就是在行进中——成为可能,而同一个用户可能在一个很短的时间内从地点A移动到地点B,在通信层就是用户漫游过多个基站,所以其IP也会变化多端。

也就是说位移静态单用户可能有多个IP,而位移进行中的用户更有可能是多个IP,再而三的多IP多通道并发通信也日渐成熟——一次上层的HTTP请求,可能其中的Packets分别由不同的IP“同时”传送而来的。这在应用层或感知不到,但也要在未来考虑到这种情况。

回到这个单用户多IP漫游的情况,如果继续使用此前的策略,将用户从系统登录状态弹出然后请用户再登录一次,从而形成新IP下的鉴权,显然是不合适的。有没有更好的办法来实现既能保障安全,也同时降低由于多IP变化引起的频繁登录?
梳理一下面临的新情况:
1)  一个用户单地点可能同时有多个IP,如 IPv4、IPv6
2)  一个用户移动中可能访问多个基站,会经历多个IP,这些基站IP可能同时也有IPv4和IPv6.
综上,一个已登录的用户,在单一个回话期间,其IP变更将是大概率事件。

然而作为网络安全防范的主要利器之一IP在用户鉴权方面短期内看,又是不可或缺的。或许将SID视为Token来处理将是一个新思路。每一次成功鉴权之后,将已授权的SID赋予Token的含义,在后续行为中如果持有一个合法的TOken则视为合法的访问,作为鉴权IP失败后的补救措施。

借助于服务器端的缓存机制,我们设计到一种新方法,基于此可以实现在单用户多IP或者多IP漫游的情况下,使得用户能免于重新登录。该方法的思路是:
1) 维持现有登录机制不变,
2) 当用户登录成功后,在服务器端缓存用户下次鉴权的SID值,
3) 当下次用户进行访问时,如果IP没有发生改变,则使用此前的鉴权获得成功,继续,
4) 此时,如果用户切换(IPv4/IPv6) 或者漫游到新IP时,读取在服务端的缓存SID,如果是合法有效的,则视为已鉴权的用户,继续,
5) 如果使用IP未鉴权成功,也未检测到SID为合法的,则视为非法,拒绝请求并跳转到登录页面。

这个策略可以视为对去年IPv4/IPv6双栈网络模式的扩展和升级,无论后续单用户再切换多少IP,如果其持有一个经合法鉴权的SID,则可以在该SID有效期内(数分钟、数小时或者至多一天)持续使用系统服务。

如此以来,则可以继续愉快地的玩耍了。这一升级改进主要涉及到内容有:
1) class/user.class 中增加 setSidToken / getSidToken 两个方法,
2) 改进 extra/signupin: 登录成功后,调用 $user->setSidToken ,将已授权SID 缓存起来,
3) 改进 user->getUserBySession: 在访问鉴权的时候,增加对现有SID的读取,通过 $user->getSidTOken读取.

等等,这里好像又埋下了隐患,本来一把钥匙(SID)开一个门(IP),现在是一把钥匙能开很多门了,这是万能钥匙🔑吗?如果中间人攻击,获得一个已授权的SID,在别处也可以自由的使用,这显然与最早的SID安全机制设计有冲突的地方。
有鉴于此,我们将这个单一SID允许多IP的功能设置为可选项,仅在对安全性要求不高的场景下使用,或者在相对隔离的。

4) 修改 inc/config: 增加 Single_Sid_Allow_Multiple_IP 的开关,如果是 true 则启用上述功能,如果 false 则不允许。 默认是 false.
$conf[‘single_sid_multiple_ip’] = true; # lower security higher convenience if true, vice versa. 13:12 2021-03-23

从本质上说,安全与便利有很多时候需要做取舍,而技术的进步则使得两者更好地平衡。

2. Cache优化改进键值Key的设置

gMIS默认配置的缓存服务是 -Memcached, 尽管Memcached对Key的命名和取值给了很大的空间(250Bytes)和很少的限制(除空格和一些控制字符外),我们在实际使用中,仍然不会真的设定一个key为100字节的取值。
为了方便操作,通常我们认为对原始的raw string,取Md5摘要信息,这样既避免了太长,也避免了包括危险非法字符的可能。目前的写法是这样的:
return strlen($k)>32 ? md5($k) : $k;

这么写是有一定道理的,通常我们为一个缓存的Key命名时,并不会超过32个字节,这样的话,等于是人为的加长了Key值。理性一些,我们不应该对小于32的Key进行加长,所以才有了这样的设计:只对超过32字节的Key做摘要处理。
然而,实际追究起来,这里似乎也有个隐患,就是Key值如果使用 raw string的话,可能会有危险的非法字符,这可怎么好?

很快,我们在GWA2 Java( https://ufqi.com/dev/gwa2/ )的源代码中找到答案。在GWA2 Java的Memcached的缓存实现中,预留了 isSanitizeKeys 的开关,如果将 isSanitizeKeys=true, 则会对Keys进行安全地封装,从而避免了潜在的危险字符。
这一封装是基于输出安全纯字符串的 Base62x ( https://ufqi.com/dev/base62x/ )而实现的。

改进的实现方法如下:
if(strlen($k) > self::Max_Plain_Key_Length){
$k = md5($k);
}
else{
if($this->sanitizeKeys){
$k = Base62x::encode($k);
}
}

这样就满足了当raw string key太长而大于32字节时,加以md5消息摘要处理,使之输出转换为不大于32字节的Key;如果 raw string key 小于32字节时,为安全起见,使用 Base62x 消除危险的非法字符,使之输出的小于32字节的纯字符串。

顺便的,也更新了 GWA2 PHP版本的 Memcached的实现。增加使用 Base62x 加固对小于32字节的raw string key的安全处理。

3. 其他

改进了 comm/header 中对获取 User Id的程序逻辑。

优化 inc/WebApp 核心程序中的 setBy 和 rmBy 方法,向前兼容,增强对Cache的支持。

优化 inc/Config 中对 Cache Host设置的说明,如果要在Java、PHP等多个应用见共享Cache,需要用IP地址,而不是 .sock 。

其他一些细节调整。


-gMIS (general Management Information System,吉密斯) 是一种基于 -GWA2 (General Web Application Architecture,吉娃兔) 的通用管理信息系统应用软件,具有可配置的输入和输出接口、开箱即用等特征。

可以在 gMIS吉米斯 上构建各种管理信息应用系统软件,例如:
内容管理系统(CMS), 客户资源管理(CRM), 企业资源计划管理(ERP),
办公自动化系统(OA)等,
也可以是各种行业应用管理系统软件,例如:
人力资源管理系统(HR),学生管理,档案管理,旅游管理,图书管理,
商品管理及业务运营支撑系统(BOSS)等等。
gMIS吉米斯 能够实现零代码开发、数分钟内快速搭建各种管理信息系统(MIS, Management Information System).

-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.
降低成本,
提高效率.

https://ufqi.com/blog/gmis-ip-roaming-and-cache/ 

-R/12Sh

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

插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板書中自有顔如玉冰糖雪梨膏儿童宝宝砀山慈梨膏汽車老司機車載

四大名著中的神话

连日来在 有福常在(UfqiLong, https://ufqi.com/news/mod.ulong.html )读完了《三国演义》一百二十回( https://ufqi.com/news/ulongpage.1343.html  )和《水浒传》一百二十回( https://ufqi.com/news/ulongpage.1340.html )。

厚重历史背景下的各色英雄人物不停地闪现在脑海中,桃园三结义,五虎上将,火烧赤壁,草船借箭,千里走单骑过五关斩六将,三十六位天罡星下凡,一百零八位绿林好汉。也有阴谋诡诈魑魅魍魉盘旋心头久久不能散去,蒋干盗书,东吴招婿,单刀赴会,舌战群儒;柴进成驸马,吴用打卜卦,智取生辰纲,宋江装疯逃罪;曹操果真夺了张秀的媳妇,打东吴真的有心于二乔?宋江是被媳妇戴了绿帽子,勾结梁山泊好汉事发才怒气杀人?而潘金莲受蛊惑于西门庆,武松怒斩二人也无回头路?

然而感触最深的还是其中的近似神话的情节。这些故事情节,放在当今时代来看,有点像是各种科幻片中的桥段设计,用时尚的语言来形容,就是“一本正经地胡说八道”。这些神话故事,不独在三国演义,也不只在《水浒传》,更在《西游记》( https://ufqi.com/news/clscpage.1013.html  ) ,也在《红楼梦》( https://ufqi.com/news/clscpage.1011.html )。

西游记,自不用说是神话小说。满天神佛仙道,遍地妖魔鬼怪,腾云驾雾,变幻七十二端,筋斗云十万八千里,科技高度发达的二十一世纪的今天,多数技术还未能实现。由此可见,作者当年写书时的脑洞开得有多大。
红楼梦,作者写时可能就开篇言明是“满纸荒唐言”,从女娲补天说起,空空道人和渺渺真人传贾宝玉的“玉”,依然知悉是妥妥的神话故事。里面诸多捉鬼弄神的细节,也描绘地自圆其说,可谓神来之笔。

三国演义中,火烧赤壁是联吴抗曹战争中的转折点,而其中的主要要素之一就是要有大风,而恰恰这大风的来由是诸葛亮“呼风唤雨”。同样是在三国演义中,诸葛亮北伐魏国,六出祁山,屡次征战,虽然不败,也未能征服北魏以司马懿为军师的军队,收复汉室江山的夙愿迟迟不得。有一次,工于算计,运筹帷幄的诸葛亮将司马懿、司马师、司马昭爷仨围困在一个山坳里,准备起火一并烧之。
就在火起之时,待将烧了司马父子三人之际,却忽然天降大雨,不早不晚?!雨浇灭了大火,司马父子得以侥幸逃脱。
后面才有了司马懿熬到不可战胜的诸葛亮病逝,起兵灭了蜀汉,进而司马师、司马昭又子承父业学曹操的套路将曹操的孙子赶下王位,北魏亡,而司马氏晋朝立。
同样是呼风唤雨,为何在火烧赤壁时诸葛亮能借来东方烧曹操,为何在火烧司马懿时,诸葛亮不能借来大风把云彩吹走?大雨晚来十分钟,是不是就把司马懿爷仨烧掉,烧不死也非死即残了吧。神乎其技,凡人不可揣测。

至于关公关云长死后不服气,托人复生又起身掐死了东吴的仇家,而后尸首又进一步地吓着了曹操,从常识说更是离谱至极,而如果当中神话来看,则是有滋有味,畅快淋漓。如此神话故事情节,可能是后来中国传统文化遵拜关帝庙,关二爷的由来。
还有大树成精,各种神仙插手三国纷战事务,不一而就。单凭借东风火烧赤壁而成,遇下雨火烧司马懿而败两次关键战役,三国演义归类为神话小说,似乎并无不妥
似乎一直以来,中国传统都将三国演义视为历史小说,概因却有其人其事,出于文艺创作目的,加以“神化”,于是以讹传讹地滋润了中国传统文化,满天神佛仙道。

同样被视为历史小时的还有水浒传,也却有其人其事,然而全篇中也穿插了很多“神化”情节,尤其是在一些关键节点上。比如宋江杀妻后逃难,而后返乡省亲,不想被当地官府得知,自来抓取。
再次逃难中,宋江在一个破庙里里幸得神仙九天玄女搭救且赐予其三卷铁书。自此宋江如获得成功奋斗的路书一般,后面梁山泊一百零八位好汉立排位,再后面受招安,北征辽寇,平定河北田虎,淮西王庆,南征方腊过程中,危难之际,总有天书指路,或者九天玄女托梦告知。

至于各种金甲卫士受各色僧侣道长派遣参与各次反抗与压迫的战役,水浒传中则比比皆是。梁山泊有公孙胜压阵,或有不敌,还有公孙胜的师傅罗真人兜底,几乎战无不胜。据此,归类水浒传为神话小说,也似乎说得过去。

红楼梦、西游记、三国演义、水浒传中国传统四大名著都是神话小说。

为何会是这样?大概我们一直生活在一个神话的国度里,神话的文化中,神话的历史中。为何神话小说会如此流行、流传?可能受限于科技水平的不发达,自然科学未兴起,社会教育蒙昧,人群混沌未开,人们读得此书,信以为真,并四处传开。
往来已久,形成当今中国之迷信重重的文化和社会。

更有可能的是,社会压抑良久,在世俗社会中,真相被蒙蔽,真话被禁闭。群体或默然,或脱口于神仙鬼怪胡言乱语,是非已不重要,逻辑也无关系,只是情绪的表达,心迹的流露。
循序渐进,虽说是历史事实、人情世故,却也要蒙裱上光怪陆离的神话情节,顾左右而言它才能穿透压制,抵达民众。虽说是悲戚典故、丧良辱节,却仍信恶霸头顶九天之上有座座全能大神,俯瞰芸芸众生,善恶终有报,只要时候到,聊以自慰,权做谈资。

三国演义中曹操不满董卓擅权专政把持朝廷,当曹操干掉董卓后自己却“挟天子以令诸侯”,啪啪打脸;
曹操虽至终未走逼天子退位自立年号之路,其子却不满为魏王,逼天子退位,改朝换代;及三世后,新晋强人司马昭有样学样逼曹氏天子退位,改朝换代,啪啪打脸;

水浒传中宋江等梁山泊好汉因不满奸佞臣子当道而替天行道,笃信皇上还是好皇上,秉持忠义,一番番血洒疆场,终是受了招安,一场场建功立业,到头来宁为“臣子”,活成了自己讨厌的模样。
可悲的是,宋江等人口口念念痛恨四大奸臣,最终却死于其联手谋害。一场梦,一场空?

强权不是路子,强中更有强中手,此一时彼一时也。忠义不是办法,与虎谋皮反成盘中餐,鸡同鸭讲理不通。
奥地利学者米塞斯在成名作《人的行为》中描述:“一国的舆论,在意理上可能分裂到没有一个集圑坚强到足以建立一个长期政府。这时,就陷于无政府状态。经常有革命与内战发生。”。

这个意理大概是说思想文化的意思。无论是三国演义的秦汉时期,还是水浒传的唐宋年代,根据小说来看,我们的意理都是在讲神话。假以神话故事传说,他们似乎在说明一个浅显而又深邃的道理:纳税者和吃饷人必须真实平等共处。
恰如当年明月畅销书《明朝那些事儿》中记述,起义军拉一支队伍,成型后首要解决的问题是军费消耗,无论是靠抢掠,还是靠当地百姓供养,这么做又都与前朝社会现状无异。
轮回交替城头变换大王旗。哪里有压迫,哪里就有反抗,大道至简。

发表在 社会生活 | 标签为 , , , , , | 2条评论

山羊绒围巾女冬英伦百搭围脖双面格子加厚保暖披肩迪士尼母婴显白黑茶色蓝黑色板栗色三元牛奶