2013-06-28

Scientific LinuxにRをインストールする

Scientific LinuxにRをインストールしようとしたのですが、最初にちょっと手間取りました。実は簡単にインストールできるコツがあるのでメモ書き。ポイントは2つです。
(1)EPELリポジトリの追加
Rは実はyumで一発でインストールすることができます。しかし標準のリポジトリではだめで、EPELレポジトリを指定する必要があります。

(2)EPELを指定したyumの実行
yumでEPELを指定するだけです。あっという間にインストールは完了です。
//yum-prioritiesパッケージのインストール
$ yum -y install yum-priorities
//EPELリポジトリを追加する
$ wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ rpm -ivh epel-release-6-8.noarch.rpm
// Rのインストール
$ yum --enablerepo=epel -y install R
view raw install_R hosted with ❤ by GitHub
それでは、快適なR生活をお楽しみ下さい。

2013-06-26

Kinect Interactionsのグリップ情報(HandEventType)を検知する

Kinect for Windows SDK1.7には、
  • Kinect Fusion ・・・リアルタイム3Dモデリング
  • Kinect Interactions
という2大新機能が実装されました。今日は後者の話です。Kinect Interactionsでは、手のひらの状態を検出できるようになりました。具体的にはグー(Grip)とパー(GripRelease)の状態を検知できます。そのために、stream_InteractionFrameReadyというイベントメソッドが新たに用意され、この中で手の状態(HandEventType)を調べることで、状態を検出できます。具体的には下記のような記述になります。

void stream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e){
using (var interactionFrame = e.OpenInteractionFrame()){
if (interactionFrame != null){
var userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
interactionFrame.CopyInteractionDataTo(userInfos);
List<InteractionHandPointer> hands = new List<InteractionHandPointer>();
foreach (var user in userInfos){
if (user.SkeletonTrackingId != 0){
foreach (var hand in user.HandPointers){
hands.Add(hand);
if (hand.HandEventType != 0){
Debug.WriteLine("startKinect" + hand.HandEventType);
}
}
}
}
}
}


OpenCVにてUSBカメラの映像を表示する(OpenCVSharp利用)

OpenCVSharpを利用して、USBカメラの映像を取ってくるサンプルです。

Cv.NamedWindow("sample", WindowMode.AutoSize);
CvCapture videoCapture = Cv.CreateCameraCapture(0); //ここはUSBカメラのID
//サイズを320,240にしておかないとエラーになる感じ
double w = 320, h = 240;
Cv.SetCaptureProperty(videoCapture, CaptureProperty.FrameWidth, w);
Cv.SetCaptureProperty(videoCapture, CaptureProperty.FrameHeight, h);
if (videoCapture == null){
//ここでカメラがない場合のエラー処理
}
while (Cv.WaitKey(1) == -1){
// カメラから1フレーム取得する
IplImage image = Cv.QueryFrame(videoCapture);
// ウィンドウに画像を表示する
Cv.ShowImage("sample", image);
}


2013-06-22

GitHubで一時的にアカウント停止状態になったしまってわかったこと

昨日、GitHubのアカウントが一時的に停止状態になってしまったので、その件について、、、

突如アカウント停止に
最近、GistにハマっているのでいつものようにGistにコードを流し込んでいたところ、突然、アップした結果が見れなくなり、下記のようなメッセージも出てくるようになりました。


“our trusty robot, Hubot, seems to think you are not a human.”って、特に変なアップをしたわけでもなく、アカウント情報にも特に不備はなく、、、何かの間違いだろうと思ったのですが。

アカウント停止になるとどうなるか?
(1)第3者がGistにアクセスした場合
以下の様なメッセージが出ます。これは、「存在しないgistのURLにアクセスした場合」と同じ意味です。
(2)第3者がGithubにアクセスした場合
以下の様なメッセージが出ます。これは、「存在しないGithubのURLにアクセスした場合」と同じ意味です。


(3)BLOGへの埋め込みはどうなるか?
コードの部分は全く表示されません。

データが消えてしまうのか?
結論から言うと、データは残ってます。アカウント停止と言いましたが、実際には以下の状態になります。
(1)ログインは可能
(2)パスワードの変更も可能
(3)GistへのコードのアップロードもOK
(4)自分のGithubのレポジトリーは見ることができる(アップは試してません)
(5)アップした自分のGistのコードを見ることはできない(上記のWhoopsメッセージがでる)
つまり、上記のように第3者からは全く見ることはできなくなりますが、中身は生きているということになります。

解決方法
サポートへ「私は人間です」とメールをするだけです(笑)。問い合わせサイトからもできますが、念のためメールにも送りました(もちろんちゃんとした文章は書きましょう。もちろん英語で)。
今回については、アカウント停止が発覚した夕方にサイトを経由して問い合わせをしたのですが、なかなか返事が来ないので、夜の23時頃にメールで問い合わせをしました。そうすると、よく朝の8時にメールに対して返事が来ていて、無事回復していたようです。

クラウドサービスの以外な盲点
この手のクラウドのサービスが利用できなくなった場合の怖さをちょっと感じました。この手の世界的なサービスが突然終わるということはまずないと思ってますが、こういう形で使えなくなるとは、、、今回はちょっと盲点でした。
個人的には、
  • サーバ類を自前で管理する
  • サーバ類をクラウドサービスに任せる
ということの双方の利点と欠点を考えた上で、後者を選んでます。その考えは今回の件があっても変わらないです。ただ、100%頼るのもよくないなとあらためて思いました。

Github/Gistはこれからも使い続けますよ
こういうことがありましたが、Github、とくにGistについてはこれからもガンガン使い続けるつもりです。ラボの学生へのサンプルコードを示すときにGistはとてもいい媒体になりますし、BLOGにも反映できますしね。暇な時は、おちラボのGistを覗いてみて下さい。




2013-06-20

C#:DynamoDBにMapperを利用してデータを保存するサンプル

C#でもDynamoDBを操作することになりそうなのでそのサンプルです。Javaの場合は高レベルAPIであるMapper系のクラスが用意されていましたが、C#でも同様にありました。データクラスにアノテーションを書いて、クライアントクラスで利用するといった感じで、使い方もほぼ同じだと思われます。

using Amazon.DynamoDB;
using Amazon.DynamoDB.Model;
using Amazon.DynamoDB.DataModel;
public static void Main(string[] args) {
Console.WriteLine("Setting up DynamoDB client");
client = new AmazonDynamoDBClient(RegionEndpoint.USEast1);
DynamoDBContext context = new DynamoDBContext(client);
SampleData sample = new SampleData();
sample.id = "0000";
sample.name = "ochilab";
sample.value = "日本語";
context.Save(sample);
}
using Amazon.DynamoDB.DataModel;
[DynamoDBTable("DynaTest")]
class SampleData {
[DynamoDBHashKey(AttributeName = "id")]
public string id { get; set; }
[DynamoDBRangeKey(AttributeName = "name")]
public String name { get; set; }
[DynamoDBProperty("value")]
public String value { get; set; }
}
view raw SampleData.cs hosted with ❤ by GitHub
本家チュートリアル(Using Amazon DynamoDB Object Persistence Framework - An Introduction)を参考にしました。

2013-06-16

Goolge Apps Script勉強会

2013年7月5日(金)に、京都リサーチパークにて、KyotoGASとGDG京都主催のGoogle Apps Script勉強会を開催します。

私は、GDG京都スタッフとしてGoogle Apps Script(GAS) 概要について最初に話しますが、他にもGASをビジネスで利用されている方の事例紹介や、Google Developer Expertの方のHangout等の予定されています。

GASについては、本BLOGでも最近取り上げていますが、教育システムへの利用も含め、いろいろなポテンシャルを秘めていると思っています。
興味のある方は下記を御覧ください。
KyotoGASさんとGDG京都のGoolge Apps Script共催勉強会