Hatena::ブログ(Diary)

Hacking My Way 〜 itogのhack日記 RSSフィード Twitter

2015-05-14

まさかのフリパン

f:id:itog:20150513233438j:image

twitterでの記録によれば、2012年8月に公開された、ボクサーパンツを無料で配布するという広告サービスフリパン。

もう登録していたこともすっかり忘れてた2015年4月、なんとフリパン当選のメールが来た!

最大7枚/月だったはずが、登録3年にして1枚目w

そして、パンツ待って3年、ついに届きました。

箱を開けると、SNSとかで広めてね、というメッセージが。

f:id:itog:20150513234121j:image

そして、これがフリパンだ!

f:id:itog:20150513234251j:image

f:id:itog:20150513234238j:image

素材表示のタグはなく、腰ゴムの裏面に書いてあった。

f:id:itog:20150513234341j:image

男女もないフリーサイズかな?ボクサーパンツっていうか、女子用のホットパンツって感じかなぁ。正直自分はどの場面で穿けば良いのかわからないw

広告も自社広告だし、なかなか難しいんだろうなー。

でも、すぐ消えそうなサービスを3年粘り続けてるのはすごいね。2枚目が届くことを期待してます。

2015-04-14

Androidのカレンダーアプリで予定に自動で画像が表示されるようになってる

Androidのカレンダーアプリで、予定のタイトルによっては、予定詳細画面に自動でイメージ画像が表示されるようになってた。

例えば、予定に「プール」と入れると以下のように表示される。

f:id:itog:20150414203522j:image

スポーツ系は充実してる。

ランニング、テニスはともかくスキーまで。

f:id:itog:20150414203526j:image

f:id:itog:20150414203523j:image

f:id:itog:20150414203524j:image

ところがサッカーは、

f:id:itog:20150414203525j:image

なんでやねん!

美容院とかもある。

f:id:itog:20150414203528j:image

ちょっと残念なのは「レストラン」。夕食、とかだと対象外。予定に「レストラン」とは入れないからなぁ。

f:id:itog:20150414203527j:image

どういう基準で追加されてるのかは気になるなぁ。

2015-03-25

日本は小さい島国じゃない

日本は小さい島国で少子化は問題、資源は海外に頼らないと、、、みたいなことを当然のように言ってる人がいるけどなにをもって小さいとか言ってるんだろう?

日本は国土面積では世界62位と大きくはないけど、EU圏で言えばフランス、スペインに次いでドイツよりも大きい。

国の面積順リスト - Wikipedia

人口は世界10位。

国の人口順リスト - Wikipedia

人口密度は34位だけど、上位は面積が極めて小さい国が占めていて、100,000平方km以上の国土を持つ国としては、バングラディッシュ、インドに次ぐ3位。

国の人口密度順リスト - Wikipedia

排他的経済水域に至っては世界8位。

排他的経済水域 - Wikipedia

なにが小さいの?

2015-03-24

IchigoJamがいい感じになってきてる

IchigoJamがライセンス販売を開始したらしい。

jig.jp、子供パソコン「IchigoJam」のライセンス販売を開始 | マイナビニュース

このIchigoJam、情報が整ってきて、プログラミング初学者向けの教育用PCという分野で、RaspberryPiにとって代わる可能性は十分ありそうだ。

こどもパソコン IchigoJam - はじめてのプログラミングパソコン(1500円)

RaspberryPiが他のボードと一線を画したのは、教育用途を大きく打ち出すことで、教育する側に刺さったから。ところが、当初は機能や性能向上のためのバージョンアップはしないようなことを言っていたはずが、IoTブームの影響もあってかスペック競争に巻き込まれ、矢継ぎ早に新バージョンを投入するようになってしまった。

この世界の競争は激しい。オープンソースプロジェクトならではの問題もあり、プロトタイピングの鉄板基板であるArduinoに至ってはバージョンが増えるばかりか、グループ分裂までしてしまったようだ。

Make: Japan | Arduino戦争:グループ分裂、そして新製品の登場

教育する側にとってみれば、似て非なるものがいくつも存在するのは障害でしかない。

IchigoJamは教材や実績が整ってきたのに加え、そのシンプルな構成のため、性能向上バージョンを出したり亜流が出る可能性が少なく、10年後も変わらず使っている事も考えられる。そうなれば、教育用として抜けた存在になるだろう。

2015-02-26

webhookとHubotを使ってBacklogをslack対応させる

slackというチャットツールが流行ってます。いろんなサービスと連携しやすいのが特徴で、例えばgithubとかはホント簡単に連携することが出来るのですが、国内サービスは対応していない場合があります。

国産の課題管理ツールBacklogもそのご多分に漏れずslack非対応で、これまではAPIを使って連携する方法しかありませんでした(git機能は別)が、Backlogの更新情報がwebhookで提供されるようになり、より簡単に連携出来るようになりました。

webhookはhttp postを使ったpush型APIで、この場合

  • Backlog -> Hubot
  • Hubot -> slask

と2段階でリクエストを送ることになります。

ここではslack, backlogを使っていること、herokuの知識があることを前提に

  1. Hubotの設定
    1. herokuへのデプロイ
  2. slackとHubotの連携
  3. BacklogとHubotの連携

という順番で設定方法を説明していきます。環境はMac OSX yosemiteです。

1.Hubotの設定

Hubotのインストール

HubotはNode.jsで動くボットフレームワークです。Node.jsをインストールしていない場合はインストールします。

以下のように、nodeとnpmがインストールされていることを確認して下さい。

$ node --version

v0.12.0

$ npm --version

2.5.1

npmコマンドを使ってhubotをインストールします。

globalにインストールする( globalかlocalかは http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation )ので、-gオプションを付けます。

$ sudo npm install -g hubot

そのままだとエラーになるのでcoffeeをインストール

$ hubot

env: coffee: No such file or directory

$ sudo npm install -g coffee-script

これでhubotが使えるようになりました。


botの作成

botの生成するのにgenerator-hubotをインストールします。

$ sudo npm install -g yo generator-hubot

ディレクトリを作成し、botを作成します。

$ mkdir -p bot

$ cd bot

$ yo hubot

_____________________________

/ \

//\ | Extracting input for |

////\ _____ | self-replication process |

//////\ /_____\ \ /

======= |[^_/\_]| /----------------------------

| | _|___@@__|__

+===+/ /// \_\

| |_\ /// HUBOT/\\

|___/\// / \\

\ / +---+

\____/ | |

| //| +===+

\// |xx|

botの名前などを入力します。Bot adapterにはslackを指定します。

? Owner: <Owner name and email>

? Bot name: <bot name>

? Description: A simple helpful robot for your Company

? Bot adapter: (campfire) slack

? Bot adapter: slack

create bin/hubot

create bin/hubot.cmd

create Procfile

create README.md

create external-scripts.json

create hubot-scripts.json

create .gitignore

create package.json

create scripts/example.coffee

create .editorconfig

_____________________________

_____ / \

\ \ | Self-replication process |

| | _____ | complete... |

|__\\| /_____\ \ Good luck with that. /

|//+ |[^_/\_]| /----------------------------

| | _|___@@__|__

+===+/ /// \_\

| |_\ /// HUBOT/\\

|___/\// / \\

\ / +---+

\____/ | |

| //| +===+

\// |xx|

以上でボットのひな形が作成できました。

herokuにデプロイする

Hubotはhttpリスエストを受けるサーバになるのでデプロイ先が必要になります。ここではherokuにデプロイします。

heroku command line toolを使うのでインストールしてない場合はインストールします。

https://devcenter.heroku.com/articles/heroku-command

herokuにデプロイするためにgit管理下に置きます。

$ git init

$ git add .

$ git commit -m 'First commit.'

herokuにログインします。

$ heroku login

Enter your Heroku credentials.

Email: <email>

Password (typing will be hidden): <password>

アプリを作成します。

$ heroku create <app name>

HubotをどうさせるのにはRedisが必要なのでAddonを追加します。

$ heroku addons:add redistogo:nano --app <app name>

(以下--appオプションは省略)

herokuにデプロイします。

$ git push heroku master

slackとHubotの連携

slackはHubotインテグレーションをサポートしているので、slackのUIからHubot integrationを追加します。

"Configure Integrations"からHubotを選択します。

Hubotのslack上でのユーザ名を入力します。

f:id:itog:20150226170749p:image

以下トークンが取得できます。

f:id:itog:20150226170746j:image

HUBOT_SLACK_TOKEN=<Your Token>

これをherokuに設定しておきましょう。

$ heroku config:set HUBOT_SLACK_TOKEN=<Your Token> --app <bot name>

また、botをidelingにさせないためにpingを送るような設定をします。

$ heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=<app url>

<app url>は"https://<app name>.herokuapp.com/"です。

$ heroku apps:info

で確認できます。

動作確認

ここまででひとまずボットが動くようになっているので確認しましょう。

slackでbotに対してpingとダイレクトメッセージを送ってPONGと帰ってくればOK.

f:id:itog:20150226170747p:image

Backlog-Hubot間のwebhook設定

公式ヘルプページ

http://www.backlog.jp/help/adminsguide/webhook-setting/userguide2493.html

Hubotにscriptを追加する

Hubotのscriptsディレクトリに以下内容で"backlog.coffee"を作成します。

# Description:
#   Backlog to Slack
#
# Commands:
#   None

backlogUrl = 'https://mobileclip.backlog.jp/'

module.exports = (robot) ->
  robot.router.post "/room/:room", (req, res) ->
    room = req.params.room
    body = req.body

    console.log 'body type = ' + body.type
    console.log 'room = ' + room

    try
      switch body.type
          when 1
              label = '課題の追加'
          when 2, 3
              # 「更新」と「コメント」は実際は一緒に使うので、一緒に。
              label = '課題の更新'
          else
              # 課題関連以外はスルー
              return

      # 投稿メッセージを整形
      url = "#{backlogUrl}view/#{body.project.projectKey}-#{body.content.key_id}"
      if body.content.comment?.id?
          url += "#comment-#{body.content.comment.id}"

      message = "*Backlog #{label}*\n"
      message += "[#{body.project.projectKey}-#{body.content.key_id}] - "
      message += "#{body.content.summary} _by #{body.createdUser.name}_\n>>> "
      if body.content.comment?.content?
          message += "#{body.content.comment.content}\n"
      message += "#{url}"

      console.log 'message = ' + message
      # Slack に投稿
      if message?
          robot.messageRoom room, message
          res.end "OK"
      else
          robot.messageRoom room, "Backlog integration error."
          res.end "Error"
    catch error
      robot.send
      res.end "Error"

参照) http://qiita.com/mayukojpn/items/a9a9408c21a761adb7d0

Backlog側の設定

Backlogの"プロジェクト設定"から"Webhook"を選択します。

webhook urlに以下を入力します。

https://<app-name>.herokuapp.com/room/<room name>

この画面で「通知するイベント」を選択することが出来るのですが、フィルター・整形はhubot側でやらせる前提で「すべてのイベント」にチェックを入れます。

編集画面の下の方からテスト送信ができ、以下の様なデータが送信されます。

f:id:itog:20150226170745p:image

{

"id": 10,

"project": {

"id": 100,

"projectKey": "TEST",

"name": "TestProject",

"chartEnabled": false,

"subtaskingEnabled": false,

"textFormattingRule": null,

"archived": false

},

"type": 1,

"content": {

"id": 100,

"key_id": 100,

"summary": "test issue",

"description": "test description"

},

"notifications": [],

"createdUser": {

"id": 1073863424,

"userId": null,

"name": "itog",

"roleType": 1,

"lang": "ja",

"mailAddress": null

},

"created": "2015-02-23T22:52:28Z"

}

以下のように、slackにBacklogの更新情報がポストされていればOKです。

f:id:itog:20150226175929j:image

あわせて読みたいブログパーツ テクノラティのお気に入りに追加する