從意象與結構捕捉詩集《小寧》的敘事體感 ◎李修慧
詩人楊智傑的第二本詩集《小寧》於2019年出版,收錄多首與台灣2012年以來一系列社會運動相關的作品,融合年輕人對於時代的惶惑,敘事中又有抒情,也間雜有知性哲理,引起注目。
此外,《小寧》中的每一首敘事詩讀來氣氛統一、整合性強,雖融合敘事、抒情與知性,卻沒有斷裂感,楊智傑接受《幼獅文藝》訪問時,曾引述廖偉棠的話表示,他重視詩作的「體感」:「詩作用的方式並非意象而是氛圍⋯⋯是整首詩的氣味。」
本文將透過「意象」和「結構」兩個面向,探討楊智傑《小寧》中的敘事詩為何能有高度統合性?又如何營造一致的「體感」?
意象:環環相扣、中心意象
首先,在意象方面,楊智傑每一首詩中的意象,都隨著詩的發展「環環相扣」,此外,每首詩都能找出一個「中心意象」貫穿全詩。以下將以〈返鄉夜車〉說明詩的意象如何環環相扣、中心意象又如何作用。
〈返鄉夜車〉
阿銘,誰錯過末班車又回到這裡
靜靜濱海小廟
微亮線香
收攏逝去之物,永在之物的獨眼
縫合,省道盡頭的黃昏——
無路可退了,就不再迷路了
砂石車揚起一個塵世
泥濘中
我們卻閉上了雙眼,卻暢泳流水線
在工地制服內
藏好,一顆22K電鍍的心
像孩子王卸下紙王冠
放棄
最後的權力。阿銘
就在那光潔、整齊的明日受降吧
看水蟻翅膀
晨風中
隨吊扇飛升。迸散、虛無、透光
阿銘,總有一天我將成為你
像正午稻浪間
一支稻草人安穩倒下,從此海風徐徐
晴空無敵
穿過我們的只剩下光——
詩作開頭,楊智傑勾勒出一個錯過末班車的身影,或許孤單的站在車牌旁,或許頹喪的坐在候車椅上,無論何者,都散發出孤落的氛圍。而車站旁立著一間小廟,暗夜中,只有線香熒亮。
接著,作者將文字的鏡頭,聚焦在線香頂端的熒火,隨著鏡頭拉近,原本細如針尖的火越來越大,視野之外的其他物件都被那唯一的光收攏、蓋過。透過鏡頭的拉近,那熒火於是看起來像一顆巨大的、熒紅的瞳孔。
而透過「眼可以開闔」的物理狀態,詩人連結到「縫合」。偌大無車的省道盡頭,與熒火同樣暖色的黃昏,在暗色天空、灰色地面的夾縫間,像是一道暖紅的縫線,正逐漸消退。
當黃昏消退,黑夜完全籠罩,楊智傑以簡潔的一句話「無路可退」,既說明黑夜完全籠罩,也說明主角阿銘的人生狀態。在砂石車遍地的工業區鄉村成長,阿銘的身影又出現,但這次不再是錯過末班車的頹喪狀態,而是仍然年輕、的他,為了避開揚起的沙塵、為了逃避那無可迴避的荒涼,阿銘閉上眼。閉眼的動作,又接連到同樣需要閉眼的「暢泳」,但阿明暢泳的場域,並非流水,而是工廠流水線。
作者在這裡,終於直白道出阿銘迷途、錯過夜車的原因:他是流水線的工人,被工地制服、資本體制緊縛,肉做的心,就算鍍上一層金屬,也必須藏好。
接著,作者再從「心」這個較為性靈的詞,連接下一段的「孩子王」與「紙王冠」兩個充滿童貞感的詞彙。詩中,敘事者以呼告的語氣奉勸阿銘,連最後僅有的事物,也一起放棄吧,資本主義下,人只能在自己的小天地,阿Q的當個孩子王。只要放棄僅有的權力,就能迎向整齊的、光潔的景象。作者從整齊、光潔,再跳接到同樣具有光潔感的白蟻琥珀色的翅膀,白蟻隨吊扇飛昇,透光的瑩翅落下時,同時也迸散、死亡。
讀到這裡,我們幾乎已經可以確定,前一段的「整齊、光潔」所指的正是天堂的景象;而阿銘所放棄的、那僅有的事物,或許正是生命;第一段的身影,也許是無腳的幽魂阿銘;線香,可能隱含生者給予阿銘的祝禱。
最後兩段,作者從「透光」連結到更平曠的光亮景色:正午稻浪、晴空無敵,在這幅晴空豔陽的好景色中,稻草人倒下,回歸稻浪。那倒下的,也許是稻草人、也許是阿銘、也許是在這個資本主義的世界汲汲營營的其他年輕人,但唯有倒下才能卸下重負,才能重溫被光穿透的輕盈與救贖。
解讀整首詩後可以發現,楊智傑善於鍛造鎖鏈般的意象:小廟→線香→線香的熒火→熒紅的獨眼→黃昏的縫線→省道盡頭→路→無路可退→砂石車→沙塵→閉眼→暢泳→流水→流水線→工地制服→像制服一樣包裹他物的電鍍→電鍍內的心。
這些意象或許難以統合出一個主旨,但若沿著詩的順序,它們就像一條鎖鏈,A意象勾著B意象,B意象勾著C意象,A與C或許並無關聯,但透過B的連接,一切就渾然天成。最後,整串意象娓娓帶出敘事的主體、以及主體所遭遇的故事。
此外,〈返鄉夜車〉中,也可以觀察到一個重複出現的「中心意象」:光。從最初小廟中一炷線香的熒紅火光,隨著文字鏡頭的拉近,變成獨占視野、泛著紅光的巨大獨眼,接著,詩作的帶出同樣屬於暖色系的「黃昏的光」。
而詩的中段,隨著阿銘的故事逐漸明朗,光的色澤也開始由夜晚神秘、孤落的紅光轉變為白天的白光。首先是電鍍銀白的反光,接著,當敘事者奉勸阿銘放下最後的事物,走向死亡,出現了「光潔、整齊」的明日,再連接到晨間的光,以及水蟻翅膀半透明的透光模樣,最後,作者建構出正午、晴空,一個更平曠明亮、視野及寬的光,詩的末尾甚至收束在「只剩下光」。
透過「環環相扣」的技巧,意象得以持續延伸,支撐起敘事詩中的故事與細節。但由於有概念相同的「中心意象」凝聚整首詩,詩作的每一小節即使在不同的場景中游移、跳換,也不致太過發散而顯得虛無,讓整首詩仍然保持相似的體感,密度一致、氣氛統一。
結構:以背景敘事、以抽象換場
在結構方面,楊智傑的敘事詩中,可能安插著不同時空的場景,透過這些細筆描繪的背景,讓背景補足沒有明白說出的故事遠因。另外,在不同的時空場景間,楊智傑善於以極富張力的抽象哲思跳接換場,也使換場不過於突兀。
以下將以〈1996——沒有一場雨因而淋濕我〉說明:
〈1996——沒有一場雨因而淋濕我〉
2012在故鄉海產店
遇早婚
初戀女友小媛。西北雨暗暝
伊看看窗外,又低頭
轉開地下電台
說舊情綿綿一直播、一直播也好。一世人平安
怎樣,都好⋯⋯
(窗外只有細雨,輕撫矮泥牆
剝蝕一排
褪色的壯陽藥海報)
最後。我們選擇了雨
歷史卻未選擇
在熄滅我們的雨中化為烏有
烏有是盛放紫丁香
雨中
泥濘的工地
烏有是省道旁
名叫「薄紗誘惑」的檳榔攤裡,穿吊嘎
顧店的老頭
烏有,就是時代。穿過小鎮工業區
霓虹閃爍的KTV
穿過排氣管,轟鳴的海岸路
長長暑假
女孩
熱辣短褲與背心
(與前座,男孩緊繃的褲襠。)
1996在黑暗裡,過彎,失速——彼時我們所擁有的
不正是自由
落體,墜落的自由?
2012,卻已沒有一場雨,願意前來淋濕我⋯⋯
騎樓躲雨的外籍工人,倚牆
靜聽菸絲燃燒
小媛恍惚凝視街道
任細肩帶
自白皙手臂輕輕滑落。「那是菸燙的、這是酒瓶⋯⋯」她指著眼角
這是十七歲
一起摔車的痕跡
我笑了。「我也已經很少哭了」她說
新的傷口覆蓋舊的。這,就是歷史
在一滴冷氣水的凝結裡
化為烏有
放晴了,我拉起小媛
跨上破機車
直直衝向明亮的港口。我們笑著,唱著
這是2012
但再快一些,這就是1996
(我站在雨中/沒有一場雨因此淋濕我/
我該為誰一無所有/又該為誰從此溫柔)
這首詩講述一名受暴的女子,但女子受暴的事實,在詩的中後段(第8段)才被揭曉,且並沒有特意說明這些傷口為何造成、由誰造成。然而,在整首詩穿梭過去與未來的場景中,已經補足故事的情節。
作者描述,小媛生活的地方,來自敘事者的「故鄉」,一個沒落的工業小鎮,省道交織、充滿工地、地下電臺盛行。此處曾經繁盛一時,但如今只剩廉價的外籍勞工,連檳榔攤也請不起薄紗誘惑的小姐,只剩老闆在顧店,牆上的壯陽藥廣告,也早剝蝕一片。
而在這個曾是工業重地的小鎮,以肌肉、血汗掙錢陽剛遺跡隨處可見:早期,這裡曾有氣盛的年輕人,在此飆車,轟鳴整條海岸路,女子熱辣短褲,男子褲襠緊繃。這裡也曾充滿男性需要的情色娛樂:KTV霓虹閃爍、檳榔攤取名為「薄紗誘惑」、牆上壯陽藥海報貼了整排。
當小媛的故事,放置在這個充滿陽剛氛圍的沒落工業區,讀者便能透過這些線索,猜想小媛受暴的來龍去脈:從「早婚」來推斷,小媛的傷口可能來自丈夫對她的家庭暴力,或許是早婚的育兒壓力、也許是蕭條的經濟,讓丈夫將所有不順遂都轉化為肢體暴力,轉嫁到妻子身上。
但若從小媛「任細肩帶/自白皙手臂輕輕滑落」來看,小媛或許是情色產業的一環,也許是台灣偏鄉情色卡拉OK、色情小吃店的性工作者,在工業小鎮裡,消費者不外乎工人,而情慾與暴力皆是權力的展現,被酒瓶砸傷、被煙蒂燙傷,可能是性工作者必須承接酒醉客人的高張情緒,也可能是在不對等的產業中,女性工作者服務男性客人時,不可避免的職業傷害。
作者透過這沒落的小鎮景象、充滿陽剛的暗示,間接告訴讀者小媛為何受暴、如何受暴,完成「敘事」。
而「以抽象換場」方面,這首詩總共建構了五個場景:窗前聽著地下電台的小媛(以及窗外海報)、省道旁的檳榔攤、過去小媛與敘事者飆車、小媛說明自己的傷口、小媛與敘事者跨上機車奔向港口。在這些場景間,作者透過高張力、富有哲思的抽象句式作為橋樑。
例如,作者第一場景過渡到第二場景時,以「最後。我們選擇了雨/歷史卻未選擇我們/在熄滅我們的雨中化為烏有」來連接。這三句將「歷史」如此龐大、厚重的名詞,與「烏有」這樣破敗、消極的詞做連結,拉扯出巨大的張力。
而從第二場景的檳榔攤,要過渡到第三場景的飆車時,作者以「烏有,就是時代」當作橋樑,同樣是將龐大、沈重的「時代」一詞,與虛無的「烏有」劃上等號。
而在第三場景與第四場景間,作者寫道「彼時我們所擁有的/不正是自由/落體,墜落的自由?」將正向的「自由」與負面的「墜落」相連,也令人思考,小媛的早婚、小媛以性工為職業,是否也是擁有不受限的自由時,錯誤的選擇所導向的代價?
而第四場景與第五場景間,作者以「新的傷口覆蓋舊的。這,就是歷史/在一滴冷氣水的凝結裡/化為烏有」作為橋樑。傷口新舊交雜本已令人比酸,但作者有將「傷口」如此日常、個人的意象,以短促而決絕的語氣與「歷史」連接,下一句又反過來,將歷史凝縮到更微觀的「一滴冷氣水」中,最終甚至走向「烏有」。同樣三句話中,描繪抽象的「歷史」,富有哲思與大小拉鋸的張力。
這些連結不同場景的「橋樑」,或兩句或三句,涵括抽象的「時代」、「歷史」、「自由」、「墜落」等辭彙,將極具張力的詞彙互相連接,像是為時代下的短注,而這樣的短注,適用於每個破落的場景,因此地已連接「橋的兩端」。
此外,每隔幾段就重複出現的「烏有」、「歷史」,也隱約展現出一種相互聯繫的韻律,營造出統一的體感
此外,作者在寫景、進行單一敘事的同時,也透過這些抽象短句為時代下註解,隱然暗示:小媛的故事也將發生在同時代的每個沒落小鎮,暴力與權力的傾軋不是個案。
徵引資料:
洪崇德:〈給相聚時刻與同代人的詩――訪談楊智傑〉,《幼獅文藝》2019年5月,頁182
--
美術設計:Sorrow沙若
圖片來源:Sorrow沙若
--
楊智傑《小寧》書評好讀版 https://pse.is/3bv6vh
#每天為你讀一首詩 #楊智傑 #小寧 #意象 #結構 #敘事體感
同時也有1部Youtube影片,追蹤數超過4萬的網紅吳老師教學部落格,也在其Youtube影片中提到,JAVA證照考題解答分享(Android證照的跳板) http://terry55wu.blogspot.tw/2014/01/javaandroid.html 課程大綱: 1.認識 AWT類別 2.認識並學習如何建立視窗物件 3.學習如何管理與配置版面 4.事件處理:1.認識 Java的委派...
c# 字 串 轉 物件 在 Taipei Ethereum Meetup Facebook 的最佳貼文
📜 [專欄新文章] 類 Python 的合約語言 Vyper 開發入門:與 Solidity 差異、用 Truffle 部署、ERC20 賣幣合約實做
✍️ 田少谷 Shao
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
有鑒於個人近期關注的 Uniswap 及 Curve 皆用 Vyper 實作,索性瀏覽了官方文件並嘗試一些開發工具,希望此文能減少一些讀者初嘗 Vyper 會遇到的麻煩!
Vyper and Solidity
Outline
一. Vyper 極簡介二. 與 Solidity 語法差異三. 開發、開發環境設置 1. 語法高亮 2. 本地 Vyper compiler 安裝 3. 使用 Truffle 操作 ERC20 - 安裝 Truffle - 發幣 - 寫個簡易賣幣合約四. 已知 Remix 問題 五. 結語
一. Vyper 極簡介
Vyper 是除 Solidity 外,以太坊上的另一智能合約 (Smart contract) 語言。其語法和 Python 相近,但畢竟也是寫合約的語言,邏輯差異不大,所以若熟悉 Solidity 應該不難理解用 Vyper 寫出的合約!
Vyper 主要被設計和 Solidity 的區別是安全性及可讀性,這部分會在下一段落及後方的實作中舉例說明。
二. 與 Solidity 語法差異
Vyper 與 Solidity 的差異有許多,在本段只就個人認為感受較深的三點進行說明,其他差異只進行翻譯,有興趣的讀者可以到官方文件詳細了解:https://vyper.readthedocs.io/en/latest/index.html
1. 沒有 modifier
Solidity 常見的 onlyOwner() modifier; 由於 gist 沒有 Solidity 的語法高亮,故截圖
在 Vyper 中單純用 assert 及 assert_modifiable 來進行條件檢查,兩者差別為若要檢查函數執行後的返還值,要用後者,如下圖:
Vyper 寫法
2. 沒有 Class inheritance 繼承
繼承是物件導向程式設計 (OOP) 的核心概念,但各種繼承關係有時候確實很複雜。Vyper 沒有繼承,這無疑大幅地增加了程式可讀性及安全性,以及降低審計程式碼的難度。在此提供一個例子供不熟悉 OOP 複雜之處的讀者有個概念:
source: https://consensys.github.io/smart-contract-best-practices/recommendations/#multiple-inheritance-caution
在上例中,contract A 的 fee 值 (因繼承自 contract B 和 C,故有 fee 一值) 是 5、a 值也是 5 (因繼承自 contract Final,故有 a 一值)。原因是 A 先繼承 B 再繼承 C,因此 contract A 中的 setFee() 是使用了 contract C 的 setFee(),而 a 值是由於 C(5),這代表 contract C 的 constructor (舊版本中即 function C(),函式名稱同 contract 名稱) 被傳入的值為 5。
稍微延伸一下以上概念,將 contract A 改成:contract A is C, B。如此一來,a 值還有 fee 值都會是 3,因為這次 A 先繼承 C 再繼承 B,因此最終吃到的值是 contract B 的。
以上就是 OOP 繼承的複雜之處的簡單範例說明,應該能稍微感受到爲什麼除去繼承後會大幅提高可讀性及安全性,畢竟即使是熟悉 OOP 的人有時頭腦一混亂也會開始懷疑自己寫的程式碼繼承結構是否正確 …
3. 沒有 dynamic array 動態陣列
這應該是目前 Vyper 設計中爭議最大的部分。沒有動態陣列代表在宣告陣列時需要宣告其長度,也就是說 Solidity 中的寫法 uint[], bool[] 等等,這些是不會出現在 Vyper 的。在 Vyper 中只能出現諸如:
# Vyper 的變數宣告方式為 變數名稱: 存取範圍(變數型態(若為陣列給長度))
values: uint256[10]participants: public(address[20])
可以看到上方的 uint256 及 address 兩陣列皆需要宣告長度,不能不宣告而使其動態地配置空間。
沒有動態陣列固然可以確保執行運算的範圍、次數,但一來動態陣列真的很方便、二來在 Solidity 有此功能而 Vyper 卻沒有的情況下可能會造成麻煩,詳見此一討論串:點我。
4. 沒有 inline assembly,程式碼中不會有組合語言
5. 沒有 function overloading,函式不會因傳入的參數數目不同而結果不同
6. 沒有 operator overloading,運算符號不會有不同於預設的自定義功能
7. 沒有無限迴圈,可免於 gas limit attack
8. 十進位定點數 decimal fixed point 而非二進位 (binary) 定點數,詳見:點我
三. 開發、開發環境設置
結論先講
開發 Vyper 的最佳姿勢目前個人認為是在本地裝上 Vyper compiler、用 Truffle 部署,並在撰寫時將檔名後加上 .py 就能有 Python 的語法高亮👌
1. 語法高亮 (syntax highlighting)
有語法高亮絕對是舒服地寫程式的第一步。
Remix 有 Vyper 的語法高亮,但一來個人目前不推薦使用 Remix 來撰寫 Vyper,原因詳見下方 4. 已知 Remix 問題;二來 Remix 的語法高亮其實也沒有很清楚,因此個人推薦:在本地開發,將檔名後加上 .py 就會有 Python 的語法高亮。
2. 本地 Vyper compiler 安裝
照官方說明使用 Python 的虛擬環境 virtualenv:
source: https://vyper.readthedocs.io/en/latest/installing-vyper.html#installing-vyper
簡單兩點提醒:
如果中間那行報錯但確實已經有 Python,則可能是版本問題。依照自己電腦上的版本改成相應的即可,ex: python3.6 改成 python3
進入虛擬環境後(檔案路徑前方應有 vyper-venv 的提示),使用此指令: vyper {檔案名稱}.vy,即可編譯 .vy 檔;使用完畢後輸入 deactivate 即可退出
3. 使用 Truffle 操作 ERC20
安裝 Truffle
Truffle 雖有冗餘的 migration 但也別無他法,畢竟 Remix 目前仍不完善 :(
下載流程可以照官方文件,使用 vyper-example:
source: https://github.com/truffle-box/vyper-example-box
由於我們會接上測試網 Ropsten,因此還要下載 truffle-hdwallet-provider:
source: https://github.com/trufflesuite/truffle-hdwallet-provider
接者就可以開始使用 Vyper 寫合約了!
發幣
由於 Vyper 的官方文件中已經有許多優質範例,因此本文希望來點不一樣但大家卻又很熟悉的…以 ERC20 為例(這千篇一律的主題xD):
用 Curve 的 ERC20 程式碼為範本,發一個幣(又要發…)
寫一個簡易賣幣合約
選擇這個主題一方面畢竟 ERC20 是以太坊的最大宗應用之一,二來有興趣的讀者可以透過讀 ERC20 的程式碼來熟悉 Vyper,並在看過本文的流程後對於用 Vyper+Truffle 來操作 ERC20 有完整的概念!
好的,首先複製一份 Curve 的 ERC20 程式碼(看到就順手拿來用),並複製到 Truffle 所在路徑的 contracts 資料夾中:https://github.com/curvefi/curve-contract/blob/pool_compound/vyper/ERC20.vy
由於第一點希望著重在跑一次流程,因此不改動合約的程式碼。
將 ERC20.vy 複製到 contracts 資料夾中後,到 migrations 資料夾開啟 2_deploy_contracts.js,首先將 require() 中的參數改為 ERC20.vy 的檔名 ERC20,再來依照自己喜好決定幣的名稱、代號、小數點位數及發行總量,輸入於 deployer.deploy() 中。
接著,為了和測試網 Ropsten 互動,需要將以下程式碼寫入 truffle-config.js。
第二行的 privateKeys 是帳號的私鑰。以下實作需要兩個帳號來操作,因此請從錢包匯入兩組私鑰(並非助憶詞)。
在第 13 行中 HDWalletProvider 此函式的第三個參數代表要用第幾個帳號最為預設帳號(部署合約等),第四個函數代表總共匯入幾組帳號。而第二個參數則是需要至 Infura 申請一個 project 來得到串接 Ropsten 的連結。這兩步驟並非本文重點,因此不詳細解說步驟,Google 搜尋關鍵字應該就會找到方法!
接著,就可以輸入以下指令來將代幣發佈到 Ropsten:
truffle deploy --network ropsten
有進入虛擬環境才可以編譯 .vy 檔,若忘記就會收到如下的錯誤訊息:
記得打開虛擬環境才能編譯 .vy 檔
成功後就可以在 contract address 中看到代幣發佈的位置,加入到 Metamask 中就可以看到。本文的例子是維尼代幣 Winnie the Coin, WTC ;)
contract address 便是 ERC20 的所在
Winnie the Coin, WTC
好了,到此測試網上又多了一個測試用的垃圾廢幣。
寫個簡易賣幣合約
賣幣合約中我想要簡單有兩個功能就好:付錢買幣 、結束銷售,以下就是程式碼。買幣的部分就不寫太詳細,固定價格為 0.01 Ether 可以買 500 代幣。
簡單說明幾點:
Solidity 的 constructor() 在 Vyper 中為 Python 風的 __init__():
函式的屬性(public, private, payable 等等)放在函式上方,與 Python 的修飾器位置相同
總之寫法跟 Python 很像,次方也一樣是用兩次乘法代表:**
變數前加上 self 代表是當前合約的變數/全域變數,因此非常容易與函式中的變數/區域變數做區隔
由於已經在第一行匯入了 ERC20 那份合約,因此透過將地址傳入合約當參數,就可以呼叫在該地址的合約:ERC20(self.tokenAddress) 。並且,可以將部署的合約存成一個變數 erc20 較方便
寫完合約後一樣要更改 migrations 資料夾中的 2_deploy_contracts.js 如下,將代幣所在的地址作為參數輸入。
由於先前已經部署過一次了,因此要重置才能再部署第二次,輸入以下指令:
truffle deploy --reset --network ropsten
部署成功之後就要來試著買幣啦!輸入以下來進入 console:
truffle console --network ropsten
成功進入後應該會看到 truffle(ropsten)> 的字樣。接著,首先取得部署的兩合約,並查看是否有返回合約資訊:
# ERC20 及 SellToken 是先前在 2_deploy_contracts.js 中的變數名稱,代表被部署的合約
let instance1 = await ERC20.deployed()instance1 # 印出 instance1 的資訊
let instance2 = await SellToken.deployed()instance2 # 印出 instance2 的資訊
再來,為了讓 SellToken 可以賣幣,要先用 ERC20 的合約匯幣到 SellToken 的合約。因此,輸入以下指令:
instance1.transfer(instance2.address, 10000)
# 這裡數字只要設為 > 500 就可以
接著,我們要利用第二個帳號去買幣(第一個帳號為預設帳號,因此就是代幣擁有者)。將帳號的資訊存入變數 accounts 中,再指定送出交易的帳號是第二個帳號。由於我個人匯入私鑰的順序是將第一個帳號存在 truffle-config.js 的 privateKeys[0]、第二個帳號存在 privateKeys[1],因此第二個帳號的地址就會在 accounts[1] 的位置:
let accounts = await web3.eth.getAccounts()
instance2.buyToken({from: accounts[1], value: 10000000000000000})
# value 為 10^16 是因為在 SellToken 的 buyToken 函式中買一次要 0.01 Ether, 即為 10^16 wei
然後應該就會在自己的第二個帳號中看到匯入的幣了~
最後,由於合約中結束銷售就是一個自殺 selfdestruct 函式,因此可以呼叫看看,第一個帳戶錢包中的錢應該會增加,因為第二個帳戶有付款買幣;並且,可以到 Ropsten 上瀏覽,應該能看到相關提示:
中間 contract 的右上角有 Self Destruct 的樣式
四. 已知 Remix 問題
Remix 目前有兩個版本,只有新版有 Vyper 的編譯器。在此整理目前遇到的問題,如果有人也遇到可以對照一下本處,可以省去很多自我懷疑xD
不會報錯
Remix 的編譯結果有時會是錯的、和本地端編譯出來的結果不同
舉上方的 SellToken 合約為例,將其複製到 Remix 中使用左邊的 Remote Compiler 有錯,但又不報錯 q_q (ERC20 的合約有在同檔案目錄)
左方有紅色三角形,代表編譯失敗,但沒有報錯訊息可以看…
getter function 竟然要花錢
用 Solidity 寫的合約,查詢 public 變數的值應該是不用消耗 gas 的,但不知何故查詢 Vyper 寫的合約的 public 變數卻要消耗 gas,如下圖…
可以看到中下方有 22026 gas 的消耗
Local compiler 無法使用
圖中的 Local Compiler 此選項,個人雖照官方文件執行 vyper-serve 但卻失敗,因此若有讀者成功希望能留個言不吝分享!
五. 結語
Vyper 作為一個比 Solidity 更新的合約語言,在寫程式碼的方面沒什麼問題,但相關的開發工具、學習資源等都遠不及 Solidity。
Vyper 主打的兩個特色:可讀性的部分相信看完上面的讀者應該已經有些感覺;安全性…小白如作者我倒是沒有感受到顯著的不同。況且 Solidity 已經發展許久,很多錯誤的寫法、知名的安全漏洞大家應該也很熟悉了,還有 Openzeppelin 提供安全合約寫法的範本,因此有待以後高人解說安全性是否真的是 Vyper 較好。
有興趣者可以查看 Vyper 的安全報告:點我,大意是目前 Vyper 的編譯器仍有許多問題待改進! (感謝 Chih-Cheng Liang 的提供)
本文對 Vyper 的介紹及其與 Solidity 的差異只講了個大概,欲知更詳細的介紹還是要麻煩讀者前往官方文件了:https://vyper.readthedocs.io/en/latest/index.html
最後,如果本文有任何錯誤,請不吝提出,我會盡快做修正;而如果我的文章有幫助到你,可以看看我的其他文章,歡迎一起交流 :)
田少谷 Shao - Medium
類 Python 的合約語言 Vyper 開發入門:與 Solidity 差異、用 Truffle 部署、ERC20 賣幣合約實做 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
c# 字 串 轉 物件 在 小吃貨的英國生活日記 Facebook 的精選貼文
#英國工作面試經驗分享
趁著新工作開工前和大家簡單分享一下這次找工作的心得。
這次找工作前前後後大概做了10間公司的interview ,但只有兩間是face to face 這樣,然後我拿了其中一間的offer。另一間其實也有很大機會拿offer但後來不太想繼續他們的流程,所以就沒下文了。
有些是我自己投的,有些是agent/hunter幫我找的,一般來說,如果沒有工作經驗,很難吸引到hunter,所以這次的經驗跟我剛畢業的時候很不一樣,這次一大堆hunter打來也很煩。
一般來說會有phone interview 和 on-site interview,有的會有一個phone interview + 兩個 on-site interview
on-site就是去他們公司面試這樣。然後工程師類型,一般phone interview可能會是technical的,例如會用Google Doc或者他們公司自己的系統,可以雙方一起coding的。
像Javascript會有codePen之類的,然後可能Skype也是Group一起,就對方可能有兩三個人跟你一起寫code然後同時也skype,這個我覺得壓力很大,尤其你寫的時候別人都看的到。這個是Oxfordnanopore的面試,也是我第一次遇到這樣的面試,面試的亂七八糟的,但其實我不知道結果如何,因為這個是agent幫我找的(跟我後來拿到offer的agent同一個,所以即使有下文也是他幫我回絕,所以我不太清楚feedback。
分析一下表現得很爛的原因,有一點大概是因為沒什麼這樣的經驗,以及我從來沒用過CodePen,然後原本一個小時的面試拖到兩個小時(所以大家時間最好都抓比較長一點),而且又是三個人,覺得壓力很大。雖然問的問題並不是很難,但當下腦但就是一片空白......寫出了第一題以後,他們稍微改了題目,讓我又很混亂,然後他們決定要跳到第三題,其實我當下已經覺得很痛苦想要快點結束......然後我忘記第三題我解的怎麼樣了,反正那些題目大概就是Google JS interview會被問的題目。然後又問了我CSS的東西,我CSS真的超爛的,答得很爛,他們知道我CSS很少用到,因為我們都用Angular Material ......(寫到這裡不知道有多少人看得懂我在寫什麼了.....) 反正題目結束以後,他們就問我有沒有什麼問題要問他們,然後他們還問我今天的感想如何,覺得自己表現的怎麼樣,我說我覺得自己表現得很爛,當下肚子非常的餓,快餓昏了(因為這個面試前還做了另一個面試,也是寫題目的),讓人覺得很想哭= =想要快點結束,後來終於亂聊了一下結束這樣。回想起來這個大概是我最痛苦的一次面試。
這個面試的前一個面試,也是要雙向互動,但不是雙方一起寫一些code,是登入他們公司的系統,然後有點像記事本那樣,他可以打一些東西我看的到,也是做題目,大概是寫一個函式,可以給一串數字,找出當中的偶數。這個跟我第一個電話面試是一樣的題目,只是我第一次是寫C#,所以這個表現得還可以,然後問到CSS也是慘死,但他說他知道我不太會寫CSS。反正這個面試是面試的還OK,比較奇怪的是,這樣的面試,卻是用電話溝通,然後登入電腦系統,並不是用Skype,所以電話可能要開擴音,不然也無法打字.....這個公司也是跟我新公司一樣的agent,所以我也不知道feedback如何,就是沒麼下文這樣。
第一個電話面試,就是我說的一樣的方式,只是他們是用Google Doc.,然後也是問了那個找偶數的,再來就是給我看一串code問我會印出什麼這樣,然後如果把Class改成Struct會印出什麼。我自己覺得這個面試還可以,但之後HR說什麼不能幫Junior工程師做簽證,他們目前只能幫Senior的做.....讓我很無言,因為我一開始就寫在履歷上面我需要簽證。
然後其他的面試通常是Phone interviw就是大致上問一些關於我的事情,例如我目前的工作內容,我在Team的角色,然後所使用的工具技能那些,接著就是會給回家作業,然後可能要在限定的時間做完這樣。過了的話他們通常會叫你去公司跟他們談談,問問你怎麼做的,然後我現在的公司他們有要我Improve code,雖然我自己覺得面試的有點爛,而且他們問我一些JS的東西當時回答是錯的答案,他們也沒糾正我。反正還是拿到offer就對了,而且我滿喜歡他們公司的,就馬上答應。
除了上述幾個以外,也有遇過直接給Technical 線上做題的,就是例如可能一個半小時內要做完50題前端的題目,然後可能有單選或多選,問的就是也是Google可以找到的題目,但就是閱讀的要快,然後要Google也要快,這個覺得多練習就可以了。
有的Phone Interview就是直接一直瘋狂問你各種技術性的問題,例如:
1.什麼是物件導向
2.什麼是多型
3.什麼是RestfulAPI
4.為什麼要寫automation test, 好處是什麼
5.什麼是Database normalisation
6.git commit 和 git push的差異
7.如果瀏覽器沒辦法支援JS可能會發生什麼問題
8.跨瀏覽器的重要性
9.什麼是工廠模式
就是類似這些,然後問了大概2-30題左右,超多的其實我已經忘記大概了,順序也忘了,phone interview之後要我寫回家作業,反正後來因為我已經拿到offer就回絕這間公司了,沒有繼續。
通常phone interview又寫完作業,現場面試可能會是白板題。
我覺得agent的好處是,你不用一直浪費時間去回email或者去follow up,然後需要談薪水的時候也可以讓他們去幫你談。
如果想要引起agent的注意可以到各大求職網站一直撒CV就是了,但通常Agent都不接受需要簽證的人,所以這個比較麻煩,我算是滿幸運的遇到我的agent,有一些agent還是會願意幫忙找可以做簽證的公司或者願意幫你跟公司談就是了。
個人覺得phone interview一般的問題可以自己在家裡模擬練習,然後講電話的時候記得發音要清楚,建議是準備耳機,如果不是需要coding的話,需要也可以用無線耳機之類的吧!
然後記得要注意禮貌,跟agent說話也要注意禮貌,請、謝謝、對不起,大概就是英國的傳統,一直講就對了,講完還可以適時地稱讚對方。
技術類的onsite interview通常應該也是類似白板題這樣,自己在家裡也可以練習,或者有要你寫回家作業的話就會討論回家作業相關的。回家作業通常是,前端就是做一個SPA(因為現在比較多是走SPA)然後後端就是要你寫一個API讓人家可以call 你,也有就是要你寫一個SPA可以call後端的RESTAPI,有限時間的話最好就快速完成,沒有限的話就把握時間把 code寫得漂亮一點。我新公司當時是叫我用Canvas做一個動畫,這個比較少見,大概是因為他們知道我原本是寫Angular可是他們公司用Vue.JS所以覺得那就考純JS......
新公司面試的一個關鍵我覺得是CEO跟Head of private market喜歡我,因為他們說公司文化很重要,Right experience doesn't means right person. 當時我也很喜歡他們給我的感覺,面試的時候工程師們也都很好,要走的時候CEO還帶我參觀公司環境。雖然Glassdoor上面有很多人批評CEO太controlling,但我覺得實際上還是要看相處起來的狀況,當然我還沒上工我也不清楚啦!面試的時候我滿喜歡他的。
總之這次的面試大概都是技術的,跟我原本剛畢業的時候差很多,但是我還是覺得每一間公司很重視自己公司的文化,所以找到對的公司也滿重要的,然後一開始其實我看公司簡介的時候覺得對他們沒什麼興趣,可是談完以後覺得好像可以試試看,然後去他們公司的時候感覺非常好。如果有任何面試機會的話,都可以去試試看,不然當作練習也好。
希望這篇對大家有小小的幫助......雖然說如果你不是工程師的話可能看不太懂QQ
#人生就是峰迴路轉
c# 字 串 轉 物件 在 吳老師教學部落格 Youtube 的最佳解答
JAVA證照考題解答分享(Android證照的跳板)
http://terry55wu.blogspot.tw/2014/01/javaandroid.html
課程大綱:
1.認識 AWT類別
2.認識並學習如何建立視窗物件
3.學習如何管理與配置版面
4.事件處理:1.認識 Java的委派事件模式。2.認識並學習使用各種事件處理類別。3.學習各種物件的事件處理 。
之後:
1.分享最新的JAVA DOCS資訊與中文化版本,
並設定ECLIPSE直接讀取JAVA說明檔的設定方法。
2.利用實例綜合練習變數宣告、資料型別、運算子、
流程控制的IF...ELSE與各種迴圈方法的應用。
3.說明陣列與多維陣列的使用與實例。
漸漸更深入JAVA語法的核心,有些同學似乎已經吃不消,
但有些同學可能以前學過,所以一下子就解出來了,
也很大方的分享出他的解法,
不過這樣有時反而讓一些沒學過JAVA的同學備感壓力。
因為老師以為大家都會了,所以就加速往前,害一些同學在後面趕的很辛苦,
腦筋已經被迴圈給轉的頭昏,還沒弄懂題目,又要接下一題,
所以真有點兩難,好在助教的提醒,有稍放慢一點進度,
若有程度較好的同學,請些自行預息後面的課程,
或是先準備TQC JAVA的學術科考題好了,再不然好心一點,
充當一下老師的分身,幫忙同學一下,感謝!
101模擬樂透彩
102系統日期、時間顯示
103亂數排序器
104河洛之數
105陣列行列轉換
106數值過濾器
107求平均值
108九九乘法表
109面積與體積計算
110單字測驗
202利息計算
204期末考分數計算
206四則運算
208三角形邊長判斷
210字元搜尋器
302字體設定選擇器
304簡易繪圖板
306滑鼠感應視窗
308藝人音樂評等
310年齡計算
相關JAVA教學:
發表時間 文章標題
2015-06-22 JAVA網路程式設計第1天上課分享(HTML 5與JavaScript)
2015-06-21 艾鍗JAVA物件導向程式設計2(流程控制)
2015-06-21 JAVA程式設計第2次上課(環境安裝與變數與Math類別)
2015-06-20 從JAVA入門到智慧型手機設計第2次上課
2015-06-20 從JAVA入門到智慧型手機設計第1次上課
2015-01-16 如何在JAVA顯示河洛之數結果
2015-01-16 如何在JAVA顯示系統時間並格式化
2015-01-16 JAVA物件導向設計第3堂課:JSP與APP跳板
2015-01-16 JAVA物件導向設計第2堂課:JSP與APP跳板
2015-01-16 JAVA物件導向第1堂課:JSP與APP跳板
2014-01-20 佛光資應系JAVA證照考題解答分享(Android證照的跳板)
2013-08-19 艾鍗JAVA物件導向程式設計課程上課影音分享(2)
2013-08-02 總統府旁JAVA網路程式設計第2天上課分享
2013-08-02 總統府旁JAVA網路程式設計第1天上課分享
2013-03-15 從JAVA入門到智慧型手機設計第2次上課
2013-03-11 從JAVA入門到智慧型手機設計(1)
2012-10-27 有七星潭海浪聲的JAVA入門與證照分享
2012-09-14 JAVA程式設計第7次上課
2012-08-29 JAVA程式設計第1次上課
2012-05-31 有七星潭海浪聲的JAVA入門與證照分享1
2012-04-08 JAVA證照考題解答分享,Android證照的跳板
2012-01-25 JAVA證照考題解答分享,Android證照的跳板
2011-10-04 JAVA程式設計總整理
2010-10-30 湜憶電腦 TQC JAVA進階級先修課程之二
2010-10-30 湜憶電腦 TQC JAVA進階級先修課程
2010-05-30 最近的生活很JAVA--分享GOOGLE服務在教學上的應用
2010-05-30 文化大學推廣部JAVA程式設計第 5 次上課
2010-05-30 文化大學推廣部JAVA程式設計第 4 次上課
2010-05-30 文化大學推廣部JAVA程式設計第 3 次上課
2010-05-30 文化大學推廣部JAVA程式設計第 2 次上課
2010-05-30 程式語言排行榜,C語言居冠,JAVA次之
2010-05-30 最近的生活很JAVA--分享GOOGLE服務在教學上的應用
2010-05-22 JAVA程式設計第2次上課(環境安裝與變數與Math類別)
2009-08-27 TQC JavaScipt 實用級線上影音
2009-08-24 TQC JavaScipt 線上影音教學課程 101自動瀏覽器
2009-03-12 Java、VisualBasic、Visual C++有什麼不一樣呢?
java下載,jdk,eclipse,java教學網站,java教學影片,java eclipse教學,eclipse 教學,java證照解答,AWT類別, 電腦證照

c# 字 串 轉 物件 在 C# 物件導向程式設計02 04字串轉換成數字- YouTube 的推薦與評價
C# 物件 導向程式設計02 04字串轉換成數字. Watch later. Share. Copy link. Info ... ... <看更多>