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

b族维生素片 多种复合维生素b 维b1 b2 男女性vb维他命b6AI语音智能手写板电脑写字板免驱老人打字输入板大屏手写键盘插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板男士沐浴露持久留香古龙香水香氛液乳洗发水浴

金融证券市场保护性止损的重要性

2022年3月15日这一周在以后的中国证券市场发展史上可能会被记录为具有重要见证的一周。原本要记录些这一周的跌宕起伏和惊心动魄,记录那些一个个的“活久见”——美股中概股暴跌后暴涨,港股大盘暴跌后暴涨。恰此时,知名自媒体“兽楼处”发表了一篇类似的文章,甚为共鸣,转贴于 有福常在UfqiLong: https://ufqi.com/news/ulongpage.3720.html?tit=中国证券市场见证历史的一周:2022年3月 .

这一篇大致要回顾一下证券市场中谨慎设置并严格执行止损策略的重要性。这是温习经济学的第十一篇,其余之前的十篇,请参考文末的链接。

科班出身的金融专家都知道金融是经验风险的行业,是一门对天资要求颇高的“手艺活”。金融的本质就是把握好风险和收益的平衡。在价值交易者中或许可以靠无限量的资金优势和无限长的区间拉平和抹平损失,而趋势交易者就需要务必认识到证券市场阶段性,并在下跌趋势中及时止损。
这是金融证券市场的金科玉律般的教条,如果需要案例,凡是经历过2022年3月这场类似股灾的从业者都应该有刻骨铭心的记忆或教训。被誉为华尔街神童的证券股票交易大师 Stan Weinstein 在其代表作:https://ufqi.com/news/ulongpage.3605.html?tit=股票称傲牛市熊市的秘密 中就专门章节论述了,绝不能持有任何没有止损性保护的头寸。
这些止损性保护或者此前的支撑位或者周线平均线等指标。

止损,是一个听起来让人不舒服的词语,尤其是保护性止损或者割肉止损。实际上,正如词语所暗含的意义一样,的确是在断臂求生,去疮止脓。比如根据支撑位或者经验值,我们通常说可以接受10%以内,20%以内下跌,再止不住,就要认输认赔,止损离场。

这是绝大多数结构投资者都必需也是必须要做的,恰恰相反,更多个人投资者却不屑于设置止损保护,或者设置而不严格执行,最终陷入巨大的窟窿之中无法自拔。这可能是在金融证券市场个人投资者七亏二平一赢的背后原因之一。

金融证券市场投资绝不等同于赌博,不是靠猜测,而是靠概率,靠数据、数学来决策,尤其是计算技术发展迅速的今天,量化交易(机器人)的占比在逐步提升。既然靠概率,不是赌博,所以在任何情况下,都不会采取越输越加倍下注的下等策略,也不会将所有筹码都一次性地孤注一掷。

不管是投资交易高手强调的10%,20%必须且必需割肉认输止损离场,还是传统意义上的,当某一市场指数下跌20%后就被认为是技术性熊市,这其中背后可能存在某种数学上的关系。我们尝试列举了一些情况下上涨和下跌幅度的变化数值,比如某一证券标的物,从100元下跌到1元,然后再从1元上涨到100元的情形。

Fig1. 证券市场价格上涨与下跌幅度对比

从 Fig1. 证券市场价格上涨与下跌幅度对比 图中 , 我们可以看到如果回撤幅度在10%,则反弹幅度只要到 11.11% 就可以回本,基本上等比例幅度的反弹就能够找回损失。如果回撤下跌幅度达到20%时,需要至少 25% 的反弹上涨才能抹平下跌导致的损失。这几乎是同一个数据段的极限了。当回撤进一步下跌到 30%左右时,无法通过 30% 左右的反弹来弥补损失,而且越是往后,回本所需反弹上涨的幅度越大,50%的下跌,需要100%的反弹上涨才能找回之前的损失。这几乎是风险与收益完全不对称了。

当回撤下跌达到 70%时,几乎没有希望在可以预见的将来能有 3-4倍的反弹上涨,200% ~ 300% 的上涨?
如果继续抄底,更可怕的还在后面,当下跌回撤到 90%的损失时,需要十倍 900%的反弹上涨幅度才能回本,这几乎是余生是否能见到的场景,都值得怀疑。
而这真是当前(2022年3月)美国股市中国概念股所经历的情况(下毒Fig2.)。

Fig2. 美国股市中国概念股整体下跌超过90%

证券市场新手死于追高,老手死于抄底,是这么来的吗?上图Fig2.中下跌90%左右的股票,什么时候能回本?
为何下跌起来会越来越快,而上涨通常会越来越慢?

数学上看,prime越下跌越小,其后的价格变动绝对值,对prime本身的占比就越大,100元的跌9元,幅度是9%, 而10元的跌9元,幅度就是 90%了。
上涨慢的原因刚好反过来,prime越上涨越大,其后的价格的变动绝对值,对prime本身的占比就越小,10元的上涨了9元,幅度是90%, 而100元的上涨了9元,幅度是 9%。

上涨幅度慢的另外一个不容忽视的力量时,总是有对手盘在不断地分批次地“止盈”, 设想10元的价格上涨到20元, 幅度100%, 可能中间过程,反弹上涨幅度在 20%, 50%, 80%时,已经有大量的获利盘进行止盈操作。这些对手盘的抛盘操作,对持续上涨形成了巨大的压力,甚至改变上涨趋势,重新转为新的熊市,继续下跌。
于是,之前没有回本的继续被埋下去,同时又引入新的陪葬品。

当个体投资人有限的本金被深度套牢后,再无新资金进去按新的方法实施解救,余生之年是否能回本都是让人怀疑的,于是自然而然地形成了 七亏两平一赚 的悲情市场。
相反地,机构投资者,由于有止损操作,叠加当一笔失误导致20%的损失后及时止损,同时还有其他资金持续增援,还可以在其他场次找回这 20%的损失,循坏不已,生生不息。

未学会躺赢,先学会认输,这大概值得每一个准备入市,或者在金融市场跃跃欲试的投资人深思,甚至警钟长鸣。既然美股中概股可以“九年涨幅,一夜归零”( https://ufqi.com/news/ulongpage.3721.html?tit=时代的一粒沙美元证券投资基金的一座山 ), 作为个体投资者十年盈利,也可能在一次无底洞的失败中彻底失去所有翻盘的本金。

被美国股神沃伦巴菲特尊称为老师的格雷姆在《聪明的投资者》( https://ufqi.com/news/ulongpage.3423.html?tit=聪明的投资者 The intelligent investor:安全边际:投资的核心概念 )末尾总结说:

我大胆地将成功投资的秘密精练成四个字的座右铭:   “安全边际。”

照猫画虎地,我们在 UfqiFina 有福金融 的尾注中,添画了提示语:

⚠️市场有风险, 投资需数点. 安全无边际, 流泪抹鼻涕。

这是温习经济学著作的第十一篇习作,之前的各篇附列如下。

  1. 经济周期论兼议称傲股票牛市熊市的秘密, https://ufqi.com/blog/economic-cycles-and-profits-in-stock/
  2. 国债与信用货币, https://ufqi.com/blog/treasure-credit-money/
  3. 理性经济人在边际上做选择, https://ufqi.com/blog/economic-selection-on-margin/
  4. 写写年度收益率年均收益率和年化收益率-4, https://ufqi.com/blog/income-rate-annuals-with-buffett/
  5. 写写年度收益率年均收益率和年化收益率-3, 
    https://ufqi.com/blog/income-rate-annuals-with-yale/
  6. 写写年度收益率年均收益率和年化收益率-2 , https://ufqi.com/blog/income-rate-annuals-with-cic/
  7. 写写年度收益率年均收益率和年化收益率, https://ufqi.com/blog/income-rate-annuals/
  8. 治大国若过小家——写写王朝兴衰更替背后的经济账, https://ufqi.com/blog/political-reform-country-vs-home/
  9.  写写存款利率贷款利率和负利率, https://ufqi.com/blog/captial-rate-and-minus-rate/
  10. 写写1929年美国经济大萧条与2020年美国股市大跌, https://ufqi.com/blog/us-1929-economic-crisis-2020-stock-shock/

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

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

本文: https://ufqi.com/blog/security-sell-to-stop-losing/ , -R/u2SU

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

b族维生素片 多种复合维生素b 维b1 b2 男女性vb维他命b6AI语音智能手写板电脑写字板免驱老人打字输入板大屏手写键盘插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板男士沐浴露持久留香古龙香水香氛液乳洗发水浴

GWA2 Java 增加多线程数据共享通道 globalData

令举国民众震惊的江苏徐州丰县铁链女(生育八孩女子)一事逐渐被消音( https://ufqi.com/news/ulongpage.3651.html?tit=仍留下徐州丰县生育八孩女子独自面对命运|舆论手札 ),今暂且不论。

GWA2 Java 最近被部署到一个金融类项目( 有福金融:https://ufqi.com/finance )上运行之后,持续遇到并发、数据同步、多进程多线程数据访问控制的挑战。在此前一篇的博客中,我们讨论了在数据同步时的数据加锁的过程细节:Synchronized同步Quque队列Concurrency并发与线程锁Lock ( https://ufqi.com/blog/gwa2-php-synchronized/ )。 今天继续这个话题,讨论 GWA2 Java 寄宿于 Apache Tomcat中多进程多线程编程及运行时环境下,如何实现对多线程间数据的隔离与共享。

前文记述,在Apache Tomcat 等容器中,实现对数据的安全管控的最好的方式是使用 Synchronized 同步机制,让程序单线程运行,但这很难在Application层面扩展处理能力。于是我们修改了规则,默认不再启用 synchronized同步机制在全局。这样 GWA2 Java 重新回到多进程多线程运行环境,并发扩展能力激增。随之而来的就是在多线程运行时环境下,数据的隔离与共享。
有些数据是需要隔离的,比如在多线程并发运行时环境下,当请求1被线程A接管的同时,请求2被线程B接管,如果不做数据隔离的话,在整个进程中的数据都会被重置为较后者进来的请求。
我们需要某种机制将请求的各种数据限制在线程内。

同时,有些数据又需要被共享,一个接口或进程启动后,总有一些全局性的设置或变量,需要能够在所有线程中被访问到。这又要求我们必需提供某种机制能够满足,在多线程环境下,对一些全局数据的读写访问,并保障这些数据是线程安全的(Thread-Safe)。

fig1.单线程与多线程运行时状态示意图

在一番分析和探索之后,我们对GWA2 Java做了如下改进和升级,以实现GWA2 Java从 “线程不安全—单线程安全—多线程安全” 的演进

1/3. 改进全局数据容器data的类型:用ConcurrentHashMap取代HashMap

脱胎于GWA2 PHP,我们始终认为需要一个全局性的数据容器,可以将任务/业务处理过程中所产生的数据临时存放起来,这个数据容器无疑类型是一个字典表之类。在GWA2 Java中,起初使用了 HashMap(非线程安全的),后来遇到数据同步问题后,使用Synchronized同步关键词得以临时解决。
再次的探索研究,我们认为是时候使用 ConcurrentHashMap替代HashMap 了,ConcurrentHashMap 对多线程有更好的支持,而且是Java原生的数据类型。
代价也是有的,毕竟ConcurrentHashMap在数据读写时,要处理线程锁的问题,因为在数据处理上开销更大,速度稍慢。
另外令人不好接受的是,ConcurrentHashMap不接受null空值,key或者value,都不行,这无疑对于痛恨Java null的开发者来说,将会更加多地要注意,存储data数据时,需要考虑到是否null的前置判断。

2/3. 改进多数全局变量的作用域,由对象类的作用域缩小到方法体的作用域

在前一节改动使用 ConcurrentHashMap 取代HashMap后,data容器的确是数据安全了,可请求数据在并发情况下被重写的问题仍在。这源于我们在 JSP文件中声明变量时,使用!感叹号这样的武器。

<%!HashMap data;%>
将会生成一个作用域为对象类的变量data
<%HashMap data%>
将会生成一个作用域为方法体的变量data

这其中的细节可能要参考Java Servlet相关技术规罚手册。

根据Apache Tomcat默认能够将每一个请求分发到一个线程处理的机制,结合fig1.中对多线程的描述,我们发现将数据容器data的作用域由对象类缩小到方法体内,是解决这个问题的答案。
这就解决了请求数据在多线程环境下的数据隔离问题,当GWA2 Java所需要的数据容器及其他多数变量都已经内置于线程内(register和stack区域),其数据自然是被完全隔离的了。

改动也是有代价的,当我们做这样的修改后,data这样的“全局”变量的作用域减少了,是为了线程间数据隔离,同时也阻碍了我们在任何代码块中访问和使用这些数据。
比如在一个自定义的方法体内,在此改动之前,可以直接读取和写入操作data, 而这次修改之后,将不能对data数据进行任何读取或写入操作。

3/3. 增加线程间数据共享通道 globalData

改进到前两步已经实现了多线程安全的GWA2 Java运行时环境保证。但我们还不满足于此,我们仍希望GWA保持整个套系的风格,在GWA2 PHP中,全局变量 data 始终是全局的,任何代码空间都可以访问到。
在2/3.改动之前, GWA2 Java也能够提供这种全局访问的便利性,那是以靠Synchronized同步机制提供了单线程环境。有没有可能在 2/3.多线程运行时环境下,也提供一个具有全局访问便利性的数据容器data?

答案是肯定的,我们为GWA2 Java增加了线程间数据共享通道 globalData.

通过之前第二步的改进我们知道,当使用!感叹号标记的变量声明时,即可声明一个作用域为对象类的变量(fig1.中的code和data区域),这个变量可以在所有线程可见,在当前对象类的所有方法体可见。
如果把它声明为ConcurrentHashMap,其自身数据将是线程安全的,同时如果再进一步提供某种机制,保证每个线程都能够通过它读取到线程Id相关的数据,则又实现了线程间的数据差异。
沿着这个思路,我们定义GWA2 Java多线程间数据共享通道 globalData 。

<%!ConcurrentHashMap globalDataHolder;%>
<%globalDataHolder = new ConcurrentHashMap();%>
<%!
//- write/read global data into/from a thread-safe holder, 09:18 2022-02-24
//- write
public static void globalData(String key, Object value){ .
String threadDataKey = “GWA2-” + ProcessHandle.current().pid() + “-” + Thread.currentThread().getId();
.. }
//- read
public static Object globalData(String key){ … }
%>

如此以来,我们拥有了全局的数据容器globalDataHolder, 只是它的读写是线程安全的,但数据并不是线程安全的(没有线程标记),读写带有线程Id标记的数据时,需要通过全局静态方法 globalData .
预期使用场景, 在GWA2 Java的任何代码区域,可以访问到 globalData, 通过这个通道可以轻松读写线程安全的数据。
任意代码区,写数据: globalData(“a-key-name”, Single_Value_Or_List_Object);
读取数据: String aString = (String)globalData(“a-string-key”);

在GWA2 Java的请求处理的 comm/footer 部分,会对全局的数据容器 globalDataHolder与本地的 data数据做进一步的merge操作,然后一同交给下一步的模板处理引擎Hanjst.

这个通道取名 globalData,也参考了GWA2 PHP的做法,比如在PHP中,任意代码块中,可以访问全局变量,使用关键字 global $myObject ,意思是现在要去读取全局变量 $myObject 这个对象了( https://www.php.net/manual/en/language.variables.scope.php )。
GWA2 套系(GWA2 PHP,GWA Perl, GWA2 Python, GWA2 Aspx),跨越多个编程语言,也希望能超越单个语言限制,赋能软件研发,提升生成力。

以上引用的代码块可以在GWA2 的项目GitHub库( https://github.com/wadelau/GWA2 )中查阅,也可以在 gitee上的GWA2( https://gitee.com/xenxin/GWA2 )访问到。

客户问道:更新升级后的 GWA2 Java 还有bug或漏洞吗?
诚惶诚恐地,我们的答案:没有已知的问题了。
哪一个 GWA2 的版本是最好的?
下一个。


全文原发: https://ufqi.com/blog/gwa2-java-multiple-threads-globaldata/ , -R/22SU


GWA2

-GWA2 吉娃兔 是”通用网络应用架构( General Web Application Architeture, 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
轻松启动, 快速产出.


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

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

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

爱好笔芯0.38黑水笔笔芯0.5黑色碳素全针管红色0.35子弹头按动签字笔调整型聚拢收副乳无钢圈大码无痕内衣得力彩色铅笔油性彩铅学生用专业手绘48色水溶性彩铅笔24色画画笔36色小学生安全无毒水溶款绘画素描儿童铅笔自然之宝小粉瓶美国进口软糖促进胶原蛋白合成美颜护甲护发水果糖

Synchronized同步Quque队列Concurrency并发与线程锁Lock

GWA2 Java最近做了一次核心功能的升级,缺省模式下不再开启用于进行线程同步控制的synchronized功能。

在最近一次新项目的GWA2 Java开发部署中,我们需要调试一个通过WebApp.readObject来读取外部资源的功能。由于需求涉及到读取一个较长的资源列表,我们就设计了一个自动程序,循环轮询基于GWA2 Java的API接口。一切进展顺利,但程序偶尔会出现超时的现象。

起初我们怀疑是WebApp.readObject的方法中没有限制timeOut,导致读取外部资源时卡壳,进而影响到GWA2 Java应答外部需求。我们即对读取外部的URLConnection方法设置了 setConnectionTimeout和setReadTimeout两个限制时长的操作。这一改进也很快得到验证,部分请求确实会触发timeOut,根据需求适当延长这个限制即可。

然而问题仍然偶尔还会出现,尽管我们将轮询API的进程改为一个,轮询时间间隔如果稍微缩短一点,可能就会出现卡壳。问题一路narrow-down下来,就锁定在了程序执行上,当前一次的轮询没有完成,就触发下一次轮询时,下一次的轮询会天然地增加等待时长。相当于基于多线程、多进程的Apache+Tomcat变成了单线程服务。更为严重的表象时,当API应答程序在处理外部资源请求时,其他所有同一应用程序接口也一并被悬停,直至最后Timeout/504.

问题就不是当前API接口问题了,进一步的分析,我们将故障定位在此前某次某个项目的数据安全性核查时,发现没有数据共享/进程安全的设置,就在GWA2 Java的入口程序设置了Synchronized(this) 关键词约束——这样,整个Application应用将变得非常安全,只是性能上不再支持并发请求,所有请求必需单队列逐个处理。

通常在一般情况下,如此安全的设置和不支持并发请求并不会立即显现出来。这是因为GWA2 Java的应用开发交付后,多需要每个请求在数个毫秒级内处理完成,也即用户能感知到的2-3秒内,GWA2 Java应用程序已经顺序地完成了几十到几百个队列请求了。这几百个“同时”完成的请求,给终端用户甚至是开发者以支持“并发Concurrency”的假象。这样以来,某次更新GWA2 Java时,加入的 Synchronized的约束居然一直使用到现在,直到我们在测试育有超时的程序引发的GWA2 Java不能及时在毫秒级完成任务的特殊情况下,才触发我们进一步分析和完善这一潜在的漏洞(Bug)。

fig1.应用程序多线程下的线程锁

接着这个机会,我们想深入复习一下Synchronized同步Quque队列Concurrency并发与线程锁Lock。由于软件开发的主流逐渐步入以线程为单位,我们在网上找到一张描述线程间获取共享资源的流程示意图(如上图fig1.)。尽管这些名词有些抽象,我们可以拿一个具象的东西来说明这里的来龙去脉。比如高速公路上的收费站(如下图fig2.),收费服务就可以视为一个网络应用服务,每一个收费口就是一个应用服务的实例或进程,而每一个闸机口就一个处理线程。有一个闸机口的就是单线程,有多个闸机口的就是多线程。

fig.2高速公路收费口多通道并行

收费口的线程(闸机口)是多个并行,这很显然的是能够提升通行效率,而且线程同时开得线程越多,通行越快。这也是多进程多线程成为主流的关键之一。这是理想状态,也是默认的并行处理结果。因为每个闸机口在处理请求通行时,不需要彼此“问询”或者“交互”,各个可以独立自主地完成。用户计算机术语说是不不要处理“共享资源”,也不需要锁什么的。

如果我们人为的设置一个“共享资源”,情况会怎样?比如这所有的线程(闸机口)只有一把钥匙能开,每个线程完成计费、收费后通知这边钥匙去开闸放行。这就是典型的多线程秒变单线程了,完成收费后的线程需要等等开闸机的钥匙,然后再才能服务下一个请求。这个开闸机的“钥匙”就是fig1.中的“锁”。

只有一把钥匙的情况是虚拟的,现实生活中可能不存在。但核查车辆是否合法、司机是否违章是确实存在的需求,比如再多的闸机口都需要统一请求到交通中央数据库去比对车辆记录、司机记录,然后等待反馈结果。在世界的另一面,交通警察执法等在不停地向数据库中写入、更新违法、违章记录。当一笔写入发生时,所有的读取访问,都要被“悬停”等待,这就是“锁”。

由是可见,这同步与并发存在矛盾,为了减缓这种矛盾,收费口闸机口可能缓存交通中央数据库的数据,用一段时间再做一次更新,做到“准实时”(及时,in-time),而非“真实时”(准实,real-time). 在惊心动魄的逃亡类电影情节中我们偶尔能看到,男主女主苦主刚刚通过机场登机口闸机,边检员的屏幕上就显示出新推送到的苦主作为犯罪嫌疑人的资料。
在线网络服务中,用得较多的需要同步控制的“共享资源”的场景,如电商网站的库存,库存数据是每笔交易后都需要更新,当有更新发生时,必须进行枷锁操作,以使得当前有且仅有一个线程在操作数据,从而避免了“一货两卖”的错误。

同步、并发和锁的问题不独在Java中,在GWA2 PHP也会涉及到。所不同的是PHP的Synchronized的控制,既有系统地的PThread对象组件,也有微观flock方法函数。

只谈设计思想和实现思路,已经构成一篇博客Blog, 居然没有任何示例代码补贴出来。所幸无论是Java,还是PHP或者 GWA2 Perl, GWA2 Python等,都能够轻易地的通过搜索引擎找到编写良好的关于synchronization同步和Concurrency并发的示例代码。


GWA2

-GWA2 吉娃兔 是”通用网络应用架构( General Web Application Architeture, 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
轻松启动, 快速产出.

本页地址: https://ufqi.com/blog/gwa2-php-synchronized/ , -R/T2ST

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

b族维生素片 多种复合维生素b 维b1 b2 男女性vb维他命b6AI语音智能手写板电脑写字板免驱老人打字输入板大屏手写键盘插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板男士沐浴露持久留香古龙香水香氛液乳洗发水浴

经济周期论兼议称傲股票牛市熊市的秘密

断断续续的编译、精读完成了Stan Weinstein的《称傲股票牛市熊市的秘密》一书的原著。原著英文篇幅并不长,不足400页,翻译成中文可能不足300页,但却差不多花了我三个月的时间,从2021年11月到2022年1月,差不多是每天几页书的速度在读。在之前的阶段性评论时,我写到:

“又念及这每一段文字下面都是美国华尔街股市无数散户的森森白骨,读得快了怕是阴气太重无法消散。在冬日正午的阳光下散步时去反思去揣摩去论证去质疑…” ( 山高水长师恩难忘, https://ufqi.com/blog/thanks-to-teachers/ )

实际情况是阅读此书确实让人收获颇丰。这本书在豆瓣网上评分9.0+/10.0,在亚马逊电商网上评分为9.4+/10.0. 尽管一度被揶揄说是被书名误导坏了的一本书。如此高的评分,也促使我们将其以致敬的方式收入到 有福经典UfqiClsc: https://ufqi.com/news/clscpage.1074.html?tit=称傲牛熊市的秘密 Stan Weinstein’s Secrets For Profiting in Bull and Bear Markets .

Stan Weinstein( 史丹·温斯坦 )不避讳地说,他的理论属于证券分析的技术派。证券技术分析的理论前提是周期论,历史会重演,太阳底下没有新鲜的事。连贯起来之前阅读涉猎的有关经济周期的相关资料,我觉得有必要对其进一步地梳理,以期形成一个关于经济周期论的自我认知小结。这已经是温习经济学内容过程中的第十篇记录了,之前一篇是 “国债与信用货币”( https://ufqi.com/blog/treasure-credit-money/ ), 其他章节的链接也分别附录于文末备查。

经济发展是有周期的,历史是会重演。太阳底下没有新鲜的事( There is no new thing under the sun. ),这句出自《圣经》的话说对了一半。对的一半刚好印证了我们的证券技术分析的历史会重演,在一个时期(周期)内,比如在太阳的这个如日中天的时段内,我们人生所经历的起起伏伏、历史朝代的更更替替、证券市场的涨涨跌跌、大海潮汐的来来回回、冬去春来寒暑易节因循不爽。
其错的一半可以用中国的古书《庄子》一句解读:夏虫不可语冰。我们还未完整地经历一个太阳周期,就说太阳底下没有新鲜的事情,显然有些偏颇了。如同夏天的虫子说,水不可能结冰一样。这里所谓夏天的虫子,是指该虫子的生命周期起于春末夏初、终于夏末秋初。

fig1. 不同对象的周期的层级与大小

从个体人的视角来分析经济周期,大致有如下几个层级:
R0. 个人的生老病死周期,作为工具人的时间大约30-40年;
R1. 比个体长一个层级的可能是一家公司/集体的创立、发展、繁荣与消亡;
R2. 比一家公司更长一级的周期是行业周期,一个行当的兴盛与衰亡;
R3. 一个政权实体的更替周期要比一个行业更长,但也有兴衰荣枯的节奏;
R4. 几百年的政权更替周期比起我们所赖以生存的地球周期,还是小一些;
R5. 地球的周期之于太阳系的周期,也小很多.

比个体人更小的循环周期可能是我们饲养的阿猫阿狗(R-1),也据说我们体内的细胞组织大约21天会全新更替一次——老的全部死去、新的全部创制就位。地球所归属的太阳系目前探知有46亿年了,这个太阳目前是生老病死的哪个阶段,人类目前似乎还把握不准,更大的还有银河系(R6),人马座星云等等。一个可以感知的对比是,个体人的尺寸之于地球,相当于体内细胞组织尺寸之于人体。

fig1.的图示显得个体人依附于某一个集体组织,集体组织/公司归属于时代的某一行业,行业又受制于政府/政权的管控,政府/政权短则数十年、长则数百年重新捣毁推倒重建轮回一次。基于这些认识,我们分析经济发展的周期,就显得容易多了。承认了经济发展是有规律地周期运动,那么作为经济的一部分,证券市场分析,则也在周期的大势之内。
fig1.的图示是单调的示意图,如果用傅里叶级数( Fourier Series )这样的数学大杀器或能更形象地描述周期发展的过程。

fig2. 傅里叶级数的收敛性表示经济周期 ( https://upload.wikimedia.org/wikipedia/commons/b/bd/Fourier_series_square_wave_circles_animation.svg )

fig2.中,从上到下从大到小可以分别表示政权/政府、行业/组织、公司/集体、个体。如果假设右侧所绘制的曲线上部表示“好的”,下部表示“坏的”,可以明显地看到,政权/政府对好与坏的结果影响最大,行业/组织在大趋势下形成小的波动,公司/集体影响次之,个体对好与坏结果的影响却是极其有限,波动范围极其窄小。
几乎是生逢盛世良治善政意味着躺赢地在“好的”区间(1n, 2n, 3n, 4n),而生逢乱世兵荒马乱,任你是绝世高手义薄云天,意味着几乎是地狱模式一般地拼尽全力也只为求生活命,在“坏的”区间(1u, 2u, 3u, 4u).

在Stan Weinstein里的书里,作者墩墩告诫并不断反复强调,技术分析要先看证券市场大势,并提出从森林到树木( From Forest to Tree )的选股择时方法。整体市场面是牛市还是熊市?某个行业是兴盛还是衰亡?某个个股是看空还是看多?当三者都满足时,该股票才被列入候选项,然后根据价格走势图择机买入,之后再择机卖出。
不要对抗大趋势,不在熊市时候出手,甚至不在下跌的时候持有,这大概是Stan Weinstein这本书的精髓所在,完全推翻了传统股票操作的金科玉律——低买高卖。取而代之的是Stan Weinstein推荐的呼之欲出的“高买高卖”,理论上破解了“新手死于追高,老手死于抄底”。

作为反例证,
1. 在整体大势上,如果2021年8月份入市香港股市,恒生指数已经进入熊市;
2. 在行业选择上,如果2021年5月份买入美国股市的中国互联网概念股票,尽管美国股市处于牛市,但该行业已经全面进入熊市;2021年9月份买入中国股市的医药行业股票,尽管中国股市还处于牛市,但该行业已进入熊市;
3. 在个股选择上,反例则比比皆是。

不幸进入这些熊市的股市或者相关行业、个股,传统的下跌回撤-20%以上的心理价位很容易跌破,如果没有这些意识而误打误撞进入,提前止损是唯一的出路。不要猜测底部,也许根本就没有底部,只有更低。回本盈利更是遥遥无期,也许最终会涨回来,只是没有人知道什么时候,三五年后作为被困被锁的资金,已经大幅折损。即便数年后回本并且盈利20%以上,计算一下年化收益率,也很难说有胜算,甚至无法跑赢实际通货膨胀率。更不幸永远涨不回来了,本金彻底灭失,这也是《聪明的投资者》告诉大家的,投资的核心是要有“安全边际( Margin of Safety )”(有福经典UfqiCsc: https://ufqi.com/news/clscpage.1069.html?tit=聪明的投资者 The intelligent investor )。

不对抗大势,相反顺势而为,则取胜的概率则较大。以较大的概率进行证券市场技术分析,即使偶尔有失误,也对长期收益不会影响太大,毕竟从概率上来说,赢面较大。如同做传统普通的生意买卖一样,有赚有亏,整体上是盈利的即可。这大概就是知道并利用经济周期的出发点和落脚点。
至于经济周期中的其他周期,也是可以观测到的,也是可以利用的。比如房地产周期,金融危机周期,煤炭石油能源周期等等。

最后,认清并理解市场参与者角色定位也很重要。Stan Weinstein也提到在证券市场里认清市场构成格局,不要试图让每个人都明白市场的阶段性和周期律。既不做教父,也不做圣母,因为正常的证券市场始终需要留一半清醒、留一半醉。他在书中举了一个极端的例子:如果所有投资人都读了这本书,都理解并遵照书中的套路去分析市场走势,当一个市场中只有买方或者只有卖方时,市场就死掉了。
这就是大师格局的思维了,以此可以将他与邪教异说区分清楚。世上所有的邪教都鼓吹:听我的,听我的,只能听我的,除了我之外再无别的神。
通过这里,我们也很容易理解,证券市场的参与者中,政府、中介机构总是天然地鼓吹入市、入市——只要资金入市,他们就有得赚,而市场中的买方和卖方又必须针锋相对地不一致,市场才能正常运转。
基于这样的四方角色分析的认知,市场上3/4的力量始终是同一个音调地喊“买入、买入”,而只有1/4的力量在微弱地发出声音说“卖出、卖出”。所以根据媒体和舆论意见建议去操作股票,十之八九要亏损的。

不知是幸运还是厄运,市面上经过各方鱼龙混杂地搅合,已经没有一个独霸天下的股票操作方法,相反地是各种法术千方百计、姹紫嫣红满园春的局面。这其中有多少真真假假,似乎已经不重要了,政府和中介机构可以渔利,四方角色中已经有两个赢家,至于后面是卖方获利,还是买方获利已经不重要了,铁打的营盘流水的兵。

小结一下, 经济发展是有周期的,历史是会重演。Stan Weinstein告诉大家了一个小秘密:股票的阶段性按周期的起伏涨跌规律。这个秘密如同天下所有的武林绝学一样,只传给信他的人,而且知道的人多了就不灵光了。

fig2.是一幅静态描绘大周期中套小周期的概念,借助于计算技术及互联网络的发展,我们可以看到更好的动画演示版本。通过动画版本,将个体人代入那个最小的圆圈(第四个红圈),看看我们社会中的一个个个体是如何随着社会大潮随波逐流跌宕起伏的吧。

fig3.傅里叶级数表述大小周期嵌套与互动动画

这是温习经济学著作的第十篇习作,之前的各篇附列如下。

  1. 国债与信用货币, https://ufqi.com/blog/treasure-credit-money/
  2. 理性经济人在边际上做选择, https://ufqi.com/blog/economic-selection-on-margin/
  3. 写写年度收益率年均收益率和年化收益率-4, https://ufqi.com/blog/income-rate-annuals-with-buffett/
  4. 写写年度收益率年均收益率和年化收益率-3, 
    https://ufqi.com/blog/income-rate-annuals-with-yale/
  5. 写写年度收益率年均收益率和年化收益率-2 , https://ufqi.com/blog/income-rate-annuals-with-cic/
  6. 写写年度收益率年均收益率和年化收益率, https://ufqi.com/blog/income-rate-annuals/
  7. 治大国若过小家——写写王朝兴衰更替背后的经济账, https://ufqi.com/blog/political-reform-country-vs-home/
  8.  写写存款利率贷款利率和负利率, https://ufqi.com/blog/captial-rate-and-minus-rate/
  9. 写写1929年美国经济大萧条与2020年美国股市大跌, https://ufqi.com/blog/us-1929-economic-crisis-2020-stock-shock/

—-

有福经典 UfqiClsc

有福经典UfqiClsc 是全人类传统优秀文化的网络再呈现,其致力于通过互联网络将传统文化中的书籍、图画、音乐、电影、软件等作品以不同的载体形式展现在读者面前。通过互联网络,有福经典UfqiClsc 希望能够将人类文化中的智慧瑰宝无差别地呈现在每一个网民面前,以期为往圣继绝学,为万世开太平。https://ufqi.com/news/?mod=clsc


https://ufqi.com/blog/economic-cycles-and-profits-in-stock/ , -R/p2SS

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

b族维生素片 多种复合维生素b 维b1 b2 男女性vb维他命b6AI语音智能手写板电脑写字板免驱老人打字输入板大屏手写键盘插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板男士沐浴露持久留香古龙香水香氛液乳洗发水浴

Web应用开发中的本地存储限额localStroage Quota

近几年互联网络的发展似乎进入一个瓶颈期。不独一时一地,全球趋势大致如此,大概处于传统互联网络已经日至成熟,而创新技术在萌芽期尚未获得突破之际。所以传统互联网络技术只好在细节上打磨、内卷(involution)和进化(evolution),以此来消磨革命性(revolution)和创新性(innovation)技术来临前的时光。Web应用(网页应用)的开发者中新推进的本地化静态存储locaStorage就是这方面的一个代表。

作为矢志不渝的目标之一,Web应用要在性能和体验上追赶并且超越本地应用,除了客户端机器本身性能和网络带宽的飞速提升,Web应用本身对数据的处理也是重要的革新和优化方向之一。将Web应用中的常用数据在客户端本地进行持久化静态存储是个不错的主意,目前多数浏览器已经支持,而且一经推出即获得好评和广泛应用部署。比如在我们最近的老项目 有福新闻(UfqiNews, https://ufqi.com/news ) 和新项目 有福金融(UfqiFina, https://ufqi.com/finance )中,都有用到网页对象 window.localStorage对象对用户常用的交互数据进行本地化储存。

处于谨慎安全与性能考虑,浏览器的本地存储localStore对象给与每个域名的空间是有限的,这个限制是理性的和平衡的。有了这个限制,在调用localStorage 进行本地存储操作时,就可能会触及限额超额的问题。目前多数浏览器默认的window.localStorage的限额为每个域名5MB的空间. 基本上节省点用,一些基本需求还是可以得到满足的。

这个节省点用,是个模糊的描述。最近我们在Web开发中就遇到了localStorage报错说超额失败了。这个错误信息大致描述为:

DOMException: Failed to execute ‘setItem’ on ‘Storage’: Setting the value of ‘A_USER_KET_NAME’ exceeded the quota.

至少有两个公开的Web应用中存在很容易触发类似问题进而影响正常功能使用的现象, 比如第三方共享/分享插件 ShareThis 和博客程序 WordPress 。引起window.localStorage的问题可能很多,ShareThis 和 WordPress报错也不一定是他们本身存储了太多的东西,但目前发现,他们由于localStorage问题影响了正常功能使用。

ShareThis 的Web页面的JavaScript程序对访问过的每一个页面无差别地将其写入本地存储localStorage,写入时Key为 st_shares_URL_WITH_PARAMETERS , 这很恐怖的导致 localStorage 存储尺寸飞速上升,如果访问页面地址很长,而用户又在一个domain站点里访问了很多页面,我们观测到当我们在 UfqiNews 访问2000+页面时,localStorage 存储ShareThis的数据已经开始报错超额了!😢

WordPress 的新版本在启用编辑器时,会调用localStoage,当操作localStorage读写失败时,编辑器就无法使用了。😰

上述读写本地存储localStorage问题表现在:
1) 同一个页面功能不该创建过多的Keys,比如ShareThis, 应该将所需本地化的数据统一放入一个 ShareThis_LocalStoage 主键Key下面,然后再是各个key/value 对,更加明确;
2)既然 localStorage有限额quota,那么在设计数据结构时和流转机制时,就应该以某种先进后出或者先进先出的形式,有定期更新和删除操作,不然再大的空间也有用完耗尽的一天;
3) 既然 localStorage有限额quota ,那么在设计读写操作程序时,就应该有错误处理机制,当遇到无法返回预期数据处理结果时,应该平滑地进行下面的操作,或读取远程服务器数据或操作磁盘文件系统,而不应该让程序因此而卡壳掉。

我们在 有福新闻UfqiNews和有福金融的开发中就遇到类似需求。当我们需要存储用户个性化的一些动态信息时,比如用户最近阅读的主题词或者用户查询的基金代码等。在没有window.localStorage对象之前,只能在服务器端存储,在服务器端上维持个庞大的用户浏览历史记录表,而且需要实时高并发的写入更新。这存储还可以,高并发的写入更新实在勉为其难。window.localStorage生逢其时,可以很好的满足这个需求,我们可以将用户的浏览历史数据,写入本地localStorage, 既是个性化、分布式的,也避免了实时高并发地写入更新服务器数据。

fig.1. 有福新闻UfqiNews全局热点和用户自选主题词列表
fig.2. 有福金融UfqiFina用户自选基金行情K线图查询历史列表

有鉴于在 本地存储中 ShareThis 和 WordPress上述问题的经验教训,我们在设计本地存储时,
1)遵循了一个功能点,设计为一个主键Key的方式,然后将相应的数据放入这个主键Key下面,以JSON等方式进行读写。
2)同时,考虑到本地读写的便捷性,我们还对历史数据进行排序和统计,让更高频地使用的主题词或条目排列在最前面,方便用户更快捷地命中信息。
3)基于这些统计数据,我们对所要存储的数据有了把握,可以控制要存储的数据条目数和所占用空间的尺寸。定期或者按需清除不需要的数据,从而节省有限的 window.localSroage空间,以图长久。
4)考虑到在服务器端无法感知的本地存储限额异常错误的发生,在运行时,如果读写本地存储异常时则跳过功能点继续其他页面流程,而不是卡壳程序。

在 内卷(involution)和进化(evolution)过程中,没有革命性(revolution)和创新性(innovation) ,我们能依靠的只有在细节上更精准地把握,才有可能产生新的突破(disruption),从而完成由量变到质变的飞跃(leap)。
JavaScript担当起Web应用开发的主角,还有很长的路要走,但前途是光明的,恰如数年前我们所预见的那样:JavaScript或成主导的编程语言( https://dl.ccf.org.cn/article/articleDetail.html?id=3738875941521408 )。 如果不去体验几乎难以想象,上面的fig.2.基金行情K线图是完全基于JavaScript的 HighChartStock 所绘制出来的。


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.


有福金融UfqiFina

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

发表在 UfqiNews有福新闻, 社会生活 | 标签为 , , , , , , , , , , | 一条评论

得力彩色铅笔油性彩铅学生用专业手绘48色水溶性彩铅笔24色画画笔36色小学生安全无毒水溶款绘画素描儿童铅笔自然之宝小粉瓶美国进口软糖促进胶原蛋白合成美颜护甲护发水果糖75度酒精湿巾杀毒消毒湿巾纸儿童学生便携医用外科口罩一次性医疗专用口罩防尘透气成人三层防护透气医生