OmniAICreator/Qiita-1.07M huggingface dataset:
DatePickerで「年月」に合わせてカレンダを制御

# 「年月」に合わせてカレンダを制御
* http://qiita.com/fujimohige/items/77321c15fb89a822806d
* 前に書いた↑の内容があまりにアレなので、「年月」と連動するよう変更


```js:javascript

$(function() {
    // カレンダ制御
    setDatePicker();
});

// 年月が変更されて、整合が取れなくなったらカレンダクリア
function changeYearMonth() {
    if( $("#oneOneData").val() != $("#dateText").val().substring(0,7)) {
        $("#dateText").val("");

        // カレンダリフレッシュ
        $('#dateText').datepicker("destroy");
        setDatePicker();

    }
};

function setDatePicker() {

// 「年月」で選択されているyyyy/mmより後の年月日はカレンダに表示しないよう制御
// 「年月」の年月の翌月の1日からマイナス1日することで「年月」の最終年月日を取得
    var minCal = new Date($("#oneOneData").val() + "/01");
    var maxCal = new Date($("#oneOneData").val() + "/01");
    maxCal.setMonth(maxCal.getMonth() + 1);
    maxCal.setDate(maxCal.getDate() - 1);

    // datePickerのメイン制御
    $('#dateText').datepicker({
        dateFormat: 'yy/mm/dd',
        showOn:     "button",
        buttonText: "選択",
        numberOfMonths: 1,
        minDate: minCal,
        maxDate: maxCal
    });

}


// 月度と年月日の整合性チェック
function checkDate() {
    var vDate = $("#dateText").val();
    if (vDate == "" ) {
        // 年月日がクリアされた場合は何もしない
    } else {
        if (vDate.substring(0,7) != $('#oneOneData').val()) {
            // 月度と年月日が不整合の場合はメッセージを表示（入力値のクリアは行わない）
            alert("年月と年月日が揃っていません");
        }
    }
}

```

```html:HTML
    <div id="oneOneLabel">年月</div>
    <select id="oneOneData" onchange="changeYearMonth();">
        <option value="2014/01">2014/01</option>
        <option value="2014/02">2014/02</option>
        <option value="2014/03">2014/03</option>
        <option value="2014/04">2014/04</option>
        <option value="2014/05" selected>2014/05</option>
    </select>

    <div id="oneTwoLabel">年月日</div>
    <div id="hoge">
        <input type="text" id="dateText" onchange="checkDate();"  >
    </div>
```

* jsの作法がいまだに全くわかりません。
MacのSSHクライアントで接続したサーバから切断されないようにする


## 背景

MacのターミナルやiTerm2にてサーバに接続しているのですが、時間が経つと切断されてしまうので対応メモです。

## 設定

[こちらの内容を参考](http://scribble.washo3.com/mac/osx-ssh-keep-alive.html)にさせていただきました。助かりました！
.ssh/configに以下のように書いておくと良いみたいでした。

```.ssh/config
ServerAliveInterval 300
TCPKeepAlive yes
```

## 参考にしたサイト

* [MacのSSHクライアントでkeep-alive](http://scribble.washo3.com/mac/osx-ssh-keep-alive.html)
Chrome Native Client を Travis-CI で自動ビルドする方法

Chrome Native Client (NaCL/PNaCL) を Travis-CI で自動ビルドする方法です。

# Travis-CI にプロジェクトを登録
通常のプロジェクトと同じように登録し、GitHub と連携させておきます。

# .travis.yml を作成
NaCL/PNaCL のコンパイル関係ツール (SDK) が Python (2.7x) で書かれているため、Python のプロジェクトとして作成します。Travis-CI は Ubuntu で動作しているため、はじめに apt-get で必要なツールを導入します。NaCL SDK には、32 bit 版の GCC が必要です。

その後、SDK を用いてコンパイルします。pepper_37 としている部分は、ターゲットとする Pepper API のバージョンに合わせてください。

```
language: python
python:
  - "2.7"
install:
  - sudo apt-get update -qq
  - sudo apt-get install -qq libc6-i386 lib32gcc1 lib32stdc++6
  - wget http://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/nacl_sdk.zip
  - unzip nacl_sdk.zip
  - cd nacl_sdk
  - ls
  - ./naclsdk list
  - ./naclsdk update pepper_37
  - ls
  - export NACL_SDK_ROOT="`pwd`/pepper_37"
  - echo $NACL_SDK_ROOT
  - cd ..
  - ls
script: make
```

# 利用例
- TenhoSimulator<br />
https://github.com/pine613/TenhoSimulator
シェル変数と環境変数の違いをコマンドラインで確認する

最近、調べ直したので、この機会にまとめておきます。
### はじめに

> **シェル変数**は現在実行中のシェルだけで有効な変数ですが，**環境変数**はシェルから実行したコマンドにも引き継がれる変数です。
> 再入門　体で覚えるLinuxの基本：ITpro http://itpro.nikkeibp.co.jp/article/COLUMN/20060620/241337/

絵にすると↓な感じでしょうか。これをコマンドで確認していきます。

![環境変数シェル変数.png](https://qiita-image-store.s3.amazonaws.com/0/50690/d0a6584d-458d-0f06-6fe4-a3b34e31415e.png)

### シェル変数の基本

「=」を使用することで変数を格納出来ます。また、変数の先頭に‘$’をつけることで、格納された値を参照出来ます。

```sh:CLI
[root@localhost ~]# echo $HOGE
[root@localhost ~]# HOGE=hogehoge
[root@localhost ~]# echo $HOGE
hogehoge
```

### 環境変数について

上記は「シェル変数」と言われ、そのシェル内でのみ有効な変数です。例えば、以下のようなシェルスクリプトを用意し、

```sh:hoge.sh
#!/bin/sh
echo ${HOGE}
```

実行しても、何も表示されません。

```sh:CLI
[root@localhost ~]# sh hoge.sh
　　
```
しかし、「export」をつけると、その変数が「環境変数」となり、子プロセスでも有効になります。今度は、シェルスクリプトから変数の呼び出しに成功しています。

```sh:CLI
[root@localhost ~]# export HOGE
[root@localhost ~]# sh hoge.sh
hogehoge　←表示される
```

### 逆に子の環境変数を親に引き継ぐには
基本的には、子の環境変数を親が使うことは出来ません。
試しにシェルスクリプト内で環境変数を定義してみますが、その環境変数は親のシェルでは有効ではありません。hoge2.shを作成し、テストしてみます。

```sh:CLI
[root@localhost ~]# cat hoge2.sh
#!/bin/sh
HOGE2=hoge2
export HOGE2
[root@localhost ~]# sh hoge2.sh
[root@localhost ~]# echo $HOGE2
　　←何も表示されない
```
しかし、「source」コマンドを使うと、現在のシェルに環境変数を定義出来ます。

>source hoge とするのは、ファイル hoge に書かれた文字列を一つずつ自分の手でタイプしたのと同じことである。
UNIXの部屋 コマンド検索:source (*BSD/Linux) http://x68000.q-e-d.net/~68user/unix/pickup?source

```s:CLI
[root@localhost ~]# source hoge2.sh
[root@localhost ~]# echo $HOGE2
hoge2
```

##参考

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00TQMFOCW/kuredev-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51SDwVGgwHL._SL160_.jpg" alt="まんがでわかるLinux　シス管系女子（日経BP Next ICT選書）" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00TQMFOCW/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">まんがでわかるLinux　シス管系女子（日経BP Next ICT選書）</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 16.02.24</div></div><div class="amazlet-detail">日経BP社 (2015-02-19)<br />売り上げランキング: 4,730<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00TQMFOCW/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>
Swiftでブロック崩し

#はじめに#
Swift言語の練習として作成
Sprite Kit を使用

参考にしたサイト
[Sprite Kitでブロック崩し](http://qiita.com/tnantoka/items/5c24e72dc569da1c9b62)
[[Swift] SpriteKitでシーンの遷移をデリゲート使ってやる方法。](http://qiita.com/mochizukikotaro/items/1ceae6f2d426b39605a7)
#ソース#
https://github.com/konpeto000/breakout/tree/master/breakout
#イメージ#
![breakout.gif](https://qiita-image-store.s3.amazonaws.com/0/57208/b40d3a60-e1f0-7a04-762c-1bfea3f274f0.gif)
#過程#
File->New->ProjectからiOS->Application->Gameを選択しGame TechnologyをSprite Kitで作成
File->New->File..からiOS->source->SwiftFileから新しくGameOver.swiftとEscapeProtcol.swift作成
#考察・反省#
作る過程で使う変数を増やしていったため汚いソースコードになってしまった
シーンの遷移、デリゲートがいまいち理解できていないため勉強する必要がある
ファイルアクセスについて勉強しスコアを記録できるようにしてみようと思う
#感想#
何もわからない状態から理解するのはかなり苦労した
英語を読めるようにしないとなぁ...
#追記#
ブロックに体力を持たせました
->userDateを使用
ハイスコアを記録するようにしました
->NSUserDefaultsを使用
Gruntの初期設定について

gruntの初期設定が辛すぎたので、手順を記載。


今回入れたのは
1. grunt-watch
2. grunt-contrib-compass
3. grunt-contrib-uglify
4. grunt-typescript


# インストール方法
##① gruntをインストール
terminalを立ち上げてgruntをインストール（間違えてgemとかしないように。）macなので、sudoをつける。
ちゃんとgruntをインストールしていないと後の作業でエラーがでるのでnpm listとかしてインストール済みか確認する。

```rb:ターミナル上のコマンド
sudo npm install -g grunt-cli
```

##② finderでprojectがあるフォルダを開く
初期ファイル一式を作りたいフォルダをcdと打ってからターミナルへドラッグしてエンター

```rb:ターミナル上のコマンド
cd 該当ファイルのパス
```

##③ 初期ファイルの生成
project.jsonが生成される
gruntのインストール

```rb:ターミナル上のコマンド
npm init
npm install grunt --save-dev
```

同じ階層にGruntfile.jsを置く
ファイルはこんな感じ。

```rb:Gruntfile.jsのソース
module.exports = function(grunt) {
	var pkg = grunt.file.readJSON('package.json');
		grunt.initConfig({
	});
}
```

##④ プラグインのインストール
--save-devをつけるとjsonにプラグイン名を入れてくれる
インストールするとnode_modulesフォルダに追加されているか確認してください。

```rb:ターミナル上のコマンド
npm install インストールするプラグイン名 --save-dev
```

##⑤ プラグインの設定
Gruntfile.jsの中身記述

```rb:Gruntfile.jsのソース
module.exports = function(grunt) {
	var pkg = grunt.file.readJSON('package.json');

	//プラグインごとの設定
	grunt.initConfig({
		compass: {
			dist: {
				options: {
					config: 'config.rb'
				}
			}
		},
		watch: {
			uglify: {
				files: ['./js/*.js'],
				tasks: ['uglify']
			},
			scss: {
				files: ['./scss/*.scss'],
				tasks: ['compass'],
				options: {
					livereload: true,
					nospawn: true
				}
			},
			script: {
				files: ['./ts/*.ts'],
				tasks: ['typescript']
			}
		},
		uglify: {
			build:{
				options:{
					report: 'minify',//'gzip'
					mangle: true,
					compress: true,
					beautify: false
				},
				src: ['./js/typeclass.js'],
				dest: './js/onload.js'
			}
		},
		typescript: {
			base: {
				src: ['./ts/typeclass.ts'],
				dest: './js/typeclass.js',
				options: {
					module: 'amd', //or commonjs
					target: 'es5', //or es3
				}
			}
		}
	});

	//grunt.loadNpmTasks('grunt-jslint');//まだ設定してない。
	grunt.loadNpmTasks('grunt-contrib-uglify');
	grunt.loadNpmTasks('grunt-contrib-watch');

	//ここからはお好み
	grunt.loadNpmTasks('grunt-contrib-compass');
	grunt.loadNpmTasks('grunt-typescript');


	// デフォルトタスクなどのタスク名を設定
	grunt.registerTask('default', ['watch','jslint','compass','typescript','uglify']); 
}
```


##⑥ grunt起動
ターミナルにgruntと打つと自動化の開始。
watchはcompassとおなじでctrl+cで終了。

```rb:ターミナル上のコマンド
grunt
```
最近の6TB HDDまとめ

6TBのHDDが出そろってきたので、ひとまずまとめた。ベンダー供給品(OEM)についてはまとめていない。価格は2014年10月27日現在価格.com調べ(0S03842は取り扱いがないのでアークの価格)。

|ブランド                     | 品番                          | 価格    | 回転数  | キャッシュ | 内部速度  |
|:---------------------------|:------------------------------|--------:|--------:|-----------:|--------------:|
|WESTERN DIGITAL Green       | WD60EZRX                      | ¥25,779 | 非公表  | 64MB       | 175MB/s        |
|WESTERN DIGITAL Red         | WD60EFRX                      | ¥29,420 | 非公表  | 64MB       | 175MB/s        |
|Seagate Enterprise Capacity | ST6000NM0024                  | ¥55,980 | 7200rpm | 128MB      | 216MB/s       |
|HGST Ultrastar He6    | HUS726060ALA640               | ¥53,980 | 7200rpm | 128MB      | 177MB/s       |
|HGST Ultrastar 7K6000 | HUS726060ALE610               | ¥59,800 | 7200rpm | 128MB      | 227MB/s       |
|HGST Deskstar NAS     | 0S03842(HDN726060ALE610)      | ¥37,980 | 7200rpm | 128MB      | 246.25 MB/s   |

- WESTERN DIGITALはコンシューマ向けのGreen、Redモデルのみで、エンタープライズ向けのモデルは見つからなかった。
- WD Green、WD RedはIntelliPowerとよばれる可変回転数の仕組みを使っているので回転数は不明だ。
- Seagateはエンタープライズ向けではConstellationというブランドを使用していたが、いくつかのシリーズに別れたようだ。
- HGST Ultrastar He6はヘリウム充填式のHDDで液冷にも対応しているとのこと。
- HGST Deskstar NAS 0S03842は情報が少なく、データシートも公開されていないように見えるが、中身の型番はHDN726060ALE610とのことなのでUltrastar 7K6000のコンシューマ向けなんじゃないかなーと推測している。

## 参照元
- WESTERN DIGITAL Green WD60EZRX
  - http://www.wdc.com/global/products/specs/?driveID=1419&language=6
- WESTERN DIGITAL Red WD60EFRX
  - http://www.wdc.com/global/products/specs/?driveID=1413&language=6
- Seagate Enterprise ST6000NM0024
  - http://www.seagate.com/jp/ja/internal-hard-drives/enterprise-hard-drives/hdd/enterprise-capacity-3-5-hdd/#specs
  - http://www.seagate.com/www-content/product-content/enterprise-hdd-fam/enterprise-capacity-3-5-hdd/constellation-es-4/ja/docs/enterprise-capacity-3-5-hdd-ds1791-3-1403jp.pdf
- HGST Ultrastar He6 HUS726060ALA640
  - http://www.hgst.com/hard-drives/enterprise-hard-drives/enterprise-sas-drives/ultrastar-he6
- HGST Ultrastar 7K6000 HUS726060ALE610
  - http://www.hgst.com/hard-drives/enterprise-hard-drives/enterprise-sas-drives/ultrastar-7k6000
- HGST Deskstar NAS 0S03842(HDN726060ALE610)
  - http://akiba-pc.watch.impress.co.jp/hotline/20140301/ni_c0s03663.html
  - https://www.ark-pc.co.jp/i/13110115/
Office XMLでエクセルにスタイルを設定する。

# Styles

## Style

| 属性 | 値 | 備考 |
|:----|:----|:----|
| ss:ID | 英数 | &lt;Cell ss:StyleID &gt; から呼び出す値 |

### Alignment 

| 属性 | 値 | 備考 |
|:----|:----|:----|
| ss:Vertical | Top | 上寄せ |
| ss:Vertical | Center | 中寄せ |
| ss:Vertical | Bottom | 下寄せ |
| ss:Horizontal | Left | 左寄せ |
| ss:Horizontal | Center | 中寄せ |
| ss:Horizontal | Right | 右寄せ |

### Borders

#### Border

| 属性 | 値 | 備考 |
|:----|:----|:----|
|ss:Position|Top|上罫線|
|ss:Position|Bottom|下罫線|
|ss:Position|Left|左罫線|
|ss:Position|Right|右罫線|
|ss:LineStyle|Continuous|実線|
|ss:LineStyle|Dash|破線|
|ss:LineStyle|Dot|点線|
|ss:Weight|2|罫線幅|

### Font 

| 属性 | 値 | 備考 |
|:----|:----|:----|
|ss:FontName|ＭＳ Ｐゴシック|フォント|
|ss:Size|11|フォントサイズ(pt)|
|ss:Color|#000000|フォントカラー|

### Interior

| 属性 | 値 | 備考 |
|:----|:----|:----|
|ss:Color|#2F75B5|背景色|
|ss:Pattern|Solid|背景色パターン|


### NumberFormat

| 属性 | 値 | 備考 |
|:----|:----|:----|
|ss:Format|0000000000|ゼロ詰め|
|ss:Format|#,##0|数値（カンマ区切り）|
|ss:Format|000-0000|数値（郵便番号）|
[bash] スペースが入ったファイル名の処理


スペースを含んだファイル名を bash で操作しようとした時にハマったので、メモ。
基本は`ls *.txt`などの出力を文字列として扱わず、ファイルパスとして扱えば良い。

例えば、下記のような bash があったとする。

```bash
touch a.txt
touch b.txt
for file in `ls *.txt`
do
  ls "${file}"
done
```
このケースではちゃんと動くが、ファイル名にスペースを含んだ場合は動かなくなる。

```bash
touch I\ and\ you.txt
for file in `ls *.txt`
do
  ls "${file}"
done
# 下記のように別々のファイルとみなされる
# ls: I: No such file or directory
# ls: and: No such file or directory
# ls: you.txt: No such file or directory
```
なぜ動かないかと言うと`ls *.txt`の出力が文字列として評価され、次のように展開されているから。たとえば、`ls *.txt`をダブルクオーテーションとかで囲んでも同じエラーになる。

```bash
for file in I and you.txt
```

これの解決策をふたつ。まずは単純にワイルドカードを使う例。

```bash
touch I\ and\ you.txt
for file in *.txt
do
  ls "${file}"
done
```
こうすれば文字列として認識されないので、1ファイル毎動く。ただ、これだと使いづらい。例えば find とかで見つけたファイルを処理する場合は、次のように行う。

```bash
touch a\ and\ b.txt
find . -name '*.txt' | while read file
do
  ls "${file}"
done
```

シングルクォートを含んだファイルも同様に対応可能。

```bash
#シングルクォートのハイライトが変ですね Qiita さん
touch eiji\'s.txt
find . -name '*.txt' | while read file
do
  ls "${file}"
done
```

しかし、ここで問題が発生する場合も。例えば、ファイル名を配列に入れたい場合に次のように記述すると失敗する。

```bash
touch a.txt
touch b.txt
touch a\ and\ b.txt
files=()
find . -name '*.txt' | while read file
do
  files+=("${file}")
done
echo "${files[@]}"
```
これは、スペースが入ってるとかでは無くて、パイプの前後でプロセスが別になるため、`files`にファイル名が足されないのが原因。

これを解決するには、[パイプ出力を**現在のシェル**上のwhileに喰わせる上手いやり方](http://qiita.com/kawaz/items/6fd4cd86ca98af644a05)が参考になる。

```bash
touch a.txt
touch b.txt
touch a\ and\ b.txt
files=()
while read file
do
  files+=("${file}")
done < <(find . -name '*.txt')
echo "${files[@]}"
```
doneの後ろの`<`と`<`が離れているのがポイント。
見てしまえば、なるほどな、と思うが、思いつかないなー。
普通にperlとかに逃げそうｗ。
vCenter Converter 5.xの有償サポート

# 概要

vCenter Converter Standalone 5.xは無償製品だが、vCenter Serverの購入およびサポート契約があるか、インシデント単位での支払いをすれば窓口でのサポートを受けられる。

# 詳細

vCenter Converter Standalone 5.xは無償製品だが、有償サポートを受ける方法が「[VMware KB: Support entitlement for VMware vCenter Converter Standalone 5.x (2007410)](http://kb.vmware.com/kb/2007410)」で提示されている。2014年9月28日更新時点での情報によれば、以下の方法がある。

* vCenter Server製品を、または以下のいずれかのキットを購入していれば、vCenter Converter Standalonについても問合せられる。
  * Essentials Plus Kit
  * Standard Acceleration Kit
  * Enterprise Acceleration Kit
  * Enterprise Plus Acceleration Kit
* [VMware Store](https://www.vmware.com/vmwarestore/support/buyconvertersupport.html)で問合せごとの支払い（Pay per Incident）を行うことも可能（おそらく「[Per Incident Support - vCenter Converter](http://store.vmware.com/store/vmwjapan/ja_JP/pd/productID.284357100)」を購入）。

## サポート期間

基本的なサポート期間は、メジャーリリースの公開（General Availability）から2年か、最新版の公開から1年（ただし次のメジャーバージョンが出るまで）。

サポートポリシーとして、ESXiやvCenterに適用されている[EIP](http://www.vmware.com/jp/support/policies/enterprise-infrastructure/faq.html)は5年だが、vCenter Converter Standaloneには[EAP](http://www.vmware.com/jp/support/policies/enterprise-application.html)が適用されており、期間が違うので注意したい。各製品、各バージョンのサポート期間や適用されるポリシーは、「[VMware 製品のライフサイクル ポリシー](http://www.vmware.com/jp/support/policies/lifecycle.html)」からリンクされている「[製品ライフサイクルマトリックス](http://www.vmware.com/files/jp/pdf/support/Product-Lifecycle-Matrix.pdf)」に記載されている。

## OEMベンダサポート

vCenter Server製品またはキットを、OEMベンダから購入していて、サポート窓口もこちらになる時は、念のためサポート状況を確認しておくほうがよさそう。例えば「[日本HP - ITサービス「保守サービス：ソフトウェアサポート対象製品リスト」](http://h50146.www5.hp.com/services/cs/availability/sw/list/)」には、2014年10月28日現在、以下のようにある。

> ※VMware Converter Standaloneは無償提供される製品となりましたため、2013年12月31日をもってHPからの保守提供を終了させていただきます。

ただし、vCenter Server購入者への保守提供については、この文言からはどちらとも判断がつかない。個別に窓口に問合せる必要があると思われる。

## 参考

* [VMware KB: Support entitlement for VMware vCenter Converter Standalone 5.x (2007410)](http://kb.vmware.com/kb/2007410)
* [VMware 製品のライフサイクル ポリシー](http://www.vmware.com/jp/support/policies/lifecycle.html)
Genymotionでadbが起動できない"adb server is out of date. killing…"が出た時の対応

###事象
Android SDKを最新(21)にした後に、GenymotionでEclipseやAndroid Studioからアプリが起動しなくなる。ターミナルからadbを見てみると、以下のようなメッセージがでてくる。

```
$ adb devices
adb server is out of date.  killing...
cannot bind 'tcp:5037'
ADB server didn't ACK
* failed to start daemon *
```

またEclipseでアプリをrunすると、以下のようなメッセージがコンソールログにでる

```
 The connection to adb is down, and a severe error has occured.
 You must restart adb and Eclipse.
 Please ensure that adb is correctly located at '/Applications/sdk/platform-tools/adb' and can be executed.
```

###原因
GenyMotionが内部で利用しているadbが最新SDKでは利用ができなくなっている模様。

###対応
SDKのadbを参照するようにシンボリックリンクを貼る

事前にgenymotionのエミュレータは停止しておく。
1.genymotionのadbをbackupとっておく。

```
$ cd /Applications/Genymotion.app/Contents/MacOS/player.app/Contents/MacOS/tools/
tools $ ls
aapt	adb
tools $ mv adb adb-old
```

2.SDKのadbのシンボリックリンクを貼る

```
$ ln -s /Applications/sdk/platform-tools/adb adb
tools $ ls -all
total 6168
drwxr-xr-x@ 5 tomoaki  admin      170 10 28 12:31 .
drwxr-xr-x@ 8 tomoaki  admin      272 10  7 19:41 ..
-rwxr-xr-x@ 1 tomoaki  admin  1494864 10  7 19:41 aapt
lrwxr-xr-x  1 tomoaki  admin       36 10 28 12:31 adb -> /Applications/sdk/platform-tools/adb
-rwxr-xr-x@ 1 tomoaki  admin  1657696 10  7 19:41 adb-old
```

3.プロセス上に残っているadbを一度killする

```
$ adb kill-server
$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 

```

4.Genymotionを起動すると、うまく接続できる

追記：Genymotionの設定からADBの参照先を変更できるようです。

![スクリーンショット 2014-10-29 9.53.21.png](https://qiita-image-store.s3.amazonaws.com/0/39433/f895db00-4f5b-b951-a44e-5ada1867ee2f.png)

###参考

http://codetheory.in/adb-genymotion-upgrade-issue-devices-not-showing-up/
Solaris10の不要パッケージをまとめて消す

#Solaris10の不要パッケージをまとめて消す
毎回pkgrmするのが面倒だったのでスクリプト化した。
root権限で実行してください

##事前にいらないサービスを止めておく
`inetadm -d svc:/application/graphical-login/cde-login`
`inetadm -d svc:/application/cde-printinfo`
`inetadm -d svc:/system/webconsole`
`inetadm -d svc:/network/rpc/cde-ttdbserver`
`inetadm -d svc:/network/rpc/cde-calendar-manager`
などなど


```sh:remove_package.sh
#!/bin/sh
PACKAGE_LIST=/var/tmp/remove_packages

/usr/bin/pkginfo | /usr/bin/egrep "(SUNWmcon|SUNWmconr|SUNWjmctg|SUNWjmcon|SUNWmcos|SUNWmcosx|SUNWmctag|SUNWjat|APOC|X11|StarSuite|XScreenSaver|X Window|CDE|GNOME|Star Suit|ATOK|SUNWpl5|PostgreSQL|Mozilla|MySQL|Motif|PalmPilot|PCMCIA|RealPlayer|samba|Tomcat|X Server|motif|J2SDK|Apache|StarOffice|Sendmail|Netscape|PPP|Palm|JDS3|Wnn6|JAVAAPPS|JAI|MOZ17|FIREFOX|GLOW|G11NTOOLS|EVO146)" | awk '{print $2}' > ${PACKAGE_LIST}

/usr/bin/cat ${PACKAGE_LIST} | while read line
do
  /usr/bin/yes | /usr/sbin/pkgrm  ${line}
done

```
お好みでgrepしてるところのキーワードを適当に書き換えてください。
Objective-CベースのプロジェクトからSwiftのクラスを呼び出す

# やり方

Objective-CベースのプロジェクトでSwiftのNSObjectを継承したクラスのコードを新規作成し、ビルドすると<# ProductName #>-Swift.hがプロジェクトに一つ自動的に作られる。

それをObjCからimportするだけでクラスが使えるようになる

```objc
#import "<# ProductName #>-Swift.h"
```
## 例

- ProductNameはSampleとする
- Swiftで作成するのはAccontクラスとする

Swift側

```swift
import Foundation

class Account : NSObject {
    
    //twitterIDを保持
    let twitterId: Int64
    
    init(twitterId: Int64) {
        self.twitterId = twitterId   
    }    
}
```

Objective-C側。Swiftのクラスを使いたい

```objc
#import "Sample-Swift.h"
Account *account = [[Account alloc] initWithTwitterId:9791362];
```

# その他

## <# ProductName #>-Swift.hについて

- <# ProductName #>-Swift.hはどこにあるのかわからないがそれでいい
- <# ProductName #>-Swift.hはSwift側のクラスにメソッドを追加するなどした場合、ビルド後に自動的にそれが反映されている
 - そのためgitなどで管理したりメンバーに共有しなくても良い

下記に"Sample-Swift.h"の自動生成された内容一部抜粋。Objective-Cから利用されることが理解できる。

```objc
@interface Account : NSObject
@property (nonatomic, readonly) int64_t twitterId;
- (instancetype)initWithTwitterId:(int64_t)twitterId OBJC_DESIGNATED_INITIALIZER;
@end
```

自動生成された結果はXcode6.1とSwift1.1に依存しているはず。前のバージョンではこのように分かりやすくなかった気がする。
Gitコマンドの備忘録


自分用Gitコマンドの備忘録です。
内容は少しずつ追加していきたいと思います。
これいいよ！とか言うものがあればぜひコメントで教えていただけると助かります！

##Gitでローカルの変更を元に戻す
- ファイルの変更をもとに戻す場合
`$ git checkout {{ファイル名}}`

- 特定のファイルではなくすべてのファイルの変更を元に戻したい場合
`$ git checkout .`

##Aliasの設定

設定方法
ex) statusのalias設定
`$ git config --global alias.st = status`

##コミットを別ブランチにコピーする

- コミット番号を調べる
`$ git log --oneline --decorate --graph {{branch_name}}`

- コピーしたいブランチに移動
`$ git checkout {{barnch_name}}`

- コミットをコピー
`$ git cherry-pick {{commit_id}}`

##直前のコミットメッセージを修正する

`$ git commit --amend`

##コンフリクトが起きた時、どちらかを優先させる

- 自分のコードを優先したい場合
`$ git checkout -ours {{. or /path/to/file}}`

- マージした側のコードを優先したい場合
`$ git checkout -theirs {{. or /path/to/file}}`

##私のAliasの設定
[alias]コマンドの設定はWindowsでは出来ないので注意！
（別のやり方があれば教えてください）

```ini:.gitconfig
[alias]
	st = status
	cm = commit -m
	ad = add
	ps = push
	ft = fetch
	pl = pull
	co = commit
	di = diff
	dic = diff --cached
	br = branch
	bra = branch -a
	sh = show
	so = remote show origin
	cam = commit --amend
	wc = whatchanged
	lp = log -p
	lo = log
	dm = diff master
	gr = grep --color
	gn = grep -n --color
	alias = !git config --list | grep 'alias\\.' | sed 's/alias\\.\\([^=]*\\)=\\(.*\\)/\\1\\\t => \\2/' | sort
	today = log --oneline --since='12 hour ago'
	ch = checkout
	id = log --oneline --decorate --graph

```

##ブランチ間のマージ
ブランチ間のマージ方法です。
ex) testブランチからmasterブランチへのマージ

```bash
$ git fetch
$ git checkout master
$ git merge test
```

マージした際にコンフリクトが発生すると自動コミットされません
コンフリクトが発生しているファイルを確認する場合は、`git status`コマンドを打つと、
`both modified: file`
と表示されているファイルがコンフリクトしているファイルとなります
私はよくコンフリクトを起こしたファイルのみを取り出したいので、
`$ git status | grep both`
のようにしています

また、コンフリクトを修正後、コミットを行いますが、その際にメッセージを入力せずにコミットすると、
gitが自動的にコミットメッセージを入力してくれます

##削除したファイルのインデックス追加
```git rm```コマンドを使わずにファイルを削除した場合、
通常の```git add```コマンドではインデックスに追加することが出来ません

やりかたとしては何種類かあるのですが、
手っ取り早いのは```git add -A```で全ファイルインデックス追加処理を行うことです
ただこれでは、インデックスに追加したくないファイルまで追加されてしまいますので、
その場合は```git add -u /path/to/file```コマンドで追加してあげることが出来ます
私はこれを最近まで知らず、SourceTreeから削除したファイルを
1つずつインデックスに追加してあげてました。。。(´・ω・｀)
回転に耐えるアプリを作る、Constraitsの設定方法


XcodeでConstraitsの設定操作が覚えにくかったのでメモ。

#### 回転するとレイアウトが崩れる
![悪い例](http://i.gyazo.com/34a39ff3417dcf17d87ad8af7ed787f2.gif)
普通にアウトレットを配置して、画面を90度回転すると、レイアウトが崩れ、一部のアウトレットしか見れなくなる。
こういう場合に、横長用の配置に調整するような設定を行っていきます。

### Pin設定

#### ・左下のスイッチを固定する。
![スイッチ固定](http://www.fastpic.jp/images.php?file=3846832087.png)
【方針】「左端からの距離」と「下端からの距離」を回転しても今と同じにする。
(1)スイッチを選択
(2)Pinボタンを押してダイアログ表示
(3)「左」「下」の点線をクリックして実線にする
(4)「Add..」ボタンを押してダイアログを閉じる

#### ・右下のステッパーも、スイッチと同様に固定する。
![ステッパー固定](http://www.fastpic.jp/images.php?file=7774566256.png)
【方針】「右端からの距離」と「下端からの距離」を回転しても今と同じにする。
(1)スイッチを選択
(2)Pinボタンを押してダイアログ表示
(3)「右」「下」の点線をクリックして実線にする
(4)「Add..」ボタンを押してダイアログを閉じる

#### ・Buttonも同様に、「上端」からの距離を固定する

#### ・中央の画像も同様に、「上端」からの距離を固定する

### Align設定
#### ・Buttonと中央の画像を中央に固定する
![センタリング](http://www.fastpic.jp/images.php?file=2049744063.png)
(1)2点のアウトレットを選択
(2)下のAlignボタンを押してダイアログを表示させる
(3)下から2番めのHorizontal Center in Containerにチェックを入れる
(4)Add constraitsボタンを押してダイアログを閉じる

### 結果
![結果](http://i.gyazo.com/876a1f133f3c8a71c4cb36177ca1cef5.gif)
ヨイヨイ

### ポイントなど
####Xcode上で、Constraitsは常に新規登録される
毎回、新規登録で設定していく。どういうことかと言うと、例えばあるアウトレットのPin設定を行った後に、また同じアウトレットを選択して、Pinボタンを押しても前の設定が読み込まれたりはしない。
####Xcode上でConstraitsの削除方法
![Constraits](http://i.gyazo.com/0347c621041f898588bcd7c3b00bae3b.png)
登録したConstraitsは左のツリーに表示されるので、これを選択してメニューのEdit - Deleteしたら削除できる。

### コメント
* Xcode上のConstraitsの操作が、ぱっと見て直感でいけるかと思ったら、いけなさそうだったので、まとめた。
* この記事のような画像説明作るのがめんどくさい。
* Skitchで枠線などの注釈説明入れた画像をfastpicというサイトに上げたので、1年経ったら見れなくなるけどまあいいか。
Xcode6.1で勝手にbuild settingsが64ビット仕様に書き換えられた時の対処法

アップデートされましたね、Xcode6.1に。
既存アプリの改修で四苦八苦したXcode6に比べ、バグも少なくなるだろうなーとおもいアップデートしましたよ。

「あれ？ ビルドが失敗する？ しかもbuild settingsが指定してない64ビット仕様になってる？」

そんなやられた人のために、下記の記事をお届けします。

[**Fix for “undefined symbols” when building in Xcode 6**](http://forum.openframeworks.cc/t/fix-for-undefined-symbols-when-building-in-xcode-6/16780)

最初の投稿者の解決方法は、考え方はそうですが、あまり参考にならないので、一番最後のスクリーンショットを参考にしてください。

1.まず、ターゲットのプロジェクトを開きます。
2.次に、Build Settingタブを開きます。
3.その次に、Architectures欄を開きます。
4.Architecturesの「ARCHS_STANDARD」を「ARCHS_STANDARD_32_BIT」に書き換えます。

これでビルドをしてみて、ビルドが成功すればOK。

うちはこれでいけました。
他にこうすればいいよという方はコメントをお願い致します。

はー、Xcode6は困った子だわ…。
Google Compute EngineでMinecraftServerを動かしたメモ

VPSで今まで動かしてた人的なポイントは１つ
ファイアーウォールの設定です。

EC2はちゃんと使ったことないけど
EC2で言えばたぶんセキュリティグループのことかなと思います。

# インスタンスの作成

DockerでMinecraftを動かしたいので
Dockerが動く環境ならどこでもいいのですが
(参考: [DockerでMinecraftServerを建てる](http://qiita.com/koki_cheese/items/873431fac1520e2a912f))

今回、Dockerだけ動かしたいのでImageはCoreOSを選択しました。

詳しくは公式のドキュメントへ
https://coreos.com/docs/running-coreos/cloud-providers/google-compute-engine/

```bash
$ gcloud compute instance create core1 --image https://www.googleapis.com/compute/v1/projects/coreos-cloud/global/images/coreos-alpha-472-0-0-v20141017 --zone us-central1-a --machine-type n1-standard-1 --metadata-from-file user-data=cloud-config.yaml
```

# ファイアーウォールの追加

## 現在のファイアーウォールの確認

デフォルトでは以下のように設定されているかと思います。

```bash
$ gcloud compute firewall-rules list
default-allow-icmp      default 0.0.0.0/0     icmp
default-allow-internal  default 10.240.0.0/16 tcp:1-65535,udp:1-65535,icmp
default-allow-rdp       default 0.0.0.0/0     tcp:3389
default-allow-ssh       default 0.0.0.0/0     tcp:22
```

ルールの追加は以下のコマンドでできます。

```bash
$ gcutil addfirewall --allowed=tcp:25565 default-allow-minecraft
```

また先程のコマンドでルールを確認して

```
default-allow-minecraft default 0.0.0.0/0     tcp:25565
```

が追加されていればOKです。

# まとめ

事前にDockerのイメージを作っておき
ファイアーウォールを追加しておいて
cloud-configに自動起動するように設定しておけば
コマンド一発でMinecraftServerを建てることが可能って楽ちんですね。

公式のドキュメントでしか比較してないのですが
EC2と比べ、全部コマンドラインで解決するのはありがたいと思います。

ちなみに
usでn1-standard-1のインスタンスを２４時間３０日動かすと
現時点で$31.84かかります。
これに通信料金で１TB以内であれば1GBあたりアジアへの転送量で$0.21かかります
月３２００円＋(α)します。

うん高い！
インスタンスをさらにアジアでやると　また若干値段があがります。
【メモ】Mac(USキーボード)でのバックスラッシュ入力設定


``option`` + ``\``で出来るはずだったんですが、ターミナル上で上手くいかない。

Sublime text2では出来るんですけど・・・。

というわけでシステム環境設定＞キーボード＞入力ソースより

![スクリーンショット 2014-10-28 10.53.55.png](https://qiita-image-store.s3.amazonaws.com/0/17535/eb2d44d8-10cd-e299-fea3-9789355ae0f8.png "スクリーンショット 2014-10-28 10.53.55.png")

”￥”キーで入力する文字を\（バックスラッシュ）に設定。

これで代わりに``option`` + ``\``で``¥``が入力されるようになりました。
Ionic CLIはNode.js 0.11で動かない

ので、nodebrewとか使ってる人は node v0.10.32 でインストールしてください。

```
$ nodebrew install v0.10.32 && nodebrew use v0.10.32
$ npm install -g ionic cordova
$ ionic start myApp
```

公式ドキュメントのインストール手順に動作確認バージョンを書いておけばいいのになぁ。

以下のionicのフォーラム投稿にnode v0.12.xにご期待くださいって返信があるけど、v0.11で動かないのに期待できないと思うんだけどなぁ。

参考：http://forum.ionicframework.com/t/ionic-not-working-with-node-v0-11-13/10784
OFFICE Excel を XMLで書くための最低限情報

これは方眼紙になります。

# デフォルト　サンプル

```xml
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook 
    xmlns="urn:schemas-microsoft-com:office:spreadsheet"
    xmlns:html="http://www.w3.org/TR/REC-html40"
    xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
    xmlns:x="urn:schemas-microsoft-com:office:excel">
    <Worksheet ss:Name="Sheet1">
        <Table 
            ss:DefaultColumnWidth="10"
            ss:DefaultRowHeight="10" 
            ss:ExpandedColumnCount="49" 
            ss:ExpandedRowCount="60" 
            x:FullColumns="1" 
            x:FullRows="1">
            <Row ss:Index="1">
                <Cell ss:Index="1" ss:MergeAcross="48" ss:MergeDown="3">
                    <Data ss:Type="String">テキスト</Data>
                </Cell>
            </Row>
        </Table>
    </Worksheet>
</Workbook>
```

## Workbook

| 属性 | 値 | 備考 |
|:----|:---|:----|
|xmlns|`urn:schemas-microsoft-com:office:spreadsheet`| XML NAMESPACE |
|xmlns:html|`http://www.w3.org/TR/REC-html40`| XML NAMESPACE |
|xmlns:o|`urn:schemas-microsoft-com:office:office`| XML NAMESPACE |
|xmlns:ss|`urn:schemas-microsoft-com:office:spreadsheet`| XML NAMESPACE |
|xmlns:x|`urn:schemas-microsoft-com:office:excel`| XML NAMESPACE |

## Worksheet 

| 属性 | 値 | 備考 |
|:----|:---|:----|
|ss:Name|Sheet1|シート名|

## Table 

| 属性 | 値 | 備考 |
|:----|:---|:----|
|ss:DefaultColumnWidth|10|標準セル幅|
|ss:DefaultRowHeight|10|標準セル高|
|ss:ExpandedColumnCount|49 |列数|
|ss:ExpandedRowCount|60 |行数|
|x:FullColumns|1 |不明|
|x:FullRows|1|不明|

## Row 

| 属性 | 値 | 備考 |
|:----|:---|:----|
|ss:Index|1|行番号|

## Cell 

| 属性 | 値 | 備考 |
|:----|:---|:----|
|ss:Index|1|行番号|
|ss:MergeAcross|48|列結合（３列の場合は２)|
|ss:MergeDown|3|行列結合（３行の場合は２)|



## Data 

| 属性 | 値 | 備考 |
|:----|:---|:----|
|ss:Type|String|文字列型|
|ss:Type|Number|数値型|
|ss:Type|String|文字列型|
|ss:Type|String|文字列型|
|ss:Type|String|文字列型|
|ss:Type|String|文字列型|

## 欄外（削除推奨項目）

### DocumentProperties
更新情報　（更新者、更新日時など）

### OfficeDocumentSettings 
画像の使用？

### ExcelWorkbook
Excelをアプリの位置情報および幅情報

### PhoneticText
フリガナ

### WorksheetOptions
カレントセルなど
docomo 画像認識 API の Python ラッパーライブラリを作りました。

# リポジトリ

* [docomocvpy](https://github.com/zaneli/docomocvpy)

# 使い方

例えば、[玉葱さん太郎](https://www.google.co.jp/search?q=%E7%8E%89%E8%91%B1%E3%81%95%E3%82%93%E5%A4%AA%E9%83%8E&source=lnms&tbm=isch&sa=X&ei=ZPFOVMnwHo3x8gWk1YKYCQ&ved=0CAgQ_AUoAQ&biw=1096&bih=593)の画像を使ってこのようにリクエストを送ってみる。

```py3
import docomocv as d

client = d.DocomoCVClient(<YOUR_API_KEY>)
client.recognize('./tamanegi.jpg', d.Recog.food)
```

このような結果が得られる。

```json
{'candidates': [{'sites': [{'imageUrl': 'http://ecx.images-amazon.com/images/I/61t%2BbGIlK2L._SX385_.jpg', 'url': 'http://www.amazon.co.jp/gp/product/B0094BL1RM', 'title': 'Amazon.co.jp: やおきん 玉葱さん太郎 15g×300袋: 食品&飲料'}], 'itemId': 'food_0000193194', 'imageUrl': 'http://ecx.images-amazon.com/images/I/61t%2BbGIlK2L._SX385_.jpg', 'category': 'food', 'score': 1728.025390625, 'detail': {'releaseDate': '2012/09/03', 'quantity': '300', 'itemName': 'やおきん 玉葱さん太郎 15g×300袋', 'maker': 'やおきん', 'brand': 'やおきん', 'weight': '8 Kg', 'dimension': '61.4 x 57 x 43.2 cm'}}], 'recognitionId': '61486d30-5e3d-11e4-84c4-065d0f977797'}
>
```

玉葱さん太郎として認識されていますね！
CoreOSにPanamaxをインストール

coreos: 444.5.0と472.0.0 にて実施。

[Getting a redirect to port 3002 when clicking on CoreOS Host Performance link #410](https://github.com/CenturyLinkLabs/panamax-ui/issues/410)

# 参考

[CoreOSでPanamaxを動かしてみた。 - uzyexeのノート](http://uzy-exe.hateblo.jp/entry/2014/08/14/024841)

# インストール済みのCoreOSで実施

```bash:
mkdir ~/panamax && cd ~/panamax
curl -O http://download.panamax.io/installer/panamax-latest.tar.gz
tar xzf pmx-installer-latest.tar.gz
sudo ./coreos install
```

> [CoreOSのdocker1.3対応版インストールなど - Qiita](http://qiita.com/tukiyo3/items/5ef20c985a3a106856f7)

の環境では `--stable`指定だとインストールに失敗した。`--dev`で成功。

* CPU,MEM値が取れない・・(3002ポートのコンテナが起動しない)
  * 3002: google/cadvisor (PMX_CADVISOR)

![スクリーンショット 2014-10-28 10.55.27.png](https://qiita-image-store.s3.amazonaws.com/0/25728/04ac0e63-7521-ea65-c6c7-354350e5e922.png)

http://coreos-ip:3000/ にアクセスするとPanamaxの画面が表示されます。
CoreOS再起動後も自動で起動してきます。(起動に1分はかかる。)

# 画面

![6f10d2f2-17c7-aec4-274e-333e07519173.png](https://qiita-image-store.s3.amazonaws.com/0/25728/d4fffc7a-eb38-243e-5794-82cfff27a232.png)

![7397f422-78b3-25b0-c214-1a83b068e3f2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/5daff5f5-3b95-054d-2d00-4f6c0a583fc1.png)
バージョン管理したくない作業用スクリプトは「,」ディレクトリに入れるといい

**TL;DR:** グローバルな gitignore に `,/` を追加して、作業用スクリプトを `,` ディレクトリに入れると便利。 `,/tmp_script.sh` で実行できる。

---

Git リポジトリの中に一時的に使う作業用スクリプトを置いておきたいことがある。自分だけが使うものなのでコミットはしたくないが、いちいち .git/info/exclude に追加して無視させるのも面倒臭い。

今まで自分は、 `tmp_script.sh~` や `tmp_script.sh.bak` など、グローバルな gitignore で無視されるファイル名にしていたが、これは不要なファイルと間違えて消してしまう危険がある。 `ignored.tmp_script.sh` は分かりやすいぶん長い。 `_tmp_script.sh` は悪くないが、コミットすべきファイルにもアンダースコアで始まるものがあって紛らわしい。

そこで、作業用スクリプトのファイル名の先頭にカンマをつけるようにしている人の話をどこかで読んだことを思い出した。カンマはファイル名として valid で、シェルで特別な意味を持つ記号ではなく、他の人がファイル名に使わないような文字であるというのが採用の理由だったはず。

グローバルな gitignore で `,*` を無視するようにして、作業用スクリプトを `,tmp_script.sh` などの名前にしたら便利になった。

```text:global-gitignore
,*
```

`ls` するとどれが作業用スクリプトが一目瞭然。カンマで始まるファイルが最初に出てくるのも分かりやすくていい（`LC_COLLATE=C` の場合）。

```
$ cd repo
$ ls
,tmp_script.sh
,tmp_script2.sh
README.md
src
...
```

実行は普通にできる。バックスラッシュでカンマをエスケープする必要もない。

```

$ ./,tmp_script.sh
Doing something...
```

ただ、このスクリプトを実行するとき `./,tmp_script.sh` と入力するのがちょっと面倒だった。ファイル名からはカンマを取って、ファイルを `,` ディレクトリに入れるようにしたらよりよくなった。

```text:global-gitignore
,/
```

```
$ cd repo
$ ls
,
README.md
src
...

$ ls ,
tmp_script.sh
tmp_script2.sh
```

実行するには `,/tmp_script.sh` となる。 `,/` が `./` のアナロジーになっていて指が覚えやすい。

```
$ ,/tmp_script.sh
Doing something...
```

`,` 内に別個のリポジトリを作って作業用スクリプトのバージョン管理をすることもできる。この恩恵がけっこう大きい。今まではスクリプトを軽く手直ししたつもりが壊してしまって復旧がだるいことがあった。他の人が使えるくらい成熟したら `cp ,/hoge.sh scripts/` してコミット・共有するとみんなハッピー。

その他、テストデータやメモ書きなど、自分用のファイルには何でもカンマをつけるようにしている。

```
$ ls
,
,test_data_dir
,memo.txt
...
```

---

補足：他の人のやり方（ブコメより）

|方法|例|
|---|---|
|`misc/` や `ignored/` を gitignore| `misc/tmp_script.sh` |
|`*.ignore` を gitignore| `tmp_script.sh.ignore` |
|.git ディレクトリに入れる| `.git/tmp_script.sh` |

好みに合わせてどうぞ。
instagram api 事始め access_tokenを取得する


## 1.アプリケーション登録

### 1-1.ログイン
https://instagram.com/accounts/login/
よりログインして以下のdeveloperにアクセス

http://instagram.com/developer/clients/manage/


### 1-2.アプリケーションの新規作成
![スクリーンショット_2014_10_24_13_07.png](https://qiita-image-store.s3.amazonaws.com/0/49055/a29e1c99-8c11-5b5c-ba35-df5d09d282a0.png "スクリーンショット_2014_10_24_13_07.png")
「Register a New Client」をクリックして新規作成しますー

　

### 1-3.必要情報を入力

![スクリーンショット 2014-10-24 13.09.18.png](https://qiita-image-store.s3.amazonaws.com/0/49055/b65c26d7-f754-f27b-a117-0b4988619dc7.png "スクリーンショット 2014-10-24 13.09.18.png")

* Applictaiton Nameは、アプリケーションの名前
* Dscriptionは、説明などを入力
* Websiteは、サイトのURLを入力（適当でもOK）
* OAuth redirect_uriは、アクセストークンを取得する際にリダイレクトされるURL（適当でもOK）
* Disable implicit OAuth は、チェック入れたまま
* Enforce signed header は、チェックしないまま

　
### 1-4.アプリ完成！
![スクリーンショット_2014_10_24_13_09.png](https://qiita-image-store.s3.amazonaws.com/0/49055/c9176b79-4ff2-61d9-72b4-ffb5eccfe8e5.png "スクリーンショット_2014_10_24_13_09.png")
それぞれの値をメモっておく。


## 2. アクセストークンを取得する

### 2-1.authorization URLたたく

```
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code
```
* CLIENT-ID、REDIRECT-URIに先ほどメモった値を入力
ブラウザのURLに入力してアクセスする。

　
### 2-2.認証する
![スクリーンショット 2014-10-24 13.11.41.png](https://qiita-image-store.s3.amazonaws.com/0/49055/d9b14886-8c1e-792b-2fba-151e0e35ce43.png "スクリーンショット 2014-10-24 13.11.41.png")
「Authorize」をクリック！

　
### 2-3.codeを取得
![スクリーンショット_2014_10_24_13_12.png](https://qiita-image-store.s3.amazonaws.com/0/49055/0ca0febb-f513-a96b-9c7b-bbc58e78888d.png "スクリーンショット_2014_10_24_13_12.png")

URLにcodeが入っているのでコピーする

```
例：
http://instagramtest.com/instagram/?code=68eeee1dffd8425aba1583c45ac22238
※ダミーです
```

　

### 2-4.access_tokenを取得

```
curl \-F 'client_id=CLIENT-ID' \
    -F 'client_secret=CLIENT-SECRET' \
    -F 'grant_type=authorization_code' \
    -F 'redirect_uri=YOUR-REDIRECT-URI' \
    -F 'code=CODE' \https://api.instagram.com/oauth/access_token
```
* CLIENT-ID、CLIENT-SECRET、YOUR-REDIRECT-URIにメモったのを入力。CODEは2-3でコピったやつ。


以下みたいのが取得できます！

```
{
    "access_token": "fb2e77d.47a0479900504cb3ab4a1f626d174d2d",
    "user": {
        "id": "1574083",
        "username": "snoopdogg",
        "full_name": "Snoop Dogg",
        "profile_picture": "http://distillery.s3.amazonaws.com/profiles/profile_1574083_75sq_1295469061.jpg"
    }
}
```


![スクリーンショット_2014_10_24_13_39.png](https://qiita-image-store.s3.amazonaws.com/0/49055/c1382b42-7445-1f21-cee0-a0257d667445.png "スクリーンショット_2014_10_24_13_39.png")
※例：iTermにて

　
以上
　

## 例
自分の写真情報を取得

```
https://api.instagram.com/v1/users/self/media/recent/?access_token=ACCESS-TOKEN
```

　
## 参考
• Instagram Developer Documentation
http://instagram.com/developer/authentication/
file_get_contentsでPOSTデータ送信


```php
	private function __post_ file_get_contents()
	{
		$url = 'http://qiita.com/';

		// POSTデータ
		$data = array(
			"param1" => "1",
			"param2" => 2
		);
		$data = http_build_query($data, "", "&");

		// header
		$header = array(
			"Content-Type: application/x-www-form-urlencoded",
			"Content-Length: ".strlen($data)
		);

		$context = array(
			"http" => array(
				"method"  => "POST",
				"header"  => implode("\r\n", $header),
				"content" => $data
			)
		);

		$html = file_get_contents($url, false, stream_context_create($context));

		return html;
	}

```
改行タブをスペースへ、複数スペースを1つへ変換


```php
	private function __trim($str)
	{
		// 両サイドのスペースを消す
		$str = trim($str);
		// 改行、タブをスペースへ
		$str = preg_replace('/[\n\r\t]/', '', $str);
		// 複数スペースを一つへ
		$str = preg_replace('/\s(?=\s)/', '', $str);

		return $str;
	}
```
文字コードの†闇†遭遇レポート part1

## 状況
Windows7 64bit，Python2.7.5にて
以前から使っていたFoursquareのVenueを集めるクローラをツール化した．
自分しか使わないので，入出力とかは割と適当に．
入力はbboxの右上と左下それぞれの緯度経度，出力はID，Venue名，緯度経度，ジャンル,
を，csvに書き出すことを想定してカンマ区切りで．
コマンドライン上で実行することを想定したので，出力はリダイレクトでファイルに書き込めるように標準出力．
入力待ちのときに，なにを入力するのか，テキストをエラー出力（「北東端の緯度」とか表示）．
ソースコードはutf-8で記述．

## †闇†の症状
コマンドライン上で以下のように実行．

```sh:command1
$ python foursquare_crawler.py > washington_venues.csv
蛹玲擲遶ｯ縺ｮ邱ｯ蠎ｦ・
```

文字化けした…
この部分のソースコードは以下の通り．

```py:source1
sys.stderr.write("北東端の緯度：")
first_ne_lat = float(sys.stdin.readline())
```

単純にコマンドプロンプトの文字コードが悪いと思い，一時的にコマンドプロンプトの文字コードをcp932（Shift-JIS）からutf-8に変更．
Windowsではutf-8のことをcp65001というらしい…

```sh:command2
$ chcp 65001
Active code page: 65001
```

もう一度実行．

```sh:command3
$ python foursquare_crawler.py > washington_venues.csv
åŒ—æ±ç«¯ã®ç·¯åº¦ï¼š
```

…(´・ω・｀)
今度はプログラム内でエラー出力をutf-8で出力するように明示的に記述．

```py:source2
sys.stderr = codecs.getwriter('utf-8')(sys.stderr)
sys.stdin = codecs.getwriter('utf-8')(sys.stdin)
sys.stderr.write("北東端の緯度：")
first_ne_lat = float(sys.stdin.readline())
```

ついでに標準入力もutf-8で受け取るように書いた．
しかし変わらず…

## 解決方法
どうしたもんかねーと思い，なんとなくUnicodeにした．

```py:source3
sys.stderr.write(u"北東端の緯度：")
first_ne_lat = float(sys.stdin.readline())
```

ついでにコマンドプロンプトの文字コードも一旦元に戻して実行．

```sh:command3
$ chcp 932
現在のコード ページ: 932
$ python foursquare_crawler.py > washington_venues.csv
北東端の緯度：
```

できたー(ﾟ∀ﾟ)！！！
詳しく調べてないけど，普通は文字列はバイトごとに管理するから，文字列を複数バイトに分割するときに，日本語とかの全角文字とアルファベットとかの半角文字でいろいろ問題があるらしい．
でもUnicodeだと，1文字は1文字で処理するから，Pythonで日本語を扱うときはUnicodeがいいらしい．

今度から文字列は全部Unicodeにしよう…
puppetでsourceコマンドでrbenv.shを読み込ませるのってどうしたらよいのだろう。


```puppet
  file { 'rbenv/profile.d/rbenv.sh':
    path    => '/etc/profile.d/rbenv.sh',
    content => '## rbenv setting
export RBENV_ROOT="/usr/local/rbenv"
export PATH="/usr/local/rbenv/bin:$PATH"
eval "$(rbenv init -)"
',
    require => Exec['clone rbenv']
  }
  ~>
  exec { 'source /etc/profile.d/rbenv.sh':
    command => "bash -c 'source /etc/profile.d/rbenv.sh'",
    path    => ['/bin', '/usr/bin', '/usr/local/rbenv/bin', '/usr/local/rbenv/plugins/ruby-build/bin/'],
    user    => 'vagrant',
    refreshonly => true,
    require => File['rbenv/profile.d/rbenv.sh']
  }
```


vagrant環境でpuppetで開発環境を作っていて、
rbenv.shを/etc/profile.dに置いて、それをsourceコマンドで読み込ませてやろうと思って作った。


イメージとして、

```
vagrant ssh
cd /vagrant
sudo puppet apply hogemoge
# この後、source /etc/profile.d/rbenv.shが読み込まれた状態にしたい
```

というのをやろうと思って、ががっと、puppetを作ってみたが、
冷静に考えると上の方法だと無理だよなーと。。。

どうすればいいんだろうか。。。普通に手動で読み込ませるか、vagrantを再起動するしかないのか。。。

とか思ったけど、puppetでそこまでやるのって、違うのか？
AutoLayout設定のチートシート



![AlignmentConstraints.png](https://qiita-image-store.s3.amazonaws.com/0/3844/3df361ca-88e7-dc03-c2bd-1a7533663026.png "AlignmentConstraints.png")


![NewConstraints.png](https://qiita-image-store.s3.amazonaws.com/0/3844/aacac708-a3f9-993a-5a40-ee3d1332c785.png "NewConstraints.png")
githubで"Permission denied (publickey)."が出た時はssh -Tで繋ぎ直す

PCを再起動したりした時に、たまにgithubにsshでpullやpushできなくなるときがあります。

```
$ git pull
Permission denied (publickey).
fatal: Could not read from remote repository.
```

その時はssh -T git@(ホスト名)で再度繋ぎ直します。

-Tはsshでの仮想端末接続(pseudo-tty)を無効化するオプション。githubはsshクライアントでの接続をさせるつもりはないので、それで繋がないようにするためにこのオプションをつけます。
ついでに-v(結果を出力)をつけるとよいかもです。

```
$ ssh -vT git@github.com
```

当たり前だけどホスト名のところはsshのconfigで設定したHost名でもOKです。

参考
http://stackoverflow.com/questions/17900760/what-is-pseudo-tty-allocation-ssh-and-github
記事をrssリーダーで読む

# Qiitaのタグの場合

> タグ: Docker
> URL: http://qiita.com/tags/Docker/feed.atom


# Qiitaのユーザーの場合

> ユーザーID: tukiyo3
> URL: http://qiita.com/tukiyo3/feed.atom

# hatenaの場合、URLの最後に /rss をつければ良い。

![スクリーンショット 2014-10-28 9.18.47.png](https://qiita-image-store.s3.amazonaws.com/0/25728/bc91f653-f07f-24b7-2ee4-835a63e4458c.png)

ここクリックしてもわかる。


# 以下古い情報

例えばこの方の記事をFeedlyに登録したい場合、

http://d.hatena.ne.jp/stereocat/touch/

後ろに `atomfeed`をつけて登録。

http://d.hatena.ne.jp/stereocat/touch/atomfeed

![1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c8066ff6-4f5f-9664-f93e-c41ed433a8e4.png)

![2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/65e7cfdc-2da0-7e87-6802-311a2077d9f2.png)

![3.png](https://qiita-image-store.s3.amazonaws.com/0/25728/805cfc55-ec30-da78-a4db-3bbe6ee21089.png)

2つ候補が出てきたんだけど・・・？というときは、readersが多い方を選択すればよい。
Debian/UbuntuにMariaDB入れた時のphp5-mysqlについて

# 背景
Debian/Ubuntuの場合、標準パッケージのphp5-mysqlではライブラリとヘッダに差異がある為に、mysql_connect()などでエラー表示されてしまいます。

# バージョンの確認方法
````
$ php -i | grep Client
Client API version => 10.0.14-MariaDB
Client API library version => 10.0.14-MariaDB
Client API header version => 5.5.38
Client API version => 10.0.14-MariaDB
````
Client API headerがMySQLの5.5.38のままで残る。

# 回避方法
こちらのページを参考に、とりあえず回避できました。
http://www.pontikis.net/blog/is-it-time-to-remove-mysql-in-favor-of-mariadb-in-production-servers

````
error_reporting(0);
$conn = mysql_connect('params');
error_reporting('YOUR SETTINGS');
````
生配信ツールHomecast構想

P2Pインターネット放送ツールの構想をスライドで書いてみました。
ご意見などくださいますとうれしいです。

https://docs.google.com/presentation/d/1NtpK75AFJhQlN_44LIuKcfFYuI6hV0aFTNQhpifu7i0/edit?usp=sharing
dockerでCentOS7を動かす時に参考になる公式サイト

## dockerhubのコメント

* [centos Repository | Docker Hub Registry - Repositories of Docker Images](https://registry.hub.docker.com/_/centos/)

## 全体

* [CentOS/CentOS-Dockerfiles · GitHub](https://github.com/CentOS/CentOS-Dockerfiles)

## mariadb

* [CentOS-Dockerfiles/mariadb/centos7 at master · CentOS/CentOS-Dockerfiles · GitHub](https://github.com/CentOS/CentOS-Dockerfiles/tree/master/mariadb/centos7)

## 気づいた点

で見ていくとそもそも`--privileged`を必要とする事やsystemdをインストールすること自体間違っている気がしてきた。
将来出てくる便利ツールが動かないかも。

### not recommended for production use

```bash:
> Launching MariaDB
> 
> Quick start (not recommended for production use):
> 
> # docker run --name=mariadb -d -p 3306:3306 <yourname>/mariadb
```

### Recommended start

```bash:
> Recommended start
> 
> To use a separate data volume for /var/lib/mysql (recommended, to allow image update without losing database contents):
> 
> Create a data volume container: (it doesn't matter what image you use here, we'll never run this container again; it's just here to reference the data volume)
> 
> # docker run --name=mariadb-data -v /var/lib/mysql <yourname>/mariadb true
> Initialise it using a temporary one-time mariadb container:
> 
> # docker run -rm --volumes-from=mariadb-data <yourname>/mariadb /config_mariadb.sh
> And now create the new persistent mariadb container:
> 
> # docker run --name=mariadb -d -p 3306:3306 --volumes-from=mariadb-data <yourname>/mariadb
```

* データ保管用コンテナをつくれということか。
'Admin' のパスワードを忘れた! 助けてえらい人!


ネットワーク負荷が異常なとき、我が FireWall が古すぎて処理しきれず、通信を優先してくれるがために内部でご機嫌に稼働させている webの管理画面のレスポンスが悪くなり、生き死にを繰り返すがために、我がメールボックスが zabbix からのメールであふれかえるというのが、ここしばらくの掟でした。別にそんなものの死活監視は不要なので止めればいいのに数ヶ月放置でした。なぜなら

**zabbix Admin のパスワードが分からない**

ということで、本日は PostgreSQL バックエンドで、zabbix 2.0.x を使っている場合に、パスワードを強制的にクリアする方法を書き残して備忘録にして、お風呂に入って寝ます。

# 1.zabbix 2.0.x w/PostgreSQL でパスワードリセットしたい!

ヒントは、`"41d8cd98f00b204e9800998ecf8427e"` です。

やることはこう。

1. psql で zabbix DB へログイン
2. update SQL を流す
3. ¥q

## 1-1.psql で zabbix DB へログイン

そのままです。zabbix DB へ接続可能なユーザーとかは、zabbix frontend web サーバの `/etc/zabbix/zabbix.conf.php` とかを見てみると、それなりの設定が残っているので、そこを参考にしながら、おまじないを使ってログインします。

```Bash:psql
psql -U zabbix -W -d zabbix -h localhost
ユーザ zabbix のパスワード:
```

* -U zabbix : 'zabbix' ユーザでログインします
* -W : パスワード要求させます
* -d zabbix : 'zabbix' DB を指定しています
* -h localhost : 我が家では tcp socket 接続を許可していなかったので、NW経由です。なんてこった。しかも、`localhost only` とか。

zabbix のパスワードも、きっと `zabbix.conf.php` に書きっぱなしだと思いますけれども、それでどうぞ。

## 1-2.update SQL を流す

Admin のユーザID は、きっと '1' なのでそうだと思って進めます。

```Bash:psql
zabbix=> UPDATE users SET passwd = 'd41d8cd98f00b204e9800998ecf8427e' WHERE userid = '1';
UPDATE 1
```

先ほどのヒントがいかされます。このけったいな文字列を入れることで、パスワードなしになります。 `SELECT * FROM users;` てうつと、きっと大半の方は放置されている `guest` アカウントのパスワードがはいっていますが、それが空パスワードだと認識できれば、すぐに分かりますね。
ちなみに、zabbix official でも、mysql で同じコト書いてます。SQL もほぼ同じです。私があえてこれを書く必要ないですね。

残している理由は、「MySQL だとそうかもしれないけど、それって PostgreSQL でも同じなの?(´・ω・`)」という無駄に考える時間を省くためです。( 0w0)ﾉ ｳｪｰｲ

## 1-3.¥q

```Bash:psql
zabbix=> ¥q
```

これで終わりです。さぁ、空パスワードでユーザ名 `Admin` とかで入ってみてください。
Msgpack in C++で自由なデータ型のmap形式を抽出する

## 背景

[msgpack](http://msgpack.org/)はJSONのように自由なデータ形式を使えつつ、直接の可読性を捨てることでデータ容量を節約し、実装的にもserialize, deserializeを高速化している今どきな感じのシリアライズフォーマットです。KVSに構造化データをがしがし入れていくためデータのシリアライズが必要でしたが、ありきたりなJSONよりはmsgpackも使ってみるか、ぐらいの気持ちで使い始めてみました。


## やりたいこと

JSONで例えると、こういうデータを扱いたいと思いました。

    {
        "ts": 13345133.43,
        "src": "10.0.0.1",
        "domain": {
                "example.com": 1,
                "example.org": 2,
                "example.net": 3,
        }
    }

特徴としては、

1. マップ形式だが、バリュー部分に数値や文字列などのデータ形式が入り交じっている
2. 出現するキーがメッセージごとにまちまちで統一されない

となります。1だけ解決したいならユーザ定義Classへのバインド機能 (MSGPACK_DEFINE) を使う、2だけならmapではなくarray形式をうまく使うようにする、で概ね解決できます。実際、1と2を組み合わせてやればある程度は解決できる可能性もあるのですが、実装上の制約によって本来あるべきと考えるデータ構造の形式をねじまげるのはなんか癪な気持ちになったので、いろいろ調べてみました。ちなみに上記のようなデータをシリアライズする方法はQuickStartガイドに[示されています](http://wiki.msgpack.org/pages/viewpage.action?pageId=1081387#QuickStartforC%2B%2B-Streamingintoanarrayormap)。しかし、デシリアライズする方法が無い…。

## 解決方法

調べ方の問題かもしれませんが、見つかったのは構造体内のデータに直接触るやり方でした。参考にしたデータは本家のソースコードの [object.cpp](https://github.com/msgpack/msgpack-c/blob/master/src/object.cpp) の64-76行目で、表示可能な文字列に変換してostreamに流し込んでいるところ。

        case type::MAP: // map形式のオブジェクトだったら
                s << "{"; 　// まずはカッコを表示
                if(o.via.map.size != 0) { // マップ内のサイズが0じゃなかったら、
                        object_kv* p(o.via.map.ptr); // object_kv構造体をobject構造体の .via.map.ptr から作成
                        s << p->key << "=>" << p->val; // 最初のキー＋バリューを表示、
                        ++p; // 一つずらす
                        for(object_kv* const pend(o.via.map.ptr + o.via.map.size);
                                        p < pend; ++p) { // 終点を設定して、そのままポインタをずらしつづける
                                s << ", " << p->key << "=>" << p->val; // キーとバリューを表示
                        }
                }
                s << "}"; // 締め
                break;

これを参考にunpackするコードを書こうとすると、こんな感じ。`data`がシリアライズされたデータへのポインタ、`len`がデータ長とし、`name`というキーの文字列データがバリューで入っているものとします。

        msgpack::unpacked msg;
        msgpack::unpack(&msg, data, len);  // デシリアライズ
        msgpack::object obj = msg.get ();

        if(obj.via.map.size != 0) {
      msgpack::object_kv* p(obj.via.map.ptr);
      for(msgpack::object_kv* const pend(obj.via.map.ptr + obj.via.map.size);
          p < pend; ++p) {
        std::string key, name;
        p->key.convert (&key);

        if (k == "name") {
          p->val.convert (&name);
              std::cout << k << "=>" << name << std::endl;
            }
          }
        }

`p->key`と`p->value`はそれぞれ`msgpack::object`型で数値、真偽値、文字列をラップするような形式になっており、適宜別のデータ型に変換できるようです。

一応、これでやりたいことはできたのですが、なんか外法を使っているような気になります。オブジェクト指向なのに構造体の内部データに直接触ってしまうだけでいろいろと罪 悪感がつきません。なんかもっといい方法を知っている人がいたら、ぜひご教授ください。

## 参考ページ

- [MessagePack for C++ 新機能追加 - 0.5.0リリース - 古橋貞之の日記](http://d.hatena.ne.jp/viver/20100429/p1)
- [Programming Tools and Techniques #369 - The MessagePack Project](http://www.slideshare.net/frsyuki/programming-tools-and-techniques-369-the-messagepack-project)

※ [過去の自分の記事](http://m-mizutani.github.io/blog/2013/09/23/msgpack-cpp-map/)より転載
Wordpressのxmlrpc.phpにPOSTリクエストが大量に送られるので403を返すようにしました

Webサーバーのログを見るとWordpressのxmlrpc.phpへ大量のPOSTリクエストが送信されていました。

```bash:xmlrpc.phpへの攻撃ログ
192.187.118.162 - - [27/Oct/2014:23:52:56 +0900] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
```
これはDoS攻撃の踏み台にするためのPOSTリクエストらしいです。

# .htaccessでファイルへのアクセスを拒否
xmlrpc.phpの使い道がイマイチわからなかったので、.htaccessへのアクセスをアクセス不能にしました。

```.htaccess:.htaccess
<Files xmlrpc.php>
Order deny,allow
Deny from all
</Files>
```
xmlrpc.phpへアクセスした場合は403が返るようにしました。

```bash:403を返しているログ
192.187.118.162 - - [28/Oct/2014:02:15:57 +0900] "POST /xmlrpc.php HTTP/1.0" 403 289 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
```
ログを確認すると以前は200番が返っていたのが403になりました。

# プラグインを使う場合
プラグインを使ってxmlrpc.phpへのアクセスをブロックする方法があるようです。
https://wordpress.org/support/view/plugin-reviews/disable-xml-rpc-pingback

ただこちらよりも、.htaccessあるいはiptablesなどを使用して弾いて、WordPressまでアクセスさせないほうがいいのではないかと考えました。

# xmlrpc.phpを無効にして不具合がでたら？
JetPackが使えなくなる？などの影響があるようです。
後で検討します(☝ ՞ਊ ՞)

追記：xmlrpc.phpを無効にした場合、WordPressのスマートフォン公式アプリが使えなくなりました＼(^o^)／