OmniAICreator/Qiita-1.07M huggingface dataset:
Julia + PyQtGraph でグラフを描画する(2)

[『プログラミング言語 Julia でグラフを描画する』](http://qiita.com/akmiyoshi/items/a2aca5369c8e3c11ae59) でとりあえずサンプルを動かすことに成功したが、自分の(Julia言語の)プログラムで作ったデータを使ってグラフを描画するにはどうしたら良いかを調べることにした。
凡例・軸ラベルを表示し、(印刷用に)背景色／前景色を変更するサンプルを作ってみた。
例によって、Julia で求めた計算結果を PyQtGraph でグラフ表示するようになっている。(環境を作って是非動かしてみてください)

* ArrowSample2.jl (Julia のソースコード)は、Python のソース内の graph_run() という関数に配列を渡す。グラフの描画は Python にお任せ。$ y=x^2 $ と $ y=2x+50 $ の $ y $ を $ -10≦x≦10 $ の範囲で計算する($ x $ は <del>0.1 刻み</del> 2000個の区分に分割)。
* ArrowSample2.py (Python のソースコード)では、Julia から渡された配列を基に折れ線グラフを描画する。
* PyCall を用いて Python のコードを呼び出す際には、C:\julia-0.2.1-win32\bin がロードパスに含まれるので、ArrowSample2.jl および ArrowSample2.py の両方共を C:\julia-0.2.1-win32\bin 配下に保存しておくこと。
* ソースコードを保存する際には文字エンコーディングは utf-8 にしておくこと。
* サンプルを起動するには、ArrowSample2.jl (Julia のソースコード) をエクスプローラーからダブルクリックする。

> 注記：環境構築については、[『プログラミング言語 Julia でグラフを描画する』](http://qiita.com/akmiyoshi/items/a2aca5369c8e3c11ae59) を参照してください。

![0703b.gif](https://qiita-image-store.s3.amazonaws.com/0/32879/68c8dca1-23fd-7c8b-7caa-fba4711ffcd1.gif)

```jl:ArrowSample2.jl(C:\julia-0.2.1-win32\binに保存すること)
# -*- coding: utf-8 -*-

using PyCall

@pyimport ArrowSample2
x  = linspace(-10, 10, 2001)
y1 = [ x[i]*x[i] for i=1:length(x) ]
y2 = [ x[i]*2+50 for i=1:length(x) ]
ArrowSample2.graph_run(x, y1, y2)
```

```python:ArrowSample2.py(C:\julia-0.2.1-win32\binに保存すること)
# -*- coding: utf-8 -*-

from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg

def graph_run(plot_data_x, plot_data_y1, plot_data_y2):

    app = QtGui.QApplication([])

    # アンチエイリアスを指定するとプロットがより綺麗になる
    pg.setConfigOptions(antialias=True)
    pg.setConfigOption('background', (255, 255, 255)) # 背景＝白
    pg.setConfigOption('foreground', (0, 0, 0))       # 前景＝黒

    win = pg.GraphicsWindow(title=u'Julia+PyQtGraph サンプル')
    win.resize(400,300)

    mypen=pg.mkPen(color=(255, 0, 0), style=QtCore.Qt.DotLine) # 点線、赤

    p1 = win.addPlot(title=u'凡例、軸ラベル、背景色／前景色')
    p1.setLabel('left', u'Y 軸', units=u'秒')
    p1.setLabel('bottom', u'X 軸', units=u'ｍ')
    p1.addLegend()
    c1 = p1.plot(x=plot_data_x, y=plot_data_y1, pen=(0,0,255), name=u'グラフ1') # 実線、青
    c2 = p1.plot(x=plot_data_x, y=plot_data_y2, pen=mypen, name=u'グラフ2')     # 点線、赤
    p1.showGrid(x=True, y=True) # グリッドを表示

    # アローアニメーション (グラフ1)
    a1 = pg.CurveArrow(c1)
    p1.addItem(a1)
    anim1 = a1.makeAnimation(loop=-1)
    anim1.start()

    # アローアニメーション (グラフ2)
    a2 = pg.CurveArrow(c2)
    p1.addItem(a2)
    anim2 = a2.makeAnimation(loop=-1)
    anim2.start()

    app.exec_()
```
ChatOps 用 SaaS 一覧


結構、いろいろあるなぁ。

個人的には Idobata と HipChat と Slack が気になる。ChatWork はユーザーインターフェースがカタくて、あまりそそられない...

大方 API も提供しているし Hubot のアダプタもあるみたい。

# 国内

## ChatWork

[チャットワーク（ChatWork） | ビジネスが加速するクラウド会議室](http://www.chatwork.com/ja/)

* Hubot アダプタ [akiomik/hubot-chatwork](https://github.com/akiomik/hubot-chatwork)

## Idobata

[Idobata](https://idobata.io/)

* Hubot アダプタ [idobata/hubot-idobata](https://github.com/idobata/hubot-idobata)

## TypeTalk

[Typetalk（タイプトーク） - チームでのチャットはもっと楽しくなれる](http://www.typetalk.in/ja/)

* Hubot アダプタ [akiomik/hubot-typetalk](https://github.com/akiomik/hubot-typetalk)

# 海外

## HipChat

[Private group chat, video chat, instant messaging for teams – HipChat](https://www.hipchat.com/)

* Hubot アダプタ [hipchat/hubot-hipchat](https://github.com/hipchat/hubot-hipchat)

## Slack

[Slack: Be less busy](https://slack.com/)

* Hubot アダプタ [tinyspeck/hubot-slack](https://github.com/tinyspeck/hubot-slack)
PostgreSQL備忘録

## シーケンスの確認

    # select last_value from [シーケンスid];

## コマンドラインからsql実行
`-c`オプションを使う。

    psql [データベース名] -c "[sql文]"

## データベースサイズ確認
下記sqlを実行して、datidを控える。

    # select datid, datname from pg_stat_database;
     datid |  datname
    -------+-----------
     10819 | postgres
     16384 | hogehoge
         1 | template1
     10818 | template0

データディレクトリのdatidディレクトリがデータベースを構成するファイル。

    $ cd /var/lib/pgsql/data/16384
    $ du -k

## ファイル実行

    # \i [ファイル名]

## 文字コード変更
sjisとかutf8とかeuc_jpとか。

    # \encoding [文字コード]

## 結果の行列表示切り替え
表示カラムが多いとき、見やすくなる。

    # \x

## コマンドからのsqlファイル実行
-AF ,をつけると、区切り文字が,になり、csv出力になる。

    $ psql [データベース名] < [sqlファイル]

    $ psql [データベース名] < [sqlファイル] -AF ,

## パスワード省略
sqlを実行するときにパスワードを入力しないといけないので、バッチ実行時に困る。
実行ユーザのホームディレクトリに.pgpassを作成しておくと、自動で認証してくれる。
パーミッションは600にすること。

    $ vi ~/.pgpass
    
    hostname:port:database:username:password

    $ chmod 600 ~/.pgpass

## テーブル定義

    # \d [テーブル名]

## テーブル一覧

    # \dt

## データベース切り替え

    # \c [データベース名]

## データベース一覧

    # \l

## ログイン
オプションは省略できる

    $ psql -h [ホスト名] -U [ユーザ名] -d [データベース名]

## インポート
cオプションでインポート前にデータベースクリア

    # pg_restore -c -h [ホスト名] -U [ユーザ名] -d [データベース名] [dumpファイル名]

## エクスポート
Fcオプションは、バイナリ指定（Fpでテキスト指定）
bオプションでラージオブジェクトも含める

    $ pg_dump -h [ホスト名] -U [ユーザ名] -b -Fc [データベース名] > [dumpファイル名]

## データベース作成
言語も設定すること（PL/pgSQL）

    $ createdb -U [ユーザ名] [データベース名]
    $ createlang -d [データベース名] -U [ユーザ名] plpgsql

## centosにインストール
#### レポジトリの登録

    $ sudo yum localinstall http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm

#### インストール


    $ sudo yum install postgresql93 postgresql93-server --enablerepo=pgdg93

#### db初期化

    $ /etc/rc.d/init.d/postgresql-9.3 initdb


#### 設定変更

    $ vi /var/lib/pgsql/9.3/data/postgresql.conf

    # 受け入れサーバの指定
    listen_address = 'localhost'

    # ログの出力形式（時間　ユーザ　データベース）
    log_line_prefix = '%t %u %d'

    $ vi /var/lib/pgsql/9.3/data/pg_hba.conf

    # パスワード認証を許可（peerをmd5に書き換え）
    local   all             all                                     md5

#### 起動

    $ sudo /etc/rc.d/init.d/postgresql-9.3 start

#### 自動起動設定

    $ sudo chkconfig postgresql-9.3 on

#### パスワード設定

    $ sudo passwd postgres

#### ユーザ作成、db作成

    $ su - postgres
    $ psql
    # create user [ユーザ名];
    # alter role [ユーザ名] with password '[パスワード]';
    # alter role [ユーザ名] with createdb;
    # create database [データベース名] owner [ユーザ名] encoding '[文字コード]';
[Unity]シーンを呼び出すときに引数を渡す


## はじめに

Unityで別のシーンを呼び出すときに引数を渡したいと思うことがある。
Application.LoadLevelに引数を渡せればそれでいいのだが、どうもそんな方法は無さそうだ。
しょうがないので、適当にでっちあげてみた。

```csharp:GlobalObject.cs
using UnityEngine;
using System.Collections;

public class GlobalObject : MonoBehaviour
{
	private static GlobalObject sharedInstance = null;
	private string mStringParam = null;
	private object mParam = null;
	private object[] mParams = null;

	public string StringParam {
		get {
			return mStringParam;
		}
	}

	public object Param {
		get {
			return mParam;
		}
	}

	public object[] Params {
		get {
			return mParams;
		}
	}

	public static GlobalObject getInstance ()
	{
		return sharedInstance;
	}

	public static void LoadLevelWithString (string levelName, string stringParam)
	{
		getInstance().mStringParam = stringParam;
		Application.LoadLevel(levelName);
	}

	public static void LoadLevelWithObject (string levelName, object theParam)
	{
		getInstance().mParam = theParam;
		Application.LoadLevel(levelName);
	}

	public static void LoadLevelWithParams (string levelName, params object[] theParams)
	{
		getInstance().mParams = theParams;
		Application.LoadLevel(levelName);
	}

	public void Awake ()
	{
		if (sharedInstance == null) {
			Debug.Log("Awake GlobalObject");

			sharedInstance = this;
			DontDestroyOnLoad(gameObject);
		}

		Debug.Log ("StringParam = " + getInstance().StringParam);
	}
}
```

個人的にはstringを渡せればそれで良かったのだが、objectや可変長引数を渡したくなるかもしれないので一応その辺にも対応してみた（つもり）。

## 使い方（呼び出し側）

・呼び出し側のシーンで、メニューから"Game Object"->"Create Empty"で空のオブジェクトを作って、そこに上記のGlobalObjectコンポーネントをAddしておく。
・呼び出される側のシーンでも同様にGlobalObjectを空のオブジェクトにAddする。

あとは、呼び出し側のシーンから

```csharp:文字列を渡す
GlobalObject.LoadLevelWithString("NextScene", "foo");
```

という感じでシーンを切り替える。
（"NextScene"が呼び出される側のシーンの名前。"foo"が渡したい引数。）

また、文字列以外を渡したい時、可変長引数を渡したいときにはそれぞれ、

```csharp:引数１個のとき
GlobalObject.LoadLevelWithParam("NextScene", anyObject);
```

```csharp:複数の引数を渡したいとき
GlobalObject.LoadLevelWithParams("NexeScene", param1, param2, param3);
```

のように呼び出す。


## 使い方（呼び出される側）

呼び出されたシーンで渡された引数を使いたいときには、引数を使いたいスクリプトのなかで以下のようにして値を取得する。

```csharp:文字列引数を受け取る
string arg = GlobalObject.getInstance().StringParam;
```

文字列以外を受け取りたいときにはGlobalObject.getInstance().Param
可変長引数を受け取るときにはGlobalObject.getInstance().Params
を同様に使う。
プログラミングを最短で始める方法

ターミナルエミュレータさえあれば5分でプログラミング始められるよ♪ってお話.

- (1) テキストエディタ(geditとか)を開く
- (2) 下記のコードを書く

```bash
notify-send 'Hello, world!'
```

- (3) このファイルを名前を付けて保存で `~/a.sh` とかで保存する
- (4) ターミナルで下記コマンドを実行する

```bash
sudo apt-get install libnotify-bin
bash ~/a.sh
```

- (5) "Hello, world!" と出たら君もプログラマの仲間入りだ!!

参考にしました http://qiita.com/phi/items/b1c264f0bd8a5cc9033b
Ruby で書かれた IronMQ のワーカーをローカルでも動くようにする

Ruby で書かれた IronMQ のワーカーは `params` メソッドでペイロードをアクセスできるようになっている：

```rb:sample1_worker.rb
puts params['key']
```

```bash:ワーカーを実行
iron_worker queue sample1 --payload '{"key": "value"}'
# => value
```

`params` メソッドは IronMQ がホストする実行環境で動的に定義されるため、ローカルでワーカーを実行すると未定義エラーになる。

ワーカーをローカルでも動くようにするには、 `params` メソッドを自前で動的に定義してやるとよい：

```rb:sample2_worker.rb
require 'json'

unless defined?(params)
  abort "Usage: sample2_worker.rb <payload_json>" if ARGV.empty?
  param_obj = JSON.parse(ARGV[0])
  send :define_method, :params, -> { param_obj }
end

puts params['key']
```

```bash:ワーカーをローカルで実行
ruby sample2_worker.rb '{"key": "value"}'
# => value
```

```bash:ワーカーを実行
iron_worker queue sample2 --payload '{"key": "value"}'
# => value
```

ちなみに、 `params` をメソッドではなく変数として定義すると、ローカルでは動くが IronMQ の環境で実行できなくなる：

```rb:sample3_worker.rb
require 'json'

unless defined?(params)
  abort "Usage: sample2_worker.rb <payload_json>" if ARGV.empty?
  param_obj = JSON.parse(ARGV[0])
  params = param_obj
end

puts params['key']
```

```bash:ワーカーをローカルで実行
ruby sample3_worker.rb '{"key": "value"}'
# => value
```

```bash:ワーカーを実行
iron_worker queue sample3 --payload '{"key": "value"}'
# => params が nil になってエラー
```

これは Ruby の言語仕様による。条件分岐の中で変数を定義すると、その条件分岐を通らない場合には値が nil の変数として定義される。よって `params` メソッドが定義されていれば上記の unless を通らず、値が nil の `params` 変数が定義されてメソッドが上書きされる。
Pencilでアプリの画面遷移図をつくってみる


アプリの画面遷移図を書きたいとき、
いつもは手で書くのですが、実際の電子データにするときに写真で撮って貼付けると微妙だったので、いくつかツールを使ってみることにしました。

今回はPencilというアプリを使ってみます。
http://pencil.evolus.vn/

(ちなみに今回はMac版ですが、Windows版やLinux版もあります。)

 起動したら以下の画面が出ます。

![Pencil1.png](https://qiita-image-store.s3.amazonaws.com/0/4044/64fbedb0-85b6-dd71-5aa2-19875d4ab20d.png "Pencil1.png")

左にCollectionsでパーツがたくさんあります。
これをドラッグ&ドロップで配置していくだけで、簡単にアプリの画面がつくれそうです。
試しにiPhoneの画面にタイトルパネルを重ねて見ました。

![Pencil2.png](https://qiita-image-store.s3.amazonaws.com/0/4044/96aada9c-6d9e-2141-271c-f74b071940cd.png "Pencil2.png")

いい感じ。

矢印とかもつかえるので、画面遷移図を書くのにもいけそうです。
ボタンタップしたら次の画面に遷移するというのも書いてみました。
ちなみにBitmap Imageというのを使ってみたんですが、"No Image"と表示されました。ここの実際の画像の挿入方法はわかりませんでした。

![pencil3.png](https://qiita-image-store.s3.amazonaws.com/0/4044/f1e98592-5531-9720-2de3-d5b7c5cac5bd.png "pencil3.png")


ちょとわかりにくいので、バルーンで補足説明入れました。

![pencil4.png](https://qiita-image-store.s3.amazonaws.com/0/4044/405788d7-91e7-9c01-0146-12a6d5dc0d95.png "pencil4.png")


Androidのパーツはありました。(ICSとなってましたが、要はHoloテーマってことですね。)

![Pencil5.png](https://qiita-image-store.s3.amazonaws.com/0/4044/c9b60eeb-068e-dba2-0c55-2a46bee44d96.png "Pencil5.png")


Webの要素も用意されていますので、Webのワイヤーフレーム制作にも使えそうです。
iOSのパーツはちょっと古くてフラットデザインではありませんでした。


パーツはOpenClipartで探して、それをつかうこともできるようです。
http://openclipart.org/

欠点としては、自分で作った画像が挿入できないところです。
Galleryとかのパーツがないので、Galleryのスクリーンショットを撮って挿入しようとしてもできませんでした。

まあちゃんとしたビジュアルデザインは別で画面遷移図を書くには使えそうです。
もうちょっと使ってみて何か発見したら書き足します。
Sublime TextをTerminalから起動できるようにする El Capitan対応

![スクリーンショット 2014-07-04 09.50.34.png](https://qiita-image-store.s3.amazonaws.com/0/27500/974dd372-5942-b89f-5587-6b99f3ac726e.png)

## PATHが通っているディレクトリにsublime textのバイナリのシンボリックリンクを貼る
```bush:Terminal
$ sudo ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/bin/subl
```
> `Sublime Text.app`の部分は`Sublime Text 2.app`だったり`Sublime Text 3.app`だったりします。Applicationsフォルダを確認してください。

### `ln: /usr/bin/subl: Operation not permitted`みたいなのが出たら
`El Capitan`からRootlessという機能が備わって、システムに大きな影響を与えてしまいそうな操作はできなくなりました。例えば`/usr`などにはファイルやディレクトリを任意に作成・削除できません。
`/usr/local/bin/`には作成できるのでこちらに作成しましょう。

```bush:Terminal
$ sudo ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl
```


```bush:Terminal_Sublime_textの起動
$ subl
```
```bush:Terminal_Sublime_textをファイルを指定して起動
$ subl title
```
```bush:Terminal_Sublime_textをカレントディレクトリをTREEリストとともに起動
$ subl .
```
[手記] Xcodeで.frameworkを作成する方法


.framework作成する上で参考になったサイト

[[iOS][Objective-C][Xcode 4.6.3] そうだFramework(.framework)を作ってみよう](http://www.inazumatv.com/contents/archives/8999 "Inazumatv.com
")

実際に使ったshell
上記のサイトに出てたshellだとちょっと無駄なところがあったので、手直しした

```shell
# ==========
# 変数設定
echo "[0] prepare ${INFOPLIST}"
# ==========

INFOPLIST='Info.plist'
FRAMEWORK_NAME=$(/usr/libexec/PlistBuddy -c "Print CFBundleName" ${INFOPLIST})
BUILD_TARGET_NAME=$FRAMEWORK_NAME
FRAMEWORK_BUILD_CONFIGURATION="Release"
FRAMEWORK_VERSION_NUMBER=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${INFOPLIST})
FRAMEWORK_VERSION=A
FRAMEWORK_BUILD_PATH="Framework"
FRAMEWORK_DIR="${FRAMEWORK_BUILD_PATH}/${FRAMEWORK_NAME}.framework"

# ==========
# ビルド
echo "[1] build 1"
# ==========
xcodebuild -configuration ${FRAMEWORK_BUILD_CONFIGURATION} -target ${BUILD_TARGET_NAME} clean
xcodebuild -configuration ${FRAMEWORK_BUILD_CONFIGURATION} -target ${BUILD_TARGET_NAME} -sdk iphonesimulator${IPHONEOS_DEPLOYMENT_TARGET}
[ $? != 0 ] && exit 1
echo "[1] build 2"
xcodebuild -configuration ${FRAMEWORK_BUILD_CONFIGURATION} -target ${BUILD_TARGET_NAME} -sdk iphoneos${IPHONEOS_DEPLOYMENT_TARGET}
[ $? != 0 ] && exit 1

# ==========
# frameworkディレクトリ作成
echo "[2] mkdir framework"
# ==========

[ -d "${FRAMEWORK_BUILD_PATH}" ] && rm -rf "${FRAMEWORK_BUILD_PATH}"
mkdir -p ${FRAMEWORK_DIR}
mkdir -p ${FRAMEWORK_DIR}/Versions
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}/Resources
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}/Headers
ln -s ${FRAMEWORK_VERSION} ${FRAMEWORK_DIR}/Versions/Current
ln -s Versions/Current/Headers ${FRAMEWORK_DIR}/Headers
ln -s Versions/Current/Resources ${FRAMEWORK_DIR}/Resources
ln -s Versions/Current/${FRAMEWORK_NAME} ${FRAMEWORK_DIR}/${FRAMEWORK_NAME}

# ==========
# framework作成
echo "[3] lipo framework"
# ==========
lipo -create \
build/${FRAMEWORK_BUILD_CONFIGURATION}-iphoneos/lib${FRAMEWORK_NAME}.a \
build/${FRAMEWORK_BUILD_CONFIGURATION}-iphonesimulator/lib${FRAMEWORK_NAME}.a \
-o "${FRAMEWORK_DIR}/Versions/Current/${FRAMEWORK_NAME}"

echo "[4] Framework: Copying assets into current version..."
cp -r Headers/* ${FRAMEWORK_DIR}/Headers/
cp ${INFOPLIST} ${FRAMEWORK_DIR}/Resources/Info.plist
              
rm -rf build
```
Slackのべんりな使い方


社内のコミュニケーションツールを正式にSlackに移行したので、普段使っていて便利な使い方まとめてみます。
Bot連携などはまた別の箇所で。

## Rightビュー
Slack右画面で `Star` とか `Activity Feed` とか色々なビューが開けます。
![kobito.1404365194.935482.png](https://qiita-image-store.s3.amazonaws.com/0/20074/7bd9ce93-bf74-fcef-5886-ee8b2476f1d8.png "kobito.1404365194.935482.png")

特に好みがなければ、@Recent Mentionsを開いておくと便利です。
Mention(自分に宛てたTo通知)が一覧で見れます。

![kobito.1404365272.390133.png](https://qiita-image-store.s3.amazonaws.com/0/20074/1951577b-7c0d-d21c-8f8e-3ec907fd9c88.png "kobito.1404365272.390133.png")

ちなみに以下のショートカットでも開けます。

```
右メニュー表示/非表示トグル→⌘+.
右メニューにStar一覧を表示→⌘+Shift+s
右メニューに自分宛のMention一覧を表示→⌘+Shift+m
```

## チャンネルを移動する

### チャンネルを上下に移動
```
チャンネルを上に移動→ ⌥+↑ (or Alt+↑)
チャンネルを下に移動→ ⌥+↓ (or Alt+↓)
```

現在カーソルがあるチャンネルから上下に移動できます。
![kobito.1404365467.817722.png](https://qiita-image-store.s3.amazonaws.com/0/20074/1e16d8fb-955e-a9f9-7939-aee4272d80e7.png "kobito.1404365467.817722.png")

### 上下の未読チャンネルに移動
```
上の未読チャンネルに移動→⌥+Shift+↑ (or Alt+Shift+↑)
下の未読チャンネルに移動→⌥+Shift+↓ (or Alt+Shift+↓)
```
上のチャンネル移動の賢い版です。明示的に「未読チャンネル」のみに移動できます。超便利。

### 1つ前にいたチャンネルに移動
```
1つ前にいたチャンネルに戻る→⌘+[ (or Ctrl+[)
チャンネルを戻った後に、1つ後に進む→⌘+] (or Ctrl+])
```
これはちょっと動きがややこしいです。
A→B→Cとチャンネル移動したときに⌘+[を押すとBの部屋に戻れます。
また、そのBにいるときに⌘+]を押すとCの部屋に移動できます。

これは上の `未読チャンネルに移動` と組み合わせて、 **未読のチャンネルに移動した後にやっぱ今いたチャンネルに戻る** みたいな時に使うと便利です！

### 部屋を絞り込んで移動する
⌘+t(or ⌘+k)を押すとポップアップ窓が出てくるので、ここでチャンネルを絞り込んで移動できます。
「あれ？あの部屋の名前なんだっけ。○○って名前付いてたはずだけど・・・」みたいな状態からの絞り込みとか、
「特定の人にダイレクトメッセージ送りたいけどカーソル移動して名前探すの面倒」なときとか役立ちます。

![gif](http://gifzo.net/7SxO7Cgnjt.gif)

## Google Driveのファイル連携
Google DriveとSlackを連携しておくと、 **Google DriveのファイルURLをSlackに貼り付けた際にSlack上にファイルとして持つ（検索対象になる）** ようになります。
スプレッドシートなどを頻繁に触る方は設定しておくと、Slack内から検索できたり直にファイルが開けたりしてとても幸せになれます。

### 設定
IntegrationのGoogle Driveから以下のリンクを押下
![kobito.1404365678.907828.png](https://qiita-image-store.s3.amazonaws.com/0/20074/693fa2be-2b25-2bee-63b6-1d48927fa385.png "kobito.1404365678.907828.png")

### 動作
Slackのチャンネル内にGoogle Drive上のファイルリンクを貼り付けると以下のような形になります。
![kobito.1403255289.798181.png](https://qiita-image-store.s3.amazonaws.com/222/20074/32cb0f3b-ed45-0029-c6ef-35a05820556e.png "kobito.1403255289.798181.png")

Slack内からファイルを紐付けた状態になるので管理が楽になり、編集の際には直にスプレッドシート側でファイルが開けます。

![kobito.1403255341.186687.png](https://qiita-image-store.s3.amazonaws.com/222/20074/dd61c743-cb8a-8f74-c0e4-adb12647aa09.png "kobito.1403255341.186687.png")


## 余談
乗り換えて全体的に快適なので概ね満足してたりします。なによりエンジニアライクなのがいい。Hubotも楽に載せれるし。

~~唯一不満点は、Bot(API)経由の発言をHubotが検知できないこと。
CircleCI経由の「Test Failedを検知→Hubotでなんらかの処理」みたいなことが通常のIntegrationだと出来ないのが難点。~~

~~サポートに聞いてみたら「Hubot-Slackアダプタの代わりにHubot-IRCアダプタを使って、Slack IRC側でメッセージをハンドリングして処理してね☆」みたいに言われた。でもサポート曰く年内にBot2Botの対応はしてくれるとのこと。~~

~~ちなみにうちの場合は一旦HipChatにBotの発言を流して、そっちのHubotでメッセージを受け取ってSlackに流してたり。嗚呼バッドプラクティス＼(^o^)／~~

2015-09-07追記: 
Slack-Hubotのver3以降はBot間の連携はこんな方法で出来るようになっています。
[Slack+Hubotで複数Bot間のパイプラインを構築](http://qiita.com/Vexus2/items/c19422bc3746b851eff9)
Arrayにある見えない配列

## 結論

先に結論を書いておくと、以下で言われてることと同じ内容だった。

 * [Ruby(1.8.7〜1.9.0)の配列の末尾には見えない要素があるらしい。](http://code.kzakza.com/2011/09/ruby1-8-7-array-slice/)

忘れそうなのでメモとして残しておく。

## 発端

予め定義された配列を部分的に扱うために、Arrayを継承したHogeクラスを作成しようとした。
具体的には、

 * Hogeクラスは予め定義された配列を持っている
 * newすると予め定義された配列の部分配列を返す
 * newするときにoptionとして、afterとlimitを渡せる
  * after : 予め定義された配列の先頭要素
  * limit : 返す部分配列の要素数
 * nextで次の部分配列をlimit分返してくれる

## 作ったクラス

ざっと以下のような感じ。

```rb
class Hoge < Array
  ATOE = ["a", "b", "c"]
  DEFAULT_LIMIT = 3 
  DEFAULT_AFTER = 0 

  def initialize(options={})
    limit = (options[:limit] && options[:limit] > 0) ? options[:limit] : DEFAULT_LIMIT
    after = (options[:after] && options[:after] > 0) ? options[:after] : DEFAULT_AFTER
    st = after
    ed = after + limit - 1 
    super(ATOE[st..ed])
    @limit = limit
    @after = after
  end 

  def next
    options = { limit: @limit, after: @after + @limit }
    Hoge.new(options)
  end 
end
```

## 見えない配列とnil

使ってみると不思議な現象に遭遇。

```rb
hoge = Hoge.new(limit: 1, after: 0)
hoge              #=> ["a"]
hoge = hoge.next  #=> ["b"]
hoge = hoge.next  #=> ["c"]
hoge = hoge.next  #=> []
hoge = hoge.next  #=> `initialize': no implicit conversion from nil to integer (TypeError)
```

エラーはArray.new(nil)したらしい・・・。
しかしその前の空配列は何・・・？

Arrayで確認。ふぉー。

```rb
ary = []
ary[0..0]  #=> [] 
ary[1..1]  #=> nil 
ary[0..1]  #=> []
ary[1..2]  #=> nil

ary = ["a"]
ary[1..1]  #=> [] 
ary[2..2]  #=> nil 
ary[1..2]  #=> []
ary[2..3]  #=> nil

```

ggってみたところ、記事先頭のリンク先のように、謎の要素があるらしい。
なので、

```rb
super(ATOE[st..ed]||[])
```
にして解決。

ちなみに、[]はsliceの別名メソッドなので、slice使った場合も同様。
検索フォーム

検索用のフォームを作りました。
データベースはすでにあるものとして行っていきます。
はじめにシステムのsearch.phpです。

```php:search.php
<?php
$dsn="mysql:dbname=dbname;host=localhost;charset=utf8";
$user="root";
$pass="root";
try{
  $pdo=new PDO($dsn,$user,$pass);
}catch(Exception $e){
  echo 'error' .$e->getMesseage;
  die();
}
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
//検索フォームから受け取った文字列を$formに格納しています。
$form=strip_tags($_GET['search']);
//実際にデータベースに検索をかけています。
//今回はフォームに入力された値があるものを表示させたいので%$form%を使っています。
//titleやcontentは自分のデータベースのフィールド名にしてください。
$sql="SELECT * FROM post WHERE title OR content LIKE '%$form%'";
$stmt=$pdo->query($sql);
$search=$stmt->fetchAll();
require 'search_view.php';
?>
```

次に表示させるviewの部分です。

```php:search_view.php
//foreach文であるだけ繰り返します。
//$searchをここでは$postに置き換えています。
<?php foreach ($search as $post) :?>
<div class="post">
  //実際にデータベースからちtitleとcontentとcategoryとtimeを表示指定ます。
  <h2><?php echo $post['title'] ?></h2>
  <p><?php echo $post['content'] ?></p>
  <p>カテゴリー:<?php echo $post['category'] ?></p>
  <p>投稿日：<?php echo $post['time'] ?></p>
  <p class="commment_link">
  <a href="comment.php?no=<?php echo $post['no'] ?>">コメント</a>
  </p>
</div>
<?php endforeach; ?>
```

これは僕の自作のブログの検索フォームのviewの部分です。
いずれ自作のブログの方も載せたいと思います。
やっぱり検索フォームは必要だよね。
cocos2d-xの勉強を始めたのでメモがてら書く

##01画面大きさと原点

```cpp
// 画面の幅を取得
Size visibleSize = Director::getInstance()->getVisibleSize();
// 原点を取得
Point origin = Director::getInstance()->getVisibleOrigin();
```
最初作ったら勝手に出来るけども今後座標の指定の時にこの変数を使ったりするので一応
##02Sprite表示
画像を表示する。

```cpp
//Spriteクラスを初期化
Sprite *sprite = Sprite::create("sample.png");
//座標を指定
sprite->setPosition(Point(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y));
//レイヤーに追加
this->addChild(sprite);
```
##03文字表示
文字を表示する。

```cpp
//Labelクラスの初期化
Label *label = Label::create("文字列だよ", "Arial", 24);
//座標を指定
label->setPosition(Point(tyuuou.width + visibleSize.width / 2,
                         tyuuou.height + visibleSize.height - label->getContentSize().height));
//文字列を作る
String *str = String::createWithFormat("Score : %d", score);
//作ったもし列をLabelに設定
label->setString(str->getCString());
//シーンに追加
this->addChild(label);
```
##04クリック
タッチとクリックは同じ事。

```cpp
// イベント
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);// クリックした
listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);// ドラッグしている
listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);// クリックを離した

auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->addEventListenerWithSceneGraphPriority(listener, this);
```
##05Sprite動かす
表示したSpriteをクリックした座標に動かす方法。

```cpp
//onTouchBeganの中で
//タッチした座標を取得
Point location = touch->getLocation();
//アクションを止める
sprite->stopActionByTag(1);
//動きの設定
MoveTo* move = MoveTo::create(10.0f, Point(100, 100));  //引数は目的座標に到達するまでの時間と目的座標
//アクションを止める時ようにタグに設定
move->setTag(1);  //この『1』がstopActionByTag(1)の『1』になる
//アクションの開始
sprite->runAction(move);
```
##06ゲームループ
ゲームループ用の毎フレーム実行される部分。
中で使用する変数などは.hに書くかタグを使う

```cpp
//init()の中で
this->scheduleUpdate();

//新たな関数:update(float delta)を.hと.cppに書き込む
//.h
void update(float delta);
//.cpp
void HelloWorld::update(float delta) {
  //更新処理
}
```
##07衝突判定
cocos2d-xにはあたり判定が２通りある
①点と矩形(PointとRect)

```cpp
Point point = touch->getLocation(); //クリック座標
Rect  rect; = sprite->boundingBox(); //画像の大きさの矩形
 
if(rect.containsPoint(point)){
//当たった(true)場合の処理
}
```
②矩形と矩形(RectとRect)

```cpp
Rect rect  = sprite->boundingBox();  //画像の大きさの矩形
Rect rect2 = sprite2->boundingBox();  //画像2の大きさの矩形

if(rect.intersectsRect(rect2){
//当たった(true)場合の処理
}
```
##08タグ
自分の印象だとJavaのArrayListみたいな感覚？
『タグを設定する』『タグを調べる』『タグを指定して呼び出す』の３つの事ができる。
①タグを設定する

```cpp
sprite->setTag(1);  //spriteに『1』と言うタグを設定する
```
②タグを調べる

```cpp
int tag = sprite->getTag();  //spriteにはどの様なタグが設定されているか調べる
```
③タグを指定して呼び出す

```cpp
auto sprite = this->getChildByTag(1);  //タグが『1』と設定してあるデータを呼び出す
```
[Ruby] NokogiriとFaradayで3行RSSパース

3行は大げさですが、ボイラープレート抜かせばそのぐらいです。
広告以外の記事の題名だけ表示します。

```rb:Gemfile
source "https://rubygems.org"

gem 'nokogiri'
gem 'faraday'
```

```rb:main.rb
#!/usr/bin/env ruby

require 'nokogiri'
require 'faraday'

Nokogiri::XML(Faraday.get(ARGV[0]).body).xpath('//xmlns:item//xmlns:title').each do |node|
  puts node.text unless /^PR:/.match(node.text)
end
```

```console
C:\work\rss-parser\> bundle exec ruby main.rb http://rss.rssad.jp/rss/slashdot/slashdot.rss
DL is deprecated, please use Fiddle
「盗撮ができる運動靴」販売者が逮捕される
スティーブ・ウォズニアク、スマートウォッチについて語る
地球の気候変動に対し懐疑的なスウェーデンの農家
iPS細胞の臨床研究中止へ？ STAP騒動の余波
次々に登場する新しいプログラミング言語、どうなの？
Windows 9ではスタート画面が廃止される？
無料ダイナミックDNSサービス「No-IP」のドメイン、Microsoftに差し押さえられる
米フォード、車載顔認識システムの研究を進める
「著作権特区」なる謎のアイデアが提案される
ぴあがチケット転売対策として独自の転売サービスを開始
```

参考

* https://github.com/lostisland/faraday
* http://nokogiri.org/tutorials/searching_a_xml_html_document.html
swiftを使ってみた（2）

# はじめに

比較学習のためにこういうアプリを作ってみます。
プロパティとアクションが含まれた基本機能を確認出来る最小限のアプリのつもりです。

![00_goal-image.png](https://qiita-image-store.s3.amazonaws.com/0/44076/ede5bfbe-e9f4-262f-4c00-6bdafc9bcda7.png)

# 画面のデザイン

基本的に今までのデザイナと変わりませんが、デザイナの表示サイズがデバイス依存ではなくなっています。
デバイス依存等は、レイアウト設定で対応してください、ということでしょう。
深くは追求せず、今まで通りラベルとボタンを設定します。

# 画面のデザインとソースとの関連づけ

ここも今までと全く同じでした。
各コントローラーをクリックしてからCtrl+ドラッグで、ソースにドロップすることでプロパティとアクションが設定できます。

# swiftでの実装

すべて実装したコードはこちら（swiftファイル）。
javaのように1つのファイルですべて表現されています。

``` swift:ViewController.swift
import UIKit

class ViewController: UIViewController {
	
	@IBOutlet var label_Hello : UILabel
	
	override func viewDidLoad() {
		super.viewDidLoad()
		// Do any additional setup after loading the view, typically from a nib.
	}
	
	override func didReceiveMemoryWaring() {
		super.func didReceiveMemoryWaring()
		// Dispose of any resources that can be recreated.
	}
	
	@IBAction func pushButton(sender : AnyObject) {
		label_Hello.text = "Hello"
	}
}
```

# Objective-Cでの実装

すべて実装したコードはこちら（h＆mファイル）
全く同じ内容です。

``` objective-c:ViewController.h
#import <UIKit/UIKit.h>

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UILabel *label_Hello;


@end
```
``` objective-c:ViewController.m
#import "ViewController.h"

@interface ViewController ()

@end


@implementation ViewController
	
- (void)viewDidLoad {
	[super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWaring {
	[super didReceiveMemoryWaring];
	// Dispose of any resources that can be recreated.
}

- (IBAction)pushButton:(id)sender {
	self.label_Hello.text = "Hello";
}

@end
```

# swift と Objective-Cでの相違点

どちらも実装しての相違点を挙げてみると、、、

* メソッドの処理が「[インスタンス メソッド] 」ではなくなった
    * これの意味が全く分からなくなってやめた人も多いと思います。。。
* クラスの宣言、範囲指定が「{ }」になった
    * 「@interface ～ @end」ではなくなった
    * 実際、「@interface ～ @end」がhファイルやmファイルに何か所もあって戸惑ってた人も居たと思います。。。
* hファイルが不要（swiftファイルのみで表現）
* 行の区切りに「;」 が不要

かなりjavascript風にわかりやすい表現になったので使いやすくなったと思います。
Sinatra::Reloader がファイルをリロードするタイミングにフックする

なんでこんなことをやりたかったか忘れたが書いたのでメモっておく。

```ruby:app.rb
require 'sinatra'
require 'sinatra/reloader' if development?

module Sinatra
  module Reloader
    module WatcherExt
      def updated
        updated_files = super
        do_something unless updated_files.empty?
        updated_files
      end

      def do_something
        # Do whatever you want.
      end
    end
  end
end

if Sinatra::Reloader::const_defined?('Watcher')
  klass = Sinatra::Reloader::const_get('Watcher')
  klass.prepend(Sinatra::Reloader::WatcherExt)
end

get '/' do
  ...
end
```
Apache + Windows + PHP

# download

* [apache][]
* [php][] (ThreadSafe を選択する)

[php]: http://windows.php.net/download/
[apache]: http://www.apachelounge.com/download/


# インストール
※ zip 解凍して適宜 コピー(or 移動)

#### 例
|PROGRAM|INSTALL DIR|以下別称|
|------:|:------|:-------|
| apache|%PROGRAM_FILES%\Apache\httpd 2.4.9| HTTPD_HOME |
| php   |%PROGRAM_FILES%\PHP\5.5.14| PHP_HOME |


### httpd.conf の設定を変更する

* ServerRoot <small>```$HTTPD_HOME```</small>
* DocumentRoot <small>```$HTTPD_HOME/htdocs```</small>
* Directory <small>```$HTTPD_HOME\htdocs```</small>
* Directory <small>```$HTTPD_HOME\cgi-bin```</small>
* ScriptAlias <small>```/cgi-bin $HTTPD_HOME\cgi-bin```</small>


### httpd.conf の設定を追加する （別ファイルで Include する )

* LoadModule <small>```php5_module $PHP_HOME\php5apache2_4.dll```</small>
* PHPIniDir <small>```$PHP_HOME```</small>
* AddType <small>```application/x-httpd-php .php```</small>

### php.ini の編集


```ini:自動判定してくれませんｗ
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
; extension_dir = "ext"
extension_dir = "ext"
```
プログラミングを最短で始める方法

パソコンさえあれば5分でプログラミング始められるよ♪ってお話.


- (1) テキストエディタ(メモ帳とか)を開く
- (2) 下記のコードを書く

```html
<script>
alert("Hello, world!");
</script>
```

- (3) このファイルを名前を付けて保存で `index.html` とかで保存する
- (4) このファイルをダブルクリックとかで開く
- (5) "Hello, world!" と出たら君もプログラマの仲間入りだ!!
sqlite3をactiverecordから使ってみる

## 背景
某ツールでユーザ操作に簡易DBを使いたかったのでsqlite3を使ってることにした。
普段はrailsを触る機会が多いので、active_recordから使ってみた。
メモがてら投稿。

## インストール

```bash
$ cat Gemfile
source "https://rubygems.org"

gem 'sqlite3'
gem 'activerecord'

$ bundle install
```

## 使い方

```rb:test_sqlite3_by_activerecord.rb
ADAPTER = 'sqlite3'
DBFILE  = 'test.sqlite3'

# DB接続
ActiveRecord::Base.establish_connection(adapter: ADAPTER, database: DBFILE)

# テーブル作成
ActiveRecord::Migration.create_table :users do |t|
  t.string  :name
  t.string  :email
  t.timestamp :created_at, :null => false
end

# Userモデル
class User < ActiveRecord::Base; end

# User操作
user = User.new
user.name  = "testuser"
user.email = "test@example.com"
user.save
User.all.count  #=> 1
user = User.all.first
user.destroy
User.all.count  #=> 0

# テーブル削除
ActiveRecord::Migration.drop_table :users

# DB削除 (ファイル削除)
File.delete(DBFILE)

# DB切断
ActiveRecord::Base.connection.disconnect!
```

実行結果

```bash
$ ruby test_sqlite3_by_activerecord.rb
-- create_table(:users)
   -> 0.2466s
-- drop_table(:users)
   -> 0.1665s
```
Wordpressで元のクエリ配列を引数配列にする

元のクエリ配列を引数配列に統合することもできます。 
複数のカスタムフィールドを条件にするときに役に立ちます。

`
$search_plan_array=array('key'=>' プラン',
			'value'=> $_REQUEST["works_search_plan"],
			'compare'=>'IN'
			);
$search_type_array=array('key'=>' 業種',
			'value'=> $_REQUEST["works_search_type"],
			'compare'=>'IN'
			);
$search_condition_array['meta_query']=array($search_plan_array,$search_type_array);
global $wp_query;
$args = array_merge( $wp_query->query, $search_condition_array);
query_posts( $args );
`
oh-my-zsh の環境で、peco-select-history が動かない


Pecoを導入してzshのhistoryに使うようにした
http://blog.kenjiskywalker.org/blog/2014/06/12/peco/

こちらの記事などで紹介されている peco-select-history が、
oh-my-zsh を使っている環境下だと動かなかった。

原因は、history -n 1 の部分で、以下のようなエラーが出るため。

```bash
$ history -n 1
fc: event not found: -n
```

oh-my-zsh の設定で history コマンドが fc コマンドに alias 設定されているらしい。
https://github.com/robbyrussell/oh-my-zsh/issues/739


以下のように、historyの前にバックスラッシュを追記した。
(@syohexさんと@hisaichi5518さんにこの方法を教えていただきました。ありがとうございます！)

```vim:~/.zshrc
function peco-select-history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi
    BUFFER=$(\history -n 1 | \
        eval $tac | \
        peco --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history
```

これで、無事に peco-select-history が使用できるようになった。
pushdがなぜ混乱を招いているのか。

# 概要
pushdとpopdが地味に便利なんだけど、ちょいちょい使い方を微妙に間違えて「あれ？」ってなるのでメモ。なんかいつも違和感を持ちながら使っていたが、実際これ、混乱を招きやすいと思う。

# メモ
基本は、pushdをしたら指定した先にcdされる。このときのカレントディレクトリがpushされる。
```
$ pwd
/home/tarr
$ pushd /usr/local/
/usr/local ~
$ pwd
/usr/local
```

飛んだ先でcdとかをした後にpopdすると、pushdした時のdirectoryに飛ぶ。この時は`/home/tarr`
```
$ cd dev/leofs/
$ pwd
/usr/local/dev/leofs
$ popd
~
$ pwd
/home/tarr
```

いろいろとpushdしまくってみた。

```
$ cd 
$ pushd /usr/local/
/usr/local ~
$ cd erlang/
$ pushd /usr/local/dev/leofs/
/usr/local/dev/leofs /usr/local/erlang ~
$ pushd /usr/local/games/
/usr/local/games /usr/local/dev/leofs /usr/local/erlang ~
$ pushd /etc/
/etc /usr/local/games /usr/local/dev/leofs /usr/local/erlang ~
```

ここで気づいたんだけど、pushdした時に、pushされているdirectoryリストが表示されていて、その先頭に今回の移動先のdirectory名も表示されている。でも、実際はそのdirectoryはまだpushされていなくて、cdとかして他のdirectoryに移動すると、pushdが使われた時のcurrent directoryがpushされる。
結構連続してpushdをするようなシチュエーション（シェルスクリプトを書いているときの動作シミュレーションだとか）ではpushdで指定した先が、次のpushdでも指定されてそのままpushされるように見える。そして、pushdをしたタイミングの出力が現在stuckされているもののリストに見えてしまう。

# 結論
* pushdでpushされるのはcurrent directory
* pushdをした際の出力は現在pushされているものと、pushdしたものの引数となっているターゲットディレクトリ
* しかし、そのターゲットディレクトリはpushされていない。
* 上記が混乱を招いていた。

# 2014/07/03 16:15 追記
コメントで指摘されたのがきっかけで気づいたんだけど、出力結果は以下のようになっている。

```
$ pushd [target dir]
[current dir] [stack dir1] [stack dir2] [stack dir3]
```

こうなっているので、pushdをした結果、[target dir]が[current dir]と同じになっているので、[target dir]も出力されたようにみえる。これは、pushdでstackされている内容を表示するdirsコマンドで確かめられる。

```
$ cd /etc/
$ dirs
/etc ~ /usr/lib /usr/local/etc
$ cd /usr/local/erlang/
$ dirs
/usr/local/erlang ~ /usr/lib /usr/local/etc
```

僕の感覚だと、dirsが「pushdの中身を表示するコマンド」だったら、current directoryを同列で表示するのに違和感がある。たぶんそもそもdirectoryとは何かとか、current directoryとは何かとかを理解している人からしたら、見当外れなことを書いていると思う。きっと凄腕エンジニアが教えてくれると思う。

# 2014/07/03 16:30 追記
そうか、そもそもpushdは「current directoryをstackに保存」するものなのか。すべてがcurrent directoryということだと

```
$ pushd [next current dir]
[current dir] [current dir2] [current dir3] [current dir4]
```

こういうことなのか。当然stackの一番上で見えているcurrent dirは変わるということか
YouTube、動画の画質を指定して再生

YouTube、動画の画質を指定して再生
==========


■about
----------

YouTube、動画の画質を指定して再生
「vq」というパラメータを指定すると、任意の画質で再生する事が可能




■code
----------

```html:html
<iframe src="//www.youtube.com/embed/7DGAoeMXBWM?vq=highres"  width="560" height="315" frameborder="0" allowfullscreen></iframe>

```




■reference
----------

YouTube動画をブログ埋め込み時に使える便利なカスタマイズ方法！パラメーター14選まとめ[前編] | movieTIMES ムービータイムス
http://www.movie-times.tv/how-to/2697/
AngularJSの自動スクロールDirectiveを作ってみた（個人メモ）

#目的
##個人的な事情。
MEANS環境でのjavascript開発を始めたが、どうもクライアント側のWEB開発がまだまだだ。特にAngularJSでDirectiveを作ってみたいもののjQuery力が決定的に足りない。とりあえず何か作ってみる。
##なにをやるのか。
twitterのいわゆるTimelineのようなユルユルと自動スクロールするDirectiveがないようなので作ってみた。
（一番下まで手動でスクロールしたらサーバにデータを取りに行く、いわゆるLoadMoreのようなDirectiveは世の中にあるのですが、ユルユル型はありませんでした。簡単すぎるんでしょうね。）
#ソース
かなり紆余曲折があったものの最終的にできたモノは非常にシンプル。

```js:auto-scroll.js
'use strict';
angular.module('thinglue.directives', [])
//.directive('autoScroll', function($window){
.directive('autoScroll', function($window,$document){
  return function(scope){
    scope.$watch(function(){
angular.element($window).scrollTop($document[0].body.scrollHeight - angular.element($window)[0].innerHeight);
      //angular.element($window).scrollTop(angular.element($window).height());
    });
  };
});
```

#使い方（例）
・app/scripts/directives/配下に上記ソースを保存。
・app/views/index.htmlでソースをインクルード。
・app/scripts/app.jsで上記モジュール名（myApp.directives）を指定。（これを忘れていて少しハマりました。Chrome用のAngularプラグインでDependencyグラフに自分が作成したDirectiveが表示されていないので気が付きました。）
・app/views/partial/myapp.htmlで使用。

```html:myapp.html（抜粋）
<div auto-scroll >
  <ul ng-repeat='item in list'>
    <li >{{item.text}}</li>
  </ul>
<div>
```
・Controller側で一定時間間隔で$scope.listのArrayに要素をPushしたらユルユルと自動スクロールする画面ができました。

#感想
・結果的に非常にシンプルになりましたが、directiveの作り方やDOM内での現在のスクロール位置（angular.element(\$window)[0].body.pageYOffset）やウィンドウの高さ（\$document[0].body.scrollHeight ）を地道に調べたりしてなかなか勉強になりました。
・今回はクライアント側の実装のみです。サーバ側のtwitter streaming APIをたたく部分はすでにNodeJS/Expressで作成していますが、残りはクライアント⇔サーバ間の通信をどうするのか。COMET（long polling）方式にするかWebSocket方式にするのか、いずれにしてもStatefullな実装になるので異常系を含めて考えると悩ましいところです。
nfsのsnapshotでファイル単位の削除を考慮して、snapshotサイズの増減を追うスクリプト

# 概要
NFS snapshotなどを毎日とるとして、そのsnapshotのサイズを推定したいということがある。その際に、単純に毎日のdirectoryサイズをduして取れば良いじゃんと思うかもしれないが、実際はそう単純ではなく、snapshotの差分だと、削除されたファイルも計算に入れなければいけない。前日にsnapshotにあったファイルが削除されていてもsnapshot上にはサイズとして残っているからだ。
つまり、削除なども考慮したファイルの差分を出した上で、サイズの合計を計算する必要がある。

# Script

```bash
#!/bin/bash

BASE_DIR=/a/nfs/dir/
TARGET_DIR_NAMES=( productA productB productC )

LOG_DIR=/path/to/statistics_logger/log

TODAY=`date +%Y%m%d`
YESTERDAY=`date -d '1 day ago' +%Y%m%d`

n=${#TARGET_DIR_NAMES[@]}
i=0

while [ $i -lt $n ] ;
do
        TARGET_DIRS[$i]=${BASE_DIR}${TARGET_DIR_NAMES[$i]}
        i=$((i+1))
done


find ${TARGET_DIRS[@]} -type f -printf "%p %Tc %s\n" > $LOG_DIR/nfs_file_list.$TODAY

NEW_FILE_SIZE=`diff $LOG_DIR/nfs_file_list.{$YESTERDAY,$TODAY} | grep ">" | awk 'BEGIN {sum=0} {sum+=$NF} END {print sum}'`
DELETED_FILE_SIZE=`diff $LOG_DIR/nfs_file_list.{$YESTERDAY,$TODAY} | grep "<" | awk 'BEGIN {sum=0} {sum+=$NF} END {print sum}'`

echo "{ \"date\": $TODAY, \"new_file_size\": $NEW_FILE_SIZE, \"deleted_file_size\": $DELETED_FILE_SIZE }" >> $LOG_DIR/nfs_size.log
```

# 簡単な解説
ターゲットのディレクトリに対して、ファイルの一覧を取得する。その際に日付とサイズを出力するようにし、前日分とのdiffをとって、削除分や追加分のファイルサイズの合計を計算する。
crontabで仕掛ければ良いが、ログの出力先に毎日ファイルリストのテキストファイルが出力されるので注意。
mac ターミナルの「no-MacBook-Pro」を消す

アカウント名@コンピュータ名-no-MacBook-Pro.local」って長い。
ターミナル使う時にすげぇ邪魔。
なので短くしました。

「環境設定 - 共有」にあるコンピュータ名を変更すれば、変わります。

「.local」は消えないみたい^^;
Mac10.6.8のプレビューで複数のpsdをjpgに変換する

1. フォルダごとプレビューのアイコンの上にドラッグ＆ドロップ
2. Command + Aで全選択
3. サイドバーのファイルのアイコンの上で右クリック→コピーをフォルダに保存
4. フォーマットをjpgにして品質を指定し、保存したいところを選択し、選択を押す

※フォーマットは他にも色々あります。以下一覧

* GIF
* ICNS
* JPEG
* JPEG-2000
* Microsoft BMP
* Microsoft アイコン
* OpenEXR
* PDF
* Photoshop
* PNG
* TGA
* TIFF
GitHubのタブ幅は?ts=2で調整

デフォルトのタブ幅8スペにさよなら。
URL の末尾につけるだけでおｋ。

```
?ts=2
```


### サンプル
- https://github.com/Gottox/socket.io-java-client/blob/master/src/io/socket/SocketIO.java
- https://github.com/Gottox/socket.io-java-client/blob/master/src/io/socket/SocketIO.java?ts=2
DigitaloceanのCLIツール tugboat


# 概要
digitaloceanでのサーバを立ち上げるのに、webサイトを開くのが面倒なんでCLIで操作をできるツールが欲しかった。
 
> 
[vagrant-digitalocean](https://github.com/smdahlen/vagrant-digitalocean,"vagrant-digitalocean")を使用していたのですが、Linuxディストリビューションを切り替えたいときなどの際に、サイトをみて確認する必要ありが面倒だった。

# CLIツール tugboat
[tugboat](https://github.com/pearkes/tugboat)

# インストール
```
gem install tugboat 
```
> rubyは1.9以上

# digitaloceanのAPIキー
ここで確認できます。
[api_access](https://www.digitalocean.com/api_access)

# 環境構築
```
$ tugboat authorize
Note: You can get this information from digitalocean.com/api_access

Enter your client key:  https://cloud.digitalocean.com/api_accessの取得できるclient ID
Enter your API key: https://cloud.digitalocean.com/api_accessで取得できるAPI Key
Enter your SSH key path (optional, defaults to ~/.ssh/id_rsa): 
Enter your SSH user (optional, defaults to ログインユーザ名): 
Enter your SSH port number (optional, defaults to 22): 

To retrieve region, image, size and key ID's, you can use the corresponding tugboat command, such as `tugboat images`.
Defaults can be changed at any time in your ~/.tugboat configuration file.

Enter your default region ID (optional, defaults to 1 (New York)): 
Enter your default image ID (optional, defaults to 350076 (Ubuntu 13.04 x64)): 
Enter your default size ID (optional, defaults to 66 (512MB)): 
Enter your default ssh key ID (optional, defaults to none): 
Enter your default for private networking (optional, defaults to false): 
Enter your default for enabling backups (optional, defaults to false): 
```

とりあえずClient IDとAPI Keyを入力する

# 設定ファイル
```
$ cat  ~/.tugboat 

authentication:
  client_key: Client ID
  api_key: API Key
ssh:
  ssh_user: 作成するサーバにログインするためのユーザ名
  ssh_key_path: sshキーのパス
  ssh_port: '22'
defaults:
  region: '1' # tugboat regions 表示されたidを書く
  image: '350076' # tugboat images --global 表示されたidを書く
  size: '66' # tugboat sizeで表示されたidを書く 
  ssh_key: ''xxxxx' #tugboat keysで表示されたidを書く
  private_networking: 'false'
  backups_enabled: 'false'

```

各種コマンドについては
tugboat --helpやtugboat --help コマンド名で確認できます。
または[tugboat](https://github.com/pearkes/tugboat)で確認できます。

#  感想
便利
Could Yahoo Japan account login Yahoo US?

Recently, I build a website using Yahoo oauth, here is the oauth site: https://developer.yahoo.com/oauth/guide/about.html

After I finish the oauth, I succeed in logining Yahoo by using Yahoo US account.But I fail to login Yahoo by using Yahoo Japan account and Yahoo US told me "This ID is not yet taken. Are you trying to register for a new account?". Is anything wrong with oauth document?

Or what is the difference between Yahoo Japan oauth and Yahoo US oauth?Here is the following links:
http://developer.yahoo.co.jp/other/oauth/flow.html

https://developer.yahoo.com/oauth/guide/about.html

Could somebody help me out?
PHPの日付関数の注意点


PHPの日付関数について、1年前や1ヶ月前等の日付等を求める場合に、感覚的な日付計算とは違う動きをするので注意が必要です。

# うるう年の前の年の2/29を取得しようとした場合

## サンプルコード

```php
$a = date('Y-m-d', mktime(0, 0, 0, 2, 29, 2012));
echo '$a = ' . $a;

$b = date('Y-m-d', mktime(0, 0, 0, 2, 29, 2012-1)); // 1年前の同日を取得
echo '$b = ' . $b;
```

## 結果

```php
$a = 2012-02-29
$b = 2011-03-01
```

2/29の1年前なので、2/28が取得できそうな気がするが、実際は3/1が返却される。

# 31日終わりの月の1ヶ月前を取得しようとした場合

## サンプルコード

```php
$c = date('Y-m-d', mktime(0, 0, 0, 10, 31, 2011));
echo '$c = ' . $c;

$d = date('Y-m-d', mktime(0, 0, 0, 10-1, 31, 2011)); // 1ヶ月前の同日を取得
echo '$d = ' . $d;
```

## 結果

```php
$c = 2011-10-31
$d = 2011-10-01
```

10/31の1ヶ月前なので、9/30が取得できそうな気がするが、実際は10/1が返却される。

# 回避策

下記のように、取得したい月の翌月月初から-1日する事

## サンプルコード

```php
$e = date('Y-m-d', mktime(0, 0, 0, 10, 31, 2011));
echo '$e = ' . $e;

$f = date('Y-m-d', mktime(0, 0, 0, 10, 1-1, 2011));
echo '$f = ' . $f;
```

## 結果

```php
$e = 2011-10-31
$f = 2011-09-30
```

※今回はmktimeを用いましたが、strtotime等でも同様の問題が発生します。
クラスを別物に置き換える

## やりたいこと

某gem(この記事では例としてfb_graphを使用)を呼んだときにMockした別のモジュール・クラスを呼びたい。
もう少し言うと、

 * Mockをonにして、FbGraphを呼ぶとMock::FbGraphが呼ばれる
 * Mockをoffにして、FbGraphを呼ぶとFbGraphが呼ばれる

## gemのrequireとObjectクラスへの追加

fb_graphをrequireするとObjectクラスにFbGraphが追加されます。
FbGraph = Mock::FbGraphでFbGraphを置き換えれますが、単純にこれをするとwarningが出てしまいます。

```rb
Object.constants.include?(:FbGraph)    #=> false

require 'fb_graph'
Object.constants.include?(:FbGraph)    #=> true
FbGraph                                #=> FbGraph

module Mock; module FbGraph; end; end
FbGraph = Mock::FbGraph;               #=> warning: already initialized constant FbGraph

Object.constants.include?(:FbGraph)    #=> true
FbGraph                                #=> Mock::FbGraph
```

## requireで読み込んだgemをundefする

上記warning対策。
さらに、定数(FbGraph)の設定はconst_setを使うようにする。

```rb
require 'fb_graph'
Object.constants.include?(:FbGraph)    #=> true 
FbGraph                                #=> FbGraph

Object.send(:remove_const, :FbGraph)
Object.constants.include?(:FbGraph)    #=> false

module Mock; module FbGraph; end; end 
Object.const_set(:FbGraph, Mock::FbGraph)
Object.constants.include?(:FbGraph)    #=> true 
FbGraph                                #=> Mock::FbGraph
```

## Mockのon/offを作ってみる

以上を踏まえてMockにon/off機能を作ってみる

```rb
require 'fb_graph'

module Mock
  extend self

  def on
    if ::FbGraph != Mock::FbGraph
      Object.const_set(:SourceFbGraph, ::FbGraph)
      Object.send(:remove_const, :FbGraph) if Object.constants.include?(:FbGraph)
      Object.const_set(:FbGraph, Mock::FbGraph)
    end 
  end 

  def off 
    if ::FbGraph == Mock::FbGraph
      Object.send(:remove_const, :FbGraph) if Object.constants.include?(:FbGraph)
      Object.const_set(:FbGraph, ::SourceFbGraph)
      Object.send(:remove_const, :SourceFbGraph) if Object.constants.include?(:FbGraph)
    end 
  end 

  module FbGraph
  end 
end

p FbGraph  #=> FbGraph
Mock.on
p FbGraph  #=> Mock::FbGraph
Mock.off
p FbGraph  #=> FbGraph
```

## 参考
 * http://stackoverflow.com/questions/11503558/how-to-undefine-class-in-ruby
 * http://www.iwazer.com/~iwazawa/diary/2013/05/ruby-remove-defined-class.html
 * http://ref.xaio.jp/ruby/classes/module/const_set
ActionbarにprogressBarを表示する



## 始めに
ActionBarにProgressBarを簡単に表示する方法があったのでメモ


Google+とかのアプリで使われているあれを簡単につけることができる

![スクリーンショット 2014-07-03 10.11.52.png](https://qiita-image-store.s3.amazonaws.com/0/34831/e7efd948-d526-90e9-092d-65843d06dace.png "スクリーンショット 2014-07-03 10.11.52.png")



## 方法
OnCreateでViewをセットする前に```requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)```を呼び出す。
```setProgressBarIndeterminateVisibility(true);```で表示、非表示を取得できる。
Fragment内で使いたい場合はいつも通り```getActivity().setProgressBarIndeterminateVisibility(false);```とかすればOK
　　
　　


```java:OnCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    ... // set layout etc
```


参考サイト [stackoverflow](http://stackoverflow.com/questions/9157504/put-a-progressbar-on-actionbar)
個人的な SOM のやり方メモ

昔つくったやつ。`kohonen` だと code 情報の出し方に工夫がいる。

```r
library(kohonen)

out.som <- som(scale(data), grid=somgrid(3,3,"rect"), rlen=1000)
plot(out.som, type="changes")
plot(out.som, type="counts")

if(ncol(out.som$codes) > 14) {
  out.som$codes <- out.som$codes[, sort(names(rev(sort(apply(out.som$codes, 2, var)))[1:14]))]
} 
plot(out.som, type="code", palette.name=rainbow)

out.som$unit.classif
```

ちなみに、`unit.classif` の番号の付け方は下図みたいになるらしい。

![som314_order.png](https://qiita-image-store.s3.amazonaws.com/0/2570/95ae6d09-f498-3920-c3fa-bdaa21a6d420.png)
ActivityでViewを定義する


## はじめに
ViewPagerのタブを動的に生成したかったので、Activityの中でViewを動的に生成する必要があった。

## 方法
方法としてはcontextの取得、layoutinflatorの使用、xmlの指定でできる。


```java:
View tabView = this.getLayoutInflater().inflate(R.layout.child_item, null);

```

参考サイト [ MORI Soft](http://www.mori-soft.com/2008-08-15-01-36-37/smartphone/72-androidxmlview)
AndroidStudioでAPKのファイル名にバージョン番号などを入れる設定

Android Studio初心者です。

Release版のAPK生成時にファイル名を自動で付加したいので書いてみました。

```groovy:build.grade
...
    signingConfigs {
        myConfig
    }

    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt'
            signingConfig signingConfigs.myConfig
        }
    }

    applicationVariants.all { variant ->
        if (variant.buildType.name.equals("release")) {
            variant.outputs.each { output ->
                if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) {
                    def file = output.outputFile
                    def d = new java.text.SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())
                    def newName = "TwitPane_r${defaultConfig.versionCode}_v${defaultConfig.versionName}_${d}.apk"
                    output.outputFile = new File(file.parent, newName)
                }
            }
        }
    }

...

// load signing settings from gradle.properties
if (project.hasProperty('storeFile')) {
    android.signingConfigs.myConfig.storeFile = file(storeFile)
}
if (project.hasProperty('storePassword')) {
    android.signingConfigs.myConfig.storePassword = storePassword
}
if (project.hasProperty('keyAlias')) {
    android.signingConfigs.myConfig.keyAlias = keyAlias
}
if (project.hasProperty('keyPassword')) {
    android.signingConfigs.myConfig.keyPassword = keyPassword
}
```

```properties:gradle.properties
storeFile=example.keystore
storePassword=example
keyAlias=example
keyPassword=example
```

signingConfig のファイル分離については [こちら](http://nowsprinting.hatenablog.com/entry/2013/05/23/085915) を参考にしました。

上記で **gradle assembleRelease** すると **TwitPane_r252_v5.8.2_20140703_022651.apk** のようなファイルが app/build/outputs に生成されました。
SublimeText -Package Controlをインストール-


## SublimeTextとは
海外で人気のあるテキストエディタ。

**特徴**

* 強力な編集機能
* 柔軟なカスタマイズが可能
* シェアウェアだが、使用は無制限・機能無制限
* Mac、Windows、Linuxのクロスプラットフォーム対応
* 数多くの言語に対応
(C、C++、CSS、Erlang、Go、HTML、Java、JSP、JavaScript、JSON、Lisp、Lua、Perl、PHP、Python、Ruby、SQL XML、YAMLなど）

## インストール
[公式サイト](http://www.sublimetext.com/)から「ダウンロード」タブを選択して、対象のOSを選択します。
インストールは一般的なアプリと変わらないので割愛します。

## SublimeText2にPackage Controlをインストール

Package ControlはSublimeText2にインストールできる拡張機能を管理するためのパッケージです。

[このサイト](https://sublime.wbond.net/installation)に記載されているコードをコピー＆ペーストすることで簡単にインストールできます。

```bash:SublimeText2
import urllib2,os,hashlib; h = '7183a2d3e96f11eeadd761d777e62404' + 'e330c659d4bb41d3bdf022e94cab3cd0'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else None; print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation')
```

1. メニュー「View」−「Show Console」でコンソールを起動する。
2. コンソールの入力欄にコードを貼付けて、Enterキーを押下する。
しばらくすると、下記メッセージが表示されるので再起動する。

```bash:console
>>> import urllib2,os,hashlib; h = '7183a2d3e96f11eeadd761d777e624 ...
Please restart Sublime Text to finish installation
```

このPackage Controleを使って色々なパッケージがインストールできます。
[ や ] を含むファイルがglob.glob()で列挙されない問題の解決法

glob.glob()でつまずいたので、メモ。

# 現象

glob.glob() だと、[ ]を含むパスが取得できない。

例

```py3
glob.glob(r"d:\test\[1].*") 
#=> [1].txt にマッチしない
```

```py3
glob.glob(r"d:\test\\[1\].*") # \[ \] と書いてもダメ 
```

# 解決方法

1. パスマスクを以下のようにエスケープする

```txt
[ -> [[]
] -> []]
```

```py3
glob.glob(r"d:\test\[[]1[]].*") 
#=> [1].txt にマッチする
```

glob.glob() の代わりに以下の関数を使うもよし。

```py3
def escapeBraceForGlob(str):
    '''
    convert [ -> [[]  ,  ] -> []]
    '''
    newStr = str.replace("[","\\[").replace("]","\\]")
    newStr = newStr.replace("\\[","[[]").replace("\\]","[]]")
    return newStr


def globEscapeBraces(pathname):
    '''
    glob.glob() after escaping "[" and "]".
    '''
    return glob.glob(escapeBraceForGlob(pathname))
```
2. os.listdir() を使う。ただし、サブディレクトリのファイルまで列挙するので注意
 
# 参考

* [okanemochi.dip.jp/program/python_glob.html](http://okanemochi.dip.jp/program/python_glob.html)