🙋Hanjst汉吉斯特升级:+showImageAsync及性能改进等

自2019年元旦🙋Hanjst汉吉斯特 模板语言及其编译引擎发布,已经过去一年多了。

这期间随着 🙋Hanjst汉吉斯特 的推广应用,我们也陆续发布了如下一些更新内容:
🛠️Hanjst/汉吉斯特更新加JavaScript运行时优化等
汉吉斯特Hanjst+更新升级:error reporting, innerLoop和loadingLayer
汉吉斯特Hanjst模板语言及引擎在线文档Doc&API首发

最近又对Hanjst汉吉斯特进行了一些更新,分别叙述如下,以备查备忘。

1. 升级: 增加API接口函数 Hanjst.showImageAsync, 用于显示HTML的图片元素

1.1. 背景及问题

<img src=”{$imgPath}” alt=”” />
该语句在 Hanjst 调用之前会造成一次对服务器端不存在的图片文件 “{$imgPath}” 的无效请求。
若非服务器端做了一些基于 .htaccess 的指向,这个请求多数情况下会返回 404 错误。实际是无意义的操作,应该设法避免。

1.2. 解决思路方法
解析HTML的页面元素 <img 是由浏览器的页面解析引擎触发,因此在流程上无法阻止对 <img 的解析。可行的思路是可以在 <img 的属性src上做文章,也即给 src 一个确定的,没有 Hanjst汉吉斯特变量的值,这样在加载时,就不会有异常抛出,然后在通过某种机制,让真正的 src值重载到这个 <img 元素上去。

给HTML中的 img 元素找一个合法合理的 src值并不容易,在网上已经讨论了很多,src值如果是“” 空值(src=“”)的话,往往会导致重新加载一次当前页面作为当前img的数据源,这显然不是预期的效果,同样的,src=“#”, src=“javascript:”, src=”about:blank”,  src=”//:0″ 等等都不是很理想。

经过一番探索,我们觉得给src能够获取预期的效果的有两种思路:
A. 给予 src=”img/default.png” , 给一个默认缺省图片路径;
B. 给与 src=”data:image/png;base64,MA==” , 给与一个内容为 0 的base64图片值。

有了图片的src替代值,然后再使用 data-src 引入图片的真实的src值,通过JavaScript在页面元素加载完成后,将data-src值正式写入到当前的 <img 元素中去。

下一个待考虑的问题就是,如何调用这样一个方法或者对象,比如在 Hanjst里增加了 showImageAsync, 引用时,是写作: Hanjst.showImageAsync , 还是将这个方法输出到全局变量 window上去,写作  window.showImageAsync 或者 showImageAsync ?

经过一番思考,我们审慎地将 showImageAsync 输出到全局变量 window 上。这样在使用时,可以直接调用, 写作: showImageAync(imgId) 。

1.3. 样例

修改前:
….
<img src=”{$imgPath}” alt=””/>

修改后:

<img src=”data:image/png;base64,MA==” alt=”” id=”{$imgId}” data-src=”{$imgPath}”/>
{$showImageAsync($imgId)}

1.4. 扩展支持更多图片异步加载
图片异步加载,对改善页面在低速网络下的表现有极大的帮助。我们在 写写5G网速及页面提速中的延迟加载Lazyloadinghttps://ufqi.com/blog/5g-network-speed-webpage-lazyloading/) 中进行了描述,如果在 Hanjst汉吉斯特中默认就集成了这样的功能,或者整个 Hanjst或者整个页面的表现具有较大的帮助。

在非上述情况下的一些场景中,也可以主动引入 showImageAsync 来使得图片能够异步加载。这一点可算是额外收获,买一赠一。

2. 改进:引入局部 bracketPos 和 dotPos ,用于判断模板语言的表述

2.1. 背景及问题

1)  {$aFunc(0.2)}  –> 解析有误。

在Hanjst的语法定义中,要在当前位置显示一个变量,直接使用如下写法即可:
2) {$var}

同时这个字符和后面的表达式还可以表示更多的意义:
3) {$aFunc()} –> 执行 aFunc函数并将结果显示在当前位置;
4) {$aFunc($var)} –> 携带参数执行 aFunc函数并将结果显示在当前位置;
5) {$aFunc($var1, $var2)}  –> 携带两个以上参数执行 aFunc函数并将结果显示在当前位置;
6) {$var.substring(0, 10)}  —> 针对变量 $var 执行JavaScript原生的字符串截取函数substring,并将结果显示在当前位置;
7) {$var=1} –> 正常的 JavaScript 赋值语句,不会在当前位置显示任何内容;
8) {$var++} –> 正常的 JavaScript 字符串运算操作,不会在当前位置显示任何内容;
  
然而,针对表达式 {$aFunc(0.2)} 的解析过程中,发送了错误,主要问题是在区分 . dot 和 , comma 时发生了异常,需要修复。

2.2. 解决思路方法

定位到问题的原因是由于  . dot 和 , comma 的位置问题,在程序中针对该场景下增加兼容即可,涉及到的改动也不算大,主要是在局部增加了变量 bracketPos 和 dotPos。判断的情况包括,当 dotPos 小于 bracketPos 时,是通常情况下的 6) 的表达式, 当 dotPos 大于 bracketPos 时,就是要表达的 1) 式。

2.3. 样例

修改前:

{$aFunc(0.5)} –> 解析错误,程序抛出异常

修改后:

{$aFunc($abc)} –> aFunc($abc)
{$aFunc(0.5)} –> aFunc(0.5)  ,携带参数 0.5 执行函数 aFunc 并将结果显示在当前位置
{$a.substring(0, 5)} –> $a.substring(0,5)

3. 其他一些改进优化

3.1.  重新启用 Hanjst.asyncScriptArr。
3.2. 改进 appendScript。
3.3. 改进了异步调用导入脚本程序的时序。
3.4. 同步更新了 Hanjst的在线文档手册( https://wadelau.github.io/hanjst/index ),+showImageAsync 自定义函数章节.

….


🙋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 control and achieve the same functionality 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;

  • ….

 

发表在 -Hanjst/-汉吉斯特, 编程技术, 计算机技术 | 标签为 , , , | 5条评论

护发素发膜正品修复干枯免洗家用护发补水顺滑女士发热焗油膏书皮纸自粘透明磨砂加厚包书皮小学生一二三四年级上册上学期书膜全套课本书本保护套16k封面外壳防水a4彩染发剂植物纯自己在家染头发膏女2021流行色显白天然冰糖雪梨膏儿童宝宝砀山慈梨膏

写写1929年美国经济大萧条与2020年美国股市大跌

2020年初就注定了这是不平凡的庚子年。跨年的新冠肺炎疫情在全球蔓延,叠加沙滩与俄罗斯的石油协议谈崩,美国股市经历了史上最严重的大跌——就是最严重的,没有之一。
美国股市截至目前(2020Mar22)只有发生五次因为下跌引起的熔断,而2020年3月的这两周内,就占了其中四次。活了80多岁的投资大师巴菲特在第二次发生时说,活了那么久此前只见过一次,话音未落,第三次、第四次和第五次接踵而至,祸不单行!
所以其灾难程度,似乎远超过2008年的次贷危机,直接与1929年的大萧条相提并论。

关注和学习经济学以来,逐渐形成对经济危机的史前认知:… — 经济扩张 — 生产过剩  — 不合格信贷 — 信贷危机 — …., 以2008年次贷危机为蓝本,我大致绘制了经济危机发生的周期性机制。

最近几天接连读到 萨缪尔森:经济学文昭谈古论今:1929年大萧条 , 傅志彬洗脑的历史 和 招商证券的美股下跌的逻辑与A股见底的信号 等相关资料,这些竟然都是相通的,于是尝试在吸收和消化的基础上做些整理与回顾的工作。
这也是近几年来研读经济学读物的心得体会的试水之作。

1. 1929年经济大萧条的成因

经济危机或者经济大萧条是令人恐怖的事情,其危害程度不亚于一场战争。资料记录显示1929年的大萧条直接或间接导致美国约700万人丧生,约占其总人口的7%(?)。 2008年的次贷危机,据记录,约有 730万工作机会消失,由此导致的灾难及死亡目前还没查到相关数据。

传统意义上,或者“正统”的经济学历史上,对1929年的经济大萧条,普遍认为是资本主义本质缺陷问题,自由市场发展到一定阶段的必然产物。对其开出的药方就是政府大幅度干预经济,进行投资扩张,以图恢复和提振经济,使其脱离泥潭,重新走上正常轨道。

根据 文昭谈古论今:1929年大萧条的原因分析 和 傅志彬: 洗脑的历史——后洗脑时代 的内容解析来看,1929年的经济大萧条的触发诱因可能存在经济基本面的问题,但当时的货币政策和财政政策未能正确处置问题,化解风险,才是导致后来经济大萧条的根本和直接原因。

“佛理德曼1941-1943年为罗斯福政府财政部顾问,是新政的制定者,参与者。当然,后来佛理德曼转变了态度,变成了彻底的自由经济倡导者。

佛理德曼认为,1929年的大萧条并不是什么资本主义经济本质缺陷造成的,而是当时具有发行货币权力的几家美联储银行错误的货币政策造成的,大萧条的罪魁祸首不是自由经济造成的,而是政府干预过多造成的。

最后美国走出经济危机也不是什么罗斯福新政的功劳。(《自由选择》《《资本主义与自由》)”

复盘1929年当时的情况,如果央行或者财政部提供了及时的流动性,阻止银行倒闭,从而避免银行储户的挤兑风潮,也许历史或应该改写。关于经济上的凯恩斯主义和自由主义的论述,在  “聊聊中国社会现状–潜规则-2 ” 中也有相关类似的讨论。

所以,从本质上看,当经济危机发生时,基本面有异常,初期是对经济发展预期的管理,中期是对流动性的支持,而后期应该是降息减税使得企业融资成本降到最低。至于强势政府干预,进行以政府为主导的投资活动和经济扩展,则不是非必要的。

政府的角色,始终是对市场的监管,对垄断的警惕,对金融机构的苛刻,从而为市场经济的主体营造公开、公平、自由竞争的营商环境。其他的则会水到渠成,纷至沓来。

如上图周期性分析所得,垄断的形成会加剧贫富两级分化,这本身就是社会稳定的定时炸弹;而放松对金融机构的依规合法地苛刻监管,则可能导致流动性问题,进而将金融问题传导转化为经济危机。

2. 2008年经济危机回顾

根据 “招商策略:美股下跌的逻辑与A股见底的信号” 中对 2008年经济危机的分析,大致可以简单概况为,贝尔斯登和雷曼兄弟的倒下,并没有引发储户的挤兑,也没有进一步地传到到商业(储蓄)银行。
原因可能是由于这两家银行都是投资银行,其客户小众且受众群体单一,而后续的美联储和财政部等联手为后续的银行提供无限流动性支持,则从根本上阻断了危机进一步传到商业(储蓄)银行,也就不会发生像1929年储户挤兑银行的事情。

从这一点上来看,2008年金融危机期间的政府(央行)救市的行为是正确的,成功的。与之对应地,我们可以粗略地评价说,1929年经济危机期间,政府(央行)的救市行为是错误的,失败的。

这种在经济基本面发生偏差时,初期的经济发展预期干预失败(恐慌蔓延),中期的流动性支持失败,后期的解救并刺激(降息减税)经济失败,在任何时候任何政治、经济体制下都可能发生,且一定会导致严重的经济大萧条。这种情况的发生,与是否资本主义,还是社会主义关系不大。

如果简单地说,1929年的经济大萧条是经济的基本面发生问题(虚假的繁荣),初期的经济发展预期干预失败,中期的流动性支持失败;2008年的金融危机可以归结为,经济活动中的金融监管失败(不合格的贷款发放),发展预期干预失败,所幸的是中期流动性支持获得成功,从而阻止了2008年的金融危机转化为更严重的经济大萧条。

3. 2020年美国股市大跌观望

2020年庚子之初,新冠肺炎疫情始发于中国武汉,一时突然爆发,全国封城封国,禁止一些人际交往和经济活动,除了保障民生的基本物资流通,其余的皆处于封停状态。

中国武汉的新冠非典疫情持续1个多月后,病毒进一步扩散蔓延到全球各个国家和地区,从而引起本轮的美国股市大跌。

2020年2月19日开始,新冠疫情在全球加速蔓延,情绪冲击下美股开启第一轮下跌,到2月末跌幅12.3%。
3月5日~3月9日,油价暴跌引发投资者对经济衰退的担忧,美股超跌12%,避险资产黄金和美债涨。

3月11日~3月18日,市场的暴跌引发流动性问题,杠杆资金被动平仓、机构恐慌、回购市场流动性匮乏,FRA-OIS利差类似2008年一样快速飙升。
美股或有最后一跌:欧美疫情尚未得到控制,疫情造成的经济冲击才刚开始,未来两个季度经济数据将出现明显下滑,失业率飙升。

概况地说,经济基本面由于疫情的封城封国必然导致下滑大跌,股市作为经济的晴雨表进行大跌,是必然的正常表现;此时就需要对预期的干预,然而,显然地病毒的传播,不以人的意志为转移,在有效疫苗发明之前,其他都是暂缓权宜之计,预期干预失败。

经济危机发展到需要政府为全社会经济活动提供充足流动性支持。
对银行的资金支持,使其免受储户挤兑;
对企业的资金支持,为其提供低息甚至0利率贷款,为其降税免税,为其承诺/营造良好预期,使其免于因倒闭而造成更大范围的失业人群;
对民众的资金支持,为其提供直接现金补助,贷款展期等等,使其免于由铤而走险而造成社会动荡。

紧随其后地,随着对病毒的深入研究,尽快找到疫苗,平复恐慌心理,政府进一步地降息减税,促使市场主体——企业复工复产,经济逐渐恢复,市场得以休养生息。甚至是撸起袖子政府直接下场投资公共事业项目以快速提振经济。

然后一切如旧,天下太平,歌舞升平。

只是黎明到来之前,有人将看不到日出。不幸被病毒感染致死诚可怜悯,因经济危机次生灾害导致的家破人亡亦令人惋惜。
过冬时,那些储粮的能熬过,那些没有储备的或者储备不足的,显然要全靠政府的救济,救济不足或未被及时救济的,就成了经济危机的牺牲品。

这时候比任何情况下都需要全社会发挥人道主义精神,共克时艰,共度难关。
一个高度全球化的社会,高度信息化的时代,彼此唇齿相依,休戚与共,山川异域,风月同天。

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

书皮纸自粘透明磨砂加厚包书皮小学生一二三四年级上册上学期书膜全套课本书本保护套16k封面外壳防水a4彩染发剂植物纯自己在家染头发膏女2021流行色显白天然冰糖雪梨膏儿童宝宝砀山慈梨膏山羊绒围巾女冬英伦百搭围脖双面格子加厚保暖披肩

写写5G网速及页面提速中的延迟加载Lazyloading

最近关注网络速度多一些,无论是财经人士口中的新基建的5G,还是家庭路由器中的5G Wifi,也包括即将购买新的5G手机… 写完上一篇:gMIS吉米斯 升级支持IPv4/IPv6双栈网络模式  之后,觉得还有必要再写写热点5G及其带宽速度。

尽管互联网络已经突飞猛进地发展建设这么多年,如果留意某些情况下,打开一个图文页面仍觉得很吃力。尽管终端手机和运营商都提供了百兆、几百兆的连接速度,基本的图文页面打开,仍难用流畅来形容。

冷静地观察一下,眼下的网络浏览有点像开车去城里的大医院看医生的过程;
1) 飞速地冲出小区上了城市主干道(宽带入户:快),
2) 主干道拥堵,龟速(社区到电信局共享带宽:卡),
3) 跨区快速路、城市环路拥堵,龟速(城市间、运营商之间、跨国:堵),
4) 进医院区难、停车漫长,挂号排队漫长(服务端带宽及队列:慢),
5) 见医生,快速面谈几分钟(服务器处理单个请求:快)。

概略地看,现在的堵点在中间网络层,不在终端层(最后一公里),无论是快速的5G手机、5G基站,还是光纤入户几百兆、千兆的路由,出了小区之后开始就卡、堵、慢。拥堵点在社区到电信局、跨城市跨运营商跨国家以及服务器端带宽及队列,也即骨干网和数据中心

1. 5G Wifi 和 5G Cellular

两者的共同点是,这两个5G都是无线通信技术。
这两者的区别是前者的5G是指Wifi通信标准802.11x中的 5Ghtz的频率段,而后者5G是指第五代通信标准,具体用到多少频率段,各国各运营商自己选定。下图是中国三大运营商的5G Cellular用到的频率段。

5G Wifi 和 5G Cellular非要翻译一下是: 5G Wifi: 5G赫兹频率的高保真无线连接技术;5G Cellular: 第五代蜂窝式组网技术 。5G手机,就是支持第五代蜂窝式组网技术的手机。5G家用路由器就是支持5G赫兹频率高保真无线连接技术的路由器。

近期网络新闻中扑面而来的5G应该是指 5G Cellular,可想而知,扩展再多的5G基站,使用再快的5G手机,也无法解决上述过程中的卡、堵、慢。5G Cellular下的点对点的局部连接,或有积极意义,对推动局部组网的物联网或有帮助。

这么拥堵而艰难的骨干网和数据中心,为何一些成规模的互联网服务还是看起来很流畅,图文浏览不说,甚至是视频点播、直播也还可以?大致有三点:1) 资源下沉&前置到用户最近的地方(医生到小区门口开诊);2) 压缩及传输技术的进步使得高清图像数据流可以在低速网络上运行(骑车或者开飞机去看VIP医生);3) 热点数据.

这些都需要巨大的开支(更多的硬广告时间/更构陷的软内容设计)来支撑。

2. 网络页面加载中的延迟加载Lazy loading

无论是终端提速,还是骨干网和数据中心的提速,都是系统工程、社会工程。作为其中的个体,一个网站和一个网页如何能在既有的网络速度条件下,为用户提供更好的浏览体验,是技术和设计人员需要共同考虑的问题。这其中延迟加载Lazy Loading技术是颇受欢迎的技术之一。

 通常情况下,浏览器加载一个图文页面,通常是按自然顺序,由前到后,自上而下的进行。当某些资源尺寸较大时,可以通过一些技巧跳过这些大块头,将页面全貌布局显示完成后再分出时间和精力来处理这大块头的对象,这就是延迟加载。

比如网页中的图片,或者较大的数据List。我们曾经在 gMIS吉米斯 的部署中遇到要将上万条记录加载到一个 Select 中的需求,通过异步延迟加载可以很好的改善浏览体验,避免页面卡死。

gMIS/吉米斯 GitHub源代码:
comm/ido.js: function imageLoadAsync(imgId, imgRealPath);

细究起来,延迟加载Lazy Loading可以区分为两个层次:
1) 将图片等从主体文本中区分开来,通过网页中的 JavaScript 的 window.setTimeout 可以将某些图片延迟加载;
2) 更进一步地,可以将一组图片的每一张都使用网页中的 JavaScript 的 window.setTimeout 分别予以延迟一定的时间。

尤其是后一种做法,只要延迟的速度跟得上用户的浏览和阅读的速度即可,这样可以避免同时并发多个HTTP请求拖慢浏览器,也避免了瞬间地对服务器的并发请求的冲击。

-Ufqi-News 有福新闻 和 一些基于 -GWA2 吉娃兔 的应用中,我们设计了如下这样的图片异步延迟加载的策略。

<img class=”iconList” src=”loading.gif” data-src=”real-image-1.jpg” alt=”-x-“/>
<img class=”iconList” src=”loading.gif” data-src=”real-image-2.jpg” alt=”-x-“/>

….

<script>
var delayImgLoadi = window.setTimeout(function(){
//-
var myImgs = document.getElementsByClassName(“iconList”);
var imgListSize = myImgs.length;
var mysrc = ”;
for(var ii=0; ii<imgListSize; ii++){
mysrc = myImgs[ii].getAttribute(‘data-src’);
if(mysrc == ”){
myImgs[ii].src = ‘data:image/jpeg;base64,0’;
}
else{
var loadAsyncImg = window.setTimeout(function(myObj, mySrc){
myObj.src = mySrc;
}, 1000*1.5*ii, myImgs[ii], mysrc);
}
}
//-
}, 1500*1);
</script>

这种策略的具体实现是,
首先将一组图片的默认 src资源指向一个默认的图片(如 loading.gif ), 页面加载时会快速完成这个图片列表;
其次在页面下面安排了一段 JavaScript 代码,安排了一个异步执行的代码段A,其中将要读取上面一组图片;
再次,代码段A根据读取到的图片,判断其真实src( data-src )是否合法,如果合法,就额外地安排另外一个异步执行的代码段B;
最后,代码段B将这个真实的src从服务器端读取过来,并呈现在页面中,执行速度是每1.5秒读取一个。

当代码段A被安排完成后,页面已经呈现完成,用户可以阅读其中的文字内容;当代码段B被执行时,用户已经开始阅读内容;随着代码段B被顺序执行时,图片也一一呈现,用户也就顺序阅读到图片;只要代码段B的执行速度大于用户的阅读速度,用户体验应该是能够保证的。

其中 src=“data:image/jpeg;base64,0” 表示加载一个空图片,内容为 Base64的形式文本,无需再做额外地HTTP请求。

幸运地是,针对这种设想,HTML国际标准组织正在设法将其变成标准的一部分。

Loading Attribute
The loading attribute allows the browser to defer loading of images/iframes that are off-screen until the user scrolls near them. Indicates if the element should be loaded lazily (loading="lazy") or loaded immediately (loading="eager").  WIP: WHATWG PR #3752

<img src="image.jpg" loading="lazy" alt="..." />
<iframe src="video-player.html" loading="lazy"></iframe>

也许未来,想要 img 和 iframe这些资源异步加载,只要一个 loading属性来设置一下即可。

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

冰糖雪梨膏儿童宝宝砀山慈梨膏山羊绒围巾女冬英伦百搭围脖双面格子加厚保暖披肩显白黑茶色蓝黑色板栗色中国电信 电信流量5G卡手机卡

gMIS吉米斯升级支持IPv4/IPv6双栈网络模式

今天是三八国际妇女节, 恭祝女同胞节日快乐!新冠肺炎疫情尚未解除,各自安好!

1. IPv6地址及与IPv4并存过渡的双栈网络模式

距离论文 IPv6 Address in Dot-Base62x 的发表差不多十年过去了,IPv6的应用也逐渐从学术论文到实验网,从实验网到工业部署和商业应用,终于IPv6的逐渐启用,开始由底至上的由网络层影响到应用层。

比如在 gMIS吉米斯 中,安全检查依赖对用户请求的IP的监测。当IP地址由IPv4向IPv6过渡时,应用层看到的地址,可能是IPv4,也可能是IPv6,尤其是在IPv6/IPv4双栈网络中(下图2),这种情况尤其明显。

例如,当我们在启用了IPv6的网络下,查看终端用户的IP时( -myip ),情况可能是这样:

Internet Protocol version 4 (IPv4)
120.244.128.xxx

Internet Protocol version 6 (IPv6)
2409:8a00:6055:b650:b5df:f4f3:36cd:xxxx

也即同一个用户,可能有两个IP地址,一个IPv4地址,一个IPv6地址,两者可能交替出现,在此前的部署应用中,如果侦测到用户IP地址发生改变,可能会有潜在的中间人攻击发生。面对新情况,需要更新升级程序处置这样由于网络层发生改变而引起的安全检测的 false positive alert.

2. gMIS吉米斯支持 IPv4/IPv6双栈模式的思路及实施

从纯技术上说,改进对一种新网络模式的支持,由原来的单用户单IP变成单用户多IP的支持,要改动的地方很多,难度也较大,甚至容易滋生新的安全漏洞等。

经反复比对各种实施方案,兹选取如下一种实施对gMIS吉米斯支持IPv4/IPv6双栈模式的改进。其主要思路时,当侦测到同一用户的IP地址发生改变时,将用户弹出系统,使用新IP再次验证一次,使得用户在新IP, IPv4 或 IPv6 下也获得同样的授权,如此以来,用户在两个IP下都进行了授权验证。在用户层,经过两次登录后,在接下来的操作中,网络层IP地址的切换,已经可以无缝衔接,自动漫游。

在系统中,分别将两次验证的授权Token以不同的名称记录到客户端,通常是 Cookie或请求地址的参数里,这样,当用户的IP再次漂移改变时,从Cookie中读取到读取到对应IP下的Token即可。

改动涉及到的程序文件:
A. comm/header.inc
根据已经读取到的IP地址,判断是IPv4或者IPv6,并将判断结果标记记录到运行时环境变量中去。也即 $_CONFIG 中。
B. extra/signinup
在通过用户授权验证,进行Cookie或请求参数写操作时,如果当前网络为 IPv6,则在原Token名称后附带形如 “v6” 的标记。
C. inc/session.class
在进行用户请求的鉴权时,通过Cookie或请求参数等读取Token,如果当前网络为 IPv6,则在原Token的名称后附带形如 “v6” 的标记。

 


扩展开来,推而广之地看,IPv6/IPv4的共存过渡阶段,双栈模式下,所有上层应用基于用户单一IP考虑的地方,都需要进行这方面的调整。这是IT/互联网届的又一个类似 “千年虫/2000年/千禧蟲” 的问题。

基于IP地址的安全核验,需要修改考虑这种新情况,类似上述分析与升级改进。
基于IP地址的用户识别,需要改进;基于IP地址的统计,基于IP地址的位置识别,基于IP地址的资源调度….

所有的IT及互联网应用软件系统,都需要重新审视由单用户多IP产生的新问题,而且越早越好,越快越好,因为IPv4/IPv6的共存和过渡阶段,目前来看会是一个相当长的过程,也许是10,20年,甚至是50年。

 


额外地,关于 IPv6 Address in Dot-Base62x 的应用,

例如在启用了IPv6的家用网关路由器(Home Gateway)或者光猫一体机(Fibre Modem + Router)中,默认的Web管理控制台的IPv4地址的访问路径通常为:
http://192.168.1.1/ 或者 http://192.168.0.1/

其对应的IPv6地址的访问路径通常为:
http://[fe80::1]/ 或者 http://[fe80:0:0:0:0:0:0:1]/

显然地,后者IPv6地址的访问路径看起来不友好,也有些费解,增加了中括号[]用于括起来IPv6地址,同时冒号:不单独特指网络服务的端口号,也可能是IPv6地址的一部分。

相应地,如果上述IPv6地址( fe80::1 或者 fe80:0:0:0:0:0:0:1 ) 用Dot-Base62x 来表示的话,则其形式如下:
http://x3e00.0.0.0.0.1/ 

只此一种,明确无误,没有简写变项,也兼容目前所有网络协议规范,不需要引入中括号[], 也不会影响冒号:用来特指网络服务的端口号的定义。
在形式上,与IPv4一样,使用点号.来区分地址段,不同的只是长度上多了两个地址段. 这也是实际意义上的增长,IPv4由四段组成,IPv6地址由6段组成.

同样地,上述终端用户IPv6地址,
Internet Protocol version 6 (IPv6)
2409:8a00:6055:b650:b5df:f4f3:36cd:xxxx
也可以表述成 Dot-Base62x 的地址形式为:
xxxx.xxxx.xxx.yyyy.yyyy.yyy

这是推荐使用 IPv6 Address in Dot-Base62x 的主要原因之一.

 


3. gMIS吉米斯相关的更新改进

A. 改进连接数据库时进行长连接的操作;

B. 改进对数据表记录状态默认值的描述,增加了”其他”选项等;

C. 改进了写用户终端Cookie的操作,增加了失效时间和有效路径范围.

D. Next @todo, 使用模板引擎 -Hanjst 替换掉 Smarty . 

 


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

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

书皮纸自粘透明磨砂加厚包书皮小学生一二三四年级上册上学期书膜全套课本书本保护套16k封面外壳防水a4彩染发剂植物纯自己在家染头发膏女2021流行色显白天然冰糖雪梨膏儿童宝宝砀山慈梨膏山羊绒围巾女冬英伦百搭围脖双面格子加厚保暖披肩

Base62x编解码开源类库增加C++版本

2020年以来近两个月来,新冠肺炎 疫情肆虐中华大地,九洲同悲,四海恐慌,唯望炎黄子孙同仇敌忾,将传染性病毒早日隔离并捕获进牢笼,打入十八层地狱,永世不得翻身!

自我囚禁之余,安排时间对 -Base62x 编解码程序进行翻阅,同时考虑并增加了 Base62x 编解码程序的 C++版本。

这是继2016年增加 Base62x in Java, 2017年增加 Base62x in JavaScript, 2018年增加 Base62x in Perl, 2019年增加 Base62x in Python之后的又一个新语言版本,此后,C++的应用项目,可以直接下载使用即可。Base62x 编解码的实现,首先是C语言版本。

距离上次新增并完善 Base62x in Python 已经有差不多一年的时间,在这期间, Base62x 得到更广泛的应用和部署,也在 -Github 上获得更多的点赞。这是令人欣慰的。

Base62x in C++ 的程序代码包括两部分:

  1. Base62x.class.hpp
    这是 Base62x 的C++版本的主体程序,用于构建 Base62x 对象及其两个主要方法: encode/decode .
    另外还有一些辅助工具方法.
  2. Base62x_test.cpp
    是为测试 Base62x in C++ 而编写的辅助程序,主要给出调用 Base62x in C++的样例。

    Base62x in C++的使用样例

    # include “Base62x.class.hpp”

    using namespace std;
    //- init.
    Base62x myb62x;
    char *input = “Hello Base62x!\n”;
    char *output;
    int ibase = 0; // zero for string
    //- encode
    output = myb62x.encode(input, ibase);
    //- decode
    int obase = ibase
    input = myb62x.decode(output, obase);

借助 C++ (C with class)的面向对象支持,Base62x in C++几乎可以借用 Base62x in Java的逻辑和 Base62x in C的代码,融合而成即可。

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

2019年,Base62x 的相关说明内容还没写入网上各个主要知识Wiki站点,由此也传播给更多的人。此外,Base62x 论文相关的辅助材料也发布在 -ResearchGate 上,可供免费翻阅。与此同时,还完善了 -Base62x 的官方网页,让在线编解码体验、浏览和翻阅更简便快捷。

籍此,感谢为 Base62x 的源代码和说明文档做出贡献的朋友们,他们的名字都记载在 -Github的代码库里或者知识Wiki站点里,谢谢你们!

最好的版本永远是下一个版本,继续期待 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-algorithm

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

医用外科口罩一次性医疗专用口罩防尘透气成人三层防护透气医生插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板床上电脑桌大学生宿舍上铺懒人可折叠小桌子家用寝室简约学习书桌电热蚊香液套装无味婴儿孕妇家用补充液插电式灭蚊液

gMIS吉密斯十年执念:Lower Costs较低成本Better Productivity较高效率

Hello 2020! 元旦快乐!今起揭开21世纪20年代的篇章.

1. gMIS吉密斯十周年

2010-2020,十年转眼已成历史,gMIS吉密斯——通用管理信息系统(general Management Information System)已经持续迭代升级、优化完善了十年之久。

从 ChinaM.com 时的 General Table到Sina weibo.com 时的Config Table,再到 People.cn 时的完整雏形,gMIS吉密斯应运而生,伴着IT需求猛增的大趋势,一路茁壮成长,从实践出发到理论提升,重新回到实践中去,再次深化和升华…

gMIS吉密斯致力于为企事业单位一线操作管控人员提供较低成本、较高效率的操控平台系统工具。一直以来,企事业单位极力逢迎讨好客户/终端用户,而对自己的员工通常要退而次之,等到安排预算改进作业系统管控操作平台时,额度又少之又少。员工不能利其器,焉能善其事?

gMIS吉密斯努力尝试使用这少得可怜的预算经费(较低成本),通过创新软件方式方法,融合前沿技术,实现便利高效的作业系统操控,提高整体管理水平和能效(较高效率),提升员工满意度、盈利水平和整体社会效益。

2. gMIS吉密斯软件架构与功能特色

小结gMIS吉密斯十余年来的发展,她与其他多数单一任务类型的管理操作后台相比,有着鲜明的特征,也正是这些特征使其发展路径看起来崎岖艰难。本质上说,管理操作后台的基本任务是将软件的基本任务——输出/输入的更具体化,大致操作动作就是“增删改查”。

gMIS吉密斯面临的挑战是,尽可能多地满足各种管理操作后台的场景,同时尽可能少地写编程代码,一直以来的努力,也是极力地在这两方面寻找某种平衡。既要功能强大,还要无需二次开发,进而达成秉持着十年的执念:Lower Costs较低成本,Better Productivity较高效率。


2.1. gMIS吉密斯软件架构

1). 基于MVC成熟的网络应用系统设计
2). 超越MVC 可对接和读写不同驱动类型的资源,如数据库、文件、远程网络资源等;
3). 支持插件式开发,易于扩展和升级
gwa2-dba-arch-201605-v2

4). 强大的多层级缓存与优化,支持服务器端、网络层和客户端三层缓存加速;
5). 页面异步通信、块状刷新让操作更流畅、高效;
6). 先进的跨区设计,以一抵十,百变应用扩展。

2.2. gMIS吉密斯功能特色

1). 先进的无Session/Cookie用户鉴权体系,轻松穿越各种网络环境;
2). 创新设计的集成站内搜索,全站数据一搜即得;
3). 媲美主流网络电商系统前端页面的点选系统,所有数据即点即得;

4). 比肩微软Office Excel的数据透视功能,让数据决策更科学、高效;
5). 创新性的数据表字段级可配置输出输入接口;
6). 层级式目录设计,无限扩展;

7). 在线网络文件轻松管理;
8). 自动跟踪日志、记账系统;
9). 字段级安全设置与管理设计;

gmis-xdirectory-201604

10). 贴心提示,输入即搜索,随时提供备选列表;
11). 高效地数据批量导出与导入功能;
12). 跨国多语言支持;

13). 便捷地数据表记录级复制;
14). 集成深度复合搜索,让检索在最小颗粒度上进行。

3. gMIS吉密斯近期更新

1) 修订了部分遗留i18n的语言包词汇;
2) 增强了针对文件上传与下载时的安全措施,进一步加固了系统安全;
3) 升级替换了 jQuery 第三方类库,1.12 –> 3.4.

4. gMIS吉密斯在线资源
 优化升级更新博客

https://ufqi.com/blog/category/computer-tech/通用信息管理系统/

 操作手册
https://wadelau.github.io/gmis/index

 


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

可以在其上构建各种信息管理应用软件系统,例如:
内容管理系统(CMS), 客户资源管理(CRM), 企业资源计划管理(ERP),
办公自动化系统(OA)等,
也可以是各种行业应用管理系统软件,例如:
人力资源管理系统(HR),学生管理,档案管理,旅游管理,图书管理,
商品管理及业务运营支撑系统(BOSS)等等。
实现零代码开发、快速搭建各种管理信息系统(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.
降低成本,
提高效率.

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

彩染发剂植物纯自己在家染头发膏女2021流行色显白天然冰糖雪梨膏儿童宝宝砀山慈梨膏山羊绒围巾女冬英伦百搭围脖双面格子加厚保暖披肩显白黑茶色蓝黑色板栗色