なんとなくEthereum入門してERC20トークンをテストネットに作成するまでやった雑メモ
ちょっと調査する機会があったので、自分メモ的な感じで残しておく。
ブロックチェーンやEthereumについての概要
堅牢なスマートコントラクト開発のためのブロックチェーン[技術]入門
- 作者: 田篭照博
- 出版社/メーカー: 技術評論社
- 発売日: 2017/10/27
- メディア: 大型本
- この商品を含むブログを見る
ざっとこの本を読んで、コマンドとか写経しながら実際にローカル環境で試してなんとなく理解した。 セキュリティ周りの事例の話とかも結構してくれて大変なんだな...というのを実感できて良かった。
ERC20トークンについてなど
ざっとインターネットで独自トークンの発行をするにはどうしたらいいんだろう?とググってたら Ethereum Advent Calendar 2017 - Qiita にたどり着いた。
とりあえず25日分をざーっと読むとみんなERC20トークン作っててなるほど〜って感じだった。
主に参考になった記事はこちら
truffleがすごい便利だった
普通にプログラミング経験者だったらこれで何も考えずにERC20トークンをつくるところまでいけそうだな〜と思った。(その後困りそうだけど)
Migrationの挙動がよくわからなかった...(T_T)
一回目のmigrateはうまくいくけど、tokenの量とか変更して二回目のmigrateするとなんかエラーになる... 理由は正直わからんかった... -resetとかすればうまくいくけど、migrateに期待してる挙動はそうじゃないので困った。(誰か知ってる人がいたら教えてください...)
./node_modules/.bin/truffle migrate --network ropsten cricket rib insane siege quote scorpion slot seven dynamic motor innocent kind Using network 'ropsten'. TypeError: Cannot read property 'call' of undefined at /xxxxxxx/node_modules/truffle/build/cli.bundled.js:176221:50 at <anonymous> at process._tickCallback (internal/process/next_tick.js:188:7)
SolidityのIDEについて
Remixが一番よさそう? Remix - Solidity IDE
安定のInteliJ IDEA pluginもある様子だけど補完とかがうまいこと効かなかった... (設定かな?) Intellij-Solidity :: JetBrains Plugin Repository
go-ethereumで適当なCLIツール作ってtransactionを呼び出す
この辺を参考にした.
コード自体はすぐにgenerateして簡単に実行できた。gasの設定をちゃんとしないと結構実行に失敗する。
GAE/Goにdeployしようとしたけど、どうやらcgoを一部利用している様子でdeployに失敗した。(残念)
github.com/ethereum/go-ethereum/crypto/secp256k1
とかだった気がする
セキュリティについてとか
必読っぽい: https://github.com/ConsenSys/smart-contract-best-practices
日本語訳がある...圧倒的感謝...!: https://github.com/sot528/smart-contract-best-practices/blob/master/README-ja.md
まとめ
なんかすごく色々な方々のお陰で参入の障壁は下がってきてるけど、セキュリティとかまともに運用してる事例がまだまだ足りてなさそう?
その辺を「やっていくぞ!」って人じゃないと本格的な参入は難しそうですね(KONAMI) という印象でした。
AnnictのAndroidアプリをKotlinでつくった
Kotlinの入門がてら作ったのですが、リリースに至るまでの流れとか利用してるライブラリとかの話しをしようかなと思います。
ざっくり以下の話しをしようと思います。
- 作ったものについて
- 開発期間について
- Kotlinについて
- 利用したライブラリなどについて
- CIについて
- タスク管理について
作ったものについて
画面はこんな感じで普通にRecylerViewでのリスト表示です。 今回は、Android Architecture ComponentsのPagingLibraryを使ってかなり楽できました。(またあとで説明します)
このアプリの自分の用途について
毎クール30作品とか全部見てると時間がいくらあっても足りないので、 視聴中アニメでモチベーションが低くなってる作品のステータスを(見てる -> 一時中断 -> 視聴中止)にちゃんと更新したかった。 というモチベーションで作りました。
どのアニメ観ようかな〜とかの用途ではなく、観てる前提で自分は何を観るきなくしているのか?や自分が次に観るべきアニメはどれなんだというのを把握して確実に消化していく用途です。
ちなみに視聴時の自分ルールはこんな感じ
- 今期で3話以上未視聴が溜まったら
一時中断
にする 一時中断
にしたものはクールの終わったときに振り返って見るかどうか?を他の人のレビューなどを参考に決める- ここで見ないを選択した場合は、
視聴中止
にする
アプリ利用の前提条件
- Annictを結構使ってるユーザー
- 大体今期やってるアニメを把握してる
- Annictのチャンネル登録をちゃんと設定している
- まとめて視聴したりせず、毎日今期アニメを消化しつづけているアニメ好き
「今期はこれだ!」みたいな1点読みとかしないで、ほぼ毎クール7割近くの作品の数話を観て徐々に観る作品を削っていく感じの人だと尚良い
開発期間について
最初に12/2くらいに開発をスタートして、最低限の機能を1日〜2日くらいで作ってちょこっとバグ直したりしてたのが12月前半。
年末までちょこちょこ触って、1/4〜1/8で一気に仕上げました。
12中旬くらいの時点でそこそこ動いてたので、わりと毎日個人的に使ってドッグフーディングできてたのは結構モチベーションにつながってよかった。 後は「やるぞ!」って気持ちと一気にやる時間があるのがやっぱり大事ですね。
Kotlinについて
Kotlinについてですが、とにかく書きやすくてコード書いてて気持ちよかったなぁ〜という感じでした。事前に以下の書籍を読んでいたので、ひとまずほとんど困らず開発できました。 ただ、もっとうまく書けたのかな〜とか思いながら書いたコードが結構あるので、今後もリファクタリングしていければと思います。
- 作者: Dmitry Jemerov,Svetlana Isakova,長澤太郎,藤原聖,山本純平,yy_yank
- 出版社/メーカー: マイナビ出版
- 発売日: 2017/10/31
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
Kotlinスタートブック -新しいAndroidプログラミング
- 作者: 長澤太郎
- 出版社/メーカー: リックテレコム
- 発売日: 2016/07/13
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
利用したライブラリなどについて
- Crashlytics: クラッシュレポートなど
- Dagger2: DI
- kotterknife: view binding
- retrofit2 + okhttp: お決まりの通信まわり
- glide: 画像まわり
- Aboutlibraries: ライセンス表示のUI生成
- Android Architecture Components
- LiveData: RoomやViewModelと合わせて利用(データの流れをいい感じに)
- ViewModel: 画面回転時とかのデータ保持をLiveDataとセット利用
- Room: SQLiteのアクセスいい感じにするやつ
- PagingLibrary: RecyclerViewの内容をLiveDataと同期させる
PagingLibraryについて
今回特に役立ったこちらについてもうちょっと説明。 とは言え、以下の図を見るのが一番早いw
画像引用元: https://developer.android.com/topic/libraries/architecture/paging.html
今回で言うとRoom経由でSQLiteのデータがそのままRecyclerViewのリストに対応している感じになってます。
例えば、新しいデータをInsertすると参照しているRecyclerViewはハンドリングするコード等書かずにPagingLibrary内で notifyItemInserted(position)
を呼び出してくれます。Deleteした場合は同様に notifyItemRemoved(position)
ですね。
つまり、SQLite側のデータをどう更新するかを意識するだけでViewにはいい感じに反映してくれるという感じで最高でした。 もちろんLiveDataなので、画面回転時などにActivityが再生成されてもちゃんとobserveするコードが再度呼び出されてクラッシュするようなことも無くかなり楽でした。
ただ、かなりレールに乗ってる感はあるのでちょっとレールを外れるようなことをしようとすると、SQLiteに変なデータを突っ込んで無理やりViewHolderの処理でハンドリングして〜みたいな感じしかできなさそうな点などある程度諦めが必要かもしれません。
が、めっちゃ開発は楽になったので今後も使っていきたいと思います!
CIについて
今回、Bitriseを初めて使いました。とにかく最高でした。 過去にWerckerやCircleCIでAndroidのbuildをしていたときに比べてやることが全然無くて、殆どがWebコンソール上で完結してとにかく最高でした。 keytoolの管理等もいつも悩まされていたのを管理してくれたりGooglePlayStoreへUploadするstepも用意されていたりなど助かりました。
CircleCIやwerckerだとたまに謎のメモリ不足?とかのbuild失敗があったのですが、それも発生しなくなった気がします。
タスク管理について
Zenhubを使ってやりました。ポイントの見積もりは結構雑だったんですが、 サクッと終わらせられる粒度にタスクを分割してたのでまあまあいい感じだった気がします。
タスクの一部を抜粋したものがこちらです。最初にばーっと10タスクつくら作って優先度決めて開発を進めていくうちにドンドンタスクを追加して、その都度優先度を変えてみたいな感じでガンガンやってました。
今後
ひとまず細かいバグ修正を優先していこうと思います。 現状AnnictのWeb側で設定する前提になっているチャンネル設定とか視聴状況の変更とかもアプリ内で出来るように〜とかも気が向いたらやるかもしれません。
バグ報告とかお気軽にお待ちしておりますので〜何卒お手柔らかに〜
2017年振り返り(技術編)
2018年を振り返るとき用にメモ書きを残すことにした。
Go
- 大体goaを使っていた
- swagger生成やController周りのコード生成が便利すぎ
- GAE/Goでやるときはechoとかを使ってた
- goaでもいいんだけど一人で開発してるので、別にswaggerが必要でもなかった
- なんか数行書いたらシュッと動くのは個人開発では大事
- alfred-esa-workflowとかを作った(ここでalfredのworkflowの作り方を覚えた -> けど忘れた...)
- esaのAlfred WorkflowをGoで作りました - きょこみのーと
- 最近すごい便利なコマンド追加したのでREADMEとか整理したらブログ書く予定...
- blogやqiitaに投稿したのは以下3つくらい
- 発表・LT
- goa勉強会 in 六本木一丁目でLTしてきましたので内容の補足など - きょこみのーと
- 仕事優先してたのと、開発中になんかこれやりました!って発表するのなんか違和感あるのであまりやれなかった
- 2018年はどうなるやら...
インフラまわり
- 仕事はAWS使ってたので、この一年大体普通のWebアプリケーション作る分には、1から運用までやれる気がする
- ただ、ecsとか自分が使い慣れてるものを使うに限る...
- GCPはほとんど触ってない
- FirebaseAuthは仕事で使ってたので結構ハマりどころとかわかる
- Twitterの認証がなんか結構地雷なので辛かった
- メールのtemplateとかも痒いところに手がとどかない感じだった
- 昔に作ったProjectのメールtemplateを日本語に変更できないとかあったな
- export機能がないので別のサービスに移行するのが困難
- FirebaseAuthで痛い目にあったので、Auth0を使うようにした
- 色々なProviderに対応してて結構いい感じだった
- そこまで悪い点はないけど、tokyoリージョンないのでオーストラリアにしてたというくらい?
- 将来の規模感とかちゃんと考えて、auth0使うのはありかも
- 認証時のCallbackをjavascriptでいじったりできる機能があったのは感動した
- terraformは、前半は結構触ってた
Android
- 仕事でiOSアプリをちょっとつくっていた時期があって、Androidもやるかも?と思って復習してた
- 個人アプリをkotlinで書き直したり
- クリーンアーキテクチャ推しだったんだけど、最近はAndroid Architecture Componentsで書いてる
- やっぱAndroid開発は楽しいな〜というのを思い出したり
- 最初の会社辞めたときにAndroid開発がしたいので!って言ってたなというのを思い出した
- 次の会社はGoが書きたいので!って言って辞めたきもする( ^ω^)
- Kotlinが結構いい感じなので2018年もやっていきたい
Unity
- 前半は結構触ってた
- 2Dで放置ゲーをクライアントを作ってた(またエターなった)
- VR周りの開発は正直数学の知識が足りなくてしんどかった
- 普通にuGUIとかでUI組んでC#でAPI叩くコード書いて〜みたいなのは普通に出来るレベルにはなった
- とはいえ2Dの開発ばっかりしててもと思って、3DのSRPGを作ってたいた時期もあった(6〜7月)
- またエターナってしまったようだな(やる気はあるんです...!)
- 今年は触る機会あるかな〜?わからん...
iOS
- やるぞやるぞ!!って思ってたらやることなく終わった
- 縁が無い
Kotlin
- 12月くらいからServerSideKotlin書き始めた
- とりあえずSpringBootで入門中(まあなんでもいい)
- herokuでもいいんだけどGAEが好きなのでGAE/Kotlinで動かしながら色々触ってるレベル
- なんかよくわかってないけど、GAE/Kotlinやってる人がググってもあまり情報でてこないので適当にblogに書いていくつもり
- HelloWorldまでして終わってる人は沢山みた
個人タスク管理
- Trello -> Asana -> Zenhubという激しい入れわかりだった
- 一旦zenhubで落ち着いている
- 欠点をあげるとprivateのtaskを管理しているので、Githubの草が無駄に増えてしまう点(githubとシームレスにという利点でもあるのだが)
- 個人の生産性をバーンダウンチャートで可視化できるのは結構良い
- ちなみに先月はこんな感じ
- iceboxに1ヶ月以上先にやりそうなタスクをいれる、backlogに今月やる予定のものを雰囲気でポイント見積もりしていれる
- 読書とか個人開発とか
- 読書はぶ厚めの本の場合(1日で読めないもの)は章単位でタスクに分割したりしてる(こんな感じ)
- 〜を買うみたいな買い物系とか一瞬終わる系はtodoistで管理している(個人生産性という観点でいれるようにしている)
- boradの機能とepicという概念が今のところ重要
- githubの上に乗っかってるのデータの持ち方やもっさりしてるところはデメリットではある
- 最強のタスク管理ツールは未だに探してる...
最強のメモ帳
2017年を振り返る
今年もTwitterを遡って振り返ってる。そのため、いろいろなイベントを取りこぼしてるはず。
1月〜5月
- ひたすらcluster.のロンチに向けて仕事してた気がする
- 5月にロンチしたが、初回のイベント人多すぎて爆死した panora.tokyo
6〜7月
- SRPGをUnityで開発してた
ようやくターン制の実装が始まった pic.twitter.com/IoQi1uwesr
— きょこみ (@k_yokomi) 2017年7月16日
8月
- 1月からFGOずっとやってた(今もやってる)
イチカバチカレイシフト pic.twitter.com/Z5FPR7hxzC
— きょこみ (@k_yokomi) 2017年8月2日そこに気がついてしまったか。。。マシュエモン... pic.twitter.com/HHE6ocG1kP
— きょこみ (@k_yokomi) 2017年8月3日 - 帰省したときに、ゆゆゆの聖地巡礼した
ゆゆゆ聖地巡礼すんぞ #yuyuyu (@ 大正橋プラザ in 観音寺市, 香川県) https://t.co/7jIKWbpwPf
— きょこみ (@k_yokomi) 2017年8月17日にぼっしーが鍛錬してたっぽい浜辺 pic.twitter.com/QwLEepcsoo
— きょこみ (@k_yokomi) 2017年8月17日
9月
- 今年も無事に?国士無双を上がったみたいです
本日の進捗 pic.twitter.com/ARKmtonLlv
— きょこみ (@k_yokomi) 2017年9月17日
10月〜11月
- 半分仕事でマチアソビに行った(初めて声優を肉眼で観て、声をリアルで聴けた)
ノッブ pic.twitter.com/3he8o6Blh4
— きょこみ (@k_yokomi) 2017年10月7日 - ひたすら会社でポーカーしていた(ポーカー部として社外の人を呼んだり)※9月からっぽい kyokomi.hatenablog.com
- k02のメンバーで数年ぶりにISUCONに出たが予選で敗退
ダイナミック準備中https://t.co/sfROQeaCoh
— きょこみ (@k_yokomi) 2017年10月21日
12月
- k02忘年会(8年くらいの付き合いとなる2人と今年も納めた)
k02は不滅 pic.twitter.com/FQYYunmZFE
— きょこみ (@k_yokomi) 2017年12月27日
アニメ
- 劇場版なのはさんを観た:
- 観てる時にあれ、これ収集つくのか?とか思ってたら2部構成だったときの顔してた
- 劇場版プリヤを観た:
- 思ってた以上にプリズマシロウだったけど良かった
- 劇場版Fate/stay night[Heaven's Feel]を観た:
- ひたすら最高だった。原作またプレイしたくなったけど我慢する
ゲーム(クリアしたもののみ)
- 四女神オンライン CYBER DIMENSION NEPTUNE
- ディスガイア5
- ランス01
最初にカンストしたのは、ユニちゃんでした。
— きょこみ (@k_yokomi) 2017年2月18日
#PS4share https://t.co/ZJ3IDG2fM9 pic.twitter.com/yACXz1rCPi
まとめ
- 毎年、国士無双を和了してる気がするので来年も実績解除するぞ
- 個人Webサービスは結局作れなかった...個人開発のゲームもロンチできなかった...
- Goは結構相変わらず書いてた
- ドメイン知識以外のところで迷わなくなって開発速度Upを感じた
- Kotlinを一応覚えた。書いてて結構気持ち良いので来年もやっていく
- 仕事とのバランスをうまく保ててるようでバランス悪かったような気がした(メリハリがイマイチだったような?)
- 仕事で必要なスキルや知識が技術面よりも組織とか開発体制みたいなところに寄ってる気がしてなんかモヤモヤ
- 技術のステ振りとか何やっていくかとか今後何やりたいのかとかちゃんと考えていかないとな〜と思った
毎週テキサス・ホールデムをやってエンジニア力を鍛える弊社の紹介
これはCluster,Inc. Advent Calendar 2017の第10日目の記事です。
弊社の会社紹介しようかなと思います。 弊社VRの会社なんですが、社内では毎週テキサス・ホールデムのポーカーをやっています。(全然VR関係ないです 😇)
IVSのピッチコンテストLaunch Padというイベントで優勝して 本当に叶うAmazonウィッシュリスト というのがAmazonさんより贈呈されて、僕がポーカーやりたいなーと思ってポーカーテーブルをいれたらめっちゃ社内で流行って大満足という感じです 😄
他にもボドゲがいっぱい
IVS LaunchPad優勝賞品の「本当に叶うAmazonウィッシュリスト」を使ってAmazonさんに願いを叶えていただきました。弊社エンジニア陣のボドゲ愛が色濃く反映された結果がこちらです。 pic.twitter.com/iqzfdDLFEc
— Tsukasa (@tsukapon127) 2017年8月28日
これがIVSのイベントの記事です
テキサス・ホールデムとは?
テキサス・ホールデム(Texas hold 'em)はポーカーの一種。各プレイヤーごとに配られる2枚の手札と、コミュニティ・カードと呼ばれる全プレイヤー共通のカード(最大5枚)を組み合わせてプレーする。アメリカ合衆国のカジノにおいては最もポピュラーなゲームのひとつである。通常は2人から10人で行われる。
社内の様子など
- 大体週1で開催されてる(毎週木曜の20:00くらいから23:00くらいまでやってる)
- 前職でお世話になった@axrossさんが外部講師(?)として時々きてくれる(結構頻度高)
- 社外の人も口コミというか、社員の友人的な感じで参加して結構ワイワイやってる
- ポーカーは論理や確率に基づいたプレイが大事で、ポーカーが上手い人はエンジニアとしての仕事の進め方とか判断力を鍛えられている気がする(そんな気がする)
- 主に上達目的でリングゲームをやっているがたまに気分転換にトーナメントをやったりしてる
- ポーカー道あたりで用語を抑えたあとにフィル・ゴードン本(緑)を買って読むメンバーが結構多い(そろそろ会社の本棚に置いてもいいのでは感)あとはひたすら遊んでる
- 社員13人中9人くらいポーカーやっててVRの会社のはずなんだけど、ポーカーの会社みたいになってる現状
フィル・ゴードンのポーカー攻略法 入門編 カジノブックシリーズ
- 作者: フィル・ゴードン
- 出版社/メーカー: パンローリング株式会社
- 発売日: 2013/03/17
- メディア: Kindle版
- この商品を含むブログを見る
弊社でポーカーで遊びたーいという方がいたら気軽にお声がけください!
現場で役立つシステム設計の原則を読んだ
ざっくり説明すると、DDDの文脈にあるドメインモデルやドメインオブジェクトとかを意識してプログラミングとかやっていきましょうという感じ。
エリック・エヴァンスのDDD本は概念的な話やユビキタス言語とかをちゃんと定義してドメインモデルを作っていってチーム全員でやっていき!って感じで、 なんか手っ取り早くいい感じのアーキテクチャとかプログラミングでパワーアップして、いい感じのプロダクトを作りたい!!!! って人には難しい内容となっていたと思います。
(DDD本、自分はとてもいい本だと思ってますので、あとで読むのはおすすめします)
現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法
- 作者: 増田亨
- 出版社/メーカー: 技術評論社
- 発売日: 2017/07/05
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
本書はDDD本と違って、プログラミングからのアプローチでDDDの一部を徐々に学んでいく感じがしました。
他にもオブジェクト指向やWebAPI設計やDB設計やリファクタリングなど、システム開発で必要となる基本的な知識を様々な良書から引用して、実際に開発するときに役立つ形でまとまっていました。
正直、 数年前に読みたかった... という一冊です。(引用元の本はほとんど読んでいたので)
システム開発する前にたくさん読む本がある〜という人向けに一冊である程度必要な知識を得ることができてとても良いと感じました。 理解できなかったところやもうちょっと深掘りしたいと思ったものは、書籍に引用元の本がリンクされているのでそれを辿っていくと良さそうです。
いきなりDDDとか言われても... みたいな人にも優しい内容になっていて、とりあえずこの本の内容を理解して開発していればいずれ「DDDやるぞ!」ってなったときに割りとスムーズにやっていけそうだなと思いました。
goa勉強会 in 六本木一丁目でLTしてきましたので内容の補足など
LTしてきました。色々学びあって楽しかったです。
会場提供のistyleさんありがとうございました。
少しだけ補足説明とexampleコードを書いたので紹介しようと思います。
LTした資料
注意点
- goとgoaについてすでにある程度理解がある人向けです
- goaのversionは、v1.2.0の前提で話しています
go generate使ってコード生成して開発する流れについて
–forceをつけることで毎回mainのgenerateは作り直してます。
//go:generate goagen -o gen main --force -d github.com/kyokomi/example_goa_api/_design //go:generate goagen -o gen app -d github.com/kyokomi/example_goa_api/_design //go:generate goagen -o gen swagger -d github.com/kyokomi/example_goa_api/_design
_design下を変更したときの作業手順は以下のような感じになります。
- _design下を編集する
- ルートディレクトリでgo generateする
- 生成された
gen/main.go
から追加したリソースのMountのコードをルートディレクトリのmain.go
にコピペする gen/
下に生成されたリソースのControllerをapplication/controllers
下にコピーしてimport等を直す(リソース追加ではなく編集の場合は、必要なMethodだけコピペする)
swaggerの配布について
werckerのworkflowの設定はこんな感じです。
build
のworkflowはexampleのリポジトリをご覧ください(https://github.com/kyokomi/example_goa_api/blob/master/wercker.yml)。 build
のworkflowが終わったあとに design/*
のブランチ名だったら put-swagger
のworkflowが実行される感じになってます。
put-swagger: box: golang:1.8 push-to-ecr: steps: - script: name: set timezone and deploy tag code: | export VERSION=`cat $WERCKER_ROOT/VERSION` echo $VERSION - edgecaseadmin/install-aws-cli: key: $AWS_ACCESS_KEY_ID secret: $AWS_SECRET_ACCESS_KEY region: $AWS_REGION // s3にswagger.jsonをコピーする - script: name: s3 put swagger code: | aws s3 cp $WERCKER_ROOT/gen/swagger/ s3://swager.example.dev/$WERCKER_GIT_REPOSITORY/$VERSION/ --recursive // s3に配置したswaggerのjsonをurlに指定したswagger-uiのリンクをpullRequestコメントする - script: name: swagger github comment code: | go get github.com/kyokomi/gh-rice gh-rice \ -t "$GITHUB_TOKEN" \ -o "$WERCKER_GIT_OWNER" \ -r "$WERCKER_GIT_REPOSITORY" \ -b "$WERCKER_GIT_BRANCH" \ -c "http://swagger.example.dev/?url=http://swagger.example.dev/$WERCKER_GIT_REPOSITORY/$VERSION/swagger.json"
※s3のパスとかは適当です
exampleコード
ヘルスチェックのAPIくらいしか書いてないのであれですが、参考になればと。