2022年11月24日星期四

The Mother of All Demos, presented by Douglas Engelbart (1968) [HD 720p ...


1968年12月9日道格拉斯·恩格爾巴特舊金山召開的計算機協會電氣電子工程師學會(ACM/IEEE)秋季聯合會議上進行了一場具有里程碑意義的計算機演示,後被人稱為「所有演示之母」(The Mother of All Demos)。[1]

現場的90分鐘演示主要是介紹一個完整的計算機軟硬體系統,稱為oN-Line System(NLS)。展示了現代計算機幾乎所有的基本要素:窗口超文本,圖形,高效導航和命令輸入,視頻會議計算機滑鼠,文字處理,動態文件連結版本控制實時協作編輯器(協同工作)。恩格爾巴特的演講第一次在單一作業系統中公開演示這些元素。這次演講產生了巨大影響,並在1970年代早期催生了施樂帕羅奧多研究中心的類似研究項目。在1980-90年代,其底層技術影響了蘋果公司麥金塔作業系統和微軟Microsoft Windows圖形用戶界面

2022年11月15日星期二

複利騙局與自我投資

https://zhuanlan.zhihu.com/p/525523075

摘要

相對的,“窮人”買理財險只是瞎折騰,在本金不多的情況下,最終也產生不了多少收益。這也應了那句話:本大利小利不小,本小利大利不大。

本金,而非利率,才是複利思維裡面最大的權重。

複利公式告訴我們:在手頭沒錢的時候,投資這類理財產品是靠不住的。

我們看世界富豪榜的前100名,其中90名以上都是靠第一桶金獲得財富自 由,而不是靠複利公式。

2022年4月30日,巴菲特股東大會上,面對“如果僅選擇一只股票來對抗高通脹,應該選擇什麼”的問題,91歲的巴菲特這麼回答:
“你能做的最好的事情就是在某件事情上做得特別好,不管有沒有經濟利益,最好的一項投資就是投資自己,做自己擅長的事情,成為對社會有用的人,就不用擔心你的錢因為高通脹而貶值了”。
最好的投資,就是投資你自己。

自己創造財富,而不是以靠財富自己創造財富,才是獲得財富自由的真諦。

2022年11月12日星期六

養成這幾個習慣,你或許能多活30年|當長壽成為現實,你會選擇永生嗎?|衰老的真相3期合集|思維實驗室


結論:可以食促成 NAD的補充劑。

刷新認知:
- 細胞/身體有兩個模式:生存/繁殖。
- 運動 / 冷 /節食 是給身體帶來壓力,使身體轉向維護生存的模式。即抗衰老。
- 過了生殖年齡後,預設不再花時間維護。
- 哺乳動物預設壽命在生殖開始年齡的9倍。(總結出來)
- 人的預設壽命在120年左右
- DNA中兩種模式互有酶在作用,能量充足,壓力適當下,維護好是可行的。

2022年10月31日星期一

愛的形狀

「在別人身上,看見自己的缺口,就誤認那是愛的形狀。」--理科太太

離不開痛苦關係的原因就係,看似痛苦的關係,其實受苦者也有得著。畀痛苦他的那人,其實也正好畀著他要的東西。所以離不開。

如果可以看到,自己要的東西,可在其他人處得到,就可以離開這痛苦的關係。

更好的是,把自己活圓滿,不用在他人身上求滿足。

自己的缺口,並不是愛的形狀。

如果自己沒有缺口,就更加不會有誤會了。

2022年9月17日星期六

我們必將再聚

We should take comfort that while we may have more still to endure, better days will return: we will be with our friends again; we will be with our families again; we will meet again.
Queen Elizabeth II

大師都怎麼拍照


提到的2位攝影師:


杉本博司 - 名言: 藝術是一種技術, 把眼睛看不到的精神, 化為可看得到的物質的技術.

https://www.sugimotohiroshi.com/


森山大道 - 名作: Stray Dog

Stray Dog





人像拍攝引導

中三前反對角切
框引S滿白界
來自 IG @iamokahhhh 

中三前反對角切 https://youtu.be/Gdb3UmOJ1vE



框引S滿白界 https://youtu.be/U2JFASDMfX4



2022年9月13日星期二

武則天的情詩

如意娘
看朱成碧思紛紛,憔悴支離為憶君。
不信比來長下淚,開箱驗取石榴裙。

這是武則天在感業寺時,寫給李治的情詩。後來李治真的把她接出去了。

大意是,太過思念你,以至把紅(裙)看成綠色的。容顏憔悴都是因為想念你。你若不信,來開我的衣箱,在石榴裙上會驗到我的斑斑淚痕。

可說是情真意切。

2022年9月11日星期日

Single point of truth

有一個編程原則叫做 DRY(Don't repeat yourself,不要重復自己),指的是盡量不要有重復的代碼。

更好的名字應該是 SPOT(Single Point Of Truth,單點事實)。代碼需要修改時,你只需要在一個地方修改,而不必改動多個地方。

Quoted


五個遺憾

一位護士問臨終的病人,他們有什麼遺憾。她後來總結出了5個最常見的回答。

不要忽視夢想。不要工作過久。說出想法。交朋友。要開心。

2022年9月1日星期四

魯迅小雜感

在論壇上看到有人引用「一見短袖子,立刻想到白臂膊,立刻想到全裸體」,於是找到這篇。

魯迅於我最大的啟發,乃是中醫無用。而他的見地,總是深刻的;他的語語,也總是尖利的。這句的評語,也用了他的語氣。:)

***

蜜蜂的刺,一用即喪失了它自己的生命;犬儒的刺,一用則茍延了他自己的生命。他們就是如此不同。

約翰穆勒說:專制使人們變成冷嘲。而他竟不知道共和使人們變成沉默。

要上戰場,莫如做軍醫;要革命,莫如走後方;要殺人,莫如做劊子手。既英雄,又穩當。

與名流學者談,對於他之所講,當裝作偶有不懂之處。太不懂被看輕,太懂了被厭惡。偶有不懂之處,彼此最為合宜。

世間大抵只知道指揮刀所以指揮武士,而不想到也可以指揮文人。

又是演講錄,又是演講錄。但可惜都沒有講明他何以和先前大兩樣了;也沒有講明他演講時,自己是否真相信自己的話。

闊的聰明人種種譬如昨日死。不闊的傻子種種實在昨日死。

曾經闊氣的要復古,正在闊氣的要保持現狀,未曾闊氣的要革新。大抵如是。大抵!他們之所謂復古,是回到他們所記得的若干年前,並非虞夏商周。

女人的天性中有母性,有女兒性;無妻性。妻性是逼成的,只是母性和女兒性的混合。

防被欺。自稱盜賊的無須防,得其反倒是好人;自稱正人君子的必須防,得其反則是盜賊。

樓下一個男人病得要死,那間壁的一家唱著留聲機;對面是弄孩子。樓上有兩人狂笑;還有打牌聲。河中的船上有女人哭著她死去的母親。人類的悲歡並不相通,我只覺得他們吵鬧。

每一個破衣服人走過,叭兒狗就叫起來,其實並非都是狗主人的意旨或使嗾。叭兒狗往往比它的主人更嚴厲。恐怕有一天總要不準穿破布衫,否則便是共產黨。

革命,反革命,不革命。革命的被殺於反革命的。反革命的被殺於革命的。不革命的或當作革命的而被殺於反革命的,或當作反革命的而被殺於革命的,或並不當作什麼而被殺於革命的或反革命的。革命,革革命,革革革命,革革……。

人感到寂寞時,會創作;一感到乾凈時,即無創作,他已經一無所愛。創作總根於愛。楊朱無書。創作雖說抒寫自己的心,但總願意有人看。創作是有社會性的。但有時只要有一個人看便滿足:好友,愛人。

人往往憎和尚,憎尼姑,憎回教徒,憎耶教徒,而不憎道士。懂得此理者,懂得中國大半。

要自殺的人,也會怕大海的汪洋,怕夏天死屍的易爛。但遇到澄靜的清池,涼爽的秋夜,他往往也自殺了。

凡為當局所「誅」者皆有「罪」。劉邦除秦苛暴,「與父老約,法三章耳。」而後來仍有族誅,仍禁挾書,還是秦法。法三章者,話一句耳。

一見短袖子,立刻想到白臂膊,立刻想到全裸體,立刻想到生殖器,立刻想到性交,立刻想到雜交,立刻想到私生子。中國人的想像惟在這一層能夠如此躍進。

九月二十四日

2022年8月31日星期三

Why will you marry to a wrong person

先是有這篇文:

https://www.nytimes.com/2016/05/29/opinion/sunday/why-you-will-marry-the-wrong-person.html

By Alain de Botton

然後作者本人後來做了個演講, 解釋這篇文章.

我作的小結(太長不讀):

- 愛不是一種本能。這是一種技能,也是一種需要學習的技能。
- 愛的核心,是願意運用仁愛和慷慨詮釋他人的行為
- 愛不僅僅是對力量的仰慕。這也是對弱點的寬容和對矛盾性的認可。
- 不要想找right person, 只要去找 good enough person
- 要說出來, 不要期望對方會看到你在想什麼.
- 互相教育, 互相學習.
- 你怎麼做都會後悔, 所以學會接受不完美.

下面係這演講的中譯版. 

***

愛是一種東西 -- -- 首先,愛和被愛之間是有區別的。

被愛才是最有趣的一點。
而我們從小就認為,這就是成人關係中會發生的事情。但這是一個非常悲慘的錯誤。

愛不是一種本能。這是一種技能,也是一種需要學習的技能。

"愛 "到底是什麼意思?
愛歸根結底是要有意願去詮釋一個人不太吸引人的行為,以便找到更多的良性原因

愛的核心,是願意運用仁愛和慷慨詮釋他人的行為。

好媽媽和壞媽媽是一個人 (每個人身上同時有你喜歡的,和不喜歡的)
我們所有人都是這種奇妙的令人費解的好與壞的混合物。

所以,愛不僅僅是對力量的仰慕。
這也是對弱點的寬容和對矛盾性的認可。

我們往往認為,越是適合自己的戀人,就越不必要我們解釋感受,我們的煩惱,我們想要什麼。
我們相信,就像一個孩子相信他的父母一樣,一個真正的夫妻會猜到我們心中所想。

人類所犯的一大錯誤,是覺得別人不需要我們說出來,就能知道我們心中的想法。
我們有這種深深的渴望,對方會無聲無息的理解。
這是一個美麗浪漫的想法,但也導致了一場災難性的悶騷爆發。

要想擁有好的婚姻和好的愛情,根基就是能成為一個好老師。
我們所有的人,不管我們的工作理想是什麼,不管我們是做什麼的,都要當老師。
要想教好書,就要放得開。你需要接受,也許你的伴侶不會理解。
而且,還需要夫妻內部的文化,兩個人要需要教。
彼此,互相學習。

還有希望嗎?(找到 right person?)
當然,還有希望。
看,我提到了 "足夠好 "這個詞。( "good enough.")
(你可以找到足夠好的person)

好在我們每個人都不是完美的,是以,我們不需要完美。
而對完美的要求,只會讓你走向一件事,那就是孤獨。
你不可能擁有完美和陪伴。
和別人在一起,就是每天都在商量著不完美。

我們應該做的另一件事是承認一種妥協的能力。
"你為什麼要妥協?"
"嗯,我自己也沒有那麼大的吸引力。
我有很多問題。
我有點神經質。
坦白說,我拉不到更好的人,但他們很好。
妥協是高尚的。
我們在生活中的每一個領域都會妥協。
我們沒有理由不在愛情生活中妥協。

最後我要引用我最喜歡的一位哲學家的一句話來結束。
丹麥人,19世紀,非常陰鬱的哲學家,叫克爾凱郭爾。
而克爾凱郭爾在他的《要麼/要麼》一書中,有一個精彩的爆發,他基本上是這樣說的。
"當然,你會嫁錯人,做出錯誤的決定,
而你之所以要這麼做,是因為你是人。
所以,不要因為人類的行為而責備自己。"

這就是他說的,"結婚,你會後悔;不結婚,你也會後悔;結婚或不結婚,無論怎樣你都會後悔。"
"笑看世間愚昧,你會後悔;為之哭泣,你會後悔。"
"上吊,你會後悔的;不上吊,你也會後悔的。"

這是所有哲學的精華
Thank you very much.


2022年3月29日星期二

Implementing Push Notification in iOS apps using Firebase Cloud Messaging

This article shows example codes in both iOS side and server side to let you know how to make use of Firebase Cloud Messaging (FCM) to implement push notification for your iOS app.

You need to use the Firebase for your iOS app.

Not in this article

I will not go into detail on how to setup in Xcode side nor the certification issues. There are tons of articles on the web for those. The steps for this part are same for any platforms.

Basic concept about iOS push notification

Almost every iOS app needs push notification. And you don’t want to deal with complicated details.

Here is the basic components you need to know.

  1. Your iOS app. This faces to human users.
  2. The Apple push notification service. This service, or server, belongs to Apple. It sends the notification to every iOS device upon it receives requests from your application server.
  3. A server application. This server, or a server application, will send requests to the Apple push notification service when it wants to notify users.

If you want to implement the server side logic, it is possible. However, for most of us, we want to get rid of the trouble and here the FCM comes.

Setup in Firebase

We need to do these steps.

  1. Firebase project setup. This is to put the key file of your project to the Firebase project setup for cloud messaging. So the Apple server will recognize the FCM server and allow it talks to the Apple server on behalf of your app.
  2. Firebase functions. To send notifications you need backend logic. Firebase functions is the place you write your backend logic for FCM. To write this code you need to setup the Google Cloud command line tool. Then you write at your local computer and use the tool to deploy it to the Firebase server. Note that you cannot view the code on Firebase console. All you can review is to your source code. So please do some backend or version control for your source.

iOS App setup

On the iOS app, we have several ways to receive messages from the FCM. In this case, for the simplicity, we choose “subscription by topic” approach. The Topic is actually a string, and our app subscribe it via a call:

Messaging.messaging().subscribe(toTopic: topicString)

Please note that the topic string can only accept certain characters as shown in this regular expression:

[a-zA-Z0-9-_.~%]+

Backend logic example

Let me use an example to show how we trigger the push notification.

In this example project, it uses the Realtime database of Firebase. This is a JSON-like structure database and we refer data using path. In this use case, we want to send out a push notification whenever there is a new node (data object) is inserted to the node “/messages”. This is actually a new message is sent by some user to another.

const functions = require("firebase-functions");

const admin = require("firebase-admin");

admin.initializeApp();

exports.sendPush = functions.database.ref('/messages/{pushId}')

.onCreate((snapshot, context) => {

const msgid = context.params.pushId;

const msg = snapshot.val();

const peer = msg.peer ;

const room = msg.chatroomid;

const text = msg.text ;

const sender = msg.userid;

const sendername = msg.username ;

// just in case. old version of messages may not have this field.

if (!peer) {

  return 0;

}

// room id has colon, but it is not valid for firebase topic name.

// this matches what the app subscribes for each room.

const topic = peer + "-" + room.replace(":","-");

const message = {

  notification: {

    title: sendername,

    body: text

  },

  data: {

    to: peer ,

    sender: sender ,

    room: room,

    sendername: sendername,

    text: text

  },

  topic: topic

};

admin.messaging().send(message)

.then((response) => {

  // Response is a message ID string.

  functions.logger.log('Successfully sent message:', response);

})

.catch((error) => {

  functions.logger.log('Error sending message:', error);

});

});

As you see, the key point here is to construct a JSON structure to represent your message to send to your iOS app. Please look at the message variable. It consists of 3 parts.

The notification: This is what displays in the push notification banner on the iOS device.

The data: This is the data you want to send to the iOS app to process with. The name of the fields seem could be any string but please try to avoid using strange ones and be simple, and avoid symbols.

The topic: This is the FCM topic string that your iOS app subscribes to.

Conclusion

We hope this is helpful. Please let me know in comments that you have any doubts. We try to make this writing short. So you would still need to check Firebase documentations to know how it really works.

精選

I programmed some creatures. They Evolved.