雖然這篇移除功能變數鄉民發文沒有被收入到精華區:在移除功能變數這個話題中,我們另外找到其它相關的精選爆讚文章
在 移除功能變數產品中有2篇Facebook貼文,粉絲數超過2,850的網紅矽谷牛的耕田筆記,也在其Facebook貼文中提到, 今天這篇文章用來介紹 docker 20.10 所帶來的改變,就算 kuberetes 未來不再預設使用 docker 作為其 CRI,但是對於本地開發者來說, docker 還是個短期不太可能淘汰的工具,所以適時的理解最新的一些變化也是不可或缺的一部分 1. Rootless 從過去的實驗性質到...
同時也有115部Youtube影片,追蹤數超過7,970的網紅吳老師EXCEL VBA設計(大數據自動化)教學,也在其Youtube影片中提到,EXCEL VBA與資料庫(進階112)第4單元多範圍複製與移除重複&用VBA新增工作表與篩選複製資料&用CurrentRegion抓取目前區域與關閉畫面更新&將查詢條件改為關鍵字查詢&改為共用SUB與參數傳遞 上課內容: 01_重點回顧與多範圍複製與移除重複 02_用Range物件複製業務與移除...
-
移除功能變數 在 吳老師EXCEL VBA設計(大數據自動化)教學 Youtube 的最讚貼文
2020-10-15 00:10:04EXCEL VBA與資料庫(進階112)第4單元多範圍複製與移除重複&用VBA新增工作表與篩選複製資料&用CurrentRegion抓取目前區域與關閉畫面更新&將查詢條件改為關鍵字查詢&改為共用SUB與參數傳遞
上課內容:
01_重點回顧與多範圍複製與移除重複
02_用Range物件複製業務與移除重複
03_用VBA新增工作表與篩選複製資料
04_用CurrentRegion抓取目前區域與關閉畫面更新
05_將批次查詢改為單次查詢
06_將查詢條件改為關鍵字查詢
07_避免程式錯誤防呆一相同名稱與二無輸入
08_防呆3查詢無結果處置說明
09_改為共用SUB與參數傳遞
完整影音
http://goo.gl/aQTMFS
教學論壇:
https://groups.google.com/forum/#!forum/scu_excel_vba2_112
與前幾期的課程雖然用的是相同的範例,但最大的不同在:
1.除了解說建函數公式,並將之轉成自訂函數,把複雜的公式變簡單。
2.如何將複雜的公式變成簡單的按鈕,按下按鈕就自動完成工作。
內容主要分成:
單元01_資料拆解相關(VBA基礎)
單元02_表單設計
單元03_輸入自動化與表單與資料庫
單元04_工作表合併
單元05_資料查詢(篩選與分割工作表)
單元06_批次查詢
單元07_從雲端硬碟下載資料
單元08_下載網路資料
單元09_工作表相關
單元10_活頁簿與檔案處理(工作表分割與合併活頁簿)
單元11_表格與圖表處理(自動繪製圖表)
單元12_圖案處理(快速匯入圖片到EXCEL)
有講義與範例和完成的畫面公式與程式碼,
只要按照每周的順序學習,學會EXCEL VBA自動化絕非難事,
優點:
1.可非線性學習:可按照自己最不熟的部分多次學習。
2.可反覆學習:有疑問可以多次聽講,保證學的會。
3.可攜帶學習:只要有瀏覽器就可以播放SWF檔,MAC電腦也沒問題。
上課參考用書:
看!就是比你早下班-50個ExcelVBA高手問題解決法
作者:楊玉文 出版社:松崗
Excel VBA一點都不難:一鍵搞定所有報表
作者:?Excel Home
出版社:博碩
課程理念:
1.以循序漸進的方式, 透過詳細的說明和實用的Excel VBA範例, 逐步了解整個 VBA 的架構與輪廓,進而學習 VBA 變數、函式及邏輯的觀念, 即使沒有任何程式設計基礎, 也能自己親手撰寫 VBA 程序來提昇工作效率, 晉身職場 Excel 高手! 2.進而解說EXCEL與資料庫的結合,將EXCEL當成資料庫來使用,結合函數、VBA等更深入的功能,讓資料處理和分析的應用更上層樓。 3.將結合GOOGLE雲端試算表,教您如何將EXCEL函數雲端化與網路化。
更多EXCEL VBA連結:
01_EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
02_EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524
吳老師 2020/10/14
EXCEL,VBA,函數東吳進修推廣部,EXCEL,VBA,函數,程式設計,線上教學,excel,vba,教學,excel,vba指令教學,vba範例教學excel,,excel,vba教學視頻,excel函數教學,excel函數說明,excel函數應用 -
移除功能變數 在 吳老師EXCEL VBA設計(大數據自動化)教學 Youtube 的最讚貼文
2020-10-15 00:08:49EXCEL VBA與資料庫(進階112)第4單元多範圍複製與移除重複&用VBA新增工作表與篩選複製資料&用CurrentRegion抓取目前區域與關閉畫面更新&將查詢條件改為關鍵字查詢&改為共用SUB與參數傳遞
上課內容:
01_重點回顧與多範圍複製與移除重複
02_用Range物件複製業務與移除重複
03_用VBA新增工作表與篩選複製資料
04_用CurrentRegion抓取目前區域與關閉畫面更新
05_將批次查詢改為單次查詢
06_將查詢條件改為關鍵字查詢
07_避免程式錯誤防呆一相同名稱與二無輸入
08_防呆3查詢無結果處置說明
09_改為共用SUB與參數傳遞
完整影音
http://goo.gl/aQTMFS
教學論壇:
https://groups.google.com/forum/#!forum/scu_excel_vba2_112
與前幾期的課程雖然用的是相同的範例,但最大的不同在:
1.除了解說建函數公式,並將之轉成自訂函數,把複雜的公式變簡單。
2.如何將複雜的公式變成簡單的按鈕,按下按鈕就自動完成工作。
內容主要分成:
單元01_資料拆解相關(VBA基礎)
單元02_表單設計
單元03_輸入自動化與表單與資料庫
單元04_工作表合併
單元05_資料查詢(篩選與分割工作表)
單元06_批次查詢
單元07_從雲端硬碟下載資料
單元08_下載網路資料
單元09_工作表相關
單元10_活頁簿與檔案處理(工作表分割與合併活頁簿)
單元11_表格與圖表處理(自動繪製圖表)
單元12_圖案處理(快速匯入圖片到EXCEL)
有講義與範例和完成的畫面公式與程式碼,
只要按照每周的順序學習,學會EXCEL VBA自動化絕非難事,
優點:
1.可非線性學習:可按照自己最不熟的部分多次學習。
2.可反覆學習:有疑問可以多次聽講,保證學的會。
3.可攜帶學習:只要有瀏覽器就可以播放SWF檔,MAC電腦也沒問題。
上課參考用書:
看!就是比你早下班-50個ExcelVBA高手問題解決法
作者:楊玉文 出版社:松崗
Excel VBA一點都不難:一鍵搞定所有報表
作者:?Excel Home
出版社:博碩
課程理念:
1.以循序漸進的方式, 透過詳細的說明和實用的Excel VBA範例, 逐步了解整個 VBA 的架構與輪廓,進而學習 VBA 變數、函式及邏輯的觀念, 即使沒有任何程式設計基礎, 也能自己親手撰寫 VBA 程序來提昇工作效率, 晉身職場 Excel 高手! 2.進而解說EXCEL與資料庫的結合,將EXCEL當成資料庫來使用,結合函數、VBA等更深入的功能,讓資料處理和分析的應用更上層樓。 3.將結合GOOGLE雲端試算表,教您如何將EXCEL函數雲端化與網路化。
更多EXCEL VBA連結:
01_EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
02_EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524
吳老師 2020/10/14
EXCEL,VBA,函數東吳進修推廣部,EXCEL,VBA,函數,程式設計,線上教學,excel,vba,教學,excel,vba指令教學,vba範例教學excel,,excel,vba教學視頻,excel函數教學,excel函數說明,excel函數應用 -
移除功能變數 在 吳老師EXCEL VBA設計(大數據自動化)教學 Youtube 的最佳貼文
2020-10-15 00:08:35EXCEL VBA與資料庫(進階112)第4單元多範圍複製與移除重複&用VBA新增工作表與篩選複製資料&用CurrentRegion抓取目前區域與關閉畫面更新&將查詢條件改為關鍵字查詢&改為共用SUB與參數傳遞
上課內容:
01_重點回顧與多範圍複製與移除重複
02_用Range物件複製業務與移除重複
03_用VBA新增工作表與篩選複製資料
04_用CurrentRegion抓取目前區域與關閉畫面更新
05_將批次查詢改為單次查詢
06_將查詢條件改為關鍵字查詢
07_避免程式錯誤防呆一相同名稱與二無輸入
08_防呆3查詢無結果處置說明
09_改為共用SUB與參數傳遞
完整影音
http://goo.gl/aQTMFS
教學論壇:
https://groups.google.com/forum/#!forum/scu_excel_vba2_112
與前幾期的課程雖然用的是相同的範例,但最大的不同在:
1.除了解說建函數公式,並將之轉成自訂函數,把複雜的公式變簡單。
2.如何將複雜的公式變成簡單的按鈕,按下按鈕就自動完成工作。
內容主要分成:
單元01_資料拆解相關(VBA基礎)
單元02_表單設計
單元03_輸入自動化與表單與資料庫
單元04_工作表合併
單元05_資料查詢(篩選與分割工作表)
單元06_批次查詢
單元07_從雲端硬碟下載資料
單元08_下載網路資料
單元09_工作表相關
單元10_活頁簿與檔案處理(工作表分割與合併活頁簿)
單元11_表格與圖表處理(自動繪製圖表)
單元12_圖案處理(快速匯入圖片到EXCEL)
有講義與範例和完成的畫面公式與程式碼,
只要按照每周的順序學習,學會EXCEL VBA自動化絕非難事,
優點:
1.可非線性學習:可按照自己最不熟的部分多次學習。
2.可反覆學習:有疑問可以多次聽講,保證學的會。
3.可攜帶學習:只要有瀏覽器就可以播放SWF檔,MAC電腦也沒問題。
上課參考用書:
看!就是比你早下班-50個ExcelVBA高手問題解決法
作者:楊玉文 出版社:松崗
Excel VBA一點都不難:一鍵搞定所有報表
作者:?Excel Home
出版社:博碩
課程理念:
1.以循序漸進的方式, 透過詳細的說明和實用的Excel VBA範例, 逐步了解整個 VBA 的架構與輪廓,進而學習 VBA 變數、函式及邏輯的觀念, 即使沒有任何程式設計基礎, 也能自己親手撰寫 VBA 程序來提昇工作效率, 晉身職場 Excel 高手! 2.進而解說EXCEL與資料庫的結合,將EXCEL當成資料庫來使用,結合函數、VBA等更深入的功能,讓資料處理和分析的應用更上層樓。 3.將結合GOOGLE雲端試算表,教您如何將EXCEL函數雲端化與網路化。
更多EXCEL VBA連結:
01_EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
02_EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524
吳老師 2020/10/14
EXCEL,VBA,函數東吳進修推廣部,EXCEL,VBA,函數,程式設計,線上教學,excel,vba,教學,excel,vba指令教學,vba範例教學excel,,excel,vba教學視頻,excel函數教學,excel函數說明,excel函數應用
移除功能變數 在 矽谷牛的耕田筆記 Facebook 的最佳貼文
今天這篇文章用來介紹 docker 20.10 所帶來的改變,就算 kuberetes 未來不再預設使用 docker 作為其 CRI,但是對於本地開發者來說, docker 還是個短期不太可能淘汰的工具,所以適時的理解最新的一些變化也是不可或缺的一部分
1. Rootless 從過去的實驗性質到全面支援
自從 runc 這個 container runtime 支援 cgroupv2 之後,已經可以透過 rootless 來創造符合 OCI 標準的容器,因此 docker 也可以順便藉由這個過程一併支持 rootless 的環境
2. Logging drivers
過往大家可能比較少會去關注或是修改 docker logging 的輸出方式,比較常見的是直接基於預設的情況去使用,而有部分的解決方案可能會特別修改成 syslog 等不同方式
而 20.10 所做的事情就是強化整體的使用習慣,讓你不管底層是使用何種 logging driver,你都可以透過 docker logs 的方式去閱讀這些資訊
3. OS support
20.10 開始支援 Ubuntu 20.10, Fedora 33 以及 CentOS8
4. CLI improvements
docker CLI 一直持續改進與強化,移除沒用的功能同時也針對一些常見功能加入一些參數,譬如
1. docker push 與 docker pull 的概念一致,預設情況下,如果不給 tag 就會幫忙帶入 latest 進去
2. docker exec 可以透過事先撰寫檔案來一口氣傳入大量的環境變數
https://towardsdatascience.com/whats-new-in-docker-20-10-fd1de1216c0
移除功能變數 在 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.
👏 歡迎轉載分享鼓掌