2012年12月31日月曜日

2012年を振り返る

ブログさぼりまくっているけど年末なので書いておこう。

2012年はまあいろいろありました。
とにかく会社を辞めてフリーランスになったこと、これが大きい。
3年間LotusNotesしか触れない現場にいて、他の現場でやれるのか不安も大きかったけど、
決断とチャレンジをして本当に良かったと思う。

職務経歴とか経験言語とかその辺りに今まではNotesしか書けなかったけど、
とりあえず今ではJava、Perl、Javascriptが書ける。
あの3年間は何だったんだと思ってしまう。

JavaもPerlも全然実績がなかったけど、なんとかやっている。
改めて仕事をくれたウサギの社長さんや僕を使ってくれている今の現場の皆さんには感謝したい。

まだまだスキル不足だとは思っていて、上記言語も使いこなせてるわけでもないので今後ももっと勉強したい。
TDDとかアジャイルとか勉強会には行くもののあまり実践出来ていないので出来るようにしていきたい。
あと2013年はへび年だからPythonを覚える。

プライベートでは1年と10ヶ月でルームシェアライフが終了したのが大きい。
沢山のモヤモヤした人が集まる素敵な場所だった。
ここでITも政治経済もアニゲー、アイドル、シモネタまで幅広く大いに語り、笑いまくった。友達から刺激やチャンスをいっぱいもらった。あの家に住むことで転職も彼女も出来たと言っても過言ではない。
次はもっとでかい20人規模のシェアハウスだけどこっちでも楽しくやっていけそう。
ただ、あんなに濃い話はできないんだろうな。

目標の一つだったフルマラソンは走れなかった。30Kも途中歩いてしまい微妙だった。
来年は走りたい。

2012年は変化が多い年だった。良い方向に。
2013年はとにかく前に進んでいく年だと思う。

2012年11月5日月曜日

さくらVPSのubuntuをアップグレードしてドハマリちう

しばらく10.04だったのを何気なくsudo do-release-upgradeで12.04にアップグレード開始。

お勉強用のサーバーだから壊れても大丈夫なんだけど、すぐにとても後悔することになる。

アップデートのノリじゃダメ絶対。



サーバーサイドの作業では基本だと思うけど

事前に落とし穴はないか下調べをしておく(誰かが踏んでいるはず)

何をやったか手順を残す(原因追求)

ってことは見に染みた。



まずはブートローダーの設定

http://www.machu.jp/diary/20120609.html#p01

こちらのエントリーが参考になった。



どこかで設定を間違ったようで全く起動しなくなってしまったので

さくらVPSのコントロールパネルからカスタムOSインストールで復旧。

メディアを入れて再起動してレスキューモードで立ち上げるイメージですね。




次はDNS。これはまだ未解決。

どうやらresokv.confの生成方法が変わったもよう。

http://mitaka1954.cocolog-nifty.com/blog/2012/05/ubuntu-1204-des.html

pingもどこにも通らない状態。



/etc/network/interfacesという所にdnsサーバーを指定してやればいいらしいけど、

再起動しても効かず。

http://d.hatena.ne.jp/namtcerid/20120531/1338439894



とりあえずresokv.confに直書きした。再起動すると消えるらしいけど、なんとか使えている状態。

早くどうにかしたい。

2012年10月27日土曜日

perl beginners #5

perl beginners #5に行ってきたレポートというか、出てきたトピックのあとで読むメモ。


Router::Simple
http://search.cpan.org/~tokuhirom/Router-Simple-0.13/lib/Router/Simple.pm

mojolicious
http://mojolicio.us/
https://github.com/yuki-kimoto/mojolicious-guides-japanese/wiki/Mojolicious

B::Deparse
http://perldoc.perl.org/B/Deparse.html
http://blog.livedoor.jp/dankogai/archives/50761629.html

あと、環境変数もまだまだ覚えていないのが多いなあと思った。
http://www.geocities.co.jp/SiliconValley-Sunnyvale/6128/perl/evalue.html

懇親会では今年のYAPCはあーだったこーだったトークが多かったので
来年こそは行こうと強く思った。

2012年10月13日土曜日

さくらVPS(Ubuntu 10.04.4 LTS)にNode.jsを入れようとしてつまったメモ

相当出遅れた感があるけど、いじってみようと思ったらつまった。

つまり方はだいたいはこの方と同じ。
http://d.hatena.ne.jp/motsat/20110813/1313214923 ソースから入れようとして
wget http://nodejs.org/dist/v0.8.11/node-v0.8.11.tar.gz
tar zxvf node-v0.8.11.tar.gz
cd node-v0.8.11
./configure 
make
でbz2がないと怒られる。
ImportError: No module named bz2:

Pythonは別の時に入れていて最新なので、 sudo apt-get install bzip2-develのみ実行。
が、結局同じエラーが出る。。
しょうがないのでapt-getに頼った。
ここのUbuntuの手順ならばすんなりいけた。
https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs npm

python-software-propertiesは
このソフトウェアは利用中の apt リポジトリを抽象化します。 ディストリビューションおよび独立ソフトウェアベンダーのソフトウェアソースの 管理が簡単になります。
らしいけどよくわからない。

2012年10月12日金曜日

Kinect for Windows SDK 1.6 は仮想マシンでも動く

買ったはいいが、ほとんど触れてなかったKinect。。
言い訳の一つに公式にはWindowsじゃないと動かないことがある。
(OpenNI等で頑張ればどうにかなるが)
しかも仮想マシンでは動かない。
僕はmacを使っているのでBootCampでWindowsを入れて、
Kinectを使う時にはいちいち再起動しなければいけない。
他にもやりたいことはあるのでついつい後回し。

しかし最新のSDKでは仮想マシンでも動くようになった。
http://msdn.microsoft.com/en-us/library/jj663803.aspx#SDK_1pt6_M2
http://blogs.wankuma.com/hatsune/archive/2012/10/09/290080.aspx
http://www.naturalsoftware.jp/blog/3611

アップデートしてみたところ、無事仮想マシンでもKinectを使うことができた。
これで言い訳が一つなくなった(汗)

ちなみに僕の環境は下記です。
  • MBA(13-inch, Mid 2012)
  • CPU : Core i7
  • MEM : 8G
  • VMWareFusion(Version 4.1.3) ※BootCampを呼び出し
  • Windows7(Professional 64bit)

2012年10月6日土曜日

青色申告会をやめた時のメモ

結論から書くと事務所に電話するだけで脱退できた。

本来は事務所へ行って書類への記入が必要らしいけど、
FAXあるかと聞かれて、ないと答えたらこの電話でよいと言われた。

最後に脱退理由は聞かれた。
税理士さんと知り合いになって面倒見てもらえるようになったと言ったら、
そうですかとあっさり終了した。



2012年8月25日土曜日

TDDBC大都会1.0に参加しました。

ずっと参加してみたいと思ってたんだけど、人気すぎて関東じゃすぐ埋まるので参加出来てなかった。
今回、大都会岡山で開催されるということで、うどん県への帰省がてらに参加させていただくことにした。
(結局のところ、仕事が詰まり気味で休みをもらいづらいのと、東京での飲み会があったりしてうどん県にはほとんど滞在しない。
まあ両親の健康状態がチェック出来ればそれでいい。まだまだ元気でいてもらわんと困る。)

それにしてもハンズオン型の勉強会の中でもTDDBCほど手厚いものは他にないんじゃないだろうか。
2,3ペアに一人ぐらいはTAがつく感じ。ちゃんと言語ごとに。

今回はJavaで参加しました。
以前に「バグがないプログラムのつくり方 JavaとEclipseで学ぶTDDテスト駆動開発」という本を読んでいて
jUnitは少し使ったことがあったのでペアの方に迷惑かけることもなく進められたかなと。
課題は大阪2.0と同じ。

テストを書く、通るようにコードを書く、テストを頼りにリファクタリングをする。
って流れはよくわかる。
でもやっぱりリファクタリングから先がどうも…。
自分にはオブジェクト指向だとか設計だとか、その辺の力も鍛えていく必要があると思った。
コードレビューして頂いてテスト漏れ指摘されたので、テストケースを考えるのも、鍛えなきゃだけど。

上京して、東京、横浜辺りでは毎日のように何かの勉強会が行われていて、恵まれているというか、盛り上がりがすげーなと思っていた。
だけど地方の(まあ岡山は大都会か)勉強会に参加してみて、地方でも盛り上げようとされている方が大勢いらっしゃって熱いなと思った。
ネットの発達でどうせどこでも仕事ができるなら、ノマドって言って都内の狭くて騒がしいカフェでMBAでドヤリングするより、地方で働いたほうがいいかもしれない。
今回会場提供して下さったシンフォームさんのオフィスは広くて快適そうだった。都内の家賃高くて狭いビルより生産性上がりそう。
(しかも各テーブルにでかいモニター置けるくらい充実の設備!)

スキル向上と働き方を再考するきっかけにもなってTDDBC大都会に参加して良かったと思います。

2012年8月1日水曜日

Jenkins ユーザ・カンファレンスに行ってきた。

Jenkins ユーザ・カンファレンス 2012 東京
http://build-shokunin.org/juc2012/

に行ってきた。

ハンズオン系ではなく、カンファレンス系なので、このイベントに行くことによってスキルが飛躍的に向上するわけじゃないけど、こういう大きいイベントに行くのも悪くない。

もちろん刺激になりました。
たくさんのエンジニアが集まっていて、どれだけJenkinsが注目されているかよくわかった。やっぱりみんなテストもビルドも嫌いだよねー。

Jenkins自体は「Jenkins実践入門」を読みつつ、サーバーに入れて動かしてみた程度で仕事では全然使えていない。

今の現場はテストもデプロイもほぼ主導で結構きつい。
こういうツールをちゃんと使えるようになって広めていかないと、と思う。
人の手が絡むと絶対にミスは起こるし、工数も無駄。
なるべく減らしていかないといけない。

導入、活用事例のセッションを中心に聞いてきたけど、推進しようとした人が孤立気味になっているような話もあった。
これはJenkinsに限らないけどトップダウンとボトムアップ、どっちも大事だなと思った。

2012年7月16日月曜日

第2回ペアプログラミング合コン

参加してきました。
http://connpass.com/event/631/
http://connpass.com/event/605/

今回のテーマはhtml/css/javascript(jQuery)でした。
お題は「古き良き時代のWebサイトを現代風に作り直す」でした。

男性枠は応募者多数ということで事前に課題を提出して、選考を勝ち残らなければなりませんでした。
お題自体はそんなに難しくなく、差がつかないんじゃないかと言われていましたが、ブログやGitHubなど、いろいろと見られてるらしいです。
ペアプロということでプログラミングスキルだけでなく、コミュニケーション能力も考慮されていたようです。
twitterとかで変態発言ばっかやってるとダメ…なのかな?

当日の様子
togetter: http://togetter.com/li/338429

90分1セットでペアを変えて2セットを行います。
女性には事前に課題が公開されていて、女性が考えてきたものをペアプロで男性がリードしながら具現化していくはずが、僕のペアの方はノープランで来られていたんで、さあどうしましょう?ってところからのスタートとなりました。
まあ何にせよ女性とプログラミングするのはサラリマン時代の新人研修依頼だったので楽しかったです。

ペアプロ自体初めてだったのですが、ペアプロにはペアプロなりのスキルが必要だなと感じました。

・ ゴールの共有
作りながら教えながら(ちゃんと出来ていたかはすごい不安)進めていくので、ところどころ脱線することがあり、ゴールが定まっていないとあれ?何してたっけ?ってなってしまう。コード書き始める時に何を作っているのか、どんな方針か話し合っておくことが大事だと思った。

・スピード感 
これは一人での開発でも同じだけど、うろ覚えでググりながらなんとかしてきたところをもっとちゃんと理解して、すぐ書けるようになっておかないとテンポが悪い。お互いがあれ?これってどうでしたっけ?って言いながらググり始めるのは非常にテンポが悪い。
お互い、もしくは片方がある程度のレベルじゃないと厳しい。

自分のペアは完成までもっていけなかったですが、ちゃんと出来ていたペアもけっこういたので完全に自分の力不足です。ペアになってくれた方、すいませんでした(;´Д`)
普段と違う所で、普段と違う人と開発することで今の自分を見つめなおすことができ、(どれくらいヘボいかを再認識させれたので)よかったと思います。

更にレベル上げてまた次回参加出来たらいいなあ。


運営の方々は男女ペアということでかなり気を遣われていたようでした。
アットホームな雰囲気でとてもよいイベントだったと思います。
ありがとうございました。

2012年7月6日金曜日

テスト駆動JavaScriptを写経する時の注意点

テスト駆動JavaScriptを写経中です。
なかなか理解が追いつかず苦戦しております。

そして注意点ですが、サポートサイトをチェックすることです。
http://tddjs.com/

この本は「リスト12-34」みたいにコードをたくさん載せてくれていますが、
どのファイルのどこに追加すればいいのかがわかりにくいです。

zipかgitでコードが落とせるようになっているので完成形、全体像をチェックしながら進めるとよいと思います。

特に写経を始める時には「Initial project states」に置いてあるコードをダウンロードしてから始めるとよいです。
jsTestDriver.conf等、必要なファイルは揃った状態で始められます。

僕の場合、
本文通りにsrc/以下のファイルにコード書いたのに動かない!
と思っていたらlib/以下に必要なファイルがあったりして無駄な時間を過ごしてしまいました。。。


2012年7月2日月曜日

第4回チューニンガソンに参加してきました。

@nise_nabe氏に誘われて第4回チューニンガソンに参加してきました。
http://www.zusaar.com/event/312053

 インフラ周りは全然わからん(かといってアプリ側すげー出来るかと言うと…)ので、周りの人がどんな風にやってるのか体感できればと思っていました。
実際手も足もでなかった(;´Д`)

内容はRailsのrefineryのコメントPOST/GET回数を10並列で一定秒数測定するというものです。
参加者一人ひとりにAWS EC2のインスタンスが配られてチューニング。
アプリのソースはいじっちゃダメで、RubyやMySQL、Gemのパッケージは入れ替えOK。
運営側も一定間隔毎に計測バッチ流してる感じ。
今回は大阪、名古屋、福岡等地方リモート会場もあったみたいです。

Rubyは以前さくらVPSに入れてみたりしてみましたが、環境構築からコケまくって涙目だったので良い思い出がなく、とりあえずMySQLからいじってみました。

テケトーにこの辺の値を増やしてみましたが全く効果出ず。
innodb_buffer_pool_size
table_open_cache
hread_cache_size
query_cache_size

むしろいじればいじるほど遅くなる。。。
チューニングわからん。
そしてMySQLは諦めてRuby周りへ。
なんとなくgem updateとかしてみたら動かなくなる(´;ω;`)ブワッ
Rubyわからん。

周りの人達は下記のようなことをしてたっぽいです。
・RubyをEnterprise Editionに入れ替え。
(Ruby1.8だったのですが、これだけでもかなりスコア上がったらしい。)
・nginx、passengerを使う
・varnishを使う
・DBをオンメモリにする
・RubyのGCを切ってみたり

わかってないことだらけである。
自分がカスだと言うことを思い知らされたのでまた一から勉強し直します。
リバースプロキシだとか、DBにしてもそうですが、キャッシュを使うってところを掘っていってみようかと思います。

2012年6月29日金曜日

Perl Beginners #3

初心者向けといいつつ、初心者向けじゃない勉強会、
Perl Beginnersにまたまた行って参りました。

仕事で少し遅れてしまい、会場に入ってみるといきなり、
Fluentdって単語が耳に入る。

はい?Perl勉強会じゃないの?

FluentdとはログをJSONでまとめてうまいことしてくれるものみたいですね。
http://fluentd.org/
覚えておかねば。
いつも思うけどこの勉強会ってそこそこレベル高いエンジニアでPerlもちょっとはやっとくかー人達が来ているんだろうなあ。

今回のテーマはDBということで、自分としてはあまり得意ではない領域なので、
・これから習得するならまずはDBI+MySQL
・DBIをきちんと理解してからORマッパ覚えたほうがいい
・慣れてきたらmemcachedとかにも手をのばす
というアドバイスが聞けたのは良かった。

今の仕事では過去に誰かが作ったDB関連の処理をまとめたクラスを呼び出してSQL書くくらいで自分で一からやる経験が足りてなかったので。
DBだけに限らず、WAFとかでも基本がわかっていないと使いこなせなかったりいざって時に困るような気がする。

あと、後置ifでmy宣言はしちゃいけないらしい。
↓↓こんなん
my hoge = "HOGE" if (foo == "FOO");


まあifがfalseで変数が未定義になるとあとでコケたりして面倒くさいでしょうね。

次はそろそろビギナーズセッション出ようかな。
そろそろ人前でしゃべってボコられたほうがいいのかもしれない。

2012年6月22日金曜日

3月末で会社を辞めた人のお財布事情

4月からフリーランスになりましたが、今のお仕事は末締めの翌々月末払いなので4〜6月はほとんど無補給で生き延びてきました。
が、やっとお金が入ると思ったところで最後に支払いが重なってえげつないことになっています。。。
会社辞めてからこれまでのお金の流れをちょっと残しておこうと思います。
 
まず3月分の給料はがっつり減ります。
3、4、5月分の税金・年金・健康保険料等が引かれるからです。
会社が代行して納付、つまり天引きのやつですね。
辞めた後も代わりに払ってくれるわけです。
あと、余った定期代が回収されました。半年ずつ支給されていたので。
え?バイト代?って気持ちでした。

4月には3月中にやった残業の残業代が振り込まれます。
毎月振り込まれる給料は当月の基本給+前月の残業代だからです。
僕は有給消化できず、3月も残業ありだったので。
とは言え何十時間も残業したわけではないので大した金額ではなかったです。

で、支払いについては、
4月は先に払っているようなもんなので保険料とか払っていません。
5月から年金の支払いが始まり、6月は加えて住民税と国民健康保険料を払います。
住民税は4分割なので払わない月もありますが、他は基本毎月です。
まとめて払うと割引があったりもします。
なんでこういう風になるかと言うと、
所得税、住民税、年金、健康保険等、社会人が支払うべきお金は全員均等ではなく稼いだお金を元に決められていて、その計算タイミングがそれぞれ微妙に違うからです。
1年間の区切りが年だったり年度だったり、詳しくはもっと詳しい解説サイトがあると思うのでそちらでご確認を。

この辺りは年の前半で辞めるか後半で辞めるかでも変わってくると思います。
僕は3月退職なので給料から引かれましたが、6月で辞めるとなるとほぼ1年分の支払いがあるのでさすがに給料からは引けないはずです。

会社を辞める時には貯金がすごく大事です。僕も少しは貯めていましたが一気に減りました。。。

失業保険を受ける場合でも自己都合退職は3ヶ月ぐらいもらえるまで時間が掛かったと思うので、給料半年分くらいはみておいたほうがいいかもしれません。
退職は計画的に。

2012年6月5日火曜日

アプリ開発においてタブレットをサブディスプレイにするのはありかもしれない

約一年前にAndroidのタブレット端末ICONIA A500を買ってみたものの誇りをかぶってしまっていたので週に何回か出入りしているコワーキングスペースにサブディスプレイとしておいています。

そして最近気付いたのですが、この組合せ、スマホアプリ開発にいいかもしれない。
なぜなら元々がタッチパネルってことはタッチ入力できる!!
シミュレータなのに実機確認っぽく操作でき、マウスで操作するよりはましかなと思います。
 まあ最終的に実機テストは必須ですが。

Air Displayというアプリを使ってWi-Fi経由でこのとおり















拡大するとこんな感じ















設定はここで変えます

2012年5月27日日曜日

青色申告会に入ってみたが…

フリーランスになり、確定申告が必要になるので青色申告会とうものに入ってきました。
入会すると会費はかかりますが、記帳・決算指導や企業の福利厚生的なもの、共済などの各種保険があります。

僕は新宿区民なので新大久保にある事務所に行って来ました。
新大久保は普段立ち寄らないのですが、学生の時に旅行で行った韓国釜山が懐かしかった。
てかもうほぼ韓国w

事務所は平日は17:30まで、奇数の土曜の午前中に開いています。

手続きは書類に名前とか住所とか仕事内容を書いて入会金を支払って即完了です。

しかし、

なんと通っているコワーキングスペースで会計士さん(税理士資格もお持ち!)と知り合いまして、アドバイスして頂ける流れに!!

申告会は共済とか積立とかがいいなと思ってたけど、指導は予約制で開いてる時間が微妙だし、 一度も指導受けずに辞めるかも。。。


フリーランスは身体が資本なので保険は気になっているのですが、都民共済ってのもあって大差ないっぽいし。

うん、多分辞める。

2012年5月25日金曜日

Amazon Product Advertising API 署名認証ではまった

Amazonアソシエイトやってみたいなと、
こちらのAjaxTowerさんのサンプルを試してみていました。
http://www.ajaxtower.jp/ecs/signature/

しかし認証エラーになります。
Versionが"2009-01-06"だったり、今は必須のアソシエイトIDがなかったりしていたので、 そこら辺かと思い、いろいろ試してみたのですが一向に

 The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

と返され明らかに署名がおかしい。
上記で紹介されていたエンコーダ base64.jsを下記のものに変更したところ動きました。
 http://user1.matsumoto.ne.jp/~goma/js/base64.html

AjaxTowerさんのサンプルが動かなかったという報告は見つけられなかったので、 windowsとmacの差なんでしょうかね。

これを機に文字コードをもう一度勉強しようと思いました。

2012年5月10日木曜日

Perlにはtrue/falseがない

Perlで既存コードを修正していて最近はまってしまいました。
if ($rHash->{"hoge"}) {
 if ($rHash->{"hoge"} == 0) {
  #処理
 } elsif ($rHash->{"hoge"} == 1) {
  #処理
 } elsif ($rHash->{"hoge"} == 2) {
  #処理
 }
}


$rHash->{"hoge"} にはちゃんと値が入っているのに0の時だけ処理が抜けてるのはなんでだろうと思っていたのですがPerlでは

・文字が入ってる、または、入ってない
・数字(文字)が0、または、0じゃない

で判断されてるみたいです。

ついでに調べてみるとtrueとfalseもないんですね。
http://d.hatena.ne.jp/perlcodesample/20080323/1206280262
http://www.perlplus.jp/perl/num/index5.html

既存コードは0の時も不思議なことにたまたま上手く動いてたみたいです。
definedつけて直しておきました。
if (defined($rHash->{"hoge"})) {
 if ($rHash->{"hoge"} == 0) {
  #処理
 } elsif ($rHash->{"hoge"} == 1) {
  #処理
 } elsif ($rHash->{"hoge"} == 2) {
  #処理
 }
}

この辺はもう慣れるしかないですね。

2012年5月7日月曜日

さくらのVPSを1GにしたついでにUbuntuを入れたったメモ

さくらVPS 512を解約して1Gにしました。
こちら勉強用の環境なのでマイグレーションは一切やってません。
いちいち入れ直すのもまあ勉強かなと。
なのでついでにOSも入れ直してみました。

こちらのブログを参考にさせて頂きました。
http://d.hatena.ne.jp/mickey24/20110210/sakura_vps

公式ドキュメントもあるのですね。
http://support.sakura.ad.jp/manual/vps/mainte/custom_ubuntu.html

特にハマることもなく、あっさり終わりました。

2012年5月4日金曜日

Apple Developer Programを日本語で登録してしまった時の対処方法

最近またスマホアプリでも作ってみようかと思っています。

前回はAndroidだけだったので今回はiPhoneもと思い、
Apple Developer Programに登録しようとしていたら名前が文字化けて
なんじゃこりゃー状態になりました。

これ、多くの日本人ディベロッパーがハマっているようです。

日本語ページが用意されているし(https://developer.apple.com/jp/)、
元々使ってたApple IDをつい使っちゃうわけですよ。

Webからはどんなに頑張っても直せません。少なくとも今は。
ググってみるとAppleにメール(英語)を送ればいいとかいろいろ出てくるんですが、
一番簡単なのは電話です。
もしかして英語?とビビったのですが日本語OKでした。
https://developer.apple.com/contact/phone.php
オペレーターさんがその場で直してくれます。

「あーあ、またかよ」って空気がビンビン伝わってきますが、気にすることはありません。
即時反映され全体で5分もかからないので今後登録しようとしてやらかしてしまった方は是非電話で。

2012年4月28日土曜日

Perl Beginners #2

 仕事が変わって最初はJavaだったのですが、今週からPerlになりました。
 ってことでPerl Beginners #2に参加してきました。
www.perl-beginners.org/2012/03/perl-beginners-2.html

#1の時もそうだったけど、ビギナーズなのにビギナーじゃなかった。
けっこうポカーンだったけど一応まとめを。。。
後々、あー!あの時言ってたのはこういうことだったのか!って言う。多分。

OrePAN(DarkPAN)っていうモジュールを管理できるものがあるらしい。
バージョンの違いで動かなくなるって話はよくありますよね。

PythonのWSGIやRubyのRackみたいな共通インターフェースとして
PerlにはPSGI/Plackというのがあるらしい。

irmr_log さんのWebスクレイピングと日本語処理のLTを聞いて
文字コードとかまだなんとなくでしかわかってないから改めて勉強しようと思いました。
公開されているモジュールのコードを読んでみるとすごく勉強になりますね。

精神面ではpoohtarouさんのストーキング力の話が非常に良かった。
先輩が対応した後のhistoryを見るとか、ブログを2年分読んだとかw
Web上で先輩エンジニア達をいくらでも追跡できる時代なので
ストーキングすることでどんどん吸収できますね。
コレにものってる。
http://doda.jp/engineer/promo/hatena0423.html

JPAさんの活動報告もあり、枯れたとか古いとかなんやかんや言われているPerlですが、
まだまだ盛り上がっていきそうな気がします。
懇親会も含めて今回も非常に楽しかったです。
JPAさん、ytnobodyさん、ビギナーズセッションやLTをやって下さった皆さん、ありがとうございました。

あったら次回も行きたいと思いました。
誰かMobaSiF詳しくないかなあ。
そろそろ発表もしないと。
ハッカソンもあるといいなあ。
いや、ペアプロで僕に手取り足取り教えろ下さい。

2012年4月18日水曜日

Eclipseショートカットキー備忘録

仕事でJavaをやることになり、Eclipseを使いこなせるかどうかで作業効率が全然違ってくることを日々感じている。
ググったり、周りの人の指の動きを見たり、Twitterで教えてもらって少しずつ覚えてきた。

便利だなと思ったショートカットキーを忘れないように書いておく。


コンテンツアシスト
Ctrl + Space

クイックフィックス
Ctrl + 1

コメント切り替え
Ctrl + /

自動フォーマット。選択範囲だけでもOK
Ctrl + Shift + F

import文の自動編成
Ctrl + Shift + O

1行移動
 Alt + ↓↑

1行コピー
Ctrl + Alt + ↓↑

1行削除
Ctrl + D

宣言を開く
F3

リソースを開く
Ctrl + Shift + R

クイック型階層
Ctrl + T

行番号で移動
Ctrl + L

エディタの切り替え
Ctrl + E

エディタを閉じる
Ctrl + W

すべて保存
Ctrl + Shift + S

検索ダイアログを開く
Ctrl + H
(Ctrl + Fと違ってファイルをまたがった検索ができるのが便利)

短形選択切り替えに切り替え
Ctrl + Alt + A

ショートカットキー一覧を表示

CTRL + Shift + L
(忘れたらまた調べる)

2012年4月14日土曜日

会社辞めてフリーランスになる時やったことまとめ

フリーランスになるにあたり必要なことのまとめです。
まだ途中なのもあるので適宜更新予定です。
足りないこと、やっておいた方がいいこと等ありましたら教えて下さいまし。
(ググればいっぱい出てくるので教えを請うのがメインかも)

【やったこと】
  • 契約
とあるウサギの社長さんと契約、お仕事もらう。
フリーランスと言っても自宅で作業してるわけじゃないです。
出向?派遣?みたいな形でとあるウサギとは別のお客さん先で働いてます。
ライフスタイルはほぼサラリーマンと同じ。
  • 保険、年金
自営業なので厚生年金から国民年金へ、
会社で入ってた健康保険が国民健康保険になります。
まあこれは区役所で書類書いて終わり。
退職証明書または健康保険資格喪失証明書が必要。
係の人がコピーとるので会社からちゃんと貰っておくこと。

会社で毎年やってくれていた健康診断がなくなるのは気になっていたけど、
区の健康診査というものが無料であるらしいのでよかったです。
個人的には簡易版でも無問題。
酒あまり飲まない、タバコ吸わない、運動してる、食事気にしてる。
これで生活習慣病なったらもう運命でしかない。諦めて死ぬ。

  • 開業届
「個人事業の開業・廃業等届出書」というのを税務署に出す必要があります。
この時屋号というのを付けられます。お店の名前的なやつ。
領収書だったり銀行口座なんかで使えます。
僕の場合は領収書で楽したいのでカタカナ3、4文字で、
飲み屋で店員さんが間違えないくらい聞き取りやすいことを考慮して
   考えました。(同席した人は僕の屋号を聞く時がくるかも?)
「所得税の青色申告承認申請書」と合わせて出しました。
わざわざ 税務署行かなくても郵送でOKらしいです。
また、地方自治体に「事業開始等申告書」を出すらしいのですが、
ネット上で出さなくていい説がけっこうあったので出していないです。
(注意されたら出す)


【まだやってないけどなるはやでやる予定のこと】
  • 名刺作成
セミナーとか勉強会用です。
現状営業しないので仕事では使わない感じです。
とりあえずモヤモヤハウスので代用しています。
自分で営業して仕事とってこなきゃいけない場合は
名刺もかなり重要になってくると思います。
  • 確定申告用にソフト購入
やっぱり税金の控除はMAX引いてもらいたいですよね?
確定申告をかなりかっつりやらなきゃいけないのですが、
ソフト買えばまあなんとかなるんじゃないかと。
「やよいの青色申告」一択です。(理由:皆藤愛子)
  •  青色申告会
そんな団体があるらしい。(非オフィシャル?)
入会すると申告の仕方を教えてくれるだけでなく、
福利厚生っぽいものいろいろあるみたい。
てか保険に入りたいです。身体壊すとまじでやばい。


【今はする予定にないこと】
  • HP作成
縁の力で仕事を頂けて、独力でとってくる必要がいまのところない。  営業もやんなきゃな人はここも大事だと思われる。
まあ僕はエンジニアなのでGitHubでいいのかな。

以上です。

リトライ東京ハーフ

 リトライ東京・ハーフ&10kmという大会に出てきました。
http://www.tokyo42195.org/2012/archives/3005
もちろんハーフで。

正式なタイムは後日郵送ですが、手元の時計では1時間49分51秒でしたー。
自己ベスト更新!
まあハーフマラソン2回目だけどね。

暑くなるのかと思いきや雨が降り、寒くて大変でした。
ここまでずぶぬれになるのはそうそうない。
しかも、周りの人達は雨用の装備持ってるし。
天候コンディションの影響(?)でレース中2回もトイレに行ってしまい、
それがなければ45分もいけたんじゃないかと。
雨対策と水分の取り方は次の課題ですね。

そしてこの大会、2013年の東京マラソン出場権が貰えるかもしれないのです。
上位入賞者とか、年代別1位とか、100位、200位みたいなキリ番の人に。
出れるといいなあ。

一応東京マラソンエントリー始まったら申し込む予定ですが、多分ムリなので湘南国際マラソンにも申し込もうかと思っております。

あ、そう言えば生で藤原新さん見た。
多分大会オフィシャルサポーター的な何か。
今度はこっちがロンドン五輪応援しなきゃ。

2012年3月29日木曜日

退職

3月末で新卒で入って3年間勤めた某ユーザー系SIerを退職します。
今は有給消k…できてないよ!25日くらい残ってるよ!ギリギリまで働くよ!もう!
1ヶ月有給でラングリッチのセブ島留学に行けたら最高だったのに。

大きな理由は配属先がとあるグループウェア製品に特化した部隊で、それしか出来なかったので不満でした。
その製品は言語や、データの持ち方、何もかもが独自仕様でした。
若いうちはもっと汎用的でどこでもやれる力が欲しかったというのもあります。
食いっぱぐれないためにも。
あとはSIerならではのExcel方眼紙やスタンプラリーですかねw

本読んだり、勉強会行ったりしていると周りとのギャップが凄まじく、チームの仕事のやり方が10年以上時が止まってる感じがしていました。
これは将来に対する不安が日々高まっていくばかりで辛かったです。
安定した会社で定年までとは全然考えていなくて、やっぱり個の力がないとやっていけないと思っています。生存戦略ってやつ。

大昔から技術革新によって世の中が大きく変わって、人々の暮らしが良くなってきたので
(逆に戦争とか新しい問題が起こることもあるけれど。)
技術者というものに憧れがあって、大学でも技術に堪能なる士君子としての教育を受けてきた自分にとってはSIerの仕事に違和感がありました。
エンジニアである前にサラリーマンだなあ的な。

某商社の社内システムを担当して顧客の要望には応えてきましたが、エンドユーザーの業務が効率化したとかそんな話は全然聞こえてこず、客先のエレベーターの中でユーザー同士が使い難いよねって愚痴ってるのを聞いてしまったり、とにかくやりがいがなかった。

スキルが身に付かず、やりがいもない、頑張れる理由がない、でも仕事だからやらなきゃいけない、これは厳しかったです。


4月からは一応Web系男子になります。
頑張りたい方向でまっすぐ頑張れるなら日本一とかは無理でもそこそこのエンジニアになれるんじゃないかなと。
自分が関わるもので使う人が喜ぶところを見たいし、まだまだ変化していくこの業界で先っちょのほうを走っていたい。

人生は楽しまなきゃ損だと思っていますので、平日は嫌な仕事で目が死んでて土日だけ元気っていうのはもったいない、ちょっとでも楽しいと思える仕事を探したほうがいいんじゃないかなと。


僕みたいに3年で辞める奴いるんだから新卒採用ってリスキーだなあと思います。
こちらとしても良い会社だと思って入ったのでお互い博打っちゃ博打ですね。
でも雇ってくれてありがとうございました。
大学卒業後に空白期間あると今よりもっと不利な状況でリアル死んでたかもしれません。

チームの皆さん、明らかにやる気なかった僕と仕事してくれてありがとうございました。
組織に不満があった時、内から変えていくように努力するのが筋なのでしょう。
しかし僕はあっさり諦めました。すいません。
送別会もやって頂いて、温かい言葉もたくさん貰いました。深謝です。

同期のみんな、KIT関東組、僕が精神的に逝ってしまいそうな時に支えてもらいました。
感謝しています。

新しい仕事を下さったウサギ社長、ありがとうございます。
一所懸命頑張ります。

同居人やエンジニア仲間たち、プライベートでも積極的に勉強会に行ったりコード書いたり勉強してるのを見て刺激をもらってます。
これからもよろしくお願いします。僕はもっと成長するつもりでいるし、みんなと切磋琢磨できたらいいなと思っています。

「退職しました。」系エントリーに学びが多い件みたいにうまいこと書いてやろうと思ったけど無理でしたねーw

以上、酔った勢いでつらつら書きました。

2012年3月25日日曜日

abc2012s

昨日、Android Bazzar and Conference 2012に行ってきました。
http://www.android-group.jp/conference/abc2012s/

家を出遅れたので最初の丸山先生の基調講演は逃してしまったけど、
総務省の谷脇さん
AdMobの坂本さん
高木ひろみちゅ先生
GREE梶原さん、DeNA山口さん、mixi田中さんのディスカッション
adamrockerさんとなめこの河合さんのディスカッション
を聞いてきました。

谷脇さんの話はAndroidというよりもクラウドが中心でTLでは何しにきたんだ的な発言が多くて可哀想だった。

高木先生はさすがにすごかった。(ダメなサービスのdisり方も含めて)
スマホアプリの利用者情報送信における同意確認のあり方や端末IDを使う怖さがわかった。
この問題はしばらく続くだろうけど、開発者として正しい選択をしていきたい。

ディスカッションも面白かった。なめこさん出てきたしw

なんやかんやでほとんど安田講堂にいた。バザールもっと見ればよかった。

Android使ってるとiPhoneユーザーにdisられることもあるけど、こういうイベントがあって技術者が集まってみんなで盛り上げていこうって空気感も好きなので使ってます。
もちろんiPhone側にもエンジニアはいっぱいいて、勉強会なんかもあるんだろうけど、Androidのほうがギーク(おっさん?)臭いので好きです。





2012年3月21日水曜日

第1回 AWSオープンセミナー@VOYAGE GROUP

第1回 AWSオープンセミナー@VOYAGE GROUPに行ってきました。
http://atnd.org/events/25126

それにしてもVOYAGE GROUPさんのオフィスお洒落すぎワロタ。
初めて行ったけど全然会社っぽさがなかった。

 以下セミナー聞きながらとったメモ

「事例とデモで学ぶはじめてのAWSアマゾンクラウドの最新動向」
(AWS大谷さん)

・ES2だけではなく、顧客のサービスに合わせてレゴのように組み合わせていく
・AWSはPaaSやIaaSのように定義しない
・日本ではRDS、MapReduceが人気
・選択したリージョンの中からデータは出ない
・ロックインしない(いろいろな言語やミドルウェアが動く)
・ピーク対応:オートスケール
・システムリカバリ:新たなサーバにEBSをアタッチ
・リザーブドインスタンス、スポットインスタンスがあり、価格を4割、6割引きできる
・EC2最近Mediumが出来た。
・Amazon Route 53 (DNS)がかなり良いらしい
・クラウドは作るのではなく使うもの
・費用資産ツールがある
・事例
 gumi
  >開発、本番と構成を変えながら柔軟に利用
 foursquare
  >機械学習、データ分析、レポーティングなど
 Samsung
  >smarthub
 Amazon
  >アソシエイト
  >テープバックアップからS3へ移行(テープは復旧に時間がかかる)
 NETFLIX
  >AWS上にNetflixプラットフォーム
  >最小パッケージ単位:AMI
  >S3に保存したマスターデータを各デバイス毎にエンコーディング


「実例で学ぶAWSオーディエンスデータプラットフォームcosmiを例に」
(adingo岩川さん)

・cosmiとはオーディエンスデータプラットフォーム
・スマホのブラウザのcookieからユーザーのデータをとる
・負荷、データ量が予測できない。わからないことだらけ。
 →スケールアウト出来るようにしておく。awsを使って。
・AMI:予め用意しておき、パートナーが増えたタイミングなどでインスタンス追加
・AutoScaling:cpu使用率でインスタンス追加
・ElasticMapReduce:解析プログラムを通してデータをmongoDBに格納
 (MapReduceは計算するときだけ課金されるらしい)
・問題点
 →アプリを修正するたびにAMIを作りなおすのが手間
 →AMI起動時にコンテンツを自動ロードする


「クックパッドはAWSで動いてます」
(cookpad成田さん)

・IDCからAWSへの移行 2011
 今まで
  月によってPVが違う(バレンタイン対策)
  3倍ルール(今さばける量の3倍用意しておく。)
 移行後
  リソースあたりのコストは増
  過剰投資(3倍ルール)がなくなったためIDCとほぼ同じに
  物理作業からの開放
  ビジネススピードUP
  MySQLのバックアップが楽(EBSのSNAPSHOTを1日4回)
・elasticfoxを魔改造したw

cookpadさんの時の質疑応答はとても活発だった。
やはり相当のユーザー数がいて、国内屈指の人気サイトが
どうやってさばいているのかみんな気になっているんだな。


「HerokuはAWSで動いてます 」
(セールスフォース相澤さん)
・Herokuは開発者の生産性に徹底的にこだわっている
・100万以上のアプリが稼働
・we love heroku(事例集)
・アプリケーション開発に集中できるように
・AWSではサーバー単位だがHerokuではプロセス単位でスケールできる

相澤さんの口からは何度もUSTやってるから今は話せないというセリフがw
主催者さんのより多くの人が参加できるようにという思いが仇に。


勉強会から帰ってきてからちゃんとブログ更新していかないと。
JAWS SUMMIT 2012行った時は完全にサボってしまった。
てか懇親会出て酒飲んだらブログは無理w

今月AWS関連の勉強会に2つ参加してみて、
AWSは他のクラウドサービスより2歩3歩進んでる印象。
やっぱりS3のイレブンナインはすごい。

あと、joker1007氏と勉強会で遭遇したのは何気に初めてかもしれない。

2012年3月11日日曜日

1周年で作った料理

昨日はルームシェア始めて1周年と言うことで友達呼んでパーティーしてた。
僕はいつも通り料理作ってた。

作った中で旨かったのはこの2つ。
一瞬で食われてしまったため写真はない…。

パエリア
http://cookpad.com/recipe/243790
→時間がかかるけど、ホットプレートの蓋を開けた時の盛り上がりは最高w
 おこげが出来るまでもう少し加熱すればよかった。

鶏肉のねぎマヨポン炒め
http://cookpad.com/recipe/450372
→酒につけておくので肉が柔らかく、
 マヨネーズとポン酢でまろやかさとコクと香ばしさが出る。

パーティー用には早くて大量に出来る料理のレパートリー増やしとかないとな。

2012年3月4日日曜日

第15回目白ロードレース

近所なので目白ロードレースに出ました。
5km 23分40秒で36位でしたー。
いやー階段ありの登り坂を3回はきつかった(^_^;)

とりあえずこれで「練習のための練習」期間は終わったかなと思っております。

2年前、多摩川沿いを走っていたある日、なぜかすごく調子が良く、
(アドレナリンか何かがドバドバ出ていたのでしょう。)
普段は5kmくらいしか走らないのにいきなり他のランナーさんをガンガン抜きつつ10km以上走りました。

そして案の定、膝が痛くなりました。
筋力と柔軟性が不足していたものと思われます。
それ以来、太ももと膝の付け根らへんで炎症が起り易くなり、
あまり走れなくなってしまいました。
調子に乗りすぎるのは恐ろしいものです…

その後もランニングは騙しだまし続けていたのですが、
なかなか完治しないので、だんだんと走る頻度が下がってしまい、
半年くらいブランクが空いてしまいました。

結果的に一旦痛みはリセットされたので一からトレーニングをやり直すことになりました。
・ストレッチは念入りに
・並行して筋トレもやる
ことを意識しながら、しっかり走れる身体が出来るまでは
もっと速く!もっと遠く!という欲求を我慢してじっくり取り組んできました。

痛みが再発することはなくなり、走れる土台が出来てきたんじゃないかと感じるようになりました。
なのでこれからはどんどんレースにも参加していこうと思います。
そして「練習のための練習」ではなく「レースのための練習」を日々やっていこうと思います。


最後になりましたが、運営スタッフの皆さんありがとうございました。

2012年2月25日土曜日

Perl Beginners #1に行ってきました

 「Perl Beginners #1」という勉強会に参加してきました。
http://atnd.org/events/24780

4月からPerlを使うのが確定となり、勉強し始めたところで調度よく
"初心者向け"の勉強会が見つかったので即参加表明。
補欠だったけど繰り上がって無事参加できました。

しかし、ガチBeginnerは僕だけだったんじゃなかろうか。
(僕はまだ入門書読んでる途中)

Perl初心者が質問して、それに対して聴衆の方々が回答していく、
という形式のセッションだったのですが、いきなりテストとかフレームワークの話に。。。
みんなもう初心者じゃないやん(^_^;)

そしてPerl勉強会でまさかRailsのLTがあるとは思ってなかったので笑いました。
LTはRailsだとこんな簡単にWebアプリ出来ますよとライブコーディングがあり、
じゃあPerlだと何使ってますか?と質問を投げかける形で終わり、そこから皆さんが
これがいい、あれがいいと活発な意見交換に発展していきました。
Amon2とかkossyとかmojoがいいらしい?Catalystはオワコン?

僕と同じようにSIerの方もいれば、インフラ系の方、デザイナの方、完全に趣味でやられてる方、といろんな方がいて2次会も楽しく盛り上がりました。

早く皆さんに追いつきたいなと思いました。

最後に主催の@ytnobody さん、幹事の@hattara_tw さんありがとうございました。
#2も是非参加したいと思います。

2012年2月12日日曜日

kinect for windows買いました。

以前同居人達とxbox用のkinectをハックしてデザフェスに出展したりしたのが楽しくて買ってしまいました。
前はOpenNIを使って非公式な感じだったのですが、今度はちゃんと公式のSDKを使おうと思います。









普段はmacでwindowsはXPしかなかったのでvmware fusion と7を買って仮想環境を作成。
いちいち再起動なんてしてられるか!

vmの導入は特に迷うこともなく、あっけなく終了。
visual sutdioやkinect SDKも順次インストール。
僕のMBPはメモリを8Gに増設していたので、そこそこ快適に動いてる。

さあkinectを繋いでサンプルを動かそう!

が、しかしkinectを正しく認識してくれない。
vmの設定をいろいろ試してみたけど全然だめ。

なにやら仮想マシンじゃ動かないらしい。
http://social.msdn.microsoft.com/Forums/br/kinectsdk/thread/86528a22-0643-4a1f-819f-8125d7668a68

しょうがないのでwindows7をBootCampで入れ直し。
ここがわかりやすかった。
http://inforati.jp/apple/mac-tips-techniques/windows-hints/how-to-install-windows-with-mac-boot-camp.html

BootCampだと普通にkinect認識してくれました。
とりあえず良かった。
公式だと荒ぶるキャリブレーションポーズがいらなくて嬉しい!

一応、vmからBootCamp呼び出せるのでたまには使ってあげようと思います。
IE検証くらいしか思いつかないけど。。。

環境は整ったのでこれからはkinectもいじっていこうと思います。

2012年2月6日月曜日

さくらVPS + CentOSにAsakusaSatelliteを入れたメモ

AsakusaSatellite
http://www.codefirst.org/AsakusaSatellite/

開発者がリモートでコミュニケーションを取りながらスムーズに開発を出来るようにするためのツール。
実際に東京ー名古屋間でリモートで開発を進めたらしい。
会社に行きたくない僕もとしてはオンライン上で開発出来たってのはすごく憧れる。
自分も出来るようになりたいと思いつつ、プライベートの開発で使ってみようと思っています。


必要なのは
・Ruby 1.8.7
・RubyGems 1.4.2以降
・MongoDB 1.8.1以降
・Bundler 1.0.7以降
らしいので入れていく。

最初にbundlerをインストール。
gem install bundler
次はmongoDBを入れる
参考にしたのは
http://cloudrop.jp/mongodb/install_memo_on_sakuravps

インストールと起動をまとめて
vim /etc/yum.repos.d/10gen.repo
yum install mongo-10gen* --enablerepo=10gen
/etc/init.d/mongod start
10gen.repoの中身は
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
AsakusaSatellite本体
wgetでよくわからなかったのでブラウザからローカルに落としてサーバーにftpで送った。
解凍して以下を実行
cd AsakusaSatellite/
bundle install --path vendor/bundle
しかしnokogiriが入らないと怒られる。
gem install nokogiri
でも入らない。

以下2つを怒られては入れ、怒られては入れしてやっとnokogiriが入った
yum -y install libxml2-devel
yum install libxslt-devel

再度
bundle install --path vendor/bundle
でやっと入った。

よし、起動!
bundle exec thin -R socky/config.ru -p3002 -t0 start
がno such file to load -- openssl (RuntimeError)だと。

yum install openssl-devel
で入れて、Rubyを入れ直し。
今度こそ起動!
bundle exec thin -R socky/config.ru -p3002 -t0 start
undle exec rails server
やっと動いた。 railsにも慣れていかないとなー。

さくらVPS + CentOS に Rails入れたメモ

AsakusaSatellite
http://www.codefirst.org/AsakusaSatellite/

を試したかったのだが、そもそもRubyの環境が無かったのでインストール。

まずはRubyを特に何も考えずえいやっと実行。
yum install ruby

でもバージョンが古かったので一回消して公式のやり方で入れ直し。
yum remove ruby
wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p180.tar.gz
tar xvzf ruby-1.9.2-p180.tar.gz
cd ruby-1.9.2-p180
./configure
make
make install
make clean

次はRubyGem
wget http://rubyforge.org/frs/download.php/75711/rubygems-1.8.15.tgz
tar -xvzf rubygems-1.8.15.tgz
cd rubygems-1.8.15
ruby setup.rb

そしてRailsを入れる。
gem install rails
あれ?入らない?
No such file to load -- zlib (LoadError) って怒られる。。。

zlibを入れてrubyにパスを通す(?)
yum install zlib-devel
cd ruby-1.9.2-p180/ext/zlib
ruby extconf.rb --with-zlib-include=/usr/include -with-zlib-lib=/usr/lib
make site-install

再度gem install railsでやっと入った。

次回は本来やりたかったAsakusaSatelliteのインストール。

2012年1月30日月曜日

OpenNIでチルトモーターを動かす

SyntaxHighlighterを導入してみたのでコードを貼ってみた。

過去にはてなダイアリーに書いてたエントリーのコピペ。

KINETで何か開発するにはチルトモーターの制御は欲しいところ。
しかし、OpenNIのリファレンスを見ても全然載ってない(?)
唯一見つけられたhagino_3000さんのエントリーを参考にしてボタンで制御できるようにした。
http://d.hatena.ne.jp/hagino_3000/20110720/1311097327
※xnUSBInit()は呼び出すだけで落ちるから使っていない。
#include 
#include 
#include //Tilt

#include 
#include 
#include 

#define VID_MICROSOFT 0x45e//Tilt
#define PID_NUI_MOTOR 0x02b0//Tilt

constchar* CONFIG_XML_PATH = "/*****/config.xml";
XN_USB_DEV_HANDLE dev;//Tilt


int main (int argc, constchar * argv[])
{    
    xn::Contextcontext;
    IplImage *rgbImage = NULL;
    int angle = 0;//Tilt
    XnUChar empty[0x1];//Tilt
    
    try {
        xn::EnumerationErrorsctxErrors;
        XnStatus rc = context.InitFromXmlFile(CONFIG_XML_PATH, &ctxErrors);
        if (rc != XN_STATUS_OK) {
            XnChar strError[1024];
            ctxErrors.ToString(strError, 1024);
            std::cout << strError << std::endl;
            return1;
        }
        context.SetGlobalMirror(false);
        xn::ImageGeneratorimage;
        rc = context.FindExistingNode(XN_NODE_TYPE_IMAGE, image);
        if (rc != XN_STATUS_OK) {
            throwstd::runtime_error(xnGetStatusString(rc));
        }
        
        XnMapOutputMode mapMode;
        image.GetMapOutputMode(mapMode);
        
        int width = mapMode.nXRes;
        int hight = mapMode.nYRes;
        
        rgbImage = cvCreateImage(cvSize(width, hight), IPL_DEPTH_8U, 3);
        
        while (1) {
            context.WaitAndUpdateAll();
            
            
            xn::ImageMetaDataimageMetaData;
            image.GetMetaData(imageMetaData);
            
            xnOSMemCopy(rgbImage->imageData, imageMetaData.RGB24Data(), rgbImage->imageSize);
            
            cvCvtColor(rgbImage, rgbImage, CV_RGB2BGR);
            cvShowImage("Video View", rgbImage);
            
            char key = cvWaitKey(10);
            if (key == 27 || key == 'q') {
                break;
            }
            
            elseif (key == 's'){
                angle = 0;
                
                rc = xnUSBOpenDevice(VID_MICROSOFT, PID_NUI_MOTOR, NULL, NULL, &dev);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
                rc = xnUSBSendControl(dev, XN_USB_CONTROL_TYPE_VENDOR, 0x31, (XnUInt16)angle, 0x0, empty, 0x0, 0);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
                rc = xnUSBCloseDevice(dev);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
            }
            
            elseif (key == 'u'){
                angle += 5;
            
                rc = xnUSBOpenDevice(VID_MICROSOFT, PID_NUI_MOTOR, NULL, NULL, &dev);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
                rc = xnUSBSendControl(dev, XN_USB_CONTROL_TYPE_VENDOR, 0x31, (XnUInt16)angle, 0x0, empty, 0x0, 0);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
                rc = xnUSBCloseDevice(dev);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
            }
            elseif (key == 'd'){
                angle -= 5;
                
                rc = xnUSBOpenDevice(VID_MICROSOFT, PID_NUI_MOTOR, NULL, NULL, &dev);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
                rc = xnUSBSendControl(dev, XN_USB_CONTROL_TYPE_VENDOR, 0x31, (XnUInt16)angle, 0x0, empty, 0x0, 0);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
                rc = xnUSBCloseDevice(dev);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
            }
            
        }
        
    } catch (std::exception& ex) {
        std::cout << ex.what() << std::endl;
    }

    if (rgbImage != NULL) {
        cvReleaseImage(&rgbImage);
    }
    
    context.Shutdown();
    return0;
}

2012年1月26日木曜日

テスト

Bloggerがぐぐたすと連携ということで、ブログはこっちにしようかと検討中。