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, 编程技术, 计算机技术 | 标签为 , , | 留下评论

Apache SoftwaresPdf DriveOpenAI ChatGPT

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, 编程技术, 计算机技术 | 标签为 , | 留下评论

UfqiNews有福常在Google Books亮月亮科技Apache Softwares

WebAssembly前瞻及用C/C++写HTML和Hanjst汉吉斯特

2019年12月16日,北京下了今冬第二场雪❄️,不大不小。

年终岁尾,国际上几大软件及互联网公司(Google、Microsoft、Apple和Mozilla)拉上互联网标准化机构W3C发布了 Web Assembly的推荐标准( -R/t2SS )。此举意味着,WebAssembly技术从遮遮掩掩的实验室后台走向前台,开始面向大众,尤其是开发者进行推广应用。

  1. Web Assembly推出背景猜测

Assembly 字面上的解释是,  “a group of people gathered together in one place for a common purpose”,一群人为一个共同的目标聚集到一个地方。Web Assembly的目标简略地说,就是将 C/C++/Rust 这些编程语言写的程序能够运行在上面那几大公司到网页浏览器中(Google Chrome,Microsoft Edge,Apple Safari 和 Mozilla Firefox)。目前在网页上流行的编程语言 JavaScript 将迎来或是帮手,抑或是对手的Web Assembly。

时光倒回到约10年前, HTML5 标准刚推出来时,其首要的任务是丰富 HTML 或者说 网页应用,使之能够承载其由“内容展示平台”向“应用承载平台”转变的重任(此前 -人民网 内部研究报告)。在这之前,一直是 Adoble Flash努力地奋斗着。 HTML5 贡献了一大批新颖的功能,网页告别第一代只能做内容展示的功能受限版。

HTML5 带来了浏览器/网页作为“应用承载平台”的大发展。不想中途出现了“应用商店”App的怪胎,一下子将互联网前进的步伐打回到PC单机时代,要用个什么软件都需要下载、安装,这明显与互联互通都发展趋势是相背离的。信息孤岛逐渐形成,互联网的继续发展不是加速信息的流动,相反是加剧了信息的不对称,不流通。

这既有商业层面的利益考虑,也有技术层面的制肘,网页应用计算力弱,体验不好,安全有问题等等,一时局面甚是尴尬,有几个应用商店,一个应用就需要开发几个不同的版本。信息在各个APp之间逐渐扎起篱笆,这些与互联网先驱们的让信息更加流畅地流动的理念渐行渐远。

直到  WeAssembly的推出,或许是扭转时局的契机之一。HTML5将网页由“内容展示平台”升级到“应用承载平台”,WebAssembly或将进一步升级优化”应用承载平台”,从根本上消除网页应用与本地应用之间到性能差异。从而实现“Open and Run”, 而不是 “Open 、Download、Install and Run”,实现“Write once, run anyway”, 而不是“Write once more,run once more”。

在 WebAssembly之前,也有类似的探索, 如 asm.js , 甚至上 Java的 Applet 都是希望将编译后的程序能够在浏览器中安全高效地运行,现在看之前的努力并不算成功,希望这次能有所不同而获得预期效果。 

2. WebAssembly的直觉体验

对 WebAssembly 的直觉体验:由 hello.c 到 hello.html 

$ mkdir hello
$ cd hello
$ cat << EOF > hello.c #include <stdio.h> int main(int argc, char ** argv) { printf("Hello, world!\n"); } EOF
$ emcc hello.c -o hello.html

可以预见,大量必需由 C/C++/Rust 写的程序将有可能轻松移植到浏览器以网页应用的形式交付,极大地改变了软件研发及交付的方式方法。

3. Web Assembly的发展前瞻

3.1. WebAssembly 可能不会取代 JavaScript
而只是对其的互补,在 JavaScript 短板之处寻找其发展空间,展现其优势。

3.2. 客户端软件App
单独为特定平台写App的需求将降低,网页应用将逐渐实现跨平台,并与本地应用相一致的体验和性能。有望实现网页应用一版通天下。单独写iOS客户端,Windows客户端,或者Andorid客户端的开发人员,可能需要着手学习使用 WebAssembly。

前景是美好的,预计Native App还将存在相当长时间,并存与网页应用,并逐渐转为小众领域的特定开发。

3.3. C/C++/Rust 走向前端
古老的C/C++等编程语言将应用范围扩展到前端,从而实现真正意义上到跨平台。用 C/C++等写HTML网页,将不再是互联网上的笑话。
如此以来,为解决 C/C++ 写不了网页HTML而诞生等解决方案或者编程语言等,是否也就过时了? 或者意义不大了?

如果 C/C++ 能写网页,还需要用 ASP.NET/PHP/Perl/Python或者Java 来写 HTML应用吗?或许需要,因为有大量类库已经开发,或许需要,还有其他更多完整的生态考虑。但有一点确认的是, WebAssembly的推出,引发我们对这样对问题的重新审视和思考。

3.4. 网页应用
网页应用开发人员需要熟悉新情况,有了新增的屠龙刀,也要善加利用才能将其设计功效发挥出来。

JavaScript 有了 Web Assembly的加持和增强,其性能或有进一步的提升,可供用来设计的应用软件将进一步的扩增,体验或将更好。

得益于 JavaScript进步,也得益于Web Assembly的推出,依赖于其上 Hanjst 汉吉斯特模版语言及引擎将运行更快,体验更好。我们将着手针对这些新特性进行优化。

Hanjst.js 已经投入不少使用。

Hanjst.was / Hanjst.wasm 也将开始研发,为追求更极致的性能和体验,Hanjst 或将以 C/C++/Rust 编写,然后经编译后,引入到浏览器中进行运行。

3.5. 网络应用开发框架 Web Framework

如前所述,既然Web Assembly的原生代码可以工作在服务器端,而编译后的.wasm 可以运行在客户端浏览器中,那么开发网络应用的方式方法势必要受此影响而有所改变。

因此,可以预见,通用网络应用架构GWA2,或将以此为契机进行改造升级,推出 GWA2 in Assembly 或者 GWA2 in C / GWA2 in C++, 又或者是 GWA2 in Rust. 

至于最终实现的是  GWA2 的哪个新版本,可能要结合 Web Assembly推广应用普及到一定阶段之后才能有某种趋势判断或定论。


 


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/-汉吉斯特, 编程技术, 计算机技术 | 标签为 , , , | 留下评论

老板选址BossXuanzhiUfqiFina有福金融UfqiWork有福工坊UfqiNews有福常在

gMIS吉密斯i18n多语言国际化更新

gMIS吉密斯部署和使用范围日益扩大,跨国多语言版本成为迫切需要的功能,早在2018年年中就考虑要增加这一功能——在gMIS吉密斯中实现多语言版本的支持。以期实现gMIS吉密斯的跨行业、跨地区和国际化多语言的广谱应用目标。

经过一段时间的密集开发、测试,目前gMIS吉密斯i18n多语言国际化更新已经完成。其中过程比预料的长,修改完善难度比预想的大,涉及到的修改模块也较多,兹记录备忘于此。

1. 基于GWA2的多国语言包设计

gMIS的开发框架是 GWA2吉娃兔,GWA2本身有跨语言的版本实现,如GWA2 Java, GWA2PHP,GWA2Perl等编程语言版本。gMIS所依赖的GWA2的编程语言版本为GWA2PHP,所以gMIS的多语言实现也是继承和扩展了 GWA2PHP(吉娃兔的PHP版本)的多语言开发模式。

在GWA2PHP的多国语言版本多实现中,主要依靠如下设施。

语言模块对象:
mod/language.class.php
其主要方法是实例化 Language.class 并加载语言包文件;同时提供按 lang_key 进行相应翻译的操作方法;

语言包文件:
lang/language.pkg.zh_CN.json,
lang/language.pkg.en_US.json,
lang/language.pkg.ja_JP.json,

全局变量:
全局实例化 $lang 语言包对象,并在全局范围内可以访问。
同时对当前语言环境进行探测,对语言版本环境对探测又进一步地区分为有显式的语言版本参数如 “&lang=zh” 等,或者使用隐式的语言环境参数来判断当前应该加载哪种语言包。

输出 $lang 到模板引擎:
$data[‘$lang’][‘lang_key’] = $lang->get(‘lang_key’);
如此以来,便可在 模版文件中以 {$lang[‘lang_key’]} 多方式进行访问。
后面会进一步地详细描述。

2. Module类或Controler类PHP程序中调用语言包对象

在gMIS中,普通PHP文件中对多语言对象多访问形式如下:

print $lang->get(‘lang_key’);

该语句将输出按当前语言配置所加载语言包对应多 lang_key 所指向的语言版本相应的内容,其中语言对象 $lang 是全局变量,可以在任意 controller文件中进行调用。类似地,在Module模块类中,需要更多的修改,在Module模块类的声明创建和实例化时,引入全局变量语言包对象。

如在 mod/abc.class.php 的文件中,传递 $lang 对象:

public function __construct($args, $lang=null);

为后向兼容,也可以不安全或不推荐地直接使用全局变量 $ lang :

public function _myFunc(){
    return if($lang){ $lang->get(‘lang_key’); }
}

 

3. HTML模板文件中调用

gMIS 在设计和实现 GWA2 PHP 时,完整地继承了 GWA2 的 MVC,因此,作为兼容和后续扩展,gMIS的大部分视图文件,都以模版文件都方式呈现。

在国际化多语言的扩展中,我们需要在模版引擎中增加对语言对象的输出,形如:
$data[‘lang’][‘lang_key’] = ‘lang_value’;

然后在模版文件中使用如下方式增加对 lang_key 的调用:
{$lang[‘lang_key’]}

 

4. JavaScript脚本中调用

由于 gMIS 在设计上采用了高效的 Ajax 技术,页面进行了局部或部分的更新。这在多语言环境中,可能涉及到需要将相应的标签字符进行多语言翻译。
基于这种考虑,我们在 ido.php 进行加载时,输出 userinfo.$lang 全局变量,在其中以 JSON 方式将待翻译的语言标签输出到 JavaScript中,从而使得当我们需要在 JavaScript 调用相应的语言标签时,能够进行顺利的调用,进而显示合适的语言版本给终端用户。

userinfo.$lang = {“lang_key”:”lang_value”, “”:””};

在 JavaScript 实际调用中:

let buttonValue = userinfo.$lang[‘lang_key’];

 

5.  XML/JSON数据表配置文件中调用

gMIS强大对可扩展性和伸缩性依赖于我们所涉及对元数据与用户数据对隔离,而实现元数据与用户数据对融合操作对就是我们对gMIS表数据处理引擎。

在gMIS,我们针对每一张被管理的数据表创建了一个表格属性描述文件,该属性描述文件以配置文件xml格式存储在 xml子目录下。当目标数据表被加载时,数据处理引擎将读取配置文件,以属性描述文件定义的各种格式将用户数据呈现出来。

在这一过程中,显然,如果我们在属性描述文件中有关于国际化多语言的内容标签,就需要一并也要创建对应的语言版本的属性描述文件。基于这些考虑,我们将xml文件的国际化多语言修改形如下:

xml/abctbl.xml –> xml/abctbl.en_US.xml 
xml/abctbl.xml –> xml/abctbl.zh_CN.xml
xml/abctbl.xml –> xml/abctbl.ja_JP.xml
….

默认情况下,如果某个数据表efgtbl没有 xml/efgtbl.xml 属性描述文件,则使用系统默认的形式将用户数据显示出来;也是默认的,如果某个数据表 efgtbl 的某个国际化语言版本 xml/efgtbl.zh_CN.xml 没有被创建出来,系统依然鲁棒地使用默认配置将用户数据用默认语言版本呈现出来。

6. lang_key /value 的设计与规划

gMIS 国际化多语言的语言包文件的设计采用通用数据交换文件格式 JSON。在多语言标签设计时,将标签按如下分类进行设置:每个标签键名称以下划线分割的多段英文字符隔空。每段表示不同的层级。
样例如下:
navi_xxxx,
func_xxxx,
form_xxxx,
user_xxxx,
func_importxlsx,
func_importxlsx_hint,
navi_help_company,
navi_help_company_faq,
….

7. 国际化多语言使用者/开发者社区

gMIS吉密斯源码早几年前已开源在 -github 上,然而由于没有进行国际化多语言操作,开发和使用仅限于中文环境,随着这次国际化多语言的完善,gMIS的开发将迎来更多非中文开发者和使用者。

这将为gMIS吉密斯的发展壮大注入更加强大而持续的动力,为gMIS吉密斯由管理后台进化为管控操作系统做进一步地准备。

对非中文母语的开发者而言,源代码中没有了写死的常量“中文”字符, 修改代码不再有障碍;gMIS吉密斯的代码将得到全球范围内的开发者的审阅、修订和完善。

对于非中文母语的使用者而言,可以通过在首页的使用语言切换功能,快速切换为自己熟悉的语言界面. 从而为gMIS带来全世界的用户。使用范围将进一步地扩大到全球范围。

从而实现了gMIS的跨行业、跨地区和跨语言的全新时代。


2019-11-04,山东威海国际机场。


-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, -GWA2, 编程技术, 计算机技术 | 标签为 , , , , | 3条评论

Pdf DriveOpenAI ChatGPT

UfqiNews有福新闻的第N+1批次更新:清晰,流畅,省电

UfqiNews有福新闻自推出以来,一直持续更新、优化升级,作为一款带来全新新闻阅读体验的资讯应用,已经日益成熟,浏览量也日渐攀升。

近日针对 UfqiNews有福新闻的升级改进包括如下方面。

1. UI调整优化,清晰易读的页面导航

改进页面导航,调整优化明晰的跳转指示:

UfqiNews利用各种方向的箭头,类似物理世界的导航一样,简单明了。
而且在不同的操作系统平台上,如 iOS, Android后者WIndows中,不同的箭头又以各自平台的UI特色显示出来,
与本地风格融合更好。
.
 

2. +分享功能,简单易用的新闻分享

为便于用户将页面分享出去,尤其是分享到各个社交网站,UfqiNews增加 ShareThis 分享按钮。

用户可以很方便地通过页面底部使用 ShareThis 将当前页面分享出去。

+  点击 AddToFav 或 Ctrl+D  52次转发  

通过 ShareThis 按钮可以直接链接到 数十种社交网站。

3. 调整缓存策略,页面加载更快,link prefetch/preload

UfqiNews在有限的计算资源和带宽资源下,尽快地加载并呈现页面,一直是我们的技术团队努力的方向。 在这方面UfqiNews近期的主要努力包括:
1) 改进资源文件:图片、样式表CSS和脚本程序Scripts的缓存机制,使得这些资源在一个会话时间段内,只需首次从服务器下载并缓存到本地后,在该时段内,后面的页面加载时,这些资源文件都将从浏览器的本地缓存中自动加载,而无需每次从服务器端下载。
这将极大地改进页面加载速度。在资源类文件的 HTTP返回中,增加如下 HTTP headers.

HTTP/1.1 200 OK
Date: Sat, 14 Sep 2019 01:36:17 GMT
Last-Modified: Mon, 30 Jul 2018 08:59:19 GMT
ETag: “e2a-57233ad3e67c0”
Cache-Control: max-age=604800
Expires: Sat, 21 Sep 2019 01:36:17 GMT

2) 使用 link preload/prefetch 指令进行预加载
在支持预加载指令的浏览器中,UfqiNews使用 link preload / prefetch 指令,对接下来即将浏览的页面或资源进行自动加载。如在 list页面,自动加载 下一个 page; 在新闻详情页面,自动加载下一个 item,如此以来,当用户进行翻阅下一页时,页面将会实现秒开。

4. 重构爬虫引擎,抓取采集更节能

UfqiNews在生产端,有一个设计复杂的新闻爬虫系统,主要负责从各大新闻站点,将当地、当天最热门的新闻条目抓取回来。抓取回来的新闻页面内容进一步地使用自然语言处理技术对这些新闻条目进行分析,然后分门别类地列如到相应的类目下,供进一步地读取调用和使用。

这一页面抓取及分析系统,是分布式的计算系统,最早的设计其内容的流转是依靠NFS系统作为页面文件的承载服务。

(UfqiNews页面抓取系统/爬虫系统)

UfqiNews的分布式系统支持将这一爬虫系统部署成为一主多从的结构,可以同时启动N多个Node,而每个Node里又可以启动M多个进程。从而形成强大的页面抓取能力,及时并行处理N*M个新闻页面。

像所有的分布式系统一样,UfqiNews需要有一种机制或者队列能保证数据的一致性,UfqiNews依赖NFS的网络文件分享机制,将内容和页面队列写入到一个NFS文件中,并且顺序读取,从而保证了页面读取的一致性。

在单个NOde上并行运行M个进程时,NFS及内容读写磁盘系统,都需要以来文件IO来实现,一个偶尔的机会,当我们观测到跑在VmWare虚拟机中的耗电量在Windows的 Task Manager 中的“Power Usage” 和 “Power usage trend” 都为“Very high”, 进一步地分析发现,导致耗电量非常高,是由于 UfqiNews的生产爬虫系统的缘故。

(UfqiNews生产系统耗电量分析)

这种耗电量的现象,我们觉得是不可接受的,既不绿色,也不环保。而且其背后更深层次的原因也好理解,频繁地文件IO读写访问,一定是要高频度地调用设备驱动,进行实际磁盘操作。

在此之前,我们在review 目前的设计时,也觉得,依赖NFS并非长久之计,也非上上之选,只是觉得应该改进优化,这次发现UfqiNews如此高耗能,成为压垮骆驼的最后一根稻草,必须对UfqiNews的文件IO及其队列做进一步的优化改进了。

最早的设计中,我们希望构建一套网络服务,用于存储在 UfqiNews运转过程中的数据,类似 AED Server这种的设计与操作。这次在对UfqiNews进行重构设计时,我们发现问题的焦点在某种服务对文件IO的接管,也即无论是页面队列,还是新闻页面内容,将写入文件的内容,存储到内存或者某个中间服务时,用完即可删除。

这种场景用 AED Server 是合适的,将页面内容或者页面队列存储到 AED Server 中去,可以满足需求,同时,也可以看到,类似的需求,与常规的”缓存“服务也很相似。

沿着这一思路,我们考虑使用 Memcached 或者 Redis 来接管真实的文件IO,或可解决目前的问题。于是我们就使用该方法对 UfqiNews的爬虫系统进行优化完善。

在凡是需要读写操作文件IO时,均改为读写 Memcached 的服务,对于页面内容,直接存取即可。 对于页面队列,则需要使用数组的形式,对其中的内容做动态更新,放入新生成的条目,同时丢弃已经处理完了的条目。

经过几周的断续修改和调整,我们逐渐将 UfqiNews 的爬虫系统中的过程内容的文件IO全部替换为读写 Memcached ,Ufqinews的运行时耗电量也从 “Very high” 逐步降低下来。

Very high — High — Moderate — Low — Very low

尽管目前没有定量的数据,但Windows系统中的这个耗电量5级划分应该是有一定的依据的,而是次优化调整,也真切地显示出来。

作为软件编程技术人员,我们一直在谈论算法改进,程序优化,但改进前后效果对比如此立竿见影天壤之别的情况,还很少见,体会也没有如此强烈。

5. +内容链接静态化,优化SEO,对搜索引擎索引更加友好

针对页面链接地址做进一步的调整,增加如下两个快捷链接到主要页面:

1)列表页面, list.123,456.html , 指向原来的 ./?pnskwordid=123,456

2) 内容详情页面, page.1234.html  , 指向原来的 ./?mod=rdr&pgid=1234

改进后,伪静态页面将根据有利于搜索引擎的抓取和页面分析。

 


ufqinews logo
有福新闻 UfqiNews

这里呈现热点全局, 尺寸间一览所有令人关注的疑点焦点;
这里表达条分缕析, 视野内一睹各个脉络清晰的故事主线.

有福新闻UfqiNews 带来全新的资讯阅览体验, 不信息过载, 亦不信息茧房.

在寻求最大社会共识和满足千人千面之间谋取平衡,
在满足广泛涉猎与追求术业专攻之间谋取平衡.

媒介插上人工智能的翅膀将如虎添翼, 与资讯比翼双飞.

新闻爱好者的良心之选, 匠心之作.

UfqiNews presents the hot spots globally, with all interesting points at a glance.
Information is organized here and there is a clear storyline within every single detail.

UfqiNews brings a brand new reading experience, no information overload and no information Cocoons,

In seeking a balance of the maximum social consensus and meeting thousands of people for each interest,
In achieving a balance between satisfying a wide range of hunting and pursuing specialization in the industry.

That media is being born with wings of the artificial intelligence will be even more powerful and the information will fly swifter than ever.

Better choices of newsreaders and the art of work from them.

 

发表在 UfqiNews有福新闻, 服务器运维, 社会生活, 编程技术, 计算机技术 | 标签为 , , , , , | 3条评论

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

汉吉斯特Hanjst模板语言及引擎在线文档Doc&API首发

经过一段时间的梳理总结、精心编制,汉吉斯特Hanjst在线文档和API已经完成初版,并发布在 //wadelau.github.io 上,为方便检索和使用,兹列目录如下,供查询、使用。


 

汉吉斯特Hanjst概述

Hanjst标志

Hanjst是一个Han J ava S cript T emplate,它是HTML和Web的模板语言和引擎。

“ 汉吉斯特 ”是 Hanjst 的中文名称。

入门

Hanjst是什么?为什么?

安装

配置

调试

快速开始

杂项

Hanjst为模板设计人员

基本语法

变量和修饰符

功能函数指令

内置功能

自定义功能

Hanjst在服务器端运行

Node.js

Hanjst为后端开发人员

Hanjst 对象类

服务器端替换

JSON中的数据

资源

路径

脚本

第三方类库

图片

高速缓存

随时可用样例

搜索引擎优化

标题,描述和关键字

链接

文本内容

 


在线文档目前没有中文版,只有English Version,以下是 English Version 的目录列表。


. . .


Contents in English Version


 

Hanjst Overview

Hanjst Logo

Hanjst is an Han JavaScript Template, and its language and engine for HTML and Web.

汉吉斯特” is its Chinese name.

Get Started

What is Hanjst and Why?

Installation

Configurations

Debugging

Quick Start

Misc.

Hanjst for Templates Designers

Basic Syntax

Variables and Modifiers

Functions

Built-in Functions

Custom Functions

Hanjst Run in Server-side

Node.js

Hanjst for Back-end Developers

Hanjst Class

Server-side Replacements

Data in JSON

Resources

Paths

Scripts

Third-party Libraries

Images

Caching

A Ready-to-go

Search Engine Optimization

Title, Description and Keyword

Links

Plain Contents

 




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/-汉吉斯特, 编程技术, 计算机技术 | 标签为 , , , , , | 2条评论

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