ラベル graph の投稿を表示しています。 すべての投稿を表示
ラベル graph の投稿を表示しています。 すべての投稿を表示

2014年1月20日月曜日

LazyHighCharts

rubyでグラフが簡単に作れるモジュールを探すとヒットしたのがこのLazyHighCharts。
https://github.com/michelson/lazy_high_charts

Gemfileに下記を追加
gem 'lazy_high_charts
bundle updateの実行
今回は、下記がインスールされました。
lazy_high_charts (1.5.1)


Rails3.2を利用しています。
app/assets/javascripts/application.js に下記のhighchartsの3行を追加
//= require highcharts/highcharts
//= require highcharts/highcharts-more
//= require highcharts/highstock
//= require_tree .

設定はここまで。

ここまで終えたらグラフのソースを書きます。
Controller
  def sell
    @categories = ["apple", "orange", "banana", "strawberry", "melon", "lemon", "peach"]
    @data = [40, 10, 20, 50, 30, 10, 60]
   
    @h = LazyHighCharts::HighChart.new("graph") do |f|
      f.chart(:type => "bar")
      f.title(:text => "Sample bar")
      f.xAxis(:categories => @categories)
      f.series(:name => "Fruits",
               :data => @data)
    end
  end
View
<%= high_chart("sample", @h) %>


2011年10月24日月曜日

rexsterを使ってみよう!


rexsterを使うことで、OrientDBやNeo4jのデータをRESTで取得することができます。
今回はOrientDBのデータを取得してみることにしました。

導入方法は、下記参照。
http://code.google.com/p/orient/wiki/Rexster

モジュールのダウンロードと解凍
$ wget https://github.com/downloads/tinkerpop/rexster/rexster-0.6.zip
$ unzip rexster-0.6.zip

OrientDBのバージョンが1.0rc5でない場合は、これもダウンロードして解凍しておく
$ wget http://orient.googlecode.com/files/orientdb-graphed-1.0rc5.zip
$ $ unzip orientdb-graphed-1.0rc5.zip -d orientdb_rc5

OrientDBからRexsterへ下記2つのjarをコピ-する。

  • orientdb-client-1.0rc5.jar
  • orientdb-enterprise-1.0rc5.jar

これをやるのというのは、上記のOrientDBのWikiサイトにしか書かれていないので、
Rexsterのほうを見てるとおそらくハマります。(ハマりました…)
cp orientdb_rc5/lib/orientdb-client-1.0rc5.jar  ~/rexster-0.6/target/rexster-0.6-standalone/lib/
cp orientdb_rc5/lib/orientdb-enterprise-1.0rc5.jar  ~/rexster-0.6/target/rexster-0.6-standalone/lib/
なんでこんな事をするのかは下記をご覧ください。
http://groups.google.com/group/orient-database/browse_thread/thread/f0d4ed39366396b7/02afb7c9017d9ade?#02afb7c9017d9ade


定義ファイルの編集
$ vi /home/tiffany/rexster-0.6/target/rexster-0.6-standalone/bin/rexster.xml 
1) 接続するOrientDB部の編集
   localでは上手く行かず…。
<graph>
  <graph-enabled>true</graph-enabled>
  <graph-name>orientdbsample</graph-name>
  <graph-type>orientgraph</graph-type>
  <graph-file>remote:10.3.216.204/demo</graph-file>
  <properties>
    <username>admin</username>
    <password>admin</password>
  </properties>
</graph>
2) localhost以外でつなげるなら、適宜変更。
<base-uri>http://IP</base-uri>
起動スクリプトの修正
rc5とrc6ではスクリプトが違うみたいですね。

読み込ませるrexster.xmlを-configureで指定する必要があります。
$DIR/target/rexster-*-standalone/bin/rexster.sh $@ -webroot $DIR/target/rexster-*-standalone/bin/public -configuration /home/tiffany/rexster-0.6/target/rexster-0.6-standalone/bin/rexster.xml 
起動
$ ./rexster.sh -s
その他のコマンドは下記のとおりです。
usage: rexster
 -h,--help                  print this message
 -s,--start <parameters>    start rexster (learn more with start -h)
 -u,--status <parameters>   status of rexster (learn more with status -h)
 -v,--version               print the version of rexster server
 -x,--stop <parameters>     stop rexster (learn more with stop -h)

Rexster起動中は下記ページにあるAPIが実行可能です。
https://github.com/tinkerpop/rexster/wiki/Basic-REST-API

2011年10月20日木曜日

OrientDB: record

レコードを見るにはいくつかの方法があります。
1clusterに1classのみ紐付いてる場合は、下記4つとも同じ結果が返ります。
> browse class OUser
> select * from OUser
> browse cluster OUser
> select * from cluster:OUser
実際にレコードを作ってみましょう。


レコードの作成
classを作って、レコードを入れて、入れたレコードを見てみるには、こんな感じになります。
> create class Person
> insert into Person(id, name) values (1, 'Andy')
> browse class Person

カラムの追加
例えば、電話番号を追加したいときは下記のように電話番号のカラムphoneを入れてあげるだけです。
> insert into Person(id, name, phone) values (2, 'Betty', '03-2222-2222')
> insert into Person(id, name, phone) values (3, 'Charlie', '03-3333-3333')   
この時点で、カラム名が表示されないのはバグ??

レコードの削除
> delete from Person where id = 1  
レコードを削除してみたら、カラム名が表示されました。
なお、RIDを条件にして削除する場合は、ridではなく、@ridになります。
> delete from Person where @rid = #11:0


さらに追加する場合は、空いたRIDに順に追加されますね。
> insert into Person(id, name, phone) values (4, 'Denny', '03-5555-5555')  


OrientDB: class と cluster

classとclusterはお互い関係しあってます。

class一覧の表示
>classes
classの作成
> create class [クラス名]
Class created successfully with id=3

class名の変更
> alter class [変更前] NAME [変更後]

NAMEだけでなく、[NAME, SHORTNAME, SUPERCLASS, OVERSIZE]の変更もできるらしいですが、他3つが何なのか分からないので、いつか分かった頃に…。
classの名前を変えると、clusterの名前も変更されます(再接続時に確認可能)。

cluster一覧の表示
>clusters
clusterの作成
> create cluster [クラスター名] physical append
physical の他にも、logicalで生成もできます。

以下、なんとなく分かったこと。
  • classは必ず何かのclusterに所属しています。
  • 1cluster に、複数のclassを所属させることができます。
  • classを作ると自動的に同じ名前のclusterが作成され、紐付けられますが、clusterを作成してもclassはできません。
    • class作成後に、一旦disconnectして、再度接続するとclusterにもできていることが確認できます。(原因は分かりませんが…)
    • clusterは複数のclassが所属できるので、classができないのだと思います。
  • clusterを作り、その後に同名のclassesを作ると、自動的に紐付けてくれます。

classを他のclusterに所属させるにはどうすれば良いのだろう、というのが分かりません…。


classとclusterの一覧を表示させるとこんな感じです。


2011年10月19日水曜日

OrientDB: remoteのDB作成と接続

demoという名のdatabaseを作ってみましょう。
前回はlocal版でしたが、remoteからもアクセスできるようにします。

ここで必要な設定と情報は2つ。
configでIPの設定 config/orientdb-server-config.xml にあります。

1) rootのパスワード確認
orientdbを初回起動した際に生成されます。毎回異なります。
 <user name="root" password="AED2DBECFF6C499D7E5CE8EA729E3C7A02F171EEA31A67C245F941FB925B2D86" resources="*"/>

2) IPの設定
 <listener ip-address="10.20.30.40" port-range="2480-2490" protocol="http">

作業するには、./console.shを起動します。
作成
> create database remote:10.20.30.40/demo root AED2DBECFF6C499D7E5CE8EA729E3C7A02F171EEA31A67C245F941FB925B2D86 local
Creating database [remote:10.20.30.40/demo] using the storage type [local]...
Connecting to database [remote:10.20.30.40/demo] with user 'admin'...OK
Database created successfully.
Current database is: remote:10.20.30.40/demo
接続
> connect remote:10.20.30.40/demo admin admin
Disconnecting from the database [demo]...OK
Connecting to database [remote:10.20.30.40/demo] with user 'admin'...OK
情報確認
> info
Current database: demo (url=remote:10.20.30.40/demo)
Total size: 9.76Kb

remoteで接続できることが確認できました。
作成されたデータベースは、databaseディレクトリ以下にdemoのフォルダがあります。

2011年10月18日火曜日

RubyでHTTP通信

OrientDBのサンプルを用いて、RubyでHTTP通信(GET)をしてみました。
こんな感じで OGraphVertex のデータが取得できます。
require 'net/http'
req = Net::HTTP::Get.new('/class/tinkerpop/OGraphVertex')
req.basic_auth 'admin', 'admin'
Net::HTTP.start(@IP,@PORT) {|http|
  response = http.request(req)
  return response.body
}

2011年10月17日月曜日

OrientDB: コンソール(full ver)

基本はシンプルバージョンと同じですが、ここではremoteについて触れてみます。

remoteを使う場合は、OrientDBのserverを起動しておく必要があります。
localの場合は、直接databases以下を見に行くので、起動しなくても大丈夫です。
$ ./console.sh 

tempに接続&切断
> connect remote:127.0.0.1/temp admin admin
Connecting to database [remote:127.0.0.1/temp] with user 'admin'...OK
> disconnect

tinkerpopに接続&切断
> connect remote:127.0.0.1/tinkerpop admin admin
Connecting to database [remote:127.0.0.1/tinkerpop] with user 'admin'...OK
> disconnect



OrientDB: Studio

いまだ使いかたがよくわかっていないStudioですが…
localhost以外からつなげる場合は、下記の変更が必要です。
OrientDBのサーバーはシャットダウンし、変更後に再起動してください。
起動中に変更するとサーバーのシャットダウンがうまくいかないことがあります。

$ vi ~/orientdb/config/orientdb-server-config.xml
<listener ip-address="127.0.0.1" port-range="2480-2490" protocol="http">

ここのlocalhostのIPを変えないで、マシンのIPに接続すると
「503 Service Unavailable」のエラーが出ます。

下記にアクセスすると、
http://マシンIP:2480/studio/

こんな画面が開きます。

2011年10月14日金曜日

OrientDB: コンソール(simple ver)

シンプルバージョンを用いています。
demoが入っていなかったので、いろいろ苦戦しました。。

コンソールを触って見ました。 bin以下にあります。
$ ./console.sh 
  • 「help」や「?」を入力すると、コマンドリストが表示されます。
  • 「exit」でコンソールを終了させます。

DBの作成と削除、起動と切断について動かしてみます。(ひとまずlocal版)

DBの作成
Syntax: create database <database-url> <user> <password> <storage-type>
> create database local:../databases/demo/demo admin admin local
Creating database [local:/home/tiffany/orientdb/databases/demo/demo] using the storage type [local]...
Database created successfully.
Current database is: local:/home/tiffany/orientdb/databases/demo/demo
DBの削除
Syntax: create database <database-url> <user> <password>
> drop database  local:../databases/demo/demo admin admin

接続
Syntax: connect <database-url> <user-name> <user-password>
> connect local:../databases/demo/demo admin admin
Connecting to database [local:../databases/demo/demo] with user 'admin'...OK

切断
Syntax: disconnect
> disconnect

Disconnecting from the database [demo]...OK

DB情報の参照
Syntax: info
> info

OrientDB: インストールから起動まで


Neo4jの次は、OrientDBを試してみることにしました!
試行錯誤で試すので、やや間違えてるところもあるかもしれませんのでご了承くださいませ…。

Javaが入ってることを確認
$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)


ダウンロード~インストール
http://code.google.com/p/orient/wiki/Download
二種類のモジュールがあるようです。

  • orientdb-1.0rc6-distribution.tar.gz
    • 必要最低限のみのシンプルバージョン
  • orientdb-graphed-1.0rc6.zip (現時点ではzipしかありませんでした)
    • gremlinやサンプル(demo)が含まれているフルバージョン
    • gremlinを使うならこっちが良い気がしています。最初は知らずにシンプルバージョンの方を使ってました…。

$ wget http://www.orientechnologies.com/listing/m2/com/orientechnologies/orientdb/1.0rc6/orientdb-1.0rc6-distribution.tar.gz
$ tar -xvzf orientdb-1.0rc6-distribution.tar.gz
$ mv orientdb-1.0rc6 ~/orientdb
パーミッション確認
bin以下のファイルに実行可能のパーミッションが付与されているか確認してみてください。
付与されていない場合は、下記のように.sh全部に(UNIX環境の場合)付与してください。
$ cd ~/orientdb/bin
$ chmod +x *.sh 
起動
$ cd ~/orientdb/bin
$ ./server.sh
orientdb/log/以下には、下記のようにログファイルがいくつかできあがるのが確認できます。
orientdb/log$ ls
orient-server.log.0  orient-server.log.0.lck
終了
$ cd ~/orientdb/bin
$  ./shutdown.sh
Sending shutdown command to remote OrientDB Server instance...
Shutdown executed correctly


エラー?!
もし、起動時にこんなエラーが出た場合は、server.shを実行する場所をbin内に変更しましょう。
Can't load log handler "java.util.logging.FileHandler"
java.io.IOException: Couldn't get lock for ../log/orient-server.log
java.io.IOException: Couldn't get lock for ../log/orient-server.log

あるいは、下記のパスを変更するか、ですね。
"../log/orient-server.log"これは、実行先から見たファイルです。
$ less orientdb/config/orientdb-server-log.properties*
java.util.logging.FileHandler.pattern=../log/orient-server.log


ひとまず、ここでは、インストールからOrientDBの起動と終了までにします。
次回は、console.shについて見てみます。

2011年10月8日土曜日

第1回GraphDB勉強会レポ


第1回のGraphDB勉強会に参加してきました。
少しばかり、スタッフとしてのお手伝いも。

neo4jは最近使い始めてるので、GraphDBの概要やneo4j説明に関しては飲み込めてる感じです。
@doryokujinさんが頑張って発表した3セッション!
資料作りが大変だっただろうなぁ、と思いました。
http://www.slideshare.net/doryokujin/the-definition-of-graphdb
http://www.slideshare.net/doryokujin/an-ingtroduction-to-neo4j
http://www.slideshare.net/doryokujin/an-introduction-to-tinkerpop

neo4jとLuceneの関係について、結構「ん?」となってる方もいらっしゃったようですが、
私も昔はその中の一人でした。
初めてneo4jを使った時にどうすれば作成したノードを後から見つけるんだろう?と思い、こんな時にLuceneを使うんだ、と分かった時にへ~、となった記憶があります。


TinkerPopの説明では、Gremlinの存在は知っていたけど、
まぁ、なくてもneo4jは使えるしと思ってるくらいで利用に関しての知識はなかったですが、
APIが便利そうな気がしました。
http://www.odbms.org/blog/2011/06/applying-graph-analysis-and-manipulation-to-data-stores/
http://japan.internet.com/webtech/20110709/1.html

TinkerPopの説明では、ロゴのキャラクターのかわいさについて、
かわいいとかかわいくないとか(笑)

最後にデモをしてくださった、@bibrostさんの資料です。
http://www.slideshare.net/fungoing/enjoy-graphdb-graphdb-jp-1japanese


今回の参加者は、100人オーバーだったと思うのですが、女性が4-5名?(^^;
どこもそんな感じなんですね。。。

Togetterはこちら↓
http://togetter.com/li/197970

2011年9月16日金曜日

neo4jとLucene


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

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

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


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

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

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月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.

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

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