清澈鱼缸与清晰的吉娃兔GWA2

0.

污浊的空气

2016Dec04,周末的北京又是一个重度、危险的空气污染时期。 已经连续三四周是每逢周末就重度污染,而且日渐严重!我们需要做些什么?除了圈在室内,还能做些什么?

重度危险的北京空气污染

1.

清澈的鱼缸

所幸,室内除了养花草,经过小半年的努力,浑浊的鱼缸终于清澈透亮。

没想到养鱼还是那么费周折的,初期是了解鱼的知识,然后是鱼缸的知识,再然后是水泵的知识,再然后是氧气的知识,再然后是水草的知识,“清道夫”的知识。这些还都不够,要构建一个生态,少不了要了解细菌及菌群食物链等。让鱼缸这次清澈见底,自建循环生态的关键一点是,用上了“超级硝化细菌”这样的大杀器。

Anyway,经历因为水体浑浊,金鱼们前仆后继的抗争后,世界清朗起来了。

清晰的鱼缸

2.

清晰的吉娃兔GWA2

经过近半年的思考和实践探索,逐渐明晰起来的还有 -GWA2 吉娃兔 的发展线路图。

GWA2 RoadMap / 吉娃兔发展线路图

GWA2 一种软件开发的范式,是跨编程语言的,是对软件架构的一种思路概括。更具体地,是对OOP编程的具体实践,在对象封装和代码复用的同时,实现与开发效率、管理维护的某种平衡。在其核心,提供了对运行时存储和持久化存储的分类管理,让开发者更加精力集中的关心业务逻辑,从而体现出E.A.S.Y的目标,Easy Along, Swift Yield,轻松启动,快速产出。

据上图,GWA2在编程语言上有二级版本,也即GWA2 in Java, GWA2 in PHP, GWA2 in C#等。在每一种开发语言下,根据运行方式的不同,可以划分为寄宿在Web Server中运行和单独命令行方式运行,如GWA2 in PHP就有两种运行方式,可以通过Web Server中调用运行,也可以在命令行下调用运行。

在寄宿于 Web Server方式时,又会有因为不同Web Server的不同而触发的不同版本。

在每种运行方式下,又可以细分为是否有GUI(图形化用户交互,Graphic User Interface)的子类。在Web Server中运行时,其GUI有基于HTML的表现层。在命令行下,如果没有GUI可以视作为一种后台运行的某种任务、服务;如果有GUI界面,可以看做是某种需要密集交互的用户应用——当然不是很严格的区分,有些后台服务,也有前端GUI控制台。

若在命令行下有GUI运行的情况,进一步地需要针对不同的操作系统来开发不同的终端GUI。

简而言之,GWA2的发展架构是多语言、多运行方式、多操作系统、多Web Server的一种软件开发设计框架,可以大致地划分为3级或者4级。

基于这些设计,GWA2可以用来构建一个网站或者一个管理信息系统(如 -gMIS )

可以用来写一个符合RESTful的API,

可以实现一个网络爬虫服务,

可以用来构建一个移动App应用或者桌面App应用程序。

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

汽車老司機愛自己悅己容2nd插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板書中自有顔如玉

-gMIS 更新多库连接及工作流workflow

 收到 -facebook 提醒说 -gMIS 没更新我才示意到有阵子沒有写关于 -gMIS 的内容了。

实际上,-gMIS 一直在更新,如下是几点值得书记的特色功能。不过首先要说的就是2016nov26,北京雾霾严重污染,pm2.5点指数300多。

1. 实现 -gMIS 的多数据库连接功能

得益於此前的 -GWA2 的多數據庫連接的升級,-gMIS 直接連接和操作多個數據庫成爲現實。此前 -gMIS 連接多個數據庫,衹是某種理論上的設想,並預留了全局參數 &db 在每一個request請求裏。遲遲木有落地實現,是此前部署的項目,多數為中小型項目,沒有多到必須同時連接和操作多個數據庫的需求。

這次有機會得以在具體項目中實施, -gMIS 同時連接和操作多個數據庫,其過程還算順利,將多個數據庫的連接及訪問權限,通過 inc/config.class進行設置,然後在訪問時,指明需要連接的數據庫實名或者假名,如 ?db=second_db&tbl=a_table,則該請求會將second_db的a_table讀取出來,並與環境變量、配置信息做merge操作。

連接多個數據庫的操作,主要分清 -gMIS 運行所依賴的 master_db/primary_db和所需要操作的其他數據庫。-gMIS 運行本身需要數據庫支持,比如存儲用戶賬戶信息、訪問權限信息和生成、管理輔助信息等。這一改動提現在 comm/tblconf 和 class/gtbl.class 中。

這種跨數據庫的連接,該是很基礎的一部分,更高層面的如果多個數據庫能夠實現跨數據庫的互操作,比如從a數據庫的b表中將c這條記錄的d字段值飛綫複製到a2數據庫的b2數據表中的c2記錄的d2字段中。

2. 实现工作流Workflow的簡易原型

在管理信息系統中增加工作流的想法由來已久,這次開始一個簡單的嘗試,增加了一個用於任務管理的todo list。至於一個task如何流轉,還在考慮和設計中。

新增的這個 todo list類似辦公桌案頭的便箋,來一件無法當即處理或者不需要當即處理,也即哪些重要但不緊急的事物時,可以臨時記錄一個便箋在案頭,到todo list裏,然後賦予其各種狀態(如待做、進行中和已完成等)。

顯然,距離實際的工作流Workflow還有好遠,實際的工作流應該是一個涉及多方、多個交互環節的工作/任務的流轉的過程記錄。這個需求也在 todo list裏。

3. 改进了桌面/默认页等細節

繼續改進優化 -gMIS 的默認首頁,增加了 todo list在桌面;

在進入目錄一層時,優化提現目錄下的功能模塊;

在“添加到桌面”為空時,優化顯示隨機模塊到桌面;

改進對 pnsc 和 pnsck 的編碼,使用 -Base62x 對其進行優化;

改進資源文件的路徑修飾,默認父路徑是當前管理後臺的 upld 目錄,增加設置為 srcprefix;

改進對默認時間字段的操作,如果是add操作則更新填入諸如insertdate/inserttime,createdate/createtime等字段;如果是edit操作則更新填入updatedate/updatetime等字段;

改進對字段的 trim 操作。

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

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

发表在 -gMIS, 计算机技术 | 标签为 , , , , | 3条评论

汽車老司機愛自己悅己容2nd插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板書中自有顔如玉

鸡蛋黄色的Orange和外教课english dict

Hanu顺利的完成入幼儿园的各种手续和检查,第一天、第一周坚持得很好,尽管到第三天有点不耐烦点情绪,但在老师和同学间还是控制自己很好,就是早上离家点时候有些不安点心情,也多会一晃而过。

第二周开始,居然从老师那里学来了,Apple,Banana的单词,并且在我带水果去上班的时候,认真地将水果用像不清晰的中文一样的语音把所会的两个单词表达了一遍。

最近有一次早上,我带他搭地铁去幼儿园,路上就从包里摸出一个小橘子?,问Hanu,这是什么,他很认真的回答是Orange,很赞。接着问又问,Hanu,对的,这是orange,那么这是什么颜色的呢?

出乎我带所料,他回答说是“鸡蛋黄色的Orange”。

观察Hanu长大的过程,与教育Yoyo的过程不一样,一是我的年岁又长了一些,同时视野也宽阔些,更重要的是,随着计算技术的发展,人工智能逐渐成为热点的研究领域,教会一个机器做某件事,是非常非常困难的事情。

当看到Hanu不几天的功夫就能在刚学会走路时,就能费力地爬上沙发。当其时在广州的大湄公河流域移动互联网论坛上,我还在分享AI的发展,MIT的一个跳跃的“机器豹”,对比人类的学习能力,机器或者人工智能真的还不能算是入门或者起步。一定要有某种或者某个节点的”顿悟“,才有突破。

适逢前周在中国计算机学会的青年科学家论坛上,聆听几位研究脑科学的教授给计算机学背景的同学分享了脑科学、神经科学的研究成果,所以当Hanu说出,他看到的Orange说“鸡蛋黄色”的时候,还是引发了我很多思考。

他的知识是怎么组织和管理的,他的逻辑是怎么关联的?显然他的词汇库里已经有了对“颜色”对模糊认识,但还没有能够使用和认识“黄色”的能力,这种情况是怎样一个过程形成了,Orange的颜色与他几乎每天都吃的鸡蛋黄产生了关联?

他应该也看到秋天的落叶(如满院子的银杏、梧桐河槐树)和黄色的衣服、鞋子、皮肤等,那些都是黄色,为何没有与Orange关联并用它们来描述?

都是圆的? 他的大脑的某种思维可能已经做了这种判断。

如果这个逻辑过程用人工智能的方式来实现会怎样?

Yoyo最近在上外教英文语言课,不是那种face 2 face的,而是通过Skype等在线工具进行远程教学。这种伴随着技术进步而带来的便利,是我们那时候学习所不能比拟的,我修习研读英文,也只有到大学才偶尔有机会与真实的外国人沟通。

我旁听了两次之后,提出Yoyo不应该再使用英中词典。当我只是提到这一点时,她似乎一下子就明白了,如果在与外教老师进行talking的时候,如果使用英中词典,相当于自己在额外地进行着“同声传译”,不会某个单词--查出中文意思--翻译成对应的英文--组织句子,她随即开始回想,原来之前“好强大”,好别扭,下次外教课上该使用english dict,英英词典——可能很多英语学习者一直以来都没用过或见过的,比如 -dict , -wordweb , or -oxford-dict。

我本要做进一步的解释,看来不必要了,她背后是怎么推理的?如果英文词典的解释看不懂会怎样?那些外企中中文对白夹杂英文单词时,真是为了“帅气”或者fashion吗?多数情况不是,真实情况是对中文掌握的没有英文好。翻译工作做得不好。语言是为了交流,当使用某个英文单词更能让交流顺利进行时,自然会被选。

再次回到上面说的那个计算机学会的认知计算的讲座,尽管都是中国人对中国人讲,但ppt基本都是英文,言语间也中英夹杂,实在是这样更容易理解和交流。

为何Yoyo自己之前没有反思?如果是机器逻辑来实现这种推理该怎么写?

人工智能的前景光明,其突破或者顿悟可能不在于对计算体系的构建,而在于人类对自我认知过程的深入学习与了解。上千亿(hundred billion)个神经元的大脑,大部分仍是一个个的谜。

也许模拟是起点和必由之路,装着装着就成真入戏了。

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

李宁体育用品汽車老司機愛自己悅己容2nd插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板

-GWA2 更新实现Filea和Perl版本的引入

2016nov19周末北京雾霾继续严重到重度污染!这次政府开始利用各种渠道提醒市民空气污染注意防护。继续在 -GWA2 上的更新,根据研发计划,这次结合实际生产需要,完成了 -GWA2 的Filea模块。截至目前-GWA2已经形成了完善的Dba,Cachea和Filea等模块,图例如下。

-gwa2更新多数据库驱动支持

GWA2 Dba

-GWA2 更新缓存调用built-in cache方法

GWA2 Cachea

这次实现的是Filea

GWA2 Filea

在早前,读写文件操作是通过 WebApp::setBy(‘file:’, $args)的形式来调用WebApp::readObject或者WriteObject来实现的。read/writeObject进一步的调用编程语言对File的读写操作,在PHP中,较完善的设施就是 file_get_contents和file_put_contents.

这样做并没有什么不好,而且使用编程语言的文件读写实现,可能效率还更高一些。然后某%

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

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

-GWA2 更新缓存调用built-in cache方法

-GWA2 更新增加对缓存的默认集成方法,使用额外指定缓存 Key 的方式可以激活缓存服务。

$cacheKey = ‘my-cache-key’;
$data = $gwa2->getBy(“field1, field2, ….”, “field1 like ?”, $withCache=array(‘key’=>$cacheKey));
或者
$data = $gwa2->execBy(“select * from tbl_a”, “field1 like ?”, $withCache=array(‘key’=>$cacheKey));

如此,则读取服务会首先根据指定的 $cacheKey 去读取缓存服务,若获得数据,则直接返回缓存中的服务;若没有获得数据,则进一步地调用读取外部数据如Database或者Filesystem, 也即

$data = $gwa2->getBy(“field1, field2, ….”, “field1 like ?”);
或者
$data = $gwa2->execBy(“select * from tbl_a”, “field1 like ?”);

经此被调用的读取方法,会在成功获得外部数据后,调用缓存的写方法,将数据写入到缓存中,已备下次相同请求数据 Key 的读取能够直接从缓存中获得。如此则实现了对缓存的默认集成,built-in cache.

大致流程及图例如下。

之所以使用集成的Built-in的方式,是因为如果启用缓存,在多个地方需要重复对GWA2::getBy/GWA2::execBy的反复调用,先使用缓存调用一遍,然后判断返回结果,若失败则再使用Db/Fs的读取一遍,再判断返回结果,如果是成功的则设置写入到缓存。大致流程如下。
$cacheKey = “my-cache-key”;
$data = $gwa2->getBy(‘cache:’, $args=array(‘key’=>$cacheKey));
if($data[0]){
    # read cache succ
}
else{

    # read cache fail
$data = $gwa2->getBy(‘field1, field2, …’, “field1 like ?”);
if($data[0]){

    # read db succ
$gwa2->setBy(‘cache:’, $args=>array(‘key’=>$cacheKey, ‘value’=>$data[1]));
 
}
else{
    # read db fail
}

}
上面的集成(Built-in)本质上就是对这些重复代码进行封装的操作,如此则让开发更快捷。随着实践的增多,或许稍后调用时,$withCache 的参数由一个带有 cacheKey 的数组变为一个 boolean值, 而 cacheKey 的生成则自动完成。也即,
$data = $gwa2->getBy(‘field1, field2, …’, ‘field1 like ?’, $useCache=true);

实现上面的操作,离不开 -GWA2 之前的更新操作,如 
gwa2更新多数据库驱动支持

受益于此,基于 -GWA2 的 -gMIS 将首先使用该缓存服务。

-GWA2 是一套通用网络应用(软件程序)架构系统,基于 -GWA2 可以轻便构建各种网络应用程序, 包括复杂的在线购物商城、 旅游交易平台、社群或者社交网站和新闻资讯网站等, 也包括各种企事业单位网上门户,在线交互及服务作业系统等. 还可以包括为NativeApp做服务器端支持, 甚至是WebApp的全部。

逻辑图的制作,使用 -cacoo 在线完成.

发表在 -gMIS, -GWA2, 计算机技术 | 标签为 , , , , | 2条评论

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

-Base62x Online 提供在线编解码


Base62x在线编码示例

0. -Bass62x 新近提供了在线对信息进行编解码的服务。想看看Base62x长什么样子,怎么用,使用 -Base62x Online / 在线编解码 马上可以体验。

1. 最近在 “-Base62x新增-PHP实现和-Java实现” 之后,陆续开始在 -gMIS 等系统中开始部署使用,并取得不错的效果。使用中,还在 -Base62x 的 PHP 版本中发现并修复了一个Bug。程序将变得更加健壮。

2. 同时,PHP版本的Base62x将被区分为PHP5和PHP7两个不同的版本,其中主要区别是PHP5不能在对象中声明常量数组,而PHP7则支持如此做。在GitHub上的版本为PHP7的版本,向下兼容需要将常量数组移动到和复制Base62x::encode和Base62x::decode两个主要方法中。

3. 最近遇到两个需求加强了我们继续完善 -Base62x。一个需求上在数字广告平台上,用户的一个click需要在不同的平台上进行跳转,这跳转的依据有时候依靠指定的 id/String来翻译地址(id/string等也需要进行编码),有的则直接将地址编码作为参数,两种方法都需要进行对URL地址做编码,在使用有字符到Base64过程中,“/”, ” “, “%”问题很多。

另外在改进 -gMIS 时,我们在JavaScript中对参数进行unescape时, 发现这个方法对“+”编码后,解码出来是“ ”,映射失败。 基于此,我们会加快推出Base62x的JavaScript版本。


Base62x 在线解码示例

 

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

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