2013年12月15日日曜日

Startup Session@大阪イノベーションハブに行ってきた話


Startup Session@大阪イノベーションハブに行ってきた.

元々のモチベーションは,
起業ノウハウを知りたいとかいうものではなく,
辻野晃一郎さんの仕事観や将来の家電業界をどう見ているのかを知りたかったから.
GoogleとSonyで働いた人が,未来に何が必要で今どう行動すべきだと思っているのかが気になっていた.

このイベントでのメモをまとめておく.


【大阪発イノベーションは世界を変えられるか?@辻野晃一郎】

- 東日本大震災で考えたこと
  様々なdecisionのスピードを上げていかなければならない
  コンセンサスを疑わない日本国民の持つ問題が浮き彫りになった

- デジタル家電はコモディティ化した
       家電新製品も半年程度で半値.
       もはや消耗品なので壊れたら修理よりは買い替えになってる.
       ⇒ 家電を取り巻く環境も大きく変わり,家電そのものの再定義が進んでいる.

- あらゆることの再定義が進んでいる
      グローバルインフラとしてのインターネットが考え方を変えた
      グローバリゼーションの再定義

- Googleの目線
  Googleでは地球規模で物事を考えている
  目線の高さを変えると発想が変わる
  小手先のノウハウよりもマインドセットの持ち方こそが重要.

-  これからの家電
  雲を除く窓としての家電機器の再定義
  日本が世界に先ん出ていた家電機器の時代は代わった.
  => Googleはmotorola買収後,ハードウェアも精力的に作り始めている.

  (例) Sony/Googleのウェアラブルデバイス
    Sony HMDとGoogle glass
    家電屋さんは既存の流れで同じものを作ってしまう

一方で,シリコンバレーの連中が作るものは概念が違うものをつくってしまう.
クラウドを


   家電の世界はすでに再定義が進んでしまった.
   新しいプレイヤーに置き換わった

  自動車業界は... 
   無人走行の世界で最も進んでいるのはGoogle
         => 自動走行車は複数の州で無人走行できる
    ITデバイスとしての車の再定義
  
* テスラモーターズ
  - 日本の製造業の強みは垂直統合型
    ⇒ 必要な物は自前で作る
  - ITは水平分業型を好む.
    ⇒ 車専用のバッテリーの開発等はせずに買い集めてソフトウェアで制御する
  自前主義にこだわるあまり,競争力が弱くなる


* Elon Muskの話
 テスラモーターズ創業者の一人
 これからの人類にとって大切なモノはなにか.
 アメリカのダイナミズムはたった一人の妄想家が次々とやってのける世界.
 それに多くの投資家が資金提供している.

* 加速する新陳代謝
世の中が変わってしまっているのに日本は未だに既存のものの延長線上で考えている.
あまり議論を唱えず既存のものを良しとする思考スタイルでは世界で勝っていけない.
遠い未来から発想して今の行動を決めるスタイルでやっていくことを薦める

* これからのビジネス
 ・外貨を稼ぐビジネス
  21世紀の新しい経済モデルやものづくりスタイルを創出
  インターネットクラウドのフル活用
  世界に向けたチャレンジ

・世界に出ていくためのアプローチ
  世界共通語としての英語による展開
  グローバルデファクト(facebook,google apps, etc)の活用
      ローカライゼーションよりも世界の最大共通項で世界を攻めていく
  (amazon,googleの方法)
  最初の段階からそういった考え方で自分の事業を設計していくのが良い.

楽天は逆.コテコテの日本流ECを作ったため,
海外に持っていた瞬間にやり直し.グローバルからローカルといったやり方の逆なので,
余計なオーバーヘッドがでてしまっている.

* 日本のビジネス環境
  スタートアップにリスクマネーがまわっていない.
  キャッシュで持っていても死に金.
  スタートアップにお金を流すことでイノベーションを起こす仕組みづくりをしていかないといけない

* イノベーションを生み出して支援する,その一つがクラウドファンディング
  人がやらないことをやる
  人にやれと言われた仕事はしない

* player ではなく platformer
  IT型のスピードとスタイルを意識したものづくり
  デバイスだけでなく生態系全体を包括した意識
  プラットフォームビジネスの成功はプレイヤーとしての成功とスケールが全く違う

* スタートアップの心得
 - 現在のスタートアップ
   日本のことしか考えないで起業する人
   コンセンサスを疑う.
 直接海外にリーチする
 決済手段ならPaypal
 海外の人達にも理解されるテイストでサイトを作る
 最初の物の考え方で後々のスケーラビリティに差が出てくる


 日本企業の特徴は偉くなるとハンズオフ,
 現場から遠ざかる傾向にある.
 常に色んな物を見て異業種の人と見なきゃいけない.
 いろんなところをとにかく見て回ること.

How to download files automatically with python + cygwin

There are excellent lectures in coursera.
I like startup engineering the most.
From the lecture, we can get knowledge about how to utilize IaaS especially AWS.
AWS made it easy to get in touch with computing with good hardware without purchasing PC.

Then, I want to learn the lesson offline.
It is because there's no network infrastructure outside my room.
But it takes a lot of time to download all the contents by clicking through browser.....



So I implemented a python script to get all the files from the site.
The following script is one of the example for achieving that.

This script was confirmed to function well under cygwin + python2.5.



import subprocess, sys

# ---------------------
def wgetFunc(destFile, url):
 cmd = "wget --no-check-certificate -O " + destFile + " " + url
 print cmd
 subprocess.call(cmd, shell=True)
# ---------------------

# Parameters ----------
destDir       = "/cygdrive/d/tmp/"
searchStr     = "https://class.coursera.org/startup-001/lecture/download.mp4?lecture_id="
listUrl       = "https://class.coursera.org/startup-001/lecture/index"
localListFile = "index.html"
# ---------------------


print "[1] Create destination directory"
subprocess.call("mkdir " + destDir, shell=True)

print "[2] Get index file"
wgetFunc( destDir + localListFile, listUrl )

print "[3] Parse html to get file list"
F         = open( destDir + localListFile, "r")
urlList  = []
for line in F:
 line = line.replace("\"", "")
 suf  = line.find(searchStr)
 if suf != -1:
  suf = suf + len(searchStr)
  urlList.append( searchStr +  line[suf:] )

for line in urlList:
 print line,


print "[4] Confirm whether download or not"
answer = raw_input("Download? Y/N  :  ")
if answer == "N":
 print "Refuse to download."
 sys.exit()
elif answer== "Y":
 print "Downloading..."
 for i in range(0,len(urlList)):
  wgetFunc(destDir + str(i) + ".mp4", urlList[i] )
else:
 print "Please input Y or N."


When I try to do the same thing in MacOS, "wget" command should be installed at first.
It's very easy to do that by executing these commands.

* Download source files of wget
 $ sudo curl -O http://ftp.gnu.org/pub/gnu/wget/wget-1.13.4.tar.gz 

* Unzip the file.
 $ sudo tar zxvf wget-1.13.4.tar.gz Install it $ sudo ./configure --with-ssl=openssl
 $ sudo make
 $ sudo make install

* You can confirm if the installation is successful or not by typing...
 $ wget If installed, the following description will be returned.
wget: missing URL Usage: wget [OPTION]... [URL]... Try `wget --help' for more options.

2013年12月6日金曜日

USBデバイスを単独実装してるペーペー開発者の戯言


某USBデバイス開発をスクラッチから担っているものです。
揺りかごから墓場まで、設計からサポートまで。
一貫して全部やらせてもらっております。大した能力もないのに。
つまづきながら覚えていくことは多かった。
# ちなみにまだ実装は 終 わ っ て い な い。絶賛炎上中。
今日は今までのおさらい。

========= 回想 =============

ある日、何やらUSBデバイスを急に作れという話が偉い人から降りてくる。
こんな感じの仕様で、こんなことを実現して欲しいと淡々と言われる。
開発の下っ端の自分はNoというチャンスはなかった。
決まってるから実装しろ、ただそれだけ。
コンセプトレベルからこうやったら売れるみたいな話まで提案できないし、
どう考えても魅力的ではないプランを、とにかく実装させられるだけ。
ものすごい違和感が、ざわざわと音を立てて湧き上がった。
って感じでしたが抑える。

その後、評価面談なるクソみたいな形式的なものに付き合わされた際、
どうしても問題提起したくてこの「天から舞い降りてくる素晴らしい全自動奴隷システム」について、
会社のヒエラルキーのなかでのいわゆる偉い人に言ってみた。
端的にいうと、「誰かが決めたことに文句言わずについてけ、ペーペーなんだから」
って返答がもらえた。
この人、この間までこのプロジェクトに反対していませんでしたっけー。
諦めがついた、この会社で偉くなってもこの程度なんだから。
偉くなる人はたぬき。
上に行くために必要なことをするだけの人。
ペーペーは考えるチャンスを奪われる。
能力が育たない。
結果、会社に買い叩かれる。
この違和感は忘れちゃいけないと思った。
一種の洗脳かと思った。
絶対に忘れない。

次の日、自分は考え方を変えた。
「これはビジネスじゃない、おべんきょうだ」
スクラッチからデバイス開発なんてなかなかできない。
ましてやいっぱい数が出るデバイスだ。
まぁいい、やってやろうじゃないか。
おべんきょうでお金貰えるなんてサイコーって気持ちで。
貴重な人生をこんな製品の実装に費やすのは少し残念ではあるが、
金無しスキル無し人間なので、これはいい意味での踏み台だと解釈。

意識が変わった、仕事が面白くなった。
USBにはプロトコルとかいうのがあるんですね。
こんなデバイスにはこんなプロトコルがいいよ!
こんな転送方式がいいよ!
みたいなのをこの本から学ぶ。



こんな感じの専門用語使えばベンダーさんと対等にお話できるのね!
って要領がわかったあとはこんな仕様で作ろっか!ってFW開発の会社におんぶにだっこ。
面白かったのは通信モデルの策定。
USBからこんなコマンド送ったらこう対応してね、みたいなのを取り決めるんです。
通信フロー図みたいなの書いて、パケットフォーマットも策定したり。
合意がとれた後はひたすら開発。

既存のソフトウェアスタックを流用するだけな感じだったけど、
ソフトウェアスタックの実装を見て、
あーよく出来てるなぁーって納得しながら作業するのは楽しかった。
一昔書いた

Callback関数を知らん人がまず理解すべきことのまとめ。


にあるような知識がこの時も役に立った。
結局USBデバイスでもイベントドリブンなソフトウェアスタックの実装が求められるんすわ。

眠くなったのできょうはここまで!




つづく。

2013年12月2日月曜日

C言語でBluetoothスタックを叩きたい人のBluetooth開発入門その2




Bluetoothを扱うソフトウェアエンジニアにとって必要な知識は段階があると思う。
私は色々と遠回りをしてしまったので、二の足を踏む人が少しでも減ればと思い今回の記事を書く。

私が初めにとった学習方針は「いきなり完璧を目指す」ものだった。
というのも先輩に進められるがままこちらの本を借りて読んでみたのだ。





、、、意味がわからなかった。
というのも、こちらの本は情報の粒度が細かすぎて私の知りたいコトの要点がぼやけてしまうという問題があった。

ただ、先輩がこの本を薦めてくれたのには理由がある。
日本語の本で技術的に正確なことを記載しているものは実質この本だけだったからだ。
著者はBluetoothの仕様を策定したericsson社のエンジニアが書いたからだ。
確かに正しいし必要な知識はすべて書いてある。

だが、必要な知識を効率よく収集することには向いていない。
ブラックボックスをなくすことは徹底すべきだと思うが、
最終的にものづくりを目標としているソフトウェアエンジニアにとっては、
いい学習方法とはいえない。

私が経験的に学んだ学習のステップは
「ソフトウェアスタックを上から下にたどること」
Bluetooth/USBでいうと、
アプリ/テスト開発 => ライブラリ開発 => デバイスドライバ開発 => デバイス開発といった流れだ。

まずはAPIを手順通り呼んだらとりあえず実装できることを体験する。
動作を見つつ自分なりに使えるミドルウェア・ライブラリを書いてみる。
なれたところでデバドラのソースコードを見てみる。
デバイスを作ってみる

こんな感じで理解を深めていければいいんじゃなかろうか。
ちなみに私は現在USBのライブラリ開発をして、
USBとはなんぞやを学んでいます。
USBについては日本語で有用な書籍がたくさんあるのでBluetoothより学習し易い環境でしたー