サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
pochi.hatenablog.jp
はじめに Spark, SQL on Hadoop etc. Advent Calendar 2014 15日目です。 3日目の記事でもSpark Streamingは紹介されていましたが、私のほうではより初心者向けの基本的な内容を記述しておきたいと思います。 Spark Streamingとは リアルタイムログ検索エンジンを考えてみる 実装してみる Spark Streamingとは Apache Sparkはインメモリで動作する柔軟なバッチエンジンです。 Spark Streamingはストリームで流れてくるデータに対してApache Sparkで書いたバッチが動作するものです。 誤解を恐れずにいうとSpark Streamingは主に以下の3つの機能を提供しています。 各種ストリームデータを取得するためのコネクタ(Receiver)を提供する ストリームデータをSparkのRDDのよ
久々のブログになります。 3年ほどJavaScriptを利用した開発をしてきましたが、最初はなぜJavaScriptでMVCフレームワークが必要なのかいまいちわからず、いろいろ試行錯誤してきました。 今日はタイトルの通りAngularJSが素敵だなということを書きたいのですが、よくあるベストプラクティスみたいなものではなく、自身がどのように思考回路を経由してここに行き着いたのかという経験談を記しておきたいと思います。 ちなみに私のJavaScript力は高くありませんのであしからず・・・。 jQuery 昔々、JavaScript MV(V)Cみたいなものがなかった時代、JavaScriptでリッチなものを作ろうとなるとjQueryやDojoのような低レイヤーのフレームワークが主に利用されていました。 その当時簡単なシングルページアプリケーションを作っていましたが私はjQueryを採用しま
web-socket-jsとは WebSocketに対応していないブラウザに対してFlashを利用して擬似的に WebSocket接続を行うもの。 socket.ioなどのライブラリはWebSocketに対応していないとFlashやLong Cometに置き換えるがweb-socket-jsは一貫してWebSocketを貫き通す。 ソースコードもGithubにあがっているのでとても使いやすい。 対応ブラウザもGithub上のREADMEに書いてある。 Flash接続について web-socket-jsを利用する場合十分に考慮しないといけないのがFlashのSocket接続だと思う。 ソケットポリシーファイルのやり取りが必要になりFlashの仕様として、以下の手順を踏むことになっている。(リンク先引用) まず843番ポート(ソケットマスターポリシーファイル)にアクセス。繋がらない or 3秒
Thorでタスクを書くとそのメソッドが普通のRubyのようには呼べません。 それでもやっぱりテストは書きたいのでThorのspecをいろいろ見てたらありました。 # encoding: utf-8 require "rubygems" require "thor" require "rspec" require "stringio" class Sample < Thor desc "name", "sample name" def name puts "pochi" end end describe Sample do it "should display 'pochi'" do capture(:stdout) { Sample.new.invoke("name") }.strip.should == "pochi" end end
テスト実行の組み合わせ AngularJSを利用してます。 ドキュメントが豊富で覚えやすく、テストシナリオも実行できるというのがとても気に入っています。 また、開発ツールyeomanというツールも気にいっていて、便利に使っています。 今日はyeomanを利用してテストをしてみるとこまでのログを残しておこうと思います。 yeomanのインストール 以下のコマンドでインストールできます。 がいろいろ足りないといわれるのでがんばります。 主にbrew使えば入ります。 またNodeJSが0.6とかだと動かないので注意が必要です。 (0.8とかあれば大丈夫です) $ curl -L get.yeoman.io | bash ひな形作成 yeomanでAngularJSのひな形を作ってみます。 $ mkdir angulartest $ cd angulartest $ yeoman init ang
社内でWebSocketに関する勉強会をやってきました。今回WebSocket自身を調べ直したことでだいぶ自分の勉強になりました。 普段アプリケーションを書く上であまり気にならないですがプロトコルの中身を知っておくことは重要であまりその辺りを書いている人もいなかったので書いておこうと思います。 詳しくは RFC6455日本語訳に書いてます。 WebSocketとは ステートフルなプロトコルで、一度接続を行うとその後はサーバからでもクライアントからでも好きなタイミングでデータのやり取りを行うことができる。Googleさん提唱でだいたいどのブラウザからでも利用可能。 WebSocket接続手順 接続確立については最初はHTTPを利用する。 これはファイアウォールやプロキシなど既存のHTTP環境との親和性を持つためにやっている。 またHTTPと同様にTLSを利用した仕組みでセキュアな接続も可能で
Chefを使うならどのような機能をもっているか把握するべきです。このページでは機能の概要を説明し、それらの詳細のリンクがついています。 Modeling Your Infrastructure Nodes nodeはChef-clientを実行するhostです。Chefからみたnodeの主な役割は変数と実行リストを所持する事です。 NodeはRecipeとRoleで構成されたものです。あなたがNodeを好きなときに実行するときは以下の事をします。 systemにRecipeを追加する 変数を更新する Run List 最も簡単な場合、Run listはnodeが所持しているRecipeのリストです。Cookbookのmetadataが正しいと仮定するとrun listにRecipeを登録するだけでそれらは必要に応じて自動的に実行されるでしょう。 より進んだ使い方として、Runlistにはn
最近毎日のように読んでいるwycatsさんが便利なメソッドを利用していたのでメモしておく。 # -*- coding:utf-8 -*- require "rubygems" require "spec" # this method is written by wycats def capture(stream) begin stream = stream.to_s eval "$#{stream} = StringIO.new" yield result = eval("$#{stream}").string ensure eval("$#{stream} = #{stream.upcase}") end result end describe "Object#capture" do it do capture(:stdout) { print "hoge" }.should == "h
昨日からnode.js+socket.ioでチャットアプリを作り出しました。 簡単に作れて楽しいのだけどサーバ側のeventで"message"しか受け取れないのかしらと疑問に思ってどうせならついでにsocket.ioのドキュメントをちょっと見てみました。ドキュメントは4/14日時点のgithubにあがっているものです。 socket.ioって? シンプルなHTTP Socketインタフェースです。簡単にリアルタイム接続処理をかけるようになります。socket.ioはリアルタイムプロトコルをwebsocketAPIみたいに利用できるのでそのあたりを気にしないとこがいいんだよ。 サポートプロトコル WebSocket Adobe Flash Socket ActiveX HTMLFile (IE) XHR with multipart encoding XHR with long-polli
pemっていうファイルで認証しているのはなんとなくわかる。 このなんとなくを解消したいと思う。 本エントリはWikiの誤訳だと思ってほしいです。 API Clients nodeデータはChef serverからの認証リクエストによって別々に管理されており、それはすなわちAPI Clientごとに管理されているということです。どのAPI Clientも公開/非公開キーを所持しています。 公開キーはChef server側で所持され、非公開キーはAPI Clientのほうで所持しています。nodeを実行したとき、非公開キーが自動的に/etc/chef/client.pem上に生成されます。knifeコマンドを利用するのが管理者の場合~/.chef/USERNAME.pemに非公開キーは生成されます。 全てのChef serverへのリクエストはHTTP headerに認証情報が入っています。
deleteとdestroyの違いをちょこちょこ忘れるのでメモ。 delete ActiveRecordオブジェクトを介さずに削除する。(直接SQLを発行するイメージ) オブジェクト同士に依存関係がない場合はこっちを使った方がActiveRecordの インスタンスを生成しない分早い。 destroy ActiveRecordオブジェクトを介して削除する。 これは依存関係も一緒に削除したい場合に利用するといい。 destroy_allを呼ぶと結構時間かかる。
Puppetとよく比較されるChefですが個人的にはPuppetの書き方がどうしてもなじめなかったのでChefをインストールしてみました。 ChefのWikiでインストール方法に書いてあるのでそこまではスキップします。(couchDBとかapache-solrとかRabbitMQとかMerbとか結構大変です。インストールだけみるとPuppetのが簡単だと思います。) ※今回chef-serverも自分のとこにいれようとしてます。chefの開発元がchef-serverをクラウド上に提供しているものは利用しません。(ただ、そっちを利用する方が簡単だと思います) ※参考サイト:http://wiki.opscode.com/display/chef/Hello+World+example 環境及び前提 OS: Red Hat 5.4 Ruby: 1.9.2 chef-server, chef-
Rails3.0で利用されているThorだけど、まだあまり情報ってないようにおもう。 一番詳しいのは、多分リンク先の記事です。(2010/3/13時点) Thorってなんなの?yet another rakeなの? ただ、僕が前の記事であげたgeneratorの仕組みを解読するでは、 railsコマンドをたたいたときにthorが呼ばれてるとことか結構奥深いかんじ。 なので、ちょっとthorを勉強したことをまとめときます。 Thorの開発者のブログを和訳してみる Thorの開発者はMerbやRails,jQuery等きっとRails開発者が日々お世話になっているであろうYehuda Katzさんです。 彼はThorについてブログで以下のように言及しています。(誤訳とか当然のようにあります) Title: Thorで作ろう! この数ヶ月、私はますますRubyのDSLが物足りなくなってきている。
今回調査すること Requestがどのように受け渡されるか ActionControllerのバージョン: 2.3.5 ご参考 Railsノート - ActionController::Request の生成過程を Webサーバーまでさかのぼる こっちのが詳しく書かれています。いろいろ勉強になります。 最初の流れ httpリクエストの簡単な流れは,リクエスト=>処理=>レスポンスだ。 その受け渡しの部分を順番に見ていく。 リクエスト まずは、HTTPリクエストを受け取り、処理側に渡す部分。 Railsでは今Rackが標準で利用されている。詳しく調べてないけどRackはHTTPサーバ(MongrelやPassenger)とアプリケーションの間で動くミドルウェアでアプリケーションから見たリクエストをどのHTTPサーバから来ても同一のものに変更してくれるものだと認識している。 Rackのサンプル
Net::HTTPでbodyにデータつめるときはset_form_data使ったほうがいいよ! OAuthの認証エラーで2日はまった原因がNet::HTTP.post(url, body, header)につめるデータが違っていたせいだった。 set_form_dataの例 request = Net::HTTP::POST.new(path, headers) request.set_form_data({"content"=>"hoge"}) こんな感じでつかえばいい。 set_form_dataの中身はこんな感じ。 def set_form_data(params, sep = '&') self.body = params.map {|k, v| encode_kvpair(k, v) }.flatten.join(sep) self.content_type = 'applica
Version2.1.2でプロジェクト作成時に組み込まれているrakeタスクをまとめたいと思います。 #{RAILS_ROOT}/lib/tasks内に自分でタスクを作成することもできます 初期rakeタスクは #{RAILS_GEM}/lib/tasksの中の"*.rake"などに定義されています 間違っているところなどあると思うのでなにかあれば教えていただけるとうれしいです db:abort_if_pending_migrations migrationを実行していないファイルがあれば教えてくれる db:charset そのdatabaseの文字コードを表示します db:collation databaseの照合順序を教えてくれます db:create database.ymlからdatabaseを作成してくれます db:create:all database.ymlに書いてあるすべて
Mongrel::HTTPServer.newの仕組み Mongrelを利用して文字列を返してみる。 普段はRailsと組み合わせるが今回は単体で。 例を参考に書いてみると以下のように利用できる。 require 'rubygems' require 'mongrel' class SampleHandler < Mongrel::HttpHandler def process(request, response) response.start(200) do |head, out| head["Content-Type"] = "text/plain" out.write("Hello, Mongrel") end end end h = Mongrel::HttpServer.new("0.0.0.0", "3000") h.register("/test", SampleHandle
このページを最初にブックマークしてみませんか?
『pochi's weblog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く