タグ

ブックマーク / takezoe.hatenablog.com (17)

  • Amazon Builder's Libraryを読んでみた - たけぞう瀕死ブログ

    昨年のre:Invent 2019で発表されたAmazon Builder's Libraryを一通り読んでみました。通勤電車で読んでいたのですが、途中で冬休みに突入してしまい少し時間がかかってしまいました。途中で日語にも対応していることに気付いたのですが、折角なので全て英語で読んでみました。 aws.amazon.com Amazonにおける大規模分散システムの開発で得られたノウハウが公開されているのですが、昨今マイクロサービスの普及もあり、Amazonのような規模でなくとも分散システムに関するノウハウが重要になりつつあります。もちろんAWSのインフラや規模感に依存する部分も多々見られるものの、大規模な分散システムを運用した上で得られる知見というのは得難いものですし、一般論として参考になる部分も多く、とても有用なコンテンツだと思います。 全体を通して共通して述べられていたのは以下のよう

    Amazon Builder's Libraryを読んでみた - たけぞう瀕死ブログ
  • Databricks社がOSS化したSpark用ストレージレイヤ「Delta Lake」について - たけぞう瀕死ブログ

    先日開催されたSpark + AI Summit 2019にあわせてDatabricks社からSpark用のストレージレイヤ「Delta Lake」のOSS化が発表されました。 databricks.com GitHubリポジトリはこちら。 github.com Delta LakeはSparkのライブラリとして実装されており、分散ストレージ上で以下のような機能を提供します。 ACIDトランザクション(テーブル単位) タイムトラベル(任意の時点の過去データを参照可能) スキーマバリデーション(スキーマ変更も可能) 実際に動かしてみる Delta Lakeの動作にはSpark 2.4.2以降が必要です。ローカルファイルシステムでも動作するのでspark-shellで動きを確認してみました。 $ bin/spark-shell --packages io.delta:delta-core_2.

    Databricks社がOSS化したSpark用ストレージレイヤ「Delta Lake」について - たけぞう瀕死ブログ
  • GoogleのMachine Learning Crash Courseをやってみた - たけぞう瀕死ブログ

    少し前にGoogleが社内教育用のコンテンツとして使用しているというMachine Learning Crash Courseが公開されていました。PredictionIOのコミッタをやっていながら機械学習はほぼ素人というのもどうかと思っていたこともあり、社内で毎日1時間ずつこの講座を進めてみることにしました。 developers.google.com 15時間で終わるということになっていますが、英語の動画やテキストの理解に時間がかかってしまい、最終的には40時間くらいかかってしまったものの、なんとか完走することができました。機械学習やディープラーニングの基礎について25のレッスンがあり、それぞれのレッスンは以下のコンテンツから構成されています。 動画による概要の解説 より詳細な内容を説明したテキスト ブラウザ上でビジュアルな実験が可能なプレイグラウンド ノートブックを使用したプログラミ

    GoogleのMachine Learning Crash Courseをやってみた - たけぞう瀕死ブログ
  • Akka HTTPでWebJarsとTwirlを使う - たけぞう瀕死ブログ

    仕事でちょっとしたツール(Webアプリ)を作るのに試しにAkka HTTPを使ってみています。Akka HTTPでJSONを使う方法については以前このブログでも紹介しましたが、 takezoe.hatenablog.com 今回はいわゆるHTMLを返すシンプルな作りの管理ツールなのでJavaScriptCSSライブラリはWebJarsで、HTMLのレンダリングはTwirlを使うようにしてみました。 WebJars ThoughtWorksのリポジトリにAkka HTTPでWebJarsを使うためのライブラリがありました。 github.com メンテが止まっているようですが、リポジトリ内のWebJarsSupportは現在のAkka HTTPでもそのまま利用できます。実装としては非常にシンプルで、webjars-locatorで取得したクラスパス内のリソースをgetFromResourc

    Akka HTTPでWebJarsとTwirlを使う - たけぞう瀕死ブログ
  • sbtとpecoでテンプレートを選択してプロジェクトを作成する - たけぞう瀕死ブログ

    sbtではsbt new playframework/play-scala-seed.g8などのようにしてgiter8テンプレートを指定してプロジェクトを作成することができます。 しかし、プロジェクトを作るたびにテンプレートのリポジトリ名を調べるのも面倒です。そこで、giter8のWikiにまとめられているgiter8テンプレートのリストからpecoでインクリメンタルサーチしてプロジェクトを作成できるようにしてみました。 function peco-sbt-new() { local TEMPLATE=`curl https://github.com/foundweekends/giter8/wiki/giter8-templates -s | grep "\.g8<" | sed -e "s/</ /g" -e "s/>/ /g" | awk '{print $3}' | peco |

    sbtとpecoでテンプレートを選択してプロジェクトを作成する - たけぞう瀕死ブログ
  • Idris + Atomによる型駆動開発入門 - たけぞう瀕死ブログ

    4月から社内でType-Driven Development with Idrisの読書会をやっています。 takezoe.hatenablog.com 最近ようやくChapter 3まで進み、実際に自分でコードを書くエクササイズなども出てきました。このではAtomを使うことが推奨されているのですが、Atom用のIdrisパッケージが非常に強力で、型駆動開発の魅力を存分に感じることができます。そこで、今回は実際にAtomでのIdrisプログラミングがどのようなものかについて紹介したいと思います。 github.com たとえば以下のようなシグネチャを持つVect(要素数を型情報に持つリスト)用のマップ関数を実装するとします。Vect n aの各要素に(a -> b)という関数を適用してVect n bを返すというものです。 my_vect_map : (a -> b) -> Vect n

    Idris + Atomによる型駆動開発入門 - たけぞう瀕死ブログ
    clavier
    clavier 2017/06/15
  • Type-Driven Development with Idrisの読書会をやっています - たけぞう瀕死ブログ

    社内で4月から週一でType-Driven Development with Idrisの読書会をやっています。 Type-Driven Development with Idris 作者: Edwin Brady出版社/メーカー: Manning Pubns Co発売日: 2017/04/07メディア: ペーパーバックこの商品を含むブログを見る 今年のScalaMatsuriで@cbirchallさんにオススメされたのがキッカケなのですが、依存型(Dependent Type)を使って変態的なことがいろいろできるという話を聞いて面白そうということで有志(いまのところ6人くらい)で集まって緩く読み進めています。 ようやく2章の中盤に差し掛かったところなのでまだ先は長そうですが、1章でIdrisの概要をウォークスルーしたのでIdrisの思想やIdrisでのプログラミングのお作法のようなものが

    Type-Driven Development with Idrisの読書会をやっています - たけぞう瀕死ブログ
    clavier
    clavier 2017/05/17
  • MozillaのスクレイピングフレームワークFathomを試してみる - たけぞう瀕死ブログ

    こちらのOSDNの記事で知ったのですが、MozillaでFathomというJavaScript用のスクレイピングフレームワークを開発しているようです。仕事でクローラーを作ったりしていたこともあり、面白そうだと思ったので軽く調べてみました。 mag.osdn.jp 以下のGitHubリポジトリで開発されています。GitHub Pagesに詳しいドキュメントもあります。 github.com OSDNの記事で触れられている開発者のErik Rose氏のブログエントリはこちら。 hacks.mozilla.org ドキュメントやErikさんのブログエントリなどをざっと眺めてみたところ、それほど複雑なものではなく、ある程度曖昧なルールとスコアリングを定義しておき、最もスコアの高い要素の選択するというのが基的なコンセプトのようです。 なにはともあれ試してみます。まずは適当なディレクトリを掘り、np

    MozillaのスクレイピングフレームワークFathomを試してみる - たけぞう瀕死ブログ
    clavier
    clavier 2017/05/04
  • 第十八回 #渋谷java でZipkinとBraveの紹介をしました - たけぞう瀕死ブログ

    最近RestyにBraveを組み込んだり、仕事でもZipkinを触っていたりするのでZipkinとBraveの概要について発表させていただきました。発表資料はこちらです。 Tracing Microservices with Zipkin from takezoe www.slideshare.net ZipkinはTwitter社が開発した分散トレーシングシステムで、特に多階層のマイクロサービスのボトルネックの解析に有用なツールです。BraveJavaベースのWebアプリケーションからZipkinサーバにトレース情報を送信するためのライブラリです。 github.com github.com Braveは前のサービスからHTTPヘッダで渡されたトレース情報をServletFilterでThreadLocalに突っ込み、それをHTTPクライアントライブラリのInterceptorで次のサ

    第十八回 #渋谷java でZipkinとBraveの紹介をしました - たけぞう瀕死ブログ
    clavier
    clavier 2017/01/29
  • リアクティブなマイクロサービスフレームワーク「Lagom」を試してみる - たけぞう瀕死ブログ

    Lagomとは? LagomはLightbend社(旧Typesafe社)がリリースした新しいマイクロサービス向けのフレームワークです。 www.lightbend.com 元々Scalaの開発元であったLightbend社が開発しているだけあり、PlayやAkka、sbtといったScalaベースの技術基盤上に構築されていますが、現時点ではJava向けのAPIのみ提供されているJava用のフレームワークとなります。*1 これまでもSpring Bootなど手軽に使えるAPIサーバ向けのWebフレームワークは存在したわけですが、Lagomは最初からリアクティブなマイクロサービスの構築を前提に設計されており、いわば「マイクロサービスネイティブ」とも呼ぶべきフレームワークになっています。 実際にLagomを使うかどうかはさておき、新しいコンセプトのフレームワークなので学ぶことも多いのではないかと

    リアクティブなマイクロサービスフレームワーク「Lagom」を試してみる - たけぞう瀕死ブログ
  • 第十四回 #渋谷java でProject Jigsawの話をしました - たけぞう瀕死ブログ

    先日弊社オフィスで開催された第十四回 #渋谷javaですが、自分はProject Jigsawについて発表させていただきました。以前、社内の勉強会でJava9の新機能について紹介したことがあったのですが、その内容からJigsaw部分を抜き出し、内容を充実させたものです。 Java9 and Project Jigsaw from takezoe www.slideshare.net スライドにもありますが、すでにJigsawを利用可能なJDK9のプレビュー版が提供されていますので興味のある方は試してみていただければと思います。 しかしJigsawってJava7→Java8→Java9と延期され続け、さらにJava9のリリースも半年延期され、いつの間にか、かれこれもう10年近く(10年前はまだSun Microsystemsという会社がこの世に存在しました)やってるんですよね…。そういう意味

    第十四回 #渋谷java でProject Jigsawの話をしました - たけぞう瀕死ブログ
  • AWS上で動作するアプリケーションをいかにローカルで開発するか? - たけぞう瀕死ブログ

    AWSでは様々な便利なサービスが提供されています。中にはRDSやElasticCacheのように既存のミドルウェアに対するマネージドサービスを提供するものもあり、これらについては既存のミドルウェアを使って開発することができますが、AWS固有のサービスについてはアプリケーションを動作させるには実際にサービスに接続する必要があり、開発環境が制限されてしまいます。 もちろんソフトウェア側で抽象化しておき、DIなどの手法を用いてモックに差し替えるという方法も考えられますが、特にストレージとして利用するサービスなどの場合はインタラクションが必要になるのでモックでは再現しづらいですし、やはり実際に動作するサービスに接続して開発やテストを行うほうが効率的です。 そこで、AWSのサービスを擬似的にローカルで再現することのできるプロダクトを集めてみました。 S3 node.jsで動作するs3-proxyが使

    AWS上で動作するアプリケーションをいかにローカルで開発するか? - たけぞう瀕死ブログ
  • ElectronなGitフロントエンド「GitKraken」を使ってみた - たけぞう瀕死ブログ

    AxosoftがGitKrakenという新しいGitフロントエンドを開発しているようです。 www.gitkraken.com 最近のプロダクトらしくElectronで開発されており、NodeGitを使用しているようです。ベータテストをやっているようなので早速申し込んでみました。 メイン画面はこんな感じ。コミットグラフの見た目や操作性は非常にいい感じです。 機能はまだ不足している感はありますが、日常作業であれば問題なくこなせる程度のクオリティには達していますし、動作もなかなか軽快です。また、1ウィンドウで複数リポジトリを切り替えて扱うことができ、切り替えもプルダウンで簡単に行うことができます。 ただ、やはりGUIのGitフロントエンドには対話式でリベースする機能が欲しいところです。MacのGitクライアントで対話型のリベース機能を持っているSourceTreeは動作の重さもさることながらリ

    ElectronなGitフロントエンド「GitKraken」を使ってみた - たけぞう瀕死ブログ
  • @tagomorisさんによるISUCON5裏話 - たけぞう瀕死ブログ

    先週の社内勉強会では@tagomorisさんにお越しいただき、ISUCON5で使われたベンチマークツールについてお話しいただきました。 資料も公開していただいています。 Tale of ISUCON and Its Bench Tools from SATOSHI TAGOMORI www.slideshare.net ISUCONで使われるベンチマークツールは アプリケーション以上に負荷をかけきるための性能 アプリケーションの処理結果を検証するための機能 という相反する2つの要件を同居させる必要があるため、既存のベンチマークツールやテストツールを利用できないため毎回スクラッチで開発されているそうです。 今回はhttp_loadを使おうと思っていたけど、一週間前にhttp_loadではセッションが扱えないことに気づいてJavaでjetty-clientやJackson、Jsoupなどを使っ

    @tagomorisさんによるISUCON5裏話 - たけぞう瀕死ブログ
  • gotty + tmux = 最強のWeb開発環境 - たけぞう瀕死ブログ

    gottyはターミナルで実行したコマンドの出力をWebブラウザで参照できるようにするツールで、オプションを付けるとブラウザからのキー入力も可能になります。つまりgottyでtmuxを起動することで、Webブラウザから複数セッションや画面分割可能なターミナルを利用でき、さらにvimEmacsなども利用することが可能になります。 特にWebアプリケーションを開発している場合、ターミナルでvimEmacsでコーディングしていると、動作を確認するたびにブラウザに切り替える必要があり、非常に面倒です。gotty + tmuxを使えばブラウザの1つのタブでターミナルを使うことができるので、ブラウザのタブを切り替えるだけでアプリケーションの動作を確認したり、調べ物をしたりすることができるのです。これを最強のWeb開発環境と呼ばずしてなんと呼ぶのでしょうか。Atomなんかいらなかったんや!! gott

    gotty + tmux = 最強のWeb開発環境 - たけぞう瀕死ブログ
  • 実戦での Scala 〜6つの事例から知る Scala の勘所〜で発表してきました - たけぞう瀕死ブログ

    2月21日(土)にスマートニュースさんの新オフィスで開催された「実戦での Scala 〜6つの事例から知る Scala の勘所〜」で発表してきました。togetterでのまとめはこちら。 ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala from takezoe スマートニュースの村石さんが「Scalaで快適に開発するためにはいいマシンを使う」と仰られてましたが、3年前のScala Conferenceで全く同じことを言った記憶があります。Javaのコンパイルも昔は死ぬほど遅かったですが、当時とはCPUの進化の方向が違うのでScalaに関しては今後も当分はコンパイル遅い問題は続いていくでしょう。 普及という観点では、昨年くらいからWeb界隈を中心にいろんな会社でScalaが使われるようになってきました。最初にScalaを実戦投入しは

    実戦での Scala 〜6つの事例から知る Scala の勘所〜で発表してきました - たけぞう瀕死ブログ
  • Reactive Streamsとは? - たけぞう瀕死ブログ

    Reactive Streamsというのはノンブロッキングなback pressure可能な非同期ストリーム処理の標準的な仕様を提供しようというもので、実装としてはAkka Streams、RxJavaReactor Composable、Ratpackなどがあります。 Reactive StreamsについてはAkkaのコミッタであるKonrad Malawskiさんの以下のスライドがとてもわかりやすいです。 2014 akka-streams-tokyo-japanese from Konrad Malawski ストリーム処理(というか非同期メッセージング全般に言えることですが)では受信側の処理能力を超えるデータを送信し続けるといずれキャパシティを超えてオーバーフローが発生してしまうため、送信側に比べて受信側の処理能力が低い場合は送信側が手加減してデータを送信する必要があります。な

    Reactive Streamsとは? - たけぞう瀕死ブログ
  • 1