ページ

2016年7月23日土曜日

Feedlyの未読記事をSlackへGASで通知するBotの作成 1


現在RSSリーダーは主にFeedlyを使ってるんですが、
未読記事を定期的にSlackにポストしてくれたら便利かな〜と思って
作ってみることにしました。
※ もしかしたら既にBotがある?かもしれませんが・・
事前準備

まずはここからログインし、FeedlyのDeveloper用のトークンをゲットします。

※ Feedlyのアカウントを持ってない方はこの機会にどうぞ
(⚠️Feedlyのまわし者ではありませんので・・)
ログインすると登録しているメールアドレスに認証用のメールが送られます。
送られたメールのリンクをクリックするとアクセス用のトークンがもらえます。

FeedlyのAPIを呼ぶ際に必要なトークンとなります。
試しに自分のプロフィール情報を取ってみます。
$ curl -H 'Authorization: OAuth {トークン}' https://cloud.feedly.com/v3/profile
{トークン}部分に上で取得したトークンを貼り付けます。
実行するとずらずらっとプロフィール情報が取得できたかと思います。
開発環境

次にローカルでの開発環境ですが、
こちらも以前の記事で紹介したnode-google-apps-scriptを使用します。
初期設定などは上の記事を参照して下さい。
※事前にnode.jsのインストールが必要です⚠️
まずはパッケージ情報や依存するパッケージなどを記述するpackage.jsonを作成します。
$ npm init
name: (....) feedly_slack_bot⏎ # 名前はfeedly_slack_bot
version: (1.0.0) ⏎
description: ⏎
entry point: (index.js) main.js ⏎ # 今回はmain.jsがメインファイル
・・・ 残りは好きなように設定
Is this ok? (yes) yes ⏎
以下のようなpackage.jsonが作成されているかと思います。
{
  "name": "feedly_slack_bot",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Slowhand0309",
  "license": "MIT"
}
ここで肝心のnode-google-apps-scriptをインストールします。
$ npm install node-google-apps-script --save-dev
これでGASへのアップロードがCLIで行えるようになります。
プロフィール表示

試しにGASでプロフィールを表示するまでをやってみます。
gapps initを行い、ローカルにgapps.config.jsonsrc/*.js
をダウンロードしてきます。
src/main.jsとし、↓に編集します。
/**
 * Entry function.
 */
function exec() {
  FeedlySlackBot.profile();
}

/**
 * FeedlySlackBot object.
 */
var FeedlySlackBot = {

  PROFILE_URL: 'https://cloud.feedly.com/v3/profile',

  /**
   * Get auth string.
   *
   * @return {String}
   */
  auth: function() {
    return 'OAuth {トークン}';
  },

  /**
   * Log out profile info.
   */
  profile: function() {

    var auth = this.auth();
    var response = this.get(this.PROFILE_URL, auth);
    Logger.log(response.getContentText("UTF-8"));
  },

  /**
   * Get response with auth.
   *
   * @param {String} url
   * @param {String} auth
   */
  get: function(url, auth) {
    var headers = {'Authorization' : auth};
    var options = {
      'method' : 'get',
      'contentType' : 'application/json;charset=utf-8',
      'headers' : headers
    };

    return UrlFetchApp.fetch(url, options);
  }
};
{トークン}は上で取得したトークンを設定して下さい。
アップロードし、
$ gapps upload
Google Drive上でexecを指定し実行するとログにプロフィール情報が
出力されているかと思います。
今回はここまで

2016年7月20日水曜日

番組で紹介されていたセブンの商品を購入


ちょっと前にとある番組でセブンイレブンの商品を紹介されていて
とても美味しそうだったので、実際に購入してみました。


まるでマンゴーを冷凍したような食感のアイスバー


税込 140円

これはその名の通り!!マンゴーを冷凍したかのような食感でした(まんま)。
しっとりとした食感で後味も良くてこれは人気なのがわかる




実際セブンに買いに行った時もこのアイスを買ってる人がちらほらいました。


金のビーフカレー


税込 398円

これは便利!!
何が便利かというと調理する時に湯煎とかしなくても(もちろん湯煎もできる)
レンジで袋のまま温めるだけ!! いや〜便利。

肝心の味もお肉が柔らかくてとても美味しく仕上がってました。




さばの塩焼き


税込 280円

こちらも少しフィルムを剥がしてレンジで温めるだけでいただけます。
しかも骨を機会 + 手作業で抜いてるらしいのでかぶりついて食べれます^^。


小籠包


税込 192円

こちらはフライパンでの調理になりますが、ま〜肉汁がすごい^^;
箸で少し割っただけで中から溢れてました。



皮ももっちりで本格的でした。

2016年7月16日土曜日

Android MarshmallowのPermission問題をPluginで解決


Android 6.0(Marshmallow)からpermissionモデルが新しくなってます。

Android 6.0未満はインストール時に必要なpermissionsを一括で
同意し、アプリの実装も許可されているものとして実装してます。
が、
Android 6.0からはインストール後の初期状態は全て拒否されており、
アプリを起動して必要になった時にユーザーに同意を求めます。

PhoneGapを使ってる場合

Javaでネイティブでゴリゴリ実装〜という場合は素直にユーザーの同意が
必要になった場合に
if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {
   // ユーザーに許可を求める
   ・・・・
}
といった具合に実装していかないといけませんが、PhoneGapなら
cordova-plugin-android-permissionsという便利なプラグインがっ!!

cordova-plugin-android-permissions


Android6.0未満の場合はpermissionチェックで全て許可済みになります。
今後の為に入れておいて損は無いかな〜と。
Install
$ phonegap cordova plugin add cordova-plugin-android-permissions
例)カメラのパーミッションが必要な場合
var permissions = cordova.plugins.permissions;
permissions.hasPermission(permissions.CAMERA, checkPermissionCallback, null);

function checkPermissionCallback(status) {
  if(!status.hasPermission) {
    var errorCallback = function() {
      console.warn('Camera permission is not turned on');
    }

    permissions.requestPermission(
      permissions.CAMERA,
      function(status) {
        if(!status.hasPermission) errorCallback();
      },
      errorCallback);
  }
}
指定できるpermission一覧はここで確認できます。

2016年7月13日水曜日

Kindleで大人買いしてしまった漫画



最近何故かドラゴンクエストの漫画ばっかり読んでます。
というのもKindle本で期間限定で「ダイの大冒険」の数巻が無料になっていた為、
まんまと続きが気になって全巻買ってしまったという顛末(よくある話・・)


[まとめ買い] DRAGON QUEST―ダイの大冒険―(ジャンプコミックスDIGITAL)

でも久しぶりに読むと昔を思い出したりしてなかなか面白いな〜と思います。

個人的には人間らさ満載のポップが好きなので、
大魔導士ポップになっていく姿は応援したくなります。


[まとめ買い] ドラゴンクエスト列伝 ロトの紋章 完全版(デジタル版ヤングガンガンコミックスデラックス)

ロトの紋章はドラゴンクエストIIIの世界観で、ルイーダの酒場とか登場して
子供の時はルイーダの酒場やん〜と思いながら見てた記憶があります。


ちょっとネタばれになっちゃいますが、、
アステアが女性だったというのは結構強引な感じもしますが、びっくりしました。
続編への布石だったんだと思ってますが。


ちょっと流石に大人買いしすぎた感があるので、しばらくは大人しくしようと思いますw

2016年7月9日土曜日

機械学習のフレームワークTensorflowを試す 8 - ソフトマックス回帰 -


前回はMNISTのデータを見てみましたが、今回は続きをやっていきたいと思います。

前回MNISTの画像データを[60000, 784]のn次元配列として扱うと書きました、 そして画像に対応するラベルもテンソルとして扱います。
ラベルは画像が0〜9のどの数値を現しているかになります。画像枚数分(60000)あるので、
[60000, 10]のn次元配列として表すことができます。
例) 3を表す場合
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]

Softmax Regressions (ソフトマックス回帰)

データをテンソルでどう扱うかは分かりましたが、実際に学習する方法として、
MNISTの学習ではSoftmax Regressions (ソフトマックス回帰)を使用するようです。

ソフトマックス回帰とは?
ここで回帰(regression)という言葉が出てきましたが、
回帰とはデータから関数を導こうとする手法になります。
という訳でソフトマックス回帰とは、
ソフトマックスというものを使って関数を導き出す です。
次はソフトマックスを調べてみます。

ソフトマックスとは?
n次元実数ベクトルX = (X1, ・・・ Xn)を受け取って
n次元実数ベクトルY = (Y1, ・・・ Yn)を返す。
ただし、Yi = E^Xi / E^X1 + E^X2 + ・・・ E^Xn

・・・・
ん〜分かったような分からないような^^;

ソフトマッックス関数の性質
  • 0 < Yi < 1
  • Y1 + ・・・ + Yn = 1
  • Xの各成分の中でXiが大きい、Yiはほぼ1でYの他の成分はほぼ0
具体例でいうと
x = (10, 1, 2)
をソフトマックス関数にかけると・・・
y = (0.9999・・, 0.0001・・, 0.0002・・・)
になる。つまり一番大きい成分を1に近づけ、
それ以外は0に近づけるといった感じでしょうか。

MNISTでソフトマックス回帰

話を戻してMNISTで実際にどうソフトマックス回帰を使うかというと、

  1. 入力された[0-9]の画像データを重みとバイアスを使ってラベルと照らし合わせながら、重要なピクセルとそうでないピクセルの重みを分布させる。
  2. 分布された重みをソフトマックス関数を使って活性化する。

大雑把ですが、、、
↑の2でソフトマックス関数を使って一番大きい成分を1に近づけ、それ以外は0に近づけると行った活性化させるような役割を行います。

次はサンプルコードを見ながら処理の流れを見てみたいと思います。

2016年7月6日水曜日

ポータブルSSD トランセンド TS256GESD400K(256GB)購入


外付けのポータブルSSDにVMのリソースを入れて、複数のPCで共有できたらなあ〜
と前々から思っていたので、丁度楽天ポイントが結構貯まっていたので購入しました。



以下のスペックでVM起動した所、そこまで遅い感じではなく、普通に使えました。
USB3.0とSSDのおかげですね〜。

・環境
Mac Book Air (13-inch, Mid 2012)
CPU 1.8 GHz Core i5
メモリ 4G

VMware Fusion 8.1.0
仮想OS Windows7

まあまあ古いMBAを使ってるんですが(早く買い換えたい・・)
それでもVM使えたので満足してます。

保護ケースも付いてました。



強いて難点を上げるとすれば、USBケーブルがちょっと長いという事でしょうか。。



個人的には半分くらいの長さでも良かったかな〜という気がします。



2016年7月2日土曜日

SlackにGithubのorganizationの通知を設定する方法


まずは、通常Githubでコミットした時にSlackに通知させるようにするには

1. チーム名の隣のプルダウンから「App & integrations」を選択。


2. 未だGithubをインストールしてない場合は、Githubを検索しクリック



3. 通知させたいtermの「Install」をクリック



4. 通知させたいchannelを選択し、「Add Github Integration」をクリック



5.「Authentication 〜」をクリックしGithubのアカウントで認証を済ませます



するとリポジトリ選択で通知させたいリポジトリを選択できます。。が、
初期設定の場合、organizationのリポジトリは設定できません



そこで、organizationのリポジトリも設定できるようにするには・・

1. Githubの設定ページの「OAuth applications」を選択



2. 「Slack」を選択



3. 許可したいorganizationの「Grant access」をクリック!!
    すると、今まで選べなかったorganizationのリポジトリが
     選べるようになっているはずです。

めでたし、めでたし。