PGEConsで発表してました。

もはや2年以上前の話ですが、PGEconsというところスマポでの導入事例を発表していました。

https://www.pgecons.org/2013/12/03/2742/

その際の資料はこちら

この時の発表はこちらの記事に大変よくまとめられておりまして。発表資料をよむよりこちらを参照していただいた方がいいかもw 

内容は超ざっくりと、、、

  • 位置情報使うならなんだかんだPostGISがいいよね
  • HStoreやJSON型などNoSQL的な機能も豊富だよ
  • 今はパフォーマンスも十分だし、運用も楽です

というような内容です。

僕も10年ぐらい前に7系を使って以来このサービスで久々にいじったのですが、当時のイメージは全くないですね、SQLも素直だし、今後も選択肢の1つに入れていいデータベースかなと思っています。

スポットライトCTOを退任いたします。

2014年末をもってスポットライトのCTOを退任させていただくことになりました。

2011年の設立から、約3年ちょっと社内外含めいろいろとお世話になりました。今後については未定なのですが、しばらくは社外の技術顧問として残らせていただく予定ですので、今後とも宜しくお願いします。

CTOという役職をやらせていただいたのは今回で2回目、どちらも創業から関わってます。
そして、最近CTO論というやつが流行ってるところもあり、なにやら乗ってみたい感じなのですが、、、概念的なところは、大御所の皆様方がまとめられているのそちらを参考にしていただくとして。。。

実際に、このスポットライトという会社ののCTOが、何をやってきたんだろうというところを振り返ってみたいなと思ってます。

コンテンツとしてはこんな感じで、、

1回目

  • スマポのはじまりについて
  • リリースまで
  • リリース後1日目でサーバーが落ちた。
  • はじめての採用

2回目

  • シリーズA
  • 楽天へのJOIN(買収)
  • まとめ

2回シリーズになっております。長文になりますが、年末やることがなくてよほど暇なら読んでください。。。

■スマポのはじまりについて

たまたま友人経由で、面白そうなビジネスを考えている人がいるから話を聞いてみてほしい、と言われて代表の柴田と会ったのが始まりです。

企画書レベルで来店ポイントのビジネスモデルが出来上がってて、一部クライアントにも営業を始め、なんと受注もしている、そして9月にリリース予定!という状態で、すごいんだけど、これで作れなかったらどうするの?と、話を聞いた瞬間思いましたが、いろいろディスカッションする中で、超音波を発生する機器を店舗に置いて、スマートフォンのマイクでそれを読み取りチェックインさせよう、ということがその場できまりました。

実は、スマフォとなんらかのハードウェアが通信できたらなにか面白いことができるんじゃないか?と、いろいろリサーチしていました。調べる中で、WifiBlueTooth(まだBLEが無い)などはプラットフォームの制約があったり、制限されたり、使いにくいなと、音声に関しては自由につかえそうなだということがわかってました。実際Squareがイヤフォンジャックで経由でカード情報をやりとりしたり、アメリカで先行して来店サービスをローンチしているShopkickなどはまさに超音波を使った通信を利用していました。

■リリースまで

創業期からCTOとして参画されている方であれば、ほぼそうだと思うですが、1エンジニアとして、アプリからサーバーサイド、インフラ、その他、ほとんどすべての開発を1人で行っていました。ちなみにハードウェアはうちのエースエンジニアで当時大学院生だった青山君がほぼ監禁状態で作ってました(その時参考→http://www.mote-ch.com/interview/topic/money/spotlight)

もう顧客がいる状態だったのでリリース日は変えられず、本当にギリギリまで開発してしてました。ハードウェアは外部に発注する時間も金もなく、バイト雇って基盤からエッジングして生産、、、薬品臭のただよう空間で、最後は丸三日、一切寝ずにコーディングしてました。いやもう辛かった。。。

そんなこんなで、なんとかリリースでき、スマポがスタートしました。

このころ選択した技術的に重要なこととしては

  • 超音波ビーコンに来店検知の開発
  • 独自ハードウェアを作る
  • 位置情報を扱うためにPostGIS(PostgreSQL)を導入

参考: http://enterprisezine.jp/dbonline/detail/5503

何度もアップデートしてますが、今でもうちの技術の中核となっているところだなと思います。

■リリース後1日目でサーバーが落ちた。

なんとかリリースはできたものの1日目でサービスダウン。情けない。。

なんとなく面白そうという理由で選んだGrails。これが大失敗だった。全く安定しなくて困り果て。。。具体的にはPermGemスペースを使い切ってしまうという問題があり、数日で再起動が必要になってしまう状態。jvmの設定からいろいろ試しましたが、解決せず。根本的に書き換えが必要と判断、と同時にPythonにスイッチしました。Pythonは僕が関わっていた別のプロジェクトで使っていて、印象が良かったので、選びました。

ちなみに、Grailsが悪いとはいいません、単に僕がこの環境でproductionレベルまで持っていくスキルがなかった。そして、今はもっとよくなっているでしょう。Grailsでなければここまでの短期間で開発することはできなかったです。(結果よかったかなと今は思うようにしています この辺りはツッコミ大歓迎です。どうしたらよかったかgrails詳しい人教えてください。)

Pythonがサーバーサイドに主要言語になりました。

■はじめての採用

実はまだこの頃、僕自身スポットライトにフルコミットというわけではなく、別のプロジェクトに関わりながら片手間に関わっている状態でした。しかもオフィスもまだありません。

当然、報酬も0です。これ重要w 

当時ハードウェア周りを手伝ってもらった青山君にもまったく報酬を出せず、ちょっと申し訳ないので、違う仕事を紹介したりと、まあ、グレーというか完璧黒でしたね。。。

そんな状態ながら加盟店舗が徐々に増え、業務たてこんで来て片手間では回らなくなってきました。

でも僕はまだ別の案件抱えてるし、なかなかリソースが取れない、じゃ誰か雇うか??誰が面倒見るの??オフィスかりるか??と、いろいろありつつも、人ないと始まらなくね?ってことで五反田に小さなワンルームを借りて、採用活動開始!

と、言っても何したかな??うちの代表がPythonエンジニア募集とつぶやいたぐらい。。そしたら速攻応募がきた!とんとんと進み面接。オフィスがあれなので、近くのカフェで面接しようとw

カフェで待ち合わせて、早速面接を始めようとしたら、向こうから。。。

「ちょっと最初に自分で作ったプロダクトのプレゼンしていいですか?」

と、その後は彼の独壇場、、なんか変な人だけどよさそうじゃね?と採用決定!

彼は未踏のスーパークリエーターでした。そしていまでも弊社のエースエンジニアです。

続きは来年!良いお年を

2回目はあるのだろうか?

V8Supercarsの魅力を語る

V8Supercars
http://www.v8supercars.com.au/

V8Supercarsとは?

主にオーストラリアで開催されている、ツーリングカーレースです。(FIA管轄)
その名の通り、レース車両はすべてV8エンジンを搭載しています。

Holden, Fordからの参戦が多いですが、去年からメルセデス、日産、今年はVolvoが参戦し始めました。
日本では聞き慣れませんが、HoldenはGM傘下のオーストラリアのカーメーカー。V8Supercarsでは上位常連のメーカーです。
しかし、今年でGMがオーストラリア市場から撤退という事で今後どうなってしまうのか、残念な感じです。

で、一体何が魅力なのか???

語るより見た方が良いです(笑)

Mclaughlin vs Whincup Awesome Finish! - 2014 Clipsal 500

今年のアデレード(Adelaide)で行われたレース、Clipsal 500で繰り広げられた、ドッグファイトです。
いまどき、こんなオーバテイク合戦なレース、どこで見れるんでしょうか?w
毎回激しくて、クラッシュも日常茶飯事です。

今後このブログで取り上げて行きたいなと思っております。

Home Brew から mongodbをインストールしようとしたところ。

[mistat ~]$brew install mongodb
==> Downloading http://fastdl.mongodb.org/osx/mongodb-osx-i386-1.6.5.tgz
######################################################################## 100.0%
Error: MD5 mismatch
Expected: fcff0ce28922c205631de2abc98ee34b
Got: 064c9c68752968875e4ccaf8801ef031
Archive: /Users/mistat/Library/Caches/Homebrew/mongodb-1.6.5-i386.tgz
(To retry an incomplete download, remove the file above.)

こんな感じでMD5が違うよとはじかれてしまった。
いわれたとおりファイルを消してリトライしてもうまくいかず。どうしようかなと思っていたんですが。

BrewをUpdateであっさり解決。
ローカルのデータベースが古くなってたんですね。

[mistat ~] brew update

RedmineをJettyで動かす覚え書き。

Rails系アプリもこれで動くはず。。。
RedmineのためにMySQLを入れたくないので、今回はSQLiteを使用する。

環境準備

下記参照(これを書いている時点のバージョンは1.5.6)
http://jruby.org/

gemsのダウンロードは下記から
http://rubyforge.org/frs/?group_id=126&release_id=9501

RailsをGemから入れます。

jruby -S gem install rails
  • SQLite3のインストール

SQliteJDBCドライバとActiveRecoardのAdapterをgemからインストール

jruby -S gem install jdbc-sqlite3
jruby -S gem install activerecord-jdbcsqlite3-adapter
  • Jettyのダウンロード&インストール

★下記参照
http://www.eclipse.org/jetty/

  • Jettyの設定

webdefault.xmlの設定 dirAllowedをFalseに
この設定を行わないとRedmineが正しく表示されません。#フックされない。

    <init-param>
      <param-name>dirAllowed</param-name>
      <param-value>false</param-value><!-- 無効にします。 -->
    </init-param>

【Warの準備】

Redmineのダウンロード

SVNから落としてみました。

$ svn checkout http://redmine.rubyforge.org/svn/branches/1.0-stable redmine

Redmineの設定

  • database.ymlの設定
production:
  adapter: jdbcsqlite3
  database: db/development.sqlite3
  timeout: 5000
  • セッション暗号化用鍵の生成
jruby -S rake generate_session_store
jruby -S rake db:migrate RAILS_ENV=production
jruby -S rake redmine:load_default_data RAILS_ENV=production

Redmineのテスト起動

jruby -S script/server -e production

Webrickが起動してブラウザから確認できればOK

Warbleのインストール

jruby -S gem install warbler
  • Warbleの設定をします。

まず下記コマンドを実行しconfingファイルを作成します。

jruby -S warble config

適当なエディタで編集します・

vim config config/warble.rb

変更箇所は下記の通り

  #config.dirs = %w(app config lib log vendor tmp)
  config.dirs = %w(app config lib log vendor tmp extra files lang db)

  # config.gems += ["activerecord-jdbcmysql-adapter", "jruby-openssl"]
  config.gems += ["activerecord-jdbcsqlite3-adapter", "jruby-openssl"]

Warファイルを作成します。

jruby -S warble

上記コマンドを実行すると redmine.watというファイルが作成されます。

Jettyにインストール

作成したwarファイルをJettyにデプロイして完了です。

Extended Attributes

Macでls -laしてみたら謎の属性を発見した。

drwx------@  3 hogehoge  staff   102 11  9 10:11 502

アットマーク?拡張属性らしい。
なにやら、ls時に@を付けるとその内容が見れるらしいのでやってみた。
これは落としてきたXcodeのイメージファイル。

sh-3.2# ls -al@ xcode_3.2.4_and_ios_sdk_4.1.dmg 
-rw-r--r--@ 1 mistat  staff  3154281265 10 27 16:29 xcode_3.2.4_and_ios_sdk_4.1.dmg
	com.apple.diskimages.fsck	        20 
	com.apple.diskimages.recentcksum	        79 
	com.apple.metadata:kMDItemWhereFroms	       188 
	com.apple.quarantine	        85 

下記コマンドでも見れるらしい attrコマンド

sh-3.2# xattr xcode_3.2.4_and_ios_sdk_4.1.dmg
com.apple.diskimages.fsck
com.apple.diskimages.recentcksum
com.apple.metadata:kMDItemWhereFroms
com.apple.quarantine

ダウンロードしてきたファイルなどは、この属性をみて判断できるのか。

詳細は下記に載っていたのでこちらを参照。
http://journal.mycom.co.jp/column/osx/253/index.html

Tiger以降で実装された。EA(Extended Attributes)という仕組みらしい。