2011-05-31

Android Hackathonに参加、入賞してました

先日、京都GTUGで開催されたAndroid Hackathonに参加してきました。私は所属したチームは3位入賞です。アプリとしてはウケ狙いのものでしたが、サウンド出力や音声認識入力の機能も実装していちおうシステムとしてはちゃんと動きます。
個人的にこういった勉強会に参加して、最新の技術動向に実装レベルでついていくように心がけているのですが、Andoridは未踏のエリアでしたので今回の収穫は大です。基本的なところは理解でき、あと何を理解するべきかも見えてきたので、ラボでの実装にも生かしたいと思ってます。本BLOGでも小出しにネタを取り上げます。

Androidの画面をPCの画面にミラーする方法

Androidで開発したソフトを、プレゼンテーションで紹介したい時がありますよね。どうやったらいいか、、、良いソフトがあります。
これをインストールすれば、PCの画面に実機の画面がリアルタイムに反映されます(1つのWindowとして)。
注意点は、Android SDKのadb.exeにパスが通ってないといけないので、
  • パスを通す
  • adb.exeがある場所にこのファイルを置く
のどちらかをする必要があります。また、実行時には -a コマンドを打つことで色が問題なく投影されるはずです。実行コマンドは
  • java -jar asm.jar -a 
でOKです。


2011-05-25

Androidでのサウンドファイル再生を試みた

表題のとおりAndroidで音声ファイルの再生を試みたのだが、しょうもないところでつまづいたのでメモ書き。

エミュレーターの設定
サウンドファイルを再生するには、
  • エミュレータオプションで –useaudioを指定する
といった記述がネットで見られるが、これはなくてもいい感じ。記事が古い?エミュレーターのハードウェア設定では、Audio PlayBack Support という項目があるようだが、デフォルトでYesになっているらしい。いちおう僕は念の為にしてしておいたけど。

再生の手順
基本的には下記の処理でオッケイということになる。
MediaPlayer mp = MediaPlayer.create(this, R.raw.????);
 mp.prepare(); // 準備(ここは注意点。後述の説明を読む)
 mp.start(); // 再生
ただ、prepareメソッドでちょっとハマった。最初、この記述でプログラムを動かすと予期せぬエラーがでて再生できない。リソースの読み取りタイミングに問題があるのかなーとか思ってたら、どうやらprepareメソッドには次の注意点があるようだ。
  • 上記のようにcreateメソッドをつかってMediaPlayerのインスタンスを生成した場合、既にprepareの状態になっている。この状態でprepareメソッドを呼んではいけない
  • MediaPlayerクラスのインスタンスを new することで生成した場合は、prepareメソッドを呼ばなければならない。
ということらしい。というわけで、上述のプログラムでは、2行目は必要ないということになります。


2011-05-23

[C#] ファイルアップロードプログラム ~WebClientクラスを利用~

C#でのウェブサーバへのファイルのアップロードは次のコードでできます。
          //送信するファイルのパス
            string filePath = "C:\\Users\\ochi\\Pictures\\snapshot.jpg";

            //送信先のURL
            string url = "http://*********************";

            System.Net.WebClient wc = new System.Net.WebClient();
            wc.Headers.Add("Content-Type", "image/jpeg");
            byte[] resData = wc.UploadFile(url, filePath);
これが一番シンプルな方法でしょう。

GWT 移行時のバージョン違いで出るエラー

GWTは発展途上のライブラリーですから、バージョンは上がってきます。開発時に利用していたバージョンと最新バージョンにズレが発生することが多々あり、その際、最新バージョンに変えようというデキ心がよく起こったりします。それがいいかどうかは状況にもよりますが、移行時にきちんとバージョンを合わせないとエラーができます。下記のようなエラーは、バージョン違いの時のエラーです。
Loading modules
   com.eric.gwttest.gwt.ApplicationCommon
      Loading inherited module 'com.google.gwt.app.App'
         Loading inherited module 'com.google.gwt.user.User'
            Loading inherited module 'com.google.gwt.core.Core'
               Loading inherited module 'com.google.gwt.core.XSLinker'
                  [ERROR] Line 22: Unexpected element 'when-linker-added'
                  [ERROR] Failure while parsing XML

Netbeansの場合、使用しているライブラリーで古いバージョンのが混在することがあります。よくこのことをすっかり忘れていて、意味不明のエラーだと思って迷わないようにしましょう。

2011-05-19

[C#] XMLプログラミング ~XMLファイルの作成~

とりあえず、一番シンプルで直感的なDOMツリーによる作成方法を以下に示します。

            XmlDocument xmlDocument = new XmlDocument();

            XmlElement root = xmlDocument.CreateElement("root");
            xmlDocument.AppendChild(root);

            //1つめのitemエレメント
            XmlElement item_elem = xmlDocument.CreateElement("item");
            item_elem.SetAttribute("id", "1");
            //item_elem.Value = "直接値を入れてみる"; //これはできません
            root.AppendChild(item_elem);
            
            XmlElement item_elem2 = xmlDocument.CreateElement("item");
            XmlNode name_node = xmlDocument.CreateNode(XmlNodeType.Text, "", "");
            name_node.Value = "値を入れる";
            item_elem2.AppendChild(name_node);
            root.AppendChild(item_elem2);
            xmlDocument.Save("c:\\temp\\test.xml");

XmlElement とXmlNode の使い分けがわかりにくいかもしれませんが、属性を持つようなノードについてはXmlElement を使ってください。またノードの値については、XmlElement に直接設定することはできません。上記のように、XmlNode に値をいれて子要素としてください。「値も1つのテキストノードである」と考えると理解しやすいと思います。

2011-05-17

Picasaへ写真を投稿する

以前の、GooglePicasa APIを試してみたの続編で、JavaでPicasaに写真をアップロードするサンプルです。
PicasawebService myService = new PicasawebService("example");
myService.setUserCredentials("<ここにユーザID>", "<ここにパスワード>");

URL albumPostUrl = new URL("http://picasaweb.google.com/data/feed/api/user/<ここにユーザID>/albumid/<ここにアルバムID>");
PhotoEntry myPhoto = new PhotoEntry();
myPhoto.setTitle(new PlainTextConstruct("ファイル名"));
myPhoto.setDescription(new PlainTextConstruct("タイトル"));
myPhoto.setClient("クライアント名");//ちょっとここは不明

MediaFileSource myMedia = new MediaFileSource(new File("C:\\temp\\kiku.jpg"), "image/jpeg");
myPhoto.setMediaSource(myMedia);

PhotoEntry returnedPhoto = myService.insert(albumPostUrl, myPhoto);

最後のreturnedPhoto には、アップしたファイルのURLなどが格納されています。

2011-05-16

教育システム情報学会全国大会講演申し込み

8月31日より開催される教育システム情報学会全国大会にて1件発表エントリーしました。本日が締切で慌ててしたわけですが、、、、

ネタは、Twitter系の研究で、現在、院生が開発に取り組んでいるシステムです。夏にはうまくいけば、その場で実演ができるかなぁと思っています。いろいろなシステムを連携させるので、設計をシンプルに考えていかないとドツボにはまりそうです。まずは、来月の原稿締切に間に合わせないと、、、

2011-05-10

科研費採択される

たまにはラボのニュースなど、、、久しぶりに科研(科学研究費補助金)に採択されました。教育システムを対象とした画像処理応用系の研究です。今年はゼミ生が少ないので、成果を出すのに苦労しそうですが、嬉しい悲鳴といっておきます。成果として学会等での研究発表は当然のことですが、それとは別の違った形での成果公開もなんとかしたいと思う今日この頃。ここのBLOGもその一つになるかなと思ったり、、、