OmniAICreator/Qiita-1.07M huggingface dataset:
Photoshopで書体毎の文字画像を一括生成

ExtendScript Toolkitで使うスクリプトです。
指定した文字で指定した個数分、手持ちの書体からランダムに選ばれたものの文字画像を生成します。
画像解析の精度を確認するための画像を生成したりするのに使えるかと思います。

## 生成された画像の例
![JPEG_0.jpg](https://qiita-image-store.s3.amazonaws.com/0/76058/d3941213-f93e-3d62-c5c0-de8c4f9b8099.jpeg)![JPEG_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/76058/04b835ca-2cce-8653-f54a-90944cf78146.jpeg)![JPEG_3.jpg](https://qiita-image-store.s3.amazonaws.com/0/76058/4d5d3a19-6e06-d073-6849-230fd0aaef9c.jpeg)


## ExtendScript Toolkit
AdobeのアプリケーションをJavaScriptで自動化するためのツール。
Macなら下記から起動：
/Applications/Adobe ExtendScript Toolkit CC/ExtendScript Toolkit.app

```js:ExtendScript
function makeTypeImage(textValue, generatedCount) {
	///生成する個数のリミッター(システム書体数が多すぎる時に、ここの値を修正して使用)
	const MAX_GENERATED_COUNT = 10000;
	///保存先を指定
	folderName = Folder.selectDialog("フォルダを選択してください");
	if (!folderName) {
		return;
	}
	///システム書体一覧を取得
	var PsFonts = app.fonts;
	///何個生成するか（0より小さい数値を入力するとシステム書体全てが対象）
	var varGeneratedCount = PsFonts.length;
	if (generatedCount > 0) {
		varGeneratedCount = generatedCount;
	}
	///書体が多すぎる時のリミッター
	if (varGeneratedCount > MAX_GENERATED_COUNT) {
		varGeneratedCount = MAX_GENERATED_COUNT;
	}
	///ピクセルで指定するための設定
	var originalUnit = preferences.rulerUnits;
	preferences.rulerUnits = Units.PIXELS;
	for (var i = 0; i < varGeneratedCount; i++) {
		///書類作成（100×100ピクセル）
		var docRef = app.documents.add(100, 100);
		var artLayerRef = docRef.artLayers.add();
		artLayerRef.kind = LayerKind.TEXT;
		var textItemRef = artLayerRef.textItem;
		textItemRef.contents = textValue;
		///書体名を指定（必ずPostScript名）
		///PsFonts[数値]の数値を書体数の範囲内でランダムにすると使用書体の固定化がされない。
		///注意事項として、アイコンの書体が指定された場合、画像解析としては使いものにならない。
		var varFontNumber = i;
		if (generatedCount > 0) {
			varFontNumber = Math.floor(Math.random() * PsFonts.length);
		}
		var varTextFont = String(PsFonts[varFontNumber].postScriptName);
		textItemRef.font = varTextFont;
		///フォントサイズ
		textItemRef.size = 80;
		///フォント座標指定
		textItemRef.position = new Array(50, 80);
		textItemRef.justification = Justification.CENTER;
		///レイヤー結合
		activeDocument.mergeVisibleLayers();
		var fileobj = new File(folderName + "/JPEG_" + String(i));
		///JPEGで保存
		var saveOptions = new JPEGSaveOptions;
		saveOptions.embedColorProfile = true;
		saveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
		saveOptions.quality = 12;
		// 他、各プロパティを設定
		app.activeDocument.saveAs(fileobj, saveOptions, false, Extension.LOWERCASE)
		activeDocument.close(SaveOptions.DONOTSAVECHANGES);
		docRef = null
		artLayerRef = null
		textItemRef = null
	}
}
///makeTypeImage(文字列、生成する個数);
makeTypeImage("A", 15);
```
画像サイズとか、フォントサイズとか適宜変更してください。
このスクリプトのポイントは、書体の指定はPostScript名で指定することだと思います。

使用環境：
Adobe Photoshop CC(2015.5)


>テキストレイヤーのフォント指定のアレコレ
> http://d.hatena.ne.jp/Takomaru/20130618/1371574276
>PhotoshopドキュメントをJavaScriptで別名保存する
>http://d.hatena.ne.jp/chalcedony_htn/20140725/1406299387

##修正
>16/07/11
>指定個数が1より小さい値を指定した場合、全て書体を使用するようにしてましたが、その際に書体を重複させないために、ランダムではなく連番で指定されるようにしました。
>生成個数にリミッターを追加しました。
openframeworks+MacでGStreamerを使う

メモ
・公式サイトからGStreamerをダウンロードしてインストール（develも）
・openframeworksのxcodeprojの/videoにofGst~を追加
・openframeworks.xcodeprojのArchitectureをStandard Architecturesにする
・マクロにBOOST_DISABLE_ASSERTSを追加
・openframeworks.xcodeprojheader search pathに/Library/Frameworks/GStreamer.framework/Headersをrecursiveで追加
ReactOSを使ってみた (0.4.1)

0.4.0からかなり進化していた。
[Tests for 0.4.3 - ReactOS Wiki](http://www.reactos.org/wiki/Tests_for_0.4.3)

## ダウンロード

* [SourceForge.net](https://sourceforge.net/projects/reactos/files/ReactOS/0.4.1/)から`ReactOS-0.4.1-REL-iso.zip`をダウンロードした。

ISOから起動するとインストーラが始まる。


## 注意点

* NICは`PCnet-PCI II`でインターネットに出られました。
* Virtualbox Guest Additionsをインストールすると
    * クリップボードの共有ができます。
    * ファイルの転送はできません。
* 日本語入力はできません。
* ieの起動は`iexplore.exe`
    * yahooは見れました。
    * ファイルのダウンロードができません。
* cscript.exeはあったが、mshta.exeはない。

![yaho.png](https://qiita-image-store.s3.amazonaws.com/0/25728/fab83dce-66fe-11fb-0ade-ce4a3b832425.png)

* パッケージマネージャからインストールできないものと思ったほうがいいです。
    * c:\Downloads\にダウンロードされます。
* 母艦でダウンロードしISO化してマウント、ReactOSに転送してセットアップ実施の流れかと。

![Downloads.png](https://qiita-image-store.s3.amazonaws.com/0/25728/00180c17-6976-14ad-4752-e8236f208004.png)
バイナリにビルド環境の情報が含まれる

以下にて気が付いた。

![error.png](https://qiita-image-store.s3.amazonaws.com/0/25728/e3f9a591-8396-1445-671c-b138b698933e.png)

ビルド環境は

* Go一式 (1.7beta2)
    * /home/user1/go/src/runtime/...
* プロジェクト
    * /home/user1/Go-upload-example/uploader.go

```bash:~/.bashrc
export GOROOT=$HOME/go
export GOPATH=$HOME/Documents/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
```

![home.png](https://qiita-image-store.s3.amazonaws.com/0/25728/4af7d170-a71a-5dca-5e43-fc704df58c10.png)

配布するときは気をつけましょう。
CentOS7にSSLの証明書をインストールする

# なんのために何をしたか？
## なにが問題？
デフォルトで配布されている以外のルートCA証明書が必要なサイトになんやかんやするには自分でルーツCA証明書を設定する必要があります。

たとえば，経産省のサイト( https://wwws.meti.go.jp )を wget や PHP の file_get_contents で取得しようとしても失敗することがあります。

たとえばこんなエラーが出ます

```shell-session:WGETの場合
wget https://wwws.meti.go.jp/interface/honsho/committee/index.cgi/committee
 --20XX-YY-MM H:i:s--  https://wwws.meti.go.jp/interface/honsho/committee/index.cgi/committee
 wwws.meti.go.jp (wwws.meti.go.jp) をDNSに問いあわせています...
 wwws.meti.go.jp (wwws.meti.go.jp)|23.218.21.190|:443 に接続しています... 接続しました。
 エラー: wwws.meti.go.jp の証明書(発行者: `/C=JP/O=Japanese Government/OU=GPKI/CN=ApplicationCA2 Sub')の検証に失敗しました:
  自己署名証明書です。
 wwws.meti.go.jp に安全の確認をしないで接続するには、`--no-check-certificate' を使ってください。
```

```shell-session:PHPの場合
PHP Warning:  file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in ***
PHP Warning:  file_get_contents(): Failed to enable crypto in ***
PHP Warning:  file_get_contents(https://wwws.meti.go.jp/interface/honsho/committee/index.cgi/committee): failed to open stream: operation failed in ***
```

## どうする？
CentOSにルートCA証明書を設定しましょう :)

## どうやって？
### 1．証明書を取得しましょう。
先に挙げた経産省の例だと，政府認証基盤(GPKI) ( http://www.gpki.go.jp/ )のアプリケーション認証局２を使っていますので，「アプリケーション認証局２(Root)の自己署名証明書（ http://www.gpki.go.jp/apca2/APCA2Root.der ）」と，ついでに「アプリケーション認証局２(Sub)の自己署名証明書（ http://www.gpki.go.jp/apca2/APCA2Sub.der ）」を取ってきます。

### 2. CentOSに設定しましょう。
まずは，適切な置き場に配置します。

```shell-session
 # cp APCA2Root.der /usr/share/pki/ca-trust-source/anchors
 # cp APCA2Sub.der /usr/share/pki/ca-trust-source/anchors
```

CentOSに配置したことを教えてあげます。

```shell-session
 # update-ca-trust extract
```

### おしまい。
【Unityエディター拡張】EditorWindow表示時にTextFieldにフォーカスをのせる

※この記事のUnityのバージョンは5.3.5f1です

#はじめに
EditorWindowを表示させるとき、最初からTextFieldにフォーカスをのせておきたい場合があります。
その方法を調べてみました。

OnGUIの中で ```EditorGUI.FocusTextInControl()``` を呼ぶとTextFieldにフォーカスが乗るみたいです。

#検証用ソースコード
``` TestWindow.cs
#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;

public class TestWindow : EditorWindow
{
    const string NAME = "A";

    string text = "ほげ";
    int cnt = 0;

    [MenuItem("Window/TestWindow")]
    static void Open()
    {
        GetWindow<TestWindow>();
    }

    void OnGUI()
    {
        text = EditorGUILayout.TextField("Text 1", text);

        GUI.SetNextControlName(NAME);
        text = EditorGUILayout.TextField("Text 2", text);

        text = EditorGUILayout.TextField("Text 3", text);

        if (cnt == 0)
        {
            // TextFieldへフォーカスをのせる
            EditorGUI.FocusTextInControl(NAME);
        }
        cnt++;
    }
}
#endif //UNITY_EDITOR
```

#実行結果
上記のEditorWindowを開くと、はじめからTextFieldにフォーカスが乗っていることが確認できます。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/64fc0771-56c4-e53e-9ef1-20000073def0.png)
【プログラマーのための数学】集合と要素

## 目次
[プログラマーのための数学 - 目次](http://qiita.com/Esfahan/items/ab63e7c5bcf812dff2a9)

## 集合とは要素とは
集合とはグループ、要素とはグループ内の個の要素のことです。
配列に例えると、配列=集合、配列の要素=要素となります。


## 集合と要素の表し方
このような、ローリングストーンズを表す集合があるとします。

```
ローリングストーンズ = {ミック・ジャガー,キース・リチャーズ, ロン・ウッド, チャーリー・ワッツ}
```

現メンバーは4人なので、集合の要素も4つになります。
ではもし、メンバーが増員されて100人になった場合、どうしたらよいでしょうか？
もちろん、上記の集合に要素を100個羅列することも可能です。
しかし、それではかなり面倒になりますよね。

そこで、次のような書き方をすることができます。

## 要素の条件を記述する方法
`A = { x | xを満たす条件 }`

これが何を指しているのかというと、このようになります。

```
1. 集合A = xである。
2. xとは~のことである。
```

ローリングストーンズの場合に置き換えてみると、下記のように指定すればよいことになります。

```
1. 集合ローリングストーンズ = xである。
2. xとはローリングストーンズのメンバーである。
```

これを式で書くと、こうなります。

```
ローリングストーンズ = { x | xはローリングストーンズのメンバー }
```

## 「属する」を意味する記号`∈`
ローリングストーンズの集合は、下記のような書き方で表せます。

```
A =  {ミック・ジャガー,キース・リチャーズ, ロン・ウッド, チャーリー・ワッツ}
A = { x | x ∈ A }
```

`∈`という記号は、「属する」という意味です。
つまり、`x ∈ A`は、xはAに属することを意味します。


また、`∉`を使うと、「属さない」という意味になります。

これらを使い、下記のように表すことができます。

```
{ミック・ジャガー,キース・リチャーズ, ロン・ウッド, チャーリー・ワッツ} ∈ ローリングストーンズ

ミック・ジャガー ∈ ローリングストーンズ
ジョン・レノン ∉ ローリングストーンズ
```


以上

参考：[集合と要素[わかりやすい説明と記号の書き方・練習問題]](http://manapedia.jp/text/2478)


[関連記事]
[プログラマーのための数学 - 目次](http://qiita.com/Esfahan/items/ab63e7c5bcf812dff2a9)
距離計 > Link > HC-SR04 > Opening angle > 30度(左右15度ずつ)くらい

```txt:動作環境
距離センサー: HC-SR04 (http://akizukidenshi.com/catalog/g/gM-08762/)
```

HC-SR04の視野角（障害物が影響する角度）はどれくらいか不明だった。
ESP8266をよく扱っているスイスアクセントのおじさん(`Here is a guy with swiss accent again`)のyoutubeで紹介されていた。
[#40 Ultrasonic Distance Sensors Arduino Tutorial and Comparison for HC-SR04, HY-SRF05, US-015](https://www.youtube.com/watch?v=aLkkAsrSibo&list=PL_MJualihC5CAtnZHphK-hli8aSL3PRRz&index=48)

5:28頃にOpening angleという用語で紹介している。
6:39にHC-SR04, HY-SRF05について「30度を少し超えている」という説明がある。
3つの線は距離が0.5m, 1.0m, 2.0mに対応する。

この30度というのは中心の方向から左右15度ずつ、という定義であるようだ。
VBScriptでファイルのダウンロード

## busybox.exe のダウンロード例

* [vbscript - Download a file with VBS - Stack Overflow](http://stackoverflow.com/questions/2973136/download-a-file-with-vbs)

```vbnet:get_busybox.vbs
dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
dim bStrm: Set bStrm = createobject("Adodb.Stream")
xHttp.Open "GET", "https://frippery.org/files/busybox/busybox.exe", False
xHttp.Send
with bStrm
    .type = 1 '//binary
    .open
    .write xHttp.responseBody
    .savetofile "busybox.exe", 2 '//overwrite
end with
```

なおReactOS 0.4.1 ではダウンロードできませんでした。

### bitsadmin.exe

* [Windowsのコマンドプロンプトでファイルを取得するには？ - Qiita](http://qiita.com/zembutsu/items/f05d7c5835017fb4c796)

windows 7以降では`bitsadmin.exe`コマンドがある様子。
XP SP3には入っていなかった。(別途インストールが必要か [BITSAdmin Tool (Windows)](https://msdn.microsoft.com/en-us/library/windows/desktop/aa362813(v=vs.85).aspx))
Vue.jsのboilerplateを書きました(webpack, vue-router, vuex, axios)

# vue-webpack-boilerplate
Vue.js(2.x.x)でvue-routerとvuexとaxiosを使用したboilerplateを書いてみました。

[vue-webpack-boilerplate](https://github.com/re-fort/vue-webpack-boilerplate)

## 利用想定
APIと通信を行い、画面描画を行うシンプルなSPAを想定しています。
が、割りと実用的な機能(認証周り・ページネーション・通知・GAトラッキング・ローディングスピナーなど)をビルトインで備えています。
管理画面を早く作りたいなどの場合に最適です。

## パッケージ

### 開発
- Vue
- webpack 
- [vue-router](https://router.vuejs.org/ja/index.html)
- [vuex](https://vuex.vuejs.org/ja/)
- axios
- [Bulma](http://bulma.io)
- Font Awesome

### テスト
- vue-test-utils
- Mocha
- Karma
- power-assert

## 構成
```
dist                                 ... npm run buildで自動生成される
  js
    - app.js                         ... アプリ固有のビルド済みjs
    - vendor.js                      ... 外部ライブラリのビルド済みjs(Vue, vue-router, vuex, axios)
  static                             ... 静的リソースファイル
  stylesheets
    - app.css                        ... アプリ固有のビルド済みcss
    - vendor.css                     ... 外部ライブラリのビルド済みcss(Font Awesome)
src
  components                         ... ページコンポーネント
  lib                                ... ライブラリ
  mixins                             ... ミックスイン
  router                             ... vue-router
  static                             ... 静的リソースファイル
  store                              ... Vuex
  stylesheets
  App.vue                            ... メインコンポーネント
  filter.js                          ... カスタムフィルタ
  main.js                            ... エントリポイント
  setting.js                         ... プロジェクト固有の設定
tests
  unit                               ... ユニットテスト関連
    specs                            ... スペックファイル
    stubs                            ... スタブ
    .eslintrc.json                   ... ユニットテスト用のeslint設定ファイル
    index.js                         ... ユニットテストのエントリポイント
    karma.conf.js                    ... Karmaの設定ファイル
.babelrc                             ... babelの設定ファイル
.editorconfig
.eslintrc.json
index.html
package.json
webpack.config.babel.js              ... Webpackの設定ファイル
```
## デモ
boilerplateでは、GitHub APIを叩き、ユーザー・リポジトリを検索・表示するSPAをサンプル実装しています。

https://re-fort.net/vue-webpack-boilerplate/#/

セットアップなどはリポジトリの[README](https://github.com/re-fort/vue-webpack-boilerplate/blob/gh-pages/README.md)を参照してください。
改善点などありましたら、PRいただけるとありがたいです:blush: 

## 履歴
* Vue.jsを1.x.x => 2.x.xに更新しました。
* webpackを1.x.x => 2.x.xに更新しました。
* vue-routerからaxiosに変更しました。
* webpackを2.x.x => 3.x.xに更新しました。
* Vuexを導入し、認証用のtokenを管理する例を追加しました。
* avoriaz + Mocha + Karmaでユニットテストを追加しました。
* avoriazからvue-test-utilsに変更しました。
* 通知コンポーネント・GAトラッキング・ローディングスピナーを追加しました。
JAVA クラスの中にあるクラスをインスタンス化するとエラー(回避方法)


▪️エラーコード

```java

public class Test113 {
	public static void main(String[] args) {
		int a;
		a = 10 % 3;
		System.out.println(a);
		Test t = new Test();⬅︎エラー
		Test113a ta = new Test113a();
	}

	public class Test {
		int b = 3;

		void test2() {

			if (this.b == 3) {
				System.out.println(this.b);
			}
		}

	}
}
```

▪️修正後
【プログラマーのための数学】目次 - 機械学習のために

# プログラマーのための数学 - 目次

機械学習を学ぶために必要だと思われるもの、関連しそうな数学の知識です。
随時追加していきます。

## 関連記事
[【プログラマーのための統計学】目次 - データサイエンス](http://qiita.com/Esfahan/items/bd9e52837bbaeb168b9f)

## 基礎編
- [数について - 虚数、複素数を理解する](http://qiita.com/Esfahan/items/04e3daf2411d0ff737a4)
- [集合と要素](http://qiita.com/Esfahan/items/5e0246ba511d5e4a132d)
- [写像とは](http://qiita.com/Esfahan/items/2611ca6a9ea708b943d4)

## 行列
- [行列](http://qiita.com/Esfahan/items/afd4acf9ed264bb71f78)
- [単位行列と逆行列](http://qiita.com/Esfahan/items/23f95b44d7ad3c30345e)
- [行列式](http://qiita.com/Esfahan/items/ddbd97c2b06d050c3562)

## 三角形の方程式
- [三平方の定理 (ピタゴラスの定理)](http://qiita.com/Esfahan/items/71f4c50708711da07d3c)
- [三角比](http://qiita.com/Esfahan/items/a56f5b289325ea4e5dc5)
- [三角関数（sinθ，cosθ，tanθ） - サイン、コサイン、タンジェント](http://qiita.com/Esfahan/items/3404a967a03da5768654)
- [余弦定理](http://qiita.com/Esfahan/items/421619087c29cf0feed5)

## ベクトル
- [ベクトル](http://qiita.com/Esfahan/items/7a272b2cb42244d6f274)
- [ベクトルの内積](http://qiita.com/Esfahan/items/ae8d6f88feeffe0f9952)
- [ベクトルの外積](http://qiita.com/Esfahan/items/6cf3e270e61d1f514433)
- [一次結合 (線型結合)](http://qiita.com/Esfahan/items/bf470acb751de6ab2be8)
- [一次独立と一次従属](http://qiita.com/Esfahan/items/d661a04d29635dca7076)

随時追加していきます。
【プログラマーのための数学】写像とは

## 目次
[プログラマーのための数学 - 目次](http://qiita.com/Esfahan/items/ab63e7c5bcf812dff2a9)

## 概要
写像とは何か？

## 集合
例えば、レストランのメニューを表した2つの集合があるとします。
Aはメニューの内容で、Bは値段です。

```
A = {ハンバーグ、ピラフ、スパゲッティ、オムライス、カレー}
B = {1200, 800, 900, 950, 850}
```

Aの1つ目の要素はBの1つ目の要素、Aの2つ目の要素はBの2つ目の要素・・・
というように対応しています。

## 写像
このように、ある規則によって、AとBの要素が1つずつ結びついているとき、AからBへの写像 (mapping)と呼び、`f:A⟶B`のような式で表します。

## 定義域、値域
また、写像`f:A⟶B`において、Aをfの定義域(domain of definition) 、Bを値域(range)といいます。
また、Aの要素aに対応するBの要素を、f(a)と表し、 f による a の像 (image)、または f の a における値 (value) と呼びます。


上記の例でいうと、下記のようになります。

```
f(ハンバーグ)=1200
f(ピラフ)=800
f(スパゲッティ)=900
f(オムライス)=950
f(カレー)=850
```

また、この集合は、下記のように表すことができます。

`A = {f(a)|a∈A}`

こちらの書き方については、下記を参考にしてください。
参考：[【プログラマーのための数学】集合と要素](http://qiita.com/Esfahan/items/5e0246ba511d5e4a132d)

以上

[参考]
[写像とは何か](http://www.ftext.org/text/subsubsection/1016)


[関連記事]
[プログラマーのための数学 - 目次](http://qiita.com/Esfahan/items/ab63e7c5bcf812dff2a9)
【Unity C#】関数を1回だけ呼ぶ方法

#はじめに
ある関数を1回だけ実行させたい。こういう時どうすれば良いかをまとめてみました。

#1. Start()で呼ぶ
おそらく最もシンプルな方法。 Awake()に書いても良い

``` NewBehaviourScript.cs
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    // Use this for initialization
    void Start()
    {
        // Hoge()を実行
        Hoge();
    }

    void Hoge()
    {
        Debug.Log("ほげ");
    }
}
```

ただ、この方法だと開始時に呼ばれてしまう。 任意のタイミングで実行させたい場合には使えない

#2. 変数を用意する
変数を使って過去に呼ばれたかどうかを素直に判定させる。
シンプルだがスマートではないようにも思える。 

``` NewBehaviourScript.cs
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    bool isCalled = false;

    void Update()
    {
        // Time.time > 1.5f の場合に1回だけHoge()を実行
        if (Time.time > 1.5f)
        {
            if (isCalled == false)
            {
                isCalled = true;
                Hoge();
            }
        }   
    }

    void Hoge()
    {
        Debug.Log("ほげ");
    }
}
```

#3. UniRxを使う
<a href ="https://www.assetstore.unity3d.com/jp/#!/content/17276">UniRx - Reactive Extensions for Unity</a> を使うとシンプル、そしてスマートに書ける。
UniRxについてはググるとわかりやすい記事がたくさん出てくるので調べてみるといいかもしれない。
 

``` NewBehaviourScript.cs
using UnityEngine;
using UniRx;
using UniRx.Triggers;

public class NewBehaviourScript : MonoBehaviour 
{
    void Start ()
    {
        // Time.time > 1.5f の場合に１回だけHoge()を実行
        this.UpdateAsObservable()
            .First(x => Time.time > 1.5f)
            .Subscribe(x => Hoge());
    }

    void Hoge()
    {
        Debug.Log("ほげ");
    }
}
```


#参考URL
未来のプログラミング技術をUnityで -UniRx-
http://www.slideshare.net/torisoup/unity-unirx

UniRxについて書いた記事をまとめてみた
http://qiita.com/toRisouP/items/48b9fa25df64d3c6a392

UniRxのシンプルなサンプル その3(FirstとTake)
http://qiita.com/Marimoiro/items/b24510b0ffd273f69f8a
PHP7へアップグレードする際に気をつけること - E_STRICTの廃止


## 概要
PHP7にアップグレードする際に困ったことがあったのでメモ。

## E_STRICTエラーの廃止
PHP7からE_STRICTエラーが廃止され、E_NOTICE、E_WARNING、E_DEPRECATEDのどれかになる。

**と い う こ と は**

PHP5.6にアップグレードしたときに、error_reportingをいじって、取り急ぎE_STRICTを回避していた(ごまかしていた)部分を直さなくてはいけなくなった。

```PHP5.6時代の回避手段
error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE & ~E_DEPRECATED
```

## E_STRICT => E_WARNINGになった例
例えば、PHP5.6から、継承元の親クラスと同名のメソッドがあるとき、引数の数が双方で同じでないと、E_STRICTが出るようになった。

下記、エラーが出る例

```
<?php

class A {
    function __construct() {

    }

    protected function run( $a ) {
        return 'This is A.';
    }
}

class B extends A {
    function __construct() {
        parent::__construct();
    }

    function run( $a, $b ) {
        return 'This is B.';
    }
}

$c = new B();
```

これがPHP7ではE_WARNINGとなったため、ソースの修正が必要。E_WARNINGを非表示にするわけにはいかないし。


古いソースコードのものをPHP7にアップグレードするには、結構手間が掛かりそう。。。

以上

[参考]
[PHP7調査(21)E_STRICTの廃止](http://qiita.com/hnw/items/9621e8ea9f9a2d090f6d)

[関連記事]
[PHP7を触ってみたメモ](http://qiita.com/Esfahan/items/12aa0d091874b65dab60)

[PHP5.3.3からPHP 5.6.7にアップデートする際にやったこと](http://queryok.ikuwow.com/entry/php53-update-php56/)
[PHP5 Strict Standards:を非表示にする方法](http://qiita.com/MANO_fukuoka/items/8d4ec7d4f3cc20355272)
Javaを使ってディレクトリの階層構造をツリー形式で表示する

> [Javaを使ってディレクトリの階層構造をツリー形式で表示する](http://qiita.com/ukiuki/items/1c70a7f907c5ac12b39f)
> by @ukiuki

昔に自分も作ったことがあるので、Gistにソースを入れました。

  [Tree.java](https://gist.github.com/sipadan2003/c88328acacd67bf066745fb404dea3b2)

オプションで出力内容を設定できます。

```java
	/**
	 * ディレクトリ階層を出力します。
	 * @param path 処理対象のディレクトリ
	 * @param depth 階層数(0の場合は、すべて)
	 * @param containsFile ファイルも出力するかどうか
	 * @param outputPath 出力先ファイル(nullの場合は標準出力)
	 * @throws IOException ファイルI/Oに問題が発生した場合
	 */
	public static void tree(String path, int depth, boolean containsFile, String outputPath) throws IOException
```

Windows以外のOSでファイル名がソートされない場合があるかもしれないので、次のように処理しています。

1. FileVisitorではすぐ出力せずに、一旦ノード構造を構築し
2. Collections.sort()で、ノード構造をファイル名でソートしてから
3. printOut()でノード構造を再帰的に出力する
MAMPのPHPバージョンを変更する

MAMPを使って古いバージョンのPHPを手軽に使う方法です。

* MAMPのバージョン：3.0.7.3

MAMPで選択できるPHPのバージョンはデフォルトでは以下の2つでした。
- 5.5.18
- 5.6.2

![mamp_php_version_before.png](https://qiita-image-store.s3.amazonaws.com/0/125869/2ea540fc-b41b-9aa4-e0b1-25e5ea5bf108.png)

MAMPには他のバージョンも付属しています。
場所は /Applications/MAMP/bin/php/ にあります。

使用したいバージョン**以外**の名前を変更します。
今回は5.2.17と5.6.2を残しました。（2つまで残せるみたいです。）

- php5.1.6 -> php5.1.6_X
- php5.2.17
- php5.3.29 -> php5.3.29_X
- php5.4.34 -> php5.4.34_X
- php5.5.18 -> php5.5.18_X
- php5.6.2

名前の後に「_X」をつけました。（名前が変更されればなんでもよい）

MAMPを再起動すれば、変更が反映されます。

![mamp_php_version_after.png](https://qiita-image-store.s3.amazonaws.com/0/125869/0e9473c5-40e6-629a-70bc-0549a31e67da.png)

便利ですね！
OSXのIME情報をコマンドラインから取得する


```
/usr/libexec/PlistBuddy -c "Print AppleSelectedInputSources:0:'Input Mode'" ~/Library/Preferences/com.apple.HIToolbox.plist
```

/usr/libexec/PlistBuddyはplistファイルを操作する標準ツール。
~/Library/Preferences/com.apple.HIToolbox.plistにIME（入力ソース）の情報が入ってる。
`AppleSelectedInputSources:0:'Input Mode'"`は`obj["AppleSelectedInputSources"][0]["Input Mode"]`の意味。

vimのステータスラインにIME情報載せようかと思って調べたけど結局使わなかったので投稿しとく。
Macで、git-flowとgit-flow-hookを導入する。


# git-flowの導入

[git-flowを試す](http://qiita.com/tanishi/items/09e72c65c0a0c9e1cc10)を参考に、次のコマンドを実行する。
（すでに、プロジェクトのリポジトリは存在している前提）

```
$ brew install git-flow
```

# git-flow-hookの導入

[小規模開発のgit-flowの導入を楽にするブランチルールと拡張スクリプト配布](http://qiita.com/eaglesakura/items/4fa17bf1f2b6683e6520)を参考にする。

[git-flow-hook](https://github.com/eaglesakura/git-flow-hook)を参考に、次のコマンドを実行する。

※前提として、既存リポジトリの「master」、「develop」の両方をチェックアウトしておく。

## git-flowの導入

```
$ cd git_repository_root
$ git flow init -d
Using default branch names.

Which branch should be used for bringing forth production releases?
   - develop
   - master
Branch name for production releases: [master] 

Which branch should be used for integration of the "next release"?
   - develop
Branch name for "next release" development: [develop] 

How to name your supporting branch prefixes?
Feature branches? [feature/] 
Release branches? [release/] 
Hotfix branches? [hotfix/] 
Support branches? [support/] 
Version tag prefix? [] 
```

## git拡張コマンドのインストール

```
# git拡張コマンド(/usr/local/binにインストールされます。一度のみの実行で問題ありません)
$ sudo sh -c "$(curl -fsSL https://raw.githubusercontent.com/eaglesakura/git-flow-hook/master/installer/install-commands.sh)"
```

```
# gitリポジトリのフックスクリプト(.git/hooksにインストールされます。リポジトリごとに実行しなければなりません)
$ cd git_repository_root
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/eaglesakura/git-flow-hook/master/installer/install-hooks.sh)"
```

# git拡張コマンド

[git拡張コマンド](https://github.com/eaglesakura/git-flow-hook#git拡張コマンド)　を使う。
Arrayの演算子追加

配列の
- 減算(-)
- or(|)
- xor(^)
- not(!)

の演算子を自分なりに追加してみました。

```swift
// 前の配列から後ろの配列の要素を抜いて返還します。
func -<T: Equatable> (lhs: Array<T>, rhs: Array<T>) -> Array<T> {
    return lhs.filter({ (lv) -> Bool in
        return false == rhs.contains(lv)
    })
}

// 前の配列に後ろの配列の要素を追加。この場合前にすでに存在する要素は追加しません。
func |<T: Equatable> (lhs: [T], rhs: [T]) -> [T] {
    return lhs + rhs.filter({ (rv) -> Bool in
        return false == lhs.contains(rv)
    })
}

// 前と後ろの間でお互いにもってない要素のみ配列で返還します。
func ^<T: Equatable> (lhs: [T], rhs: [T]) -> [T] {
    return lhs.filter({ false == rhs.contains($0)}) + rhs.filter({ false == lhs.contains($0)})
}

// …まあ、これはいらないかも。ですけど。便利だと思って入れてみました。
prefix func !<T: Equatable> (target: [T]) -> [T] {
    return target.reversed()
}
```

---

##結果
```
// 実行
var a = [1.0, 10.0, 120.0, 32.0, 15.0, 1.0]
var b = [10.0, 11.0, 12.0, 13.0, 1.0]

print("a = \(a)")
print("b = \(b)")
print("a - b = \(a - b)")
print("a | b = \(a | b)")
print("a ^ b = \(a ^ b)")
print("!a = \(!a)")

```
---
```
// 結果
a = [1.0, 10.0, 120.0, 32.0, 15.0, 1.0]
b = [10.0, 11.0, 12.0, 13.0, 1.0]
a - b = [120.0, 32.0, 15.0]
a | b = [1.0, 10.0, 120.0, 32.0, 15.0, 1.0, 11.0, 12.0, 13.0]
a ^ b = [120.0, 32.0, 15.0, 11.0, 12.0, 13.0]
!a = [1.0, 15.0, 32.0, 120.0, 10.0, 1.0]

```
Vagrant up時共有フォルダのマウントに失敗する問題の対処（kernel-develのインストール）

`vagrant up`した時に

```
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device
```

みたいなのが出て共有フォルダのマウントに失敗する問題の対処法です。

Virtualbox周りでたくさんノウハウが出てきますが、私は以下のエントリを参考にさせて頂き解決しました。

DKMSインストール時に kernel-devel が見つからない Requires: kernel-devel - Qiita
http://qiita.com/Ikumi/items/9f8d02d088de669762a7

`/etc/yum.repos.d/CentOS-Vault.repo`に

```
[C6.5-base]
enabled=1
[C6.5-updates]
enabled=1
```

を書き足して、

`sudo yum install kernel-devel`

です。
CentOS7でタイムゾーンの変更をしました。

CentOS7のタイムゾーンを変更しました。

# タイムゾーンを確認

```
sudo timedatectl 
      Local time: 月 2016-07-11 00:43:22 UTC
  Universal time: 月 2016-07-11 00:43:22 UTC
        RTC time: 日 2016-07-10 19:40:27
       Time zone: UTC (UTC, +0000)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
```

UTCになっています。

# timezoneのAsia/Tokyoをセット

```
sudo timedatectl set-timezone Asia/Tokyo
```

# もう一度確認

```
sudo timedatectl 
      Local time: 月 2016-07-11 09:55:46 JST
  Universal time: 月 2016-07-11 00:55:46 UTC
        RTC time: 日 2016-07-10 19:52:51
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
```
Asia/Tokyoになりました(☝ ՞ਊ ՞)

# 参考
http://qiita.com/dumpty-alma@github/items/0e43c1b585f1fb90ec8e
ローカル開発環境の構築(Mac)　※vagrantではない　※自分用メモ

# ローカル開発環境の構築(Mac)　※vagrantではない

参考サイト
http://qiita.com/issobero/items/e0443b79da117ed48294#rbenv%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

# ローカル開発環境(Mac)構築でインストールしたもの
・Homebrew(入っていない場合)、Xcode(ソフトウェアIDE、統合開発環境)は最近はHomebrew本体のインストールで一緒に入る。
・rbenv
・ruby
・bundler	# bundlerはRubyのバージョン単位で入れること。
・git　※brew install git　その後、以下サイトで初期設定を行う。
・PostgreSQL
http://qiita.com/tstomoki/items/0f1a930bd42a8e1fdaac
	
※ RailsやPostgreSQLはアプリごとにインストールする？ 
GitHubからCloneした場合はアプリ内に入っているので不要	


※ Git初期設定を行う、コマンドあり
http://qiita.com/wnoguchi/items/f7358a227dfe2640cce3

※ Homebrewまとめ
http://qiita.com/vintersnow/items/fca0be79cdc28bd2f5e4

※ Homebrewまとめ
http://qiita.com/omega999/items/6f65217b81ad3fffe7e6

# その後やるなら、ローカル(Mac)　※vagrantではない。でGitHubからclone後、アプリを見る場合の作業手順
http://qiita.com/dawn_628/items/65ca4621a23d172da659

# Mysql
http://qiita.com/narikei/items/cd029911597cdc71c516
ローカル(Mac)　※vagrantではない。でGitHubからclone後、アプリを見る場合の作業手順　※自分用メモ

# ローカル(Mac)　※vagrantではない。でGitHubからclone後、アプリを見る場合の作業手順
ローカルの環境構築ができていることが前提
環境構築は以下サイトを見て行う。
http://qiita.com/dawn_628/items/00a92df3c01db60daeae

・以下サイトで、Homebrewを使ってPostgreSQLをMacにインストールする。
且つ、自動起動の設定を行う。
http://qiita.com/tstomoki/items/0f1a930bd42a8e1fdaac

※PostgreSQLの自動起動設定
自動起動リストにPostgreSQLの追加(以下コマンドはPostgreSQLのバージョン注意！！ 自分は9.5。psql --versionを行ってから設定する)
psql --version # PostgreSQLのバージョンを確認
cp /usr/local/Cellar/postgresql/9.3.2(バージョンを入力)/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/

その後の作業、
・git clone
・bundle install --path vendor/bundle
※できなければgem install bundler
・bundle exec rake db:create db:migrate
・bundle exec rails s
1バイナリのuploaderに感動した

参考: [Shadey/Go-upload-example](https://github.com/Shadey/Go-upload-example)

## 使い方

ダウンロード

* [Releases · tukiyo/Go-upload-example](https://github.com/tukiyo/Go-upload-example/releases)

uploader.exeをダウンロードして実行すると5000番で待ち受け。

![dl.png](https://qiita-image-store.s3.amazonaws.com/0/25728/9d7a7aa0-0511-e164-1e35-b2e52dafbd54.png)

![web.png](https://qiita-image-store.s3.amazonaws.com/0/25728/514256cb-ad7e-bb47-5bc7-1697a3090f9c.png)

![cmd.jpg](https://qiita-image-store.s3.amazonaws.com/0/25728/6074b549-a00f-a622-08d6-a0c9a6726567.jpeg)

http://ipaddr:5000/ にアクセス。UPLOADしたいファイルを選び`upload`押下。
完了したら`received: ファイル名`と表示される。

exeと同じ場所にファイルが保存される。

![get.jpg](https://qiita-image-store.s3.amazonaws.com/0/25728/f3cce852-798b-a866-d0ee-28d07a17332b.jpeg)

----

* uploader.exe.iso は `genisoimage -o busybox.exe.iso Download`で作成したもの。
    * ReactOS 0.4.1用に準備した。(が動かなかった。)

* uploadは`%temp%`に一旦格納される

![up.png](https://qiita-image-store.s3.amazonaws.com/0/25728/fd91467a-8a50-fd8a-8d97-cc475a1e3a85.png)
ディスプレイを強制的にスリープにする

夏は暑い。私事だが24インチディスプレイがLEDバックライトではない型なのでディスプレイ周辺が1段暑いように感じる。PC本体もそうだが、発熱源はできるだけ小まめに電源のON/OFFをしたいところ。


# 電源とスリープ

何分に設定するかはともかくとして、席を外した時にディスプレイをスリープにすることができるので、支障がなければ設定しておこう。

![a2.png](https://qiita-image-store.s3.amazonaws.com/0/11641/c8452618-3785-ff36-876b-81193c9d49b4.png)


# Windows API 直呼び
稀に「10分間コンビニ行くので今すぐにディスプレイをスリープにしたい」と思うことがある。ディスプレイの電源ボタンを押してもいいのだが、マルチディスプレイ環境でデスクトップのアイコンの配置がぶっ飛んだりして…とにかくあまり良い思い出がない[^1]。ディスプレイの電源をすぐにOFFにできるフリーソフトもいくつかあるようだが、私はあまりその手の(目的がちょっとした利便に関わるだけの)フリーソフトのバイナリはあまり信用したくない。ただAPIを呼ぶだけなのでPythonででっちあげたのがコレ。

```py3
# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; coding: utf-8; -*-

from ctypes import *

user32 = WinDLL('User32')
DISPLAY_ON = -1
DISPLAY_OFF = 2
HWND_BROADCAST = 0xffff
WM_SYSCOMMAND = 0x0112
SC_MONITORPOWER = 0xf170
post_message = cast(user32.PostMessageA,
                    CFUNCTYPE(c_uint32, c_uint32, c_uint32, c_uint32, c_uint32))
lock_workstation = cast(user32.LockWorkStation, CFUNCTYPE(c_uint32))

post_message(HWND_BROADCAST,
             WM_SYSCOMMAND,
             SC_MONITORPOWER,
             DISPLAY_OFF)
# lock_workstation()

```
[gist](https://gist.github.com/sharow/78042aea55a8d69a1e05f33960ec8752).

これをバッチファイルか何かで走らせるようにし、そのアイコンをクリックすることでディスプレイをスリープ状態にできる。電源管理のスリープと同じで、マウスを動かしたりキーボードを叩けば復帰する。

`lock_workstation()`のコメントアウトを外すと、ディスプレイをスリープにしつつロック状態になる。この状態では画面復帰後にパスワード入力などで認証し直す必要がある。

なお、これをバッチファイルから実行する場合、` timeout /T 3`などとして少し遅延を入れるとよい。


## @asmさんによるPowerShell版
~~Pythonで実装しちゃったが、おそらくPowerShell + C#で、素の状態のWindows10で動くスクリプトも組めると思う。やる気が出たらそっちもやってみたい。あるいは誰かやってよ。~~ 

<strong> コメント欄に @asm さんによる[PowerShell版の実装](http://qiita.com/sharow/items/ef78f2f5a8053f6a7a41#comment-2830a2c713d96f3c0281)があるぞ！ </strong> こちらの実装は素の状態のWindows10でも動く筈。


## 参考
- [ディスプレイの電源 ON/OFF をプログラムから制御する方法 (Windows) | TipsZone](http://tipszone.jp/20140730_display-on-off/)
- [PostMessage 関数](https://msdn.microsoft.com/ja-jp/library/cc410952.aspx)
- [LockWorkStation function (Windows)](https://msdn.microsoft.com/en-us/library/windows/desktop/aa376875(v=vs.85).aspx)
- [パノコンの画面（ディスプレイ）だけシャットダウンすることは可能ですか？？ - ... - Yahoo!知恵袋](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1473918329)
- [ディスプレイの電源を切るフリーソフトまとめ（7種類紹介）](http://freesoft.tvbok.com/freesoft/matome/monitor_off.html)
- [macでディスプレイを強制スリープする方法 | ri-que lab](http://www.ri-que.com/mac-display-sleep/)
- [【裏ワザ】Windows10のデスクトップに「電源オフ」ショートカットを作る方法 | Windows 10 | できるネット](https://dekiru.net/article/14278/)

[^1]: 電源ボタンでOFFにすると、復帰時も電源ボタンを押す必要がある...あまり大きな声で言いたくないが、復帰時にディスプレイではなくPC本体の電源をポチっとな、してしまったことが何度かあるので、そういう意味でも個人的に抵抗がある。あと物理ボタンは可動部品なので頻繁に押してると壊れやすいということもある。
Node.jsからSlack WEB API を叩いてメッセージを送信する


難易度が高いわけでもないがそこまで情報が無かったので備忘録的なアレです。

## やることは至ってシンプル
1.SlackAPIのTokenを発行する
2.Node.jsから叩く叩く！

所要時間は15分

## 1.SlackAPIのTokenを発行する
SlackAPIページはリンクが多すぎる。。
Tokenを発行したいだけなのにぱっと見ではよく分からない。ちくしょう。
	
あった、[ここ](https://api.slack.com/docs/oauth-test-tokens)だったか。

[SlackAPIトップ](https://api.slack.com/)の左メニュー > AUTHENTICATION > Tokens for Testing


最初から`token`でページ内検索すればよかったよね、と思ったあなたはとても賢い方なのだと思います。

<img src="https://qiita-image-store.s3.amazonaws.com/0/127115/3b9103a8-e3e7-2b71-cdcc-a2f96cda11b2.png" width="200px"/>


チームの一覧で
`Create token`ボタン > パスワード入力 > `Confirm`ボタン

とすると下記のようなtokenが画面上に表示されます。

```
xoxp-00000000000-00000000000-00000000000-0000000000
```

このtoken使って`request`モジュールでpostする処理を書いてみる。


```ts:slack.ts
request.post('https://slack.com/api/chat.postMessage',
	{
		form: {
			token: '発行したトークン',
			channel: 'チャンネル',
			username: '送信者の名前',
			text: 'メッセージ'
		}
	}
	, (error, response, body) => {
		console.log(error)
	}
)

```

コンパイルして実行

```
tsc slack.ts 
node slack.js
```

メッセージ来た
![Kobito.AMKRSA.png](https://qiita-image-store.s3.amazonaws.com/0/127115/e4772cc1-c68c-2e87-c77a-ef0dc0e53ca4.png "Kobito.AMKRSA.png")


こんな風にclassやモジュールにしておくと何かと便利でした。

```ts
import request = require('request')

export interface SlackPostForm {
	token?: string
	channel?: string
	username?: string
	text?: string
}

export default class Slack {
	constructor() {
	}

	post(form: SlackPostForm, callBack: (error: any, response: http.IncomingMessage, body: any) => void) {
		let options: request.CoreOptions = {
			form: {
				token: form.token || 'デフォルトトークン',
				channel: form.channel || 'デフォルトチャンネル',
				username: form.username || 'デフォルト送信者',
				text: form.text || ''
			}
		}
		request.post('https://slack.com/api/chat.postMessage', options, (error, response, body) => {
			callBack(error, response, body)
		})
	}
}
```
CASpringAnimationを使ってバウンスするアニメーション

# CASpringAnimation を使ったアニメーション
円をバウンスして表示させる方法がないかといろいろ考えてました。
Githubに上がっていた[iOS-9-Sampler](https://github.com/shu223/iOS-9-Sampler)を眺めていたらCASpringAnimationというのが使えそうなので、これを使ってバウンスするアニメーションを作ってみました。

## 環境
>Xcode 7.3.1
>Swift 2.2
>iOS 9

## 円がバウンスするアニメーション
CASpringAnimationのKeyPathを`bounds.size`に指定して、ImageViewの角を丸くして実行してみました。

```swift:SizeAnimation
    func startAnimation(){
        animation.mass = 1.0
        animation.damping = 12.0
        animation.stiffness = 240.0
        
        animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
        animation.fromValue = NSValue(CGSize: CGSizeMake(0, 0))
        animation.toValue = NSValue(CGSize: CGSizeMake(240, 240))
        
        animation.removedOnCompletion = true
        animation.fillMode = kCAFillModeForwards
        animation.duration = 2.5
        
        animation.delegate = self
        
        animationView.layer.addAnimation(animation, forKey: "animation")
    }
``` 
#### 結果
円が大きくなるというよりは角がバウンスする感じですね。画像で円をImageViewにセットした方がよいかも
github:[SizeAnimation](https://github.com/h-nag/SizeAnimation)

![SizeAnimation.gif](https://qiita-image-store.s3.amazonaws.com/0/129549/37b1d259-e66b-403e-0c50-ff5c437b787d.gif)


## 四角の角をバウンスさせる
勉強がてらKeyPathを`cornerRadius`にして四角の角をバウンスさせてみました。

```swift:RadiusChangeAnimation
    func startAnimation(){
        animation.mass = 1.0
        animation.damping = 10.0
        animation.stiffness = 240.0
        
        animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
        animation.fromValue = 200
        animation.toValue = 90
        
        animation.removedOnCompletion = false
        animation.fillMode = kCAFillModeForwards
        animation.duration = 1.0
        
        animation.delegate = self
        
        animationView.layer.addAnimation(animation, forKey: "animation")
    }
```

#### 結果
github:[RadiusChangeAnimation](https://github.com/h-nag/RadiusChangeAnimation)

![RadiusChangeAnimation.gif](https://qiita-image-store.s3.amazonaws.com/0/129549/19cd3a85-8f62-41b4-e2b1-96ed306e7599.gif)


### おまけ
ハートの画像でバウンスさせてみました。

![HeartBound.gif](https://qiita-image-store.s3.amazonaws.com/0/129549/e37767bb-6a95-1e54-69ed-9b4c2742a198.gif)
RaspberryPiにJenkinsを入れて高級なcronの代わりに使う

# RaspberryPiにJenkinsを入れて高級なcronの代わりに使う

RaspberryPiに高級なcronの代わりにJenkinsを入れてみた

## とりあえずお約束で..

```shell-session
sudo apt-get update
sudo apt-get upgrade
```

## Jenkinsをインストール

```shell-session
sudo apt-get install jenkins
```

## 設定をすこし変更する

```shell-session
sudo nano /etc/default/jenkins
```
に

```
JAVA_ARGS="-Xmx256m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
```
を追加した

## Jenkinsにアクセスする
http://[Raspberry PiのIPアドレス]:8080

## 高級なcron代わりに使うには
- Jenkinsのポータルにアクセス
- [新規ジョブ作成]
- ジョブ名を適当につける
- 「フリースタイル・プロジェクトのビルド」を選択する
- [ビルド]の[ビルド手順追加]で「シェルの実行」を選択する
- [シェルスクリプト]の部分に実行させたいコマンドを書く  
※デフォルトのままだと実行ユーザーは**jenkins**になるので注意
- [定期的に実行]にチェックを入れる
- [スケジュール]に実行スケジュールを書く  
※crontabと同じフォーマットで書ける
- [保存]ボタンを押す

## まとめ
- RaspberryPiだとJenkinsのポータルでの操作に少し待たされることが多い
- **crontab -e**よりはいい感じ
- 安定してジョブを実行してくれるかは経過観察が要るかな？
技術英語 >The system might replace the erroneous value with [a phony value]

@ Code Complete (No. 2489 / 36077)

> The system might replace the erroneous value with a phony value that it knows to have a benign effect on the rest of the system

http://eow.alc.co.jp/search?q=phony&ref=sa
> 偽物、まがい物、いんちき、ペテン師、まやかし

benign effectなので「無害である」のだろう。
ただ、想定していた通りに動かないという点ではまずい。
rubyとpython、httpd性能で大違い

<b>pythonのhttpdは弱いです。</b>
pythonで動画を再生すると細切れに再生。
rubyだと一部ブラウザ（クロム）で動画再生不可ですが、
rubyのWEBlickは、Appach級。

![スクリーンショット 2016-07-11 4.03.27.png](https://qiita-image-store.s3.amazonaws.com/0/5135/825cc01a-ee5b-6c95-6587-920f234a9227.png)


ただ困るのは、rubyのWEBlickが、クロムで動画再生できないこと。
全てのmimeタイプがdownloadされてしまう。
FFやSafariなら問題なし。
ショートカットのリンク先ファイルを一括保存するバッチファイル (PowerShell)

# 目的
共有ディレクトリ上の Excel 方眼紙をみんなで(ロックしあって|ブック共有して)編集しながら作業してる場合、
バージョン管理よりもとりあえず短期的にバックアップとりたい場面が多かったため、こんなスクリプト頻用してました。

※バージョン管理もバックアップもどちらも必要で、別目的・別タイミングで実施という方針

今必要な関連ファイルのショートカットをたくさんぶちこんだ作業用ディレクトリを作って
起動短縮＆バックアップ迅速化という運用です。


## 確認した環境
* Windows 7
* PSVersion 2.0

## コード

```ps1:ショーカット一括保存するバッチファイル.bat
@powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[scriptblock]::create((gc \"%~f0\"|?{$_.readcount -gt 1})-join\"`n\");&$s" %*&goto:eof

#ただし実体は PowerShell

try {
  $fromDir = 'バックアップしたいショートカットが詰まったディレクトリ'
  $toDir   = "${fromDir}-backup" + (date -format 'yyyyMMdd-HHmmss')   # $fromDir 末尾がフォルダ区切り文字でない想定
  
  $shell = New-Object -ComObject WScript.Shell
  $files = $(dir "${fromDir}/*.lnk" | %{$shell.CreateShortcut($_).targetPath })
  
  if ($null -eq $files) {
    echo "$fromDir is empty."
  } else {
    mkdir -force "${toDir}" > $null
    $files | %{
      if (test-path -LiteralPath "$_") {
        copy -Recurse -LiteralPath "$_" "$toDir"
      } else {
        Write-Warning "'$_' not found."
      }
    }
    echo 'copy finished.'
  }
} finally {
  Read-Host 'pause...  '
}

```

## 注意
> [バッチファイルから PowerShell を呼び出す方法](http://qiita.com/cd01/items/82829ba0ec0f59e1b04d) by @cd01

を参考にしています。
コレを見て「こわわ…」って思わない方は使わないようにしましょう。

## 別用途
ショートカットではなくて一括で特定ディレクトリ以下を保存する場合とかは `$files` 辺りを書き換えればいけます
numpy.vectorizeの使い方

### 概要

pythonの科学計算モジュールnumpyの関数vectorizeの使い方にハマったので自分のためのメモ
ちなみに、今回は画像処理において入力画像のヒストグラム作成を例にとって本記事を投稿。

## numpy.vectorizeの目的

pythonの関数のうち引数に値をとるものにリストを突っ込めるように関数を変換する関数がvectorizeである。  入力のarrayの各値を引数として計算してくれるようになり、返り値はベクトル化される。

## numpy.vectorizeの使い方
まず返り値がリストでない関数を用意する。

```python:myfunc.py
def myfunc(a,b):
      return a+b

print myfunc("hoge","Hoge")
```
出力は以下のようになる。

```py
"hogeHoge"
```
  
このmyfuncにベクトルを突っ込むことを考える。

```py:myfunc.py
def myfunc(a,b):
      return a+b

list = ["hoge","fuga"]

print myfunc(list,"Hoge")
```

出力は次のようになってほしい。

```py
["hogeHoge","fugaHoge"]
```

しかし、実際は

```py
TypeError: can only concatenate list (not "str") to list
```
となる。もともとリストを引数とするように定義されていないからである。
しかし、myfuncをnumpy.vectorizeでベクトル化することで期待通りの出力を得られる。

```py
vfunc=numpy.vectorize(myfunc)
print vfunc(list,"Hoge")
```
出力は

```py
["hogeHoge","fugaHoge"]
```
とリストが返ってくる。これで関数のベクトル化が達成できた。

## 実践例

もっと実践的な例を残しておく。画像処理で入力画像のヒストグラムをつくる関数をつくる。

```py
import numpy as np
import cv2
from matplotlib import pyplot as plt

# ヒストグラム作成用の関数
def img_hist(src,bins_array):
        x = np.where(src==bins_array,1,0)
        count = np.count_nonzero(x)
        return count
# ベクトル化
vhist = np.vectorize(img_hist)
vhist.excluded.add(0) # 0番目の引数は固定のベクトルとしてそのまま関数に渡す

# ソースファイルとヒストグラムのbinを用意
src = cv2.imread("origin/LENNA.pgm",flags=0)
bins_array = np.arange(256)

# ヒストグラムを作成
hist_array=vhist(src,bins_array)

# ヒストグラムを可視化
plt.plot(bins_array,hist_array)
plt.show()
```
入力画像は定番のこれ

<img src="https://qiita-image-store.s3.amazonaws.com/0/133247/1c73b1f2-015a-2205-6d94-226dc03c6a04.png" width="320px">

結果として以下のようなヒストグラムが得られる。

<img src="https://qiita-image-store.s3.amazonaws.com/0/133247/a999972e-43dc-3b3b-101b-bcf3f71ddde8.png" width="320px">

## まとめ

* numpy.vectorizeの使い方を整理できた。
* なかなか便利で色々応用できるはず。~~forループをなるべく使わずにプログラミングできる。~~
* 追記(5年前の記事ですがいまだにたまにLGTM等の通知がくるので注意喚起の意味も込めて): numpy.vectorize は便利ですが、for文と比較してパフォーマンス面で優れているわけではないようです。(参考: https://numpy.org/doc/stable/reference/generated/numpy.vectorize.html Notesの部分)
* 本記事を執筆した当時の私は「pythonだしfor文は悪！」のような短絡的な思考をしていたなあと思われます。何事も用法容量を守って正しく使いましょう(自戒)
auditpolコマンドによる監査ポリシーの「プロセス追跡の監査」の有効・無効制御


# はじめに
Windows Server 2008R2で定期的(AM4時)にIISを再起動をしているのですが、不定期にIIS Adminサービスが正常に起動出来ずに停止と起動を繰り返し、最終的には7時に正常にサービスが起動される現象が発生しています。

# 調査
某N社に問い合わせると、イベント・ログを送って欲しいとのことで送ったのですが、送ったイベント・ログでは原因が特定できないので、監査ポリシーの「プロセスの追跡」を設定して欲しいとの依頼がありました。
設定するとプロセスの開始と終了をイベント・ログのセキュリティに記録されるようになるとのこと。

しかし、この設定するのをためらいました。
現行動作しているシステムでは、プロセスの開始と終了が日中かなり頻繁に行われているため、少ないとはいえ負荷がかかることとイベント・ログが膨れ上がるためです。

# 時間制限
監査ポリシーの「プロセスの追跡」の有効・無効をプログラムで制御が出来れば、発生している期間は4：00～7：00なので日中動かす必要がなくなります。
ネットで検索すると「auditpolコマンド」で制御できることが分かった。

* [システム監査ポリシーをプログラムで編集したい](http://maro-the-fatal-error.blogspot.jp/2015/11/blog-post.html)
* [2008：auditpol で使用可能な subcategory の一覧を取得する](https://blogs.technet.microsoft.com/junichia/2007/09/28/2008auditpol-subcategory/)

# バッチ
下記のバッチを作成した。
タスクスケジューラーで「プロセス開始」と「プロセス監視の停止」の２つを作成した。「プロセス監視の開始」では引数に”START”をセットする。
発生している期間は4：00～7：00なので、開始時間は3:55、停止時間は7：05とした。

```bat:プロセス監視
@ECHO OFF

IF "%1" == "START" (
call :SetConf enable
) ELSE (
call :SetConf disable
)

exit 0

:SetConf
auditpol /set /subcategory:"プロセス作成" /success:%1
auditpol /set /subcategory:"プロセス終了" /success:%1

exit /b
```

# 原因
木曜日に仕掛けると週明けの月曜日に早速発生したので、某N社にイベント・ログを送ったところ、ウィルスバスターのあるサービスがIIS Adminサービスと同じタイミングで動作しているとのこと。
しかしながら、ウィルスバスターのあるサービスを停止するわけにいかないと思っており、そのままにしている。

# 終わりに
現状では解決できていないが、この記事の目的はタイトル通りなので、また何か進展があれば追記したいと思います。
iTerm2の3.0.0以降で｢The bell is ringing ...｣のポップアップが出てくる

iTerm2の, 3.0.0以降に関する小ネタ(?)です.

つい先日, iTerm2 3.0.0をインストールしたのですが, それ以降｢The bell is ringing a lot｣といったポップアップが時折表示されるようになりました.
このポップアップが表示されると, iTerm2の上部2行がまるまる隠れてしまって, 正直言って**非常に使いづらい**です.

調べてみると, ｢[iTerm2: "The bell is ringing a lot" - How to Actually Suppress it](http://www.unenglishable.com/iterm2/)｣という記事があり, こちらにこのポップアップを無効化する方法が書かれていました.
具体的には,｢Preference｣から｢Advanced｣を選び, ｢Suppress offer to silence bell when it rings too much.｣を｢No｣から｢Yes｣に変更すればOKとのこと.

もし｢The bell is ringing ...｣のポップアップにお困りのようでしたら, お試し下さい.
openFrameworksでofxSyphonで映像を受け取る

#ofxSyphonは映像送るのにしか使ってないぜ！

- ofxSyphon
 - [GitHub - astellato/ofxSyphon: An OF add-on for using the Syphon framework.](https://github.com/astellato/ofxSyphon)

[昔はメチャ扱いにくいaddonとして悪名高かった](http://qiita.com/okawaryota/items/5ed9d975382caf7bfa9b)ofxSyphonも、0.9.0からのprojectGeneratorパイセンによって余計な手間が必要なくなり、だいぶ扱いやすくなりましたね。

- [OpenFrameworksでSyphonを使用する - Qiita](http://qiita.com/tai_fukaya/items/2ac62442ffc004089126)

もっぱらofxSyphonは、**oFでジェネったやつをVJソフトに送るためにoF→Syphonは使う**けど、そういうときはだいたいVJソフト側で勝手に読み込んでリストアップしてくれるから困ることはない。


**逆になんかからSyphonで受け取ったやつをoFで読む、というのはほとんど使わない。** oFでなんかやりたいときくらい。だからWebにリファレンスもほとんどない。それでハマった。


##ofxSyphonのexampleより
<img width="673" alt="スクリーンショット 2016-07-11 2.16.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/77da180a-1099-5367-839a-dd65981a53d4.png">


ofxSyphonのexample-Basicにはこのように書いてある。こうするとSimple Serverの映像を受け取れる。
<img width="1066" alt="スクリーンショット 2016-07-11 2.24.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/13fb44fd-817a-0821-be1e-4cb554e674b9.png">


##Simple Serverじゃない映像を出す
Simple Serverのときは簡単。でも例えばProcessingからSyphonのClientに送るときは、`Processing Syphon - circleGenerateSyphon`のように２つの部分に分かれる。（ファイル名長くてすみません）
<img width="475" alt="スクリーンショット 2016-07-11 2.18.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/f2f99bb4-b380-7a81-1a4f-9f676cc2cf9f.png">

これをどうしたらいいかでしばらくハマった。これを`mClient.set("","Processing Syphon - circleGenerateSyphon")`と置き換えてもうまくいかない。


#正解はこれ
`mClient.set("Processing Syphon","circleGenerateSyphon")`
これだけ。ここに気づくまで１時間かかった。


#はい、おめでとう
<img width="1028" alt="スクリーンショット 2016-07-11 2.28.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/adc8b990-1c64-a0d1-f13d-92ab9ed2969f.png">

![スクリーンショット 2016-07-11 1.03.59.png](https://qiita-image-store.s3.amazonaws.com/0/77925/102b4148-dcf0-92b5-dd77-9379d77e06e1.png)


##ちなみに
Processing→Syphonで背景を透過させるには
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13120228093
↓
`canvas.background(0,0,0,0);`
のように、Syphonで出すPGraphicsの背景のアルファを0にすればOK。なんか変な感じ。


Processing→Syphonの参考

- [Processing3.0でSyphonを使用 – office606](http://office606.org/?p=42)
- [Tutorial: Using Syphon with Processing to stream video into MadMapper | Marcos can Type](https://socram484.wordpress.com/2013/09/12/using-syphon-with-processing-into-madmapper/)
Androidでnativeをやるときにハマッたこと　その１

聞くと超しょうもないことかもしれないが、２時間ぐらいはまったことがある。
ターミナルで[ndk-build]をやろうとしたところAndroid.mkが見つからんと言われたのだ。

構成てきにはmain/jni/jp/co/hogehoge/android.mk javaふぁいるを置く構成と同じようにやったら見つからんぞ！という状態になった。
たぶんやり方はあるのだろうけど何もわからない場合は素直にjni直下に置くほが何事も苦労しないのだろう・・・・・。
C++でcsvとかtxtの入力

整数値のcsvなりtxtのファイル(カンマ区切りとかスペース区切り)を読みこませる方法を毎回ググってるので、二度としないようにメモ。

この例は、[Zachary karate club](http://konect.uni-koblenz.de/networks/ucidata-zachary)のデータを用いています。

```reader.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>

std::vector< std::vector< int > > A(100, std::vector<int>(2));

int main(){
	std::ifstream ifs("karate.txt"); // ファイル読み込み
	/*
	1 2
	1 3
	2 3
	…
	*/
  if(!ifs){
		std::cout<<"Error!";
    return 1;
  }
	std::string str;
  int line = 0;
  int i = 0;
  int j = 0;
  while(getline(ifs,str)){
		std::string token;
		std::istringstream stream(str);
		while(getline(stream,token,' ')){ // スペース区切り
			int temp = stoi(token); //文字列で読み込まれるため、整数へ変換
      i = line / 2; // このデータ特有のもの
			j = line % 2; // このデータ特有のもの
			A[i][j] = temp; // 代入
			std::cout << "A[" << i << "]""[" << j <<"] = " << temp << std::endl;
			line++;
		}
  }
	std::cout << line << std::endl;
	for (int tmp_i = 0; tmp_i <= i; tmp_i++) {
		for (int tmp_j = 0; tmp_j <= j; tmp_j++) {
			std::cout << A[tmp_i][tmp_j] << " ";
		}
		std::cout << "" << std::endl;
	}
	return 0;
}

```

あくまで出力は、めっちゃしてます。
実際のデータだともっと処理は必要そうですね。

参考
[C++ csvファイルの入出力 - Qiita](http://qiita.com/satoshi91_fe/items/8871a0703c93c8a1aa5f)
phpQueryで数字が消えたとき

# 前提
PHPを使ってスクレイピングする必要があった。
導入が簡単そうなphpQueryを利用することにした。
なんかjQueryぽく書けるし敷居が低い気がしたんですよ。

```php
$dom = phpQuery::newDocument($html);
$hoge = $dom['.hoge table'];
foreach ($hoge->find('tr') as $tr) {
    echo trim(pq($tr)->find('td')->text());
}
```

# 現象

サンプル通りに書いたら、某サイトだけ文字化けした。HTML見たら

```html
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
```

だったので文字コード変換した。

```php
$dom = phpQuery::newDocument(mb_convert_encoding($html, 'HTML-ENTITIES', 'EUC-JP'));
```

よし文字化け直っ...あれ、数字（半角）だけ取得できてない。なにそれ。

# 解決方法
ググっても全然わからなかったのでPHPくわしいひとにきいた。
「全半角混ぜるな危険」との事だったので、混ぜないようにした。

```php
$html = mb_convert_kana($html, "N", 'EUC-JP');
$dom = phpQuery::newDocument(mb_convert_encoding($html, 'HTML-ENTITIES', 'EUC-JP'));
$hoge = $dom['.hoge table'];
foreach ($hoge->find('tr') as $tr) {
    $text = trim(pq($tr)->find('td')->text());
    echo mb_convert_kana($text, "n");
}
```

kwsk

```php
$html = mb_convert_kana($html, "N", 'EUC-JP');
```
ここで半角数字を全角にする。

```php
mb_convert_kana($text, "n");
```
ここで全角数字を半角にする。

これで無事、「100万畳」みたいな文字が取得できた。

Q.もとの要素に全角数字があったら？
A.半角になります。文句あるか。

# 原因
開発環境（codeanywhere PHP 5.4.36）だと発生しなくて、本番環境（lolipopサーバー PHP 5.5.35）だと発生した。
深追いしたくないので調べてない。
Excelを使わず.xlsで開けるファイルをHTMLとCSSで作る

WEBサーバなど、Excelがインストールされていない環境でExcel形式のファイルを作る場合、
Javaだったら[Apache POI](https://poi.apache.org/)とか使ったりする。

ここにいろいろなやり方が載っていた・
[サーバサイドでExcelブックを生成するいくつかの方法](http://qiita.com/matarillo/items/549493f6bb7e36c99443)


そこまでちゃんとExcel形式のファイルじゃなくても、
Excelで開けて罫線とか色とか設定できるだけでいいだけとという場合は、
HTML形式で作ってそれを拡張子「.xls」で保存するだけでも表組みが使える。
※ただし、内容と拡張子が一致していないので壊れている。。の警告メッセージは出てしまう。

これが

```html
<html>
<body>
<table　border="1" >
<tr>
<th style="color:white;background-color:gray" >項目１</th>
<th>項目２</th>
<th>項目３</th>
</tr>
<td>値１</td>
<td>値２</td>
<td>値３</td>
</tr>
</table>
</body>
</html>

```

こうなる。

![htmlexcel.png](https://qiita-image-store.s3.amazonaws.com/0/34699/b82fbba9-99bc-c6bd-a22f-23989743f73b.png)

headタグ内にstyleタグを指定しても反映されないので
直接要素にstyleを指定する必要がある。


もう少しちゃんとしたExcelの表が作りたければ
XML Spreadsheetを使うのが簡単。
一定のルールに沿ってxmlをかけばExcelの表などが作れる。複数シートも作れる。
（図形・チャート・VBAは使えない。）
[XML Spreadsheet Reference](https://msdn.microsoft.com/en-us/library/aa140066.aspx)を見て記載するのは面倒なので、
完成系のexcelテンプレートを作って、「名前を付けて保存」の時に、「XMLスプレッドシート2003」を選んで保存する。この内容を参考にプログラムで動的に生成すると良い。

Excel2000の時代だと「XML Spreadsheet」はなかったんだけれど、
「名前を付けて保存」の時に、「Webページ(*.htm;*.html)」で保存すると「XML Spreadsheet」に似た形式のhtmlが生成されるので、これを.xlsにリネームしてExcelで開くファイルを作ることができた。

図やグラフが入っている場合は、Excel2000だとVML形式に変換されていたので、VMLを動的に生成して図やグラフ表示とかできていたのだけど
Excel2013だと、画像に変換されてしまっていたのでこの技が使えなかった。

試しに
[旧約 『オートシェイプの秘密基地』](http://www.k2.dion.ne.jp/~norih/oldashp.htm)
ここを参考にvmlのファイルを作成。拡張子を.xlsにして開いてみたところ。


![図形.png](https://qiita-image-store.s3.amazonaws.com/0/34699/be739af7-b447-49c3-8600-33560a003701.png)

ちゃんとVML形式を認識して図形ができた。ということはグラフとかもいけるのでは、と思うんだけど
自力でVML形式を作るのはちょっと辛いので、別の方法でやったほうが良いかも。