[爆卦]mapping對應是什麼?優點缺點精華區懶人包

雖然這篇mapping對應鄉民發文沒有被收入到精華區:在mapping對應這個話題中,我們另外找到其它相關的精選爆讚文章

在 mapping對應產品中有15篇Facebook貼文,粉絲數超過0的網紅,也在其Facebook貼文中提到, #Soundbar評測|辛苦哂大家久等了.........終於攪掂呢個革命性新野, SONY HT-A9 四隻喇叭推出究竟係屋企會係咩效果先! 🎯YouTube: https://youtu.be/WA6bsXcMdSo Sony HT-A9 規格符合現今最新標準,支援 8K HDR、4K/12...

  • mapping對應 在 Facebook 的最讚貼文

    2021-09-03 02:53:39
    有 87 人按讚

    #Soundbar評測|辛苦哂大家久等了.........終於攪掂呢個革命性新野, SONY HT-A9 四隻喇叭推出究竟係屋企會係咩效果先!

    🎯YouTube: https://youtu.be/WA6bsXcMdSo

    Sony HT-A9 規格符合現今最新標準,支援 8K HDR、4K/120fps、Dolby Vision 及 Atmos 等最高影音規格,用上專利 360 度空間聲場技術(Sound Field Optimization),令大家可感受來自四方八面及不同距離聲音。A9 會利用每個揚聲器內的兩組麥克風,測量揚聲器的高度及位置,利用 4 組揚聲器出7.1.2 的 12 個揚聲器的效果,就算身處客廳不同位置,亦能感受到同樣的音效體驗。大家只需從電視上主選單進行簡易設置,便可啓動聲場優化功能。 HT-A9 對應 Acoustic Center Sync 技術,能與影片內容精確配對!

    🧨圖文片 : hhttps://post76.hk/news/2021/09/sony-ht-a9-ht-a7000-news/
    ⚡️討論帖 : https://post76.hk/thread-331989-1-1.html

    00:00 開場
    00:57 Sony HT-A9一覽
    02:41 HT-A9中央處理器
    03:30 支援 S-Center 功能的電視
    04:15 HT-A9規格焦點
    04:45 Studio亂放擺位
    06:15 HT-A9 MENU功能菜單接受設定(自動音場最佳化)
    07:37 實測 eARC Netflix Dolby Atmos效果 (未有SUBWOOFER)
    09:39 S-CENTER功能接駁 SONY A90J OLED TV測試電視中置效果
    11:28 SONY電視與HT-A9功能表統一在電視顯示
    12:15 PS5 接駁 HT-A9 測試 ATMOS + DTS:X 效果
    15:09 測試加入SUBWOOFER 前後效果
    17:03 AV房聽歌360RAcast評價
    19:52 總結
    ----------------- ⚡️⚡️⚡️ 精選文章 ⚡️⚡️⚡️ ----------------
    📺Web: https://post76.hk/portal.php
    👤網店: https://store.post76.hk/
    💖Mewe : https://bit.ly/38yYT4X​
    🎯YouTube: https://bit.ly/3qyrixZ
    👔FB: https://bit.ly/3bOMZ8Y
    🪀IG: https://bit.ly/3nTarV5
    💁🏻‍♂️◆Post76主站影音報告◆📺
    https://bit.ly/2FtLbBj​
    🙋‍♂️◆Post76影音論壇精華帖◆👏🏻
    https://bit.ly/2WZa1iC​
    💁🏻‍♂️◆Post76影音論壇熱門帖◆ ✈️
    https://bit.ly/2IDflEh​

    #Post76玩樂網​ #Sony #HTA9 #360SpatialSoundMapping #DolbyAtmos #DTSX #8KHDR #4K120 #家庭影院 #Soundbar評測

  • mapping對應 在 Facebook 的最佳貼文

    2021-02-12 14:59:48
    有 4,660 人按讚

    去年年底幹了一件很瘋狂的事,那就是在義大利訂了一顆MV Agusta Corse的racing ecu…
    -
    其實MV從2015年開始採用EAS2.0版本的快排感應器(線組是三條線)後就能支援進退快排,但很有趣的是MV在brutale、dragster或Turismo Veloce 原廠都提供進退快排,但就只有F3沒有……
    #2020年後才標配
    -
    而一般擁有電子油門的車,幾乎都可以靠外掛電腦的方式進行退檔補油的支援,讓車子可以擁有進退檔快排的功能。但MV Agusta的電子油門訊號好像是被ECU鎖住,所以市面上基本上是找不到一個可以對應MV Agusta車種的改裝進退檔快排品牌。(什麼IRC、Rapid bike都沒有)
    -
    不過倒是從 力馳重車 LIZE Motorsport 老闆那聽到可以透過購買MV Agusta Corse的racing kit來讓F3擁有進退快排的功能。
    -
    事實上整套racing kit是包含了racing ecu以及競技頭段和一些有的沒有的,總價大約在10萬以內可以搞定。但就算買的下手買不買的到又是一回事…原本一直請小朱老闆幫我問,不過他太忙了根本沒時間幫我弄這些。
    -
    而且其實我是不太想改競技頭段,除了噪音問題外,還有像排氣定檢那些有的沒有的都會讓人覺得有點煩(現在只想要簡單就好)。但MV Agusta的相關改裝資訊其實並沒有其他大眾品牌那麼透明,台灣也鮮少有人討論這些東西,所以只能去國外研究。
    -
    國外針對F3想改裝進退快排的就兩個方式,一個是購買原廠racing ecu,另一個則是自己刷ecu mapping。不過刷ecu mapping這個太複雜,所以還是想以單獨購買racing ecu為主。
    -
    最後找到的是能在一個義大利網站買到racing ecu,但這個racing ecu又不太像racing kit裡的racing ecu一樣,感覺起來應該是他們有得到原廠授權可以販售racing ecu的mapping,所以你才會看到一個標榜mv corse racing ecu的產品寄到台灣時只是用個爛爛牛皮紙袋外加氣泡紙包裝,然後上面只有一個貼了張裡面被刷了什麼mapping的公版空白ecu…(收到當下其實有點心寒)
    -
    在買之前有稍微研究一下這個『mv agusta corse racing ecu』的內容,只有寫上可以增加馬力與扭力』,看了其實還蠻怕的,因為racing kit裡的racing ecu提供的東西非常多,包含了可以針對各檔位的循跡控制設定、彈射起步、pit區模式等等有的沒有的,感覺就很威,當然也是有包含升降檔快排功能,所以還是先發個mail和賣場詢問。
    -
    他們一開始的回應是進退快排的功能只要我的排檔感應器是三條線的版本就可以開啟(忘記和他們說我是2016年的F3RC),後來說明我的F3是採用EAS2.0的快排感應器後他們就回了一句很簡單的:
    #那你就下標的時候選對規格我們就會幫你準備一顆刷好進退快排功能的ecu,bye
    (後來有車友告知如果不是racing kit套件的一些功能都需要額外加購)
    -
    MDFK,看到這個這麼簡單其實也是會怕的好嗎,雖然這個東西不算太貴,但如果買回來一樣沒用那就像是把2萬多拿去丟海裡一樣,但基於冒險的心還是訂了一顆回來,用DHL超級快,但也被課了4000多的稅…………
    -
    接下來就等年假完,力馳老闆開工後才有機會去"開獎"看看我這次到底是不是採到雷還是撿到寶了………
    -
    如果踩到雷的話我就不說了…有撿到寶再和大家分享…
    #祝大家新年快樂

  • mapping對應 在 Taipei Ethereum Meetup Facebook 的最佳解答

    2021-01-11 12:57:40
    有 20 人按讚

    📜 [專欄新文章] 可升級合約介紹 - 鑽石合約(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.

    👏 歡迎轉載分享鼓掌

你可能也想看看

搜尋相關網站