AI後社會

李開復去TED講AI後社會。除了慣常的routine<->creative既axis去分析社會既工作,佢用多左條compassion axis去睇人同AI合作既工作。

 

 


 

個人感想:

o係未來可能講緊幾十年時間,AI技術都仲係未「底特律變人」到,咁都應該仲可以講下人同AI既合作關係既。

不過雖然AI係令人類方便左而且多左時間,可以更注重生活﹑倫常﹑love。
但可能少數比較high end人口先可以enjoy到得益。
隨住未來一波又一波智能工業革命,首當其衝的是失業問題。
社會會越黎越多閒置勞動力,而失去工作後佢地冇錢亦冇生活,low end no job no $ no life。

科技free左d man power,而man power背後既價值(人工)係唔會交返去工作既人身上,而只會是根據supply demand重新分配。
當中利益我相信大部份會係由”employer/公司/財團”與”科技資產掌控者”(e.g: amazon, alibaba)瓜分。

AI革命係咪能為人類帶來新生活?
是的,但可能係部份人生活得更易,而部份人生活得更艱難;
以及部份生活的基本元素更方便,而部份生活的重要元素卻更難以追求。

Java紫微斗數排盤open source library

其實我一早就想把Fortel的core部份open source的了,不過現在才比較有空整理一下project,寫一點test case及doc。

Github: https://github.com/airicyu/Fortel

 

Fortel

Java紫微斗數排盤Library

Author: Eric Yu


Samples

排盤

排盤:一九五二年十二月十五日早子時天盤,男性

JSON Output(Formatted):


檢查宮垣

排盤:一九九零年三月十一日午時地盤,男性

檢查命盤命宮是否: 會見廉貞, 並且同時”天魁或天鉞同宮”或”不見化忌”

Output:


檢查命盤命宮是否: 會見廉貞, 並且同時”天魁或天鉞同宮”或”不見化忌”

Output:


JavaDoc:

You can view the Javadoc page at “\fortelcore\javadoc\index.html”

[Nodejs] FB Page post comment/reply event engine

岩岩寫左隻FB Page post comment/reply event engine既Nodejs module。

個module目的係幫FB page owner去mon住個FB page係咪有新comment,然後generate event & 俾個位d人自己去寫callback logic。

實際做法就係佢背底會行個schedule job去call FB graph API黎check post既new comments。

NodeJS module for keep track Facebook Page Posts New Comments

NodeJS module “fb-page-comment-event”

This module can keep track your Facebook page posts’ first level comment events. Hence, if someone commented on your post, you will be notified by an event.

This module support running an event-engine which would manage a background schedule job to check new comment and generating events. This module also support raw APIs which you can check new comments and digest as events by yourself via APIs.

 

Related Pages

Github page: https://github.com/airicyu/fb-page-comment-event
NPM: https://www.npmjs.com/package/fb-page-comment-event

 

Description

This module can keep track your Facebook page posts’ first level comment events. Hence, if someone commented on your post, you will be notified by an event.

This module support running an event-engine which would manage a background schedule job to check new comment and generating events. This module also support raw APIs which you can check new comments and digest as events by yourself via APIs.


Running the event engine

You may use the lib.pageCommentEventApp(options) API to get a event engine app and then start it with run function. This event engine app would manage a schedule job to auto pull data.

Sample:

  • Remarks: pageId is the facebook page ID. postId is the facebook page post ID of post which you want to monitor its comment. accessToken is the Facebook page access token(remember to use the long live token) which Facebook page owner can generate in developer dashboard.

Sample console log output:


(DIY) Use the APIs to check new comments and generating events

Sample:


event engine APIs

let app = lib.pageCommentEventApp({accessToken, pullInterval})

Description:

Initializing the event engine app.

parameters:

  • accessToken: The required accessToken(need permission manage_pages) for the API calls.
  • pullInterval: The sleep time(ms) interval between each scheduled page post new comment checking.

return:

The event engine app.

app.registerMonitorPost({pageId, postId})

Description:

Registering a page post which the event engine would tracking for new comments

parameters:

  • pageId: The page ID.
  • postId: The post ID.

app.run(eventsCallback)

Description:

Start running the event engine and register the new-comment-events callback. Once users write new comments, new-comment-events would be fired and handled by the callback.

parameters:

  • eventsCallback: The batch new-comment-events handling function.

app.stop()

Description:

Stop the event engine


DIY APIs

let queryPostCommentAgent = lib.api.getQueryPostCommentAgent(options)

Description:

Initialize a agent for query post comments.

parameters:

  • options: object with attribute accessToken which holding the required accessToken(need permission manage_pages) for the API calls.

return:

The agent object.

let postCommentFetcher = lib.api.getPostCommentFetcher(queryPostCommentAgent)

Description:

Initialize a fetcher for fetching new post comment.

parameters:

  • queryPostCommentAgent: The agent object which come from lib.api.getQueryPostCommentAgent(options)

return:

The fetcher object.

let postCommentObj = await postCommentFetcher.fetch(postObjId, since)

Description:

Use the fetcher object to fetch post object with comments. We can use this API to get all new comments under the target post which those comments are created since the since time.

parameters:

  • postObjId: The post object ID which is in format of ${pageId}_${postId} in Facebook Graph API.
  • since: The timestamp in second

return:

The post object with comments (All comments child objects are new comments).

let postDigestor = lib.api.getPostDigestor();

Description:

Getting a digestor object which can turn the post-comment object from postCommentFetcher.fetch() result into new-comment-events.

return:

The digestor object.

let newCommentEvents = await postDigestor.digest(postWithNewComments)

Description:

Use the digestor object to digest post-comment object into new-comment-events

parameters:

  • postWithNewComments: The post object with attaching new comments.

return:

New comment event objects

關於呂麗瑤事件的評論

關於呂麗瑤事件,
我認為,對(疑似)受害者最大的支持,不是訴諸同情地輕信,而是求法制上﹑社會上的公平對待﹑保護。

法制那些我不熟悉就且不多說。
就「社會上的公平對待」而言,我認為社會是該用正面肯定的角度去對待受害者肯站出來面對的這件事。
但肯定受害者站出來面對,這件事從來不應簡單地等同於輕信單方面片面之詞,這是完完全全的兩件事。

好些人可能會說,大眾若持有這種理性批評,不輕信受害人,這對疑似受害人構成壓力,是一般被非禮/強姦者不願站出來的原因。
我get到的言下之意(如果冇get錯)好像就是說,你若不信疑似受害人所說的內容,就是在壓迫疑似受害人。
姑勿論是真非禮還是老作,女方較易受同情及信任,這是社會客觀現實。
但觀感上的同情情緒並不等於真相。
呂麗瑤選擇公開處理這件事,雖然沒有點名那名教練,但已令對方被辭退。(好似係)
若事件不明不白只是半透明地處理,其實大眾只是被借助社會壓力向校方施壓。
借助大眾的社會壓力本身無可厚非,但若件事不明不白地就發生,則這種訴諸同情而非真相的culture/做法對社會長遠有害無益。

很多人看待件事,可能是很簡化地either選擇了男方或女方立場。
件事內情其實至今仍然是外人大眾不大清楚,所以只能用推測角度去看,難以下定論,不用跟車太貼。
觀乎一般大眾那種「歸邊」,以及把「支持受害者站出來」以及「確信其所指內容」兩者的綑綁,在一片爭議之中對疑似非禮/被非禮方都是不公平的。

在這種處理不當﹑對雙方也有欠公允的情況下,我覺得社會大眾是應該再反省一下hashtag “metoo”的意義及社會大眾對待這些事的態度。
單單是一個hashtag “metoo”,加上一個人的片面之詞,是否就代表著真相與充分的證據??我看法是有點保留的。
陶傑那篇文,是有點抽水諷刺意味,寫出來引起嘩然。但他就社會輕信處理metoo hashtag的這個point而言,是有一定道理的。

關於blockchain的少少個人理解與想法

講少少個人理解,blockchain大概是一種在處理asset擁有及轉移的應用技術。
對於這種應用,傳統社會的做法牽涉大量trust與資訊交換機制與成本。而因為trust issue, 所以形態上是很多parties各自的centralized trust機制,所以加大了交易成本。

blockchain的做法,是去中心化的trust(rathet than only data storage層面)機制。
藉着公有公開驗證的做法,所有資產轉移都是自帶驗證。
所以大大解決了trust與驗證的成本。(這是blockchain的最大價值)

但當然,技術還技術上的價值,應用上仍然可以是空殼廢紙,所以把資產本質由實體($)轉為虛擬貨幣的應用,用家進入市場有很大風險。

另外,在應用層面,blockchain一定是資產轉移流水帳的use case。若否,則blockchain技術不會帶來太大價值。

另外,blockchain需要公開帳目,我沒仔細研究過,但我懷疑仍有可能由transaction之間去trace back到account持有者身份。
例如,我是e store, 我賣了一件貨給某人,進行了某bitcoin交易,那應該有一條transaction是若干bit coin由某人銀包轉移到我銀包。那我是否能由“某人銀包”去識別出其他關於某人的bitcoin交易?若我掌握大量銀包識別資訊,那會否讓我能知道大眾的帳目資訊?
(我不熟這範疇,純粹ff 想想而已)

Airic API Gateway

Just for fun.
最近斷斷續續前後用左幾個星期左右,自己用NodeJS寫左個REST API Gateway。
 
簡單講隻REST API Gateway做d乜就是:
有個API config server,可以o係上面register隻app+import個swagger,
之後就可以create client同reg API key,
之後就可以用d API key經gateway去call果d REST API。
 
隻Gateway帶黎既benefits係:
– 隔左一層as protection layer,
– 有得落Quota rule去set quota (quota rule =/= spikearrest),
– 會收集到usage stat (1minute bucket),事後可以睇得到某時間內咩人call過邊個app邊個rest operation幾多次。
 
 

Project code name:

Airic API Gateway
 
 
 

基本Features:

 
– 冇UI…(其實依個唔係feature…)
因為我好怕攪frontend野太煩sosad, 所以直頭完全冇攪UI。
CRUD app API﹑CRUD client﹑register API key全部management operation靠REST API去做。
 
– app API definition係食swagger。
 
– support quota rule (1m, 5m, 1h, 1d, 1week, 1Month)。
quota rule可以apply落app level, operation tag level, 或者operation level。(app/tag/operation係跟據swagger spec而判斷)
 
– support對應同一app之下,唔同client分別用唔同quota plan (可以同時apply多個quota plan)
 
– 會log低API usage statistic & 可以用REST API query返出黎,睇到每隻app/operation/client o係某段時間內call左幾多次之類。
 
 

Performance

 
load test今日有試過下。
local PC用jmeter做load test (200 Testing thread), nodejs cluster x 4, 有enable 3條quota rule。
 
throughput都做到~2800 req/s。
random take sample既純粹入gateway processing直至response完成時間(而唔計proxy call背後API既時間)大約係0.x ms至10ms之間。
 
之後我再試多次,code果度直頭完全唔proxy call後面API,直接response返去,咁就真係可以計到純粹gateway processing直至response既時間& throughput。
咁樣load test係可以去到~5200 res/s。
random sample 入gateway到response時間都大約係0.x至10ms之間。
 

project status:

 
算係做左prototype,functionally基本叫做workable…
不過test我都只係人手test冇mocha unit test, 亦都冇寫doc。
(遲D執返好晒D野少少, 得閒先放上github吧~XD)
 
 

Component有邊幾樣野?

1) API config server – 儲住App﹑API config definition既核心。
2) API gateway – 就係隻gateway
3) API stat server – 儲住usage stat
(原本諗住寫多隻key server由config server拆出黎, 但我發覺key同config好難拆得開,我懶+怕煩就冇攪喇)
 
 
 

Database用左乜

1) App Config可以用MySQL或者Mongo或者Memory (好似Mongo方便dd, 不過我MySQL都係用json type儲, 所以差唔多)
 
2) API key可以用MySQL或者Mongo或者Memory (MySQL或者Mongo都冇所謂)
 
3) API call quota可以用Redis或者Mongo或者Memory (Prefer Redis, 好似快好多咁, 依part是用key-value lookup的)
 
4) API usage stat可以用MySQL或者Memory (Prefer MySQL, 只用來事後Aggregate, 其實用Mongo做都ok不過我冇整到)
 

世界很複雜,尤其是人事的﹑政治的問題…

我自己個人的想法其實比較單純。
我喜歡寫code,我希望能幫到人們的生活,我希望能為人們解決到問題。
我希望我能一直地做這些喜歡做的事。
就算有天我老了,能力與適應力退化,遠遠被年輕人拋離;我也希望我能間中在家裡寫寫code做些玩具。

我想做的事

現今人們做的,好像都是差不多。
做些東西(Product/platform etc),儲user,growth,找人投資,再growth。
少數成功做大的,做大了就收割。
其實,也都是用科技搵錢。

我作為IT狗固然要食飯,但我自己對這些事($)不會特別的感到雙眼發光。
我真正感興趣的是,科技如何改變人們的生活,如何解決人們的問題。

我也明白,搵錢是一種利益,而利益對於sustain model是重要的。
只有sustain model,才能長遠解決人們生活問題。
而搵錢,有時是一種trade off,去settle既得利益分配問題。

這種sustain model﹑做法,是最正路做法,亦是大部份人們做IT所做的事。

——————————————————

我自己,心裡理想的想法,可以的話我是prefer另一種alternative。
對於解決人們生活的做法,我希望那是:

1) 盡量用低成本去解決。
低成本的做法,易於量化scale out

2) 盡量把成本分散﹑尤其是分散到用家之上。
那不只是decentralize server,而甚至是p2p形態﹑distributed形態,這樣能壓低成本,也能分散責任﹑ownership。

3) instead of platform﹑server﹑application
我更希望做到的是standard﹑做法﹑生態﹑culture

我的理想是有點太理想及太typical。
現實中,解決問題從來不是那麼容易找到一個做法是match到我自己的理想,也不是所有問題都適用這類model。

之前做的那個chrome「放工交通消息」只是一個玩具,不是什麼成功的東西。
但至少那件玩具之中,我不是隨便做,也不是純粹找最易做的方法去做。
我是有真正用心去想過,我想做什麼形態的東西。

那種工具,其實可以做web application形式去做,而我會比較熟,為什麼我要做我未做過的browser plugin?

因為,做web application,就要有server side,亦有server side的成本。(除非host o係github乜乜乜果種啦)

而做browser plugin,處理成本都在用家的browser。
所以做法上是低成本﹑能無限scale out,能做到成本分散。
我希望自己能多練習﹑訓練,做些離自己理想比較接近的東西。

平平無奇之中,生活之中,其實我每天想很多很多。

社區

一個城市,人與人之間的關係是疏離的。

我常常覺得香港的社區性不是很強。
人們返工放工回家,流連的就是公司﹑屋企。
人們有幾可會流連在社區的空間?落樓下散步?其實做的也只是各自各的自閉。
所謂的社區,可能只是交通配套﹑生活消費配套。

我自己覺得,理想的社區,是應該有一些公眾的廣場。
人們會在廣場流連,而廣場內會有著人與人的交流。

—————————————

「社區」其實是一個理想,但不是不可能的事。

在雨傘革命時,佔領現場除了是抗爭現場,當中還有一定社區性。
無論是金鐘﹑旺角﹑銅鑼灣,人們會聚集。
當中有些人會組成了一些小型的cluster group,大大小小交錯並存共生的cluster group,有著很多不同的人與人的交流。
這種是「社區」。
(當然,金鐘村我係覺得有少少on9,但on9還on9,我只是想指中雨革當中存有「社區性」,「社區性」不是不可能的事。)

—————————————

其實城市人﹑香港,現實沒有太強社區性。
社區的特性,都由現實轉移到網上的社交平台,例如Facebook。
人們習慣面向Facebook或其他社交平台,使用時感覺是與其他人交流。
在那些Public的page﹑group﹑KOL堆之中,其實就像在一個公眾的廣場。
人們自覺的或不自覺的選擇了或被Algorithm選擇了自己所站的位置﹑所得到的交流空間。

對於facebook平台的潛在問題﹑越來越顯現的問題,
我覺得問題不只是跳不跳去其他平台的問題。
其他平台,遲早也會有facebook的問題。
因為平台皆要營利,平台皆等著user growth到某一天收割。

—————————————

香港,這個城市。
我覺得,人與人之間,需要社區,需要社群。