2012年6月20日水曜日

いまさらながら、Mavenを使ってみた。

「昨日の晩ご飯は何食ったかな?」
というぐらい私の記憶力はひどいものだ。
Javaのライブラリの取得のために初めてMavenを使ってみたのだけれども、少し嵌まったところがあったので、メモを残しておこう。

2012年6月17日日曜日

[Spring] JdbcTemplateとC3P0を使ってデータベースアクセス (前編)

その昔、Javaプログラマ達はJDBCを直接使ってデータベースへのアクセスをしておったのじゃ。
それはそれは長く退屈なコードじゃった。。。

2012年6月5日火曜日

2012年5月13日日曜日

[Red5] 録画ファイルの保存先とかを変更してみよ〜

クライアント側で撮っている動画をサーバ側に保存するとき、デフォルトだと
webapps/<MyAppName>/streams
に保存されるのだけれども、やっぱstreamsのところ変えたいよね。

ということで今回はこの保存ディレクトリ、録画ファイル名をカスタマイズする方法を。

2012年4月30日月曜日

[Mac] MySQL使い方メモ

アプリのデータを保存するためのデータベースとしてMySQLを入れてみようかな。

数あるDBMSの中でMySQLを選んだのは、OracleもSQLServerもPostgreSQLもなんとなく触ったことあるけど、いまやなぜか最も普及しているMySQLだけ触ったことかったので。

2012年4月8日日曜日

[Red5] ApplicationAdapter エントリポイントのメモ

★ApplicationAdapterで定義されているメソッド
☆ApplicationAdapterの上位クラスで定義されているメソッド
●IStreamFilenameGeneratorで定義されているメソッド
呼び出される順番に記載、引数は一部未記載。

2012年4月6日金曜日

[Blogger] テンプレートを変えたんですが。。。

SyntaxHighlighterが消えた?
記事タイトルとブログタイトルの順番も元に戻ってしまった!
がーん。
テンプレート変えても大丈夫なようにできるのかな~。

 2012/4/6 google code prettifyにしてみました。


2012年4月4日水曜日

[Red5] SLF4j+logbackでログを出力してみたよ

またも1ヶ月ぶりのエントリとなります。週1ぐらいで書ければいいんですが。。。

しかし、アプリってやっぱログ出ないとまずいよね〜(何が?)。
なので、今回はログ出力のやり方を。

2012年2月28日火曜日

近況 2012年2月28日

前回エントリからしばらく空きました。
開発の方はこつこつとやってきて、やっと動画の録画と再生ができたところです。
課題がどんどん挙がってきますが、1つずつちぎっては投げていきたいです。

さて、今後書き予定のエントリは、

・Red5設定などの雑記
設定ファイルやリモートサーバへのアプリのデプロイとか。

・Red5を介したカメラ映像の録画と再生

・FlashDevelopプロジェクトのフォルダ構成

・FlexにおけるViewとLogicの分離
MXMLとActionScriptの役割分担、コードの書き方について。
MXMLにロジックをごちゃごちゃ書くのは好みではないので。

・Macで開発する場合のツール類
MercurialやFTPクライアント、画面キャプチャツールとか。
ただ、FlexはWinでやるほうが効率いいかも?

そういえばこのサイト、2012/1/10頃にスタートしてぼちぼち600PVぐらいです。
こんな文字だらけの内容をお読みいただいた皆様、ありがとうございます。
海外からアクセスされた皆様、日本語でごめんなさい。
リファラスパム業者の方々、めげずにがんばってください。

2012年2月9日木曜日

Mac初心者の諸々メモ

・Finderの「よく使う項目」とは何か?
/ユーザ/(ユーザ名)/ の中の各フォルダと、
/アプリケーション フォルダ
が表示されている。

ターミナルで見ると下記フォルダに対応しているようだ。
/Users/(ユーザ名)
/Applications

Safariでダウンロードしたファイルは「ダウンロード」フォルダに格納される。zipなどについては自動で解凍され、もとのファイルは削除される。

・アプリケーションのインストール
「アプリケーション」フォルダにアプリのファイルをコピーするだけ。

個々のアプリケーションのファイルは、Macの作法により複数のフォルダやファイルで構成されたものをパッケージ(アーカイブ)している模様。
例えば、「iTunes」は実際はiTunes.appというファイルにパッケージされている。Finderからみると「iTunes」としか見えない。
長クリック(タッチパッドだと二本指クリック)で「パッケージの内容を表示」とするか、ターミナルから中身を見ることができる。

・dmgファイル
ディスクイメージファイル。
ダブルクリックするとデバイスにマウントされて中身が見れるようになる。
アプリケーションはよくdmgファイルで配布されているようだ。


・ショートカットと記号
^とか↑とか見て「キーボードのどこにあるんだ?」と思った。
詳細は下記サイトで。
Mac OS X のキーボードショートカット

今のところ、保存(command+s)、ウィンドウ、タブを閉じる(command+w)、アプリケーションを終了(command+q)をよく使う。
2012/4/17 Command + Option + Escで起動アプリケーションのリストから強制終了できる。

・ターミナルで使用できるテキストエディタ
pico がいいのだろうか。

.(ドット)で始まる隠しファイルを編集するときとかに必要。

(picoって実際はnanoらしいよ。)
viやEmacsも使える模様。

・「パスを通す」
Linuxと同じ。bashの設定ファイルを編集する。
ユーザホームの .bash_profile にexportの記載をする。
(追記)viかなんかで編集した後、有効化。
source ~/.bash_profile

パスの確認は、
echo $PATH
または
printenv PATH


[参考サイト]
ターミナルのことを調べてみた。 - ザリガニが見ていた...。
Mac OS Xで環境変数にPATHを追加する方法 at HouseTect, JavaScriptな情報をあなたに

2012年2月8日水曜日

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

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

Mac miniのメモリを増設したおかげでレスポンスが結構よくなったので、開発マシンとすべく、いろいろいじっております。
今回は、Win7でもやったRed5のサーバ側アプリ開発環境を構築してみた。

Red5のインスト
まず、Red5のサイトからdmgファイル(ディスクイメージファイル)をダウンロード。今回は、Red5 0.9.1 Final のOSXのリンクから。

ダウンロードしたdmgファイルをダブルクリック。
別ウィンドウに表示されたRed5の実行ファイルらしきものを「アプリケーション」フォルダにコピー。

これでおしまい。なんてこった。なんなんだMac。

Javaインストール状況の確認
ここでJavaのインストール状況を確認しておく。
ターミナルから"java -version"とすると確認できるが、一番最初に確認する場合は「Javaインストールします?」みたいなダイアログが出た。
ここはあがらわずインスト。
インスト後、もう一度上記コマンドを打つと無事にバージョン確認できた。
ちなみに1.6.0_29だった。

しかしMacすごいな。
Javaもantもsvnも最初から入ってる。

Red5、発進
さて、LaunchpadにRed5のアイコンが追加されているはず。
これをポチっとするとDoc上でRed5アイコンがぴょんぴょん飛び跳ねて、しばらくするとおとなしくなる。
鼓動がおさまったらRed5サーバのフロントページを見てみよう。
http://localhost:5080/
うむ。動いておる。動いておるぞ(阿部サダ高階通憲中井貴一 平忠盛の口調で)

でも、これじゃあログとか動いてるとか見れなくてつまんないので、起動スクリプトから起動してみる。
とりあえず、Doc上のRed5は強制終了。

「アプリケーション」フォルダにRed5をインストールした場合は、下記フォルダに起動スクリプトred5.shがいるはず。
/Applications/Red5.app/Contents/Resources/Java
ターミナルを開いてこのフォルダまで移動。
だがしかし、このスクリプト、このままでは実行できない。
ls -lで見てみると分かろう。
ファイルのパーミッションが実行可能に設定されていない。
パーミッションは、、まあ適当に744あたりで。
chmod 744 ./red5.sh
これで実行できるようになった。
停止スクリプト red5-shutdown.sh も同じようにパーミッションを変更。

ところで、このフォルダの中にred5-debug.shがいないな。
作った方がいいんだろうか。

次は、Eclipseの設定だな。

2012年2月6日月曜日

いまさらながら、Mac mini (Mid 2011)のメモリを増設しました。

昨年の秋にMac miniを購入したのはいいのだけれども、その動作の遅さから使うのが億劫に。
これではいかんと思い、まずはお手軽にメモリ増強を実施。
これで快適に動いてくれるだろうか。しばらく使ってみる。

対応メモリ情報はこちら。
Mac mini (Mid 2011): Memory specifications and upgrades

普通のノートパソコンのメモリと同じ。
「You can use RAM module sizes of 1 GB, 2 GB, or 4 GB in each slot.」
とあるので、最大は4GB×2スロットの8GBだと思われる。
(どこかのサイトだと16GBに換えてるのもあったけど。)

購入したのはメモリはTranscendのもの。
もともと入っていたのは三星電子。ぐっばいミツボシ。

2012年2月4日土曜日

Android関連記事まとめ


Androidアプリ開発環境を作った~

AndroidでHelloWorldだ~

INFOBAR A01で自作Androidアプリをデバッグする準備


INFOBAR A01で自作Androidアプリをデバッグする準備

まずはAndroid端末(INFOBAR A01)の設定から
設定→アプリケーション設定→開発
「USBデバッグ」にチェック

これでとりいそぎPC(Win7)にUSBケーブルで接続してみるが、、、
ドライバがインストールされなかった。
Winちゃんいわく、ドライバが見つかりません とのこと。
そんなわけで、いったんUSBケーブルを抜き、Sharpのサイトへドライバを探しに出かけた。

シャープのドライバ配布サイトを確認したところ、2種類のドライバをインストールする必要があるようだ。
SH Developers Square -

まずは、INFOBAR A01用のドライバをダウンロード。
これはexe形式。PDFのインストールマニュアルもある。

ダウンロードしたexeファイルをダブルクリックでインストール。
特に困ることなし。

マニュアルによると「高速転送モード」に設定しろ とのことなので
設定→USB接続→USB接続モード
でそのモードに設定した。

マニュアルに書かれているようにUSBケーブルでPCに接続し、デバイスマネージャで確認したところ、ちゃんと認識されている。よし。

次に2つめのドライバ。「SHARP共通 ADB USBドライバ」をインストールする。
今回インストールしたのは、
usb_driver_SHARP_r4.6.zip
日付が今日(2012/02/03)だよ。ほかほかじゃん。
ダウンロードしたファイルは解凍してどこか適当なフォルダに置いておく。

デバイスマネージャを開き、「ほかのデバイス」を見ると、、、なにやらAndroidらしきヤツがありますな。
それを右クリックして「ドライバソフトウェアの更新」→さきほど解凍したドライバのフォルダを指定。
セキュリティ警告がでるけど無視。
特に何事もなく正常にインストールできた。

デバイスマネージャの表示が更新され、「Android Phone」というのが現れている。
「Android Composite ADB Interface」と表示されているので、これでよさそうだ。

adbコマンドでも確認できる。
コマンドプロンプトから、
adb devices
接続しているデバイスのシリアル番号が表示されているはず。

[参考サイト]


端末でのデバッグ用アプリの実行
実機でのデバッグでいちいちapkファイルを作ってはいられない。
こんなときはUSBケーブルでつないで実機でアプリを動かし、デバッグする方法がある。

まず、Android端末をUSBケーブルで接続。
そして、Eclipseで「デバッグの構成」を開き、先に作成していた"HellowWorld"の「ターゲット」タブを開く。
ここで、ターゲットを「マニュアル」に変更し、「デバッグ」をクリック。
すると、接続しているAndroid端末を選ぶことができる。端末を選んで「OK」。
これで実機で動作を確認することができる。

ただし、(次に書いている)apkファイルのインストールを行っている場合は、起動が拒否られてしまう。
この場合はadbコマンドでアンインストールするとよいみたい。

署名付きアプリのインストール
アプリができあがったら配布可能なパッケージファイルして、実機にインストールしてみることになるだろう。
自分で作成したアプリを個人的に利用するならこれでもいいのかも。

まず、署名付きapkファイルを作る。(ちなみにapkファイルはzip形式なんだそうな)

Eclipseにて、エクスプローラからHelloWorldプロジェクトを選択し、
右クリック→Androidツール→Export Signed Application Package...
プロジェクトを選択(ここではHelloWorld)して「次へ」

"Create new keystore"で新たしく署名を作成する。
ロケーション(とファイル名)は適当に決める。
パスワードを設定して「次へ」

エイリアス、パスワード、推奨年齢、開発者の名前(自分の名前ね)などを記載して「次へ」

apkのファイルをエクスポートする先を指定して「完了」

これでapkができた。

次にAndroid端末をPCに接続し、adbコマンドでapkファイルをインストールする。
コマンドは、
adb install -r -s HelloWorld.apk
つけてるオプションは、
-r 既に同じアプリが入っている場合にデータそのままで上書きインストールする
-s SDカードにインストールする
らしい。

で、なんかインストールに失敗したとメッセージがでた
(端末の画面にはアプリのアイコンが追加されているのだけれども)。
参考サイトによると、デバッグ用のやつが残ってて署名が一致しないエラーとのこと。
一度アンインストールしてから再度インストールを試みる。
アンインストールは下記のコマンドで実行
adb uninstall (アプリのパッケージ名)
この後、もう一度インストールのコマンドを打つと正常にインストールできた。
端末画面に現れたドロイドさんのアイコンをタッチすると、、、
おお、HelloWorldが表示されるではないか。

めでたし、めでたし。

[参考サイト]

AndroidでHelloWorldだ~


だがちょっと待ってほしい
Eclipseでプロジェクト作る前に、文字コードの設定をしておいたほうがいい。
ウィンドウ→設定→一般→ワークスペース
左下の「テキストファイルのエンコード」で
その他 「UTF-8」 を選択し、適用(またはOK)。

これをプロジェクト作った後からやると「R.javaが手動で書き換えられましたよ」という不吉な赤い文字がコンソールにでる。(R.javaは開発ツールが自動生成するんです。)

Androidプロジェクトの作成
ファイル→新規作成→その他
で「Androidプロジェクト」を選択。

プロジェクト名はもちろん"HelloWorld"を記入して「次へ」。
ビルドターゲットを選択する。ここでは Android 2.3.3 を選択して「次へ」。
パッケージ名を適当につけて「完了」。

これでプロジェクトとアプリのテンプレートまで生成されている。
参考書籍とは異なるテンプレートが生成されているが、まあよしとしよう。
(プロジェクトの構成については別途書きます)

ひとまず、AndroidManifext.xmlを書き換えてデバック可能にしておく。
プロジェクト直下のAndroidManifext.xmlをダブルクリックして開くと専用のエディタが立ち上がる。
「アプリケーション」のタブを開くとDebuggableという設定項目があるはず。
これをtrueにしておく。

生成されたHelloWorldアプリを試しに実行
見たところ、生成されたテンプレートはこのまま実行できそうだ。
とりあえず、
実行→デバッグ→Androidアプリケーション
で実行してみる。
エミュレータ(仮想デバイス)が起動し、しばらく待つとHelloWorld画面が表示されるはず。
やったぜ。

デバッグの構成の設定
先の環境構築の際に作った仮想デバイスをターゲットに指定しておく。
実行→デバッグの構成
「Androidアプリケーション」で"HelloWorld"をクリック
ない場合は、右クリック→新規で作成

「ターゲット」タブで前回作成した仮想デバイスを選択し「適用」をクリック。

エミュレータ画面が異様にでかい場合は、同じく「ターゲット」タブの
「エミュレーター・コマンド行の追加オプション」でオプションを設定する。
8割ぐらいの大きさにしたい場合は、
-scale 0.8
でOK。

Androidアプリ開発環境を作った~

いまさらながらではあるが、勤めている会社で初めてのAndroidアプリ開発研修が催されたので参加してみた。
忘れないうちに家で開発環境を作っておこう。

2012/2/3現在の手順メモ

・JDKのインスト
すでに入っていたので割愛(ごめんね)
ヴァージョンは6です。

・Android SDKのインスト
Android SDK | Android Developers
より、
installer_r16-windows.exe (Recommended)
をダウンロードしてダブクリ。
特に迷うことはなかった。

インストール後、「Android SDK Manager」が起動される。
起動時にすでに「Android SDK Tools」がインストールされている状態。
追加で下記をインストール。
ちなみに手持ちのAndroid端末はInfobar A01なのでAndroid 2.3.3は必要だな。
Andoid SDK Platform-tools
Android 4.0.3 (API 15)
Android 3.2   (API 13)
Android 2.3.3 (API 10)
Google USB Driver package
これだけ入れると結構時間がかかる。
コーヒーでも飲みながら気長に待つ。。。
途中でモトローラのMOTDEVアカウントの入力を求めるダイアログが12回ぐらい表示されるが、ひたすらCancelをクリック。
モトローラ狙ってないひとは最初から選択を外しておいた方がよさそうだ。

インストール処理終了後、再表示されたAndroid SDK Managerの一覧はなんだか変な状態。
いったん終了してもう一度起動してみると正常になった。

次に、購入した書籍にならってAndroid仮想デバイスを作ってみる。
Android SDK Managerのメニューから、
Tools→Manage AVDs..
Android Virtual Device Managerが立ち上がる。
右側の「New...」をクリック。

せっかくなので、手持ちのAndroid端末 INFOBAR A01に合わせて設定してみた。
Target Android 2.3.3
SD Card Size 1024MiB
SkinはResolution カスタム 540×960
Hardware Device ram size 512
あとはデフォルトのまま。
CPUは選択できないがARMになる。
Snapdragonだからいいか。

仮想デバイスの作成にはこれまた結構時間がかかる。
反応が返ってくるまで待機。

さて、作成が終わったらStartボタンを押して仮想デバイスを起動してみる。
Launchで起動。これも結構時間かかるよ。

あとは、adbコマンドがいつでもどこでも使えるように、PATHの設定をしておこう。
環境変数"PATH"に
(Android SDKのインストールフォルダ)\android-sdk\platform-tools
を追記する。

・Eclipse、ADTプラグインの導入
すでにJ2EE版をつかっているのだが、どうやらClassicでもいいようなので、
Eclipse Classic 3.7.1をダウンロードしてzipを適当なフォルダに展開。
そしていつものようにPleadesで日本語化。

ここからADTプラグインをインストールする。
ヘルプ→新規ソフトウェアのインストール
作業対象の「追加」ボタンで下記ロケーションを追加する。名前はわかりやすいものを適当に

https://dl-ssl.google.com/android/eclipse/
しばらくするとプラグインの一覧が表示される。
(一覧がうまく取得できないことがある。何回か試すとよい。)
「開発ツール」を根元からすべて選択してインストール。
途中でセキュリティ警告がでるが無視してOKを押下。
再起動しろと言われるので再起動。
再起動後、Android SDKのインストール画面が表示されるが、もうインストール済みなのでキャンセルする。

最後に、インストールしたプラグインとAndroid SDKのひも付け設定をしておく。
これをしておかないとEclipseでAndroidプロジェクトを作成したときにターゲットに何もでてこず困ったことになる。
ウィンドウ→設定 から
「SDKのロケーション」にAndroid SDKのインストールフォルダを設定

これでよし。

[参考サイト]
ADT Pluginのインストール - ADT Plugin for Eclipseのインストール - Android入門

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がおもしろいと思いました。
[参考サイト]