夢とガラクタの集積場

落ちこぼれ三流エンジニアである管理人の夢想=『夢』と、潰えた夢=『ガラクタ』の集積場です。

Clojure勉強日記(その15 関数型プログラミングの概念

こんにちは。シーケンスについて一段落し、ついに本筋っぽい個所に入ってきます。 関数型プログラミング=FPとして以後書きます。FPによるコードが書きやすく、読みやすく、テストしやすく、再利用しやすい理由として、 下記の理由があげられています。 …

Clojure勉強日記(その14 Clojureにおけるシーケンスの特徴とJavaオブジェクトの扱い

こんにちは。そろそろ、書籍も説明的な内容が増えてきたので単にべた書きではなく、 理解したことをまとめていく方針を取ります。 1.遅延シーケンスと無限シーケンス JavaにあってClojureにないシーケンスの一番の特徴がこの遅延シーケンスと無限シーケンス…

Clojure勉強日記(その13 3.2 シーケンスライブラリを使う

では、続きます。 前回のClojure記事にもあるように、環境がSublime Text2に移ったのでかなり快適になっています。Clojureではシーケンスに対する関数が多くありますが、それらは下記のカテゴリに分類されるとのこと。 シーケンスを生成する関数 シーケンス…

Apache Kafkaの最新版をビルドしてみる

こんにちは。Clojureでの環境問題も解決したので一度Kafkaの方も進めておきます。 概要がわかったので、実際に動かしてみようとKafkaのサイトに向かったところ・・・最新版の0.8.0系のアーカイブが存在しないという状態でした。0.8.0のページ。ダウンロード…

WindowsでSublime Text2からClojure REPLを使えるようにしてみる→実は使えませんでした

こんにちは。今までREPLをコマンドラインで起動して使っていましたが、 さすがに効率が悪いようになってきたため、一度エディタから直接呼べるように環境を整えます。というわけで、Sublime Text2にREPLのプラグインを導入してみます。ですが、まずSublime T…

Apache Kafka 概要(Design)和訳まとめ

こんにちは。ようやく1ページ全てまとめ終わったので、 最後にまとめ投稿として投稿しておきます。尚、ページは下記です。 http://kafka.apache.org/07/design.html========== 1.何故Kafkaは作られたのか? 元々はLinkedInのActivity StreamとDat…

Apache Kafka概要確認(その12 分散方式

こんにちは。今回は実際分散協調をどうやっているかという話。 ある意味分散システムとしてのコアです。 19.分散方式 以後、BrokerとConsumerの協調に用いるZookeeperのディレクトリ構成とアルゴリズムについて記述する。 Zookeeper上のディレクトリ構成判例…

Apache Kafka概要確認(その11 メッセージを保存するログファイル

こんにちは。今日は実際にメッセージを保存しているログファイルの形式と形態について述べた章になります。 これまで述べられたメッセージがどういう形式でディスク上に保存されているかですね。 18.ログ "my_topic"というトピック名称を持つ2パーティション…

Apache Kafka概要確認(その10 メッセージ

こんにちは。APIの確認もすみ、更に先に進みます。 15.ネットワーク層 ネットワーク層の構成は単純なNIOサーバであるため詳細な説明は省略する。 sendfileの実装はMessageSet#writeToメソッドを用いて行われる。 FileChannel#transferToメソッドにおいてFile…

Apache Kafka概要確認(その9 API

今回からは実際のAPIを確認していく形になります。 13.Producer側のAPI Producer側のAPIは以下の2つの低レベルAPIをラップしている。 kafka.producer.SyncProducer kafka.producer.async.AsyncProducer class Producer { /* Sends the data, partitioned by…

Apache Kafka概要確認(その8 Producerプロセス

こんにちは。ついに設計の大方針の内容が終わり、 個々のプロセスの設計の内容に入っていくようです。 11.Producer Producerプロセスの自動ロードバランシング Kafkaは、ProducerのTCP接続のバランスをとるための専用ロードバランサを使用するために クライ…

Apache Kafka概要確認(その7 PushモデルかPullモデルか

こんにちは。では続きに。 10.メッセージ消費側駆動の状態管理方式 プッシュ対プル これまでのBroker、Consumer側の話に関連する質問として、 Broker側がデータをpushするのか、Consumer側がメッセージをpullするのか、がある。Kafkaはデータの流れとして下…

Apache Kafka概要確認(その5 メッセージの状態管理

こんにちは。とりあえず続きです。 9.エンドツーエンドのバッチ圧縮 多くの場合、ボトルネックはCPUではなくネットワークになる。 特にデータセンター間でメッセージを転送する必要があるネットワークトポロジを組んでいる場合は。もちろん、ユーザはKafkaの…

Apache Kafka概要確認(その6 メッセージ消費状態管理

こんにちは。とりあえず続きです。 10.メッセージ消費側駆動の状態管理方式 メッセージ配信セマンティクス これまでからわかるように、メッセージ配信の保証方式として下記の3パターンが考えられる。 1回以下:前述した第1のケース。メッセージは提供後す…

Apache Kafkaってそもそも何か確認してみます(その4

1年位間があいてしまっていますが、ベースデザインの章の続きを読んでみました。 あと、個々の言葉を訳しても時間がかかるので、要点のみ抽出してとりあえず最後まで読み切ります。尚、ページ自体は下記の場所に移動していました。 http://kafka.apache.org…

Clojure勉強日記(その12 3.1 すべてはシーケンスである

こんにちは。連休が挟まったということで若干間があいていますが、続けます。で、この間にプログラミングClojureの第2版が発売されました。プログラミングClojure 第2版作者: Stuart Halloway and Aaron Bedra,川合史朗出版社/メーカー: オーム社発売日: 20…

Clojure勉強日記(その11 3.3 ClojureでJavaのクラスを作る(Vol_2)

こんにちは。とりあえず、コンパイルができなかった問題をさらに追ってみます。この辺のページを確認したところ、原因は「Classファイルの出力先ディレクトリが存在しないから」でした。 ・・・というか、である調でブログを書くこと自体が結構厳しいことに…

Clojure勉強日記(その10 3.3 ClojureでJavaのクラスを作る(Vol_1)

ClojureのオブジェクトはJavaに対応するものがあればそのインタフェースを実装している。 Clojureのデータ構造はJavaのコレクションAPIを実装している Clojureの関数はRunnableとCallableを実装している ・・・後者は中々。このあたりやはり並列実行用の言語…

QConTokyo2013 KeyNote2 ファブラボ鎌倉の挑戦

次は「ファブラボ鎌倉の挑戦」。 1.講演内容 結論としては、 「今後ものづくりにソフトウェアとハードウェアの垣根はなくなる。 ソフトウェアでハードも作れるようになる。」15年に一度、技術が社会とであう。 パーソナルコンピュータ(1980) インターネッ…

QConTokyo2013 KeyNote1 プログラミング・スタイルと私たちの脳

こんにちは。今日はQConTokyo2013に来ています。 まずは、KeyNote1 プログラミング・スタイルと私たちの脳」から。とりあえず講演の中のメモをそのまま貼り付けたもののため、 内容的なまとまりはいまいちですし、抜けもあるとは思いますが、とりあえずとし…

Clojure勉強日記(その9 3.2 性能の最適化

こんにちは。徐々に書けることが広がってきてはいますが、まだ4分の1。 とりあえず地道に続けます。前章で述べたJavaの呼び出しで述べた方法を使ってJavaを呼ぶのがClojureでは普通。 これで基本的には十分に高速のはずだが、さらに高速化を行うことができ…

Clojure勉強日記(その8 3.1 Javaの呼び出し

こんにちは。とりあえず構文の説明が終わり、後は実際に機能をコードを書きながら確認していく形になりそうですね。ClojureコードはJavaバイトコードに直接コンパイルされ、Javaを呼び出す際に変換が挟まれることはない。 Clojureは直接JavaのAPIを活用でき…

Clojure勉強日記(その7 2.7 メタデータ

こんにちは。ついに2章も最後まで来た形になります。 とりあえず概念が大量に出てきたのにたいして書いた量がいまいち不足しているため消化不良な感もありますが・・・ まぁ、それはその先の章でも書き続けることで対処できるでしょう。では、続きです。メ…

Clojure勉強日記(その6 2.6 forループはどこにある?

というわけで、続きです。これまで見てきたが、forループがないし、直接変更可能な変数というものも登場していない。 単に、関数とインプット、アウトプットがあるだけという非常にシンプルなIPOを示すのみとなっている。・・・というのがJava辺りから入った…

Clojure勉強日記(その5 2.5 フロー制御

なんか徐々にまともなプログラムを書くためのパーツがそろってきたように思える今日この頃です。 では、続きです。Clojureではフロー制御の方式はif、do、loop/recurでほとんど賄える。 1.ifによる分岐 Clojureのifは最初の引数を評価し、それが論理的に真で…

Clojure勉強日記(その4 2.4 var、束縛、名前空間

では、続きです。オブジェクトをdefやdefnで定義するとオブジェクトは指定した名前にバインドされる。 下記の例ではuser/fooに10がバインドされる。 user=> (def foo 10) #'user/foo user=> foo 10 user=> user/foo 10 ここで束縛される場所は「var」と呼ば…

Clojure勉強日記(その3 2.2 リーダマクロ/2.3関数

こんにちは。 では、さっそく実際のコードを書いてみましょう。今回の範囲は「2.2 リーダマクロ」「2.3 関数」です。 この辺を突破すれば多少は読めるのではないかと期待しながら入ります。。。 2.2 リーダマクロ リーダマクロ≠マクロであり、 Clojure…

Clojure勉強日記(その2 2.1 フォーム

こんにちは。 では、さっそく実際のコードを書いてみましょう。今回の範囲は「2.1 フォーム」です。 「実際にClojureでどうやって記述するか?」の章で、多分この辺が中途半端だったので途中からわけわからくなっていました。 そのため、地道に。 1.フォ…

Clojure勉強日記(その1 Clojure(REPL)実行環境

最近Stormのコードを読んでいるのですが、Clojureの基本文法が曖昧なために 結局深いところは読み解けないという状態に陥っている今日この頃です。というわけで、プログラミングClojureを使って 実際にClojureのコードを書いて、理解を深めることにします・…

1人、Stormソースコードを読んでみよう(No.3

こんにちは。 なんか1年以上忘れ去っていましたが、 最近StormのClojureコードを読むことが増えてきましたので、とりあえずゆるゆると再開してみます。 1.まず重要なのはClojureのコードです これはStormを扱う上でいうまでもない内容になりますね。 ・・・…