韓國旅遊 - 首爾自由行第二天 - 景福宮、三清洞、北村韓屋村
拍攝時間:2023 年 1 月 20 日 行程韓國首爾自由行第二天行程: 早餐 - 烤麵包餐車 韓服體驗 - 西花韓服 景福宮 午餐 - 土俗村蔘雞湯 三清洞 北村韓屋村 東大門 SPAREX 汗蒸幕 東大門設計廣場 晚餐 - 咸草醬花螃蟹 早餐一早先穿在台灣的穿法出來買早餐試試溫度,結果冷到受不了,回去旅館加厚裝備。早餐就買旅館附近的餐車: 有不少當地人在現場吃,拿杯子喝湯或是泡不知道是什麼的即溶包喝。 忘記多少錢了,好像是 3500 ,味道還不錯。 韓服體驗 - 西花韓服接著到 kkday 預定的西花韓服換裝,有的店員會講中文。網路上說需要押金和護照,但這次實際去都沒有要求。 換好裝東西可以寄放在這,但天氣太冷,我們外面還是有穿外套圍巾等衣物,拍照的時候再脫下。 先放一張女友穿韓服的背影 韓服店家大多最早都是九點才營業,所以穿韓服走景福宮排在早上的話,可能會卡到中午吃飯時間。 景福宮進入要門票,但有穿韓服就可以免費入場,我進去的時候有被要求拉下外套看裡面是不是穿韓服。 這次去的時候前面在施工,站位不好沒辦法完整拍到光化門。 定時有交易交接儀式,會有穿韓服古裝的人員。 慶 ...
韓國旅遊 - 首爾自由行
臨時突然決定出國去玩,不過不常出國又很久沒出國,有許多東西沒準備好,記錄一下這次經驗。 機票住宿這次透過燦星購買的機加酒五天四夜來回,飛機是長榮航空,飯店是 Savoy。 01-1915:15 - 18:45 桃園往仁川 01-2311:40 - 13:30 仁川往桃園 兩人總共 46008 由於是春節連假加上開始規劃的太晚,所以價格似乎比平常貴一些,能選的時段也很差。後來在規劃的過程中才發現,去頭尾就只剩三天可以玩,想改時間延長天數增加兩天,但手續費和罰金加起來兩個人要貴一萬五,就放棄了。當時重新訂一個七天六夜機加酒也是四萬六,不過飛機是變成立榮,時間是凌晨。 換錢 - 匯率比較如同網路上建議的,在台灣換韓幣匯率較差,建議先只換一點就好,到韓國的換錢所再換匯率較好。本來計畫第一天晚上在明洞旅館附近的換錢所換,但到達時間太晚,後面幾天行程都沒辦法在營業時間去換,所以最後都沒成功在換錢所換。這次總共在三個地方換錢,都是用新台幣千元鈔票去換: 出發前兆豐銀行: 0.0264 (37.88) 仁川機場換錢 (Hana Bank): 0.0289 (34.6) 地鐵站的換錢機 (Wow ...
Solidity 智能合約 Gas 優化技巧 - 變數順序
說明你也許不知道,Solidity 宣告變數的順序也會影響 gas 的消耗。由於 EVM 的操作都是以 32 bytes 為單位進行,所以編譯器會嘗試在讀寫變數時,將小於 32 bytes 的變數打包成 32 bytes 一組來進行存取,以達到節省存取次數的目的。不過編譯器並沒有足夠聰明,能自動將合約的變數做最佳化的分組。他會將固定大小的變數,依序每 32 bytes 為一組。例如下面的例子: 12345678910111213contract MyContract { uint64 public a; uint64 public b; uint64 public c; uint64 public d; function test() { a = 1; b = 2; c = 3; d = 4; }} 在執行 test() 時,雖然看起來寫入了四個變數,但是由於這四個變數加起來剛好是 32 bytes ,可以做一次性的寫入,所以實際上執行一個 SSTORE ,消耗 20000 gas 。接著看下面的例子: 123 ...
Solidity 智能合約 Gas 優化技巧 - 資料壓縮
在開發智能合約的過程,由於想要能夠達到多筆撮合的功能,我們實作了一個函式能夠輸入多筆訂單資料。在隨著我們加入了越來越多的功能,同時為了確保合約公正性,而需要越來越的參數,例如:礦工手續費、taker 手續費、maker 手續費和支付手續費方式等,我們遇到了變數過多而無法編譯的情況,而大量的資料所消耗的 gas 也成為一個問題。 我們在撮合的函式中,最後每個訂單會有這些資料: 1234567891011121314uint256 amountSell,uint256 amountBuy,address tokenSell,address tokenBuy,address user,uint256 nonce,uint256 gasFee,uint256 takerFee,uint256 makerFee,uint256 joyPrice,bool isBuy,uint8 v,byte32 r,byte32 s 於是我們試著想辦法減少變數的數量,在某次我看著 Etherscan 某交易顯示如下的參數資料時 12345678910111213Function: trade(address t ...
Solidity 智能合約 Gas 優化技巧 - 函式名稱
說明你也許不會想到,函式名稱也會對 gas 消耗造成影響,事實上,在最糟的情況下,甚至會有上千 gas 的差距。我們來看看下面程式: 1234contract Test { function b() public { }} 上面程式執行 b() 會消耗 125 gas,接著改成下面: 1234567contract Test { function a() public { } function b() public { }} 這次執行 b() 變成消耗 147 gas,一樣的空函式怎麼消耗增加了呢?試著執行 a() 會發現只消耗 125 gas。原來在智能合約中,函式存在前後順序,排序越後面的會消耗越多,每差一個順位就會多 22 gas。此時你可能會想把它改成下面: 1234567contract Test { function b() public { } function a() public { }} ...
Solidity 智能合約 Gas 優化技巧
如果一間區塊鏈公司業務,成本都來自於智能合約的交易,那麼智能合約的 gas 消耗,就直接影響公司營業成本。寫出節能的智能合約,在商用上有其重要性。這篇文章將整理分析智能合約中,影響 gas 消耗的一些因素,有助於我們了解消耗最大的指令是哪些,並謹慎的使用。gas 消耗可參考下面兩個表: 表一 表二 表一中的 Gas Used 為消耗的 gas。如果顯示為 FORMULA,表示不是一個固定值,要參考右邊的說明。由於我們通常使用 Solidity 開發,所以可能無法直接對應到上面表一中的指令;這時可參考表二,他有多加上一些額外的指令。以下列出消耗較多 gas 的行為與指令: 建立合約對應到 CREATE 和 CODECOPY 兩個指令。在合約中建立另一個空的合約消耗 42901 gas ( 總共 64173 gas),如果是直接部署一個空合約則總共是 68653 gas。加上合約的功能實作,可能會有幾十萬甚至百萬的 gas,應該是所有指令中消耗最多一個。拆分多個類別與實例的實作方式,gas 消耗可能會很可觀。避免用 Contract 當作資料結構: 不好 123456789contra ...
利用 binstubs 省略 bundle exec
bundle binstubs在 Ruby 中我們可以使用 Bundler 來管理專案的套件和版本,為了確保執行 rake 等指令時,能使用 Gemfile 一致的設定,我們通常會使用 bundle exec 作為開頭來執行指令,例如: 1bundle exec rake db:migrate 不過每次都要打 bundle exec 顯得有些麻煩,這時候我們可以利用 bundle 的 binstubs 來解決這問題。 例如我們想產生 rake 的 binstubs,輸入 1bundle binstubs rake 會在專案下的 bin 資料夾產生 rake 的 script,這時候執行 1./bin/rake 就相當於 1bundle exec rake 如果想產生全部 binstubs,可以執行 1bundle install --binstubs 不過不建議這樣做,他會在該目錄下產生 .bundler 的設定值,之後只要執行 bundle install 都會重新產生 binstubs,如果有使用 spring 之類的套件會被覆蓋掉。 環境變數產生了 binstubs 之後 ...
Ruby 教學 - 陣列 (Array)
語法一般陣列Ruby 中使用中括號 ([]) 來建立陣列,括號中為陣列元素,以逗點 (,) 隔開: 1p [178, 169.99, "30cm", [9527]] # [178, 169.99, "30cm", [9527]] 陣列中的元素也可以是陣列,而成為多維陣列的應用。 字串陣列Ruby 中另外提供了使用百分比符號 (%) 開頭,加上任意的符號 (非字母數字) 包夾字串陣列元素,以空白隔開,有以下兩種方式: %w{xx oo},不解析內容 %W{xx oo},解析內容 規則和單引號雙引號類似,所有的元素都會是字串型別,如下範例: 1234var = 5566p %w{178 169.99 "30cm" [9527] %w{9527} #{var}} # ["178", "169.99", "\"30cm\"", "[9527] ...
Ruby 教學 - 符號 (Symbol)
語法符號類似一種無法修改的字串,使用冒號 (:) 開頭,有以下三種使用方式: 冒號加名稱,:symbol 冒號加單引號字串,:'symbol' 冒號加雙引號字串,:"symbol" 如下範例: 123p :symbol1 # :symbol1p :"symbol2" # :symbol2p :'symbol3' # :symbol3 程式解析當使用字串形式的時候,也具有和字串一樣程式解析的性質,同樣的是雙引號的時候才有: 1234var = "value"p :"#{var}" # :valuep :'#{var}' # :"\#{var}" 不過一般而言,使用 symbol 通常是固定值,所以這種動態的用法不常使用。 符號的操作符號是無法修改的,但有也部分類似字串的方法: 123456symbol = :"I lose"puts sy ...
Ruby 教學 - 字串 (String)
語法字串有四種使用方式: 單引號 雙引號 Heredoc 百分比符號 (%) 以下逐一進行介紹 單引號以兩個單引號包夾一段文字,表示字串內容,使用單引號的字串有一些特徵如下 (與雙引號比較): 逸出字元 (Escape characters) 只有兩種。 逸出字元 \\ 可省略寫作 \,但不可為最後一個字元 (不建議省略)。 不會對字串中的程式進行解析。 所謂逸出字元是為了某些特別的用途或能以此輸入打不出來的字,而定義的一種使用方式,在此的逸出字元以反斜線 (backslash) 開頭。例如,我們使用單引號做包夾,但字串中如果出現單引號,將會誤判為字串結束單引號,所以使用 \' 來表示字串中的單引號。使用單引號的字串可用的逸出字元如下: 符號 說明 ' 單引號字元。 \ 反斜線字元。 一些使用範例如下: 123456789101112puts '基本用法';puts '也可以斷行';puts 'You\'re a good man.'; # You'r ...