2012年1月31日火曜日

Linuxコマンドなどの雑記

せんとくん用(CentOS release 5.5 Final)

OSバージョン確認
cat /etc/redhat-release
32bit/64bit確認
uname -a
メモリ確認
free -m


ファイル検索
カレントディレクトリでのファイル内文字列検索
grep -r 検索文字列 *


ファイルコピー
ファイルの属性をできる限りそのままにコピー
cp -a コピー元ファイル名 コピー先ファイル名
ファイルの属性・・・パーミッション、オーナー、グループ、更新日時 とか。

プロセス確認
ps -ef
ps -ef |grep 検索文字列


ポート確認
Listen状態のみ
netstat -ln
TCPとUDPのすべて
netstat -atu
[参考サイト]
netstat - ホストのネットワーク統計や状態を確認する

ファイヤウォール
ルールファイル確認
iptables-save
Rejectの記載位置を最後にすることに注意

ルールファイルのありか
/etc/sysconfig/iptables
開始、終了、再起動
/etc/init.d/iptables start
/etc/init.d/iptables stop
/etc/init.d/iptables restart
[参考サイト]
iptablesの設定

自動起動
設定確認
chkconfig --list
[参考サイト]
 a/Linuxの自動起動設定 - SORENARI-WIKI

2012年1月30日月曜日

bitbucket+Mercurial記事まとめ

コードホスティングサービスとバージョン管理システムを選ぶ

bitbucket+Mercurial 最初の一歩(1)
bitbucket+Mercurial 最初の一歩(2)

bitbucket+Mercurial 最初の一歩(2)

さて、ローカルリポジトリ(自分の作業リポジトリ)側。

TortoiseHgのインストール
オフィシャルサイトにいって、インストールファイルをダウンロード
TortoiseHg

今回インストールしたのは、TortoiseHg 2.2.2 for Windows with Mercurial 2.0.2
ダウンロードしたmsiファイルをダブルクリックしてインストール。特に迷わなかった。

環境変数"Path"にTortoiseHgインストールフォルダが自動で追記されるのだが、このフォルダにhg.exeがいるので、hgコマンドもコマンドプロンプトから実行することができるようになる。

Mercurialの使い方がコンパクトにまとまった非常にわかりやすいカンニングペーパー(Cheat Sheet)があるみたいなので参考にしよう。
Mercurial Cheat Sheet 日本語版
QuickStartの左上の図を見ると使用、運用イメージが湧いてくるかな。

TortoiseHgちょっと初期設定
任意のどれでもいいフォルダ上で右クリック→TortoiseHg→Global Settings
「TortoiseHg Setting」画面で左側の一覧から「コミット」を選択し、
"ユーザ名"に自分ということが分かるちゃんとしたユーザ名を設定しましょう。
未設定だとコミット時の名前がWindowsのユーザ名@マシン名になっちゃいます。
まぁ、別になっちゃっていい人はいいけど、この後bitbucketで見た時にもこの名前になっています。
チーム開発とかしてる場合は、他の人に「誰?」とか思われないように。

bitbucket上のリポジトリのクローン
前回作成したbitbucket上のリポジトリのクローン(ローカル端末へのコピー)を行う。
リポジトリ用のフォルダを適当な場所に作成。ここでは"sandbox"というフォルダ名にした。
そのsandboxフォルダ上で
右クリック→TortoiseHg→Clone
とすると、クローンのダイアログが表示される。ここに
  • ソース:bitbucket上のリポジトリのURI(https://bitbucket.org/(ユーザ名)/(リポジトリ名) )
  • ターゲット:このフォルダのパス
  • オプション:特になし
を指定して、「クローン」ボタンをクリック。
これでこのsandboxフォルダがbitbucketのリポジトリと同期されることになる。
"sandbox"フォルダ内に".hg"フォルダが作成され、フォルダアイコンにグリーンのチェックマークが付いてる。

pullしてみる
Mercurialのコマンドはいろいろなサイトに載っているけど、TortoiseHgの画面からどうやってpullやpushをするのか、最初戸惑うかも。
hgで始まるコマンドと画面操作の対応に少し慣れる必要があると思います。

pullをするには、
sandboxフォルダ上で右クリック→TortoiseHg→Synchronize
でSync画面(同期ツール)を表示。
左上のアイコンであっちからこっちへ矢印が向かってきているやつがpull。
マウスオーバーすると
"Pull incoming changesets from remote repository"
とバルーンヘルプが出るやつ。
さらに、「プル後の処理」ボタンでupdateするかどうか選べます。

まずはbitbucketのクイックスタートに習って、pull --updateしてみよう。
・・・bitbucketのリポジトリに何もないから特に何も起きない。正解。

ちなみにMercurialでは、1回の操作で複数ファイルを変更する際、この変更の集合をひとまとめで管理します。
このまとまりをチェンジセット(Change sets)と呼んでいます。

ローカルリポジトリへのコミット
試しに、バージョン管理するファイルを作って、コミットしてみる。
sandboxフォルダに適当なテキストファイルと作って、
sandboxフォルダ上で右クリック→TortoiseHg→Add Files...
先ほど適当に作ったファイルを選択(チェックボックスにチェック)して「追加」ボタンをクリック
これでファイルが同期対象になった。
ファイルのアイコンに青い+がついている。これでよさそう。
続いてコミット。
sandboxフォルダ上で右クリック→Hg Commit...
コミット対象ファイルを選択、右上の入力エリアにコミットメッセージを入力して、「コミット」ボタンを押す。
(ここでチェンジセットが作成される?)

これでローカルリポジトリにファイルが追加され、コミットされた。

アイコンにグリーンのチェックがついたはず。


pushしてみる(リモートリポジトリへの変更の反映)
pushもpush同じくSync画面を開く。
左上のこっちからあっちへ矢印が向かっているボタンをクリック。
("Push outcoming changesets to remote repository"と出るやつ。)

pushをする場合は、リモートリポジトリ(ここではbitbucket上のリポジトリ)のユーザIDとパスワードを求められる。それぞれ入力して「OK」

正常に処理が終わった場合はログ表示エリアに
command completed successfully...
と表示されているはず。
これでbitbucket側のリポジトリへ変更が反映された。

ブラウザからbitbucketにログインして見てみよう。
リポジトリのOverviewをみると、最近のコミットの一覧(Recent commits)で自分の操作が表示されているはず。

とりあえずここまで。
必要に応じて細かい操作も書きたいと思います。

[参考サイト]
Windows+TortoiseHgで始めるMercurial(hgコマンドをTortoiseHgで) - 記憶は削除の方向で
kuy / thg-ja / wiki / Home — Bitbucket

TortoiseHG からの利用

2012年1月25日水曜日

ロシアからのリファラスパム

昨日あたりからLinkedinのリダイレクトを悪用したリファラスパムらしきアクセスが。
こんなアドレス。

www.linkedin.com/redirect?url=www.ow.ly/8DFmk

User Agentはランダムに偽装してそう。

臆することなくクリックすると、胡散臭い動画と、パッケージソフトの購入ができるサイトが表示されます。英語でした。

他のかたのブログにもやっぱり同じようなアクセスがあるみたいです。
今度は linkedin を利用した新たなスパムが・・・ | Neta Beta Max

2012年1月22日日曜日

bitbucket+Mercurial 最初の一歩(1)

bitbucketはなにも見なくてもリポジトリの作成までできました。
画面がシンプルでわかりやすく、お手軽です。

bitbucketのサインアップ
bitbucketのサイトで、どでかく"SIGN UP NOW, FREE"と書いてあるボタンをクリックするとサインアップ画面が表示される。
OpenIDに対応しているみたい。画面下のほうのSign up using OpenIDのリンクをクリック。
選べるのは、Google、Yahoo(USAのみ?)、Aol、flickr、Wordpressなど。
私はGoogleのアカウントでサインアップしました。
すぐにComfirmメールが送られてくるので、本文に記載されているアドレスにアクセス。
これでサインアップ完了。
スタンダードサインアップの場合に必要なのは、Username、Email address、パスワード。"Sign up"を押せばたぶんComfirmメールが届くんだと思う。

新規リポジトリの作成
Repositories→create repositories または + アイコンをクリック

リポジトリ作成画面にて、

  • リポジトリの名前を決めてNameに入力
  • Privateのチェックボックスでプライベートリポジトリにするかどうかを選択
  • Pepositroy type欄、GitかMercurialのどちらを使用するか選択(ここはMercurialで)
  • Project management欄、Issue trackig、Wikiを使用する場合はチェック
  • Language欄、プログラミング言語を選択(これはどういう意味か未調査)
  • 必要に応じてDescriptionにリポジトリの説明文を記載
  • Websiteがある場合はアドレスを記載

(ここらへんは後でAdminタブで変更できるみたい)

必要事項を設定し、「Create repository」ボタンをクリック
これでリポジトリが作成できた。

続いて、作成したリポジトリの参照画面?を見てみる。
どうやらHTTPSとSSHで接続可能らしい。

クイックスタート(Quick start)の記述内容
$ hg clone https://bitbucket.org/(ユーザ名)/(リポジトリ名)
...
$ hg pull --update # to pull changes and update
$ hg push # to push changes to this repo
SSHの場合、リポジトリのクローンは、
hg clone ssh://hg@bitbucket.org/(ユーザ名)/(リポジトリ名)
となる模様。

チーム開発の場合、参加メンバに招待状(invitation)を送ることができるみたい。
Overviewタブか、Followersタブに"invitation"、"invite"というリンクがあるのでクリック
メンバのメールアドレスを記載し、アクセス権限をWriteかAdminかを選択して"Send invitation"をクリック。

2012/1/25追記
招待メールが相手にすぐに届きます。
メールに記載されている招待アドレスにアクセスすると、
bitbucketの「既にアカウントを持っているor新たにサインアップする」画面が表示されます。
既存アカウントでログインするか、新しいユーザを作成してログイン。
共有しようとしているリポジトリが見えているはず。
見失わないようにfollow+(ハートマークのアイコン)をクリックするとよいかも。


次回はクライアント側。

2012年1月20日金曜日

Bloggerでブログタイトルと記事タイトルの表示順を入れ替え

参考サイトをガン見して、ブログタイトルと記事タイトルの表示順を入れ替えました。
いい感じ。

[参考サイト]
■bloggerのページタイトル<title>を「記事タイトル:ブログタイトル」の順で表示させる|格安SEO対策会社トンちゃん‐低価格・高品質

Web検索、ウェブマスターツール記事まとめ

Google
WordPressブログサイトのGoogleウェブマスターツールへの登録方法

新ブログをGoogle検索結果に表示させるぞ大作戦1(旧サイトのインデックス削除)
新ブログをGoogle検索結果に表示させるぞ大作戦2(新サイトのインデックス登録)

Bloggerでブログタイトルと記事タイトルの表示順を入れ替え

Bing
BingウェブマスターツールとBloggerサイトの登録方法




BingウェブマスターツールとBloggerサイトの登録方法

BingのウェブマスターツールへBloggerサイトを登録する際の手順メモ

Bingウェブマスター ツールにて
Windows Live IDでログイン

(Windows Live IDを持っていない場合は取得する。5分程度。)


ホーム画面で「サイトの追加」ボタンをクリック
サイトの追加画面で自分のブログのURI
http://(自分のサイト名).blogspot.com/
を指定し、「送信」

"オプション 2: タグをコピーして既定の Web ページに貼り付けます" 
をクリックして表示されたmetaタグをコピー
画面はこのまま開いておく。

ここからBloggerのマイブログページにて(別画面で)
マイブログ画面で「テンプレート」→「HTMLの編集」→「続行」し、テンプレートのHTMLを表示
<head></head>の間、他のmetaタグの近く、</title>の後ろあたりに、コピーしていたmetaタグをペースト
「テンプレートを保存」して「閉じる」

再びウェブマスターツールにて
「確認」をクリック
これでBingウェブマスターツールへBloggerのサイトが登録される。

続いて、サイトマップを登録。
「クロール」タブ→「サイトマップ (XML、Atom、RSS)」でサイトマップの画面が表示される。
「フィードの追加」をクリックし、テキストボックスに自サイトのATOMフィード
http://(自分のサイト名).blogspot.com/atom.xml
を指定して「送信」して登録完了。

登録直後は状態が"保留中"になっている。
しばらく浸け置きかな。


[参考サイト]
BloggerにおけるBing Webmaster Toolsへの登録方法 | monolis

Red5記事まとめ

Red5アプリケーション開発環境の整備(1) - Red5のインストール
Red5アプリケーション開発環境の整備(2) - Eclipseのインストールと設定
Red5アプリケーション開発環境の整備(3) - Flex開発環境

Mac mini(OSX 10.7.2)でRed5開発環境を構築する(1) 


Red5でHello World(1) - サーバ編
Red5でHello World(2) - クライアント編 その1
Red5でHello World(3) - クライアント編 その2

[Red5] SLF4j+logbackでログを出力してみたよ
[Red5] ApplicationAdapter エントリポイントのメモ
[Red5] 録画ファイルの保存先とかを変更してみよ〜

Red5でHello World(3) - クライアント編 その2

※他のRed5関連のエントリはこちら

※本稿は随時加筆修正していく可能性があります。
まずはこちらから。

FlashdevelopでのFlexアプリのコンパイルと実行のやり方
コンパイルはメニューから、「プロジェクト」→「プロジェクトのビルド」
実行は同じく「プロジェクト」→「プロジェクトをテスト」

せっかくなので、前回のMain.mxmlに画面部品をテキトーに追加して実行してみる。
Main.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

   <mx:Label id="myLabel" x="0" y="0" width="100" height="25" fontSize="20" text="ラベル"/>
   <mx:Button id="myBtn" label="ボタン" />
   <mx:TextInput id="myTextInput" text="テキストインプット" />
   <mx:TextArea id="myTextArea" text="テキストエリア" width="200"/>

</mx:Application>

コンパイルすると出力ペインに下記のようなログが出力されます。
プロセスを実行中・・・
・・・Build succeeded
Done(0)
Build succeededが表示されていればたぶん大丈夫。
続いて実行するとFlash Player画面が開き、ボタンなどが表示されていると思います。

それではついにRed5と接続!

HelloTest.asに記載する処理
HelloTest.asに必要となるコードをわかりやすい(かどうかわからん)ブロックごとに分けて記載していきます。

必要になるするパッケージを定義
import flash.net.NetConnection;
import flash.events.NetStatusEvent;

HelloTestクラス内にメンバ変数を定義。
Red5の自作アプリのURIを表す文字列と、Red5との接続を制御するオブジェクト用。
private var _uri:String;
private var _nc:NetConnection;

Red5自作アプリのURIに接続する基本の流れ
コードA
_uri = new String("rtmp://(Red5のIPアドレス)/(自作アプリの名前)");

_nc = new NetConnection();
_nc.connect(_uri);
_nc.addEventListener(NetStatusEvent.NET_STATUS, _onNetStatus);
URIはポート番号5080は不要。入れるとうまく動かない。
3行目でNetConnectionオブジェクトを生成、4行目でRed5サーバへ接続。
この後、5行目でイベントリスナを登録している。
イベント発生時に呼ばれるメソッド"_onNetStatus"をコーディングする必要あり。
このメソッドはRed5との接続時、および切断時に呼ばれる。
引数のイベントオブジェクト内の情報から接続成功、切断、失敗、拒否が判別でき、状況に応じた処理を書くことができる。
//Red5接続、切断時に実行される
private function _onNetStatus(evt:NetStatusEvent):void
{
   switch (evt.info.code)
   {
      case "NetConnection.Connect.Success": 
         trace("connect success");
         break;
      case "NetConnection.Connect.Closed": 
         trace("connect Closed");
         break;
      case "NetConnection.Connect.Failed": 
         trace("connect Failed");
         break;
      case "NetConnection.Connect.Rejected": 
         trace("connect Rejected");
         break;
      default: 
         trace("何か起こった?");
   }
}

ここまでがRed5接続の基本的な流れ。
これに、サーバ編で作成したRed5サーバ側メソッドを呼び出すコードを追記していく。

必要になるパッケージを定義
import flash.net.Responder;

サーバ側メソッドを呼び出した結果を格納するメンバ変数をHelloTestクラス内に追加
private var _respose:Responder;

以下、サーバ側メソッド呼び出しの基本的な流れ。例えば、サーバ接続処理後に記載、または実行されるようにする。
コードB
_respose = new Responder(_success, _stat);
_nc.call("hello", _respose, txt);
1行目はResponderオブジェクトの生成、2行目でRed5サーバ側の"hello"という名前のメソッドを呼び出している。callメソッドの第3引数はサーバ側へ渡す情報。今回はString。
Responderのコンストラクタで引数としているイベントメソッド"_success"、および"_stat"をコーディングする必要あり。
//サーバ側メソッド呼び出し成功時に実行される
private function _success(result:Object):void
{
   trace("メソッド呼び出し成功");
   trace(result);
}

//サーバ側メソッド呼び出し失敗時に実行される
private function _stat(status:Object):void
{
   trace("ステータス");
   for (var key:String in status)
   {
      trace("key = " + key + " / value = " + status[key]);
   }
}

ついでにコネクション切断の流れ
コードC
_nc.close();
_nc = null;


以上、Red5との接続、メソッド呼び出し、切断の本筋は数行で書けます。
どちらかというと、イベントハンドラ諸々を書くのがめんどうです。

お手軽にメソッド呼び出しを試したい場合は、コードA、コードBをHelloTextクラスのinitializeメソッドに書き、必要なパッケージ、メンバ変数、イベント発生時のメソッドもつければ完成。
Flexアプリ起動時に1回だけサーバ側メソッドが呼ばれます。ちなみに、コードA、Bコードの後にCを書くとうまく動きません。(挙動は要調査)

画面上のボタンなどから接続やメソッド呼び出しを個別に実行したい場合は、コードA、B、Cを独立したメソッドとして実装し、ボタン押下時に呼び出すようにするとよいかと思います。
また、Null対策などを施して堅牢にする営みを忘れずに。

次回は動画の再生を予定。

参考:最も安易なHelloTest.as
package
{
    import mx.core.IMXMLObject;
    import flash.net.NetConnection;
    import flash.events.NetStatusEvent;
    import flash.net.Responder;
    
    public class HelloTest implements IMXMLObject
    {
        private var _uri:String;
        private var _nc:NetConnection;
        private var _respose:Responder;
        
        private var txt:String;
        
        public function HelloTest()
        {
        
        }
        
        /* INTERFACE mx.core.IMXMLObject */
        
        public function initialized(document:Object, id:String):void
        {
            _nc = new NetConnection();
            _nc.connect(_uri);
            _nc.addEventListener(NetStatusEvent.NET_STATUS, _onNetStatus);
            
            _respose = new Responder(_success, _stat);
            txt = new String("hogehoge");
            _nc.call("hello", _respose, txt);
        
        }
        
        //Red5接続、切断時に実行される
        private function _onNetStatus(evt:NetStatusEvent):void
        {
            switch (evt.info.code)
            {
                case "NetConnection.Connect.Success": 
                    trace("connect success");
                    break;
                case "NetConnection.Connect.Closed": 
                    trace("connect Closed");
                    break;
                case "NetConnection.Connect.Failed": 
                    trace("connect Failed");
                    break;
                case "NetConnection.Connect.Rejected": 
                    trace("connect Rejected");
                    break;
                default: 
                    trace("何か起こった?");
            }
        }
        
        //サーバ側メソッド呼び出し成功時に実行される
        private function _success(result:Object):void
        {
            trace("メソッド呼び出し成功");
            trace(result);
        }
        
        //サーバ側メソッド呼び出し失敗時に実行される
        private function _stat(status:Object):void
        {
            trace("ステータス");
            for (var key:String in status)
            {
                trace("key = " + key + " / value = " + status[key]);
            }
        }
    }

}


[参考サイト]
そにらぼ » Blog Archive » [Red5入門コース第3回]サンプルアプリケーションの作成
※他にも参考にしたサイトがありますが、失念しています。判明次第追記します。

お腹が寒いので腹巻を買いました。

最近はウェストウォーマーとかボディウォーマーとかいうみたいです。

最近めっきり寒く、お腹が冷えて調子がよくありませんでした。
そういえば、子どもの頃はらまきして寝ていたなぁ と思いだし、ネットでいろいろ調査。

女性用下着でおなじみのワ○ールのメンズ用ボディウォーマーが日常使いにようさそうなので買ってみました。(1300円ぐらい)

吸湿発熱繊維が使われており、薄いので仕事中にしてても問題ないです。
(注意深く見るとシャツに透けてるのがわかりますが。あまり気にしません。)

朝は寒さをしのぐのになかなかよいです。
ただ、帰りは体温が上がっているためか、電車の中で汗ばんでしまいます。

とりあえず、しばらく使ってみようかと。

2012年1月18日水曜日

書き書き中、書き予定のエントリ

・Red5でHello World (2) クライアント編
・FlexにおけるViewとLogicの分離(仮)
・Bitbucket+Mercurialクイックスタート(仮)
・お腹が寒いので腹巻を買いました。

早く書かないとどんどん記憶が薄れていく。。。

Red5でHello World(2) - クライアント編 その1

※他のRed5関連のエントリはこちら

あぁ、クライアント側書くの、気が重い。気が重いよ~。

Flexプロジェクト、Main.mxmlの作成
以前インストールしたFlashDevelopにて、
メニューより「プロジェクト」→「新規プロジェクト」

NewProject画面で、
"Flex 3 Project"を選択。"名前"、"場所"は適当に。パッケージはブランクでもOK。
"プロジェクトフォルダーを作成する"は、まあチェックしときましょう。
これで「OK」をクリック

3ペインで右ペイン(プロジェクトペイン)に、"bin"、"lib"、"src"フォルダが作成されており、src配下にMain.mxmlが自動生成されてます。
このMain.mxmlをダブルクリックすると、左ペインにソースが表示されます。

Main.mxml(自動生成直後)
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
 
</mx:Application>

このMXMLファイルにRed5との接続処理などをがりがり書いていってもいいのですが、ここは知ったげにViewとLogicの分離を考慮してコードを書いていこうかと思います。
つまり、MXMLにはView(画面、ユーザインターフェース)、これとは別のActionScriptにLogic(処理)を受け持たせるということです。
さて、次はActionScriptのファイルを作ります。

HelloTest.asの作成
プロジェクトペインの"src"を右クリック→「新規作成」→「New Class...」

New ActionScript Class画面にて、
パッケージ名はとりあえずブランクでOK
修飾子は、"public"を選択
名前は適当でOKですが、ここは安易に"HelloTest"としました。
インターフェースには、
mx.core.IMXMLObject
を指定し、"インターフェースに合わせたメソッドを自動生成"をチェックし、「OK」をクリック

これで、HelloTest.asファイルが作成されます。

HelloTest.as(自動生成直後)
package  
{
 import mx.core.IMXMLObject;
 
 /**
  * ...
  * @author handatec
  */
 public class HelloTest implements IMXMLObject 
 {
  
  public function HelloTest() 
  {
   
  }
  
  /* INTERFACE mx.core.IMXMLObject */
  
  public function initialized(document:Object, id:String):void 
  {
   
  }
  
 }

}


これでベースができました。
次回はこれらをベースにRed5接続、メソッド呼び出し、切断処理などを書いていきます。

2012年1月17日火曜日

SyntaxHighlighterを導入

これからコードを掲載することが多くなりそうなので、下記サイトを参考にテンプレートのHTMLをいじってSyntaxHighlighterを設定してみました。
どれどれ・・・
    /**
     * SyntaxHighlighter
     */
    function foo()
    {
        if (counter <= 10)
            return;
        // it works!
    }
うむ。表示に1テンポ遅れるのが気になる。
ちなみに、SyntaxHighlighterのcss、JavaScriptの置き場所はAmazon S3のようです。
後でgoogle-code-prettifyも試してみようかな。

[参考サイト]
Jump into!: BloggerにおけるSyntaxHighlighterの使い方
SyntaxHighlighter

2012年1月16日月曜日

コードホスティングサービスとバージョン管理システムを選ぶ

これからプライベートなチームでアプリ開発を行うのですが、メンバが少ないこともあり、ソースコード管理にあまり労力をかけたくないので、コードホスティングサービスの利用を検討しました。

私の勤めている旧態依然とした某SI会社では、バージョン管理システムはSubversionを使え!ということになっていますが、最近では分散型のバージョン管理システムが普及しつつあるようです。
チームメンバとのやりとりは基本的にインターネットを介することになりますので、分散型であればネット障害が起きてもオフラインで作業できますし、バックアップの意味でもよいかなと考えました。

2012年1月現在、分散バージョン管理システムといえば、Git、Mercurial、Bazzarとなっています。

今回求めているのは、

  1. 使い方の習得に極力時間をかけたくない
  2. Windowsで扱いやすい(たぶんメンバはみんなwinなので)
  3. Eclipseで使えるといい
コードホスティングサービスについては、
  1. できるだけ安価に
  2. 他人が参照できない非公開リポジトリを作れるとよい。
といったところで、いろいろ調べてみると、
Bitbucket + Mercurial
がよいかな、と思いました。
(Launchpad+Bazzarも気になりますが・・・)

Mercurialは日本語の解説書もありますし、Google CodeがMercurialを採用した理由に学習曲線を挙げているようですので、これを鵜呑みにしたいと思います。

また、Bitbucketのサービスについては、

  • 5ユーザまで無料
  • 容量無制限
  • プライベートリポジトリが作れる("UNLIMITED PRIVATE REPOS"と記載されています)
  • Wiki、Issuuトラッカーあり
  • バージョン管理システムにMercurialとGitが選べる

と、いろいろよさそうです。
とりあえずこれをメンバに勧めてみたいと思います。

(2012/3/3追記)assemblaも"private repository with unlimited users"とあるのでいいかも。SubversionかGitです。

[参考サイト]
Bitbucket
渋日記: Bitbucket買収?そもそもそれ何?という人のためのBitbucket紹介
BitBucket と TortoiseHg で快適分散型バージョン管理生活 - さよならストレス
Mercurial や Git が使える無料のリポジトリサービスを集めてみた - kなんとかの日記
Mercurial + Bitbucket = 最高! - present

分散バージョン管理Git/Mercurial/Bazaar徹底比較 (1/5) - @IT


2012年1月14日土曜日

新ブログをGoogle検索結果に表示させるぞ大作戦2(新サイトのインデックス登録)

自分のサイトを検索サイトのインデックスへの追加をお願いする仕組みがいくつかあるようです。

ping
Googleの場合は次のサイトがブログ登録フォームになっています。
http://blogsearch.google.co.jp/ping
画面のテキストボックスにインデックス登録したいブログのアドレスを記入して送信するだけです。

登録フォームを介さず直接登録もできます。
やり方は、下記アドレスをブラウザのアドレスバーに打ち込みます。
http://blogsearch.google.co.jp/ping?url=(URLアドレス か RSSフィード)

例えば、bloggerの場合は以下のようになります。
http://blogsearch.google.co.jp/ping?url=http://(自分のサイト名).blogspot.com/

さて、「RSSフィード」ですが、BloggerではATOMフィードが取得できます。
例えば、
http://(自分のサイト名).blogspot.com/atom.xml
または、
http://(自分のサイト名).blogspot.com/feeds/posts/default
で取得可能です。

2つめのものはファイルの形ではないように見えますが、ちゃんとxmlが返ってきます。
そして、クエリが使えます。こんな感じです。
  • http:// (自分のサイト名) .blogspot.com/feeds/posts/default?orderby=updated
  • http:// (自分のサイト名) .blogspot.com/feeds/posts/default? max-results=500
それぞれ、25件まで更新順、最新500件のデータが取得できます。

ウェブマスターツールによる操作
Googleウェブマスターツールを開きます。
Bloggerでサイトを作成している場合、ウェブマスターツールにはすでに自分のサイトが表示されていると思います。これがリンクになっているので、クリッククリック。

以下、インデックス登録に役に立ちそうな機能です。

「サイト設定」→「サイトマップ」
RSS・ATOMフィード(前述)を登録して、インデックス作成対象として認識してもらいます。
「サイトマップを送信する」ボタンをクリック、自分のサイトのRSS・ATOMフィードを指定して「サイトマップ送信」をクリック

「診断」→「Fetch as Googlebot」
指定したURLをGoogleインデックスへ送信できます。
テキストボックスにサイトのURLを指定し「取得」した後、"インデックスに送信"のリンクをクリック


「サイト設定」→「クローラのアクセス」
サイトのコンテンツをクロールする方法を指定し、テストすることができます。



[参考サイト]
Blogger に移転してから検索にヒットしない?

Blog のプロモーション(Google)

2012年1月13日金曜日

WordPressブログサイトのGoogleウェブマスターツールへの登録方法

Google、Bingなどの検索サイトでは、ウェブマスターツールを提供しています。
ウェブマスターツールとは、自分のサイトが検索サイトにどのように登録されているか、などが確認できるツールです。

ウェブマスターツールで自分のサイトの情報を見るには、そのサイトの所有権が自分にあることを証明する必要があります。
(他人が勝手に自分のページを検索できなくしたりすると困りますよね。)

ここではWordPressのサイトをGoogleのウェブマスターツールへ登録する際の手順をメモしています。

Googleウェブマスターツールにて
トップ画面の「サイトを追加」ボタンを押す
自分のWordPressサイトのアドレスを入力して「続行」

"所有権の確認"画面
「別の方法」タブで「メタタグをサイトのホームページに追加」を選択
metaタグが表示されるので、content="(メタキー)"の(メタキー)の部分をコピー
画面はそのまま開いておく。


ここからWordPress側の操作(別画面で)
ダッシュボードから、「設定」→「ツール」→「利用可能なツール」
"Webマスターツール認証"でGoogle Webmaster Toolsのメタキー入力欄に、コピーしていたメタキーをペーストし、「変更を保存」ボタンを押す。


再びウェブマスターツールでの操作
「確認」ボタンを押す。
これでWordPressサイトの所有権が確認され、ウェブマスターツールでWordPressサイトの管理ができるようになります。

新ブログをGoogle検索結果に表示させるぞ大作戦1(旧サイトのインデックス削除)

昨日からこのブログがGoogleで検索しても表示されないことで悲しんでいたのですが、いつまでも悲しんではいられません。
このブログをGoogle検索結果に表示させる作戦を立てるべく、得意のインターネットでいろいろ調べて、やってみました。

検索サイトがWeb検索を行う仕組み
まず、Webロボット(ロボジーのようなロボットではなく、プログラムですよ)がインターネットのそこかしこを泳いでサイト情報を集め、内容を分析して索引(インデックス)を作成します。
検索サイトのサーチエンジンはこのインデックスを元に検索結果を作成・表示するので、自分のサイトやブログが検索結果に表示されるためには、このインデックスに登録されている必要があります。

インデックスが作成されるにはサイトを新規作成してからしばらく時間がかかるみたいです(ロボット君がんばって泳いで)。
せっかちな人はこのロボット君にインデックスを作ってもらうように依頼することができるようです。
また、逆に検索されないようにすることもできます。

問題なのは、
他のブログサイトから移行したときで、移行前のサイトがそのまま検索結果に表示されてしまうという状況になってしまいます。(もしかしたら記事内容が同じものだとまずいのかもしれません。こちらは未調査)
そこで、まずは旧サイトをどうにかしないといけないな、ということになります。
私はWordPress.comから移行してきましたので、次のことをやらないといけなんでしょう。

  • WordPress側に何か設定をして、検索サイトから検索されなくする。(Googleさん無視してもらう)
  • Googleさん側で WordPressサイトを検索できないように設定する。
調査の結果、WordPress側に呪禁を施したrobots.txtをサイトのルートに設置するか、下記のような呪文をサイトに書くとインデックス作成対象外になるそうです。
<meta name='robots' content='noindex,nofollow' />
しかし、残念ながら自分の使っていたWordPress.comはこのようなことを直接行う術がなさそうです。
そこで、WordPressのダッシュボードから設定します。

WordPressでのインデックス禁止設定
ダッシュボードにて、「設定」→「プライバシー」
"検索エンジンによるサイトのインデックスを許可しない。"
を選択して、「変更を保存」をクリック

これでおそらく、下記ファイルができあがるのではないかと思います。
http://(自分のブログ名).wordpress.com/robots.txt

そして、このファイルの中身はこうなっています。完全にお断りモードです。
User-agent: *
Disallow: /

これで次回クロール時にインデックスが削除されそうです。

せっかちな方はウェブマスターツールからURL削除リクエストが可能です。
削除要件を満たしておく必要がありますが、WordPressの上記手順を実施していれば問題なさそうです。

GoogleウェブマスターツールでのURL削除リクエスト
まずはこの記事の手順を実施。
その後、ウェブマスターツールより、登録したWordPressサイトを選択して下記を実施します。

「サイト設定」→「クローラのアクセス」→「URLの削除」タブ を表示
「新しい削除リクエストを作成」をクリックし、削除するサイトのURL(つまり、旧ブログサイトのURL)を入力して「続行」をクリック
確認画面で「リクエストを送信」をクリック

これでよし。
。。。思ったんだが、ステータスが結構長い時間保留中になっている。
しばらく待つかな。


2012年1月14日追記 ウェブマスターツールを見ると、ちゃんと削除されていました。

2012年1月12日木曜日

Google検索でこのブログサイトが検索できない。

せっかくBloggerで書いているのに。
まだインデックスされてないんだろうか。
しばらくしたらクロールしてくれるかな。

Red5でHello World(1) - サーバ編

※他のRed5関連のエントリはこちら

FlexアプリからRTMPでRed5側のメソッドを呼び出し、実行結果をFlexに返す、という超簡単なプログラムを作ってみよう。
まずはRed5(サーバ)側から。

とっかかり、何もわからんが、やるべきことは

  1. "Hellow, World."という文字列を返すメソッドを含んだクラスを作る。
  2. 作成したクラスをRed5へ配置し、動くようにする。

に違いない。ということでやってみる。


Eclipseでのプロジェクトの作成、Red5サーバーの設定
せっかくEclipseのRed5Pluginをインストールしているので、これを使って参考サイトを見ながらプロジェクト作成からやってみよう。

  • Eclipseのメニューから、「ファイル」→「新規」→「動的Webプロジェクト(Dynamic Web Project)」で新規プロジェクトを作成。プロジェクト名は適当でOK。
  • 一番最初にプロジェクトを作成するときは、ターゲット・ラインタイムが<None>になっているはずなので、「新規ランタイム」ボタンをポチる。
  • 新規サーバ・ランタイム環境の画面が表示されるので、フィルターに"Red5"と入力してみる。 Red5Plugin がちゃんとインストされていれば"Red5 Server Runtime"が選択できるはず。
  • JREに1.6 、Runtime Directoryにred5.jarが格納されているフォルダ(Red5にインストールフォルダ)を指定して、"完了"ボタンをポチる。
  • あとは適当に完了ボタン押下。

これでプロジェクトができた。
あと、「サーバ」タブでサーバ定義しておこう。

  • 右クリック→「新規」→「サーバー」
  • サーバータイプに"Red5 Server Runtime"を選択。「サーバーのホスト名」はlocalhostかIPアドレスかな。サーバ名は適当。たぶん自動で作成されるのでそのまま使った。サーバー・ランタイム環境も "Red5 Server Runtime"。これで「次へ」
  • (ここ重要)"Auto Deploy Directory"にRed5インストールフォルダ配下の"webapps"を指定。"Start Script"と"Stop Script"は、これまたインストールフォルダにある"red5-debug.bat"、"red5-shutdown.bat"を指定。サーバ・ポート、デバッグ・ポートはデフォルトの5080、87787のまま(ちなみにこの2つのバッチファイルはそのままだとうまく動かなかったので書き換えてしまった)。これで「次へ」。
  • 追加および除去の画面が表示される。さっき作ったプロジェクトが使用可能欄に表示されているはずなので、これを選択して「追加」ボタンをポチる。これで「完了」
これで、Eclipse上からRed5の開始、停止、作成アプリのデプロイまでできるようになるようだ。Tomcatプラグインと同じような感じ。

[参考サイト]
Creating Red5 Projects with Red5 Plugin


Applicationクラスとメソッドの作成
ネットでいろいろ調べてみると、どうやら
org.red5.server.adapter.ApplicationAdapter
を継承したクラスを作成して、そこに適当にメソッドを実装すればいいらしいことが判明。
さっき作ったプロジェクトの"Java Resources"→"src"に適当にパッケージ作って、そこにJavaクラスを作成する。
クラス、メソッドは下記参考サイトのものをそのまんま書きました。
作成したクラス名は"Application"としたけど、もしかしたらなんでもOKかな。

[参考サイト]
[Red5入門コース第3回]サンプルアプリケーションの作成



作成したアプリケーションのRed5へのデプロイ
Red5ってなんかTomcatっぽいし(2012/2/26追記 Jettyがベースのようですね)、インストールフォルダに"webapps"ってフォルダあるから、たぶんこのこの中に自作アプリ用のフォルダ、WEB-INFとかフォルダ作って、WEB-INFの中にディプロイメントディスクリプタ(構成情報ファイル)とか書いとけば動くんじゃない?と、なんとなく思うわけだ。
またまた得意のネットで調べてみると、どうやら次の3つのファイルが必要になるみたい。
  • red5-web.properties
  • red5-web.xml
  • web.xml
web.xmlはまあ普通として、他の2つはRed5独自っぽいよね。
0から手書きは面倒なので、下記参考サイトをガン見して3つのファイルを作る。
  1. Red5にインストールしたデモSOSapmleのフォルダ(webapps/SOSample/WEB-INF)にあるred5-web.properties、red5-web.xmlの2つのファイルをコピって、Eclipseのプロジェクトの"WebContent"→"WEB-INF"にペーストして元を作る。 web.xmlはもともとプロジェクト作成時に自動生成されているものを利用する。
  2. 各3つのファイルをEclipse上で開いて自分のアプリ用に修正、追記する。
     red5-web.properties・・・コンテキスト・パスを修正(必要があればバーチャルホストも)
     red5-web.xml・・・beanタグのid="web.handler"のclassを、自作のApplicationクラスのフルパスに修正
     web.xml・・・context-paramタグ、webAppRootKeyを追記

ここまでやってやっとデプロイできそう。

デプロイはRed5Pluginを使って実施。
さっき作った"サーバー"を上を、 右クリック→「公開」
これで、webappsフォルダに自分のアプリケーション用のフォルダが作成され、必要なファイルが適切なフォルダに配置されるのだ。

ここで、Red5を起動させて変なエラーがでないか確認してみよう。
"サーバー"を上を右クリック→「開始」とするとコンソールタブに切り替わり、Red5の起動ログが出力されていく。この中に、
[INFO] [Launcher:/(自作アプリの名前)]・・・
みたいなログが表示されていれば無事にデプロイされている、はず。
ちなみに、停止するには、"サーバー"を上を右クリック→「停止」。

[参考サイト]
red5を使ってライブストリーミングアプリケーションをつくる


Red5サーバ側はここまで。
次回はFlex側じゃー!

2012年1月10日火曜日

Red5アプリケーション開発環境の整備(3) - Flex開発環境


クライアント側はFlash(Flex)となるのでFlashの開発環境が必要。
Flexの開発には何通りかある模様。
  1. Adobe Flash Builderを利用する。
  2. Flex SDKをインストールし、テキストエディタでガリガリ書く。
  3. FlashDevelopを利用する。
Adobe Flash Builder
製品版は85,000円也。試用版として無料で利用できる期間がある。
ダウンロードにAdobe IDが必要。作成しましょう。
サイズが大きい(1GB近くある)。
たぶん便利なので、お金がある人はこちら。
[参考サイト]

Flex SDK+テキストエディタ
めんどくさそうなので却下。

FlashDevelop
フリーのFlash統合開発環境。
てきとうにコーディングしていても補完候補やバルーンヘルプが出てきて楽。コンパイルもボタンひとつ。
導入したバージョン(4.0.0 RC3)ではFlex SDKがインストーラに同梱されているので、別途導入する必要なし。
[参考サイト]

というわけで、取り急ぎFlashDevelopを使って開発することにした。
インストールは上記の本家サイトからインストーラをダウンロードしてダブルクリックするだけ。
なお、.Net2.0が必要となるみたいなので、入ってない場合は事前にインストール要。

環境構築はこれでおしまい。
次はRed5でHello, Worldだ。

Red5アプリケーション開発環境の整備(2) - Eclipseのインストールと設定


さて、Red5アプリ開発、サーバ側はJavaでの開発になるので、Eclipseを使うことにしよう。

Eclipseのインストール、日本語化
Eclipseはしばらく見ないうちにずいぶんバージョンアップしたようだ。
インストールしたバージョンはIndigo (3.7.1) 。
後でRed5 IDE Pluginも入れるのだが、サイトの説明(参考サイト)によると、
You must use the JEE distribution of Eclipse. The standard Java distribution will not work.
とのことなのでEclipseダウンロードサイトにて「Eclipse IDE for Java EE Developers」を選択。
ダウンロードしたzipファイルを適当なフォルダに展開して終了。
日本語化はおなじみのPleiadesで実施。
SubversionクライアントとしてSubversiveを使いたいので、Eclipseマーケットプレース(こんなのできたのか!)から
「Subversive-SVNチーム・プロバイダー」もインストール。

Red5 IDE Pluginのインストール
通常プラグインをインストールする方法と同じく、「新規ソフトウェアのインストール」からプラグインのサイトを指定してインストール。
サイトのアドレスは下記参考サイトに記載されています。
表示されたリストから「Red5 Feature」を選択して何事もなくインストール完了。
[参考サイト]

Red5アプリケーション開発環境の整備(1) - Red5のインストール


とあるアプリケーションを作りたいと思い立ちましたが、それには動画のストリーミング配信が必要でした。
AdobeのFlash Media Serverを導入できればいいのですが、製品版115,500円と貧乏人の私には手がでません。
そこで、オープンソースのRed5というFlashサーバを利用することにしました。
[参考サイト]

Red5のインストール
Windows7 Home Premium Editionにインストール。
動作にはJava6が必要とのことなので、未導入の場合はOracleのサイト(もうSunじゃないのね)からあらかじめインストール。
導入したRed5のバージョン(Red5 0.9.1 Final)では、インストール時にIPアドレスとポート番号を入力する必要がありました。
当方、家庭内ネットワークを構築しているので、インストールマシンのIPアドレス、ポート番号は定番らしい5080を設定しました。
(たぶん後から設定変更できるんじゃないかと思います)
インストールした際にWinのサービスに登録され、自動起動に設定されますが、開発時は頻繁に停止、再起動するはずですので、サービスの設定は手動に変更しました。
また、インストールフォルダにあるred5-shutdown.batとred5-debug.batはそのままだとうまく動かなかったので、書き換え。
インストールされたものを眺めると、どうやらTomcatをベースにSpringやらなにやらでカスタマイズしてFlashサーバにしているようです。
[参考サイト]

Red5の起動、そしてデモで遊ぶ
インストールフォルダにあるred5.batをコマンドプロンプトからたたくと起動します。
起動後、ブラウザからhttp://(IPアドレス):5080/にアクセスするとトップ画面が現れます。
デモのインストールと遊び方は下記サイトを参考に(ちょっと画面構成等が異なりますが)。
OFLA Demo、Publisher、Shared Ballの3つのデモの説明があります。動画配信もいいですが、個人的Shared Ballがおもしろいと思いました。
[参考サイト]