Graph圖的相似性計算的極值問題

數據集的相似性計算,其應用十分廣汎,在現有的各類人工智能的底層算法中,大多數都是基於概率(可能性)的近似計算,然後取最大可能性的近似值。參考 理解计算:从根号2到AlphaGo ——第1季 从根号谈起 ( https://ufqi.com/news/ulongpage.191.html )。 另外使用神經網絡可以模擬任意曲綫函數,A visual proof that neural nets can compute any function ( http://neuralnetworksanddeeplearning.com/chap4.html ) 。
甚至,在早期的搜索引擎的計算中,如果計算兩個段落或者兩篇文章的相似性,也有使用基於圖的算法,將每篇文章視爲一個 graph,然後使用下面的圖的相似性的算法來計算兩者之間的相似性。

從一堆圖片中找到貓的照片是類似算法,車牌識別是這種算法,人臉識別、語音識別等都是類似的應用,神經網絡、深度學習等,莫不如是。人工智能AI之外,我們看到各種基於興趣的商品推薦,在綫廣告的智能匹配等等,都有這些算法的身影。
我們曾經開展過在綫廣告點擊率預測模型,其中運用到KNN算法,其核心就用到了 Euclidean Distance的計算 ( https://www.researchgate.net/publication/330742123_A_practical_study_on_imbalanced_data_re-sampling_for_conversion_rate_of_online_advertising ) 。

Neo4j 關於圖(Graph)的相似性計算(Similarity algorithm)提供了若干算法。
https://neo4j.com/docs/graph-data-science/current/alpha-algorithms/

這些算法都有詳細的解釋説明,樣例代碼等,這裏還有對幾種不同算法的對比分析(參考:余弦距离、欧氏距离和杰卡德相似性度量的对比分析 , https://www.jianshu.com/p/c4bbad87f873 )。 其中應用較多的是 餘弦距離和歐氏距離。

cosine similarity

Cosine Similarity/餘弦距離計算公式

euclidean

Euclidean Distance/歐氏距離計算公式

在 Neo4j 的文檔中,對餘弦距離和歐氏距離的應用場景都有差不多的描述:

我们可以使用欧几里德距离算法来计算两个事物之间的相似性。然后我们可以使用计算出的相似度作为推荐查询的一部分。例如,根据用户的偏好来获得电影推荐,这些用户所給出的评分与您看过的其他电影的评分相似。
We can use the Cosine Similarity algorithm to work out the similarity between two things. We might then use the computed similarity as part of a recommendation query. For example, to get movie recommendations based on the preferences of users who have given similar ratings to other movies that you’ve seen.

Neo4j是一個開源的NoSQL的原生圖數據庫。Neo4j is an open-source, NoSQL, native graph database that provides an ACID-compliant transactional backend for your applications.
圖數據庫存儲的數據單位是節點(Node)和關係(Relations)。
通常,圖用一組數據表示,如 g1(a0, a1, a2, a3, ….), g2(b0, b1, b2, b3, ….),極值情況下,如 g1(a0), g2(b0) 如何比較和計算相似性?這是本文試圖探討的要點。我們還結合研發中的 ufqiwork-logo有福工坊UfqiWork ( https://ufqi.com/work ) 的實際應用案例對所提議的算法進行了驗證,取得了預期的效果。

將極值比如 g1(10) 和 g(100) 進行計算時,幾乎每個算法都會返回極其不相似的結果值: -1 .

如果我們想進一步地探討, g1(10) 和 g2(100) 的不相似值, 與 g2(100) 和 g3(1000) 的不相似值,有多少程度上的不同呢? 顯然上面的算法在都返回不相似的極值 -1 時,兩者的不相似是一樣的,而真實情況真的是一樣嗎?如果不一樣,怎麽來描述這種不相似的差異?

簡單而直接的做法是考察兩個數值之間的減法差值或除法商值,差值或商值的大小決定了兩個數據的差異性,正比例關係。
比如,10~100的差值是90,商值是10, 100~1000的差值是900,商值是10.

如果我們要定義或者套用一下相似性,10~100的相似性用數值表達是多少? 100~1000的相似性用數值表達是多少?如果比較差值的話,後者的差別大於前者,如果比較商值的話,前者與後者相等。從語義上來解讀,顯然使用商值較符合預期,業績兩者的差異是10倍。

使用絕對商值10來描述相似性顯然不太合適,爲了便於表述為相似性,我們還需要對其進行歸一化處理。為方便描述兩個數值的商值,我們對商值取log10對數,這樣大幅降低絕對值的範圍並提供更大的曲綫表述空間,其絕對值的細微變化能夠映射到相應的對數值上。


對數log10(x)的坐標曲綫

嘗試進行歸一化(Normalization)處理時,需要設定區間閾值。如果兩個數相等,其商值為1,取對數log10(1)時, 得到值為 0,可以認爲儅兩個數的如上這麽計算過程之後值為0時,這兩個數的相似性是 100%。

那麽,多大是不相似呢?如果做歸一化或者百分比,我們需要確定、劃定一個“不相似值”的標準,無論是取商值,還是再對商值取對數,需要一個明確而具體的數值來表示或界定完全不相似。這個數值可能最終需要靠經驗獲得,也與要考察的數據可能的取值範圍有關,比如考察人的身高時,相差一倍就有種十萬八千裏的感覺;而考察星系,十萬八千里也可能只是一倍的表述。因此,這個用以界定“不相似”的閾值 k 應該是根據經驗和應用場景而定。

於是,我們就可以寫出我們用於求值某兩個任意數的相似性值,設若k為完全不相似,則某兩個數的相似性表述區間為 [0, k] , 針對這個取值範圍,再進行歸一化處理則相對容易。最終,我們擬寫了下面這個求取兩個任意數值的相似性的函數表達式:

F(n1, n2, k) = normalize{ min[k,  log10[ max(n1, n2)/min(n1, n2)] ] };

其中n1, n2為待求取相似性的兩個數值, k為經驗常數極值(表示完全不相似值)。
其計算過程可以描述爲:
1) 比較n1, n2的大小;
2) 求取n1, n2較大值除以較小值的商;
3) 對商值取log10對數;
4) 比較對數值與常熟k的大小,如果商值的對數值大於k,取k值;
5) 對前一步數值做歸一化處理,得到預期值在 [0, 1] 之間.

由此,我們獲知,儅兩個數的商值一樣時,其相似性是一樣的。因此10~100 和 100~1000的相似性是一樣的。對商值做進一步的處理是爲了表述和運算方便。類似的算法我們在 ufqiwork-logo有福工坊UfqiWork ( https://ufqi.com/work ) 進行試用,取得了一定的預期效果。

圖的極值問題只是相似性問題中的特例,同時這些所謂的極值也是相對的,儅g1(a1), g2(a2), g3(a3)…. 等多個極值組合為一個大的圖G(a1, a2, a3….)時,其與另外一個大G(b1, b2, b3…)相比較計算相似性時,又回歸到到文檔看到提到的數據集相似性問題計算了。

 


ufqiwork-logo
UfqiWork 有福工坊 服務交易所

有福工坊UfqiWork 是一个在线服务交易平台。
有福工坊提供在线分类服务信息,致力于在线撮合服务交易的买方和卖方,并为买方、卖方提供“行准”服务,居间担保服务交易。行准服务的提供方为居间交易的第三方。有福工坊的服务交易平台为整个服务交易流程的第四方。

线上签约,线下交割。有福工坊整合服务交易的 信息流和 资金流,在线承载买卖双方的需求供给信息匹配、交易撮合,在线承担交易双方的资金拨付、担保。服务交易的 标的物在线下实施、交割。

有福工坊服务交易平台服务于提供居间交易的“行准”,通过行准服务于服务交易的买卖双方。交易标的物与其他电子商务交易不同的是其非标准性,如房屋、工作/职业、家政/维保、汽车、医疗、教育、金融、出行、时尚等等。相应地行准为房产中介,猎头中介,商品导购、推荐、带货等。
所不同于现有分类市场的地方在于:站在买方立场代表买方利益的居间服务;买方有定价权,居间服务报价。相应地,卖方也可以使用定价权雇佣代表卖方立场和利益的居间服务。

有福工坊UfqiWork 圖標中 “有” 的紅色高亮部分,既像是“房屋”(住房),也像是“凳子”(工作),寓意 有福工坊UfqiWork 致力於為用戶提供住房、工作、家政等各類信息匹配及撮合交易服務。

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

电热蚊香液套装无味婴儿孕妇家用补充液插电式灭蚊液护发素发膜正品修复干枯免洗家用护发补水顺滑女士发热焗油膏书皮纸自粘透明磨砂加厚包书皮小学生一二三四年级上册上学期书膜全套课本书本保护套16k封面外壳防水a4彩染发剂植物纯自己在家染头发膏女2021流行色显白天然

GTAjax升級:一劍🗡磨十年改進JavaScript表單遞交瀏覽器異常等

2020年7月以來,持續對 UfqiLong 有福常在 進行升級改進。
改進過程中遇到之前不曾見的問題,在使用 GTAjax進行異步遞交 有福常在UfqiLog 的文章内容時,有隨機性地出現遞交失敗。進一步的跟蹤發現,儅點擊遞交后,GTAjax接管了表單遞交動作並觸發了進度顯示並進行讀秒操作。

但是,詭異的是,GTAjax在後臺並未真的將遞交發送給服務器端後臺。於是我們決定對 GTAjax開啓 debug 模式,進行深入分析,爲何之前不曾有這樣的問題,爲何問題會是隨機性出現,而又爲何,儅第一次遞交失敗后,第二次原樣操作,卻能成功?

帶著這些問題,我們準備深入分析一下。開啓 GTAjax的debug模式相對簡單,在 運行時參數裏:

var myGTAjax = new GTAjax();
myGTAjax.set(‘isdebug’, true);

這樣即可打開 GTAjax 的過程數據輸出,從而觀測到整個通訊過程。通過分析debug日志,問題很快鎖定到 postForm.submit() 這個節點上。
也即,在使用 ForceFrame 模式進行表單遞交時,依賴 JavaScript的 HTMLFormElement.submit() 這個方法進行最終的數據遞交。

這個是 W3C、HTML DOM和 JavaScript等標準組織封裝好的方法,無法進一步地往下拆解。問題就轉化為爲何 submit() 遞交失敗呢?通過進一步地分析,我們發現在 GTAjax 接管真正的 HTML Form表單時,通常會通過 _DFM_F 方法將 onsubmit 返回一個 false,從而阻止正常的遞交,然後GTAjax 再開展一系列的準備動作之後,再遞交 postForm.submit() 進行遞交。

詭異的地方在於,Google Chrome、MS Edge等瀏覽器,之前即便對HTML Form設置了 _DFM_F, 調用 postForm.submit() 時並不會受影響,而且儅 GTAjax 通過 _RGT 方法進行初始化設置之後再次調用 _DFM_F ,然後再次 postForm.submit() 時,卻是可以通行過去,如預期地進行與服務器端的通信。

我們推測,可能是近期的Google Chrome和MS Edge瀏覽器的升級,增加了對HTML Form遞交前的JavaScript等狀態檢查,所以如果發現某個Form的onsubmit 綁定了 return false的動作,就自動終止當前的操作;相反,則繼續如常。 

定位到問題,並經過粗略的原因分析之後,解決問題的辦法也就隨之而來。如果當前被執行的HTML Form被設置了 onsubmit 的檢查,則需要對已經設置的 onsubmit 進行重寫,使之能夠覆蓋之前的設置,尤其是之前 return false 的設置,以使得後續的Form遞交操作能夠順利進行。 改進主要集中在 _SUB 這個内部調用的子函數上。

在執行postForm.submit() 之前,對當前 postForm的onsubmit 進行檢查。

//postForm.submit(); // maybe fail due to this._DFM_F . 10:42 2020-07-04
if(postForm.onsubmit == null){
    postForm.submit();
    GTAj._DBG(GTAj.vA[‘ib’], ‘this._SUB’, ‘Sync form:        [‘+postForm.name+’] is being submitted.’);
}
else{
    GTAj.currentPostFormId = postForm.name!=” ?     postForm.name : postForm.id;
    postForm.onsubmit = (function(){
        var myTimerId = window.setTimeout(function(formId){
    document.getElementById(GTAj.currentPostFormId).submit();
GTAj._DBG(GTAj.vA[‘ib’], ‘this._SUB’, ‘Async form:[‘+GTAj.currentPostFormId+’] is being submitted.’);
}, 10); //- 0.01 sec
return true;
})();
}

如果當前被執行的 postForm的onsubmit 沒有被設置過,則繼續使用之前的邏輯,直接執行 postForm.submit();

如果當前被執行的 postForm的onsubmit已經被設置過,則需要重寫onsubmit的綁定與賦值操作。經過多次實驗,我采取了JavaScript anonymous function的方式,重新對當前postForm的onsubmit進行賦值操作。初始我們將一個匿名函數賦值給當前的 postForm, 形如:

postForm.onsubmit = function(){ return true; }

在我們的實測過程中,這一匿名函數,在不同應用場景和不同的瀏覽器中,仍有一定的隨機性出現匿名函數不被執行的情況。為保全起見,我們進一步地改進這個匿名函數,不但定義了匿名函數同時隨後執行這個你們函數,將返回值賦給 postForm.onsubmit .

在匿名函數體外,我們還通過全局變量 GTAj,將當前被執行的postForm的相關信息帶入匿名函數内;在匿名函數體内,我們設定了一個隨後立即執行的新的匿名函數,這第二個内嵌的匿名函數將完成這個表單的真實遞交動作。執行的時序變成: …. 1)定義一個匿名函數A—- 2)在匿名函數A内定義另一個異步的匿名函數B—- 3)執行這個匿名函數A —- 4)將匿名函數A的返回值true賦值給 postForm.onsubmit —- 5)時間觸發執行匿名函數B —– 6)實際執行postForm.submit() 操作 —– 7)監測服務器返回值進度….

改進后,分別在 Google Chrome,MS Edge 和 Mozilla Firefox 多個瀏覽器的不同應用場景下實測,均取得預期效果,不再發生或者隨機性發生,遞交Form未被執行的情況,故障問題得到順利解決。完整程序源代碼可以在 GTAjax 主頁( https://ufqi.com/dev/gtajax/ )和 GitHub上查詢(wadelau/GTAjax)。

這可能是軟件更新史上間隔最長的一次更新,GTAjax的官網主頁記錄記錄的上次更新時間為 2011-07, 距今已經九年過去了。著實令整個軟件作者也感到時光飛逝,一方面感慨時間過得太快,同時也對 GTAjax 歷時十多年,還能夠堅强、頑强地服務于業務系統的旺盛生命力感到一陣驚喜。

這不就是那種“Best as Air(好到無形)”極好的案例嗎? 幾乎每個工作日打開的基於 gMIS 吉密斯系統,其中都有 GTAjax 工作的身影,而他總是能夠不負囑托,完成每一次基於 GTAjax 的HTTP請求。

實際上,2011年以來,GTAjax 也做過小幅的升級改進和Bug修復,根據軟件源代碼中的更新標記,至少有如下幾次。

gtajax logo

* GTAjax.js
* @abstract: General-Targeted Ajax
* @author: wadelau@hotmail.com,wadelau@gmail.com
* @since: 2006-2-17 14:04
* @code: 5.7 // a.bc , funcs added b+, errs updated c+
* @NOTICE: DO NOT USE THIS COMMERICALLY WITHOUT AUTHOR’S PAPER AUTHORIZATION
* @update: Tue Feb 1 20:47:03 GMT 2011 

* Wed Jan 26 17:31:33 GMT 2011
* Wed Jul 20 08:08:09 BST 2011
* Fri Mar 16 16:36:52 CST 2012
* 12:15 Friday, February 20, 2015
* Sun Jan 24 12:56:43 CST 2016
* Fri May 25 08:51:23 CST 2018, code format refine and cA.sort bugfix
* Wed Oct 31 21:57:26 CST 2018, +form Name validate
* 11:06 Friday, August 16, 2019, imprvs with form validate
* 11:55 2020-07-04, bugfix for submit fail with forceFrame.

GTAjax 初創于 2006年2月,距今已經有 15年的歷史了。對於日新月異的軟件及互聯網行業來説,這差不多是古董級的軟件了。然而,基於開放標準和成熟技術棧,15年后,GTAjax依然穩定運行和應用在各種Web軟件中,這不能不説是相當成功的案例。

可以設想和對比的是,在應用層軟件,有有多少能使用15年之久?不要說15年,基於私有類庫和標準而開發的軟件,可能5年、10年之後已經難以覓得蹤跡,GTAjax 伴隨 gMIS 吉密斯 等軟件能夠一直運行到現在,並繼續運行到下一個5年,10年,是一件值得慶賀的事情。

軟件的生命力或者生存周期有多久?需要多久? 摩爾定律說硬件計算速度每18個月翻倍,軟件是否也只能用18個月要改版、升級換掉,甚至是完全推導重建?

實際上,GTAjax 生存的越久,越有可能遇到“趕不上趟”的情況,畢竟技術的發展與進步,日新月異,每隔3-5年幾乎就是天翻地覆的改變。GTAjax能夠堅持其可用、好用、能用達15年之久,應該說算是某種“成功”。

幾乎同時期的很多軟件都已經銷聲匿跡了。也可以設想,如果不是使用的開放的HTML、CSS和JavaScript等標準,而是使用某一家公司的某項私有技術,其情況可能就完全無法預料,更誑論與時俱進、歷久彌新了。縱向地時間跨度看,要保護和珍視一個軟件,盡可能延遲其生命周期,保持旺盛生命力,唯一可取的方式就是使用開放的技術與標準,構建面嚮未來的軟件。

從這一方面來説,基於WEB的應用軟件已經完勝了基於某個公司或者平臺的“本地應用”。10年前,差不多是WEB軟件真大行其道的時候,以美國Apple公司的Appstore反其道而用之,强推基於其自有的平臺軟件(App),構築强大的軟件壁壘,同時引導、脅迫無數軟件開發者不斷的爲其開發軟件(App),短則數月,長則數十月,App的快速更迭,也意味著大量的新寫成的代碼,像曇花一現一般消失了。

當然,也有及其少數的本地應用App頑强地頻繁地更新升級穿越了10年以上的歲月時空,如游戲魔獸世界WoW,即時通信軟件騰訊QQ等。這其中也包括,Web軟件賴以運行的網絡瀏覽器,如MS IE,Mozilla Firefox,Google Chrome,Apple Safari,Opera等。

在人民網工作期間,儅其實我們用的基於WEB的内部辦公系統(OA)相當有些年份(5-6年?),當時覺得,爲何不升級采用新技術? 甚至是再一個5-6年之後(10多年前),這個OA系統依然在運行中。現在想來,這是一筆極大的財富,因爲軟件的本身的技術棧是公開的標準,沒有很快地被業界全部抛棄,所以企事業單位的投資,得以延用至今繼續發揮作用。

當然,也不是說公開、開發的技術標準就止步不前,相反,公開、開放、開源的技術也在不斷的改進升級,只是由於影響巨大,各方需要多輪磋商,考慮各種因素,相對於一家公司的一項技術,其進度必然是緩慢的,當然也是理性而鑒定的。

比如 GTAjax 在開發計劃中,就規劃了 GTAjax-6.x 版本,主要考慮外部因素如下:

* 12:15 Friday, February 20, 2015
* 6.x Bears
HTML 5
ECMAScript 5, 6
HTTP/2 and Event-driven,
highly-cached,
code style of high-performance and readability
* in mind

尤其是其中的 HTML5,JavaScript 6 和 HTTP2 這些是在業界公開討論多年的技術標準,日益成熟,在新應用部署時會加快采用。相信在不久的將來,GTAjax-6.x 就緒時,能夠充分利用這些新技術特徵,在兼容之前的前提下,繼續為互聯網社區做出新的貢獻,下一個 15年,30年,50年。

與之相關 GTAjax更新Blog有:1)gMIS吉密斯更新Workflow工作流、FileMgr文件柜及GTAjax等模块( https://ufqi.com/blog/gmis-workflow-filemgr-gtajax/ ),2)-gMIS, -GWA2, -GTAjax 一并更新 ( https://ufqi.com/blog/gmis-gwa2-gtajax-update/ )。

世界仍不平靜,新冠肺炎疫情仍在傳播,愿軟件開發者多開發些生命周期更長的軟件,為世界和平貢獻智慧和力量,不要讓軟件成爲快消品, 而是要讓軟件成爲耐用品、藝術品。

-R/M2SR
https://ufqi.com/blog/gtajax-updt-form-submit-202007

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

电热蚊香液套装无味婴儿孕妇家用补充液插电式灭蚊液护发素发膜正品修复干枯免洗家用护发补水顺滑女士发热焗油膏书皮纸自粘透明磨砂加厚包书皮小学生一二三四年级上册上学期书膜全套课本书本保护套16k封面外壳防水a4彩染发剂植物纯自己在家染头发膏女2021流行色显白天然

勞動的振興一家親

許久沒有寫家長里短的生活片段,說工作太忙,或者因爲新冠肺炎疫情都是不準確的。根本原因是在某種壓力之下,缺乏了對生活的感悟和思考,觀察和體會。真如同現在忽而要寫寫我們的生活剪影一樣,是有感而發,有所觸動,希望能言之有物,說説我們勤勞而辛勤工作的片段。

家住兩室兩廳,初裝修時,被改成三室一廳,兩個臥房,一個留作書房+鋼琴。四口人,如果岳父母來的話,是6口人,難免有些擁擠,通常每個房價要睡三口人。所以我們想把次臥的兩張板床換做一套上下床,不至於擁擠不堪。起初打算買新的,考慮到木料的,新的有味道,加上我們都一貫勤儉節約,就想著尋覓一個二手的上下鋪木床。妻子就在阿里鹹魚上尋找。這算是背景。

經過一陣子觀察,終於訂了一套附近小區的上下鋪木床,需要我們自己去拆卸了,搬運回來,再組裝起來。這個故事就是要記錄我們一家幾口在這個活動中的積極配合、辛勤勞作的過程。

2020年6月17日,是農曆閏四月的一個大熱天,大概有36度左右。我們在上午工作、學習之後,下午15:30按約定去賣方家裏拆卸床鋪。拆卸難度比預期的大,拆卸過程也比預期的長。Yoyo和我一道前往,個頭像個成年人一樣的大孩子,在與我配合的時候,一點不差。從擰卸螺絲、往外樓下搬運木板、床架,幹得很認真,很勤快,也很辛苦。大家都大汗淋淋的。只是暫時還沒有水喝,我們需要忙了大約一小時之後,待拆卸、搬運、裝車,然後運到家裏樓下、卸貨下車之後才能回去喝水。

這期間有個細節頗為意外。Yoyo搬運床板時,手指被床板的木刺兒刺破。在行動前,我預料會有這樣的事情發生,所以出門前我備了手套,並叮囑Yoyo也帶手套。顯然,YOyo沒儅個事,也沒戴手套就上手幹活了。木刺兒很鋒利,穿刺了Yoyo食指的表皮,從另一側穿出。我看著都覺得疼得厲害,她居然還開玩笑說,木刺兒刺穿了表皮、真皮和小部分組織細胞等等,然後將餘留在皮膚裏的木刺拔出。我趕緊制止了她的任務,讓她趕緊清洗,並將我的手套給她,囑咐她保護好手指,回去后再消毒、包紥處理等。

這些發生時,我忽然覺得Yoyo這孩子長大了,有能力處理一些突發情況,她對疼痛的耐受,超乎我的想象,即便受傷了,仍然繼續上上下下地幫我搬運完所有的木料,然後我隨著出發,她再自行騎電動車返回。

作爲父親,我既爲Yoyo的勇敢而欣慰,也有點擔憂,她這種超乎異常的鎮靜與堅强,會不會太狠了點?

貨到之後,Yoyo也前後脚回來,還好!我隨即囑咐她回去喝水、消毒包紥手指。另外讓她叫Hanu下來幫我搬運東西到樓上去。我連忙從車上卸貨,在單元門口堆放了一地。

不久,Hanu就樓裏冲出來,擼起袖子就開始搬運木料。我讓他擔心木刺兒,回去穿長袖衣服,撿自己能搬得動的木料往回搬。Hanu幹起活來,也很積極主動,一趟一趟,樓上樓下,和Yoyo,我,三人穿插著不停地往返,不一會,就搬木料從單元門口悉數運到了家裏來。僅僅多了Hanu一雙手,我忽然覺得比從賣方樓上運到樓下快了很多!

說易行難,待到我們將木料運到家裏之後,三日幾乎都累的不想動了,我們決定稍事休息,然後再進行組裝。

由於拆卸的時候進行的匆忙,沒有拍照留存樣子,我只好凴印象,一點一點地回想某個部件該在什麽部位,組裝的時候先組裝什麽再組裝什麽的先後順序等。而且在組裝之前,我們需要把原來室内的物件再歸置一下,在Hanu和Yoyo的幫助下,事情一一有序進行。

組裝最難的部分是將床鋪的骨架裏起來,在一個有限的空間裏,我們三個人覺得有點困難。主要是Hanu不能單獨扶住樹立一根床腿,太粗壯、太厚重了,如果兩根、三根甚至四根柱子不同時立起來的話,就沒法往一起使用橫梁連接、固定起來。辦法總比困難多,我們一起還是想了很多辦法,剋服了這些問題,最終樹立起骨架,後面就相對容易,逐漸上架更多的部件。

這期間,門口居然接連有兩次快遞送到門口,不得已我們沒法接,之後大聲地對門口喊,知道了把快遞放門口吧,而快遞員也有回應說,好的,只是運來的東西是冷鏈食品,需要馬上放冰箱裏…., 一片忙碌中.

Minina下班歸來,也加入我們的隊伍之中,協助清洗、消毒木料等,同時還為我們準備晚餐,對了,已經忙了一下午了,1拆卸—2搬運下樓—3裝車—4運送—5卸車—6搬運上樓—7組裝–8清洗消毒…., 這個漫長的流程,我們已經幾乎快完成了。

中間多次休息喝水,然後還有一次吃完飯,晚飯后繼續歸置,清理,大約忙到晚上21:30左右,終於結束當天的工作。從15:30出發啓動任務,差不多進行了連續6個小時的辛勞忙碌。

稍後休息。我回想之前有過 的一些搬家、運床的經歷。最早我從學校的宿舍搬出到平房居住,後來搬家到樓房,再後來搬家到我和Minina購置的新房,然後從這個小房搬家到現在住大房子。期間經歷可謂曲折、艱辛。這些搬家中,每一次幾乎都是親朋好友有力出力,有車出車,都來搭把手,雖然辛苦,卻也順利。

好像這是第一次,我帶兩個孩子,完成了將一個碩大的木製上下床從一個地方搬運到另外一個地方。孩子們大了? 我有幫手了?真相可能是孩子們真大了,而我還未老,也許現在就是創建功業的大好時機。 在不遠的將來,孩子們將重新走我和Minina年輕時走過的路,如果我們能將孩子們的起點墊起得更高些,或許他們能走得更遠些。

正如我們的父輩不辭辛苦地支持我們向更高、更好地生活邁進,我們也要沿著這樣的路綫,將孩子們遞送到更高、更好的生活方向和軌道上去,扶上馬,再送一程。這,或許就是人類生生不息、代際傳承的文化内涵和精神圭臬

一而再,再而三,家族之勢可成也。


姐姐Yoyo苦練一陣子的菊花字體“期末”,出現在學校班級的板報上,她言自己有兩科目以上都是榜眼,所以未能留言“狀元語錄”。我聞,亦爲之嘆息不已。


弟弟Hanu隔三岔五地會臨描一些圖畫書的插圖,如小鹿斑比(上圖),丁丁歷險記等,惟妙惟肖,煞是逼真。我意甚喜,而她母親則說,畫什麽像什麽並不是想象力的發揮。

時光就是這麽一晃就過去好幾年,上次寫 Yoyo的帖子是2015年,《化干戈为玉帛:平息争执的四个方法》:https://ufqi.com/blog/four-ways-to-get-out-of-disputes/ , 上次寫Hanu的帖子是2016年,《鸡蛋黄色的Orange和外教课english dict》:https://ufqi.com/blog/hanu-egg-yolk-orange-yoyo-eng-dict/ 。

—-

https://ufqi.com/blog/xenxin-family-hardwork-202006/

-R/S2SP

发表在 社会生活 | 标签为 , , , , , , | 留下评论

冰糖雪梨膏儿童宝宝砀山慈梨膏捐助乌克兰Help Ukraine

🙋Hanjst汉吉斯特优化+JsonDataFromScript等

近日继续对 🙋Hanjst汉吉斯特优化改进。这次的改进思考是从服务器端返回的 HanjstJsonData的容器设计问题。目前的做法是服务器端的HanjstJsonData放入终端页面的一个Div元素中。这个Div的id默认被设置为Hanjstjsondata。

<div id=”Hanjstjsondata” style=”display:none;height:0px;width:0px;”>

HANJST_JSON_DATA
</div>

这么设计并实施有显而易见的好处,简单易行,而且部署实施复杂度和实际运行效率,都在可以接受的范围。然而在一些极端情况下,网速较慢时这个DIV会曝露给终端用户,而且需要在浏览器中读取到这个DIV的内容,并进行JSON.parse操作。有没有可能将服务器返回的HanjstJsonData 直接以JavaScript的JSON变量形式放入浏览器中,使得JavaScript和Hanjst可以直接调用?这样改进后,运行速度是否会更快?

同时,还要考虑的问题是,如果做这样的改动,比如可以接收来自JavaScript脚本的JSON数据,与此同时同时,还要前向兼容目前已经使用的方式方法,也即,需要继续支持能够使用DIV形式来传递JSON数据。

另外,还要考虑到,如果新的功能,来自JavaScript的JSON数据被引用,那么是否就丢弃来来自DIV的JSON数据?两者是否需有一个优先级?

从理论上分析,如果从服务端返回的JSON数据直接放入JavaScript的JSON对象中,会减少现有的JavaScript中读取DIV内容,并进行JSON.parse的过程,与之对应地,需要考察的过程就是JavaScript中处理较大的JSON对象的效率,这个过程是否高于从DIV中读取contents并对读取到对contents进行JSON.parse?

实践出真知。我们最终决定改造Hanjst的解析引擎,使之支持来自JavaScript的JSON数据对象,在Hanjst运行环境初始化完成后,开始对JSON数据对象的探测。Hanjst 使用window.hasOwnProperty(Hanjstjsondata) 的方法来探测是否在当前JavaScript运行时环境中已经定义了Hanjst Json data的数据对象。 如果探测到已经定义了有来自JavaScript的Hanjst JSON data数据对象被定义,则使用这个作为后续的数据源。

如果没有探测到相应的数据对象被定义,则程序进行之前的过程——根据HanjstJsonDataId寻求相应的DIV,然后读取DIV的contents,然后再对contents进行JSON.parse 的操作。

如此以来,将来自JavaScript的JSON数据对象置为第一优先级,如果有则终止对DIV对探寻,如果没有再继续之前的DIV中的JSON数据的读取。既实现了对之前对兼容,也扩展了对来自JavaScript的JSON数据的支持。

改进之后增加使用JavaScript声明变量来引入JSON数据对象的写法:

<script async>

//- first order, detect

//- HANJST_JSON_DATA

var Hanjstjsondata = {“pagetitle”: “-Hanjst, Hanjst汉吉斯特”};

</script>

 

Hanjst demo ( https://ufqi.com/dev/hanjst/Hanjst.demo.html) 的页面实测中,使用来自DIV的JSON数据和使用来自JavaScript的JSON数据对象,两者在运行时间上并没有明显的区别。Hanjst demo的解析运行时间 (普通PC桌面浏览器),在两种情况下均在 20~40ms之间,也即 0.02~0.04s之间完成页面的样式和内容的merging操作并更新整个页面的body。

可能是Hanjst demo页面尺寸和复杂度较低,JSON data数据对象也不大,所以在运行时间上无法明显区分开来。待有正式商用的较大尺寸的页面和较复杂的页面逻辑、较大尺寸的JSON data时,再做详细的对比。目前只能从理论上证明:使用来自JavaScript的JSON对象可能会快些。

这是最近接二连三地对 Hanjst汉吉斯特进行更新的第三篇,前两篇分别是:
https://ufqi.com/blog/hanjst-ensafeexpr-updt/ , 🙋Hanjst汉吉斯特改进+enSafeExpression安全表达式等; https://ufqi.com/blog/hanjst-showimage-dotpos/ , 🙋Hanjst汉吉斯特升级:+showImageAsync及性能改进等;

其他一些改进:

1)修改了一处 正则表达式中的 matchStr 被引用时,将双引号“进行转义操作。
2)改进了一处 关于注释代码清理的正则匹配问题,在检查 // 注释之前,先行去除 /* */

/\/\*([^]+?)\*\//gm

3)增加了一處顯示功能, {=$i+2} , 先對 $i 進行賦值操作,然後再在當前位置顯示出來
此前要顯示一個變量需要經過兩步驟:

a. 賦值操作: {$i=$i+2} , 空語句,只執行語句,不做顯示;
b. 顯示操作: {$i} ;

目前a, b兩步驟可以合并為一步: {=$i+2} , 先賦值操作,后顯示操作。
相當於截至目前,有兩種顯示操作方式:
3.1) {$i} : 在當前位置顯示 $i 的值;
3.2) {=$i+2} : 先進行賦值計算操作,然後再在當前位置顯示出 $i 的值. 

{$i} 等價於 {=$i+0} .

 

….


Hanjst

🙋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 controls and achieve the same functionalities 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;

  • ….

 

 https://ufqi.com/blog/hanjst-updt-jsondata-from-script/
-R/N2SL

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

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

🙋Hanjst汉吉斯特改进+enSafeExpression安全表达式等

Hanjst汉吉斯特模版语言及模版引擎,近期持续改进升级。
这次改进主要是增加了对安全输出表达式兼容,由于涉及到对软件开发过程中的效率和软件运行效率的平衡和取舍,所以多写了几句,以描述这个权衡利弊对思考过程。距离上次更新:🙋Hanjst汉吉斯特升级:+showImageAsync及性能改进等 ( https://ufqi.com/blog/hanjst-showimage-dotpos/ ),时间过得并不算长,希望Hanjst早日成熟而稳定下来。

1. 问题及背景

Hanjst 模版语言解析引擎在编写时,启用了JavaScript的 strict mode ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode ),对程序语句执行严格对语法检查,因此如果书写不严格会偶尔抛出异常错误警告来。之所以这么要求,使用JavaScript对strict mode,是希望Hanjst汉吉斯特能够用在一些关键领域和苛刻岗位,将异常错误消灭在程序编写阶段。

让异常在“编译时”发生,进而得到解决,属于编程语言方面的准编译型。这本是好事,因为Hanjst 除了用在普通的资讯网站,也会用在电商、金融等领域,对其进行苛刻的语法检查,是必需的步骤。

然而,这也有弊端,就是开发时比较耗费时间,需要考虑各种情况,反复测试各种情景下的软件行为,无意会加大开发成本。比如常见的 strict mode下的报错:未定义变量和访问对象为undefined。报错信息在 Hanjst里有较人性化的显示输出,参考:汉吉斯特Hanjst+更新升级:error reporting, innerLoop和loadingLayer ,https://ufqi.com/blog/hanjst-error-reporting-innerloop-and-loadinglayer/  。

如果因为对接的系统处于非关键领域和苛刻岗位,对于往复出现的这种变量未定义或者访问undefined对象,能不能进行一些主动兼容?这次就是考察这个问题。

2. 解决思路及方法

对这个问题的考察,大致两种方法:
1)在模版编译时,去掉 JavaScript对strict mode,使之不再做严格对检查,从而避免类似未定义变量和访问undefined对象;
2)第二种思路是在保持 strict mode对前提下,做一些局部的微调,使之能够兼容这些低级错误,也保留对其他语法对严格检查。

在大的方向上去掉Strict mode显然是不行的,这会从本质上动摇Hanjst用在关键领域和苛刻岗位的定位。这一点不应拿来讨论。启用strict mode,进行编译时语法检查,对严肃软件是必需的。

在JavaScript中,探测一个变量是否被定义,是一件容易的事,使用类似 typeof 对指令,可以判断某个变量是否被定义。如果对每一个变量在输出前都做这样的检查,显然陷入了“一个人有病,全国人吃药💊”的非理智状态,这也是之前的尝试被阻止的原因之一。
因此如果要启用针对变量的探测,需要有某种机制来感知已经被定义了的变量。

另外,如果不使用 JavaScript eval等危险性较高对函数,如何去感知某个字符串所代表对变量是否被定义了?使用内置对象 Function构建匿名函数吗?如果匿名函数的话,其单独的变量作用域与变量实际运行环境又有显著的不同,该如何操作?

第三,在模版语言中,我们允许对象的属性访问,这类对象,可能是运行时环境的全局变量,也可能是局部变量;这类对象既可能是一维的Hash数据list,还可能还多位的Hash嵌套,可能存在第一维的数据对象是已经被定义的,而第二维、第三维是未定义的,而此时如果是未定义的,就有可能抛出异常来。

待问题进一步地发散为:
1)继续启用Strict mode,
2)在1)的情况下,实现对未定义变量和未定义对象对访问兼容;
3)尽量不要使用高危函数,如 eval;
4)保证2)都情况下,不能不分情况的对所有变量进行兼容操作;
5)需要区分是全局变量,还是局部变量,各种情况最好都能兼容;
6)需要区分一维对象和多维对象,各种情况最好都能兼容。

经过一番艰难地探索,在尝试寻求鱼和熊掌兼得的情况下,采取如下措施:
1)使用 typeof 生成待执行的变量是否被定义的JavaScript语句;
2)新增环境变量赋值语句的list,用以检测某个变量是否显式地被定义;
3)使用 window.hasOwnProperty 探测某个全局变量是否被定义;
4)使用递归方式拆解多维数据对象,如, $aList[$ak1][$ak2][$ak3] .

基于以上分析在 Hanjst.js 中新增 _enSafeExpression 函数用于对待输出对变量及对象进行安全性检查。

3. 样例演示

{$a=1}  –> 类似的语句被登记为该变量已经被显式地声明;

{$a}  –>  ((typeof $a == ‘undefined’) ? ” : $a) , 输出 $a 对语句如果探测到没有被定义,将被改写为三目运算符的表达式;

$aList[$ak1][$ak2][$ak3] –> $aList[$ak1], $aList[$ak1][$ak2] , 将待输出对三维数据分别逐级拆解,形成待探测的两个变量/对象,再分别予以构建使用三目运算符的表达式,形成由顶部到底部的逐层检测,大致为:
((typeof $aList[$ak1] == ‘undefined’) ? ” : ((typeof $aList[$ak1][$ak2] == ‘undefined’) ? ” :$aList[$ak1][$ak2][$ak3]))

更多维的数据对象,也依此类推。 

4. 其他

版本号升至 v1.7, +其他一些细微的优化调整,

一个简单地问题细究起来,居然一点都不简单,纸上得来终觉浅,绝知此事要躬行。一个小任务,变量输出前进行主动安全性检查,居然唠唠叨叨地写了差不多2000字。

毕竟,Hanjst汉吉斯特在追求平衡的艺术,追求极致而完美。

….


🙋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 controls and achieve the same functionalities 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;

  • ….

    两天来,连续创作两篇,在写blog的历史上,也是少有的行为。同期写就的另一篇: 写写🏦存款利率贷款利率和负利率 , https://ufqi.com/blog/captial-rate-and-minus-rate/  。

https://ufqi.com/blog/hanjst-ensafeexpr-updt/
-R/x12SX
https://ufqi.com/news/list.932.html

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

彩染发剂植物纯自己在家染头发膏女2021流行色显白天然冰糖雪梨膏儿童宝宝砀山慈梨膏捐助乌克兰Help Ukraine

写写🏦存款利率贷款利率和负利率

2020年以来,经济发展受新冠肺炎疫情影响,进行大幅深度回调,宏观层面金融政策和财政政策接踵而至,为了保经济、保不下挫、保下挫的不太厉害操碎了心。利率调整是宏观经济干预工具箱中较为亮眼的那种,有点像像是瑞士军刀Swiss Knife或者互联网络中netcat命令. 这篇打算写写利率及负利率,算是经济学学习笔记第二篇。(这里是第一篇:写写1929年美国经济大萧条与2020年美国股市大跌https://ufqi.com/blog/us-1929-economic-crisis-2020-stock-shock/ )欢迎批评指正。

几个月前,网上有篇美团副总裁谈“为什么中国To B企业都活得这么惨?-4( https://ufqi.com/news/ulongpage.250.html )”的文章也提到负利率,说法是负利率就是你去向小A借钱做生意不但不用支付利息,等期末小A再多给付你一笔钱;或者说,你向小A借了100元,等期末你只需向小A还款90元就行。
这是一种错误的说法,天上掉馅饼的事不会发生(发生了也不会砸你头上),负利率不是这么解释和应用的。本文首先要澄清这一点。

1. 利率的一些定义及名词

利率,教科书上的定义是资金的价格,使用资金的成本。经济学上,正常情况下,价格是不能小于零(等于零是白送),当某种商品或服务的价格为负时,一定是异常的、极端的情况。
可能这也是美联储2020年这次一撸到底将美元的利率降低到 0–0.25% 附近,而没有一下子极端地将美元利率弄成负的。
还要注意的是,这个利率,潜台词或者默认是指“存款利率”,不是贷款利率。


(1900-2013 美国存款利率)

需要进一步地厘清可能的名词:
1) 存款利率,小A将钱存入银行时,银行按“存款利率”给付利息,这是最大众,最普遍,也是默认的“利率”的指代;
2)贷款利率,小A申请一笔住房贷款,银行发放一笔贷款给小A,小A按期按“贷款利率”支付利息给银行,当然本金也要按计划慢慢还;
3)名义利率,就是名义上的利率,官方(中央银行)公布的利率,与实际利率相对于,与通货膨胀率相关;
4)实际利率,就是名义利率扣减掉通货膨胀率之后的真实所得的利率,这部分在投资上也成为无风险收益,是计算和比较其他投资收益的基准,也称为“躺赢”的钱;
5)通货膨胀率,大致可以理解单位资金/货币的实际购买力的变化率,通俗地说是货币的贬值速度,贬值率。为何货币会贬值?( 从硬货币到代币到信用货币: https://ufqi.com/news/ulongpage.658.html

通过一番对名词的解读,我们发现,实际上,能够实现赚取躺赢的钱,很少很少,以美元利率为例,假如存款利率为 0.2%(名义利率),实际利率会是多少呢? 美联储的使命之一就是极力地维持美元的通货膨胀率在年2%以下,设若这一目标达成(很多时候只高不低),美元的实际利率是 -1.8%。 又成为负的了!
也就是目前的美元存款,没法实现躺赢,要想拿到美元躺赢的钱,只能在名义利率大于通货膨胀率时,才可能发生,也即名义利率在 2% 以上时。从美元存款利率1900-2013间100多年的历史来看,多数年份的利率都远高于 2%, 均值是 8%,这个是相当高的无风险收益了。
其他货币依此类推。

2.有存款负利率,没有贷款负利率

回头说 贷款利率,这个利率的普及远不如存款利率,因为相比存款的人,贷款的人仍然显得很少。所以也很少讨论。实际上,贷款利率与存款利率是挂钩的,这个挂钩的依据是银行的开销。


(央行一年期存款利率1.5%,贷款4.35%)

银行这种经济基础设施是需要花钱的,有各种开销。这些开销来源,一块大头就是利率差,也即贷款利率减去存款利率的差值。由于银行还有其他方面的收益,以及作为贷款方有资格在多个银行间询价,贷款利率往往不是整齐划一的,反而参差不齐,甚至相去甚远。

然而,有一点明确的是,贷款利率不会为负。即便是在存款利率为负的情况下,贷款利率还仍然高挺着不动。当存款利率为负时,你存钱到银行,需要每月给银行费用(管理费等),而还不曾发生,你从银行贷款了,银行每月还发钱给你,这就有点不符合常识,也是违背经济学基本规律的。总之,贷款利率不会为负的,负利率是一个混淆视听的说法。正确地说是,存款负利率。

等一下,储户存款负利率时,从银行的视角来看,就是银行借小A的钱用,然后每月小A还得付款给银行,对银行来说,就是妥妥地贷款负利率啊!为何会发生这种情况,为何不是逆转过来的样子?
发生了什么事? 为何资产、资金一夜之间从正资产(产生现金流)变成负资产(损耗现金流)?投资行为一夜之间变成消费活动?
为何只有银行能够享受这种贷款负利率的优惠?

3. 能坦然面对存款负利率吗?

在文章“新冠肺炎疫情之后,中国何去何从? ( https://ufqi.com/news/ulongpage.631.html )” 中,作者在谈论GDP和经济时这样感慨如下。

这很好地验证了我读博时导师对我的训诫:
你在问最好的商业模式?
很好。要么你去打天下然后收税,要么去拿一张银行牌照。

我们能够很容易地的推导出来,当存款利率为正的时候,银行是吃贷款用户的钱;当存款利率为负的时候,银行是两头吃,继续吃着贷款客户的利息,也同时吃着存款用户的钱。

问世间真有这么好的商业模式吗?这么梦幻的事情正在发生,在那些存款负利率的国家。庆幸美联储、中国央行等还没官宣存款负利率,虽然通货膨胀率已经完全抹去存款名义利率的收益,好在这还起着遮羞布的作用。

如果掀开了存款正利率这块遮羞布,将存款利率弄成负的,银行狰狞的面貌就露出来了,站在它背后的大Boss也若隐若现了。
也许有经济学家或者银行辩驳说,吃储户的钱,就可以降低贷款户的利率了,然后支持经济发展,bulabulaaaa…… 

存款负利率是对公民财产赤裸裸地剥夺,是明火执掌地征收“货币税”。持有某种货币,所以要纳税(收费),只是这个税未经法定,收取机关也不是税务局,而是银行。
将富裕阶层分化升格为大富豪或降格到中产,将中产阶层直接降格为无产,无产阶层免受其害,因为不持有“货币”。

这将加速社会两级分化,财富进一步地向少数人集中,中产无可避免地下坠到无产,到后来,绝大多数人除了可以出卖的劳动力,其他一无所有。

4. 危言耸听的风险错配

存款负利率的实施会加速摧毁中产阶层,使之降格到无产阶层,而不是升格到富裕阶层。可以想象的是,面对为数不多的一笔存在银行里的钱,每个月要还“利息”,怎么想都觉得不爽,要么花掉这笔钱,吃喝玩乐算了。

理性的人,会将钱取出,去买理财等进行有风险投资活动。注意我们上面提到存款利率是无风险收益。现在没有无风险收益,而且还要倒贴钱拿着这笔钱,又不能吃光花净,只好冒险去进行有风险的投资活动。

在一个危机四伏的投资环境里,对于不懂、不擅长进行风险管理的投资者来说,亏完这些血汗钱,可能只是时间问题。
这本来是专业风险管理、专业投资进行的活动,因为存款负利率完全转移到毫无理论知识和实践经验的平民百姓头上,作为不同专业、不同职业的人,可能完全没有投资理财的技能,也不会学习投资理财的知识。

中产就这么慢慢地被消解为无产,而一些富裕阶层,由于需要更多地面对有风险的投资活动,在一次次有风险的投资活动中,或输或赢,保持富裕阶层,或消解为新中产,进一步地大概率地滑落到无产。

当我们还在讨伐“食利阶层”时,一不小心地,我们都成了,日光族、月光族和年光族,从此再无需为存款负利率担忧,稍有风吹草动,生活也可能万劫不复,因为没有可以代替肉身抵挡风险的“资产、资金”。

或许只是危言耸听,普通民众只是多了一项“货币税”而已,我们从摇篮到坟墓,我们所交的税多得多了。只是相比较而言,这个“税”有些特殊,令人锥心。

如果有那么一天,存款负利率时,我们也能同时申领到贷款负利率的贷款,或许会好些。

https://ufqi.com/blog/captial-rate-and-minus-rate/

-R/c2SO

https://ufqi.com/news/ulonglist.405.html

https://ufqi.com/news/list.2397.html

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

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