PGEConsで発表してました。
もはや2年以上前の話ですが、PGEconsというところスマポでの導入事例を発表していました。
https://www.pgecons.org/2013/12/03/2742/
その際の資料はこちら
この時の発表はこちらの記事に大変よくまとめられておりまして。発表資料をよむよりこちらを参照していただいた方がいいかもw
内容は超ざっくりと、、、
というような内容です。
僕も10年ぐらい前に7系を使って以来このサービスで久々にいじったのですが、当時のイメージは全くないですね、SQLも素直だし、今後も選択肢の1つに入れていいデータベースかなと思っています。
スポットライトCTOを退任いたします。
2014年末をもってスポットライトのCTOを退任させていただくことになりました。
2011年の設立から、約3年ちょっと社内外含めいろいろとお世話になりました。今後については未定なのですが、しばらくは社外の技術顧問として残らせていただく予定ですので、今後とも宜しくお願いします。
CTOという役職をやらせていただいたのは今回で2回目、どちらも創業から関わってます。
そして、最近CTO論というやつが流行ってるところもあり、なにやら乗ってみたい感じなのですが、、、概念的なところは、大御所の皆様方がまとめられているのそちらを参考にしていただくとして。。。
実際に、このスポットライトという会社ののCTOが、何をやってきたんだろうというところを振り返ってみたいなと思ってます。
コンテンツとしてはこんな感じで、、
1回目
- スマポのはじまりについて
- リリースまで
- リリース後1日目でサーバーが落ちた。
- はじめての採用
2回目
- シリーズA
- 楽天へのJOIN(買収)
- まとめ
2回シリーズになっております。長文になりますが、年末やることがなくてよほど暇なら読んでください。。。
■スマポのはじまりについて
たまたま友人経由で、面白そうなビジネスを考えている人がいるから話を聞いてみてほしい、と言われて代表の柴田と会ったのが始まりです。
企画書レベルで来店ポイントのビジネスモデルが出来上がってて、一部クライアントにも営業を始め、なんと受注もしている、そして9月にリリース予定!という状態で、すごいんだけど、これで作れなかったらどうするの?と、話を聞いた瞬間思いましたが、いろいろディスカッションする中で、超音波を発生する機器を店舗に置いて、スマートフォンのマイクでそれを読み取りチェックインさせよう、ということがその場できまりました。
実は、スマフォとなんらかのハードウェアが通信できたらなにか面白いことができるんじゃないか?と、いろいろリサーチしていました。調べる中で、WifiやBlueTooth(まだ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のインストール
SQliteのJDBCドライバと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
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"]
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)という仕組みらしい。