Blog::Trapple

技術系のちょっとしたメモとか

株式会社meleapに入社して1ヶ月が経ちました

10年のフリーランス生活に区切りをつけ3/1から株式会社meleapに入社して1ヶ月が経ちました。

結論から先に書くとめちゃくちゃ楽しいです!

哲学とビジョンがはっきりしていると迷わない

幸いなことにmeleapは設立からこれまで多くの取材を受けてきて、ネット上には福田と新木の哲学やmeleapのビジョンを垣間見ることができる記事が多いです。

一番大事なのは、自分の気持ちがたぎる方向に進むということ。ホントに自分が何のために生きているのかを改めて見つめ直すことが大事だと思っています。 - AR技術で世界を面白くする、二人で起業に至った経緯:meleap・福田CEO&新木COO

こういった形でも、社長ブログでも、タバコ部屋の談話でもなんでもいいですが、皆でどういう未来を目指しているのかがきちんと理解来ているというのは、ものすごく仕事がしやすいのだな感じています。

今ある問題を解決すべき時も、新しい事のアイディア出しをしている時も、色々と試行錯誤して迷う事が多いと思います。迷うことは悪い事ではないのですが、最終的に判断の基準としてこのしっかりした軸があると無いとでは安心感が段違いだなと思います。

ボケて代表の鎌田武俊さんもそう言った事をスライドで公開していましたがまさに今実感しているます。

83 哲学 「哲学がないと続かない」
84 ビジョン 「ビジョンがないと進めない」
85 アイデア 「アイデアがないと作れない」
86 コンセプト 「コンセプトがないと動かない」
87 哲学:自分は何が好きでしょうがないか ビジョン:どんな世界にしたいか アイデア:どういう仕掛け用意するか コンセプト:どういう仕組みで実現するか 覚える4つの単語 96 哲学とビジョンが違う人と 何かを作るのはしんどいです
97 そして 作りたいものがぶれなくなります - やりたいことを続けられる仕組みの作り方 - Omoroki DesignLang

近い距離感

まだ9人の会社なので大学サークルの部室みたいなオフィスで雑に机を囲んで仕事をしており、来客があっても同じ部屋で打ち合わせをします。
打ち合わせの中でも、特に新規のパートナーとなりうる相手との交渉時にはやはり哲学とビジョンを説明するケースが多く、思わず聴き入ってこちらの仕事が止まることも多々あります。
(ちょっとした有名人が来ておお?ってなることも。笑)

また、デバッグのために急にオフィスが割れて対人戦がはじまったりすることもあって愉快です。

f:id:trapple:20160401095922j:plain:w360

こういった経験は、会社が大きくなるとどうしても減っていくことだと思うので、小さい会社の醍醐味だと思います。

未だ誰も体験したことのない仕事体験

幸いなことにmeleapは現在多くのお仕事を頂いており、週末はほとんど毎週のように何かイベントがあります。社内の主催イベントも活発です。

  • 3/9 アクロスモール新鎌ヶ谷 HADOイベント
  • 3/12 Media Ambition Tokyo HADO出展
  • 3/13 HTC Vive試遊会
  • 3/18 大宮ステラモール HADOイベント
  • 3/18 ナンジャタウン HADO常設開始
  • 3/19 超人スポーツハッカソン
  • 3/20 e-とぴあかがわ HADO出展&公演
  • 3/25 HTC Vive社内ハッカソン
  • 4/2 アドアーズ南砂町 HADOイベント
  • 4/3 成田空港 HADOイベント

3月だけでもこんなにあり、1人で全てのイベントには参加できないくらいです。 僕はまず初めての現場仕事としてナンジャタウンの設営に参加させてもらいましたが、ただのイベント設営ではなかなか味わえない面白い感覚もありました。

普段の仕事内容

meleapでのポジションはフロントエンジニアです。なのでまったく使ったことのなかったUnityを必死に覚えることで3月はほぼ終わっていきました。
そろそろ初心者に毛が生えた位にはなれたので、いよいよGWに向けて実案件開始と言った所です。まずは既存のHADOシステムを各イベント用にカスタマイズしていく簡単めな内容からになりそうです。
即戦力が欲しいはずのスタートアップが、僕を信じて一ヶ月待ってくれたのでバリバリと成果をあげていかないと!と気合いれてます。

Unityエンジニアはまだ足りてないので、もしmeleapが気になった人は是非一度遊びにきてください!!まずはHADOを体験しましょう!

英語人狼 Werewolf in English #1 を開催しました。

目的

英語の勉強を続けていて、とにかく生きた英語を使う機会を増やさないとだめだ、と感じるので何かアクションを起こしたかったのですが、HDEさんの英語人狼のエントリーを見て前からかなり興味を持っていた英語人狼を自分でも主催してみました。

http://werewolf-in-english.connpass.com/event/27785/

人狼とは

人狼を知らない人のために説明すると、誰が人狼か会話しながら当てるゲームです。
ゲームは村人とそこに紛れ込んだ数人の人狼に分かれて始まります。ゲームは昼と夜があり、昼は皆で話し合い一人を人狼と断定して村から追放する。夜はこっそり人狼が目を覚まし、村人を一人食い殺す。これを繰り返します。
最近はフジテレビが人狼の実況をTV番組にしたことで一気に有名な遊びになった感がありますね。

対象

対象とする英語レベルは相当低めの設定にしました。
自分含めまともに英語で会話出来ないレベルの人が多かったと思います。
それでも人狼というゲームの目的がはっきりしてる場なので、単語だけでも伝わるし、ゲームとしても十分成り立ったと思います。
むしろ良かった点として、普段の人狼は圧倒的トーク力によって場を制圧する人が出てくるケースが多いのですが、いかんせん拙い英語なのでそういうこともあまり起こらずゆるいゲームが出来たと思います。

準備

connpassを使って応募をしましたが、初回ということもあり主催の知り合いまでに限定して応募しました。次回はオープンでいいかなと考えています。

カードはミラーズホロウの人狼のカードを利用しましたが、役職は独自に変更しました。ミラーズホロウのカードを採用した理由はカードに絵しか書いてないから役職はどうにでも出来るからです。
但し英語でゲームをするにあたって役職の呼び方は統一ルールがあった方が良いと思ったので役職表をつくっておきました。

f:id:trapple:20160310084659j:plain:w320

工夫

1ゲーム終わる度に、今回のゲームで良かったフレーズ、上手く伝えられなかったフレーズなどを振り返って、持ち込んだホワイトボードに書いてもらい、皆で再確認などをしました。 これはすごく良かったと思います。

f:id:trapple:20160309194417j:plain:w200f:id:trapple:20160309194613j:plain:w200f:id:trapple:20160309220100j:plain:w200f:id:trapple:20160309212328j:plain:w200

書いてもらったホワイトボードは写真に取って持ち帰ります。
ちなみに皆で考えた英文を後日HiNativeで添削してもらったら、結構ボロボロでした。笑 (添削)(添削) (添削)(添削)
それはそれで後日振り返りとして共有したかったので、専用のTwitterアカウントを作りました。

1ゲームごとに付箋を1枚配り、どうしても英語に出来ない時にこの付箋に日本語を書いて伝えて良い、というルールを追加しました。
がしかし、単語だけでもなんとかゲームになってたしあまり活躍することはありませんでした。
ただこの会の目的はあくまで英語の勉強なので、1ゲームに1回位は自分なりの英作文が作れるような工夫を考えたいです。

気づき・反省

羞恥心緩和のためにお酒を用意してたけど、飲み過ぎると英語学習なんかどうでもよくなります。
次回は軽く飲むだけにしたいところ。

英語力ネイティブレベルの人を呼びたい。
今回もそれなりに声をかけてはいたのですが、直前で来れなくなったりでネイティブレベルの人はいない状況となりました。
その場で正しい英語を教えてくれる人がいれば学習の質もぐっと上がるのは言わずもがな。

最終的に14名参加(GM抜くと13名)のゲームになり、それはそれで大変面白いゲームになったのだけれど、早々に退場になった人はやはり暇になりがちでした。
人が集まってくる前の序盤に4人(人狼・村人3)でやったゲームですら、英語の壁のおかげか十分成り立ったので、小さな村で遊ぶのもありかもしれないと思います。その場合GMが必要だと無駄が多いのでマスターレス人狼などの導入を検討してみようと思います。

今後やってみたいこと

昼のターンの制限時間後に、1人最大30秒程度の主張タイムを設けたい。フリータイム中、あまり喋れなかった人もここで最低1言だけでも発言して欲しいし、英作文のトレーニングにもなりそうです。

英語人狼でよく出てくる単語や使えるフレーズを何かにまとめたい。皆で追加・編集・共有出来て、当日もスマホで見ながら使えたら最高。何かこういうことに適したサービスないでしょうか。

こんな感じでまだ手探りではありますが、月1くらいのペースで開催できたらいいなと思ってるので、興味のある人はconnpassの英語人狼コミュニティに入ってもらったり(次回応募開始時にメールが飛びます)twitterアカウントをフォローしたり、よろしくお願いします。

connpass http://werewolf-in-english.connpass.com/
twitter https://twitter.com/werewolf_in_en

What is Cloud Vision API? の文字起こし


What is Cloud Vision API?

英語の聴き取り/書き取りの練習にちょうど良さそうだったので。

Cloud Vision provides powerful Image Analytics capabilities as easy to use APIs.
It enables application developers to build the next generation of application that can see, and understand the content within the images.
The service is built on powerful computer vision models that power several different Google services.
The service enables developers to detect a broad set of entities within an image from everyday objects, faces, and product logos.
The service is so easy to use.
As one of example of the use cases.
You can have any Raspberry Pi robot like GoPiGo calling the Cloud Vision API directly.
So the bot can send images taken by its camera to the cloud and can get analysis result to me real time.
It detects faces in an image along with the associated emotions.
The Cloud Vision API is also able to detect entities within the image.
Now, let's see how facial detection works.
Cloud Vision detects faces on the picture and returns the positions of eyes, nose, and mouth.
So you can program the bot to follow the face.
It also detects emotions such as joy, anger, surprise, and sorrow.
So the bot can move forward smiling faces or avoid anger or surprise face.
One of the very interesting features of Cloud Vision API is the entity detection that means it detects any objects you like.
That see however ex.
"It's glasses."
"It's banana."
"It's automobile."
"It's money."
You see?
Cloud Vision lets developers take advantage of Google's latest machine learning technologies quite easily.
Please go to cloud.google.com/vision to learn more.

自分の英語レベルだと、初見で等速聴き取りは結構きつかったので、以前このブログで紹介したmimiCopyを使って60%くらいの速度にして聴き取りをしました。

trapple.hateblo.jp

それでもどうしても聴き取れない場合はHiNativeというサービスでネイティブに質問するのがとても有効でした。
https://hinative.com/en-US/questions/260544
https://hinative.com/en-US/questions/261258

ちなみにCould Vision APIはまだ試してません^^;

IC温度センサー LM35DZで温度を取得する(配線編)

Raspberry PiにはLM35DZなどを利用するためのアナログ入力が無いので、ADコンバータを利用します。
このADコンバータを利用するにはSPI(Serial Peripheral Interface)という通信方法を使う必要があります。

主な環境・利用パーツ

  • 温度センサー LM35DZ URL
  • ADコンバータ MCP3002 URL
  • Raspberry Pi 2 MODEL B URL
  • Raspbian GNU/Linux 7 (wheezy) URL
  • Node.js v5.0.0

SPIを有効にする

Raspberry Piの初期設定ではSPIが無効になっているので、これを有効にします。

sudo raspi-config
  • 8 Advanced Options.
    • A6 SPI
      • Would you like the SPI interface to be enabled? <はい>
      • Would you like the SPI kernel module to be loaded by default? <はい>

注)OSのバージョンが違うと設定方法が変わる可能性があります。

SPI確認

lsmodで確認する

カーネルの読み込むモジュールのリストを表示し、spiが読み込まれているか確認します。

% lsmod | grep spi
spi_bcm2835

接続のテスト

SPI_MOSIとSPI_MISOを直結します。

wget https://raw.githubusercontent.com/raspberrypi/linux/rpi-3.10.y/Documentation/spi/spidev_test.c
gcc -o spidev_test spidev_test.c
./spidev_test -D /dev/spidev0.0

ちゃんと設定ができていれば次のように出ます。

trapple-no-pi% ./spidev_test -D /dev/spidev0.0
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)
FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D

配線

GPIOのみの接続に比べると一気に複雑になりました。
Raspberry Piのピン番号で言うと、19,21,23,24,26がSPI関係のピンになります。まずこれらをMCP3002と繋ぎます。 次にLM35DZとMCP3002を繋ぎます。 最後にそれぞれ電源とGNDを繋ぎます。

f:id:trapple:20151121100601p:plain:w320 f:id:trapple:20151121100652p:plain:w320

target MCP3002 MCP3220 target
24. Raspberry Pi GPIP 8 (CE0) 1. CS/SHDN 8. VDD Raspberry Pi 3.3V
LM35DZ VOUT 2. CH0 7. CLK 23. Raspberry Pi GPIO 11 (SCLK)
* 3. CH1 6. DOUT 21. Raspberry Pi GPIO 9 (MISO)
Raspberry Pi GND 4. VSS 5. DIN 19. Raspberry Pi GPIO 10 (MOSI)
LM35DZ target
+Vs Raspberry Pi 3.3V
Vout MCP3002 CH0
GND Raspberry Pi GND

ブレッドボード

f:id:trapple:20151121100755p:plain:w480

配線図

f:id:trapple:20151121100832p:plain:w480

続きはプログラミング編(予定)で!

参考

AE-FT234Xを使ってMacとRaspberry Piをシリアル接続する(続き)

前回のエントリーでは失敗しつつもブレッドボードに挿して使える変換ケーブルになったわけですが、いかんせんちょっと引っかかるだけで抜けるので、結局もう一個AE−FT234Xを買ってきて直接はんだ付けすることにしました。

リードベンダー便利

ジャンパワイヤのピンを90度に折り曲げるといい感じなのですが、その際にリードベンダーというものを使うとすごく簡単・綺麗に仕上げることができます。

抵抗のワイヤに強度をつけたりも出来る(むしろその為のもの?)ので、他にも役に立ちそうです。 使い方はメーカーのサイトが詳しいのでそちらを参照してください。

こんな感じになりました!こっちのほうが安定して使えます。

f:id:trapple:20151121093358j:plain:w320 f:id:trapple:20151121093428j:plain:w320

AE-FT234Xを使ってMacとRaspberry Piをシリアル接続する

Raspberry Piは基本的にWifiからSSHで繋いでるのですが、Wifiが無い場合や、トラブル時にシリアル接続で直接Macから接続出来たほうがよさそうということでその環境をつくりました。
と言ってもシリアル接続?何それ?というレベルだったので結構苦労しました。

AE-FT234Xを半田付けする

最初は中国産の怪しい変換ケーブルを検討したのですが、発送に10日以上かかるそうなので、秋月でAE-FT234Xを買ってきました。(怪しい方も一応買ってます)

akizukidenshi-ogp-injector.dtpwiki.jp

AE-FT234Xははんだづけが必要なのではんだ道具も購入しました。
はんだこてはあまり強力なものだとパーツを痛めるということなので、売り場に置いてあった中で一番力の弱かった20Wのものを。

こてを置く台も必要でしたがとりあえず最初なので一番安価なものを。

あると便利そうなので作業中にパーツを固定するHELPING HANDSも買いました。

そして出来たのがこの状態。なんとなく上手くいってる気がしたのですが、実は失敗しています。
ブレッドボードに刺す側をはんだしてしまったので、盛り上がったはんだが引っかかってしまい、ブレッドボードに刺さらないのです。。。

f:id:trapple:20151019210815j:plain:w320

一度固定してしまったはんだを分解するには、もう一度はんだを熱して、はんだ吸収線というもので溶けたはんだを吸い取るのだそうです。

はんだ吸収線は近所のホームセンターにあったので秋葉原まで行かずにすみました。
しかしこれを使ってみるも、細い部分に入り込んだはんだを完全に吸い取る事ができず、ヘッダーピンは外せませんでした。
が、結果としてはんだで盛り上がった部分というのが無くなったので、ブレッドボードに刺すことが出来ました。今回はこれで良しとします。

Raspberry PiとAE-FT234Xを繋ぐ

AE-FT234Xのピン配置を確認しつつ
GNDをRaspberryPiの6番ピンに
TXDをRaspberryPiの10番ピンに
RXDをRaspberryPiの8番ピンにつなぎます。

※AE-FT234XのTXDはRaspberry PiのRXD、RXDはTXDと、逆になることに注意しましょう。私はこれにハマって数時間を無駄にしました。

MacにVirtual COM Port Driversを入れる

ドライバーはFTDI社のウェブサイトからダウンロード出来ます。 http://www.ftdichip.com/Drivers/VCP.htm

インストール後、AE-FT234XとPCをUSBケーブルで接続します。

% kextstat | grep FTDIUSB
 73    0 0xffffff7f80d12000 0x7000     0x7000     com.FTDI.driver.FTDIUSBSerialDriver (2.3) ECC3AF36-431D-370D-86F2-5237785E9CF8 <72 39 5 4 3 1>

Macからシリアル接続する

RaspberryPiの電源を入れ、その後MacにUSBケーブルを刺します。
USBが認識されていれば以下のようになるはずです。

~ % ll /dev/*usb*
crw-rw-rw-  1 root  wheel   18,   7 10 21 01:13 /dev/cu.usbserial-DJ002H1G
crw-rw-rw-  1 root  wheel   18,   6 10 21 01:13 /dev/tty.usbserial-DJ002H1G

接続にはGNU screenを使うと簡単です。 無ければhomebrewなどで入れましょう。

screen /dev/tty.usbserial-DJ002H1G 115200

115200の部分はボーレートといいます。 Raspberry Piのボーレートはデフォルトで115200なのでこれを設定します。

ボーレートとは 「baudレート」 (baud rate, baudrate): - IT用語辞典バイナリ

ボーレートは、デジタルデータをアナログデータに変換し、モデムなどのアナログ回線でシリアル転送する際の単位として用いられる。ボーレートの値が大きければ大きいほど、同じ時間内により多くの情報を転送することが可能なことを意味する。位相変調方式によって一度により多くのデータを変調できる場合には、ボーレートの値も大きくなる。

無事、ログイン画面が表示されました!!

Raspbian GNU/Linux 7 trapple-no-pi ttyAMA0

trapple-no-pi login:

追記

AE-FT234Xを使ってMacとRaspberry Piをシリアル接続する(続き) - Blog::Trapple

Raspberry PiでLチカ(Node.js編)

前の記事Pythonで書いたLチカをNode.jsで書きなおしてみました。

Raspberry PiにシステムワイドなNode.jsをndenvで入れる

ES6を使いたいのでNode.jsはv4以降を入れます。

ライブラリ

さくっと調べた感じだと、Node.jsの場合はgpiowiring-piというライブラリがりました。

gpioの方はI haven't maintained this project for a while nowということでもうメンテしないそうですが、wiring-piに比べて簡素ですぐ使えそうだったので、とりあえずgpioでやってみました。

コード

"use strict";

const gpio = require("gpio");

const channel = 4;
const interval = 50;
let setId;

const gpio4 = gpio.export(channel, {
  direction: "out",
  ready(){
    setId = setInterval(() => {
      this.set();
      setTimeout(() => {
        this.reset(); 
      }, interval);
    }, interval * 2);
  }
});

process.on("SIGINT", () => {
  gpio4.reset();
  clearInterval(setId);
  setTimeout(() => {
    gpio4.unexport();
  }, interval + 1);
  console.log("\nBye!!");
});

この程度であれば言語による優劣は特に無さそうですね。

参考

https://github.com/EnotionZ/GpiO