2011年9月27日火曜日

JavaScriptのイコール演算子


時々見かけるイコール3つの演算子(===)、これは何だろう?ということで調べてみたところ、
下記のページにたどり着きました。
http://js.tank.jp/javascript/post_9.html

イコール2つ(==)は、等価演算子
イコール3つ(===)は、厳密等価演算子
だそうです。

2つの違いは、イコール3つのほうは「厳密」ということからも
型の比較も行います。
例えば、数字の「5」と文字の「"5"」を比較した場合
イコール2つのほうでは、trueが返りますが
イコール3つのほうでは、型が違うためfalseになります。

2011年9月16日金曜日

neo4jとLucene


neo4jでは、Luceneをインデックスに使ってますが、
何のためにあるんでしょうか?

今は、ノードを作ったり、Traverseしたり、削除したりできているんだけど。。
よくよく考えていると分かりました!

作ったノードを取り出す際に必要なのです。
同じコンソールで作っていると、作ったノードを変数に入れておいたり、
登録したノードIDを用いて探しだすことができますが、
何十何百と登録していくうちに、ノードを探せなくなります。
そんな時にノードを作成した際に、インデックスにノード名等を登録しておくと、
そのノード名を元に、ノードを返してくれるのです。(なるほど!)
他にも、プロパティ等を登録することもできます。


ところで、Luceneのインデックスってどうやってoptimizeされるんだろう?という疑問。

とりあえずインデックスにどんどん追加してみたら、
勝手に11個目くらいでoptimizeされることが分かりました。
賢いのね(笑)

2011年9月15日木曜日

invalid multibyte char (US-ASCII)


Ruby1.9系を用いる場合の注意点として、
マルチバイト文字をソースに入れる場合(コメントは大丈夫)に
ソースの先頭に下記のいずれかを入れる必要があります。(なぜかいろいろな書き方あり)

  • # encoding: utf-8
  • # -*- encoding: utf-8 -*-
  • # -*- coding: utf-8 -*-

magic commentと言われるそうです。
入れることで、RubyのインタプリタにUTF-8のエンコーディングであることを知らせます。

上記を入れないと
invalid multibyte char (US-ASCII)
が発生します。


Ruby1.9やらRails3やら、バージョンアップするといろいろ問題が発生してます…

Rails3のNo route matchesエラー


rails3のNo route matchesエラー

フォーム作って、ボタンを押したら、遷移されるはずの所に遷移せず
No route matches [POST] /issue/show
といったエラーが出ました。

はて…(・・?

$ rake routes
issue_show GET /issue/show(.:format) {:controller=>"issue", :action=>"show"}


解決策としては、config/routes.rbを見てみると、
すべてコメントアウトされてるではないですか!

ひとまず、最終行にある下記のコメントを外すして再起動することで動きました!
   match ':controller(/:action(/:id(.:format)))'

下記のルートにも追加されるようになりました。
$ rake routes
issue_show GET /issue/show(.:format)                  {:controller=>"issue", :action=>"show"}
               /:controller(/:action(/:id(.:format))) 



ちなみにrails2のほうを見てみると、下記2行がちゃんとコメントされずに存在してました。
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'

ここの表示もRails3になると変わったようですね。
$ rake routes
  /:controller/:action/:id          
  /:controller/:action/:id(.:format) 


なんでコメントアウトされてるんでしょうか?

2011年9月14日水曜日

Rails3のJSON問題


Rails2からRails3に移植したアプリでJSONを扱っていたのですが、動かなくなりました。

今までこんな感じになっていたデータが
{"nodes":{"center":{"type":"center","text":"200"},
こんな感じに変換されるようになってしまってます。
{"nodes"=>{"center"=>{"type"=>"center", "text"=>"200"},

こちらを参考にしたところ
http://stackoverflow.com/questions/5038897/rails-3-json-problem-on-the-client-side


.html_safeを追加すれば解決できることがわかりました!
Rails2
<%=@data.to_json%>
Rails3
<%=@data.to_json.html_safe%>
この.html_safeは、escape関連でJSON以外にも登場してきそうですね。
view templateにHTMLを生成する際に使われるそうです。

2011年9月13日火曜日

はじめてのarbor.js


Execelなんかにある棒グラフ、折れ線グラフとかじゃない、NodeとEdgeのグラフを表示させるために
arbor.jsを使ってみました。
http://arborjs.org/

Webにもある3つのサンプルソースがあるにはあるのですが、
初めての私には理解できず、落としてきたモジュール内にあるsample-projectのほうが
取っ付きやすかったです。
arbor-v0.92/docs/sample-project

あれこれググってもなかなか良いサンプルがなく、、、
結局は自分でごそごそいじるだけに…。

HTML5のCanvasを使うことになってちょっと嬉しかったです!
こんな時に勉強会へ行っておいて良かった!って思いました(^^)

2011年9月12日月曜日

第6回Solr勉強会レポ

Solr勉強会にはこれで3回参加しました。
いつもお邪魔しているECナビさん。

フロアの何階か忘れてしまって、本当は8Fなのに
勘で7Fに行ったら違った(^^;

今回は特にCookpadさんのお話が聞きたかったのです。
こちらに資料を公開してくださいました!
http://d.hatena.ne.jp/code46/20110913/p1

各発表については、他の方のブログでも参考にしてください。
半分以上話が難しすぎてついていけず…。

★関口さん

  • Solr3.1-3.3はバグが入ってしまってるので、3.4が公開されたらそちらを使うこと
  • ドキュメントの親子関係の検索ができるようになった。(子が該当すると親を返すような←曖昧…)
  • Carrotでクラスタリングの結果を表示してくれる


★Cookpadさん

  • CookpadはRuby on Rails on AWS上で動作
  • 人気順検索でSolrを利用(Tritonnから移行)
  • Tritonnはパフォーマンスが悪かったり、フィールド追加が大変
  • Solr4 nightly on Oracle JVM上で稼働
  • analyzerを作らない(バッチを書く)
  • optimizeをすると20%程度速くなる
  • インデックスのみを格納し、本文はMySQLから検索することでインデックスサイズを小さくしている
  • 監視については、クエリ(QTime/QPS 1インスタンスでどのくらい捌くか)、キャッシュ(hit/eviction)、インデックス(サイズ/ドキュメント数)、、レプリケーションの所要時間をチェックしている
  • 便利だった機能はDynamicField、Facet、HTTPで検索・更新が可能、分散検索(shadingができる)


★データセクションさん

  • Bobo Solr pluginを使っている
  • メモリ不足になることが多かった
  • Solr1.4系ではレプリケーションに問題があった
  • さまざまなプラグインを利用


★Anuenue(mixiさん)

  • Solrにはクラスタ用のコマンドがなく、インスタンスごとに個別設定しなくてはならない
  • Hadoop上にOluolu(オルオル)とLikelike(リケリケ)
  • 今後はSolr Cloudを作ったり、Gosenを使ってみたい

★Apache Manifold CF

  • 2010年~のクローラー
  • Solrとの親和性があり、セキュリティを考慮した検索ができる
  • 例えば、共有サーバーのクロールでは、営業マンが営業資料を検索
  • MCFクロールをしてSolrに入れる
  • Solr Cellを利用


以上、適当ですみません(汗)


2011年9月8日木曜日

第1回品川Redmine勉強会レポ

品川Redmineの初の勉強会に参加してきました。
文京グリーンコートにあるIPAさんのオフィス。

(元)地元なので、迷わず辿りつけました♪

10分くらい前にたどりついて、コンビニで空腹を満たすためのバウムクーヘンをゲットして伺いました。
部屋に入ったらなんか雰囲気がおかたい(^^;
食べる雰囲気じゃなかったです…。(途中の休憩でこっそり食べましたが 笑)
なんとなく平均年齢がいつもより上のような気がしました。
30数名の参加者+スタッフの方々。

詳細は下記をご覧くださいませ。


Redmineの利用者は西に多く、東に少なかったんですね。
今まで何も気にせず使ってました。
いつもお世話になってるr-labsさんもいらっしゃいました♪

次回は品川で開催されるのでしょうか?!





2011年9月7日水曜日

neo4jを使ってみる


初めてのGraphDB。
GraphDBってデータベースなんですか?と聞いてるくらいのレベル…。

あれこれ調べた所、neo4jがなんか良さげだったので、とりあえず使って見ることにしました。


モジュールをダウンロードして、解凍して、インストールまで
http://neo4j.org/download/
(日本語のコミュニティサイトもあるみたいですが、英語版のほうが最新ですね。)
$ tar -xvzf neo4j-community-1.4.1-unix.tar.gz
$ mv neo4j-community-1.4.1 ~/neo4j
$ cd ~/neo4j
$ sudo ./bin/neo4j install
Graph-like power should be handled carefully. What user should run Neo4j? [neo4j] neo4j
User "neo4j" does not yet exist. Shall I create the account for you? [Yn]Y

ステータスの確認
$ ./bin/neo4j 
Usage: ./bin/neo4j { console | start | stop | restart | condrestart | status | install | remove | dump }
$ sudo ./bin/neo4j status
Neo4j Server is not running

起動
$ sudo ./bin/neo4j start
Starting Neo4j Server... process [2875]... waiting for server to be ready.................. OK.
$ sudo ./bin/neo4j status
Neo4j Server is running at pid 2875

終了
$ sudo ./bin/neo4j stop
Stopping Neo4j Server [2875].... done
$ sudo ./bin/neo4j status
Neo4j Server is not running

neo4jの削除
neo4jが要らなくなったら、下記コマンドを実行した後に、neo4jのフォルダを削除。
neo4jのディレクトリだけ削除すると、裏でプロセスが残ることがあります。
$ sudo ./bin/neo4j remove
Stopping Neo4j Server...
tpid: 9527
Waiting for Neo4j Server to exit...
Stopped Neo4j Server.

管理画面からノードの追加もできます。

ひとまず今日はここまで!

2011年9月2日金曜日

第2回JAWS-UGクラウド女子会レポ

楽しい勉強会に参加してきました♪
スポンサーの方々にスイーツ等をいただきました!
ありがとうございます☆

今回の勉強会のトピックは「セキュリティ」です。
以下、メモです。詳細はスライドをご覧ください!
  • 絶対に落ちないシステムより、いかに早く業務を再開させるかが重要!
  • 都市伝説1:パブリッククラウドより、プライベートクラウドのほうが安全だ
  • 都市伝説2:クラウド上のデータは、ベンダーが守るのだ
  • 都市伝説3:パブリッククラウドに業務システムは乗せられない
  • 都市伝説4:耐障害性を高めるにはパブリックは不向き
  • サーバー起動の例えとして、冷凍食品をレンジでチンすれば食べられる(動く)状態になる
  • Shared Responsibilityとは、AWSと利用者で責任分担
  • EC2はそれぞれが個室になっている感じなので、お隣のことは絶対に分からない!
  • S3はPUT/COPYしたら、3つの複製ができ、ひとつが壊れていると(Checksumで確認)、他をコピーして復旧してくれる。
  • Public AMIでは、公開時にチェックをしているが完璧ではないので、自分でも確認をする。
    SSHの調査例として、authorized_keysを確認して、不要なキーが書かれていないかを確認する

 休憩時間には、プリンやゼリーの差し入れも!