eclipseのred5plugin導入

eclipseのインストール

ここからdownloadしてインストールすればおk
現状の最新版は3.4。

日本語化

調べた結果3.4の日本語化は3.3と同じ方法でできる。
pleiadesの本体をDLしてくる。

cp -R ./pleiades/features/* /Applications/eclipse/features
cp -R ./pleiades/plugins/* /Applications/eclipse/plugins

最下行に一行追加
vi /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini

ここから引用しています。
詳細はそっち見て下さい。

red5のpluginをインストール

ソフトウェアの更新に

http://www.red5.org/projects/red5plugin/update_0.1.x/

を追加してやり、あとはインストールするだけ。
eclipseの拡張楽で便利だなぁ〜。
ちょっといいかも。

red5そのうちサーバサイドもいじって遊ぼうと。
当面はBlazeDSやけど。
なんか最近JAVA率が高い。

BlazeDSを使ってみる

BlazeDSOSSのRPC(Remote Procedure Call)Server と Message Serverの2つの機能をもつ。
で、こいつがapache tomcatJBossで稼働させれる。
ちょっと興味がわいたのでいじってみる。

Turnkeyの導入

Turnkeyとは

BlazeDSがデプロイされTomcatがバンドルされているらしい。
これがJDK6依存なのでmacはJDK5なのでバージョンをあげていれる。

macにJDK6をインストール

まずここからmac用のJDK6をダウンロードしてくる。
んでインストール。
デフォルトにしたい場合はシンボリックリンクを変更。
JAVA_HOMEの環境変数を追加、もしくは変更すれば無事終了。

#デフォルトにする変更
sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/1.6 /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

#JAVA_HOMEの設定
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

#起動
$JAVA_HOME/bin/java -version
java version "1.6.0_05"
Java(TM) SE Runtime Environment (build 1.6.0_05-b13-120)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_05-b13-52, mixed mode)
Turnkeyをインストール

やっとこさTurnkeyをいれる。
ここからダウンロード。
解凍したディレクトリの中に移動。

sampledb/startdb.sh
tomcat/bin/startup.sh

これでおk。
TurnkeyバンドルのTomcatが8400番ポートで起動する。
http://localhost:8400にアクセスして確認できる。


ふふ〜♪これで色々と試せれる環境が手に入ったw
よねもさん助かりました!!あざっす!

識別子、文字列または数がありません。

IEでエラーでた。

Firefoxは空気読みすぎ。もちっとIEがんばってくれたらいいのにな。。。
で、結局このエラーはオブジェクトの最後に,をつけていたのが原因。

//エラー
var a = {
	hoge: "fuga",
	foo:  "bar",
}

//正常
var a = {
	hoge: "fuga",
	foo:  "bar"
}

perlだと上でも通るからつい書いてまう。
やっぱperlだなw
うーん。気をつけよっと。

YAMLの最終行について

パースエラー

perlYAMLモジュールだと
最後に改行を2ついれておかないとパースでエラーになる。
くそぉ〜。文法的には間違ってなかったのになぁ。。。やられた。

ってわけで改行を2ついれること。

flash:
  - hoge
  - fuga

YAML::Syncを使えばそんな心配いらないんだけどね。
YAMLを使うならYAML::Syncを使いましょ〜。

perldocでソースを読む

perldoc -m [Module名]

これソース追うときに便利!
ただdefaultだとmoreで開いてしまうため不便。

PAGER=less

っていう環境変数を用意しておけばlessで開けるから便利。

PAGER=less perldoc -m [Module名]

こんな感じ。
またはPAGERをexportしとけばok.

google map APIつかってみた

google map APIキー取得

ここAPIを登録する。
rascutlocalhostにアクセスしてデータを取得してきたいので
URLを http://localhost で取得した。

rascutで起動

基本ここの通りのことをしてみた。
ここではmxmlcでのコンパイルの仕方しか書いてなかったので
rascutでの起動の仕方を書いておく。

  • MapSimple.mxml(引用)
<?xml version="1.0" encoding="utf-8"?>
    <!-- Copyright 2007 Google Inc. -->
    <!-- All Rights Reserved. -->
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%">
    <mx:Panel title="Google Maps API for Flash - Simple Map" width="100%" height="100%">
    <mx:UIComponent id="mapContainer"
    initialize="startMap(event);"
    resize="resizeMap(event)"
    width="100%" height="100%"/>
    </mx:Panel>
    <mx:Script>
    <![CDATA[
    import flash.events.Event;
    import com.google.maps.MapEvent;
    import com.google.maps.Map;
    import com.google.maps.MapType;
    import com.google.maps.LatLng;

    private var map:Map;

    public function startMap(event:Event):void {
        map = new Map();
        map.key = "上で取得したキー";          //ここだけ追記
        map.addEventListener(MapEvent.MAP_READY, onMapReady);
        mapContainer.addChild(map);
    }   

    public function resizeMap(event:Event):void {
        map.setSize(new Point(mapContainer.width, mapContainer.height));
    }   

    private function onMapReady(event:Event):void {
        map.setCenter(new LatLng(40.736072,-73.992062), 14, MapType.NORMAL_MAP_TYPE);
    }   
    ]]> 
    </mx:Script>
</mx:Application>

rascut -c [mxmlcのオプションを指定] MapSimple.mxml -s
rascut -c -library-path+=lib MapSimple.mxml -s

またはflex-config.xmlファイルにかけばいい。
結構楽にためせれた。明日はもっと色々ためしてみよう。

ファイルのlockについて

flcokについて

flockってファイルハンドルを開いた後にチェックする印みたいなもんだった。
つまりはflockの戻り値でlock中かどうかの判断をするみたい。あってんかな??
詳しくはここを見てください。

  • flock(FH, 1) 読込中なので書込をロック、あとから来たら待つ。(ブロック)
  • flock(FH, 2) 書込中だから書込読込ロック、あとから来たら待つ。(ブロック)
  • flock(FH, 5) 読込中なので書込をロック、あとから来たら0を返す。
  • flock(FH, 6) 書込中だから書込読込ロック、あとから来たら0を返す。
  • flock(FH, 8) ロック解除(close(FH)すれば解除なのであまり使わない)。

上記のサイトより引用

この実装だとファイルハンドルは必ず開けないといけないので
書込時は正常にロックされるが読込中は上書きしないようにしようとしても

open my $fh, ">", filename or die $!;

こんな感じでファイルハンドルを開けないといけないので
既存のデータがなくなっちゃう自体におちいった。
まぁ当然ちゃ当然だけどw
で、色々試してできたんでメモ代わりに書いておく。

読込時のロック

  • read_lock1.pl
#!/usr/bin/perl

use strict;
use warnings;

my $op = open my $fh, '<', 'test.txt' or die $!;
my $lock = flock $fh, 5;
print "read_lock[$op:$lock]";
print join "", <$fh>;
close $fh;
  • write_lock1.pl
#!/usr/bin/perl -l

use strict;
use warnings;

my $op = open my $fh, ">", 'test.txt' or die $!;
my $lock = flock $fh, 6;   #第二引数を"2"にするとcloseされるまでread_lock1.plの読み込みを待たせる。
print "write_lock[$op:$lock]";
print $fh 'orzorzorzorz';
sleep 5;         #この間に read_lock1.pl-read_lock1.plを実行
close $fh;

これを試すとわかるけど
書込中はread_lock.plの$lockの値は0を返す。
書込が終わると$lockの値は1を返す。
あとは$lockの値をみてコードかけばおk。

書込時のロック

こっちは書込時に比べて少し違うやり方をした。

  • read_lock2.pl
#!/usr/bin/perl

use strict;
use warnings;

my $op = open my $fh, '<', 'test.txt' or die $!;
my $lock = flock $fh, 5;    #第二引数を"1"にするとcloseされるまでread_lock1.plの読み込みを待たせる。
print "read_lock[$op:$lock]";
sleep 5;
print join "", <$fh> if $lock;
close $fh;
  • write_lock2.pl
#!/usr/bin/perl

use strict;
use warnings;

my $op = open my $fh, ">>", 'test.txt' or die $!;
my $lock = flock $fh, 6;
print "write_lock[$op:$lock]";

if ($lock){
    truncate $fh, 0;   # ファイルサイズを0バイトにする
    seek $fh, 0, 0;    # ファイルポインタを先頭にセット
    print $fh 'orzorzorzorz';
}
close $fh;


ちょっとゴリ押感はあるけどこれでできた。ってかモジュールありそうなのになぁ〜
やっぱlockファイルを作るので十分だからかな??あれば便利そうなのになー


IO::LockedFile
モジュールあればいいと思ったらあった。
これどうなんだろ。実装はflock使ってしてるっぽいけど・・・