OmniAICreator/Qiita-1.07M huggingface dataset:
GoroutineのIDを取得したり名前をつけたりできない理由

Goroutineには内部的にIDが振られているけど、そのIDをGoから取得するAPIは提供されていない。一般に複数のgoroutineが走っている時、今どのgoroutineから実行されているのかを実行時に知る方法はない。

これが不便だという話がたまに出てくるようだ。こないだはデバグ時などに使うためにgoroutineに名前をつけられるようにしようという[提案](https://groups.google.com/forum/#!topic/golang-dev/s8qm8n_uHNY)がgolang-devに投げられていた。

これはリジェクトされたのだが、なぜかというと、そういう機能は確かに便利でもあるだろうけど、それを提供するとgoroutineの状態に依存したコードを書くのにも使われてしまうから。

Goroutineにローカルな状態に依存したコードは安全ではない（1つのgoroutineからしか呼べない）。たとえば「UIのAPIはメインスレッドから呼んでください」というふうな感じになる。これはgoroutineを必要なだけ作って簡単に仕事を分割できるようにするというGoのやり方に反する。なのでそういう悪いデザインのAPIが作られてしまわないように、goroutineはあえて名無しになっている。

それでもどうしてもIDを取得したい！ という場合、[runtime.Stack](http://golang.org/pkg/runtime/#Stack)でスタックトレースを文字列として取得して、その1行目にgoroutineのIDが含まれているので、それをパーズするということはできる。無論これはあえて取得できないようにしているものを迂回して取得しているだけなので、自分でなにをやっているのかよく理解していない限りやるべきではないけど。
pecoで各プロジェクトのルートディレクトリを検索して、簡単に動作させるやつ

# 管理の面倒臭さと散らばってゆくファイルたち
Git
Vagrant
Docker
Gulp
Grunt
Chef
Guard
.
.
.

DevOpsやタスクランナーなどがフロントエンドやバックエンドエンジニアの中で流行っている昨今、いろんな場所にいろんなプロジェクトディレクトリが散らばってて管理に困ってませんか？

ぼくもそのひとりです。
いちいちそれぞれのプロジェクトのパスを覚えるのも面倒。。。


なので、この辺を参考にさせていただき、特定のファイルを検索して、各アプリの動作に簡単にアクセスするpeco。
http://d.hatena.ne.jp/syohex/20140729/1406648636
http://qiita.com/yungsang/items/e10ca283a1ceeaa845db

peco, peco, peco...

# セットアップ
@yungsangさんの`peco-find-cd`を少し拡張しつつちょっと変更して、関数内でpecoを二回使ってサービスを操作できるようにしました。

```zsh:peco-find-cd-rev
peco-find-cd-rev() {
  local FILENAME="$1"
  local MAXDEPTH="${2:-5}"

  if [ -z "$FILENAME" ] ; then
    echo "Usage: peco-find-cd <FILENAME> [<MAXDEPTH>]" >&2
    return 1
  fi

  local DIR=$(find ~ -maxdepth ${MAXDEPTH} -name ${FILENAME} | peco | head -n 1)

  _action() {
    if [ ${FILENAME} = Vagrantfile ]; then
      pushd "$DIR"
      vagrant $(printf "up\nresume\nreload\nprovision\nssh\nshare\nstatus\nhalt\nsuspend\ndestroy"| peco --prompt='Action>')

    elif [ ${FILENAME} = Dockerfile ]; then
      pushd "$DIR"
      docker $(printf "start\nps\nimages\npause\nunpause\nstop\nrestart\nattach\nbuild\ncommit\ncp\ndiff\nevents\nexport\nhistory\nimport\ninfo\ninspect\nkill\nload\nlogin\nlogout\nlogs\nport\npull\npush\nrm\nrmi\nrun\nsave\nsearch\ntag\ntop\nwait"| peco --prompt='Action>')

    elif [ ${FILENAME} = gulpfile ]; then
      pushd "$DIR"
      $(printf "gulp\ngulp server\ngulp clean"| peco --prompt='Action>')

    elif [ ${FILENAME} = Guardfile ]; then
      pushd "$DIR"
      guard $(printf "start\nlist\nnotifiers\nshow"| peco --prompt='Action>')

    else [ -n "${FILENAME}" ];
      pushd "$DIR"
    fi
  }

  if [ -n "$DIR" ] ; then
    DIR=${DIR%/*}
    _action
  fi
}
```

# 使いかた
普通の`peco-find-cd`としても使えますが、特定のファイルを指定するとアクションを表示します。
現状は
`peco-find-cd-rev Vagrantfile`
`peco-find-cd-rev Dockerfile`
`peco-find-cd-rev gulpfile`
`peco-find-cd-rev Guardfile`
のコマンドに対応しています。
後は好きにエイリアス設定してください。

# 問題
Gitはコマンドが多すぎたのでまだ書いてません。必要に迫られたら書こうと思います。
ただあると楽なのは目に見えている。
これこそ「最初大変、後々楽」する典型ですね。
`怠惰・短気・傲慢`...

Dockerは普段使わないので、アクションの順番は適当かつ、そのままでは使えないコマンドもいくつか。。。
Dockerだけ、もう一段pecoをかませる必要がありそうです。
たぶん誰かやっていただけることでしょう。

あとはアクションをそれぞれの`help`から引っ張ってこれるようにしたら楽そう。
ソース自体のリファクタリングもできそうなのでどなたか。。。

オプションを付けると今のカレントディレクトリに戻ってくるようにしたかったですが、オプションの設定の仕方まで調べられなかったです。。。
あわせて誰か教えていただけると嬉しいです:)

随時更新予定です。

最近はpecoが流行り過ぎて、皆さんお辞儀ばっかしてますね〜
webpackでbootstrap.jsが読み込めない場合の回避方法

# 回避方法

[resolve.alias]を使う．

```coffeescript
webpack
  ...
  resolve:
    alias:
      bootstrap: '/absolute/path/to/node_modules/bootstrap/dist/js/bootstrap.js'
```

ただし，後述しているように原因がわかっていないので，正しい解決方法ではない可能性が高い．

# 状況説明

`npm i jquery bootstrap`を事前に実行しておく．

```js:webpack.config.js
var webpack = require('webpack');

module.exports = {
  entry: './entry.js',
  output: {
    filename: 'bundle.js'
  }
};
```

```js:entry.js
require('bootstrap');
```

`webpack`を実行すると，以下のようなエラーが発生する．

```
ERROR in ./entry.js
Module not found: Error: Cannot resolve module 'bootstrap' in /path/to/project
 @ ./entry.js 1:0-20
```

このエラーが発生しても`bundle.js`は作成される．しかし，bootstrapの読み込みには失敗している．

```js:bundle.js
/* 0 */
/***/ function(module, exports, __webpack_require__) {

	__webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"bootstrap\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
```

# 原因分析

調査中．`webpack.config.js`をいろいろ変えてみたが，どれもうまくいかない．

* [resolve.root]
* [ここ](http://webpack.github.io/docs/usage-with-bower.html#configuration)の方法で`bower.json`を参照するように変えてもだめ
* その他，いろいろ組み合わせてみた

どうやらソースコードを読むしかないようだ．．．ソースコードから原因がわかったら，後で解析結果を追記する．

# 補足

`resolve.alias`でとりあえず`bootstrap.js`は読み込めるようになるが，ブラウザに`bundle.js`を読み込ませると以下のようなエラーが発生する．

```
Uncaught Error: Bootstrap's JavaScript requires jQuery 
```

この問題の解決には[imports-loader]を使う．`npm i -D imports-loader`を実行し，`entry.js`を以下のように修正する．

```js:entry.js
require('imports?jQuery=jquery!bootstrap');
```

```js:bundle.js
	/*** IMPORTS FROM imports-loader ***/
	var jQuery = __webpack_require__(2);
```

ソースコードに`window.jQuery = require('jquery');`を直接記述する必要はない．

[resolve.root]: http://webpack.github.io/docs/configuration.html#resolve-root
[resolve.alias]: http://webpack.github.io/docs/configuration.html#resolve-alias`resolve.alias
[imports-loader]: http://webpack.github.io/docs/shimming-modules.html#importing
AndroidでBLE端末を見つけるための実装方法


AndroidでBLE端末を見つけるための実装方法です。
BLEの仕様や用語等については[iBeacon（BLE）とは - Qiita](http://qiita.com/miyatay/items/4d4ce4ccd7905ddc0144)参照。

#パーミッションの設定
BLEに接続するためには、以下のパーミッションを設定する必要があります。

```xml:AndroidManifest.xml
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
```

また、アプリがBLE対応端末のみに対応していることを宣言するには、以下の記述をAndroidManifest.xmlに追記します。

```xml:AndroidManifest.xml
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
```

実行時にBLEが利用可能かどうかをチェックするには、以下のように記述します。

```Java
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
    // BLEが利用出来ない端末だった場合の処理を記述
}
```

#周辺のBLE端末を見つける
端末の周辺にあるBLE端末を見つけるだけなら、GATTサーバに接続する必要はありません。
以下のようにBluetoothAdapterを利用して、スキャン開始、停止を行います。
その際にコールバックを登録すればOKです。

```Java

public class BLEActivity extends Activity {
	/** スキャン時間 */
	private static final long SCAN_PERIOD = 10000;
	/** BLE機器のスキャンを行うクラス */
	private BluetoothAdapter mBluetoothAdapter;
	/** BLE機器のスキャンを別スレッドで実行するためのHandler */
	private Handler mHandler;
	/** BLE機器をスキャンした際のコールバック */
	private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
		@Override
		public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
			// スキャンできた端末の情報をログ出力
			ParcelUuid[] uuids = device.getUuids();
			String uuid = "";
			if (uuids != null) {
				for (ParcelUuid puuid : uuids) {
					uuid += puuid.toString() + " ";
				}
			}
			String msg = "name=" + device.getName() + ", bondStatus="
					+ device.getBondState() + ", address="
					+ device.getAddress() + ", type" + device.getType()
					+ ", uuids=" + uuid;
			Log.d("BLEActivity", msg);

		}
	};

	/**
	 * スキャン開始ボタンタップ時のコールバックメソッド
	 * @param v
	 */
	public void onClickScan(View v) {
		// 10秒後にBLE機器のスキャンを開始します
		mHandler.postDelayed(new Runnable() {
			@Override
			public void run() {
				mBluetoothAdapter.startLeScan(mLeScanCallback);
			}
		}, SCAN_PERIOD);
	}

	/**
	 * スキャン停止ボタンタップ時のコールバックメソッド
	 * @param v
	 */
	public void onClickStop(View v) {
		// BLE機器のスキャンを停止します
		mBluetoothAdapter.stopLeScan(mLeScanCallback);
	}
...

```

また、startLeScanメソッドの第一引数にUUIDの配列を渡すと、スキャン対象のBLE機器を絞ることが出来るようです。
詳細はJavadocを参照してください。
[BluetoothAdapter | Android Developers](http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html)

なお、BLE機器と通常のBluetooth機器を同時にスキャンすることはできないようです。
どちらか一方のスキャンのみできます。
iOSアプリ学習メモ

##Xcodeの使い方
- [ズバわかり! プログラミング Objective-C iPhoneアプリ開発 スタートブック](http://www.amazon.co.jp/dp/4800710472/ref=cm_sw_r_tw_dp_ig5fub1G36CHX)

Xcodeの使い方を学びつつ、Swiftのコードへ書き換えていく。

##Swift
- [Swiftを触ってみた - ギークに憧れて](http://hotchemi.hateblo.jp/entry/2014/06/04/084737)
- [The Swift Programming Language](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/)
- [iOS 8 特集 解説記事 100本 一挙公開!! ｜ 特集カテゴリー ｜ Developers.IO](http://dev.classmethod.jp/referencecat/ios8/)
- [Swift開発者Wiki](http://swift-ios.wikidot.com/)
- [Swift Docs](https://sites.google.com/a/gclue.jp/swift-docs/)
Python - Quick start of logging


Ref:
[1] - [Good logging practice in Python](http://victorlin.me/posts/2012/08/26/good-logging-practice-in-python)

#### A very simple file logger:

```python
import logging

logger = logging.getLogger(__name__) # this will show current module in the log line
logger.setLevel(logging.INFO)

# create a file handler

handler = logging.FileHandler('hello.log')
handler.setLevel(logging.INFO)

# create a logging format

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# add the handlers to the logger

logger.addHandler(handler)

logger.info('Happy logging!')

```

#### Logging in a catch

```python
try:
    open('/path/to/does/not/exist', 'rb')
except (SystemExit, KeyboardInterrupt):
    raise
except Exception, e:
    logger.error('Failed to open file', exc_info=True)
```
Selenium IDE 2.7.0に上げるとMacOSX Firefox 32で動くようになった

# Selenium IDE利用者への情報共有
* 以前は、[Selenium IDE 2.6.0はMacOSX Firefox 32.0では動かない](http://qiita.com/oh_rusty_nail/items/27eaeb98982f788de2a9)の記事のとおりでしたが修復されました
* http://www.seleniumhq.org/download/ からSelenium IDE [2.7.0](http://release.seleniumhq.org/selenium-ide/2.7.0/selenium-ide-2.7.0.xpi)をダウンロード
* ついでにFirefoxを32.0.1にバージョンアップ
* 2014/09/14にリリースされていた
* 前バージョン2.6.0が出てからわりとすぐに対応されている
 * ブラウザのバージョン上げたらSelenium IDEが真っ白にとなったらなんもできないですもんね！
* 未だバージョンアップされていない方はぜひ！！

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
OSXでファイルフォーマットを変換する


# 背景
・Excelで貰ったデータを取り込みたい
・UTF8のデータをExcelで読むためにさくっとSJISに変換したい

# 事前準備
`nkf`をインストールする

```
$ brew install nkf
```

# 変換

UTF8 to SJIS

```
$ nkf -s utf8_file.csv > sjis_file.csv
```

SJIS to UTF8

```
$ nkf -w sjis_file.csv > utf8_file.csv
```
IntelliJ IDEAでclassファイルをデコンパイルしたソースコードを表示する

IntelliJ IDEAでclassファイルをデコンパイルしたソースコードを表示する方法について紹介します。

File > Settings > Pligins を選択し、「Browse Respositories」ボタンをクリック。「decompiler」で検索し、表示されるリストにある「Java Decompiler IntelliJ PliginCode tools」をダブルクリックし、インストールします。

![jd.png](https://qiita-image-store.s3.amazonaws.com/0/43869/b02ec168-f050-cc7b-4fa4-f5827311716a.png)


ダウンロード、インストールしたらIntellJ IDEAを再起動します。

![jdsettings.png](https://qiita-image-store.s3.amazonaws.com/0/43869/8f775601-ec18-e068-e79c-bdb690ff3fed.png)

File > Settings > Java Decompiler を選択し、Decompilerの設定画面を表示します。「Realign line number」と「Show line number」にチェックしておくと、クラスファイルを生成したJavaのソースコードと対応した行数で整形してくれるようになります。

ソースコードが無いjarファイル内のクラスを参照しても、以下のように逆コンパイルしたソースコードが表示されます。
![decosrc.png](https://qiita-image-store.s3.amazonaws.com/0/43869/7d88dc08-0dc5-8114-86b0-15fc0a2575df.png)
sudoers は編集せずに sudoers.d の中に設定を書こう

他のディストリビューションは知りませんが RHEL/CentOS 6 や 7 なら `/etc/sudoers.d/` の中に作成したファイルも `sudoers` として有効になります。

```
visudo -f /etc/sudoers.d/wheel
```

いつもこんな感じです。

```
%wheel ALL=(ALL) NOPASSWD: ALL
Defaults:%wheel !requiretty
Defaults:%wheel env_keep += SSH_AUTH_SOCK
```

RHEL/CentOS 5 でも `/etc/sudoers` に次の行を書いておけば `/etc/sudoers.d/` を有効にできます。

```
#includedir /etc/sudoers.d
```

ぱっとみコメントアウトされているように見えますが、この `#` はコメントを意味するものではありません。`#include` や `#includedir` だけは行頭の `#` がコメントにはなりません。
個人用Emacs Cheatsheet

よく忘れるキーストロークを記載

## ivyの候補を無視してenter

`C-M-j`

## ツールバーメニュー(File, Edit, Options ... etc)の実行

``M-` ``

## バッファ再オープン

`Ctrl-x` `Ctrl-v`

## リージョンにシェルコマンド適用

| ストローク | 機能 |
|:---:|:---:|
| M-&#124; | ミニバッファに出力 |
| C-u M-&#124; | リージョンを出力で置き換え |
 
## emacs-mozc

| ストローク | 機能 |
|:---------:|:----:|
| C-k  | 文節縮小 |
| C-l  | 文節拡大 |
| C-s | 左の文節へ |
| C-d | 右の文節へ |
| C-e | 前の候補へ |
| SPC | 次の候補へ |

## コマンドの結果をバッファに取り込みたい

`C-u M-!` でコマンドを実行すれば良い

## フレーム分割線の移動

| ストローク | 機能 |
|:---------:|:----:|
| C-x {  | 範囲縮小 |
| C-x }  | 範囲拡大 |

## ブックマーク

| ストローク | 機能 |
|:---------:|:----:|
| C-x r m  | ブックマーク登録 |
| C-x r l  | ブックマーク一覧 |

## レジスタ

| ストローク | 機能 |
|:---------:|:----:|
| C-x r SPC `<char>`  | レジスタ`<char>`に現在位置登録 |
| C-x r j `<char>`  | レジスタ`<char>`へジャンプ |

## VCS

| ストローク | 機能 |
|:---------:|:----:|
| C-x v g  | blame |
| C-u C-x v =  | リビジョンを指定してdiff |
| C-u C-x v ~  | 特定のリビジョン表示　|

http://dev.ariel-networks.com/articles/emacs/part7/

## 矩形操作

| ストローク | 機能 |
|:---------:|:----:|
| C-x r d  | 矩形領域削除 |
| C-x r t  | 矩形領域を文字で置き換え |
| C-x r o  | 空文字挿入　|
| C-x r r `<char>` | 矩形領域を`<char>`レジスタへ格納 |
| C-X r i `<char>` | `<char>`レジスタの句形領域を挿入 |

http://tech.kayac.com/archive/emacs-rectangle.html

### 矩形モードへ

`C-x SPC`

## 大文字/小文字変換

| ストローク | 機能 |
|:---------:|:----:|
| M-u  | カーソル位置から単語末まで大文字化 |
| M-l  | 同小文字化 |

## 文字コード

| ストローク | 機能 |
|:---------:|:----:|
| C-x RET r  | 現在のファイルを指定した文字コードで再オープン |
iPhone/iPadのスクリーンショットに便利なPSDモックのリンク


iPhone6/6Plusの登場でiPhoneアプリを申請するだけでも、2種類増えて4種類の解像度の画像が求められるようになりましたね。非常に面倒です。

それぞれのスクリーンショットにiPhone/iPad本体の画像を含めるのに便利なモックのリンクを張ります。
ダウンロードにアカウントは不要です。
現時点でライセンスには商用利用可能&再配布禁止と書いていますが詳しくはサイトの方を参照してください。

iPhone4s
3.5インチ
http://www.pixeden.com/psd-mock-up-templates/iphone-4s-psd-vector-mockup-template

iPhone5/5s
4インチ
http://www.pixeden.com/psd-mock-up-templates/iphone-5s-psd-vector-mockup

iPhone6
4.7インチ
http://www.pixeden.com/psd-mock-up-templates/iphone-6-psd-vector-mockup

iPhone6 Plus
5.5インチ
http://www.pixeden.com/psd-mock-up-templates/iphone-6-plus-psd-vector-mockup

iPad Air
http://www.pixeden.com/psd-mock-up-templates/ipad-air-psd-vector-mockup



解像度についてはこちらが参考になります。
[Qiita iPhone6/iPhone6 Plusの画面対応について / uebo](http://qiita.com/uebo/items/854c284ed11aca741d93)
ActiveDirectoryの設計方針について

複数のドメインコントローラを用いてActiveDirectoryを構成する際の個人的な設計方針について備忘録として記載します。
（作成途中）

# Active Directoryについて
Active DirectoryについてはMicrosoftがTechNet上で技術情報を公開していますのでそちらを参照してください。
[Active Directory技術情報](http://technet.microsoft.com/ja-jp/windowsserver/bb466131.aspx)

# 仮想化する際の指針
Active Directoryのドメインコントローラを仮想化する際は以下リンク先を参照してください。
[仮想化ドメイン コントローラーの計画に関する考慮事項](http://technet.microsoft.com/ja-jp/library/dd348476%28v=ws.10%29.aspx)

# AWS上に構築する際の指針
AWS上にActive Directory環境を構築する際は以下の資料が参考となります。
[Active Directory on AWS](http://www.slideshare.net/ryukiyoshimatsu/active-directory-on-aws-jaws-days-2014) 

# 雑感
Active Directory環境を構築する際の注意点としては、時刻の同期、仮想環境上での時刻のずれ、バックアップの取得方法、リストア方法が挙げれるかと思います。
リストア方法については、やり方によってはActive Directory環境が壊れる可能性もありますので注意する必要があります。検証環境などでリストア方法を確立してから本番適用が望ましいです。
また、Windows Server 2012から「VM-Generation-ID」というパラメータが追加されているようなのでこちらの仕組みも考慮すると良さそうです。（Hyper-V、VMware環境ではサポート対象）
デキる方と一日Androidハッカソンやってみたのでまとめ


Androidのデキる方と一日Androidハッカソンやってみたのでまとめ
（ちな俺iOSしかできない勢なため、ほぼ教えて貰ってました_|￣|○）

## プロジェクトの構成
* src  
* gen  
* bin  
* libs  
* assets  
* res  
  * drawble-〜dpi  
  * layout  
  * menu
  * values
* AndroidManifest.xml  

### src

アプリのソースファイルはこの中で管理する
ここで実装したActivityはAndroidManifest.xmlに必ず記載が必要(別途説明)

### gen & bin
省略

### assets

以下URLより学習
http://www.uni-labo.com/blog/2011/08/12/android-raw%E3%81%A8assets%E3%81%AE%E4%BD%BF%E3%81%84%E5%88%86%E3%81%91/

アプリ側で好き勝手にいじりたいリソースはここになるって認識
ちゃんとリソースごとに管理用の処理を実装してあげないといけない

### res

静的リソースファイル群、ここに突っ込んだリソースはリソースIDが降られ、
R.から始まる書き方でアクセスできるようになる

#### res/drawble-〜dpi
複数解像度対応時に同じ画像名で突っ込んで画像を呼び出せば、
自動で振り分けてくれる、便利！
(iOS側の解像度対応@2xェ・・・・)

#### res/layout

ここにsrcで実装したActivityクラスと対になるレイアウトファイル用意する
例えばMainActivityクラスだったらactivity_main.xmlとなる
（特に命名規則は無くactivity_(アクティビティクラスのprefix)が一般的というだけ)

#### res/menu
ここもlayoutと同じでメニュー用のレイアウトファイルを用意する

#### res/values
上のどれにも当てはまらない静的なリソースはここに突っ込んでおけば問題なさそう

#### AndroidManifest.xml 
Androidのアプリ定義ファイル
アプリで表示する画面は全てここに書く

```xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="パッケージ名"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

　　<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".FirstActivity"
            android:label="@string/title_activity_first" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SecondActivity"
            android:label="@string/title_activity_second" >
        </activity>
        <activity
            android:name=".ThirdActivity"
            android:label="@string/title_activity_third" >
        </activity>
    </application>
</manifest>
```


まず起動時に表示する画面に関しては以下のようにして記載
要はintent-filterタグの中身を起動したいactivityタグの中で書けばいい

```xml
<activity
  android:name=".FirstActivity"
  android:label="@string/title_activity_first" >
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
```

後は画面追加の度にペロっと以下のように追加していく

```xml
<activity
  android:name=".SecondActivity"
  android:label="@string/title_activity_second" >
</activity>
<activity
  android:name=".ThirdActivity"
  android:label="@string/title_activity_third" >
</activity>
```

## 感想

AndroidはiOSと違ってリソースを管理する仕組みが親切すぎると思いました。
大体iOSで同じことをしようとする場合はリソース専用のクラスを切ったりしないと
カオスなことになりやすいのでその辺りはすごく羨ましすぎる・・・
ソースに絡む部分はまた後日投稿しようと思います。
fluentdのltsv取り込み設定メモ


[こちらのメモで](http://qiita.com/okuda_h/items/0f735ac510474276bd5f)httpdでltsvを設定したのでtd-agentで取り込む設定をする。

# fluentd(td-agent)をinstall

##### 参考
[Installing Fluentd Using rpm Package](http://docs.fluentd.org/articles/install-by-rpm)


```
$ sudo yum update -y
$ curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh
```


# fluentd設定ファイルを修正

##### 参考
[(3) Re-use your config: the “include” directive](http://docs.fluentd.org/articles/config-file#3-re-use-your-config-the-ldquoincluderdquo-directive)


```/etc/td-agent/td-agent.conf
# 追記
include config.d/*.conf

```

##### 以下に設定ファイルを新規作成して記述



``` /etc/td-agent/config.d/ltsvsample.conf
# source
<source>
  type tail
  format ltsv
  time_key time
  time_format %Y/%m/%d %H:%M:%S %z
  path /var/log/httpd/access_log
　pos_file /var/log/td-agent/tmp/apache.access.log.pos
  tag ltsv.sample
</source>

# match 
<match ltsv.sample>
  type stdout
</match>
```

# stdoutログを開いて確認してみる.

``` /var/log/td-agent/td-agent.log
2014-09-14 10:15:56 +0000 [info]: adding source type="http"
2014-09-14 10:15:56 +0000 [info]: adding source type="debug_agent"
2014-09-14 10:15:56 +0000 [info]: adding source type="tail"
2014-09-14 10:15:56 +0000 [warn]: 'pos_file PATH' parameter is not set to a 'tail' source.
2014-09-14 10:15:56 +0000 [warn]: this parameter is highly recommended to save the position to resume tailing.
2014-09-14 10:15:56 +0000 [info]: adding match pattern="apache" type="file"
2014-09-14 10:15:56 +0000 [info]: adding match pattern="ltsv.sample" type="stdout"
2014-09-14 10:15:56 +0000 [info]: listening fluent socket on 0.0.0.0:24224
2014-09-14 10:15:56 +0000 [info]: listening dRuby uri="druby://127.0.0.1:24230" object="Engine"
2014-09-14 10:15:56 +0000 [info]: following tail of /var/log/httpd/access_log
2014-09-14 10:16:07 +0000 ltsv.sample: {"domain":"xx.xx.xx.xx","servername":"127.0.0.1","host":"122.29.141.56","server":"xxx.xx.xx.xxx","ident":"-","authuser":"-","timestamp":"2014/09/14 10:16:07 +0000","method":"GET","reqpath":"/index.html","path":"/index.html","query":"","protocol":"HTTP/1.1","req_status":"304","status":"304","size":"0","referer":"-","agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36","agent_out":"-","response_time":"192","cookie":"-","set_cookie":"-","xforwardfor":"-","filename":"/var/www/html/index.html","port":"80","proc_id":"30711","pid":"30711","request":"GET / HTTP/1.1","con_status":"-","recv_size":"463","send_size":"148","exe_time":"0"}
```




以上
Apache Httpd アクセスログ設定メモ

Apache httpdのアクセスログでltsvで出力するための書式をメモ

### 基本的な書式
`<key1>:<value1>\t<key2>:<value2>\t ...`



### apache httpd 設定

```/etc/httpd/conf/httpd.conf
# LogFormat
LogFormat "domain:%V\tservername:%v\thost:%h\tserver:%A\tident:%l\tauthuser:%u\ttime:%{%Y-%m-%d %H:%M:%S %z}t\ttimestamp:%{%Y/%m/%d %H:%M:%S %z}t\tmethod:%m\treqpath:%U%q\tpath:%U\tquery:%q\tprotocol:%H\treq_status:%s\tstatus:%>s\tsize:%B\treferer:%{Referer}i\tagent:%{User-Agent}i\tagent_out:%{User-Agent}o\tresponse_time:%D\tcookie:%{cookie}i\tset_cookie:%{Set-Cookie}o\txforwardfor:%{X-Forwarded-For}i\tfilename:%f\tport:%p\tproc_id:%P\tpid:%{pid}P\trequest:%r\tcon_status:%X\trecv_size:%I\tsend_size:%O\texe_time:%T" ltsv

# ELBのヘルスチェックとfavicon.icoの出力の除外設定
SetEnvIf User-Agent "ELB-HealthChecker/1\.0" nolog
SetEnvIf Request_URI "/favicon.ico" nolog

# CustomLog 
CustomLog logs/access_log ltsv env=!nolog

```

### その他　使えるかもしれないフォーマットをメモ

|     内容  　| フォーマット  |     表示例      |
|:----------:|:-----------:|:------------:|
| エポック時間 |     %{%s}t  |    1410611033|


### フォーマット参考にしたURL
[Apache モジュール mod_log_config](http://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html)
["時刻フォーマットドキュメント"](http://linux.die.net/man/3/strftime)
正規表現の(.*?)と(.*)の違い

aaa/bbb という文字列で、bbb をマッチさせたいのですが、`aaa/(.*?)` ならマッチして、 `aaa/(.*)` ではマッチしない理由がわかりません。
理由をご教授いただけないでしょうか。

[aaa/(.*?) のマッチ](https://pythex.org/?regex=aaa%2F(.*%3F)&test_string=aaa%2Fbbb&ignorecase=0&multiline=0&dotall=0&verbose=0)

[aaa/(.*) のマッチ](https://pythex.org/?regex=aaa%2F(.*%3F)&test_string=aaa%2Fbbb&ignorecase=0&multiline=0&dotall=0&verbose=0)
Sublime Text3


### Setup

- http://www.sublimetext.com/3
- MacOS版Install
- Package Controll設定
 - https://sublime.wbond.net/installation
 - ctrl+` ののち、Copy & Paste...

### 追加パッケージ

Package Controll設定済みのため、ctrl+Shift+PでInstall Packageで検索。

- japanize
- ConvertToUTF8(SJIS, EUCの読み書きのため)
- Codecs33 (SJIS, EUCの読み書きのため)
 -  Ref: http://memo.sanographix.net/post/80745994080
- CSS Snippets
- jQuery
- HTML5
- Git

### コマンドラインからの起動

シンボリックリンク作成。

```
ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl
```

### 注意書き（自分の場合）

SublimeText3で編集 / 保存すると、ファイルのパーミッションが変わっちゃう状況が発生。（755 -> 644になってしまったり）
こちらに該当する模様だけれど、全てで再現するわけではないのかな？

- https://github.com/SublimeText/Issues/issues/239
 - ST3 Build 3059 - Files created with unexpected permissions #239
- shell, cgiといった、ファイルパーミッションが必要なものの修正時には注意。
Rails3アプリをRails4で書いたら、正規表現でエラー出た


[RailsによるアジャイルWebアプリケーション開発第4版](http://www.amazon.co.jp/Rails%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%ABWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E7%AC%AC4%E7%89%88-Sam-Ruby/dp/4274068668)
この書籍で勉強を行っているのだが、書かれた時期が2011年で、Railsのバージョンが3である。なので、現在のRails4で開発していたのだが、Modelのバリデーションでの正規表現を書いている際、以下のエラーが出現

__The provided regular expression is using multiline anchors (^ or $), which may present a security risk. Did you mean to use \A and \z, or forgot to add the :multiline => true option?__

ぐぐってみたら、全く同じところで躓いていた人がいたので、[その記事](http://jumperson.hatenablog.com/entry/2013/06/27/062237)を見て解決したので、変えたコードとともに掲載しておく


#### before

```ruby:product.rb
class Product < ActiveRecord::Base
  validates :title, :description, :image_url, presence: true
  validates :price, numericality: {greater_than_or_equal_to: 0.01}
  validates :title, uniqueness: true
  validates :image_url, allow_blank: true, format: {
    with: %r{\.(gif|jpg|png)$}i,
    message: 'はGIF,JPG,PNG画像のURLでなければなりません'
  }
end
```
Rails4では、\^を\Aで、\$を\Zで書く必要があるらしいので、
このコードで、_with: %r{\.(gif|jpg|png|$}i_の記述は、\$を\Zに変える必要があった。

#### after

```ruby:product.rb
class Product < ActiveRecord::Base
  validates :title, :description, :image_url, presence: true
  validates :price, numericality: {greater_than_or_equal_to: 0.01}
  validates :title, uniqueness: true
  validates :image_url, allow_blank: true, format: {
    with: %r{\.(gif|jpg|png)\z}i,
    message: 'はGIF,JPG,PNG画像のURLでなければなりません'
  }
end
```
テキスト投稿を使うべきか、画像投稿を使うべきか


tumblrカスタマイズをやっていて時々迷うのが、投稿タイプとして、テキスト投稿を使うか・写真投稿を使うか、というところです。

*「写真を投稿するなら写真で、テキストならテキストなんじゃないの?」* と思うかもしれないですが、そう単純でもなく。
テキスト投稿でも、「埋め込み画像」として画像をいくらでも追加できるし、
写真投稿でも、「キャプション」としていくらでもテキストが記述できてしまうのです。
(もっと言えば、写真投稿のキャプションに埋め込み画像いれることもできる…)

しかしながら、画像の取り扱いや、単独で取り出せる情報のパターンなどで、何点か注意すべき差異があるので、まとめてみました。


## Photo (PhotoSet)

### ◯ 画像の画質を指定して埋め込める

```
{PhotoURL-100}
{PhotoURL-250}
{PhotoURL-400}
{PhotoURL-500}
{PhotoURL-HighRes}
```

といった感じで、いくつかのサイズを指定して画像URLをとってくることが可能。
500px以上の高画質写真を使っている場合は、HighResを使う。

### ◯ OGP画像の設定が容易

(容易って感じがしないサンプルだけど) こんなかんじ。

```
{block:PermalinkPage}
  {block:Posts}
    {block:Photo}
      <!-- ogp from photo post -->
      <meta property="og:image" content="{PhotoURL-HighRes}" />
    {/block:Photo}
    {block:PhotoSet}
      <!-- ogp from photoset post -->
      {block:Photos}
        <meta property="og:image" content="{PhotoURL-HighRes}" />
      {/block:Photos}
    {/block:PhotoSet}
  {/block:Posts}
{/block:PermalinkPage}
```

### × タイトルがひっこぬけない

`{Caption}`内のテキストとして、タイトルっぽいものを作ることはできるけど(太字とかで)、その部分を単独で、HTMLとして引っこ抜くことはできない。
そのため、title要素やog:titleにそれらを設定するのは難しい。

OGP対応としては、`{Caption}`をまるごとog:descriptionに入れてあげるのがまぁ無難かなぁと思っている。

## Text

### ◯ titleがある

`{Title}`で記事のタイトルだけ引っこ抜ける。
というか、記事にタイトルが付けられるのは、テキスト投稿とリンク投稿のみ。

### △ 投稿内の画像をOGP画像にはできない

テキスト本文(`{Body}`)から、画像の部分だけを引っこ抜くということはできないので、埋め込んだ画像だけどog:imageに設定する、などということは難しい。

ただし、og:imageを設定せず、ふつうのimg要素として入っていれば、実質OGP画像として使われるというケースも多いので、あんまり問題にはならないかも。

### △ 画像サイズは、縦横500px以内に制限される

テキスト投稿内に画像を埋め込む場合、画像はtumblr側でリサイズされてしまう。
場合によっては致命的。

## まとめ

 - tumblrを使う場合、 **og:titleもog:imageも完璧に指定することはできない** 、ということを念頭に置くべし
   - (ただしog:imageを明示的に指定しなくてもよいケースなら問題なし)
 - 画像を500px以上で出したいときには写真投稿を使うべし

## 参考

 - [Creating a custom HTML theme | Tumblr](https://www.tumblr.com/docs/en/custom_themes)
Swift - Xcode 6.1-Beta2 における変更点

というわけでつつがなくMacBook Airより高い[キョダiPhone]128GBを予約するやいなや、YosemiteがDP8に、[XCodeが6.1-Beta2]になっていたので。

[キョダiPhone]: http://www.apple.com/jp/iphone-6/
[XCodeが6.1-Beta2]: https://developer.apple.com/xcode/downloads/

## Swiftが1.1に

[1.0が出たばかり]だというのになんとも気が早いことです。Xcodeも6.1こそ本命ということでしょうね。

[1.0が出たばかり]: http://qiita.com/dankogai/items/e0fcd1123a93b3d0b54f

## Beta6より引き続き…

[Optional型に関するさらなる改良]はずっとやっているみたいです。

[Optional型に関するさらなる改良]: http://qiita.com/dankogai/items/9058a8d4209cf59580db#2-1

## Failable Initializer

で、1.0と1.1で最も変わったのがこれでしょう。これまでは

````swift
let foo = Foo.fromBar(yourBar) // foo:Foo?
````

とFactory Methodを用意していたものが、

````swift
let foo = Foo(bar:yourBar) // foo:Foo?
````

と、Failable Initializerに移行されました。Failableというだけあって、戻り値は`Foo`ではなく`Foo?`です。

自分で書く場合`init()`の代わりに`init?()`を定義し、その中で`return nil`すればよいようです。

### Objective-Cのinitializerのimport

`nil`を明確に返す場合は`init?`、そうでない場合は`init!`として`import`されるようです。

### enum の.fromRaw(value)もYourEnum(rawValue:value)に

`RawRepresentable`プロトコルに従った(つまりで型を継承している)`enum`はにはもれなく`.fromRaw(val)`メソッドがついてきたのですが、これも`YourEnum(rawValue:val)`という書き方に変わりました。

加えて`.toRaw()`メソッドも`rawValue`プロパティに置き換えられています

````swift
enum Foo: Int { case A = 0, B = 1, C = 2 }
let foo = Foo(rawValue: 2)! // 以前は 'Foo.fromRaw(2)!’
println(foo.rawValue) // 以前は 'foo.toRaw()'!
````

##  @UIApplicationMainアトリビュート

iOSにおける`@UIApplicationMain`に相当する`@NSApplicationMain`がOS Xのapp delegateにおける暗黙の`main`を指定するアトリビュートとして追加されました。

私からは以上です。

Dan.the.Swift.Newbie?
Sassのvariableに名前空間を導入してみる

#listで連想配列を作って実現

デフォルトでそれらしい仕組みは導入されていないけど、listを駆使すればそれっぽいことはできます。3.3だとmapとかが使えるらしい

```sass
@function flatten($list)
  $result: ()
  @if type-of($list) == list
    $result: flatten(nth($list, 1))
    @for $i from 2 through length($list)
      $result: join($result, flatten(nth($list, $i)))
  @else
    $result: append($result, $list)
  @return $result

@function join-string-list($list, $separator)
  $result: ''
  @if type-of($list) == list
    $result: nth($list, 1)
    @for $i from 2 through length($list)
      $result: $result + '-_-' + nth($list, $i)
  @else
    $result: $list
  @return $result

$namespaced-variables: ()

@function namespace-concatenated-path($path)
  @return join-string-list(flatten($path), '-_-')

@function v($path)
  $cp: namespace-concatenated-path($path)
  $i: 1
  @while $i < length($namespaced-variables) + 1 and nth(nth($namespaced-variables, $i), 1) != $cp
    $i: $i + 1
  @if $i == length($namespaced-variables) + 1
    @return null
  @else
    @return nth(nth($namespaced-variables, $i), 2)

@function sv($path, $val)
  $namespaced-variables: append($namespaced-variables, namespace-concatenated-path($path) $val)
  @return $val
```

こいつをimportしてやって、以下のように使います

```sass
$_: sv(common main width, 960px)
$_: sv(common main button width, 200px)

$ns: common main
.main
  width: v($ns width)
  .button
    width: v($ns button width)
```

#mixinにも応用

mixinに名前空間を導入するには、値をセットするときに動的なセレクタ定義、値をゲットするときに`@extend`を使用して動的にセレクタを読みこめばできるはずですが、まだやっていません

と思ったけど、`@extend`って少し意味が違うんですね

#less使えば？

まぁそれはごもっともな意見ですがね… 括弧とかセミコロンが要らないのは大きい
Jmeterの結果をChatworkで知らせる方法


時間がかかるパフォーマンステストの結果をチャットワークで知らせる方法です。
jmeterではスクリプトでほぼ何でもできそうなので、それを使えば簡単です。
この記事ではスクリプトとしてgroovyを使います。
アサーションとHTTPステータスコードとHTTPレスポンスを見てエラーか成功かをチャットワークAPIを使って知らせます。

# 準備

何はともあれ、chatwork api利用の申請をする必要があります。
以下のリンクに申請方法が書いてあります。申請して、一日くらい立つとメールが来て利用できるようになります。
http://developer.chatwork.com/ja/

利用できるようになったら、以下のリンクにあるようにトークンを取得します。
http://developer.chatwork.com/ja/authenticate.html


次にjmeterでgroovyとそのhttp通信を簡単に使えるようにします。

JMETER_HOME/lib/extに次のjarを入れます。(全部入れなくても大丈夫かも)

* groovy-all-2.4.0-beta-3.jar
* http-builder-0.7.1.jar
* json-lib-2.4-jdk15.jar
* nekohtml-1.9.21.jar
* xml-resolver-1.2.jar

# コード

JSR223 Samplerにコードを記述します。

![スクリーンショット 2014-09-16 0.11.03.png](https://qiita-image-store.s3.amazonaws.com/0/10494/50f892e7-e37a-8c8f-1b99-283c5e1e3be7.png "スクリーンショット 2014-09-16 0.11.03.png")


```chatwork.groovy
def assertResults = prev.assertionResults;
def response = prev.responseDataAsString
def statusCode = prev.responseCode
 
def postBody
 
if(response.contains('ERROR') || assertResults.any{it.isFailure()} || statusCode != '200') {
	postBody = ['body':'Error !']
}else {
	postBody = ['body':'Success !']
}
 
 
def http = new groovyx.net.http.HTTPBuilder( 'https://api.chatwork.com' )
 
http.post( path: "/v1/rooms/${vars['chatwork.roomId']}/messages", 
           body: postBody, 
           headers: ['X-ChatWorkToken' : "${vars['chatwork.token']}"] ) { res ->
    assert res.statusLine.statusCode == 200
}

```

```${vars['chatwork.roomId']``` と ```${vars['chatwork.token']}``` はjmeterの変数です。
ユーザ定義変数にチャットワークで取得した値を書いておきます。
chatwork.roomIdは、チャットのURLの末尾の ```#!rid``` に続く番号を記述します。
chatwork.tokenは、チャットワークの「動作設定」→「API発行」で取得した値を記述します。


![スクリーンショット 2014-09-16 1.30.56.png](https://qiita-image-store.s3.amazonaws.com/0/10494/8010b9a2-f013-d83c-af6a-a5e2876af78a.png "スクリーンショット 2014-09-16 1.30.56.png")


これでjmeterを動作させると指定のチャットグループにメッセージが表示されます。
あとは、知らせたいタイミングを変えたり、テスト名を表示するようにしたり、大抵のことはできるので、自分好みにスクリプトをいじると良いと思います。
omniauthとpowを使っていてコールバック先のポートが19999になる場合の対処方法

`config/initializers/omniauth.rb`あたりで次のように設定する:

```rb
OmniAuth.config.full_host = "http://yourapp.dev"
```

omniauth-twitter あたりを使っていると`redirect_uri`パラメータが`request.env`をもとに作られて認可サーバに送られるんだけど、powが19999とかで一旦プロキシしてから処理してるのでそのときにポート番号が変わってしまう。

Twitterの管理画面でCallback URLを書き換えても効果が無かった。
Macを購入してインストールしたツールたち


タイトル通りです。
ほとんどは以下のサイトの内容をみながらインストールしたり、前から使ってたツールとかなのでほとんどメモ書きみたいなもんですね。
あと、Vimのプラグインとかはここには書いてないです。
参考になれば。
※順次更新していきます

# 参考にしたサイト
+ [Wantedlyで行っている開発者用Macの設定方法（主にインターン用）](http://qiita.com/awakia/items/6507fe91b1ad38cbe072): とりえあずここのcooker使っていろいろ入れた。
+ [Mac始めて6年目にして、使い続けている開発ツール73選](http://qiita.com/suin/items/a45f14aeb31f169c616e)
+ [【まとめ】これ知らないプログラマって損してんなって思う汎用的なツール 100超](http://qiita.com/suin/items/f570f057a0ff927b47dc)
+ [おすすめのMac無料アプリ、50個集めてみました。初心者から上級者までおすすめです。](http://macwin.org/mac/2013-freeapp50/)
+ [フロントエンジニアになってから５ヶ月間で欠かせなくなったツールを晒す](http://qiita.com/dayoshix/items/f3d73bac9d7b41076e1e)

# コマンドライン
## ツール管理
+ Homebrew: パッケージマネージャ
+ brew-cask: HomebrewでMacアプリをインストールするためのツール。

## DevOps
+ chef: cookerが自動インストール。自動構成ツールはansible使うつもりだけど……
+ Berkshelf: 同上
+ Xcode Command Line Tool: cookerが自動インストール。

## Git
+ git: バージョン管理ツール
+ tig: 名前をちょくちょく聞くのでMacデビューを機に使ってみようと入れる

## UNIXツールなど
+ curl: コマンドラインからHTTPリクエストできる。
+ wget: HTTPでファイルをダウンロードするときなど

## エディタ
+ MacVim: もうvimなしではいられません。

## シェル
+ tmux: コンソールで便利なやつらしいけどまだ全然使えてない
+ bash-completion: Bashコマンドの補完。シェルはBashしか使ったことないけどzshも興味ある。

# 言語・開発ツールなど
## バージョン管理ツール
+ npm: Node.jsのパッケージ管理ツール
+ rbenv: Rubyのバージョン管理といえば今はこれ？

## 言語・環境
+ node.js: node.js自体は書かないんだけど、javascriptの対話環境兼コードチェッカー用として。

## ツール系
+ jshint: javascriptのコードチェッカー。vimにsyntastic入れて使ってます。
+ rubocop: rubyのコードチェッカー。同上。
+ P4Merge: Gitのマージツール。Windowsから使ってるのでそのまんま。

## エディタ
+ Eclipse: Java用。ふと思うとJavaはAndroidしか書かないしいらなくね…？
+ adt-bundle: Eclipse+AndroidSDK。Androidも滅多に書かない（）
+ Xcode: まあ普通入れますよね。
+ Unity: なんか触る機会があるので。

## アプリ
+ Postgres: PostgreはいまRailsではメジャーらしいから、これを機に使ってみようかな。

# アプリ
## エディタ・IDE
+ CotEditor: 軽量なエディターらしいので入れてみる
+ Kobito: マークダウンエディタ兼、メモ書き用として
+ Mou: マークダウンエディターらしいけどKobitoで十分な気がしてきた
+ Evernote: MacならEvernote使う気になるかなと思ったけどKobitoに書きそう。

## グラフィック系ツール
+ Adobe WebPremium CS6: 一番使う機会があるのがIllustratorな気がします。
+ SimpleCap: Macのスクリーンキャプチャを便利にするやつ。デスクトップアイコンだけ消したり、メニューバーだけ撮影したり。
+ Skitch: シンプルな画面キャプチャ＆画像編集ツール
+ iMovie: 動画編集ソフト
+ VLC: Windowsでも使ってた、ほとんどの画像コーデックに対応した動画プレイヤー。ほとんど動画みないけど。
+ MPlayerX: キーボードやトラックパッドで快適に操作できる動画プレイヤーらしい。同上。

## ナリッジベース
+ Dash: オフラインでも言語やフレームワークのリファレンスが読めて横断検索とかできる超便利なやつ。

## DevOps
+ Vagrant: 仮想環境のCLIフロントエンド。Windowsで使ってる仮想環境の共有に便利
+ VirtualBox: Vagrantのバックエンド

## 開発用ユーティリティ
+ iTerm2: 高機能ターミナル。便利すぎて濡れる
+ Sequel Pro: MySQLのGUIクライアント。PHPMyAdminいらなさそう。

## Macの機能拡張
+ Alfred: 神ツールその1。どう考えても超絶便利なので絶対課金する。
+ BetterTouchTool: 神ツールその2。Windowsみたいにスナップ聞いたり、スワイプアクション拡張できたりいろいろ。
+ XtraFinder: 神ツールその3。隠しファイルの表示・非表示切り替えとか、Finderの機能を存分に拡張してくれる。
+ ClipMenu: コピペを機能拡張。画像やPDFなどをクリップボードに保存できるとかいろいろ。
+ Google Japanise IME: 日本語IME。ことえりより良いらしい。
+ CheetSheet: Commandを長押しするだけでショートカットのチートシートを表示してくれる。

## セキュリティ
+ Sophos: 無料のAnti-Virusソフト。入れといて損はなさそう。

## オフィススイート
+ OpenOffice: オープンソースのオフィススイート。Apacheライセンス。


## コミュニケーションツール
+ Skype: とりあえず。
+ LINE: とりあえず。

## 共有ドライブ
+ DropBox: とりあえず。
+ DropBox Encore: ２つ以上のDropBoxを同期・マウントできるようにする。
+ Google Drive: とりあえず。

## その他
+ OnyX: Macの高機能メンテナンスソフト。さっき入れたとこ
+ Magican: メモリ解放、クリーニング、アンインストーラー。同上
+ RelaX Melodies: オシャレな作業集中用BGMアプリ。
DataTablesのExtension、ColVisのイベント発火を手動でやる方法

DataTablesとは、リッチなテーブルを構築するjQueryライブラリです。
この記事はそのDataTablesのExtensionの一つであるColVisを使うものです。

[DataTables](http://datatables.net)
[ColVis](http://datatables.net/extensions/colvis/)
![capture.png](https://qiita-image-store.s3.amazonaws.com/0/19613/4f8656a9-98be-17a5-11a9-199791d57d53.png)

ColVisとは、テーブルの列の表示・非表示を制御するウィンドウを開くライブラリです。しかし、このライブラリを使うためのボタン設置方法がひとつしかなく、またBootstrap等を使っていると見た目が合わないため、自分で設置したオブジェクトにイベント発火して開けるようになると便利です。

## コード

```js
  var table = $("#myTable").dataTable();
  var colvis = new $.fn.dataTable.ColVis(table, {
    restore: "元に戻す",
    showAll: "全ての項目を表示",
    showNone: "全て隠す",
    // ここでtrueにしないとウィンドウ座標をいじっても反映されない
    bCssPosition: true,
  });
  // 設定ウィンドウを開くボタンか何か
  $("#action-view-setting").on("click", function(e) {
    e.preventDefault();
    var pos = {};
    var target = $(this);
    pos.x = target.offset().left;
    pos.y = target.offset().top + target.outerHeight();
    // dom.collection が設定ウィンドウ本体
    $(colvis.dom.collection).css({
      position: "absolute",
      left: pos.x, top:pos.y
    });
    // 設定ウィンドウを表示するためのアンドキュメントAPI
    colvis._fnCollectionShow();
  });
```
基盤地図情報（数値標高モデル）（5mメッシュ（標高））のGeoJSONストリームへのコンバータ

基盤地図情報（数値標高モデル）（5mメッシュ（標高））のGeoJSONストリームへのコンバータをつくった。かなりひねくれたコードだ。

```ruby
# coding: utf-8
# convert.rb
require 'json'

# Meshcode is probably Japanese English.
module Meshcode
  def Meshcode::width(meshcode)
    case meshcode.size
    when 8
      45.0 / 60 / 60
    else
      raise 'not implemented.'
    end
  end

  def Meshcode::height(meshcode)
    case meshcode.size
    when 8
      30.0 / 60 / 60
    else
      raise 'not implemented.'
    end
  end

  def Meshcode::lefttop(code)
    case code.size
    when 8
      [(code[2..3].to_f + code[5].to_f / 8 + code[7].to_f / 80) + 100, 
       (code[0..1].to_f + code[4].to_f / 8 + (code[6].to_f + 1) / 80) * 2 / 3]
    else
      raise 'not implemented.'
    end
  end
end

module DEM5A
  N_LNG = 225
  N_LAT = 150
  D_LNG = 1.0 / 80 / 225
  D_LAT = 2.0 / 3 / 80 / 150
  def DEM5A::parse(params)
    (left, top) = Meshcode::lefttop(params[:meshcode])
    skip = true
    count = 0
    File.foreach(params[:path], encoding: 'cp932') {|l|
      if l.include?('<gml:tupleList>')
        skip = false
        next
      elsif l.include?('</gml:tupleList>')
        skip = true
        next
      elsif !skip
        (x, y) = [count % N_LNG, count / N_LNG]
        lng = left + D_LNG * (x + 0.5)
        lat = top - D_LAT * (y + 0.5) 
        (type, height) = l.encode('UTF-8').strip.split(',')
        f = {:type => 'Feature', 
          :geometry => {:type => 'Point', :coordinates => [lng, lat]},
          :properties => {:type => type, :height => height.to_f}}
        print JSON::dump(f), "\n"
        count += 1
      end
    }
  end
end

ARGV.each {|path|
  next unless /xml$/.match path
  r = File.basename(path, '.xml').split('-')
  r.pop if r[-1].size == 4
  next unless r.shift == 'FG'
  next unless r.shift == 'GML'
  date = r.pop
  type = r.pop
  meshcode = r.join
  params = {:path => path, :type => type, :meshcode => meshcode}
  case type
  when 'DEM5A'
    Kernel.const_get(type)::parse(params)
  else
    # print "converter for #{type} not implemented.\n"
  end
}
```

これで、JSONLっぽく、一行一レコードでデータが出てくる。QGISとかで読み込めるgeojsonファイルにするには、次のスクリプトにパイプする。

```ruby
print <<-EOS
{"type": "FeatureCollection",
 "features": [
EOS
buf = ''
while gets
  print buf, ",\n" unless buf == ''
  buf = $_.strip 
end
print buf
print "]}\n"
```

具体的には、次のようなコマンドになる。

```zsh
$ ruby convert.rb FG-GML-5339-45-DEM5A/FG-GML-5339-45-22-DEM5A-20130702.xml | ruby fc.rb > 53394522.geojson
```

行指向なので、convert.rb のコマンドライン引数に複数の xml ファイルを指定しても OK である。

実用的には、convert.rb と fc.rb の間にタイル化（タイル番号での Map & Reduce）が入る。これで、ポイントクラウドタイルができることになるはず。
Capybaraで詳細画面の検証方法

Capybaraで詳細画面の検証方法

初投稿。
railsの詳細画面（いわゆるshowアクションで表示する画面）で、htmlテーブルに表示されている情報のうち、ヘッダ列と内容列の結びつきが正しいかCapybaraで検証する方法の個人的メモ。

## 検証対象の画面

| ヘッダ   |  内容      | 
|:--------|-----------:|
| ユーザ名 |  user_name |
| 年齢    |         28 |
| 電話番号 | 03-0000-0001 |


## 検証の方針
1. withinメソッドで、検証範囲をhtmlテーブルの１行（trタグ）に制限する。
2. 右列（tdタグ）内の情報をexpectで検証する。

#### 理由
 * わざわざスコープを１行に固定する意味あんの？
    * 単純にexpectで検証すると、画面内の別の箇所にある同値にヒットしてしまう可能性があるため
 * そもそもヘッダ列と内容列の一致を確認する必要あんの？
    * htmlテーブルとヘッダ列と内容列で違うものを表示してしまううっかりミスはやりがち・・・だと思うため
    * たとえばラジオボックスで選択して数値情報が入るようなカラムが２つあり、詳細画面で参照するカラムが誤って逆になってても気づきにくいため。（実際に発生した問題）ただこれを人力で検証するのはしんどいので自動化できるならしたい。
    * 丁寧に全カラムに対してチェックしておくと、ついでに「詳細画面に表示すべき全カラムが表示されているか（表示し忘れているカラムがないか）」もチェックできる。

## 実装
1.以下のような独自セレクタを定義する。

```
Capybara.add_selector(:column) do
  xpath do |column|
    i18n_path = "activerecord.attributes.table_name."
    # htmlテーブルのヘッダ列の文字列を入手
    search_text = I18n.t(i18n_path + column)
    # 上記文字列を持つthタグを持つ、trタグをXpathで検索
    "//tr[contains(.//th/text(), '#{search_text}')]"
  end
end
```

2.カラムの数だけ以下のようなテストケースを作成する。

```
it "column_name" do
  # 独自セクレタを使って、検証対象カラムのtrタグを検索
  within(:column, "column_name") do
    # tdタグ内の値の検証
    expect(find(:xpath, ".//td")).to have_content "表示されている期待値"
  end
end
```
Implicitly unwrapped optionalsについて調べてみた

optional valueを宣言するときは?を使うのだが、!を使っているのを見かけたので調べた。
Appleのドキュメント"Implicitly unwrapped optionals"に説明があった。
型の後ろに!が付くと、暗黙のunwrapped optionalになる。

例

```swift
var wrappedString: String? = "0"

wrappedString?.toInt()
```
上のwrappedStringはwrapされているoptional value。
wrapされている場合、利用するときに末尾に?か!を付けなければならない。

値が必ず入っている場合、毎回?か!をつけるのは面倒なので、暗黙のunwrapped optionalを使うことができる。

```swift
var wrappedString: String? = "0"
var unwrappedString: String! = wrappedString

unwrappedString.toInt()
```
unwrappedStringには?を付けなくてもアクセスできる。

もしnilが入っている場合、ランタイムエラーが発生する。

```swift
var wrappedString: String? = nil
var unwrappedString: String! = wrappedString

unwrappedString.toInt() //Runtime error
```

ドキュメントには、Implicitly unwrapped optionalsは、nilになる可能性がある変数には使うなと書いてある。
また、nilチェックが必要になるなら普通のoptionalを使えと書いてある。
あまり積極的には使わないほうが良さそう。
秋の Xamarin 勉強会いろいろ


　なんか今年(2014年)の秋は Xamarin についての勉強会がめじろ押しで、嬉しいというか羨ましい限りです。

　ざっとまとめて見ました。あ、ほぼ関東圏です。

## 【9/20・品川】[Xamarin.iOS でデバイスを超えるプログラミング : ATND](https://atnd.org/events/55564)

　Xamarin.iOS の、特に Objective-C で作成されたライブラリを Xamarin.iOS で使う「Binding」についてのお話が聞けるのは大変希少です。


## 【9/20・品川】[9月20日 .NETラボ 勉強会 2014年9月(東京都)](http://kokucheese.com/event/index/215384/)

セッションの一つに

* 「Xamarin.FormsのMVVM」のお話（Microsoft MVP for Visual C# 増田 智明）

があります。Xamarin.Forms は iOS/Android/WinPhone でUIを共通化する新しいフレームワークで、且つ、MVVMフレームワークでもあります。これも大変価値のあるセッションです。


## 【9/30・渋谷】[「Xamarin」って何？ Wエバンジェリストによる特濃「Xamarin」勉強会 - connpass](http://connpass.com/event/8706/)

「Xamarinって何？」というタイトルの通り、Xamarin を知らない／興味のある方向けのセッションと思います。エクセルソフト田淵さんとMS渡辺さんは Xamarin について各所でプレゼンしまくってるので、これからXamarinを始めてみようという方にはピッタリだと思います。


## 【10/18・渋谷】[Xamarin Day - わんくま同盟](http://www.wankuma.com/seminar/20141018tokyo92/)

　わんくま同盟で、一日Xamarinぶち抜きしてくれるとは嬉しい限りですね。
勝手なイメージですが、わんくまはマイクロソフト系開発者が多いと思うので、Windows や Visual Studio での Xamarin 開発についてのセッションが多いのではないでしょうか。

## 【10/6-10・アメリカ】[Xamarin Evolve 2014](https://evolve.xamarin.com/)

　Xamarin 社主催の年に一度の大イベント「Evolve 2014」です。Apple でいうところの WWDC、Google で言えば I/O のような大きなイベントです。
Microsoft, IBM, Amazon, Salesforce とかなんだこの豪華なスポンサーは！
昨年は KeyNote がライブ配信されたので、今年もあるんじゃないかと思います。新しい Feature の発表もあるかもしれないので、必見です。日本のXamarin開発の第一人者 @iseebi さんも現地で参加されるとのことで、Live で盛り上がりましょう！

## 【時期未定】第2回 Japan Xamarin User Group Conference

日本唯一の Xamarin ユーザーコミュニティ JXUG の第2回コンファレンス、秋くらいに開催されるんじゃないかなーと、期待も込めて書かせて頂きました。

最新情報は [Japan Xamarin User Group (JXUG)](https://www.facebook.com/groups/778386365523431/) に参加してチェックしましょう。



　すごい！１年前からは想像もできないくらいに Xamarin が盛り上がってきていて、ひたすら Qiita にネタを投稿してきた身としてはとても嬉しいです。地方在住者にはなかなか参加が厳しいですが、関東から次第に全国にコミュニティが広がっていってくれたらいいなと思います。
GAE/Go で Hello World


GAE/Goはまだ[experimental]。
GAEのGoはversion1.2 になる。
現行のGoの最新versionは1.3になるのでここは注意したいところ。
[Go Runtime Environment](https://developers.google.com/appengine/docs/go/?hl=ja)

環境：mac

[今すぐ Google App Engine をお試しください](https://console.developers.google.com/start/appengine)
の「appengine-try-go.zip」を手っ取り早くdeployするまで。 



Google Cloud SDKをダウンロード、インストール

```
$ curl https://sdk.cloud.google.com/ | bash
```

Googleクラウドの認証を済ます

```
$ gcloud auth login
```

[Google Devlopers Console ](https://console.developers.google.com/project)で適当な名前でプロジェクトを作成する。

プロジェクトを作成すると「プロジェクト ID」が作成される。
http://{project id}.appspot.com/
が作成したプロジエクとのURLになる。

[今すぐ Google App Engine をお試しください](https://console.developers.google.com/start/appengine)
の「appengine-try-go.zip」を解凍する。

```
$ unzip appengine-try-go.zip
```

appengine-try-goの「app.yml」
を修正する。

applicationのところがhelloworld になってるので、
作成したプロジェクトのプロジェクトIDに修正する

```
application: project-id 
version: 1
runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

```

デプロイ。

```
goapp deploy appengine-try-go 
```

http://{project id}.appspot.com/
でHello, world!が表示されればOKだ。


GAE 3年ぶりぐらいにさわった。
何か作りたい。
アプリ＆フロントエンドエンジニアが東京メトロのコンテスト応募にあたってクリアすること


スマホ向けネィティブアプリや、モバイルWebでの応募は、ちょっと難しいかなあと思いました。いわゆるエンタープライズ分野のエンジニア向けのコンテストかなと。
これから応募される方の参考になれば。

RubyでのAPI連携は、サンプルソースも提供されているので、わりと簡単なのかなと思いました。

### コンテストの概要：

少し前に話題になりましたが、こちら。
⇒ http://tokyometro10th.jp/future/opendata/index.html

ちなみにAPIの仕様を確認するには、会員登録が必要です（住所や所属組織の登録が必要。また運営の方の最終確認が必要なので少し時間がかかるかも）。

## API が RestFul & JSONレスポンス ではない

APIのリクエストフォーマットは[RDF](http://www.w3.org/TR/rdf-schema/)、レスポンスは[JSON-LD](http://www.w3.org/TR/json-ld/)です。
（アプリは良くわからないんですが、JSON-LDなんて扱えるのかな？）

自前で JSON-LD形式のパースが大変なら、このあたりのライブラリを使うと良いのかも（未調査）。
⇒ http://json-ld.org/

## API を叩くには、ディベロッパー毎に発行されるトークンが必要

なりすまされて困ることはあまり無いとは思いますが、ネィテティブアプリやフロントエンドのJavaScriptに固定で埋め込むことに懸念があれば、別途自前でサーバをたててトークンを退避させておくなど考える必要があります。

## クロスオリジン

JavaScript から API を利用する場合はクロスオリジンの制約にひっかかります。
（JSONP にも `Access-Control-Allow-Origin`ヘッダも対応されていない為。）
なので、別途サーバ側にAPIを自前で用意する必要があります。

## まとめ

もしアプリエンジニアまたはフロントエンドエンジニアが応募を考えている場合は、Rubyを学習するか、Rubyができる人と組むのが良いかと思います。
（サーバは Heroku とか使えばいいんじゃないでしょうか。無料枠でもいけそう。）
swiftでprotocolでのgenericsに型制約を付ける

swiftでprotocolを汎化しようとした場合、以下のように定義が出来ます

```swift

protocol Entity {
    associatedtype IdentityType
    var identity:IdentityType { get }
}

```
Entityであるのならば、identityという何らかの型の変数を持っていると定義しています。

ここでさらにIdentityTypeに型制約を付たい場合、protocolでは以下のように定義します。

```swift

protocol Entity {
    associatedtype IdentityType: Equatable
    var identity:IdentityType { get }
}

```
Genericsに型制約を付けるのと同じ記述をtypealiasにしてあげるだけですね。

複数の制約をつける事も出来ます

```swift

protocol Entity {
    associatedtype IdentityType: Equatable, Comparable
    var identity:IdentityType { get }
}

```

本題からは少し外れますが、このような制約をつけていくとprotocolの性質を明確に出来る他に、Genericsの関数を作ってコードの量を減らせるというメリットも出てきます

例えば、EntityへEquatableの制約を付け足した場合

```swift

protocol Entity: Equatable {
    associatedtype IdentityType: Equatable, Comparable
    var identity:IdentityType { get }
}

func == <T:Entity> (lhs : T, rhs : T) -> Bool {
    return lhs.identity == rhs.identity
}

```

上記のようなEntityを受け取る関数を一つ定義してあげれば良いようになります。
（Identityを比較すれば良いという条件ではあるけれど、）

実際にクラスを実装する場合はこのようになります
例えば`Int`をidentityにすると、`Int`は`Equatable`と`Comparable`を実装しているのでコンパイルが通ります

```swift

// OK
class MyEntity : Entity {
    // 補足: getがあれば良いのでletでもvarでも良い
    let identity: Int = 0
}

```

`Comparable`と`Equatable`を実装していない型をIdentityにするとエラーになります

```swift

// Fail Type MyEntity does not conform to protocol `Entity`
class MyEntity : Entity {
    let identity: NantokaType = NantokaType()
}

```


Genericsはうまい事使えば型安全を保って無駄のないコードが書けそうなので、もっと活用していきたいですね。
もういっそのこと, NeoBundleでVim以外のあらゆるリポジトリも一元管理する

# はじめに

https://github.com/Shougo/neobundle.vim

NeoBundleは通常Vimプラグインを管理するために使うが,
Vimプラグイン以外のリポジトリのダウンロードも管理することができる.

__NeoBundle__で管理してしまえば, `:NeoBundleUpdate`
([Unite](https://github.com/Shougo/unite.vim)を使っているのであれば, `:Unite neobundle/update`)
により, githubなどにある, あらゆるリモートリポジトリから,
ローカルへ一括で更新できるようになる.

(当初, Emacs LispのリポジトリはEmacs (el-get) で管理,
VimプラグインのリポジトリはVim (Neobundle) で管理しようとしたが,
面倒だったので, 思い切って全部NeoBundleで管理してみたら, 思いの外スッキリした. )


# 使用例

Vimプラグイン以外のリポジトリを__NeoBundle__で管理するには, `:NeoBundleFetch`を使う.
([:help](https://github.com/Shougo/neobundle.vim/blob/ver.4.0/doc/neobundle.txt#L510)に書いてあるが, `:NeoBundleFetch`を使うと,
`runtimepath`へ追加せずに, __NeoBundle__で管理ができる. )

ダウンロード先ディレクトリを指定するには, 下記のように`base`オプションを使う.

```vim:~/.vimrc
let g:emacs_bundle = $HOME . '/.emacs.d/bundle'

NeoBundleFetch 'winterTTr/ace-jump-mode', {
\ 'base' : g:emacs_bundle,
\ }
```

`branch`を指定するには, 下記のようにリポジトリ名の後に`branch`名を書く.

```vim:~/.vimrc
NeoBundleFetch 'magit/magit', 'maint', {
\ 'base' : g:emacs_bundle,
}
```

ダウンロードした後に, 自動で`make`するには,
下記のように`build`オプションを使う.

```vim:~/.vimrc
NeoBundleFetch 'git://orgmode.org/org-mode.git', {
\ 'base' : g:emacs_bundle,
\ 'build' : {
\   'windows' : 'make',
\   'cygwin'  : 'make',
\   'mac'     : 'make',
\   'unix'    : 'make',
\   },
\ }
```

__Subversion__のリポジトリも管理できる.
ディレクトリ名を指定するには, 下記のように`name`オプションを使う.

```vim:~/.vimrc
NeoBundleFetch 'https://emacs-evernote-mode.googlecode.com/svn/trunk', {
\ 'name' : 'evernote-mode',
\ 'base' : g:emacs_bundle,
\ }
```

__Mercurial__のリポジトリを管理するには,
下記のように`type`オプションに`hg`を指定する.

```vim:~/.vimrc
NeoBundleFetch 'https://www.yatex.org/hgrepos/yatex', {
\ 'type' : 'hg',
\ 'name' : 'yatex',
\ 'base' : g:emacs_bundle,
\}
```

(例にEmacs Lispばかり挙げているが,
もちろん他のリポジトリも管理できる. )
UnityのCharacterControllerでの衝突判定


###概要
Unityの衝突判定はRigidbodyを使えと検索するとあるが
物理演算でプルプル震えてしまって使いにくい。
（キャラクターモデルに適用すると震えるのは見栄えが悪い）

というとき、ただ衝突判定だけ取れて、
あとは重力などの物理演算はいらない場合どうするの？

そんなときは、CharacterControllerで対応しちゃうのが簡単
（スクリプトで色々したい人向け）

###サンプルコード

```Coolision.cs
// 衝突があったさいに呼ばれる
void OnControllerColliderHit(ControllerColliderHit hit)
{
	// hit.gameObjectで衝突したオブジェクト情報が得られる
}
```

###雑感
「Unity 衝突判定」で検索すると、
ほとんどがRigidbodyのサンプルコードが出てくるため書いてみました

###参考サイト
http://unitylab.wiki.fc2.com/wiki/%E8%A1%9D%E7%AA%81%E5%88%A4%E5%AE%9A


http://shivat.hatenablog.com/entry/2013/06/29/160047