自分を攻略していく記録

自分がやりたいことを達成するには何をすればいいのか、その攻略していく過程をつらつらと

Ethereumのエンジニアコミュニティ Hi-EtherでLTしてきた

Hi-Etherについて

Hi-Etherは@amachinoさんが作ったEthereumのエンジニア向けのコミュニティ。

speakerdeck.com

DAICOを実装してみた(DRI代表 @syroheiさん)

f:id:ngo275:20180203113556j:plain:w500

Vitalik氏が先日提案したDAICOを実装してみたという話。DAICOについては以下の記事が分かりやすいと思う。

medium.com

Vitalik氏は構想を提案しただけで実装レベルのことには触れていなかった。千賀さんが、実際にDAICOを実装してみてわかったその問題点やそれに対する独自の解決方法についてのお話だった。

speakerdeck.com

GitHubも公開されている。

github.com

Ethereumで「今」サービスを作る(ALIS CTO @sot528さん)

f:id:ngo275:20180203113708j:plain:w500

PVベースのWebの負(フェイクニュースとか)をどうにかしたいということで始まったEthereumベースのSNS。先行事例はSteemit。ALISはすでにICOを行っており、その際にテストもめちゃくちゃ書いてずっとヒヤヒヤしていたとか。 個人的にもEthereum上でアプリケーションを開発するには現状厳しすぎると思っているが、当事者のお話だったので説得力が非常にあった。

speakerdeck.com

ICO時のコントラクトのGitHubリポジトリがこちら。

github.com

スマートコントラクトの定時実行を調べてみた(@blueplanetさん)

Ethereum上で定期実行の仕組みがない。ただ、まだメインネットには対応していないようだが、開発されているらしい。

github.com

qiita.com

これが実現したらICOに参加する時も自動化とかできそう。

DApp開発をしてみる(自分 @ngo275

Solidityでスマートコントラクトの実装をしようとすると比較的ドキュメント等参考が見つかるが、実際にそれをWeb3等で利用するとなると急に正しい(コードが動く)情報が減るという印象だった。なので、Web3でコントラクトを利用するということにフォーカスした内容でLTをした。正直、Ethereum上でアプリケーションを作り切るのは困難だと思うが、ちょっとしたものなら可能なので増えてくるといいなと思った。

speakerdeck.com

DEMOのリポジトリはこちら。

github.com

トークン運用の三要素(発行・移転・消却)(@shu_kobさん)

トークンには必須となる、焼却(Burn)について非常に丁寧に説明されていた。発行体はトークンに対して債権を保持しており、手元に返ってきたらBurnする必要があるという仕組み。

speakerdeck.com

まとめ

投資の話は一切なく技術的な話が多かった。以下にコミュニティについて書いてあるので興味がある方入ってみてください。

qiita.com

Eclair WalletでLightning Networkを試してみた

Lightning Networkをためす

BitcoinやEthereumではトランザクションの増加に伴って決済スピードや高額な手数料など様々な問題に直面している。特にVISAの決済スピードが引き合いに出されることが多い。その決済スピードや手数料の解決方法の1つとしてLightning Networkが注目されており、開発も活発に行われている。実際にLightning Netoworkを使った支払いを試してみたが、びっくりするほど早かったので(オンラインでスイカの決済体験をしたかのような)、その方法について書く。

Eclair Wallet testnetをインストールする

Eclair Wallet Testnet - Google Play の Android アプリ

AndroidアプリでBitcoinのtestnetでLight Networkを試すことができる Eclair Wallet というものがあるので、それをGoogle Playから落とす。開くと自分のアドレスが発行されるので、そのアドレスで以下のサイトを使ってBitcoinをもらう(testnetなので金銭的価値はない)。

Bitcoin testnet3 faucet

Faucet - Bitcoin TestNet sandbox

次にStarblocks(スターバックスではない)というサイトで実際に購入をしてみる。

Starblocks | Spend bitcoin with LN on TESTNET

f:id:ngo275:20180121000727p:plain

まずデポジットを先に払ってpayment channelを開く

ここでは120mBTCを先にデポジットしている。これを超える買い物はできないということになる。Lightning Networkを利用するには、このトランザクションがどうしても必要で、このトランザクションのConfirmationは待たねばならない。

f:id:ngo275:20180120234653p:plain:w400

payment channelが正しく開けたことを確認(これに少し時間がかかる)

この状態になると初めにデポジットした額以内であれば好きに高速に支払いできる。

f:id:ngo275:20180120234119p:plain:w400

オンラインストアで決済用のQRを発行する(Lightning Networkでの支払いに対応している)

Bitcoinのアドレスとは異なるので従来の方法で支払うためには利用できない。

f:id:ngo275:20180120234511p:plain

支払い確認画面が開く

f:id:ngo275:20180120234614p:plain:w400

支払いボタンをタップすると数秒足らずで支払いが完了する

f:id:ngo275:20180120234535p:plain

まとめ

めちゃくちゃ簡単にオンライン決済がそれもBitcoinを使ってできることが確認できた。実際の問題としては、受け取るためには常にオンラインにいないといけない、とかスケールした時にこのままでうまくいくのか、などあるが、非常に面白いので今後の開発に注目しておきたい。

2017年の振り返り(AnyPayで働いてみて)

この1年は色々あったので、個人的な記録をかねて残しておこうと思った。paymo というアプリの開発事情寄りになってしまったが...。

f:id:ngo275:20171231151518j:plain

1月

2016年10月にクルーズ株式会社に買収されたCandleでエンジニアとしてインターンをしていた。時間にゆとりができてきたので、新しいところでバイトでもしようかなと思っていた矢先に、河西さん にお会いして、いくつか面白そうなスタートアップを教えてもらった。Smooz というブラウザアプリを開発しているAstoolAnyPayを教えてもらった。それらにコンタクトを試みて最初に返信のあったAnyPayでバイト(インターン?)をすることにした。この時、AnyPayは社員数が10以下だったと思う。

ちょうどpaymoというアプリのプレスリリースを配信した直後に、paymo iOSの開発に関わり始めた。はじめてのRxSwift、クリーンアーキテクチャで学ぶことが多かった。paymoはもともと、外部のチームが短期間で一気に作り上げたものだったので、はじめてコードを見た時はStoryboardに多くのViewControllerが入っていたり、Domain層のファイルが異常に多かったり、とキャッチアップが大変だった。

2月

AnyPayでは、当時、オフィス常駐のpaymoのiOS/Androidエンジニアがほぼおらず(週2.5日だけとか)、リモートの業務委託にほぼ依存していた。正社員エンジニアはサーバサイドの1人しかいなかった。ガンガン実装するというよりは、コードに触れてプロジェクトや、開発スタイルに慣れる、という時期だったと思う。中旬にフルタイムのAndroidエンジニアが業務委託でジョインした。

2月末には、1年と数ヶ月お世話になったCandleを抜けた。AWS上でPHPでキュレーションメディアを運用したり、動画アプリのiOS開発をしたりと、ほぼゼロからプログラミングを学びながらいろいろやらせてもらった。

また、1年弱ほどホステルで住込みバイトをしていたが、そこも2月一杯で退去した。外人ばかりだったので英語を話せるようになれた。英語を話せるようになりたい人はかなりオススメ。下手に留学するより安いし、日本にいながらにして、なので良い。

1年くらい休学してプログラミングや英語をずっと勉強していたが、それらをやめて一気にベテランのプロに囲まれた環境に変わった月だった。

3月

メルカリのBOLD Internshipでアメリカのメリーランド州に一週間だけ行った。

diary.shuichi.tech

中旬には、AnyPayはオフィスが渋谷から六本木のミッドタウンに移動した。人も増えてきていて、paymoも話題になりはじめて会社のスピード感が凄まじかった。この立ち上げ期にフルコミットするのは楽しそうだし、中々ない機会なので正社員に興味があるという相談をCTOにした。この頃からだんだんとタスクの難易度が上がってきてハードになってきた。

この時期、会社の暗号通貨おじさんにビットコインを勧められて、1BTC買った。当時は12万円くらいだったと思う。すぐ売ってしまったのだが...。ビットコインブロックチェーンに興味を持ってこの時期から勉強し始めた。

4月

www.wantedly.com

大学院を退学してAnyPayの正社員となった。ずっとエンジニアとしてやっていきたいというわけではない、という意思を汲み取ってもらい、ビジネスマナーや電話応対の教育を受けた。初めの1ヶ月は自分のデスクに電話が置いてあって電話応対していた(エンジニアだったら嫌がる人いるかもしれないが、まあいい勉強にはなったかもしれない)。この時期からiOSの常駐の業務委託エンジニアが入って、paymoのiOS/Android開発はほとんど内製化できてきていた。

インターンから正社員になったのだが、会社側からの接し方に特に何も変化もなく、戸惑ったのを覚えている。結局聞かないと何も教えてもらえなかったので、FinTech周りの法律やお金についていろいろ本を読み漁った。

5月

このころからiOSだけではなく、AnyPay/paymoのバックエンドもやってみたいと言って、Railsプロジェクトにも触れ始めた(未だにRailsで書かれていて、マイクロサービス化が求められている...)。周りのレベルの高さと、自分との力の差とかに、いろいろ悩んだりもしたのもこの時期だった。

6月

はじめて中国に行った。訪れた地域は今年話題になっていた深セン。とても刺激的だった。

diary.shuichi.tech

paymoの機能が大幅に変わると決まって、その開発につきっきりだった。ViewControllerに書かれていた大量のロジックをPresenterに寄せながら、トップページの書き換えをして月末は大変だった。

7月

深センや上海、杭州に行って、上海にある無人コンビニや、Alipayの本社アント・フィナンシャルにも訪問した。だいぶ慣れてきて、会社の人を深センに案内もした。

正社員でiOSエンジニアが2人入り、paymo iOSドメイン層の書き方を見直したり、とクリーンアーキテクチャをしっかり学び直した。ところが、もともとpaymoを牽引していたPM兼デザイナー(それも唯一のデザイナー)の方が体調を崩して、少し休むことになり、開発体制にほころびが出始めた。偶然、その時期に新しいPMが入社してなんとか開発が回った、という状態だった。

8月

2017年の前半まではpaymoの開発は、かなり属人化していたのが、この頃に次第に分散していったと思う。会社の1つの転換点がこの時期だったように感じる。スタートアップだと、1人のカバー範囲が広くその人が休むと困る、というケースが多いと思うが、開発だけでなく全体としてバックアップ体制ができてきた。

9月

夏休みを使ってサンフランシスコに遊びに行った。AppleGoogleにも行った。

diary.shuichi.tech

paymoをやりつつ、他の事業にも関わるようになり、はじめてER図を書いた。ほぼ1人でRailsの実装をすることになった。

10月

9月にRailsで実装していた方も落ち着いてきて、ビジネス的な要件・仕様を相談しつつ改善していた。また、ReactNativeで実装されているプロジェクトに徐々に関わり始めた。

paymoは段々と開発体制が崩れてきて、スケージュールを把握している人がいない、APIとクライアントで噛み合わない、とか様々な問題がでてきた。そもそもこのスプリントで何をやるのか、という話もブレが生じやすくなった。それは、開発が完全に内製化されて、アプリエンジニア側の意見が強くなったことが原因かと思う。今まではPMが1人で決めていたので軋轢がなかったのが、次第にエンジニアがこうしたい、こうした方がつかいやすそう、という意見が活発になった。意見が活発なのは良いことだが、その収拾がつかなくなってしまっていた。

Ethereumが面白いと思いはじめて、Dappをいろいろ触ってみたり、solidityでちょっとしたスマートコントラクトも書いてみたりもした。

11月

自分が書いたコードにバグが見つかったりして対応に追われていた時期だった。とにかくお金を直に扱うプロジェクトはひたすら精神がすり減ると痛感した(Coincheckとかロールバックもあったし死ぬほど大変そう...)。そのために、アラートやログを追う仕組み作りやテストのカバレッジをしっかりしないといけないと学んだ。「おれも自分のバグで2億の損失をだしたことあるから大丈夫」とCTOに言われたのはほっとした(後日その2億は返ってきたらしい)。

12月

paymoはデザイナーがまるで足りておらず、エンジニアがやりたい機能改善をうまく形にできないというもどかしさから、チームがギスギスしているように見える時もあったが、@tsubotax さんが関わってくれてデザインスタックが解消してきた。バックログの運用も12月になってやっとしっかり行われるようになった。一年を通して、リファクタをしながら開発をしてきたつもりだったが、さすがにこのままではもう手がつけられない、という箇所もでてき始めて、大規模開発の難しさを痛感した。

全体を通して

2016年はフラフラと勉強をしていたが、2017年は急にベテランの人たちに囲まれて仕事をすることになった。それでも、色々とわがままを言って、かなり幅広くやらせてもらったと思う。開発しているだけというよりは、こうしたい、これはやめたい、とか自分の主張を聞いてもらえてよかった。

はじめてAnyPayに行った時は、みんな19時くらいには帰っていくし週末はSlackの返事もないので、あまり働かない印象を抱いたが、会社はしっかり回っているし、短距離走ではなくマラソンをしているのがわかった。技術的なこと以外に学べることが多い。遅刻が多いのはどうしても気になってしまうが...。

来年は決済業界自体がもっと進むと思うのでもっと楽しくなると思っている。

時間に対する捉え方はどう変わってきたのか

紀元前の時間に対する必要性について

f:id:ngo275:20171217141020j:plain

紀元前のエジプトや文明が栄えていた地域では、生活するために欠かせなかった川や作物について知る手立ての1つとして、大まかな時間(季節や暦)を知る必要性があった。原始的な狩猟文明の時代にはそのような必要性は強くなかったが、農耕文明に移る過程で次第にこの必要性が生まれてきたのである。紀元前4000年頃のエジプトにて、地上にまっすぐに棒を立てて、昼間の時間を細かく刻んだ日時計ができたと言われている。ただ、これは晴れた日の日中しか使えないという制約があった。そして、紀元前1550年頃には、夜用の時計として季節によって夜の長さが変わる不定時法に対応した水時計が作られた。

中世における時間に対する必要性の変化

f:id:ngo275:20171217140817j:plain

文明ができてくるにつれて、各地域・文化に適した暦や時間の測り方が生まれてきた。ところが、意外にも中世になるまで、細かく時間を知る必要性はほとんどなく、多くの人は太陽を基準に生活していた。その中世では何があったのか。中世ヨーロッパは長い争乱の時代だったのである。そして、救世主が待望されてキリスト教がヨーロッパ全土に浸透したのだ。その時に生まれた教会や修道院では数時間おきに鐘を鳴らし、祈祷や労働、読書と言った作法を守る必要があった。そんな中で、ルネッサンス期の1300年頃に、機械で自動的に鐘の時打ちが可能な世界で初めての機械式の時計が、修道院や教会の塔の上にできたと言われている。そしてこの新しい時計がヨーロッパに広がり公共時計として機能するようになっていった。

資本主義による時間に対する必要性の変化

f:id:ngo275:20171217141255j:plain

キリスト教や機械式の時計によってヨーロッパの方では時計が広がっていったが、現代のように時間に縛られていたわけではなさそうだ。現代では、決まった時間に起きて、決まった時間に会社に向かって、決まった時間に退社して、決まった時間に寝て、という生活が当たり前になっているが、それには産業革命・資本主義が大きく影響を与えている。産業革命が起こる前は、商人は作業分担をせずに1人で最初から最後までものを作ることが基本だったが、産業革命により、工程を分割し人が行う作業を分担しあうことで大量生産を可能にした。資本を持つものは、定時法をもとに組織的・計画的に時間を利用して利益追求をしていくようになったのだ。これによって、労働者は決まった時間に工場へ行く必要性が生まれ、時間に従って生活するようになった。労働者は決まった時間に電車に乗るので、電車の時刻表の整備もされたし、レストランも、およその退社時間に備えて店を開けるようになったのだ。

個人が台頭してきた現代では

f:id:ngo275:20171217141619j:plain

21世紀に入り、インターネットを始めとした技術の発達により、時間に対する捉え方が大きく変わってきつつある。たとえば、リモートワークをする人は、決まった時間に電車に乗って、決まった時間にお昼ごはんを食べる必要はない。また、個人で働く人も増えてきて、そうした人は決まった時間に寝て起きる必要性もなくなってきた。工場でも自動化が進んでおり、どうしても時間に縛られてしまうパイプライン処理から人が解放されつつある。15世紀以前のように時間に縛られる必要性が薄まりつつあるように思う。このように時代とその当時の生活における必要性を照らし合わせると見えてくることが多い。当分は今のまま大きく変わらないだろうが、いずれまた新しい必要性に応じて時間に対する考え方が変わるはずだ。