「 2011年01月 」一覧

指名がメインのタクシー運転手さん

最新世代のタクシー運転手さん – tatsdesign's posterous

世界を向いてかつネットを活用して、というところがポイントかもなぁ。

私の経験だと2年くらい前、会社帰りに流してた個人タクシーを拾って乗った。

プリウスだったか、綺麗な車内と落ち着いた雰囲気の運転手さんでいろいろと話をしていると、その人も個人タクシーというのもあって個人に仕事の依頼が来ることが多いんだそうだ。

普通は営業タクシーでも個人タクシーでも配車センターに電話して、というパターンがほとんどだと思うけど、その人は直接お客さんから依頼があるので、例えば駅や繁華街でタクシーの客待ちの列に何時間も並ぶようなことはほとんどしないんだと言っていたように思う。

で、そういう直接指名して貰えるように色々気を配っているとも言っていた。乗ったお客さんにどういう声をかけるか、どういう会話をするかとか、乗っている時間は短くても快適に乗って欲しいから、と。

福岡もタクシーは本当に数が多いけど、中には少し違う土俵で商売しているタクシーもあるんだなーと思ったのがその時だった。ふと冒頭のエントリ見て思いだしたので書いてみた。


「おもてなし」ができないのは製品の開発体制か?

Life is beautiful: 組み込みデバイスの開発にこそ必要な「おもてなし設計」

記事の流れ的に、日本のメーカー駄目だねという流れになっていて同意するところも確かに多いのだけど、あえて少し見方を変えてみる。と言ってもメーカー擁護というわけでも無いのだけど。

最初からスペックありき、か?

国内のメーカーが全くマーケティングをやらずにスペックだけ見て商品作ってるか、といえばそうでもないと思う。

携帯電話だとメーカーの企画屋さんなんかは、ターゲットユーザーと利用シーンは結構考えて製品作りをしているように見える。それをキャリアに提案して採用されるかどうかというのもあるし、企画が考えている事を技術屋が実現できてるとかいうところ。

おそらくだけど、企画屋さんは「スペックありき」で企画はあまりしてないと思うんだけどな。カメラの画素数とかは「キレイに撮れる」とかで推すケースもあるだろうけど。あとAppleほど「ユーザー体験を具体的に」考えているかと言われると、どうかとは思うけども。ただそれほど酷くは無いと思う。

企画を実際に製品として設計する段階で、「こんな高性能なチップが出てきた」「カメラも高画素なものができたから」という感じで、ハード面で「これを載せれば他社に」的なプッシュが入り始めるんじゃなかろうか。

企画の理想と開発の現実

で、実際にソフトの開発が始まるとスケジュールや工数の影響で「企画が希望していたこの機能は技術的、予算、工期などの制限で実装できない」というのがあちこちの機能で起きる。

そうこうしているうちに開発終盤ではもともとの企画案を100とすると、実現できたのが60とか80だったりする。もともと予定していた「イチオシ」がそう謳えない状況になると、スペックを前面にしてアピールするしか無くなってくる。

実際に製品の良さを殺しているのは開発周りの拙さも大きいと思う。「おもてなし」レベルできちんと設計できるほどの期間も予算も与えられてないだろうし、それをソフトなどで実現する時の開発のゴタゴタ(タイトな期間と予算)でスポイルされてる。

ソフトもほとんどが外注だから、細かいブラッシュアップをしようにも「その作業分のお金を貰っていません」「工数が無いので他の作業とバーターです」という話になって、メーカーがやりたいことがやれない。下請けも少ないお金でかなり無茶振りはされるのだけど、あくまでもビジネスであってボランティアでは無いのでどこかで一線を引かざるを得ない。

本当にメーカーが作りたいものを作るには、内製率を上げるか予算を付ける、開発期間をきちんと取るのが先では。外注はあくまで外注であって、どこかでビジネスライクになるし、iPhoneレベルのUIを2ヶ月で作れとかいう号令がかかるような無茶な開発やってる限りは無理だと思う。

発売時の取り上げ方は?

あと新製品を一番最初に触って記事を書く人や、アーリーアダプターな人たちが「スペック重視」なのもあるんじゃないかな。

ファーストインプレッションのWeb記事やブログ記事は商品の売れ行きに多少なりとも影響あるだろうけど、その手の記事はスペックの羅列が多い。

書く側から見れば前世代や他社製品とスペック比較して記事を書くのが楽なのだろう。CPUがxxからyyに変わって速くなったからUIがサクサク動くとか、カメラがxx画素になってキレイに撮れるとか、xxエンジンを搭載してどうとか。ただここはメーカーが製品発表するときに製品のビジョンを示しきれずにスペック表を配ったりしてるせいもあるとは思うけども。


光学系マウスの当たり外れ

自宅で使っているデスクトップPC向けのマウス、ホイールの回転が悪くなってきたので何か買い換えようかと思案した。

・今はLogicoolのMX518の光学式の有線マウス
・ノートPCではLogicoolのM505、ワイヤレスでレーザーマウスを使っている
・そろそろワイヤレスにしたい。数年前のワイヤレスは送受信が不安定な印象だったけどM505を見る限り問題ないだろう。
・ホイールが無抵抗で動くのにも興味あり

ここで一つ大きな問題が。PCを置いているデスクの表面と光学、レーザーマウスととても相性が悪くM505はマウスパッド無しでは使えない。今のところ安定しているのは、Logicoolの光学式のみ。できればマウスパッドは使わずに直接デスクで使いたい。

Logicoolのレーザー系が相性悪いのはM505の動きで分かっているので選択肢には入れられない。LogicoolにはDarkfieldレーザーなる新技術もあるみたいだけど、まだハイエンドモデルにしか載っていないので金銭的にあんまり。

ヨドバシの売り場でいろいろ見ていたのだけど、最近のマウスはモバイル向けの小さめのが多い感じがして、手の大きな私にはデスクトップ向けの大きなマウス自体の選択肢があんまり無さそう。

と考えた末に、

バッファローコクヨサプライ BUFFALO BlueLEDダブルレンズ無線マウス 5ボタンタイプ USB ブラック BSMBW01BK バッファローコクヨサプライ BUFFALO BlueLEDダブルレンズ無線マウス 5ボタンタイプ USB ブラック BSMBW01BK

バッファローコクヨサプライ 2009-11-05
売り上げランキング : 21172

Amazonで詳しく見る by G-Tools

を買ってみた。

結果から言うと、少しポインタが不安定になるので満足まではいかない。あと製品ドライバが無いのでボタンのカスタマイズができないのもマイナスポイント。BlueLEDなのでレーザーよりかは良いかと思ったけど…。

ただホイールの感触(無抵抗)は良いし、マウスの大きさも小さくてストレス感じるほどではない。

机との相性とは言え、マウスは買ってきてから当たり外れがわかるところがあるので難しいな…。


買った本(はやぶさ関係、Linuxデバドラ)

Amazonなどで気になってカートに入れていた本を、ジュンク堂で買う。

小惑星探査機 はやぶさの大冒険 小惑星探査機 はやぶさの大冒険
山根 一眞

マガジンハウス 2010-07-29
売り上げランキング : 3364

Amazonで詳しく見る by G-Tools

探査機はやぶさ7年の全軌跡―世界初の快挙を成し遂げた研究者たちのドラマ (ニュートンムック Newton別冊) 探査機はやぶさ7年の全軌跡―世界初の快挙を成し遂げた研究者たちのドラマ (ニュートンムック Newton別冊)

ニュートンプレス 2010-07-27
売り上げランキング : 10250

Amazonで詳しく見る by G-Tools

宝島チャンネル – はやぶさ、そうまでして君は

最後の本だけAmazonからリンクが張れなかった。

はやぶさ関係はネットで突入の時の盛り上がりとかを見て多少は興味があったものの、それほどでは無かったのだけどちょっとだけ読んでみようかと。

Linuxデバイスドライバプログラミング Linuxデバイスドライバプログラミング
平田 豊

ソフトバンククリエイティブ 2008-06-28
売り上げランキング : 27545

Amazonで詳しく見る by G-Tools

将来的にはAndroidで何かデバイスを繋げたときに簡単なデバイスならドライバを書けるように、もしくは仕組みくらいは理解しておきたいので。

WindowsではWDMを使ってUSB/NDIS/Serialのカーネルドライバを仕事で書いたことがあるので、デバイスとその辺のプロトコルはある程度理解しているつもり。なので、あとはLinux環境でのドライバの作法を理解すれば…とか考えているのだけど。

先週はGAEやるって書いてたんじゃないのかって言われそうだけど、上のレイヤも下のレイヤもやってみたいことがあるから困る。


Webカメラのオートフォーカス

時々、ブログ用に動画を撮ることがある。

普段はGalaxy Sの動画機能でたいていは事足りるのだけど、ちょっとWebカメラを調べてみたら、WebカメラもHDで撮れるのが主流なんだね…。

いろいろ見てて思ったのがオートフォーカス付きのWebカメラってAFがどれくらい改善されてるんだろうと。

私が持っているWebカメラは2年くらい前にかったオートフォーカス付きのBuffaloのものなんだけど、これが対象物が動くとしょっちゅうフォーカスを合わせに行く。そのときに一旦いちばん遠景に持って行ってからフォーカスを合わせるような動作をするので、人や物がちょっとでも動くとまともに撮れないものだったのでそのトラウマがあるのです。

Youtubeを見るとWebカメラはレビュー動画が上がっていることが多いのでそれを見ているけど、やはり大きくは改善してなさそう。とすると逆にAFなしの機種を選んだほうが良い場合も多そうということかも。

逆にAF付きだと接写ができる、というメリットは確かにあるけどねぇ…。

もっと欲を張るなら、ビデオカメラ買ってそこからキャプチャしろって話になるんよね、きっと。


Honeycomb出たけどさわれてない

深夜まで働いて、いつもより少し遅く起きた日に限って、起きたらHoneycombのSDKがリリースされてたり。

Gingerbreadからエミュレータがどんどん重くなっててHoneycombはもはやまともに動かない。画面のエフェクトを切ると少しはマシかなという程度。

UIがちょこちょこ変わっていて、Fragmentという概念が入ってきていたりする。Activityの中に直接配置していたUIのViewどうしをグルーピングして扱うような感じ。

リストの2ペインの画面を作ろうとガイドを読みながら少しコードを書いていたのだけど、ガイドに書いてあることの意味を取り切れずにまだ自分の思うUIをFragmentなどを使って実現できるかが分かってない。

直近でデバイスも無いし、仕事ではタブレットをやるかもわからないので一通り触ったらGingerbreadのほうにいったんは戻るかも。


クリティカルなバグ

不可解な現象が起きていたのでいろいろ調べてみた結果、他責だったのだが…。

今こんなクリティカルな現象が出てていいんだろうか…。落ち着く気がしないのがイヤな感じがする。


九州GTUG第ゼロ回勉強会に参加してきた #QGTUG

九州GTUG(Google Technology Users Group)第ゼロ回勉強会に参加してきた。

…と言っても会社を抜け出したのがかなり遅い時間だったので、Googleの松尾さんの話の最後のあたりからの参加になってしまった。

移動中などにUstreamで松尾さんの話を聞きつつ来ていたのだけど、GAE素人の私にはまだまだレベルの高い話で、もっと勉強してからだなぁと思う内容。

2011-01-24 21.42.51

LT

その後の崇城大学の和泉さんの告知は、学生さんにゲームを開発させてそのコンテストの投票をWebでやります、そしてその投票システムがGAE使ってますというのと、「にわるか」というTwitterのハッシュタグの仕組みを発展させたようなシステムもGAE使ってますという話。ゲームの投票のほうはどんなゲームが出てくるか興味あるところ。

2011-01-24 21.59.04

Sojo University Unity3D Competition
にわるか

今回発足する、九州GTUGの幹事である松岡さんのLTはGAEをスモールスケールさせて使う、というあえて逆張りっぽい話題だったけど、確かに地域性考えるとそうかも、と思う内容。

2011-01-24 22.09.16

クラウドはスケールさせるほうに目が行きがちで、日本中、世界中とか大企業ユーザーを相手にするならそれでいいのだろうけど、身の丈の仕事を見てみるとどちらかというと小さなユーザーさんが多い。そういうところにもクラウドの最小構成はフィットするしコストもほとんどかからないのではという指摘。

たしかにクラウドが盛り上がっていたり、Hadoopなどの大規模分散処理の勉強会が東京のほうで盛況だったりするのを見ていて、「どれだけのエンジニアが実際問題として大規模スケールを扱う環境にいるのだろう」と思っていたというのもあるけど。

その他

Googleの松尾さんとも挨拶させて頂いたけれど、こちらが全くGAEの素人なので突っ込んだお話もできず逆に申し訳なく…。

第ゼロ回勉強会としては盛りだくさんの内容で、今後自分がついて行けるかなーとか思ったり。とりあえずGAE/Pythonで簡単なWebアプリ作ってみるくらいはやっておいたほうが良いかな、とは思ったけれど。

あと、せっかく九州GTUGという新しいコミュニティが立ち上がろうとしているので、技術コミュニティに興味のある人はぜひ今のうちに飛び込んで参加して色んな人と会ったり話したりして欲しいなぁと。立ち上がり当初のコミュニティには「常連」もいないし、みんなで方向性とかを決めていこうとする段階なので、初心者や興味のある人にとっては一番飛び込みやすい状態。

ある程度期間が経って半固定化したコミュニティだと逆に「入りづらい」と思ったり思われたりことが多いのでね…。

なので私もAndroidと違って素人な分野が多くて、アウェイな感じのする九州GTUGだけれどできるだけ参加していこうと思う。

でも、私はメインのAndroidの会のほうの活動も頑張らないとなぁ。

ともかく、参加した皆さま、スタッフの方、そして松尾さん、お疲れさまでした、そしてありがとうございました。

Ustream

九州GTUG第ゼロ回勉強会 on USTREAM: Googleのテクノロジーについて技術者、技術に興味がある人たちの勉強会です。 第ゼロ回ではPythonでGoogleAppEngine上にアプリケーションを構築する方法など、GoogleAppEngine関連の話題を中心に勉強会を行う予定です。 9/24…


LinkedinのiPhoneアプリが一足早く日本語化されている

2,3ヶ月前くらいから、思い立ってLinkedinに登録していたりするのだけど、あるときiPhoneアプリがあるのを知った。

インストールして使ってみると、iPhoneアプリのほうは日本語化済みなのよね…。facebookアプリによく似たUI。

5380919107_1d1b917235_o

あと、なにやらBumpによく似た仕組みもあったり。

Webサイトも、近いうちに日本語化対応をするらしいと聞いたけど、日本語化されるとどうなんだろうな。

最近のTwitterでもそうだけど、自営業の人やお店の宣伝用無差別フォローとかがかなりの割合占めてきてるような状態だし、Linkedinも「○○コンサルタント」自称「20代で成功した起業家」とか、こういう人たちが跋扈して宣伝DM飛ばして回るようなことになりそうな感じがする。

時代の先を行って成功した、と言っている人のほとんどがTwitterもブログもfacebookとかも流行ってからしか使わない感じもするけど。単に宣伝に使えるかどうか(人が集まってるかどうか)だけで見てるからかな。

最近のTwitterの宣伝系フォローって、フォロー専用のツールがあるみたいである程度自動でやってくれるっぽいし。自動でアフィリエイトサイトを生成するツールとあまり本質は変わってないんだろう。


Arduino + Bluetooth + Androidで遊ぶ

こないだの

Arduinoとブレッドボードを初めて触ってみた – きままな日記帳

で、Arduinoを使ってLEDとキャラクタLCDの制御はうまくいった。

私の目的は、Androidをメインにやっていることもあって「ArduinoとAndroidを組み合わせる」こと。ArduinoとAndroidを連携させるにはどうすればいいか調べてみた。

まず、AndroidデバイスからはWifiかBluetoothくらいしか外部のハードウェアとやりとりする手段が無い。BeagleBoardのようなボードならどうにでもなるだろうけど、市販のAndroidデバイスで考えるとワイヤレスで、となる。

ArduinoでWifi

WiFly Shield – SparkFun Electronics

WiShield 2.0

というものがあるらしいが、国内で扱っているところは無さそう。

もし入手できたらチャレンジしてみてもいいけど…。入手性が難なのでとりあえず今回はパス。

ArduinoでBluetooth

こちらはすでに例をたくさん見かける。

side2 » AndroidとArduinoの接続で使えそうなBluetoothモジュール
このような素晴らしいまとめもあるし。

探してみた結果、SparkfanのBluetoothMateがちょうどマルツパーツ博多店に在庫があったので、早速買ってきた。

値段は約6500円。分かってはいるけど高いよね…。

ArduinoでUSBホスト

ArduinoはUSBホストにもできるらしく、USBホストシールドなるものも売られていて、これとPC用のBluetoothドングル使えば良いのでは?と思って調べてみたものの、ドングルを制御するドライバっぽいものを書かないといけなさそうだし、いきなりチャレンジするにはハードルが高そうだったので断念。

USBホストシールドと、Arduino-BluetoothプロジェクトのGitHubに上がっているソースを使えば動くのかもしれないけど…。どのデバイスでもこれが適用できるのかな。WindowsとかでMicrosoft純正のドライバがインストールされるようなBluetoothデバイスならUBS的に規格が決まってるんだろうか。

ArduinoとBluetoothMateを繫げる

BluetoothMateはシリアル接続だ。

建築発明工作ゼミ2008: Arduino-Processing BlueTooth通信+曲げセンサ

これらのサイトを参考にすると、早い話がVcc/GND/Rx/Txを繋げばOKらしい。BluetoothMateからはCTS/RTSも出ているのだがArduino側に受けるピンが無い。フロー制御が効かないけど今回はクリティカルな用途では無いので目をつぶる。

実質配線は4本なので簡単。…といいつつ、ArduinoとBluetoothMateのRx/Txをクロスして繫げないといけないことにしばらく気づかなかったけど。

2011-01-23 04.26.25

Arduinoに電源を入れると赤ランプが点滅する。この間にPCやAndroidデバイスからペアリングしておく。

通信する

BluetoothMateはRFCOMMの扱いなので、Arduino上ではSerialクラスを使えば送受信できる。

Arduino側から定期的にSerial.write()するようにしておき、PC上でTeraTermを使ってCOMポートを開くときちんとデータの受信ができていた。とりあえず基本的な動作は問題ないようだ。

Android側の処理

Android側では、BluetoothAdapter/BluetoothDeviceクラスを使ってペアリング済みのリモートデバイスを取得し、BluetoothDevice#createRfcommSocketToServiceRecord()でRFCOMMのソケットを作成して接続。あとはStreamを張れば良い。

とりあえず受信だけ行うコードを以下に。テスト用とばかりにonCreate()で全部やってしまっている痛いコード。

package net.swingingblue.android.btarduino;

import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Set;
import java.util.UUID;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.util.Log;

public class SimpleBTTestMain extends Activity {

	private static final String LOG_TAG ="BT_Arduino";
	
	/* SPPで繋げる時のUUIDは決まっている模様 */
	private UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
	
	private BluetoothDevice btDevice;
	private BluetoothSocket btSocket;
	
	private Thread thread;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // Android端末ローカルのBTアダプタを取得
        BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
        // ペアリング済みのデバイス一覧を取得
        Set<BluetoothDevice> btDeviceSet = btAdapter.getBondedDevices();
        
        Iterator<BluetoothDevice> it = btDeviceSet.iterator();
        
        if(it.hasNext()){
        	// とりあえず最初にマッチしたもの。本来はちゃんとデバイス判定しないとダメ
        	btDevice = it.next();
        	Log.d(LOG_TAG, "btAddr = " + btDevice.getAddress());
        }
    
    	try {
    		// RFCOMM用のSocketを生成
			btSocket = btDevice.createRfcommSocketToServiceRecord(uuid);
			btSocket.connect();
			
			thread = new Thread(new Runnable() {
				@Override
				public void run() {
					try {
						// connectできればInputStream/OutputStreamで通信できる
						InputStream inStream = btSocket.getInputStream();
						
						int retByte = inStream.read();
						if (retByte != -1) {
							Log.d(LOG_TAG, "retData = " + Integer.toString(retByte));
						}
						
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			});
			
			thread.run();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
    }

	@Override
	protected void onPause() {
		super.onPause();
		
		thread.stop();
		try {
			btSocket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

キャラクタLCDと組み合わせる

このままだと固定データのやりとりだけだし、送受信データもAndroid側のLogcatを見るくらいしか手段が無い。

ふと、ちょうど昨日作ったキャラクタLCDに文字を出す回路とスケッチがあるのでそれと組み合わせてみようと思い立つ。キャラクタLCDもBluetoothMateも配線的にはバッティングしないので、そのままArduinoに繋げれば良い。

Arduinoのスケッチは、シリアルで受信したデータをバッファに入れ、1文字ずつLCDに表示させるように変更。

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12, 13);

int data[128]={};
int incomingByte;
int dataLength = 0;

void setup() {
  pinMode(6, OUTPUT);

  // set up the LCD's number of columns and rows: 
  lcd.begin(16,2);
  lcd.clear();
  
  Serial.begin(115200);
}

void loop() {
  // LCD Back light on
  digitalWrite(6,HIGH);

  // set the LCD cursor to (0,0):
  lcd.setCursor(0, 0);
  
  // see if there's incoming serial data:
  int count = Serial.available();
  if (count > 0) {
    Serial.print(count);
    dataLength = count;
    for (int i=0; i < count; i++) {
      // 一旦バッファに入れ繰り返し表示できるようにする
      incomingByte = Serial.read();
      data[i] = incomingByte;
    }
  }
  
  for (int i=0; i < dataLength; i++) {  
    lcd.write(data[i]);
    delay(300);
  }
  
  delay(300);
  lcd.clear();
  delay(300);
}

Android側は、EditTextとButtonを配置したActivityを作って、入力した英数字をButtonが押されたら送信してやるようにする。

とりあえずここまでは完成。

ここまで調べ物したり配線してコードを書いたりしながらで、約4~5時間くらいだと思う。

これから

ひとまず、Arduino側、Android側とも送受信のやり方が分かったので、あとは

・Arduino側に何を繋げていくか(センサ、アクチュエータ)
・Android側もGUIやデータの見せ方をどうするか、Android自身のセンサーなどと連動させるか

という「何を作るか」という段階に進むためのベースはできたと思う。

ひとつ、上記のArduinoの回路はキャラクタLCDとBluetoothMateの両方を繋いでいるので、電圧か電流が不足気味でキャラクタLCDのバックライトがチラつく。もう少し安定した電流を流してあげないとダメかと…。

参考にしたサイト

すでに参考になるサイトがたくさんあって、助かりました。

Bluetooth Mate Tutorial

建築発明工作ゼミ2008: Arduino-Processing BlueTooth通信+曲げセンサ

Blog: Arduino と Bluetooth


スポンサーリンク