たにしきんぐダム

プログラミングやったりゲームしてます

ターナー・南禅寺・ブルーボトルコーヒー

今日は午後お仕事をお休みさせてもらって、京都市文化博物館で催されていたターナー展へ行き、その後南禅寺ブルーボトルコーヒーに行ってきた。

ターナー

https://turner2018.com/turner2018.com

すごく好きで画集をよく見ていたのだけれど、改めて印刷と本物の違いを感じた。質感の違いとか、作品に合った額に入ってるかでこんなにも違うものなんだな...。雲や蒸気や海景や遠方の景色の色使いがが印象的で好きだったのだけれど、建物を含んだ風景のエッチングや詩集の挿絵も良くて惚れ直した。

4月24日からは東京でも展示されるようなので是非行ってくれ!

南禅寺

その後、以前から気になりつつも18時に閉店のためなかなか行けてなかったブルーボトルコーヒーに行くために、烏丸御池駅から東西線に乗り蹴上駅まで。雲一つない快晴だったので山がよく見えてはしゃいでいた。

南禅寺というよりは、南禅寺の周辺の木々が生い茂り木漏れ日が差し込む整備された道が好き。社会人になって平日の昼間に出歩くことがなくなって忘れていたけれど、こういう景色が街のすぐ近くに同居しているから京都は好きなのだよなと思い出した。

平日昼間でも賑わっていた

ブルーボトルコーヒー

ついに京都に出来た!まさかの南禅寺前!しかも18:00閉店ということでなかなか行けずにいたブルーボトルコーヒー京都。コーヒーのお味はいわずもがな、店構えが素敵。

カフェのある建物が奥側にと、道路側に豆などが売られている建物、そしてその間に中庭があり、自由にコーヒーを楽しめる。また行こう。

京都に住んでいると家から電車で3駅程度でこういった景色に会いにいけるので本当にお得、次は自転車でどこかに出かけよう。

ScalaMatsuri 2018 / OSS Hackathon に参加しました

ScalaMatsuri 2018|日本最大級の Scala のカンファレンス

2018年3月16日(金)の Scala OSS ハッカソン / 2018年3月17日~18日の Scalamatsuri2018 に参加しました。楽しかった!

OSS ハッカソン

blog.scalamatsuri.org

ソイヤッて申し込んで良かった。scalikejdbc/scalikejdbcskinny-framework/skinny-framework のプロジェクトへ参加しました。

最終的にハッカソンで取り組んだPRはこれらのPR

@seratchさんにいろいろアドバイスや現状のコードの経緯を聞きつつも、後者はハッカソン時間中にPRを出すに至らず...後日javadocを読み漁って何とかPRを出してマージしていただけました!ハッカソンに参加したからこそ貢献へのとっかかりが掴めたし、シュッとPRを出せました。参加してよかった。 @seratchさんも運営の皆様も本当にありがとうございました!

これからもやっていくぞ

Day1

会場付近の 東京お台場 大江戸温泉物語 | 【公式】大江戸温泉物語グループ|癒しの温泉宿・旅館 に宿泊していました。早めに目が覚めてしまったので、お台場のそこらへんのカフェーで時間をつぶそうと思ったのだけれど休日朝のお台場ほんとに何もないな!!!コンビニでパンを買って海を眺めたりしてた。

LEGACY CODE FROM DAY ONE / @kubukoz さん

https://kubukoz.github.io/legacy-day1/#/

ソフトウェア開発プロジェクト進行におけるアンチパターンのお話

  • コードレビューはしない!
  • コードレビューは時間の無駄。なぜなら俺のコードはいつでも完璧だから
  • nitpickなレビューに一番こだわる
  • 統一的なルールに従わないコードフォーマットの推奨や、高度な技術を取り入れない
  • 早すぎる最適化や、早すぎるモジュール化...

などなどのアンチパターンを面白く話してくださいました。他にもプロジェクト進行におけるアンチパターンやソフトウェアメンテナンスにおけるアンチパターンなどなど、資料面白い。

sbt 1 / @eed3si9n さん

まず Lamport, Leslie. "Time, clocks, and the ordering of events in a distributed system." Communications of the ACM 21.7 (1978): 558-565 を引用してそもそも concurrent の定義を説明して、sbt の DSL ではどのように concurrent な処理を(直感的に)記述できるかということを説明していただいた。非常に分かりやすかった。

そして、sbt1 での 統一的スラッシュ構文や、sbt server による LSP サポート http://eed3si9n.com/ja/sbt-1-1-0-RC1-sbt-server の紹介。scalaで乱立するLSP実装は各所が共同してやっていくワーキンググループができたので、お互い歩み寄っていっているという話を聞いた。


この日は午後から用事があったため、ここで会場を後にした。懇親会に参加できなかったの残念...!

DAY2

朝ごはんです。コーヒーも美味しかった...

JDKのリリースサイクルの変更がScalaにどう影響するか聞きたい

きしださんxuwei-k さんが中心になってお話していただいた。

このあたりのお話?

java 9,10 は短期サポート(半年) Oracle JDK に関しては 11 が 3年のLTS。なので、9,10に関しては手元できちんと動作することをテストしておきつつ、本番環境のバージョンアップはドーンと11まで上げるのが省エネなのではという話を聞いた。 しかし OpenJDK の 11 が LTS という話は特に聞かない気がする。Oracle氏〜

JVM Webアプリケーション メトリクス モニタリング

  • メトリクス取得
  • メトリクスの形式は
    • key value形式 -> (jmx や dropwizard) もう古いぜ
    • key+labels value形式
  • 最低限見てほしいもの
    • heap usage
    • gc lifecycle
    • thread pool
    • connection pool
    • アプリケーション固有のカスタムメトリクス
    • cpu / リクエスト数 / レスポンスタイム / ジョブキュー

などなど

あと3日でJava 10がリリースですが、興味ある人いますか?

出ましたね!

まだ内容追えてない...!

ノベルティ / たこ焼き

何故かたこやき配布してた。美味しかった

個人的に気に入ったノベルティの靴下と箸。珍しい! 箸は開けてみると何も書かれてないただの上等な箸だった! 株式会社ファンコミュニケーションズ さんはそれで良いのか!と思ったけれど逆に強烈に印象に残っているし、この箸使うたびに思い出している。

scala matsuri 2018 本当に楽しかったです。次回は何らかの形で貢献できると良いなと思っています。

シドニー旅行記

4年前、大学一年次の春休みに大学の制度を利用してシドニーに約3週間(2014-02-22 から 2014-03-16)短期語学留学に行ってきた。

Google Photo を整理していたら大量に写真が出てきて懐かしくなったので、記憶にあるうちに旅行記を書いておこう。当時使ってたスマホの写真の画質があまり良くなくて残念!!

留学先

オーストラリア、ニューサウスウェールズ州シドニーに位置する UNSW の留学生向け語学クラスに3週間留学した。

www.unsw.edu.au

当然たったの3週間では語学力の大幅な向上とかは無理なので異文化交流くらいな気持ち。大学の制度を使っていったので適当な留学エージェントを使うより安価で滞在できた。

(本来車校に通うために貯めてたお金を使って行ったので車の免許は今も持ってない。後悔はしていない)

町並み

Mascot

ホームステイ先はマスコットというシドニー空港のすぐ近く、歓声な住宅街で夜も静かだった。治安は結構良いという話だったけど日本と比べるとまあ良くないので夜はあまり一人で出歩かないようにと釘を刺された。

住宅街の道路です。初日に周囲を散歩してたときの写真、このあと知らないおじさんに宗教勧誘された。

気温・湿度ともに死ぬほど高いのと、ゴミは公道にある巨大ゴミ箱に適当に放り込んでおくみたいなシステムになってるためか道路でゴキブリを見ることが多々あった。日本のより強いし早いしでかい。

大学にはバスで通学していたのだけれど、シドニーの人々、とにかく「thank you」って言う。バス降りるときに運転手に対してもだし、カフェとかコンビニで品物を受け取るときも thank you って言っていた。これ凄く良い文化だと思うので日本に帰国してからも実践してる。

続きを読む

Bitcoin SPV Wallet を Golang で実装してみた

Golang と Blockchain 技術の勉強に、こちら の記事を参考にして Bitcoin の SPV Wallet を Golang で実装してみました。

github.com

結構雑ですが、とりあえず以下のことができます。

  • Bitcoin Address の生成
  • UTXOをかき集めて残高を計算
  • UTXOをかき集めて指定したBitcoin Addressに送金

実用には耐えませんが簡単なSPV Walletの一通りの機能は実装できたかなと思います

(そんなことなくてエラーハンドリングが雑だったりP2Pノードとしての役目を放棄してたり、取得するmerkleblockをハードコードした高さより高いblockのみ取得するようになってたりする)

参考

実装の際には主に @lotz氏のこちらの記事を参考に実装しました(ほとんど氏の実装をGolangに移植しただけw + 計算したUTXOを使って送り先と金額を指定するだけで送金できる機能)

こちらの記事では同様のWalletがHaskellで実装されており、解説がすごく丁寧で分かりやすいので、細かい解説が気になる方は是非読んでみてください!!

qiita.com

その他参考 🙏🙏

感想

Blockchain技術に興味を持ってMastering Bitcoinを読んだり簡易的なBlockchainもどきを実装してみて、全体像はなんとな~く分かってきたものの

  • Merkle Tree でトランザクションを検証するために Merkle Path を取得するってあるけど、具体的にどういう形で送られてくるんだ!?
  • スクリプトってどう表現されるんだ...
  • 「署名する」ってあるけど具体的にはどうするんじゃ

などなど細かい疑問がたくさんありました。

しかし今回SPV Walletを実装してみて少なくともSPV Walletの実装についてはしっかり理解できました。SPV Walletの細かい挙動に興味のある人は是非氏の記事を読んで自分の好きな言語で実装してみると良さそう!

Golangで簡易的ワーカー/ジョブキュー

  • goroutineの数を制限しつつ並列にジョブを実行したい
  • ジョブは定期的に投入できたい
  • ジョブが空っぽになっても終了しないで欲しい
  • SIGTERMとか送ったら実行中のジョブが完了するまで待ってから終了してほしい

というようなものが欲しくなることが最近よくある!のでメモ

参考

実装

gistbe9fac4aa02419d68c6770a85e53c936

この実装ではmainの中のforループでのみジョブをenqueueしているが、

  • 定期的に外部リソース(APIたたいたり、DBを眺めにいったり)からデータを取得してジョブをenqueueしたり
  • HTTPサーバーをたててHTTP経由でジョブをenqueueできるようにして、別のプロセスから定期的にジョブをenqueueしたり

とかいろいろできて便利〜