长治久安之本与繁荣昌盛之道

进二十年来,开这个Blog网络日志,很少写政论文章。专业不搭,也无所积累,所以能写的主题大致都是计算技术相关的,偶尔也会夹杂一些生活随笔。虽然也有一些历史杂记,多几篇都是读着觉得不错,就转载来了共享之。这次打算开一个较为宏大的题目,写写对国家社会宏观层面的一些感性的认识。所谓处江湖之远,忧庙堂之高,以期有后进小生在参政议政之前,能够读到,大家多一些共识,少一些分歧,善莫大焉。

促使我动笔斗胆写这篇的,还有下面这一笔要记录下来。2022年8月2日,在几十万人的瞩目和网络跟踪下, 美国众议院议长南希佩罗西的专机22:40分按预期顺利降落在台湾台北松山机场。原本叫嚣着一旦南希佩罗西的飞机试图进入或者降落台湾台北,中国政府将使用武力战斗机伴飞或者将她的专机驱逐驱离或者击毁击落,并没有出现。
“玩火自焚”、“搬石头砸脚”、“后果自负”、“拭目以待”各种嘴炮战足足喧嚣了半个月,然而时间到了之后,一切都没有发生。美国说到做到,议长访台就去访台,而中国政府除继续发新闻稿“严正抗议”外,再无实质作为。一时间滑天下之大稽,颜面尽失。诚如满清名臣左宗棠所云:“说硬话,办软事,实乃误国之贼也”。
尤其国内民众对“中美开战”事件,高度关注,微博平台 weibo.com 一度因此大流量冲击而崩溃宕机,这是流量高峰期的春节晚会期间都不曾有的网络故障。(后经多方信源披露,此次站点及应用崩溃,是主动关停进行舆论控制的行为,非是流量太大而不足以承载。)

人类社会发展文明进步,从原始狩猎,到发明和制作更多工具得以筑屋定居、驯养动植物,从而完成原始社会向农业社会的转变。在漫长的几千年的农业社会发展中,借着蒸汽机的发明和创造,人类从牛耕人织的农业社会迈入工业社会。
在知识的传播、思想和科学技术的大道上,人类发现了电子,创造了电力,从而实现了从蒸汽工业时代迈向电子电气化时代。
电气时代后期,人类又一次发明创造了信息社会,万物互联,地球村形成,全球一体化、大一统,势在必行。
这个简短的人类社会发展过程中,起到决定性作用的始终是发明创造和使用工具,是科学技术。科学技术的发展,其先导往往是思想和文化。思想和文化引领着科学技术的发展,科学技术又反向推进着思想文化的进步。

现当代的科技发展史已经证明,只有在自由的无拘无束的思想氛围中,发明创造才能成为可能。发明创造首先是在思想上没有禁区,可以天马行空、肆无忌惮地空想、假象和幻想,然后依据现有的科学理论和技术工程条件去验证、去应用、去转化。
或者可以较保守地说,越是自由散漫的思想环境和社会氛围中,发明创造也就越是积极活跃丰富;反之,越是压抑钳制的境况下,发明创造也就越是消极低微稀落。
在思想封闭文化愚昧的地区或时代,以科学和技术为代表的生产力也是低下的;相反,在思想逐步开化或者文化稍微宽松多元的地区或时代,生产力会随着有明显地进步与提升。
我们的读历史,或者生活直接感受,能够发现,现在社会发展的“日新月异”的速度,比之前一代或者几代要快的多得多。

自由的社会环境的获得并不会天生的,而是需要处心积虑地创造。这可能源于我们作为人的本性,在生物系的食物链的顶端,我们的基因里似乎早就写死了要控制、要把握、要征服。而自由社会往往需要让步、要容忍、要妥协。人可以去征服一座高山,攻克一个科学难题,但不能征服、控制另外一个人;同样地,一群人可以填海造山,上天入地,但不能征服、控制另外一群人。

当我们人类在生物系抵达食物链的顶端时,对手已经只有我们的同伴了。是尊敬对手和谐共生,还是彼此搏杀你死我活,两种不同的选择就演化成了自由社会和专制社会,私有制社会和公有制社会,民主共和社会和君主独裁社会。这种差别同时也体现在强调个体权利的右派和强调集体利益的左派之间,也体现在是人权大于主权,还是主权大于人权的回答上。
专制社会与自由社会是有天生的“不共戴天之仇”。这主要取决于两方面的原因:
1. 专制社会的本身的排他性和对权力的无限贪婪 ,
2. 民主社会对专制社会的掐尖与收割。

专制社会排他性——一神论的政教合一

几乎所有的专制与极权社会都需要控制舆论,通过对舆论的控制,消除不同政见,消灭不同思想、文化,实现对人的思想的集中统一的控制与管理。所谓“洗脑”,是一个很形象的说法,不允许众说纷纭,只能一个核心思想、一种声音腔调。凡是与之不同的杂音,都需要消除,而且是肉体的消灭。
这种认识和行为,不但在政权内部、领土之下是如此,打开国门放眼全球,专制独裁者也看那些人畜无害的民主社会个个都不顺眼,乱七八糟的人,乌烟瘴气的事——世界人民始终处于水深火热之中。这些林林总总在急于扩大自己的领土征服更多臣子的祸心下,一副世界大同人类救世主的面目出现在国际社会的舞台上,表面光鲜、辞藻华丽,无论是看起来,还是听起来,都很蛊惑人心。

无论是家里有矿,还是通过某种生意,专制独裁政体一旦获得了一定的经济发展,必然将触角伸向外部世界,攫取更多的领土和奴隶。这是对权力具有无限贪欲的领导集体的毕生追求,也是维系这个专制独裁整体继续运转下去所必需的。
尽管每一个专制独裁政体的实质都是纸老虎,但就一时一地来说,世界往往拜服于它的淫威之下。一是它总是通过宣传系统把真实问题掩盖的很密实,二是它得以立足的军事武力在一定程度上让人无法直视。尽管随着时间的推移,专制独裁社会没有或者较低频次的发明创造,专制独裁政体基于科技力量的军事武力会逐日退化、弱化,但由于密不透风地宣传管制,外界只能凭空猜测。
尤其是,当面对诸如民主社会这种对手时,要大多数民众投票决策,大众看到和听到的都是专制独裁社会外表多么的光鲜,现在让我们去跟它开战,把握有几成?
不到万不得已,人畜无害的民主社会是不会去主动开战的。

所以,专制独裁政体害怕的不是民主社会,它的真正的敌人是另一个专制独裁社会。如同两个黑社会团伙一样。另一个专制独裁社会可能在外部的另外一个地区,也可能是在内部的某个团伙,多数情况下,专制独裁社会会被另外一个专制独裁政体社会吞吃掉,或者内部的另外一个团伙取而代之,循环往复。整个氛围就是丛林发展,弱肉强食,成王败寇。
除非它得到民主社会的接管与救济,经过漫长的过度与成长,逐渐蜕变为民主政体社会。

民主社会对专制极权政体的人才掐尖与财富收割

民主政体社会,可以用人畜无害来形容的,源于她的决策是公开而透明的,允许思想文化的多元,允许众说纷纭,莫衷一是,乱七八糟,乌烟瘴气。
“尽管我不同意你说的每一个字,但我尊重你说话的权力。”
自由社会对个体的无限友好,持续地吸引着所有人的目光。只此一点,自由社会便有了对专制社会悄无声息地“打击”——专制社会精英人群持续移民出,社会财富持续流出。

人群的觉醒,良知的启蒙,对自由的向往,专制社会顶尖精英人才持续流向自由社会。
互联网络的普及与发展,极大地促进了信息的流动的速度与效率。越来越多人的可以较低成本轻易地获取事实或真相。基于正确的逻辑推理和事实与真相,越来越多人会逐渐觉醒,逐渐对基于公有制的专制独裁社会的失望,直至彻底抛弃。
而且越是受教育年限长、受教育层次高的人群,对基于公有制的专制独裁社会越是更早地认识到其与人类文明社会发展背道而驰,与普世价值格格不入。

于是一些个体,在某个顿悟的清晨,开始选择用脚投票计划肉身翻墙——移民。这类人通常都是具有一定知识储备和科学素养的人才,而且同时具备一定的财富。如果类似的人群日渐增多,无疑对专制独裁政体来说,是一种千里之堤溃于蚁穴式的损害。
历史上,太多类似的例子,尤其是近现代,精英人群不断涌向自由社会是不争的事实。而且即便是专制独裁政体的主要领导者,也会考虑在自由社会为自己谋划后路、退路。
这背后的原因,既有良知的启蒙、认识的觉醒,也有对公有制的失望,对自由社会的向往。

有恒产者有恒心,无恒产者无恒心。专制体制个人朝不保夕,社会财富不断流向自由社会。
专制独裁社会的立根之本是公有制,也只有如此其才能立足。
只有将所有生产生活资料都“公有”——归属于某一级权力所有者之后,其他人才会因为失去所有赖以生存的生产生活资料(土地、资本等),而不得不像奴隶一样依附于权力所有者,以期获得必需的生产生活资料。
尽管随着人类文明整体的进步,专制独裁政体做出某种媾和与让步,允许奴隶小量或局部的拥有一些非必需生产生活资料,但也伴随着高压恐吓政策,宛如一把悬在头顶上的利剑,随时劈向那些拥有私产的奴隶。

所谓上有政策下有对策。在看清了专制独裁社会的本质之后,精英人群,不管是专制独裁社会中的奴隶,还是参与其中的“奴才”——各级管理者,都逐渐总结出一套从专制到自由的成功之路。而且这一成功模式是可以复制,也不断地在被复制和传播中。
从专制社会到自由社会的个人成功模式:
1.努力学习——2.出人头地——3.赚取权力或与权力媾和——4.权力变现为金钱财富
——5.设法转移财富到自由社会——6.肉身移民——7.颐养人生

这对专制独裁来说,几乎是一种釜底抽薪式的打击,日久天长,再丰富的自然资源和社会财富,也会被这种蚂蚁搬家式的财富转移给掏空挖净。曾经的帝国荣耀最后只剩下白茫茫一片,一地鸡毛。

至此,专制独裁社会自创立第一天起就开始衰落,出道即巅峰。背后的原因是:
1. 扼杀异见,扼杀创新,从而消灭或者基本消灭发明创造,基于科技的生产力不增反减,开始逐日下滑,军事武力随之式微;
2. 自由社会不断地吸纳专制社会的人才,抽取其财富,专制社会不断地沦为明白事理的统治层和不明事理的暴民奴隶。而明白事理的统治层又各自在自由社会谋划自己的退路和后路。

如果没有自由社会的救济,专制社会中的统治层会逐渐转移到自由社会,专制社会最终会只剩下一群暴民奴隶,他们中彼此会继续厮杀,产生新的统治层;新的统治层继续在吸取财富后人财一并转移到自由社会;剩下的暴民奴隶继续彼此厮杀,产生下一代新的统治层, …. 循此往复。
生活在暴民努力中的人群,像打怪升级的斗争一样,在精致的利己主义下,披着天下为公的外衣,努力赚钱赚学分,争取早日从专制社会毕业,升级转身到自由社会中去。
没有自由社会的救济,专制社会可能是长夜一千年、一万年,永无天亮之时、光明之日。
而自由社会的人群,除了同情恻隐之心,有何动力去解放救济他们呢?

只有一种可能,某个专制社会的统治者权力欲望无限大到要领导世界时,就会动手去“解救”某个自由社会。这个时机,就是自由社会反向救济专制社会的良机。
如前述所言,专制社会尽管表面上光鲜亮丽威猛刚毅,实则是纸老虎,但独裁者信赖下面人一直报来的好消息,以为真,就会膨胀到动手开战。实际上,没有发明创造基于科技的生产力逐日低下,低下的生产力是无法造就强大军事武力的。
一动手就露怯,无论是军事武力,还是国力财力,专制社会都无法对抗自由社会,这也是全人类的希望所在。
我们也殷切希望,在每一个被动出击的时刻,自由社会能击败独裁者,彻底地将一个专制社会救济成自由社会。
如此善莫大焉。
长治久安之本在于容忍异见、尊敬对手、妥协谈判,
繁荣昌盛之道在于鼓励创新、保护私产、捍卫人权。

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

卡布奇诺咖啡奶香咖啡粉纯色吊带打底背心女棉质宽松搭学生性感蕾丝内衣中华人民共和国民法典调整型聚拢收副乳无钢圈大码无痕内衣

GWA2吉娃兔🐇引入PNOO关于排序字段的顺序

距离2022年06月上一篇Blog差不多过去一个月了( UfqiFina有福金融更新:JavaScript的数据类型强制等, https://ufqi.com/blog/ufqifina-javascript-tofixed/ )。

GWA2吉娃兔在研发与部署中,持续改进升级优化,日益健壮强大。近期的一个主要改进升级是在Page Navigator分页导航模块引入了PNOO关键词。
PNOO, Page Navigator Order of multiple Order-by fields, 分页导航中的排序字段的顺序。

之前的组合配对关键词 PNOB,
PNOB, Page Navigator Order By , 分页导航中的某个排序字段,
之前的组合配对关键词PNSK,
PNSK, Page Navigator Search Key, 分页导航中的搜索字段,
之前的组合配对关键词OPPNSK,
OPPNSK, Operator of PNSK, 分页导航中的某各搜索字段的操作符.

问题的背景是,当我们使用 GWA2中的Page Navigator模块通过地址栏的请求参数进行数据库SQL查询语句的组装时,除了使用构造条件的 PNSKxxx=yyy 这样的关键词, OPPNSKxxx=yyy 这样的操作符,还会使用到 PNOBxxx=0|1 这样的条件来设置查询结果的排序。相关参考: GWA2吉娃兔🐇升级增加搜索模糊语法支持, https://ufqi.com/blog/gwa2-fuzzy-search/ 。

PNOBxxx=0|1 会最终映射到数据库SQL查询语句中的 order by xxx 。 由于地址栏请求的参数是以Hash列表方式从客户端传递到服务器端,所以当有两个以上的排序条件时,Hash列表的数据并不能区分出先后关系来。相反地,在数据库SQL语句中, order by xxx, yyy 和 order by yyy, xxx 是有明显先后顺序区别的。前者是针对结果集先按xxx进行某种排序,然后在这个基础上再按yyy进行排序,后者则刚好相反。

如此以来,GWA2吉娃兔的Page Navigator需要某种机制,在处理多个排序条件时,确需知道这些排序字段的先后顺序。鉴于Hash列表数据无法确保先后顺序,我们考虑引入一个新的关键词 PNOO 来完成这一任务。
在前端地址栏发起请求时,如果指定了多个排序条件,需要额外地通过 PNOO来指明这些排序条件的先后顺序,也即,
pnobfielda=1&pnobfieldb=0&pnobfieldc=1&pnoo=fielda,fieldb,fieldc

这各请求将构造一个如下的SQL排序语句,
order by fielda desc, fieldb, fieldc desc

如果不启用 pnoo 参数进行指定顺序,则Page Navigator按Hash列表默认的顺序执行,向前兼容所有版本。
目前,这一优化改进已经在 GWA2 Java 和 GWA2 PHP 中实施,在随后的版本中,开发者可以调用PNOO来设置在多个排序字段条件下的各个字段的先后顺序。
在代码层面的实现逻辑是,在mod/PageNavi.class 中的 getOrder 里,增加先检查当前请求是否包含、预设了 PNOO, 如果没有预设,说明是之前的老旧版本,不支持新功能 PNOO,排序按默认顺序执行。
如果检测到包含、预设了PNOO,则说明是新版本,有对PNOO的支持,进一步地拆解出带顺序的排序字段,然后顺序执行、安排排序字段的升降设置。

题外1.
实际应用开发中,多个排序条件同时使用的场景并不多,而且其效果也并不明显。比如按价格排序之后再按重量排序,或者反过来,按重量排序之后再按价格排序,这样的结果集与只使用其中一个排序条件来看,差别并不特别明显。细微之处只在于价格相同时,再看重量的大小。多数情况下,价格与重量是正相关或者负相关很强的两个字段。大概只有在两个不相关的排序字段组合下,效果才会明显一些。

题外2.
数据库SQL查询语句 order by 有时候需要按条件地组合排序字段,比如根据数据的状态字段决定排序是按Id、状态本身、创建时间或者更新时间等。例如,

… ORDER BY
CASE
WHEN ali.LIVE_STATUS IN ( 0, 1 ) THEN
ali.LIVE_STATUS
END DESC,
CASE
WHEN ali.LIVE_STATUS = 3 THEN
ali.LIVE_START_TIME
END ASC,
CASE
WHEN ali.LIVE_STATUS = 2 THEN
ali.CREATE_TIME
END DESC

题外3.
始于2022年02月24日俄罗斯侵略乌克兰的战争还在持续,好消息是英勇的乌克兰人还在顽强地抵抗入侵者,国际支援与志愿军还在源源不断地涌入抗战一线,坏消息是乌克兰实际上丢失了一小部分边境领土。叠加上英国首相约翰鲍里斯因幕僚诚信问题被迫宣布即将下野,日本前首相安倍晋三因不明原因在竞选演说中遇袭身亡,民主自由世界蒙受了极大的损失,遭遇到巨大的挑战。
道长且阻,行则将至。

除了键盘侠打嘴炮,我们还可以真金白银地支持发生在乌克兰的自由与奴役相对决的反侵略战争。捐助乌克兰网站: https://u24.gov.ua/ .

题外4.
如果一切顺利,yoyo将完成初中学业,从东北师大附中朝阳学校以优异成绩毕业,荣获北京市三好学生称号,即将在2022年秋天入读清华大学附中朝阳学校(高中校)。
Hanu将毫无悬念的从二年级结业,在2022年秋季开始小学三年级的打怪升级之路。

全文首发地址: https://ufqi.com/blog/gwa2-pagenavi-pnoo/ , -R/x12Sc


GWA2吉娃兔

-GWA2 吉娃兔 是”通用网络应用架构( General Web Application Architecture, https://ufqi.com/dev/gwa2/ )”,基于 -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, online medical services, online teaching, 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 Native App, 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
轻松启动, 快速产出.

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

防晒衣女2021新款夏季韩版晴山蓝 小米合约机 移动用户卡布奇诺咖啡奶香咖啡粉纯色吊带打底背心女棉质宽松搭学生性感蕾丝内衣

UfqiFina有福金融更新:JavaScript的数据类型强制等

UfqiFina有福金融基金板块提供了一种查询证券投资基金的模拟K线图的方法。

在证券数据的K线图(蜡烛图)的绘制时,我们选用了第三方JavaScript类库HighCharts中的HighStock组件。在应用HighStock时,我们遇到一个值得讨论的关于JavaScript数据类型的问题,记录如下。

1. JavaScript的数据类型强制问题

问题的描述如下。我们尝试在UfqiFina有福金融的K线图中增加一个未来的预测值,以此来帮助调用者判断和分析未来的走势,按当前的变动幅度,如果是看涨会是什么情况,如果是看跌会是什么情况。

https://ufqi.com/index.jsp?mod=financefund&act=fundChart&icode=164906&dataTimeType=weekly&predictType=1&tit=理财服务所

fig1. 基金K线图:交银中证海外中国互联网指数-164906价格行情-UfqiFina-20220615UTC+08-看多涨

依靠过往近期数据计算未来时间节点预测值是一件简单的事情,相当于计算过往数据点构成的一条斜线的斜率。使用JavaScript来做计算,默认是Float数值,遇有小数点时,可能带来非常多的小数点,如同在 MDN的描述一样,
The JavaScript Number type is a double-precision 64-bit binary format IEEE 754 value, like double in Java or C#. 

比如一个普通的计算可以生成, 0.1234567890123 这样的数据。为了便于减少小数点,我们尝试使用 toFixed / toPrecision 函数来进行约束,经过实践,我们发现 toFixed / toPrecision 的返回值不是 Number ,而是String.
The toFixed returns A string representing the given number using fixed-point notation.
The toPrecision() method returns a string representing the Number object to the specified precision.

例如,在UfqiFina有福金融的某个基金某一未来时点的预测值 predictItem是 [123456, 1.0123456789] , 经过 toFixed(4) 之后,predictItem数据变成了 [ 123456, “1.0123”] , 当这个数据进一步地被前转到 HighStock 时, [123456, 1.0123456789] 可以被正确地绘制出来,符合预期,而数据 [ 123456, “1.0123”] 则被视为非法的,被 HightStock丢弃,不符合预期。

相对折中的做法是,在采取了 toFixed 截断了小数位数之后,再次地调用 parseFloat 使之将 String-type 的数据重新变回 Number-type 的数据。
The Number.parseFloat() method parses an argument and returns a floating point number. If a number cannot be parsed from the argument, it returns NaN.

predictItem[1] = parseFloat( predictItem[1].toFixed(4) );

在软件研发中,通常使用弱类型脚本编程语言,我们不考虑数据类型,比如PHP, Perl, JavaScript, VBScript, Python等,没有严格意义上的所谓字符型数值还是数据型数值。经过上面的案例分析,我们自此也许要认真考虑,在JavaScript这样的弱类型脚本编程语言中,如果启用类似 use strict 严肃模式时,也需要认真考虑数值的数据类型(data-type)。 程序脚本任务执行时,从数值类型不敏感变成了数值类型敏感(data-type sensitive)了。

在 fig1. 中,我们将预测值显示在K线图的最右侧,图中,周线图2022Jun15调用时,我们预测出了 2022Jun20的数据,预测模式为“看多涨”(高亮红色表示选中项)。 预测模式除了“看多涨”之外,我们还提供了“看空跌”,从而更方便地展示某个被观测的基金数据如果涨,能涨到多高,如果跌大概要跌成啥样。

2. 日期及节假日的计算

证券市场的行情是高度时间敏感的。这种敏感性既表现在更新频次是秒级,也表现在对过往海量数据的处理。在时间轴上,比如K线图描绘时,就面临着是用自然日、自然周、自然月,还是使用交易日、交易周、交易月的选择。

使用自然日、自然周作为计算单位是相对容易的,但却面临大量节假日及临时停止交易的时间段;如果以交易日、交易周为计算单位在绘图时容易,但却距离人们的感受和经济社会发展相对较远。例如,即便是节假日,其他经济社会主体还是会有交易发生、有发展推进的。

折中的做法就是以自然日、自然周为计算单位,同时兼顾交易日和交易周。这就面临着要计算某一自然日、自然周是否有交易,或者某个交易日归属于某个交易周。
如此以来,情况就变得稍微复杂一些,涉及到历法的各种推算。

在UfqiLong有福金融中,日期的计算既有在客户端绘图时的JavaScript算法,也有在服务器端计算分时段收益率的Java算法。根据分析,我们发现如果锚定日期中的周五Friday这个时间点,并分别计算当前交易日、交易周与前一个周五的时间差,如果时间差在七天之内,说明是在一周之内,如果时间差在七天之外,说明已经出离了一周。

这样在遇到节假日等非交易日的情况时,就可以根据前一个周五的时间戳和当前的时间戳,分析出前一周或者本周有0个,1个,2个,3个,4个,还是5个交易日,从而得出本周的涨跌幅。

原文首发: https://ufqi.com/blog/ufqifina-javascript-tofixed/-R/n2SQ


有福金融UfqiFina : https://ufqi.com/finance

有福金融 是一个旨在促进财富稳步增长的工具平台。
UfqiFina is a platform of tools designed to promote wealth growth steadily.

发表在 服务器运维, 编程技术 | 标签为 , , , | 2条评论

防晒衣女2021新款夏季韩版晴山蓝 小米合约机 移动用户卡布奇诺咖啡奶香咖啡粉纯色吊带打底背心女棉质宽松搭学生性感蕾丝内衣

Hanjst🙋汉吉斯特:更新升级+asyncScripti等改进

Hanjst🙋汉吉斯特 上一次更新已经是半年多前的事了,这期间随着研发工作的推进和在新项目新场景中的更多部署,她也随着进行小步骤地改进和升级,兹一一记录如下,备查。
始于2022年2月24日的俄罗斯侵略乌克兰的战争,也差不多持续了四个月了。英勇的乌克兰公民仍在顽强而奋勇地抵抗,尽管在我们写这篇日志的一天中,他们又有差不多100多位战士牺牲在卫国战争的前线!向乌克兰的坚守、勇敢与正义致敬!

Hanjst🙋汉吉斯特 历经五年来的发展与迭代,已经逐渐成熟稳定,并在多个关键应用及场景中表现优良。近期的主要Bug修复和改进主要内容如下。

1. 改进对注释行的处理函数 _remedyMemoLine

如前文所述对JavaScript代码中的注释行和HTML中的注释行的处理是我们关注的重点之一( Hanjst汉吉斯特与龙书编译原理 , https://ufqi.com/blog/hanjst-imprv-202111-with-memoline/ ),也是容易导致Bug的地方,这次改进之一也是关于注释行的处理。
比如针对JavaScript代码中的注释行处理,其中的注释标志是 // 而在程序代码中,常量字符网址的写法中就有类似 http:// , 所以需要额外的代码来进行这样的异常处理。

true && (segStr.match(/[a-zA-Z0-9-]+?.[a-zA-Z0-9-]+?[:]*/gm)
&& (segStr.indexOf(‘ ‘) < 0 || segStr.indexOf(‘/’) > -1)
and true) …

2. 改进条件表达式的行内式处理

Hanjst🙋汉吉斯特 支持行内表达式(内联)方式书写模板表达式。一些特殊字符需要做转义,以区分 Hanjst 表达式和原生的 HTML表达式,如 HTML的语句起始字符< 和终结字符 > , 当使用行内表达式(内联)方式时,需要将大于号和小于号转义为 &gt; 和 &lt; .
这次改进是针对行内表达式的更复杂语句的支持。

3. 新增 asynchronous Scripts 处理的计数器 asyncScripti

Hanjst 支持模板之间的嵌套,同时也支持在被嵌套的子模版中进一步地引入JavaScript或者CSS等文件,这些文件的引入方式,其中CSS依靠浏览器本身,Hanjst处理相对简单。而JavaScript的在子模版的引入方式,处理相对复杂。子模版中引入JavaScript主要依靠 appendScript 来实现。其中又进一步地的区分,引入的JavaScript是同步还是异步,如果是异步引入JavaScript,可以优先尽快地完成当前页面的绘制。

异步地引入JavaScript主要依靠在调用 appendScript 时,使用 window.setTimeout 方法来推迟对 appendScript 的调用时机,延迟一个时间窗之后再执行相应的对待引入方法的执行。以此来实现异步地引入更多的JavaScript,而同时又能够相对快的加载当前模板页所需第一屏展示的内容。

子模版(内嵌模板)中被异步引入的JavaScript文件,理论上来说应该是没有先后顺序关系的,因此在同样是异步加载时,我们之前的做法就是给每一个这样的脚本程序分别分配一个等量范围内的随机数等候时间,比如默认的 100~200毫秒. 这种处理方式,在绝大多数情况下,都是行得通的,通常也以脚本在模板文件中的先后顺序,顺延相应的时间后,一一地被执行、被引入。

但在另外一个苛刻的情况下,比如需要严格限制或者要求被引入脚本需要明确而精准的先后顺序时,就可能由于脚本没有按预期顺序地进行加载而出错。实际的案例如第三方图表JavaScript类库 HighCharts 中的 HighStock ( https://www.highcharts.com/demo/stock ),当更进一步地引入 indicators.js rsi.js 或者 wma.js时,如果按目前的 Hanjst 写法,可能由于后三者的加载顺序问题导致页面程序报错。

Hanjst的改进措施是引入 asyncScripti 参数,将每一个异步加载的JavaScript脚本文件都赋予一个顺序号码,相应地,在执行window.setTimeout时,依据asyncScripti 的序号大小,给与不同长短时间的等候时间,以此来映射在原生模板文件中的被引入文件的顺序。
由此,依据asyncScripti的控制,可以确保前一行引入的JavvaScript文件一定会在后一个被引入的JavaScript之前被执行,被引入。

改进前:
‘parseInt(Math.random()*1000+500));’);

改进后:
‘parseInt(Math.random()*100+’+((asyncScripti++)*100)+’));’);

使用改进后的处理程序,使得每一个被引入的JavaScript以每个间隔100毫秒的步骤顺序加入到待处理队列,同时通过Math.random进一步增大0~100毫秒的延迟,从而每个被引入的JavaScript的实际间隔在 100~200毫秒之间。

改进后的 Hanjst 经过实测可以兼容此前版本的应用环境,也可以很好地解决HighCharts stock相关JavaScript类库的带有时序要求的程序文件的引入。
Hanjst 再一次地成功进化。


除了键盘侠打嘴炮,我们还可以真金白银地支持发生在乌克兰的自由与奴役相对决的反侵略战争。

捐助乌克兰网站: https://u24.gov.ua/

银行捐款账号信息:
(USD) US Dollar
BENEFICIARY
National Bank of Ukraine
BENEFICIARY BIC
NBUAUAUX
BENEFICIARY ADDRESS
9 Instytutska St, Kyiv, 01601, Ukraine
ACCOUNT NUMBER
804790258
BENEFICIARY BANK NAME
JP MORGAN CHASE BANK, New York
BENEFICIARY BANK BIC
CHASUS33
ABA 0210 0002 1
BENEFICIARY BANK ADDRESS
383 Madison Avenue, New York, NY 10017, USA
PURPOSE OF PAYMENT
for ac 47330992708


Hanjst
Hanjst 汉吉斯特 Logo

🙋Hanjst汉吉斯特 是一种基于JavaScript的模板语言及模版解析引擎,她运行在客户端或服务器端。

🙋Hanjst汉吉斯特 能够表述逻辑控制,能够实现与服务器端模版语言相同的强大功能。

  • Hanjst当完全在客户端解析时,节省服务器端计算资源;
  • Hanjst模板语言独立,不与服务器端资源做任何绑定;
  • 纯粹的MVC,层间数据用JSON格式传递;
  • 常见模板语言功能全支持,附带复杂而强大的JavaScript编程能力;
  • 无学习成本,直接使用JavaScript书写模板语言;
  • ….

Hanjst is a JavaScript-based templating language and parsing engine that runs on both the client-side and/or server-side.

Hanjst can express logical controls and achieve the same functionalities as the server-side templating languages.

  • Hanjst’s Run-time in client-side, reduce computing render in server-side;
  • Hanjst is Language-independent, not-bound with back-end scripts or languages;
  • Totally-isolated between MVC, data transfer with JSON;
  • Full-support template tags with built-in logic and customized JavaScript functions;
  • No more tags languages to be learned, just JavaScript;
  • ….

全文首发: https://ufqi.com/blog/hanjst-asyncscripti/ , -R/P2SV

发表在 -Hanjst/-汉吉斯特, 编程技术 | 标签为 , , , , | 留下评论

驱蚊杀虫气雾喷 杀蚊喷雾自然之宝小粉瓶美国进口软糖促进胶原蛋白合成美颜护甲护发水果糖多功能插线板家用带线插座面板台灯丝袜防脱丝天鹅绒

电影最长的一天The Longest Day观后感

《最长的一天》(The Longest Day)是一部黑白胶片老电影,又名诺曼底登陆。她描述了第二次世界大战中后期同盟国军队集结主要精锐力量从西线英格兰东渡英吉利海峡,登陆到被轴心国德国占领的法国西海岸。这场战役主要发生在诺曼底海岸,所以电影名字也叫做诺曼底登陆(Normandy Landing),在盟军中行动代码叫做 霸王行动(Operation Overlord),也有称之为 D-Day, 登陆日。本片已收录到 有福经典UfqiClsc: https://ufqi.com/news/clscpage.1098.html?tit=最长的一天 The Longest Day 。

这一战役是整个第二次世界大战的重要转折点之一,盟军从此由战略防御转为全面进攻,同时轴心国也由盛转衰,开始节节败退,直至第二次世界大战结束,同盟国取得全面胜利。以此可见,此次战役的重要意义,电影以相对写实的手法描述、记录、纪念和致敬这场扭转战局的战争。

最长的一天(The Longest Day) 抛开了宏大的二战历史背景,从一个个普通而朴实的士兵或将士的角度来展现、解读和描绘这一复杂而又庞大的精彩绝伦的对决——盟军投入300万人,德军150万人。其中一个个并不算出色的士兵或者将士,组成了一个复杂而又强大的盟军主力部队。艾森豪威尔将军作为盟军总指挥在战情分析时,并没有显现出英明果敢或者高超神勇,相反,在有限的可供选择的范围内,他做出了一个自己都不情愿的冒险——在稍纵即逝的时间窗内发起跨海峡登陆作战!
恰恰是这个违背他本人意愿或者行事风格的决定,也让轴心国敌方分析其行为模式的情报人员及指挥官都不相信在那样的条件下盟军会贸然发动攻击。世事无常,艾森豪威尔将军不情愿地妥协,也把敌方打击个出其不意,也许这就是天意吗?

最长的一天(The Longest Day) 尝试刻画的,似乎就是这样一个由普通人完成的不普通的甚至是伟大的壮举。战前准备阶段,在候场的士兵中,有一位大兵的夫人怀孕了,孩子的父亲却不是这个大兵,但他却还是很担心夫人的安危。另一位大兵,与人唠叨了半天,彼此并不熟稔,只知道他的妻子跟了别人跑掉了。尽管根据军婚保护法律,他可以发起追诉,但他还是选择了原谅她。
至于在影片开头的场景中,火头军分餐时机械地喊叫 下一位 、下一位,当一名大兵抱怨说饭餐难吃时,火头军也只是简单地怼回去说,他只是领一份薪水,做简单的饭菜而已。
再往下,吃饭完毕,候场的大兵们聚集在狭窄逼仄的空间里,唠嗑的,写信的,甚至是打牌赌博的,从某种意义上来说,完全是有组织无纪律。盟军三军将士,怎么能在军营打牌赌博,还是赢钱输钱的呢?或许这才是真实的,符合人性的。

电影没有旁白,但我们似乎能听到这些质朴的声音:只是一份职业而已,但又要做好它。宏大的叙事背景——世界和平,解放全人类——都被这些低俗恶俗的段子故事消解地无影无踪。为何导演要刻意地抹去了那些理想、信念和价值观? 是因为它们太空洞了吗?

不独这些士兵看起来平凡而朴实,甚至是低俗,作为一线将士,在前线作战指挥的指挥官,在影片中显露出的品行也差强人意。前线指挥官中,空降师的上校落地后自己摔折了腿;登陆上海滩,枪林弹雨中血肉横飞,指挥官不沾枪炮反而叼着雪茄在发号施令;其他的带着宠物遛狗的上校,拄拐杖的上校,吹喇叭的上校,这一幕幕,或是艺术化的处理,或者是为了化解血雨腥风的残酷。
有了这些元素,电影所要讲述的一切都行云流水,不管是吹喇叭的,抽雪茄的,遛狗的,拄拐杖的,这些千奇百怪的指挥官尽管秉性各异,但专业素养和职业精神都是无可挑剔的。与专制独裁的千人一面、整齐划一不同,民主自由的世界里,连最需要等级森严、纪律严明的军营中,都如此的花样繁多、参差不齐。这或许是二战取得胜利的秘诀之一吗?

类似的滑稽的场面和人物还有很多,这些猜测或许是牵强的,盟军的三军将士或是艺术化加工的。但近三个小时的黑白电影中,并不让人感到枯燥,也可疑之处,反而给人的感觉是行云流水、一气呵成。
简而言之,最长的一天(The Longest Day)是一部可以与史实并举传颂的经典电影。

原文首发: https://ufqi.com/blog/movie-the-longest-day/ , -R/k2SY

最长的一天,电影海报,诺曼底登陆,D-Day,登陆日
发表在 社会生活 | 标签为 , , , , , , , , , , | 一条评论

驱蚊杀虫气雾喷 杀蚊喷雾自然之宝小粉瓶美国进口软糖促进胶原蛋白合成美颜护甲护发水果糖多功能插线板家用带线插座面板台灯丝袜防脱丝天鹅绒

GWA2吉娃兔🐇升级增加搜索模糊语法支持

一些事情一旦开始往往无法以自己预期的方式结束。
比如始于2022年2月24日的俄罗斯侵略乌克兰的战争,入侵者原计划三天之内打垮被侵略的乌克兰现政权,没想到快三个月过去了,战争仍然没有结束。反而战争的强弱双方开始逆转。顽强的乌克兰人民英勇抵抗精神正在逐渐获得更多国家的正义支持( https://ufqi.com/news/ulongpage.3839.html?tit=一个新的小强国正在挣扎中崛起 )。显然入侵者无法以自己的预期的方式来结束这场战争。

与破坏作恶者相反,一些建设者的积极项目也是一旦开始了,就持续不断的改进、升级,消灭一个又一个bug,增加一层又一层防护,原来世界可以变得更加美好,比如GWA2 吉娃兔项目。最好的版本永远是下一个发行版本。

GWA2吉娃兔自从2022年2月份进行了多进程多线程改进升级以来( GWA2 Java 增加多线程数据共享通道 globalData, https://ufqi.com/blog/gwa2-java-multiple-threads-globaldata/ ),又陆续进行了一些优化,兹记录如下,以备查访。

  1. Page Navigator 页面浏览增加对模糊搜索的支持
    Page Navigator 页面浏览模块是所有网络应用开发中最高频使用的功能之一。我们也对此进行了进行设计和代码实现。随着多年来大量的软件工程项目实践,我们陆续开发了独有的 PNSK 和 OPPKNSK 功能设计,实现了从浏览器参数设置到数据库SQL查询语句组装的全流程支持。

PNSK , Page Navigator Search Key, 页面浏览搜索关键词,
OPPNSK, Operator of Page Navigator Search Key. 页面浏览搜索关键词的操作符.

给定页面请求参数如,&pnskfielda=abc&oppnskfielda=contains ,
将通过 PageNavi 组装成如下数据库SQL查询语句:
…. and fielda like ‘%abc%’ …

这次改进升级的包括,如果给定页面请求参数中包括了空格或者问号?/?等模糊查询的搜索语法时,PageNavi 能够识别这种语法并做进一步的处理,使之能够转化为相应的数据库SQL查询语句。

给定页面请求参数如,&pnskfielda=abc%20efg&oppnskfielda=contains ,
将通过 PageNavi ,增加对模糊查询的支持,组装成如下数据库SQL查询语句:
…. and fielda like ‘%abc%efg%’ …

对模糊查询语法的支持,最早的想法和实现是在 gMIS吉密斯的改进升级中,当初的写法为:
$gtbl->set($field, “%”.str_replace(‘ ‘,’%’,$v).”%”);

改进后的写法将使用 _parseBlank 来统一替代:
$v = $this->_parseBlank($fieldopv, $v);

在新增加的 _parseBlank 中约束了目前只针对 contains 和 notcontains 这连个 oppnsk 进行如上操作,同时也通过全局配置开关 GWA2_Is_Parse_Blank 进行控制,可以对该功能进行停用。

除了 gMIS吉密斯之外,这项升级改进,将陆续应用在 UfqiWork有福工坊 和 UfqiFina有福金融 的搜索功能模块中。

  1. 增加对传统 Base64 编解码的封装

作为编解码的辅助设施,在 GWA2吉娃兔的设计中,默认的工具是 Base62x, 她比原生的 Base64 有更好的适应性( https://ufqi.com/dev/base62x )。由于 Base62x 推出时间较新,在GWA2吉娃兔开发的网络应用中,出于对接其他老旧系统的需要,仍需要兼容传统 Base64 的编解码处理。为此,我们改进了 inc/Zeea.class, 增加了相应的方法:

inc/Zeea.base64Encode 和 inc/Zeea.base64Decode

比如,我们在新近的一个项目中需要对接 Aliyun阿里云的一个在线服务,其中的API接口中,需要封装参数,为安全起见,在API接口请求参数时,使用 URLEncode对参数进行编解码,其中的不安全字符需要做替换处理:

private String specialUrlEncode(Object value) throws Exception {
return java.net.URLEncoder.encode((String)value, “UTF-8”)
.replace(“+”, “%20”)
.replace(“*”, “%2A”)
.replace(“%7E”, “~”);
}

如果使用较新的 Base62x 来进行 URLEncode的话,则不必如此繁琐地进行多个不安全字符的替换 ( https://www.researchgate.net/publication/307786166_Uniform_Resource_Identifier_Encoded_by_Base62x )。 因此,倡议更多的开发者在面向未来的网络应用开发中,全面使用 Base62x 取代传统的 Base64 .

  1. 增加对JSON/CSV格式数据的转换处理

GWA2吉娃兔 在最近升级改进中,在 Hanjst 模板处理的服务器端,增加了两个处理格式数据的方法,分别是处理JSON数据的 json2Map 和处理CSV数据的 csv2Map . 这两个方法可以方便对外处理数据交换。

数据转换处理背后的支持类库是 Google Gson . 相应的类库包已经随着 GWA2吉娃兔打包在一起。

本文首发地址:-R/q2Sa , https://ufqi.com/blog/gwa2-fuzzy-search/ 。



GWA2吉娃兔

-GWA2 吉娃兔 是”通用网络应用架构( General Web Application Architecture, https://ufqi.com/dev/gwa2/ )”,基于 -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, online medical services, online teaching, 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 Native App, 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
轻松启动, 快速产出.

发表在 -gMIS, -GWA2, -Hanjst/-汉吉斯特, 编程技术 | 标签为 , , , , , | 一条评论

调整型聚拢收副乳无钢圈大码无痕内衣驱蚊杀虫气雾喷 杀蚊喷雾自然之宝小粉瓶美国进口软糖促进胶原蛋白合成美颜护甲护发水果糖多功能插线板家用带线插座面板台灯