isseium's blog

田舎に住むWebエンジニアのブログ

岩手に戻って2年半が経ってたので近況をまとめた

節目節目で振り返ろうとおもってはいたものの、前回の振り返り から気づけば岩手に戻って2年半が経ってました。 このブログも気づけば1年ぶりの更新です。

ちょうどまとめる時間があったので備忘録的にまとめたいと思います。

長いので一言でいうと、いろいろありましたが元気にやってます!

この2年半なにやってたのか

博士前期課程(修士)の学生をやっていました

2013年4月 岩手県立大学大学院ソフトウェア情報学研究科に社会人入学しました。

情報システム構築学講座に所属して、地域の魅力発見・発信に関わる研究をしてました。分野的には、地域情報学とか観光情報学なんて呼ばれるあたりかと思っています。大学院は2015年3月に修了しました。この2年間で大きく分けると2つの研究をしました。

1つ目は、修士論文となった研究で、概要は、旅行者が利用しているチェックイン系サービスへのチェックイン履歴から次のチェックイン先を推薦するということをやってみた、という感じです。推薦アルゴリズム協調フィルタリング。約150人のチェックイン情報から4万スポットのデータから提案した推薦システムとランダムな推薦のF値を交差検証で比較しました。正直、結果はよくなかったw

2つ目は、研究室が受託した研究のサポートで、特定の地域に関するオンライン広告を配信した結果から、その地域に興味を持ちそうな属性を推定するというもの。 修士論文は「どこへ行こう」という顧客の課題をターゲットにしたことに対して、こちらは「だれが潜在顧客?」という観光地側の課題をターゲットにしました。

あと修士だと研究のほかに講義があって、それが意外と結構おもしろかった。一度社会に出て知識と経験が少しついたことが影響しているのかもしれません。 研究室の先輩がいっていた「『おもしろい』とは自分の知識を少しはみ出た知識を知ったときである」ということなのかもしれないです!

どんな講義がおもしろかったかは、ソフトウェア情報学研究科に社会人入学した大学院生が独断と偏見で選ぶおもしろかった講義ベスト3 に書いてるのでぜひ。

株式会社CCL でオープンデータの調査をやってました

大学に通いつつ、縁あって2013年7月に株式会社CCL(盛岡市)に契約社員としてプランナーとして入社しました。

オープンデータって、限定的に見れば「セマンティックWeb」や「Web 2.0」と近い概念だったりするわけですが、「協働」という社会意義があって、データをオープンにして社会の課題をみんなで解決していこう!みたいなムーブメントと私は捉えています。自分たちの課題をまずは自分たちで解決しようとするというスタンスは共感しています。

もちろんオープンデータ自体にも課題もあって、一番はビジネスとして盛り上がってないこと、だと思います。結局、ビジネスとして成り立たなければ、民間企業の参入はなかなか見込めないし、個人での参画であっても持続性の壁がでてくるんですよね。

この仕事は行政をはじめ地域の人と関わる機会が多く、普段付き合う人たちとは違う視点を見ることができてよかったです。契約満了とともに退職しました。

株式会社チイキットで 共同創業者兼CTO をやってました

チイキットのことを話すとそれだけで10個くらいエントリかけそうだけどなるべく短めに。チイキットはいまのところ大きく分けると3つのステップを歩んでます。(現在進行形)

1. 趣味チーム(2012〜2014春)

チイキットはまだ僕が東京にいた頃に「地域をテーマになにかをつくりたい」というエンジニアが集まって趣味チームを作ったのがはじまり。毎週1回夜にハングアウトして情報交換したり、開発コンテストとかに応募してました。僕が岩手に来てからもチームは続いていました。

そんななか、ひとつの転機がありました。2014年1月にクラウドソーシングで受注・納品したことです。このときチームを組んだ3人が後の法人設立メンバーになります。 観光系のアプリで、納品先とのやりとりは完全リモート、チイキット内の3人もほぼリモート、というはじめてづくしでしたが、プロジェクトとしては人生で一番というほどスムーズな開発で、ある意味自信がつきました。

2. 法人化(2014年夏〜)

2014年8月にチイキットを法人化しました。自分は技術と開発体制で貢献したいと思っていたのでCTOの役割を。(といってもCTOなんてのはお飾りで、当然、税務、労務含めなんでもやるわけですが)

チイキットのコア事業クラウドソーシング事業で、クラウドソーシングの特徴である

  1. リモートワーク(地方にいても仕事ができる)
  2. 小規模(小さいチームでもできる)
  3. 案件ベースの付き合い(特定の取引先に依存しにくい)

というあたりに着目して、身近にいた開発が好きな学生さんやつながりのあるエンジニアさんとパートナーシップを組んでクラウドソーシングにおける受託という立場のNo.1を目指すことにしました。

パートナーのみなさんのお陰もあって、開発ラインは3つくらいになり、2015年初頭には某クラウドソーシング運営会社の月間契約金額全国1位を獲得できたり表彰もされました。

こういった実績の積み重ねもあり、オフィスを持てるようになったり、テレビ、新聞などにも取り上げていただきました。

もちろんすべてがいいことづくしではないです。いわゆる「炎上」というのも経験しました。クライアント様をはじめご迷惑をおかけしましたorz

いくつかの対処の仕方を経験したけれど、個人的に納得がいったのは「誠意を持つ」ということでした。当たり前のことなのですが。 嘘は当然よくないし、責任のなすりつけあいでクライアントと敵対関係をつくってもなにも解決できないと思いました。

3. 事業分割(2015年夏〜)

1年間で強みとなったクラウドソーシング事業にさらにフォーカスして事業展開のスピードアップを図るため、チイキットの事業を分割することにしました。直近の主軸ではなかった観光と農業あたりはチイキットから切り離すことにしました。

さらに私はチイキットを退任して、切り離した事業を運営することになりました。この体制変更については、経営陣で様々な選択肢を検討しましたが、趣味チームのチイキットができたときからのビジョンである「Make Local Happiness」の実現のためにもっともスピードがでる形としました。

というとポジティブですが、共同創業した社を去るのは気持ちのよいものではないし、ベンチャーがすぐ分割するというのはネガティブなところももちろんあります。 ほとんどの方にご挨拶もせず去っておりまして、驚かせてしまったり、ご迷惑をおかけした方もおりすみません。が、私たちが目指す「Make Local Happiness」に向けた体制として温かく見守っていただければと思います。

今後の話

さて、今後も引き続き地域情報、特に観光・農業分野を扱った地域×ITの世界に関わり続けていきます。

まずノーマディック社の運営する旅のメディア・コミュニティサイトのトリップノート の開発をしていきます。 大学の研究がきっかけでこのサービスと出会いまして、チイキットのときも取引先として開発にスポット的に関わっていましたが、今回の体制変更を機にコアメンバーとして参画します。

https://tripnote.jp/singapore

現時点ではシンガポールを訪れる日本人観光者向けに2000件を越えるスポットと記事の情報を提供しています。 シンガポールに行く予定があればぜひ利用してみてください!今後、世界中のエリアを追加していく予定です。

最近だと、現地での利用に便利なiOS版も最近リリース しました。

また、行ったことのあるところを塗りつぶしたり、旅行毎のアルバムもつくれます。ぜひ過去の旅をまとめるサービスとしても使っていただければと!

https://tripnote.jp/traveler/isseium

21世紀最大の産業になるともいわれる観光で、旅するキッカケと旅のコンシェルジュとなるサービスを提供していきます。

一方、つい先日、2009年に共同創業したソフトウェア共創研究基盤株式会社を引き継ぎました。

こちらでは大学と連携しつつ30年先の地域課題解決を見据えたソフトウェアテクノロジーの研究と実践を進めていきたいと思います。いまは趣味的にやっている農業もこの会社の事業として活動していく予定です。

さいごに

「どこに住んでるの?」とよく聞かれるのですが盛岡にいます。東京まで2時間半なので近いもんですね。もう少し新幹線が安くなるとよりハッピーなんですが。

基本的にはリモートワークなので場所に制約はないのですが、盛岡の街が好きなのでしばらくはいると思います。

というわけで元気にやっています!

山手線の開業順

◆五反田駅開業100周年~山手線で一番古い駅はどこ?|吉岡正晴のソウル・サーチン

こちらの資料をもとに作成〜. 順番が2つあるのは,同じ日だったときの繰り上げ方が違いますー.

     1  01. 品川駅     1872年6月12日(明治5年5月7日)
     2  02. 上野駅     1883年(明治16年)7月28日
     3  03. 新宿駅     1885年(明治18年)3月1日
     3  03. 渋谷駅     1885年(明治18年)3月1日
     5  04. 目白駅     1885年(明治18年)3月16日
     5  04. 目黒駅     1885年(明治18年)3月16日
     7  05. 秋葉原駅   1890年(明治23年)11月1日
     8  06. 田端駅     1896年(明治29年)4月1日
     9  07. 大崎駅     1901年(明治34年)2月25日
     9  07. 恵比寿駅   1901年(明治34年)2月25日
    10  08. 巣鴨駅     1903年(明治36年)4月1日
    10  08. 池袋駅     1903年(明治36年)4月1日
    10  08. 大塚駅    1903年(明治36年)4月1日
    14  09. 代々木駅   1906年(明治39年)9月23日
    15  10. 原宿駅     1906年(明治39年)10月30日
    16  11. 田町駅     1906年(明治39年)12月16日
    17  12. 新橋駅     1909年(明治42年)12月16日 (初代新橋駅=後の汐留駅は、1872年10月15日開業)
    17  12. 浜松町駅   1909年(明治42年)12月16日
    19  13. 有楽町     1910年(明治43年)6月25日
    20  14. 高田馬場   1910年(明治43年)9月15日
    21  15. 駒込駅     1910年(明治43年)11月15日
    22  16. 五反田駅   1911年(明治44年)10月15日
    23  17. 鶯谷駅     1912年(明治45年)7月11日
    24  18. 新大久保駅 1914年(大正3年)11月15日
    25  19. 東京駅     1914年(大正3年)12月20日
    26  20. 神田駅     1919年(大正8年)3月1日
    27  21. 御徒町駅   1925年(大正14年)11月1日
    28  22. 日暮里駅   1931年(昭和6年)12月19日
    29  23. 西日暮里駅 1971年(昭和46年)4月20日

リンダグラットンの未来企業を読んだ

リンダグラットン最新作が出たと言うことなので読んでみた.

前作「ワークシフト」は,未来の個人に焦点をあてて書いたもので,今作は企業に焦点を当てて書いています.

レジリエンス

この本で初めて出会った単語「レジリエンス」. 明確にレジリエンスの定義を述べているところはないように思えましたが

"市場や社会の変化に柔軟に対応していく力"

のように勝手に意訳しました. この点もう少し序盤のところで書いていただければ作者と共通の目線で読み進められたのではないかなと思いました.

レジリエンスの3つの領域

レジリエンスを高めるには3つの領域があるということでした. この本では,この3つの領域それぞれで世界中の企業の実践例が紹介されています.

1. 内なるレジリエンス

社内のレジリエンス.チームや組織体制,仕事への関わり方などです.

2. 社内と社外の垣根を取り払う

企業は地域社会と密接に関わって,地域とともに成長していきましょうということですね.

3. グローバルな問題に立ち向かう

格差,失業,貧困などたくさんの課題が世界にはある.企業は世界の課題を解決していこうというものですね.

おわりに

簡単にいうと,社内,地域,世界を意識した企業が未来には求められるということでした.

そいえばワークシフトをブログにまとめていなかったので近々まとめたいですね.

開発時間わずか5時間、100円の投資を受けた「You」をリリースしました

みなさんは, Yo という素晴らしいサービスをご存知でしょうか.

ただ単に相手に「Yo!」って送るだけのシンプルなワンビットコミュニケーションサービスですね! APIも公開されていて,ブログに「Yo!」ボタンを貼ったり,ミサイルが発射されたらYo! なんて使い方もでてきているようです.

というわけでYo にインスパイヤされまして,田舎をもっとワクワクさせたいと思っている私は「『Yo × 地図』で地域の交流人口UP!」と思いまして「You」を開発いたしましたので紹介します.

AppStoreでダウンロードはこちら ⇒「You! - 地図をタップして友達を見つけよう -」

シンプルなログイン画面

Facebook ログインを利用してログインします.

ログイン画面

地図画面

ログインすると地図上に自分のアイコンが表示されます.これであなたの現在地は世界中の人に共有されるようになりました!

地図画面

右下の「LOGOUT」をタップすると,サービスからログアウトして位置の共有を止めることができる安心設計です.

つっつく機能

つっつきたい相手を地図上で相手を見つけます.今回は自分自身をつっついてみたいと思います.

アイコンをタップすると,名前と青いアイコンが表示されます.

つっつく

青いアイコンをタップすると,相手に「You!」というメッセージが届きます.

You

「相手を見る」は,つっついた相手のFacebookプロフィールページへのリンクになっています. 「つっつく」は,つっついた相手につっつき返します. 「無視」は,無視します.

それでは,楽しいワンビットコミュニケーションを!

開発の裏側

着想から5時間で開発を終えました.そのキーになった2つの技術を紹介します!

1. Titanium

このアプリは Titanium で開発されています. 日本では2010年頃をピークに下火感の出ている Titanium ですが,着々と進化を遂げています.

参考になるかわかりませんが,Youのロジックのコーディングは300行くらいです. 後述するmBaaSサービスとの結合部も含めてこの量なので爆速コーディングには向くと思います!

一方で,プラットフォーム依存の細かな実装はなかなか難しかったりするので,kitchensink とかを見てTitaniumだとどこまで簡単にできるのかを身につけておくのが重要な気がします.

2. Appcelarator Cloud Service (ACS)

ACS は Titanium の開発元である Appcelerator が提供する mBaaS です. という認識でしたが改めて 公式ページ みたら,正式名が違うかもしれません.Titanium Cloud Service? The Cloud Starts Here?

サービス内容ですが,よく使うAPI 20個ほどが用意されています. Titanium には Cloud モジュールが用意されていまして,このモジュールを使うことで,すごく簡単にACS と通信することができます.

例えば,特定の相手へのpushはこんな感じです.サーバ側のコーディングは一切不要です!

Cloud.PushNotifications.notify({
  channel: "something",
  to_ids: "相手のID",
  payload: {
     alert: "相手へのPushメッセージ",
     etc: "その他なにかPushと一緒に送りたい情報",
  }
}

とっても便利ですね.Parse.com が流行りつつあったり, Apple 自体も mBaaS サービスを始めるということなので,小さなアプリならサーバサイドの開発知識がなくてもつくれちゃいそうです.

無料で使えるのは,日間25万コール(!), 月間500万コール,ストレージは20GBまでOKのようです. 有償版が「応相談」状態で価格がよくわからないので,Parseみたいに一般消費者でももっと手軽に使えるようにしてほしいですね.

Appcelerator がエンタープライズ路線らしいのでこんな感じなのかなーと思ったりもしますが.

100円の投資

自称エンジェル投資家O氏に見せたら100円投資されました.

Facebook版!今までチェックインした都道府県を塗りつぶしてくれるサービスを作りました

今までfoursquareにチェックインした都道府県を塗りつぶしてくれるツールを作ったよ

foursquareでチェックインした都道府県を塗りつぶしてくれるサービスいいですね!

しかーし、foursquareではなくて「Facebook のチェックインを色塗りしてほしい!!」という人は私も含めているのではないでしょうか!?

というわけで Facebookでチェックインした都道府県を塗りつぶしてくれるサービスを作りました!

CheekiTrip (チイキトリップ)

私の地図はこちらです! http://cheekitrip.com/isseium

Facebook には、地図画像付きでシェアできます!

スポット推薦(ベータ)

いまならスポット推薦体験ができます!

チェックイン情報から好みを分析して利用者ひとりひとりのオススメのスポットを推薦します! 利用者のチェックイン情報を分析して、Amazonでいう「このスポットに行ってるひとは、このスポットにもいってます」のような推薦アルゴリズムになっています。

利用者が増えれば増えるほど、精度が高くなっていく(はず)なので温かく見守ってください!

実装について

実装方法をまとめようと思ったのですが、長くなってしまいそうなのでまたの記事で解説させてください。 地図の色塗りは d3.js を利用しました。

全体のシステム構成はこんなかんじです!

今後の展望

チェックインしたことと、満足が高いスポットであったことは別問題なのでその点を改善していきたいです。 あとは、スポットのお気に入りなんかも欲しいですね!まだまだ改善していきたいです。 アイディア募集しておりますので @isseium までお気軽にどうぞ!

Special Thanks

このサービスは、私が所属する岩手県立大学ソフトウェア情報学部 佐々木研究室で行っている地域の魅力発見・発信に関わる研究の一環で開発・運用しています!

この研究では、地域の魅力への感じ方は人それぞれ違うのではないかという仮説のもと、これまで顕在化していなかった地域の魅力を発掘し、人それぞれにあった情報発信を行うことで、地域のブランド化・観光を促し、地域活性化に寄与することを目的としています!

目指すのは、最高の旅を見つけてくれるコンシェルジュです。今後ともどうぞよろしくお願いいたします!

最後に、このサービスの公開とこの記事を書くきっかけをつくっていただいた koogawa さんに深く感謝いたします!

Mongoid で ロークエリーを投げる方法

Mongoid は MongoDB の ORマッパー です.

Mongoid に限らず ORマッパーさんは,細かいことができない認識(使いこなせていないだけかもしれないのでそのときはつっこんでください)です.

今回は,こんなクエリを投げたかったのですが,ORマッパーを利用した投げ方わからなかったので,ロークエリー(ORマッパーを使わない生のクエリ)で投げる方法を調べました.

投げたかったクエリ:

「Checkins において,(非キー属性の)spot_id ごとに合計値を出して,合計値の降順に,5件目から5件取得する」

Mongoid でも aggregation はサポートしているみたいなんですが,このクエリを投げる方法が思いつきませんでした...

db.checkins.aggregate({$group: {"_id" : "$spot_id", "count" : {"$sum": 1 }}}, {$sort: {count: -1}}, {$skip: 5}, {$limit: 5})

SQLでいうとこんな感じ(脳内クエリなので間違えているかも)

SELECT spot_id, COUNT(*) AS count FROM checkins GROUP BY spot_id ORDER BY count desc LIMIT 5,5 

Mongoid 経由だと?

StackOverFlow によると Moped を利用してうんぬんだそうです.

というわけで,以下の書き方でロークエリーを投げることができました.

db = Mongoid::Sessions.default
collection = db[:checkins]
collection.aggregate({'$group' => {'_id' => '$spot_id', 'count' => {'$sum' => 1 }}}, {'$sort' => {'count' => -1}}, {'$skip' => 5}, {'$limit' => 5})

MongoDB へのクエリを文字列として書くわけじゃないので,ちょっとRubyっぽい文法に変換してやる必要がありました.文字列をそのままクエリとして扱うようなもっとローレイヤーな方法があるのかもしれませんね.

Titanium + Wikitude SDK で遊んでみた

Titanium + Wikitude SDK で 初めてAR やってみました.

Wikitude とは?

はじめて聞いた名前... だと思っていたのですが,ヤシの旧ロゴを見て思い出しました. 一時期ARが流行ったときにダウンロードしていた気がします. 2008年頃に Layer とか セカイカメラなどのアプリに近いコンセプトで登場した老舗のアプリです.

あまり調べておりませんが,いまもそのアプリはあるみたいですが,どちらかというとSDKを提供することに力を注力しているように見えます. ※ セカイカメラといい,ARアプリはまだ実を結びませんね

Wikitude SDK とは?

Android/iOS/BlackBerry/PhonGap/Titanium で簡単に拡張現実を利用できるSDKのようです.

今回は,Titanium で利用してみました.

インストール方法や examples は 公式Doc をご覧下さい.

ARchitectWindows.js とか,jsuri とかいくつかファイルを設置しなければいけないけど,ドキュメントでは省略されてるのでちょっとわかりにくかったです.

Githubに挙がっている examplesソースコードをもとに,修正して試すのが楽かもしれません.

ここがもう少し改善されればとっつきやすいと思いました.

ライセンスは,次のようになっており,商用利用は99ユーロからです. 商用利用でなければ,自由に使えるみたいです.(ロゴが入りますが)

画像認識と重ね合わせ

認識させたい画像をWikitudeのWebにうpすると解析したファイルつくってくれて,そのファイルと重ね合わせたい画像を指定するだけで,該当画像があると勝手に重ね合わせてくれました.

POI (セカイカメラっぽいやつ)

次の構造のPOIデータをいれるだけで「っぽい感じ」のことしてくれました.大変便利です.

var poiData = {
    "id": 1,
    "longitude": (lon + (Math.random() / 5 - 0.1)),
    "latitude": (lat + (Math.random() / 5 - 0.1)),
    "altitude": 100.0,
    "description": "This is the description of POI#1",
    "title": "POI#1"
};

altitude は特別な処理が必要みたいで,変更しても全部同じ高さになってしまいました.

感想

ARアプリケーションをフルスクラッチしなくても,そこそこっぽいことができることがわかりました. 実際になにかひとつアプリつくってみたいですね.