【劉曉波逝世四週年】
https://youtu.be/4GzYYATsP9I
———————————
文遠交低話大家記住一定要撐 #文遠Patreon 呀!
⭐支持文遠⭐請訂閱Patreon⭐
⭐Please show your support by subscribing to Avery’s Patreon ⭐
www.patreon.com/AveryNg
———————————
今天是七月十三日,小弟我依然是坐緊監,為何今天我會有這一段影片呢,原因是今天是劉曉波先生的死忌,不經不覺已經是四年了。
大家都知道,劉曉波是我們中國第一位,亦是唯一獲得諾貝爾和平獎的人。我記得當年2008年,他是有份撰寫零捌憲章的,是很多年前的事。他當年的訴求其實很簡單,對於香港來說,甚至乎是偏向平實保守,他只是希望中國能夠有一個體制內和平的政治改革,希望能夠使到中國整個民主社會或是公民社會可以進步和發展。這只是一篇相對溫和憲章,但在當年卻遭到共產黨的全面打壓,大家便知道共產黨所懼怕的,並不是什麼分裂勢力、暴力或是外國力量介入,它們最懼怕是人民的良知。亦因此過往每年的今天,我和長毛和社民連等人,無論下多大雨都總會去中聯辦燃點燭光,去悼念劉曉波先生,但當然今天我沒辦法做到,我亦不會清楚在監獄外的朋友能否做到,但我仍希望各位朋友今天至少能穿上黑衣,用自己的方法去燃點燭光,去悼念劉曉波先生,甚至乎若您今天有時間的話,您可以上網了解一下零捌憲章的內容,或是重溫一下劉曉波先生的事蹟,他生平除了零捌憲章外還有很多貢獻,當年他也在天安門廣場內。
現在回想劉曉波先生的遭遇也很唏噓,其實除了劉曉波先生外,這麼多年來還有無數的維權人士和維權律師,在大陸被失踪、被監禁、被自殺、被滅亡,無論您覺得您是香港人也好,還是覺得您是中國人也好,或是覺得自己是世界公民也好,無論您價值觀如何,只要您也是追求或是擁抱自由、民主、公義的說,我們希望各位皆可以出一分力去悼念劉曉波先生,因為他是一個非常標緻性的人物,他臨終時雖然罹患癌症,但他一直以來也沒有放棄,亦沒有屈服。每次談到這個話題,心情也會很唏噓。
我希望能夠很快可以放監出來,可以和大家在街頭上見,亦都希望可以再次為劉曉波先生,和那些為民主運動而犧牲的人,聊表心意和悼念。
------------
Today is the 13th of July and I am still in prison. The reason why I have this video today is that today is the anniversary of the death of Mr LIU Xiaobo. Time flies and it has been 4 years already.
As we all know, LIU Xiaobo was the first and only person in China to be awarded the Nobel Peace Prize. I remember that in 2008, he had a part to play in writing the Charter 08, which was many years ago. He only hoped that China could have a peaceful political reform within the system, and that the whole democratic society or civil society in China could progress and develop. The content of the charter was rather mild, yet it was heavily suppressed by the communists. We all know that the regime fears not separatist forces, violence, or foreign forces, but the people's conscience. That is why every year on this day, Long Hair, the League of Social Democrats and I would always go to the Liaison Office to light a candle in memory of Mr Liu Xiaobo, no matter how heavy the rain was. But of course I can't do that today, and I'm not sure if my friends outside the prison can either, however I still hope that you can at least wear black today and light a candle to remember Mr. Liu Xiaobo. If you have time today, you can go online and learn about Charter 08, or you can revisit the story of Mr Liu Xiaobo, who made many contributions in his life apart from Charter 08, in fact he was in Tiananmen Square back then too.
It is saddening to look back on what happened to Mr LIU Xiaobo. In fact, apart from Mr LIU Xiaobo, there are countless other human rights activists and lawyers who have been disappeared, imprisoned, suicided or killed in the Mainland over the years. Whether you feel you are a Hong Kong citizen, a Chinese citizen, or a global citizen. No matter your values, as long as you are in pursuit of freedom, democracy, and justice, we hope you can all pay your respects to Mr Liu Xiaobo because he was a very exemplary figure. He was dying of cancer, but he never gave up. Whenever I talk about this subject, I feel very sad.
I hope to be released from prison soon and be able to meet you all on the streets. I also hope that we can once again pay tribute to Mr Liu Xiaobo and those who sacrificed their lives for the democratic movement.
———————————
文遠交低話大家記住一定要撐 #文遠Patreon 呀!
⭐支持文遠⭐請訂閱Patreon⭐
⭐Please show your support by subscribing to Avery’s Patreon ⭐
www.patreon.com/AveryNg
同時也有2部Youtube影片,追蹤數超過38萬的網紅CH Music Channel,也在其Youtube影片中提到,《あなたの番です》 STAND-ALONE / 形單影隻 作詞 / Lyricist:aimerrhythm 作曲 / Composer:飛内将大 編曲 / Arranger:飛内将大、 玉井健二 歌 / Singer:Aimer 翻譯:澄野(CH Music Channel) 意譯:CH(CH M...
楚 門 memory 在 張哲生 Facebook 的最讚貼文
臺南市中西區中正路 1959 vs 2021
上圖由Frank Lane 攝於1959年,為臺南市中西區中正路往西望的街景,遠方路口是西門路。謝謝 Frank Lane 的孫子 David E. Lane 提供照片。
下圖由吾友鄭嘉瑩於2021年1月19日中午專程到老照片裡的地點攝影供我製作今昔對照,十分謝謝他。
7年前,當我拿到1959年的老照片時,我只被告知照片是在臺灣拍攝的,但不確定是哪個城市。
於是,我先從路旁店家的名字去尋找線索;最右邊有家「新安平綢布莊」(黃底紅字招牌),從這個店名,我猜應該是臺南市;至於隔壁的「五福百貨商行」和「白玫瑰美髮廳」,以及畫面左邊的「勝利文具行」都無法讓我找到可用的線索。
接著,我發現左邊被椰子樹葉子遮到部份的大型招牌「⋯慕里」(第一個字看不清楚),於是我用「臺南 慕里」當關鍵字去Google,找到了一家位於臺南市南門路149號的美慕里攝影禮服公司(Memory Color Studio),然而當我用Google街景查了這個地址,卻發現與老照片裡的街景完全不符。不過,由於這個店名非常罕見,所以八成與老照片裡的美慕里有關,於是我打了網路上搜尋到的店家電話,然後,老闆接了電話,接下來就是好消息了!
美慕里的老闆表示他們原本的店址在中正路上,接近西門路,到了1982年才搬到南門路現址;由於美慕里攝影公司創立於1954年,所以1959年的照片裡的美慕里應該是同一家沒錯。
最後,我透過Google街景搜尋臺南市中正路接近西門路一帶的街景,終於發現一模一樣的建築物,就是在美慕里攝影公司對面的「五福百貨商行」,那棟老房子至今仍存在於中正路上。
據幫我拍攝今景的鄭兄表示,位於中正路126號的這棟老房子,之前曾開過美體小舖(The Body Shop)和寶琦華舞蹈生活用品館,不過現在該屋已無店家進駐其中。
此外,老照片左側有一間看不清楚店名的鐘錶行,其所在建築目前也是一家鐘錶行,名為「瑞都鐘錶行」,地址為中正路125號,由於其歷史悠久,因此很可能和老照片裡的鐘錶行是同一家。
同地 Google街景:http://goo.gl/maps/fgJ3k
Zhong-Zheng Road, Tainan in 1959.
(photo@Frank Lane estate, provided by David E. Lane)
楚 門 memory 在 Taipei Ethereum Meetup Facebook 的最佳解答
📜 [專欄新文章] 可升級合約介紹 - 鑽石合約(EIP-2535 Diamond standard)
✍️ Kimi Wu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Photo by Evie S. on Unsplash
前言
可升級合約簡單來說是透過 proxy contract(代理合約)來達成,藉由代理合約去呼叫欲執行的合約,若要升級,則把代理合約中的指向的地址換為新的合約地址即可。而執行的方式則是透過 delegateCall,但 delegateCall 不會更動目標合約的狀態。所以要怎麼處理變數,就是一門學問了。
舉例來說,contract B 有個變數 uint256 x,初始值為 0, 而 function setX(uint256),可以改變 x 的值。proxy contract A 使用 delegatecall 呼叫 contract B 的 setX(10),交易結束後,contract B中的 x 依然還是 0。
OpenZeppelin 提出了三種實作方式,可以做到可升級合約,細節可參考 Proxy Patterns,而最終的實作選用了 Unstructured Storage的這個方式,這種方式對於開發較友善,開發時不需特別處理 state variables(不過升級時就需要特別注意了)。而這篇主要是介紹 Diamond standard,OpenZeppelin 的可升級合約就不多做介紹。
USDC V2 : Upgrading a multi-billion dollar ERC-20 token 詳細地介紹代理合約跟變數儲存之間的關係,不了解升級合約的原理,建議先看看。
鑽石合約
名詞介紹
diamond:合約本體,是一個代理合約,無商業邏輯
facet:延伸的合約(實際商業邏輯實作的合約)
loupe:也是一個 facet,負責查詢的功能。可查詢此 diamond所提供的 facet與facet所提供的函式
diamondCut:一組函式,用來管理(增加/取代/減少)此 diamond合約所支援的功能
Loupe
直接來看 loupe的介面,從宣告就能很清楚暸解 diamond合約的實作方式,loupe宣告了一個結構 Facet,Facet結構包含一個地址及 function selector 陣列,所以我們只需要記錄一個 Facet陣列就可以得知這個 diamond 合約有多少個延伸合約及所支援的功能(loupe只定義結構,而實際變數是存在diamon合約中的)。也就是 diamond合約中只記錄延伸合約的地址及其支援的 function selectors,及少數 diamond合約的管理邏輯,並無商業邏輯,因此可以外掛非常非常多的合約上去(就像一個Hub),也就可以突破一個合約只有24K的限制。
// A loupe is a small magnifying glass used to look at diamonds.interface IDiamondLoupe { struct Facet { address facetAddress; bytes4[] functionSelectors; } function facets() external view returns (Facet[] memory facets_); function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_); function facetAddresses() external view returns (address[] memory facetAddresses_); function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);}
DiamondCut
至於 facet在 diamond合約上的註冊或是修改,就由 diamondCut負責,從以下程式碼可以清楚瞭解其功能(EIP中有規範,每次改變都需要發送DiamondCut事件)
interface IDiamondCut { enum FacetCutAction {Add, Replace, Remove} // Add=0, Replace=1, Remove=2 struct FacetCut { address facetAddress; FacetCutAction action; bytes4[] functionSelectors; } function diamondCut( FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata ) external; event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);}
Diamond合約
接下來就是最核心的部分 — diamond本體合約。以下是官方的範例,方法上跟 OpenZeppelin 一樣使用 fallback 函式跟 delegateCall 。
呼叫合約所不支援的函式,就會去執行 fallback 函式,fallback 函式中再透過 delegateCall 呼叫 facet 合約相對應的函式
fallback() external payable { address facet = selectorTofacet[msg.sig]; require(facet != address(0)); // Execute external function from facet using delegatecall and return any value. assembly { calldatacopy(0, 0, calldatasize()) let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch result case 0 {revert(0, returndatasize())} default {return (0, returndatasize())} }}
主要的差異在於變數的處理,OpenZepplin 是針對單一合約設計的代理合約(也就是每個合約都有自己的代理合約),所以無法處理單一代理合約儲存多個合約的變數(state variables)的狀況(後有圖例)。先由官方的範例程式來了解是怎麼處理變數的
在官方的範例中,都是以更改合約 owner 為例子
首先看到 DimaondStorage這個結構,結構中的前面三個變數都是在維持 diamond合約的運作(同上面loupe的範例),最後一個變數 contractOwner就是我們商業邏輯中所需的變數。
接著看到 function diamondStorage(),取變數的方式就跟OpenZeppelin 儲存特定變數方式一樣(EIP-1967),是把變數存到一個遠方不會跟其他變數碰撞到的位置,在這裡就是從 DIMOND_STORAGE_POSITION 這個 storage slot 讀取。
在實作上就可以有 LibDiamond1 ,宣告DIMOND_STORAGE_POSITION1=keccak256("diamond.standard.diamond.storage1") ,負責處理另一組的變數。藉由這種方式讓每個 facet合約有屬於自己合約的變數, facet合約間就不會互相影響。而最下方的 setContractOwner 是實際使用的範例。
library LibDiamond {
bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage");
struct FacetAddressAndSelectorPosition { address facetAddress; uint16 selectorPosition; }
struct DiamondStorage { mapping(bytes4 => FacetAddressAndSelectorPosition) facetAddressAndSelectorPosition; bytes4[] selectors; mapping(bytes4 => bool) supportedInterfaces; // owner of the contract address contractOwner; }
function diamondStorage() internal pure returns (DiamondStorage storage ds) { bytes32 position = DIAMOND_STORAGE_POSITION; assembly { ds.slot := position } }
function setContractOwner(address _newOwner) internal { DiamondStorage storage ds = diamondStorage(); address previousOwner = ds.contractOwner; ds.contractOwner = _newOwner; emit OwnershipTransferred(previousOwner, _newOwner); }
每個 library 處理了一組或多組變數的存取, facet 合約透過 library 對變數做操作。也就是把變數存在diamond主體合約,延伸的 facet合約只處理邏輯,是透過 library 去操作變數。
下面圖中清楚地解釋了 facet合約,function selectors 與變數之間的關係,從最左上這邊有個 facets 的 map,紀錄了哪個 selector 在哪個合約中,例如func1, func2是 FacetA的函式。左下角宣告了變數,每組變數的存取如同上述 library 的方式處理。
https://eips.ethereum.org/EIPS/eip-2535#diagrams
在 diamond的設計中,每個 facet合約都是獨立的,因此可以重複使用(跟library 的概念一樣)
https://eips.ethereum.org/EIPS/eip-2535#diagrams
小結
diamond合約使用不同的設計來達成合約的可升級性,藉由這種Hub方式可隨時擴充/移除功能,讓合約不再受限於24KB的限制,此外充分的模組化,讓每次升級的範圍可以很小。最後,因為跟library一樣只處理邏輯,並無狀態儲存,所以可以重複被不同的diamond合約所使用。
雖然又不少好處,也是有些缺點。首先,術語名詞太多,facet, diamondCut, loupe等等(其實還有好幾個,不過沒有介紹到那些部分,所以沒有寫出來)。開發上不直覺,把變數跟邏輯拆開,若要再加上合約之間的繼承關係,容易搞混,不易維護。最後,gas的花費,在函式的讀取、呼叫,變數的存取、傳遞都會有不少的額外支出。Trail of Bits 專欄中有點出更多的缺陷 Good idea, bad design: How the Diamond standard falls short,不過作者也有反擊 Addressing Josselin Feist’s Concern’s of EIP-2535 Diamond Standard,有興趣的讀者可以自行看看、比較。
為了模組化及彈性,diamond合約在設計上有點太複雜(over engineering),會造成可讀性越差(這點也是Vyper誕生的原因之一),而可讀性越差就越容易產生bug、也越不容易抓到bug,而在defi專案中,一個小小的bug通常代表著大筆金額的損失 😱😱😱。
雖然如此,筆者還是覺得很酷,有些設計的思維仍然可以使用在自己的專案
ref:
EIP 2535
Diamond 實作
Addressing Josselin Feist’s Concern’s of EIP-2535 Diamond Standard
OpenZeppelin upgradeable contract
可升級合約介紹 - 鑽石合約(EIP-2535 Diamond standard) was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
楚 門 memory 在 CH Music Channel Youtube 的最讚貼文
《あなたの番です》
STAND-ALONE / 形單影隻
作詞 / Lyricist:aimerrhythm
作曲 / Composer:飛内将大
編曲 / Arranger:飛内将大、 玉井健二
歌 / Singer:Aimer
翻譯:澄野(CH Music Channel)
意譯:CH(CH Music Channel)
English Translation: lyricaljourneys
背景 / Background - petrichor, 2017 - LM7 :
https://twitter.com/__lm7__/status/820535047186825218
版權聲明:
本頻道不握有任何音樂所有權,亦無任何營利,一切僅為推廣用途。音樂所有權歸原始創作者所有。請支持正版。
Copyright Info:
Be aware this channel is for promotion purposes only without any illegal profit. All music's ownership belongs to the original creators.
Please support the original creator.
すべての権利は正当な所有者/作成者に帰属します。あなたがこの音楽(または画像)の作成者で、この動画に使用されたくない場合はメッセージまたはこのYoutubeチャンネルの概要のメールアドレスにご連絡ください。私はすぐに削除します。
如果你喜歡我的影片,不妨按下喜歡和訂閱,你的支持就是我創作的最大原動力!
If you like my videos, please click like and subscribe! Thx :)
粉絲團隨時獲得最新訊息!
Check my Facebook page for more information!
https://www.facebook.com/chschannel/
中文翻譯 / Chinese Translation :
https://home.gamer.com.tw/creationDetail.php?sn=4883043
英文翻譯 / English Translation :
https://lyricaljourneys.wordpress.com/2019/05/05/stand-alone/
日文歌詞 / Japanese Lyrics :
重ねた夢の隙間 彷徨う
今もまだ 今もまだ
揺らいだ現実全て捨てて
これはまだ夢の中?
生ぬるい夜風と街並み
地下鉄にのみ込まれ
鳴り響く雑踏に溶けて
滲む eyes Neon lights
さよならって君が叫んでる
さよならって今も叫んでる
間違いだらけでも そのドアを開ければいいと
何も変われないなら
哀しい歌 ずっと歌ってもいいの?
Stand alone 歪んだ世界で
Stand alone 描いた世界へ
Bye-Bye 窓辺に月明りも届かない場所
何もかも投げ出して
暗闇に浮かぶ 星になりたい夜 そうでしょ?
ふらついた足元 指先
目の前の吐息すら
何もかも 本当か嘘かわからない
わかんない
探していたはずの線を 失くしてきたもので書いて
曖昧過ぎたのは始まりとルールのせい
もう何も守れないなら
刻んだ名前も 失くしてもいいよ
最初に君がついた嘘 夜明けは来るよと囁き
泣きたいほど あの時間こそが幸せだった
星座すら逃げ出して
一人立ち尽くす 星も見えない夜
Stand alone…
さよならって君が叫んでる
さよならって今も叫んでる
間違いだらけでも そのドアを叩けばいいと
何も変われなくても
哀しい歌 ずっと歌ってもいいと
Stand alone 歪んだ世界で
Stand alone 描いた世界へ
Bye-Bye 窓辺に月明りも届かない場所
何もかも投げ出して
暗闇に浮かぶ 星になりたい夜 そうでしょ?
中文歌詞 / Chinese Lyrics :
在交錯的夢境之間徬徨徘徊
如今依然,深陷其中
把歪斜扭曲的現實盡數捨去
這樣仍能,沉浸夢中吧?
城市街景徐來愉快的夜晚和風
伴隨欲將我吞噬其中的地鐵站
反覆迴響熙來攘往的腳步喧囂
雙雙朦朧的眼眸、模糊的霓虹燈
「再會了。」你曾這麼喊著
「再會了。」現在你也這麼喊著
哪怕早已鑄下太多的過錯,只要敞開那扇門就好
倘若已經無法再改變任何結果的話
就一直高唱著哀傷的歌又何妨?
形單影隻,佇立在這扭曲的世界
獨自一人,嘗試描繪出這世界
「掰掰。」在窗邊月色無法淌入之處
把所有一切都拋出——
拋向黑暗之中,正如成為點綴今晚寂寥夜色的星斗,對吧?
邁著踉蹌的步履
就連眼前自身的吐息,也難以維持
究竟這一切是真實還是虛假,我分不清楚
「我什麼也分不清楚......」
用至今失去的種種描繪出一直追尋著的線
全是因為開端和世界的法則過於模糊,使人難以尋覓
要是再也無法守護任何事物的話
就算淡忘深刻記憶中的名字也無妨
還記得你最初輕聲對我撒的謊:「很快就要迎來黎明了!」
令人不禁落下淚水,那段過往時日還真是幸福
就連星座也為我哀愁離去
獨自一人茫茫地佇立,望著這星光褪去的孤寂夜晚
無所依靠......
「再會了。」你曾這麼喊著
「再會了。」現在你也這麼喊著
哪怕早已鑄下太多的過錯,只要敞開那扇門就好
倘若已經無法再改變任何結果的話
就一直高唱著哀傷的歌又無妨?
形單影隻,佇立在這扭曲的世界
獨自一人,嘗試描繪出這世界
「掰掰。」在窗邊月色無法淌入之處
把所有一切都拋出——
拋向黑暗之中,成為點綴今晚寂寥夜色的星斗,也不賴吧?
英文歌詞 / English Lyrics :
Wandering around the gaps of these piled-up dreams,
Even until now, even until now.
I’ll throw this unstable reality away.
This is still a part of a dream.
The lukewarm night breeze and townscape,
are being swallowed by the subway.
The resounding hustle and bustle of the city,
melts into neon lights with blurry eyes.
The “Goodbye!” that you were calling out.
The “Goodbye!” that you are still calling out now.
Even if it’s full of mistakes, it’s fine if the doors can still be opened
And if we can’t change anything
it’s fine if this lonely song can always be sung
Stand alone in this distorted world.
Stand alone heading to a world imagined.
“Bye bye” from the window side, a place that even moonlight can’t reach.
I’ll throw away every thoughts,
that surfaces in this darkness.
This is the night I want to become a star, isn’t that right?
Even the sigh that wavers past,
the tips of my toes, in front of my eyes.
Is everything real or just lies? I don’t know.
I just don’t know.
The line I should have been searching for.
The line drawn between the things I’ve lost.
The new beginning and the rules are carried out too vaguely.
And if I can’t protect anything.
It’s fine, even if I lost the name etched in my memory.
The first lie you ever told, whispering that the dawn is coming.
I was so happy then that I wanted to cry.
Even if the constellations ran away,
and I stand still in a night where I can’t see the stars
Stand alone…
The “Goodbye!” that you were calling out.
The “Goodbye!” that you are still calling out now.
Even if it’s full of mistakes, it’s fine if the doors can still be opened.
Even if we can’t change anything,
it’s fine if this lonely song can always be sung.
Stand alone in this distorted world.
Stand alone heading to a world imagined.
“Bye bye” from the window side, a place that even moonlight can’t reach.
I’ll throw away every thoughts,
that surfaces in this darkness.
This is the night I want to become a star, isn’t that right?
楚 門 memory 在 RED Memory Youtube 的最讚貼文
さぁお待たせしました☆
皆大好きキャンギャル動画を早速配信☆
毎週金曜日19時動画配信☆
レッドメモリー
↓☆チャンネル登録してね☆↓
http://www.youtube.com/user/REDS15V
ツイッター @red__memory
猫チャン
https://www.youtube.com/channel/UCDuZ_Vy1f_E5yQHOYtJzlgQ
RED Memory GAME
https://www.youtube.com/channel/UCZ04bvgD65a-OrTN0kFaCtg/feed
不定期でゲーム配信していくので登録してね☆