2014年07月

2014年07月19日

オープンソースカンファレンス2014 Hokkaido - オープンソースの文化祭!

今年も参加。

ただ、昨年までは実行委員として事前準備を含めた活動をしてきたのだが、今年は博士論文とかで忙しかったこと、また実行委員としての活動が始まった時点で自分は4月以降の居場所が不明であったことから、実行委員としては活動していなかった。

そこで今年は、Sapporo.cppのブース出展担当と、当日スタッフとしての活動をすることにした。

Sapporo.cppのブース

【出来事とか】

当日スタッフとしての参加だったけど、経験でお役に立てた(ようだった)

上記の通り、今回は当日スタッフとしての参加ではあったのだが、ところどころ実行委員の方々から仕事を頂いたりした。「勝手のわかる人がいると仕事をしてもらいやすい」という言葉を頂いた。
微力でもこういう形でお役に立てたのはよかった。

かわいいキャラが異様に多かった

多くの企業やコミュニティがイメージキャラクターを作っていた。
かわいい女の子のキャラも多かった。特に会場で存在感を出していたのは、さくらインターネット様の桜葉愛さん、GMOインターネット様の美雲このはさん・美雲あんずさん。
一方北海道からも、インフィニットループ様のあいえるたんや、Crystal Dew World(ひよひよ)様の水晶雫さんがしっかりアピール。
かわいいキャラたち
結論:俺得でした。

田所あずささんのブース展示インタビューのカメラに映った

この日「今夜もLBR!!」の公開録音で来場されていた声優・田所あずささんが、ブース展示の一部にインタビューするという企画があった。
その際、自分のけっこう近くでカメラが回ってきたり、自分が遠目に映るような位置でカメラが回っていたりして、「変なことできない」と緊張感いっぱいであった。

↑私が遠目に映っているシーンがあったりします。

懇親会で竹内郁雄先生と話すことになった

招待講演で来場されていた、竹内郁雄名誉教授と直接お話しする機会が。と言っても自分から直接アタックしたというわけではないのだが。
別の席で、自分の研究や今後のことについて悩みを話していたら、「竹内先生と話せばいいですよ」と言われ、竹内先生の前に連れられ、自分の悩みを打ち明け、アドバイスをいただくという流れに。

本当にありがとうございました。

かなり緊張していましたが、研究者の一員として話すものは話さないと、という意識があったからか、自分が話すときはちゃんと話せてた…と思います。上記の田所さんのときのほうが緊張してたと思います。

懇親会会場

maraigue at 02:52コメント(0)トラックバック(0)イベント 

2014年07月16日

"観光×デバイス" ハッカソンin札幌 6/28-29 | Peatix

6月28日(土)から6月29日(日)にかけて開催された表記イベントに参加。旅行経験が多い自分としては、何か作れたら楽しいだろうと思ったので。

概要

協賛企業から提供されるデバイスやオンラインAPIを活用しつつ、観光の場面で役立つものを作る、というもの。1日目の序盤は作るものを決めること、2日目の夕方から発表会が始まることから、実質的に制作に使えるのは24時間程度である。

なおこのイベントは、今後開催されるアプリコンテストである、NTTドコモ主催のDeveloper Application Contest、ならびにMashup Awardsへの事前企画という意味合いもあった。

作業の流れ

まずは各自が案を作る。私は自分の旅行経験を交えつつ、思っていたことを案として書いた。「旅行中に寄り道する場所の案を提示してくれる」というサービス。
なお、このように全参加者が案を書いたのち、全参加者が他の全参加者の案を見て、よかったと思うものに星を付ける(星の個数は制限なし)ということを行ったのだが、私はトップタイの25個の星を頂いてしまいました。

自分の案

その後チーム編成。参加者による希望を直接の話し合いの上で決定するというもの。他に「観光情報を表示する」という方針で考えていた人がいたため、一緒に組むことに。
話し合ううち、協賛企業であるEPSON様のスマートグラス(眼鏡型のディスプレイ)「MOVERIO」を利用し、向いた向きの施設情報や天気予報を表示する」という方針に決定。

スマートグラスMOVERIO

MOVERIOのシステムはAndroidであり、表示やセンサー値の利用は単にAndroidアプリとして作ればよい。今回はメンバーにAndroidでの開発に慣れた方がいらしたので、Androidとしてのシステム作りは彼が中心になり、私ともう一人のプログラマーの二人で個々の機能を作っていた。私はまず、「2地点(現在地と、表示すべき観光地や天気予報の地点)を与えるとその向きを返す」関数をJavaで作成した。
ただその後、私がAndroidの環境をEclipseで整えてサンプルアプリを一つ作ろうとしてもどうもうまくいかない。アプリを起動しても何もしないで終了しているようなのである。調べてみたら、本来であれば新規アプリを制作する雛形から生成している=最低限のウィンドウは新規プロジェクトのウィザードが終了した時点で存在しているはずなのに、何も画面表示するものがなくて終わっているようなのであった。実際、ソースコードもActivity(画面表示)もプロジェクトの中に含まれていなかった。その後周辺の方の情報で把握したのだが、新規プロジェクトのウィザードにおいてBlankActivityを選んでいたのがだめだったようで、EmptyActivityを選べば解決した。この日はこの作業で大部分の時間を使っていた。家に帰ってからサンプルアプリを作ってこの日の作業は終わり。

2日目はもう一つ機能を付け加えようと、日経新聞の電子版の記事を取得できるAPIをAndroid上からアクセスする機構を作成。AndroidだとJSONパーサ(org.json.*)が最初から使えるので非常に楽だった。

日経新聞の電子版の記事をAndroid上で取得

おやつやエナジードリンクが支給される。

おやつ エナジードリンク

最後に、各チームの成果発表。
最優秀作品は、SHARPの自走式掃除機「COCOROBO」に顔認識付きカメラを取り付け、笑顔になったら撮影してくれる、というもの。

最優秀作品 投票結果

参加して

  • しばらく忙しかったこともあり、このように「決められた時間で、仕事以外で集中的にソフトウェア開発する」というのはかなり久しぶりであった。今回は自分の力試しになるようで楽しかった。頻繁にやると疲れてしまうが。
  • あと、今回のアプリ制作の方向性を考える際、技術的な面(どんな機能を入れるか)ということにばかり気が向きすぎて、どう使ってもらえるかという点をあまり考えられなかったのかな、と感じた。これをもしコンテストとして考える、つまり仮に上記した「Developer Application Contest」や「Mashup Awards」などのコンテストに出すと考えると、そこが評価されるポイントになるわけなので。
  • 上記で出した自分の案は個人的に作ってみようかなあ。前記の反省点を踏まえて。時間がなさそうだけど。


maraigue at 02:41コメント(0)トラックバック(0)イベントプログラミング 

2014年07月09日

追記(2016.7.26):C++1z(C++17)にて、「string_view」という名前で標準化される見込みとのことです。
C++17 Fundamentals
maraigue/fundoshi.hpp
以前公開した「文字列から部分文字列を取得する際、ポインタのみを受け渡すことでメモリ消費を抑える(ただし、元の文字列が変更されると部分文字列のほうも変更される)」というライブラリ。

2011年に制作してgist.githubに公開し、2012年5月に正式公開したのだが、
その一方で、これと同等の用途のライブラリが、C++の一大ライブラリ(特に、標準規格化を目指す機能が多数集まるライブラリ)のBoostに搭載されていることを、つい今知ったのである。
String_Ref - 1.55.0(公式リファレンス、英語)
boost::string_ref - Faith and Brave - C++で遊ぼう

調べてみると、これがBoostに採用されたのは2013年2月公開のバージョン1.53.0で、2012年9月にC++の新標準案として提起されたものを実装したものとのことである。

大手のライブラリに自分が欲しかった機能が乗る(しかも標準化も目指されている)というのは嬉しいことですが、その一方で、自分で作ったほうのライブラリをどうしようか、と思っている状況です。ライブラリ作者の宿命というかなんというか。

maraigue at 00:43コメント(0)トラックバック(0)プログラミング随想 

2014年07月07日

【この記事を書いたきっかけ】

  • std::map::atの存在を知って感激した
  • ただ、その意義から詳しく説明している記事が見当たらなかった

【解説】

実際にやりたかったのは以下のコードのようなこと。
「クラスのメンバ変数にstd::mapがあって、それを内容を変更しないという条件のもとでクラス外部から自由に触れるようにしたい」(つまり、値の取得や検索が自由にできる)というものである。

#include <map>

class MyClass{
public:
    typedef std::map<int, int> storage_type;
    
private:
    storage_type value_;
    
public:
    MyClass(){
        // ここは適当。実際は別の入力(ファイルの内容とか)に基づき
        // 何らかの値をvalue_に格納する
        value_[3] = 5;
        value_[5] = 10;
        value_[8] = 15;
    }
    
    // ここでstd::mapへのconst参照を返す
    const storage_type & value() const{
        return value_;
    }
};

MyClassのメンバ変数 value_ の内容を変更されないように、MyClassから value_ を渡すときはconst参照で返すようにしているのだが、その参照からキーを指定して要素を取得する際、 myc.value()[key] のようにアクセスするとコンパイルエラーになる。
これはstd::mapの[]は「指定されたキーの要素が存在しなければ新規に生成する」という挙動であり、constなメソッドでない(=インスタンスの内容を変更する可能性がある)ためである。

これを回避するための方法として、mapのメンバ関数「find」を用いるというものがある。ただこれは値の取り出しのために一度イテレータ型を定義したりしないとならないなど、記法の面で何かと面倒なのである。

// std::cout << myc.value()[8] << std::endl;
// ↑これはコンパイルエラー。myc.value()が示す参照の先を書き換えかねないため

MyClass::storage_type::const_iterator it;

it = myc.value().find(8);
std::cout << (it != myc.value().end() ? it->second : -1) << std::endl;
// ↑値が見つかるので「15」と表示

it = myc.value().find(10);
std::cout << (it != myc.value().end() ? it->second : -1) << std::endl;
// ↑値が見つからないので「-1」と表示

ということで困っていていろいろ調べていたら、C++11では「at」メソッドが新設されたことを把握した。機能としてはstd::vectorのatと類似している。すでにmap内に存在している値を取り出したり書き換えることに特化したもので、[]と異なり、キーが存在しなければ例外 std::out_of_range を発生するようになっている。
なおatメソッドはすでにmap内に存在している値を「書き換える」ことができると上に書いたが、atメソッドは実際、単なる参照を返すものとconst参照を返すものがオーバーロードで存在し、前者であれば値を書き換えることができるが後者ではできないようになっている。なおmap自体がconst参照で与えられている場合は、当然後者しか利用することができなくなっている。

try{
    std::cout << myc.value().at(8) << std::endl;
    // ↑値が見つかる。見つからなかった場合にcatch以降の部分が実行される
}catch(const std::out_of_range & e){
    std::cout << "Not Found" << std::endl;
}

なお、gccにおいてはすでにバージョン4.1.1の時点で独自拡張としてatメソッドが存在していたとのこと。なのでC++11の機能を利用する際に必要なgccのオプション「-std=c++0x」や「-std=c++11」がなくてもatメソッドは利用できる。

サンプルコードはこちら。

【参考記事】



maraigue at 23:22コメント(0)トラックバック(0)プログラミング 
livedoor プロフィール

H. Hiro

  • ライブドアブログ