2015.02.21

ロボットへの感情移入

「ロボット犬」蹴り飛ばすのは虐待!?  「ドラえもん」も巻き込み議論が白熱

どういうレスポンスをどういうタイミングでしたかで人は心が動く。特にタイミングによるところが大きいと思う。
その究極をエンターテイメントとしてビジネスにしているのがお笑いやバラエティの世界。
アドリブなんかが絶妙なタイミングであるとお笑いはもっと面白くなり、逆に微妙なタイミングでレスポンスをすると冷ややかになる。その冷ややかな雰囲気が逆に面白く見えてしまうのもまたタイミング。

どんなに見た目や会話の内容を工夫した所で、殴って5秒後に「イタイ」と棒読みされても、感情移入できない。よく出来てるね程度の反応しか帰ってこない。

各社から、コミュニケーションをウリにするロボットがいろいろ出ているが、イマイチぱっとしなかったのは、レスポンスの内容とタイミングが心を打たないから。で、多分その点に気付いて最大限感情移入を引き出そうと努力しているのがpepperなんだろう。だから吉本と組んだりするわけだ。

この記事にあるように、一言も発しないロボット犬の方が、中途半端にべらべらしゃべるロボットよりも感情移入されるのは、他のコミュニケーション系ロボットを開発している開発者からすると悔しく感じることだろう。

これぐらい炎上できたらロボット開発者の勝利だな。

| トラックバック (0)

2015.02.14

米政府、健康への影響が懸念される栄養素からコレステロールを除外する見通し

スラッシュドットwashingtonpostより。

約40年もの間使われていたコレステロールの消費量の基準値を外す見通しらしい。食品に含まれるコレステロールの量が血中コレステロール濃度に大きな影響を及ぼさない事がわかったからだとのこと。学校の昼食や、健康食品を提供する企業、食事療法等、幅広く影響を与えるだろうとのこと。そりゃそうだな。そして、かわいそうなのがアメリカの卵業界。卵にはかなりのコレステロールがあるわけですが、アメリカでの一人あたりの卵の消費量はピークの半分ぐらいになっている。栄養価が高くて、ともすれば健康食品として逆に増えていたかもしれなかったかと思うと不憫でならない。

Imrs

健康の基準とか気をつけ方っていうのは、時代を追う毎に変化するのはよくある話だけど、久々の特大クラスの変更じゃなかろうか。この変更を科学の進歩と捉えるのもひとつの考え方だけど、washingtonpostを見た限りでは、コレステロールに敏感なうさぎでたまたま実験していたからと言う随分いい加減な実験結果に基づいたもので、進歩と捉えるのはどうかなぁ。

で、興味深いのが、アメリカでは食品のコレステロールの含有量表示を義務化していてそれを見直す必要がでてくる。一方日本は、まだコレステロールの表示については検討中の段階で「今後検討が必要なもの」とある(栄養表示の対象成分について[平成25年12月4日]のP8あたり)。まさに一周遅れの状況で、日本の消費者庁にはもうちょっと頑張ってほしいものである。

| トラックバック (0)

2015.02.13

ISILの報道に感じる違和感

いつまでたってもISIL関連の報道の違和感が拭えない。

まず、いまだにISILをイスラム国と表記したり、あるいはイスラム国(ISIL)と表記してイスラム国の呼び名を優先している。
アメリカでは2014年からすでにISILという呼称を使っており、自民党も1月にはISILで統一すると表明しているにもかかわらずだ。イスラム国と言う国があたかも存在するかのように誤解を招きかねないというのが主な理由とあるが、すでにこれだけ報道された段階で誤解する人はいないだろう。しかし、こういった表現の気遣いをしていかないと深層心理で国として認識してしまう。
例えば、「イスラム国」人質事件で政府批判を許さないのは危険だ。田原総一朗は、『「イスラム国」と「準戦争状態」』と言った表現を使っている。「戦争」とは国家やそれに準ずるところ同士の争いをさし、国家に準ずる団体として認めた表現になっている。戦争とかではなく、単にテロ集団の標的になっているということだ。ISILには、国家のような体制があるとして「税金」や「法律」があるかのような表現も見られるが、これらも実態は暴力団のみかじめ料みたいなものであり、特定集団の内部の独自ルールに過ぎない。楽な言葉だし、センセーショナルに取り上げたいのはわかるが、国家間で使われる表現を使い続けると、ISILを国と暗黙に認めることにつながりかねず、その存在感は増し続ける。また、「イスラム国」と表現してしまうと、イスラム教が認めた組織とも思われかねない。これは、敬虔なイスラム教信者にとってはいい迷惑だ。ISILは、周辺のスンニ派・シーア派のイスラム教諸国の政府などから国家として認められていない。そういった意味でISILという言葉を使い続けてもらいたい。

そして、ISILの報道には言論の自由や報道の自由がよく主張されているのもおかしな話だ。
先日も、新潟市のフリーカメラマンがパスポートの返納を求められて記者会見をしていたが、政府としては当然の措置だろう。そもそも、このカメラマンの「報道」という言葉の定義が誤っている。報道とは、情報を持って帰ってきて広くその情報を公開できて初めて報道と呼べるのであって、戻ってこれなければそれは報道とは呼べない。今回の邦人殺害があったにもかかわらずわざわざ危険な地域に行くと宣言している人間を出国させて、再び同様の人質事件が起きてはそれは報道できたとは言えない。
個人的には、強制してでもISILと呼ぶようにすべきで、正しく報道せず単に過熱気味に報道しているマスコミには何らかの懲罰的なものがあっても良いと思っている。言論の自由とか報道の自由は、国では実現できなくてメディア発だからこそ世の中の状況を改善できる要素が含まれているからこそ、守られているのだと思う。そして、そういった状況の改善に少しでも見込があるからこそ、命がけの報道に意義があるのだ。単に世の中の状況を悪化するような報道の自由や言論の自由はいらない。

先に紹介した記事でも「政府に言うべきことは言わなければいけない」とあるが、確かにもっともなのだが、言うべき事がなければ無いでかまわない。野党のように政府のアラを無理やり探して日本政府の地位を下げ、相対的にISILの地位を上げる必要もないだろう。ISILは、メディアを使って確実に国家としての地位を得つつあり、メディアは無責任にISILが国になるように報道の中で助けているように見える。メディアに対しては、もっと報道に気を遣い、ISILのプレゼンスを上げる手助けにならないよう気を使ってもらいたい。

| トラックバック (0)

2014.12.28

Android Wear 開発メモ

基本は、15分ではじめるAndroid Wear開発 - 実機を使った開発環境の作り方を参考に進めた。

いままで64bit機上で、32bit版で開発を進めていてトラブルが特になかったのだが、最新版のAndroid Studioはそれを許してくれないらしい。ということで、JDKは64bitで開始。

64bit版でよく出くわすトラブルが、アップデート時に「アクセスが拒否されました」。基本、管理者権限でAndroid Studioを起動しなおすと解消される。こちらを参考にさせてもらったんだけど、管理者権限でアプリをバンバン動かすのは気持ち悪くて嫌だ。

多分、Android Studioのインストールまではうまくいったと思う。

File->Project Structure の「JDK location : 」が32bitのJDKを参照している場合がある。その場合は64bitに修正。

まずは動作確認として、ウェアラブル端末用Android Wearアプリ開発の基礎知識を試してみる。

Gradleのおかげなのか何なのか、原因不明のエラーは何度か出るものの、いろいろアップデートしたら自然と解消。

| トラックバック (0)

2013.12.30

AdMob登録時の注意メモ

main.xmlに

<com.google.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-xxxxxxxxxxxxxxxx/yyyyyyyyy"
ads:loadAdOnCreate="true" >
</com.google.ads.AdView >

を追加してadmobを追加するときによくやる失敗で出るエラーが

Not enough space to show ad! Wants:○○○

と言うもの。
外側のLayoutに、paddingが入ってて、サイズが足りなくなっていることがある。
padding部分をとって、確認してみよう。

ここをよく参考にして、どこが違うか確認しよう。

| トラックバック (0)

2013.11.04

dropboxのAPI(android)を使ってみた(3)

ようやく、Dropboxが使える準備が整いました。

あとは、チュートリアルほぼそのままです。

まず、定数の宣言。


inal static private String APP_KEY = "INSERT_APP_KEY";
final static private String APP_SECRET = "INSERT_APP_SECRET";
final static private AccessType ACCESS_TYPE = AccessType.INSERT_APP_ACCESS_TYPE;

INSERT_APP_KEY、INSERT_APP_SECRETには、それぞれ、取得したApp KeyとApp Secretを入れる。
INSERT_APP_ACCESS_TYPEには、APP_FOLDERを入れました。

宣言した3つの定数をDropboxAPIのオブジェクトに渡してやり、認証を開始させます。

private DropboxAPI mDBApi;

AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET);

AndroidAuthSession session = new AndroidAuthSession(appKeys, ACCESS_TYPE);

mDBApi = new DropboxAPI(session);

mDBApi.getSession().startAuthentication(DBSend.this);

ここを通るとき、アプリ上では、Dropbox認証用のサイトに飛びます。

また、認証を終了するために、onResumeに以下のルーチンが必要。

protected void onResume() {

 super.onResume();

 if (mDBApi.getSession().authenticationSuccessful()) {
  try {
   // Required to complete auth, sets the access token on the session
   mDBApi.getSession().finishAuthentication();

   AccessTokenPair tokens = mDBApi.getSession().getAccessTokenPair();
  } catch (IllegalStateException e) {
   Log.i("DbAuthLog", "Error authenticating", e);
  }
 }
}

ファイルをアップロードするには以下の様な感じ。

 File file = new File("working-draft.txt");  FileInputStream inputStream = new FileInputStream(file);  Entry response = mDBApi.putFile("/magnum-opus.txt", inputStream,file.length(), null, null);

「working-draft.txt」はandroid内にあるファイル名。
「/magnum-opus.txt」は、dropboxの保存先。
ここで、保存されるのはアプリフォルダの下の登録したアプリ名の下にできます。
ここにできるという事に気づかず、結構はまりました。

意外にあっけないけど、保存先フォルダが見つからず結構苦労しました。


| トラックバック (0)

2013.11.01

dropboxのAPI(android)を使ってみた(2)

SDKのダウンロード
まず、開発者用サイトから、SDKをダウンロードします。右側のDrop-ins, Datastore API, Sync API, Core APIの中から選んで、Install SDKからダウンロードできます。
試してみたのは主にCore APIなので、Core APIベースの説明になりますが、大体どれも同じ感じだと思います。

libをコピー
zipファイルを展開すると中にlibフォルダがあります。
androidのプロジェクトのlibフォルダにlibフォルダの中にあるファイルをコピーします。見えているjarファイルだけでいいですが、面倒なのでまるまるコピーしました。

アプリケーションの登録
続いて、自分のアプリケーションがdropboxを使えるように登録します。
開発者用サイトから、App Consoleを選んでCreate appを選択。
まず、Drop-ins appかDropbox API appを選ぶ。今回は、Dropbox APIを選んで、
今回一通りのことを試したかったので、「Files and Datastores」「No - My app needs access to files already on Dropbox」「All file types」を選択して、アプリ名を入力して適当に進むと、App keyとApp secretが発行されます。

AndroidManifest.xmlへの追加
こちらに従って、Dropboxが、認証できるように、以下の部分を追加します。

<activity android:name="com.dropbox.client2.android.AuthActivity" android:launchMode="singleTask" android:configChanges="orientation|keyboard"> <intent-filter> <!-- Change this to be db- followed by your app key --> <data android:scheme="db-INSERT_APP_KEY" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>

ここで、INSERT_APP_KEYには、登録したApp Keyを入れること。
db-INSERT_APP_KEYをApp Keyに置き換えるのではなく、db-を残して、続く「INSERT_APP_KEY」を置き換える。これに結構ハマってしまった。

また、Dropboxはネットを使うので、以下も追加していなかったら追加すること。


<uses-permission android:name="android.permission.INTERNET"></uses-permission>

| トラックバック (0)

2013.10.26

dropboxのAPI(android)を使ってみた(1)

Dropboxが、新たにAPIを公開したらしく、dropboxのAPIを初めて使ってみることにしました。その時のメモです。

開発者用のサイトは、こちら
Drop-insDropbox APIがあります。

Drop-ins
ChooserとSaverに分かれてます。ChooserはDropbox内にあるファイルに簡単にアクセスできるアプリが作れます。Saverは、ファイルをワンクリックでDropboxに落とすことができます。どちらも凄くシンプルなAPI。

Dropbox API
Sync API、Datastore API、Core APIの3種類があります。Sync APIは、Dropboxのファイルをスマホのアプリと簡単に統合して同期して使えるようになります。Datastore APIは、構造化されたデータをアプリから保存できるようになる。Core APIは、Dropboxへの保存もしくはDropboxからのダウンロードができるもので、従来バージョンのようです。


| トラックバック (0)

2013.09.10

アイコンが2つ表示されちゃったメモ

いろいろと、試していた時に、気がついたらアイコンが2つ表示されるようになっちゃった。
悩んだけども、原因はActivity内に、以下が複数あったからだったみたい。

<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />

何も考えずにコピペするのは良くないですね。

| トラックバック (0)

2013.09.07

ボタンを等間隔に表示するときにハマった事のメモ

横にボタンを等間隔に画面いっぱいに並べたいとき、各ボタンに、横幅方向に

LinearLayout.LayoutParams.MATCH_PARENT

を指定すれば、勝手に等間隔に並ぶだろうと思ってたら、そうは行かなかった。
実行してみると、1つ目のボタンが横幅いっぱいに表示されてしまう。
解決するには、weightを指定しないといけなかった。

weightって、デフォルトでは自動で割り振られるわけじゃなかったんですね。
という訳で以下の様な感じにしたらうまく行った。

Button button1 = new Button(this); Button button2 = new Button(this); LinearLayout buttonLayout = new LinearLayout(this); buttonLayout.setOrientation(LinearLayout.HORIZONTAL); buttonLayout.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

buttonLayout.addView(button1 , new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT,1));
buttonLayout.addView(button2 , new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT,1));

| トラックバック (0)

«enchantMOON(5)