OmniAICreator/Qiita-1.07M huggingface dataset:
conkyのネットワーク設定

conkyでネットワーク速度とか表示させると超かっこいい！と思ってたんだけど、つまづいたのでメモ。

ネットワークのとこだけ抜き出すと、
Network
Down speed \${downspeed ◯◯}/s\${alignr}Up speed \${upspeed ◯◯}/s
Down total \${totaldown ◯◯}\${alignr}Up total \${totalup ◯◯}
\${downspeedgraph ◯◯ 30,145}\${upspeedgraph ◯◯ 30,145}

この◯◯には自分の接続環境を記述するところで、ググるとWiFiならwlan0、有線接続ならeth0と記述するように書かれているサイトがほとんどだったが、どちらを記述しても表示されない。

いろいろ調べた結果、ifconfigコマンドで得られた自分の接続環境を入れればいいらしいということが分かり、無事に表示されるようになった。（自分の環境だと「enp3s0」なんじゃそれ）
golang で コマンドを並列実行するコマンドを作ってみた

# golang で コマンドを並列実行するコマンドを作ってみた

## 発端
Windows には png を最適化してくれる pngout というコマンドがあるけれど、CPU を一個しか使ってくれないので簡単に並列実行したかった。

## ソース
[hokorobi/gompetit](https://github.com/hokorobi/gompetit)

## バイナリ
[Releases · hokorobi/gompetit](https://github.com/hokorobi/gompetit/releases)

## 使用例
`gompetit -r -P 5 -e png pngout "/c6 /f0" dir1 dir2`

これで dir1, dir2 に含まれる png ファイルに対して 5 個 pngout が起動されて処理されます。
ファイルはリカーシブに探しにいきます。

-r を指定しなければ引数のディレクトリ、ファイルに対してコマンドを直接実行します。
コマンドが出力する文字コードは shift-jis を想定しているので、他の文字コードだと文字化けすると思います。多分。
Linux だったら xargs 使えばいいし、気にしない。

## 参考
感謝！
[Big Sky :: Golang の channel の使い所](http://mattn.kaoriya.net/software/lang/go/20131112132831.htm)
[go - Goで[]byteをshift-jisの文字列に変換する - スタック・オーバーフロー](http://ja.stackoverflow.com/questions/6120/go%e3%81%a7byte%e3%82%92shift-jis%e3%81%ae%e6%96%87%e5%ad%97%e5%88%97%e3%81%ab%e5%a4%89%e6%8f%9b%e3%81%99%e3%82%8b?newreg=b2b6ae86ee074d8bbe7fd4d07e45e97a)
ExecuteSQLで使うSQL文 作成ツール「QueryBuilder」

花粉症で無いはずなのに、外から部屋など暖かい所に入るとクシャミや鼻水が出てきます。
花粉症ではないはずなのに。。。

さて今回はファイルメーカーでSQL クエリを書くときに利用しているツールを紹介したいと思います。
SQLクエリ記述ツールとしては、SeedCodeの「SQL Explorer」が有名ですが、ひねくれ者の私は「QueryBuilder」というツールを使用しています。(汗)

元々OracleなどのRDBの開発をしてきているのでSQLは直接書いた方が効率が良いのです。
SQLExplorerですと、ウィザード形式で画面遷移しながらクエリを組み立てて行くのでどんなSQLが作成されるのか分かりにくく効率が落ちてしまいます。

そこで他のツールを探していたときに見つけたのが今回紹介するSOLIANT Consultingの「QueryBuilder」です。

##作業画面
作業画面はこんな感じです。この画面のみでクエリの作成ができます。
![Query Builderの作業画面](https://qiita-image-store.s3.amazonaws.com/0/68589/94d1c47c-9a51-f33a-142d-238704ca7de9.png)

日本語のフィールド名などもダブルクォーテーションで囲めばそのまま実行可能です。
実行すると勝手にバックスラッシュが追加されてエンコードされます。

##実行結果の表示
![実行結果の画面](https://qiita-image-store.s3.amazonaws.com/0/68589/e06a2f38-651c-48a9-2d97-f8db1adeb293.png)

実行後のバックスラッシュをはずして、SQL文を修正する場合はQueryと書いてある黒帯の右側にある「\"」をクリックするとエンコードを解除したり、有効にしたりできます。

クエリが完成したら、ファイルメーカーのExecuteSQL形式に変換するのも１クリックで完了。
![スクリーンショット_2015-03-07_10_27_50.png](https://qiita-image-store.s3.amazonaws.com/0/68589/dd8d7679-9afd-5749-88f4-58d73cfa86a4.png)
この文字列のコピーも黒帯の「c」をクリックすると全文コピーされるので、スクリプトの編集画面でペーストするだけです。

##SQL実行エラーの原因調査方法
あとは、SQL文を書いているときにエラーになるケース。
エラーになると結果画面にはこんな感じで表示されるので、その内容をコピーしてデータビューアを利用してエラー原因を確認できます。
![エラー時の結果表示](https://qiita-image-store.s3.amazonaws.com/0/68589/5daa5e66-d76e-1b61-e2cc-6201c7692f03.png)

![エラー内容確認](https://qiita-image-store.s3.amazonaws.com/0/68589/7d6cb531-83c9-5de1-5ec0-c34117fb9143.png)

いかがでしょうか？
このツールのおかげで、私はSQL作成効率が凄く良くなりました。
公開して下さっているSOLANT Consulting社には感謝です。

興味を持たれた方は以下のページからダウンロード可能ですので使ってみて下さい。
操作概要説明の動画も英語ですがアップされています。

[Query Builderダウンロードサイト](http://www.modularfilemaker.org/module/query-builder/)
平日だけcron実行するのにproxy越しでjpholidayp使ってみた

平日だけcron動かしたときに[jpholidayp](https://github.com/emasaka/jpholidayp)という便利なものがあるそうで。

使い方や説明については以下がわかりやすかったので参考に。
[cronで祝日判定しようと思ったら，emasaka/jpholidaypが素晴らしかった](http://blog.hifumi.info/2014/11/29/japanese-holidays-and-cron/)

ただ、jpholidaypは実行時に外のカレンダーを見に行ってて、
諸事情でproxy越しじゃないと外に出られないのでちょっとコードいじってみた。

49行目と50行目の間に4行ほど足してみる。

```py

        else:
            # ここから
            proxy = {"http":"hoge-proxy:80"}
            proxy_handler = urllib2.ProxyHandler(proxy)
            opener = urllib2.build_opener(proxy_handler)
            urllib2.install_opener(opener)
            # ここまで
            res = urllib2.urlopen(self.URL)
            dat = yaml.load(res)
            cache.set({"holiday_jp": dat})
        self.holiday_jp = dat

```

参考:
[プロキシ環境下でpythonのurllib2で作ったクローラをcronで定期的に実行するときのメモ - moguranosenshi](http://moguranosenshi.hatenablog.com/entry/2013/10/16/%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E7%92%B0%E5%A2%83%E4%B8%8B%E3%81%A7python%E3%81%AEurllib2%E3%81%A7%E4%BD%9C%E3%81%A3%E3%81%9F%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A9%E3%82%92cron%E3%81%A7)

これでcronにそのまま、

```bash

0 09 * * 1-5 /home/hoge/jpholidayp || /home/hoge/batch

```

とかやると月曜から金曜かつ祝日を除いた日に実行できるので、
めでたしめでたし。

(しかし会社とか学校とか組織固有の休みが有る場合には当然知るすべはなく、
その組織用の祝日apiとか提供して欲しくなるなとしみじみ)
世界一難しい数独

問題はこちら
http://matome.naver.jp/odai/2134127498258691101

```cpp
#include <stdio.h>

struct SUUDOKU
{
	unsigned int table[9][9];
};

bool check(const struct SUUDOKU suudoku, const unsigned int i, const unsigned int x, const unsigned y)
{
	for(unsigned int px = 0; px < 9; px++)
	{
		if( i == suudoku.table[y][px] )
		{
			return false;
		}
	}
	for(unsigned int py = 0; py < 9; py++)
	{
		if( i == suudoku.table[py][x] )
		{
			return false;
		}
	}
	const unsigned int py_offset = (y/3)*3;
	const unsigned int px_offset = (x/3)*3;
	for(unsigned int py = py_offset; py < 3+py_offset; py++)
	{
		for(unsigned int px = px_offset; px < 3+px_offset; px++)
		{
			if( i == suudoku.table[py][px] )
			{
				return false;
			}
		}
	}
	return true;
}

bool solve(struct SUUDOKU suudoku, const unsigned int x, const unsigned int y)
{
	if( y == 9 )
	{
		for(unsigned int py = 0; py < 9; py++)
		{
			for(unsigned int px = 0; px < 9; px++)
			{
				printf("%d ",suudoku.table[py][px]);
			}
			printf("\n");
		}
		return true;
	}
	if( suudoku.table[y][x] != 0 )
	{
		return solve(suudoku, (x != 8) ? x+1: 0, (x != 8) ? y: y+1);
	}
	else
	{
		for(unsigned int i = 1; i <= 9; i++)
		{
			if( check(suudoku, i, x, y) == false )
			{
				continue;
			}
			suudoku.table[y][x] = i;
			bool ret = solve(suudoku, (x != 8) ? x+1: 0, (x != 8) ? y: y+1);
			if( ret == true )
			{
				return true;
			}
		}
		return false;
	}
}

int main()
{
	const struct SUUDOKU suudoku = {{
		{8,0,0, 0,0,0, 0,0,0},
		{0,0,3, 6,0,0, 0,0,0},
		{0,7,0, 0,9,0, 2,0,0},
		{0,5,0, 0,0,7, 0,0,0},
		{0,0,0, 0,4,5, 7,0,0},
		{0,0,0, 1,0,0, 0,3,0},
		{0,0,1, 0,0,0, 0,6,8},
		{0,0,8, 5,0,0, 0,1,0},
		{0,9,0, 0,0,0, 4,0,0}
	}};
	solve(suudoku, 0, 0);
	getchar();
	return 0;
}
```
FreeBSDからpkgを使わずにphpMyAdminを導入する方法

はてなブログから引っ越してきたTIPSです。

phpMyAdminはFreeBSDのpkgでも直接インストールすることができますが、依存関係でインストールされるアプリが大変なことになってしまいます。

![画像](http://gyazo.com/73f4b0714adcdbea374ee9e037656342.png)

というわけで、自分はphpMyAdminはportsを使わず手動でインストールして、必要なPHPエクステンションのみをportsでインストールしています。GD周りを入れてしまうと色々と不幸になるので、あえて導入していません。必要な方はオリジナルのpkg使ってください。

では、必要ports一覧行ってみましょうー。[公式ドキュメント](http://phpmyadmin.readthedocs.org/projects/phpmyadmin-japanese/en/latest/require.html)でも導入要件は確認できます。

### ●サーバソフト

> PHP5 (lang/php56) - これないと話になりませんなw
> MySQL (databases/mysql56-server)

### ●PHPエクステンション群

> mysql (databases/php56-mysql/) - PHP側のMySQLエクステンションですね。
> mysqli (databases/php56-mysqli/) - PHP側のMySQLエクステンションですね。mysql/mysqli両方がひつようですね…。
> session (www/php56-session/) - よく似た名称のportsがあるので注意。
> mbstring (converters/php56-mbstring/)
> ctype (textproc/php56-ctype/)
> mcrypt (security/php56-mcrypt/)
> zip (archivers/php56-zip/) - 必須ではないけど入れておくと便利

> spl (devel/php52-spl/) - PHP 5.2以前を利用する場合は要インストール。PHP 5.3では標準でSPLライブラリ有効のため導入不要。

入れなくても動くけど、色々と怒られるのは

> php56-zlib (archivers/php56-zlib) (※) ZIPと言われますが、gzcompressは Zlibモジュールの関数です。
> php56-bz2 (archivers/php56-bz2)

インストーラー周りで必要になります。入れないとsetup/index.phpすら立ち上がらないのは、

> php56-json (devel/php56-json)
> php56-filter (security/php56-filter) (※)標準ライブラリだけど、FreeBSDでは別ports扱い

まぁ、こういう情報を知りたがる人はインストーラーとか使わないと思いますが…。
ComposerからLaravelを導入しようとしてOpenSSL周りのエラーで困った件

Composer経由でLaravelをインストールしようとして、Composerをcurlから取得する時に結構厄介なエラーに遭遇しましたので、対処法をシェアします。

自分はLaravelのインストール目的でしたが、Composerインストール時一般に使えるTIPSかと思います。

> Download failed: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
> error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
> file_get_contents(): Failed to enable crypto
> file_get_contents(https://getcomposer.org/composer.phar): failed to open stream: operation failed


いろいろ調べて行き着いたのがComposerのissuesです。結構長いスレッドですが…。
[Install fails because of getcomposer.org certificate verify failed · Issue #2798 · composer/composer · GitHub](https://github.com/composer/composer/issues/2798)

結論から行きましょう。

OpenSSL(正確にはcurl)で使用するCAをダウンロード
> wget http://curl.haxx.se/ca/cacert.pem
> cp -v -f cacert.pem /full/path/to/certs/ca-bundle-curl.crt

php.ini から認識できるように設定
> curl.cainfo=/full/path/to/ssl/certs/ca-bundle-curl.crt
> openssl.cafile=/full/path/to/ssl/certs/ca-bundle-curl.crt

この設定をした状態でComposerを導入すればエラーは出ません。
解決するまで結構面倒でした…。

このcrtファイルはcurlのエラーを回避するためのものですので、**本来のca-bundle.crtを上書きしないよう**に注意して下さい。

参考までにFreeBSDをお使いの方は、pkgコマンド経由でphp-composerを導入するのが楽かと思います。

> sudo pkg install php-composer
nfsマウント失敗する場合はクライアント側でportmapの起動を確認

## 参考

* [nfsマウント失敗 | TeasOne Coffee](http://teasone.under.jp/wp/2011/01/21/nfs%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E5%A4%B1%E6%95%97/)


## マウント失敗例

CentOSのrescueモードで遭遇した。

```bash:
boot: linux rescue
```

でCDからboot。

```bash:CentOS
# mkdir /mnt/nfs
# mount -t nfs 192.168.100.62:/srv/nfs /mnt/nfs
mount: Mounting 192.168.100.62:/srv/nfs on /mnt/nfs failed: Input/output error
```

なおnfsサーバ側は

```bash:debian7
# apt-get install -y nfs-kernel-server
# cat > /etc/exports <<EOF
/srv/nfs        192.168.100.141(ro,sync,no_root_squash,no_subtree_check)
EOF
# /etc/init.d/nfs-kernel-server start
```

# nfsクライアント側

```bash:CentOS
# /usr/sbin/portmap
# mount -t nfs 192.168.100.62:/srv/nfs /mnt/nfs
```

## archlinuxの場合

```
# sudo pacman -Sy nfs-utils
```

## CentOS

```bash:
yum install -y nfs-utils
```

## ubuntuの場合

```bash:
sudo apt-get install -y nfs-common
```
SPEC OMP2012 のインストールメモ (Ubuntu 14.04)

### 概要
SPEC OMP2012 ベンチマークのインストールに関して、Tool Suite のビルドがそのままでは通らなかったり、インストールではねられたりしたのでメモ。

### Tool Suite の修正
Tool Suite のビルドに際し、tools/src 以下の tar と specsum の stdio.in.h を修正する必要がある（修正内容は同一）。

```lang:tar-1.25/gnu/stdio.in.h
--- tar-1.25/gnu/stdio.in.h.orig	2011-01-12 16:27:13.000000000 -0800
+++ tar-1.25/gnu/stdio.in.h	2015-03-06 11:26:23.859421832 -0800
@@ -144,7 +144,9 @@
    so any use of gets warrants an unconditional warning.  Assume it is
    always declared, since it is required by C89.  */
 #undef gets
+#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+#endif
 
 #if @GNULIB_FOPEN@
 # if @REPLACE_FOPEN@
```

```lang:specsum/gnulib/stdio.in.h
--- specsum/gnulib/stdio.in.h.orig	2011-02-14 06:56:46.000000000 -0800
+++ specsum/gnulib/stdio.in.h	2015-03-06 11:33:02.507415000 -0800
@@ -159,7 +159,9 @@
    so any use of gets warrants an unconditional warning.  Assume it is
    always declared, since it is required by C89.  */
 #undef gets
+#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+#endif
 
 #if @GNULIB_FOPEN@
 # if @REPLACE_FOPEN@
```

### インストール
チェックサムの確認でエラーになるときは、環境変数 SPEC_INSTALL_NOCHECK=1 を設定すればチェックサムの確認プロセスをスキップできます（ぉぃ）。
変換演算子


```cs:暗黙的な変換
public static implicit operator 変換後の型(変換元の型 値1) {
	return 値2;
}
```

```cs:明示的な変換
public static explicit operator 変換後の型(変換元の型 値1) {
	return 値2;
}
```

明示的な変換の場合は、キャストが指定された時だけ行われる。

```cs:暗黙的な変換の例
using System;

class ThreeD {
	int x, y, z;

	public ThreeD(int i, int j, int k) { x = i; y = j; z = k; }

	public static implicit operator double(ThreeD op1) {
		return Math.Sqrt(op1.x * op1.x + op1.y * op1.y + op1.z * op1.z);
	}
}

class ConversionOpDemo {
	static void Main() {
		ThreeD alpha = new ThreeD (12, 3, 4);
		ThreeD beta = new ThreeD (10, 10, 10);
		double dist;

		dist = alpha;
		Console.Write ("Here is dist: " + dist);
		Console.WriteLine ();

		if (beta > dist) {
			Console.WriteLine ("beta is farther from the origin.");
		}
	}
}
```

```cs:明示的な変換の例
using System;

class ThreeD {
	int x, y, z;

	public ThreeD(int i, int j, int k) { x = i; y = j; z = k; }

	public static explicit operator double(ThreeD op1) {
		return Math.Sqrt(op1.x * op1.x + op1.y * op1.y + op1.z * op1.z);
	}
}

class ConversionOpDemo {
	static void Main() {
		ThreeD alpha = new ThreeD (12, 3, 4);
		ThreeD beta = new ThreeD (10, 10, 10);
		double dist;

		dist = (double)alpha;
		Console.Write ("Here is dist: " + dist);
		Console.WriteLine ();

		if ((double)beta > dist) {
			Console.WriteLine ("beta is farther from the origin.");
		}
	}
}
```
unsafeとfixed


c#でポインター(unsafeコード)を使う場合は、オブジェクトが使用しているメモリが移動しないように **fixed** を使用する必要がある。

```cs:unsafeとfixed
using System;

class Test {
	public int num;
	public Test(int i) { num = i; }
}

class UseFixed {
	unsafe static void Main() {
		Test o = new Test (19);
		fixed (int *p = &o.num) {
			Console.WriteLine("Initial value of o.num is " + *p);
			*p = 10;
			Console.WriteLine("New value of o.num is " + *p);
		}
	}
}
```
参照ライブラリの編集


「Xamarin Studio のプロジェクトでジェネリック版のQueueが使えない！」と思ったら、
参照しているライブラリを編集する必要があったみたいです。

Xamarin Studio のプロジェクトに参照というフォルダ（？）があるので、
そのポップアップメニューから「参照アセンブリの編集」を選択し、
「System」にチェックを入れてください。

これでジェネリック版のQueueが使えるようになります。
よかった。よかった。

同様に、dynamic型を使用したい場合は、「Microsoft.CSharp」にチェックを入れてください。
SubversionからGitへ移行 - 移行作業編

# Subversion から Git への移行作業

## 概要

[SubversionからGitへ移行するための環境構築](http://qiita.com/dskst/items/7967d5cdcf924729249b)を完了させていることを前提とします。

移行作業は[SVN から Git への移行 | アトラシアン](https://www.atlassian.com/ja/git/migration)の通り、 Prepare, Convert, Synchronize, Share, Migrate と手順に沿って行います。

## ハマり所

* **svn から Git へのソースコード同期は誰かのローカルPC1台でしかできない**  
他のローカルからプッシュすると、 Git リポジトリが壊れる
* `git svn clone` の際に、以下が空ファイルだと途中で処理落ちする  
`--authors-file=authors.txt` の中身は記載必須となる
* branches, tags を独自ルールにしている場合はキチンと相関する必要がある

## Tips

* `author` 一覧取得  
`$ svn log ^/ --xml | grep -P "^<author" | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt`
* `svn:ignore` 一覧取得  
`$ svn propget -R svn:ignore`

### svn から Git への移行期間中にやること

移行期間中は、 svn と同期する為に（ svn にコミットがあれば）定期的に下記実行する必要があります。

```
$ git svn fetch
$ java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar sync-rebase
$ git push -u origin --all
```
※svn コミットのデータを取得して、 Git リポジトリに同期しています。

### svn と Git の同時稼働方法

下記のように、移行元 svn に存在しないブランチに対しては、 Git からもプッシュできます。
それを利用して、 svn と Git の両方を稼働させることもできます。

1. svn で管理している環境を、上記手順で Git 対応する  
master ブランチにデータができる
1. `.svn` ディレクトリはそのまま置いておく
1. Git で別のブランチを作成  
このブランチ内ではコミットとかプッシュしても問題ない
1. svn の修正は上記手順で master ブランチに取り込む
1. master ブランチから 3 のブランチへマージ

ただし、 svn から Git の同期はローカルPC1台でしか対応できないので、早く Git 乗り換えることをお勧めします。

## 備考

* Share の項目で、公開リポジトリを Bitbucket を使用するフローになりますが、 GitHub などのリポジトリでも全く問題ありません。
* 他参考サイト  
[8.2 Gitとその他のシステムの連携 - Git への移行](http://git-scm.com/book/ja/v1/Git%E3%81%A8%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AE%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E9%80%A3%E6%90%BA-Git-%E3%81%B8%E3%81%AE%E7%A7%BB%E8%A1%8C)
メソッドを無理やりメソッドチェーンにする

##実装

```js
Object.prototype.chain = function(method) {
  this[method].apply(this, Array.prototype.slice.call(arguments, 1));
  return this;
};
```

最後の`this`は`this.valueOf()`でもいいかも知れません。

##使い方

```js
document.body.appendChild(
  document.createElement("a")
    .chain("setAttribute", "href", "http://qiita.com/")
    .chain("setAttribute", "target", "_blank")
    .chain("setAttribute", "id", "link")
    .chain("appendChild", document.createTextNode("Qiita"))
    .chain("addEventListener", "click", function() {
      //うんたらかんたら
    }, false)
);
```

使い道が思いつかない… (´・ω・｀)
`with`でいいような気もする。
PowerShell と Cygwin を行き来する

# PowerShell から Cygwin へ
Microsoft.PowerShell_profile.ps1 に以下を追記。

```ps1
function cygwin{
	$currentDirectory=C:\cygwin64\bin\cygpath.exe -u $pwd
	$cygCmd="cd "+$currentDirectory+" ; exec bash"
	C:\cygwin64\bin\mintty.exe /bin/bash -l -c $cygCmd
}
```

# Cygwin から PowerShell へ
.bashrc に以下を追記。

```bash
alias powershell='cygstart powershell'
```
Homebrew CaskでインストールしたアプリケーションをAlfredで表示する方法

## Alfred で出てこないアプリケーションの謎

[前回](http://qiita.com/supistar/items/be0fcdeb05370a7b670d)の投稿で無事に Yosemite へのアップグレードを済ませたのですが、
おや・・・Alfredの様子が・・・。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/11364/03283a7c-1239-15b8-afd4-3f8bfb211984.png)

Homebrew Cask 経由でインストールしたアプリが出てこない・・・だと・・・。
もちろん他のアプリもダメ。
しかしながら Mac App Store でインストールしたアプリは大丈夫。

試しにSpotlightで...

![02.png](https://qiita-image-store.s3.amazonaws.com/0/11364/d7fb594a-139a-b22c-3c54-2a0464d7a9cc.png)

出たーーー！！！！！

なんで Alfred で出てくれないんだよおおおおおおおお！！！

## 深まる謎、そして。

ということで、いろいろ調べてみたところ　Homebrew Cask の GitHub issue にこんな Issue[^1] を発見。

そこで下記 2つのディレクトリを Alfred の Search Scope に追加して...

> - /opt/homebrew-cask/Caskroom
> - /usr/local/Cellar

![03.png](https://qiita-image-store.s3.amazonaws.com/0/11364/773aaa7d-89a5-1794-e23c-5a950d8315b5.png)

もう一度 Alfred に入れてみると...

![04.png](https://qiita-image-store.s3.amazonaws.com/0/11364/390e81be-f798-7a5b-4df8-1573720c4904.png)

出たーーー！！！！！

これで快適に過ごせそうです (^ω^)

## 参考サイト
[^1]: https://github.com/caskroom/homebrew-cask/issues/8052#issuecomment-69560606
ターミナルから google翻訳 他言語対応


端末上で翻訳解決
--------
１コマンドで、端末から翻訳できるものを見つけたので紹介するだけです。自分でも後で忘れてしまったので、書き残します。

ソース
https://github.com/soimort/translate-shell/

Mac OSX でのインストール
---------

~~~$
brew -v
brew install http://www.soimort.org/translate-shell/translate-shell.rb
trans -v
~~~

Try it out!
--------

~~~$
~ $ trans {ja=en} りんご
Apple

「りんご」の翻訳
(日本語 ➔ English)
りんご(Apple/Apples/Ringo/An apple/The apple)
~~~

はーい、めっちゃ便利です。
{ja=en} は ja => en と読み取れますよね。ここらへんは臨機応変に。
ヘルプや使い方が充実しているので、trans --help をみたり、対応言語一覧を trans -R で確認したりできますね。


> もう Mac の並行辞書引きを加えたら、これ以上の学習環境はないよ。
cifsによるNASの自動マウント

バッファローの無線LANと外付けHDDで簡易NAS環境を構築してるんだけど、いつもマウントでつまづくのでメモ

まずcifs-utilsをインストールして/etc/fstabに以下の1行を追加。

//192.168.◯.◯/共有ディレクトリ home/マウントするディレクトリ名 cifs username=NASで設定したユーザー名,password=NASで設定したパスワード,sec=ntlm,iocharset=utf8,rw,uid=1000,gid=1000,defaults 0 0

どうも「sec=ntlm」がミソらしい。それ以外のオプションは外しても大丈夫そうな気もするけど面倒くさいし、無事に動いているのでよしとする。

(15.9.5追記）
antergosからArchへ乗り換えたところ，/etc/fstabに全く同じ記述をしたのにNASの自動マウントができなくなった。
起動後自動ではマウントされていないが，「\#mount -a」でマウントできるので，記述が間違っているわけではなさそう。
いろいろ調べた結果，原因はおそらく，ネットワークの有効化の前にfstabのmountが呼び出されること。
（ハードウェア構成は全く変えていないのに！デスクトップ環境とかを変えたから爆速化したのか！？）
しかもネットワークの起動を待ってマウントするオプションnetdevがcifsでは使えないらしい。

しかしそこはやっぱりArch。Forumで同じ症状の解決策がありました。（英語だけど）

それは，マウントオプションでnoauto,x-systemd.automountを追加するというもの。
かわりにdefaultsは外しました。
これで多分問題なく動いてる。

今の/etc/fstabはこんな感じ。

//192.168.◯.◯/共有ディレクトリ home/マウントするディレクトリ名 cifs username=NAS側で設定したユーザー名,password=NAS側で設定したパスワード,sec=ntlm,iocharset=utf8,rw,uid=1000,gid=1000,noauto,x-systemd.automount 0 0

ネット上では，rc.local使ったり（Archだとややこしいよね！），シェルスクリプト作ったり，いろんな解決方法が紹介されていたけど，この方法だとfstabの記述だけで解決できたのでよかったです。

(17.10.8追記）
アップデートしたらNASが繋がらなくなって困りました。
原因はLinux Kernel 4.13からSMB 3.0がデフォルトCIFSになって，SMB1.0が無効になったみたいなことらしいですよ。
色々と格闘した結果，オプションにvers=1.0を追加するとつながるようになりました。
SMB1.0はセキュリティ的に非推奨だからデフォルトで無効になったわけですが、他の方法ではどうもうまくいかないのでしばらくこれでいきます。どんどん時代から取り残されていく気がするなぁ。
スマホとかだとGUIで何も気にせずラクラク設定できちゃうのにね。

追記が多くなって来たので、SMB3.0でうまく接続できるようになったら再編集しようと思います。
tailコマンドのオプション「f」と「F」

##この記事を書くに至った経緯
`tail`コマンド。ログ監視等で本当にお世話になっています。
いつもオプションとして「F」(大文字の方)を使っているのですが、その理由がその昔、「f」(小文字の方)よりよいと誰かに聞いたからなのです。
その時に理由も聞いたはずなのですが、毎日のように使っている内に忘れてしまいましたｗ
先日ふとしたきっかけで「どうしてF(大文字の方)使ってるの？」と尋ねられ、そう言えばなんでだっけと調べたので、忘れないように記事に残しておきたいと思ったのです。
結論、**私は「F」が便利だと思うからそれを使うよ！**って記事ですｗ


##tailコマンド
本来**`tail`**は、**ファイルの末尾10行(デフォルト)を表示する**ためのコマンドです。
対になるコマンドとして**`head`**(こちらは**ファイルの先頭10行(デフォルト)を表示する**)があります。
表示する行数を変更するためにはどちらのコマンドも**`-n`**オプションで行数を指定します。
以下のファイルを使って簡単な例を示しておきます。(`head`は先頭になるだけなので割愛)

```bash
$ cat hoge.txt 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
```

例1）オプション指定なしでファイル末尾を表示(10行表示)

```bash
$ tail hoge.txt 
11
12
13
14
15
16
17
18
19
20
```

例2）**`-n`**オプションで表示する行数を指定(今回は3行)

```bash
$ tail -n 3 hoge.txt 
18
19
20
```

##「f」と「F」の違い
どちらもファイルの最後まで表示をしても終了せず、ファイル末尾が更新されると続けて追加分が表示されます。(このためログ監視等に大変役立ちます。`Ctrl + c`で抜けられる)
「f」は、ファイルがリネーム等で変更になった場合に、**元々オープンしていたファイルを引き続きtailし続けます。**
一方、「F」はファイルがリネームされた場合に**ファイルをオープンし直します。**

以下の場合を考えてみましょう。
1. `hoge.txt`に1行追加
2. `hoge.txt`を`hoge.txt.bk`にコピー
3. `hoge.txt`に1行追加
4. `hoge.txt.bk`に1行追加

この時`tail`で表示されるのは以下の内容です。

|オプション|表示される内容|コピー後の参照|
|:---:|:---:|:---:|
|-f|1, 4|hoge.txt.bk|
|-F|1, 3|hoge.txt|

ログローテートなどでファイルがリネームされることを想像すると理解しやすいと思います。
例えば`access_log`が毎時`access_log.yyyyMMddHH`などにローテートされる場合、
ローテート後、`-f`は`access_log.yyyyMMddHH`を表示し続け、`-F`は再度`access_log`をオープンし新たな`access_log`を表示できる、というわけです。

```bash
tail: /usr/local/app/logs/gc.log: ファイルが切り詰められました
```
このような出力の後、新しいファイルの末尾が表示されていきます。

##まとめ

「f」と「F」はオープンしていたファイルがリネームされた時の挙動が違う。

* 「f」は元々オープンしていたファイルを引き続きtail
* 「F」はリネーム時に同名ファイルを再度オープンしなおす

ログローテートなどで引き続き同名のファイルが存在する場合は「F」を指定すればファイルを開き直すことなく連続してtailできますね。

##おまけ
####**tailf**
`tailf`(オプションではなくそういうコマンド)もあるようです。
昔はファイル追加分を検知(?)して読み込みエココマンドだったみたいですが、現在は`tail -f`と同じ挙動(定期的にファイルサイズチェックをして増えていたら読み込み)らしいです。

####**less中に「F」**
`less`中に`Shift + f`でも同じような挙動になります。
`Ctrl + c`で止められます。
ShinobiLayer: Xen脆弱性対応に伴う仮想サーバーメンテナンス順序の視覚化

#はじめに
SoftLayerのXen脆弱性対応に伴う仮想サーバーのメンテナンスの順番がどうなっていたのかを、世界地図を使って表現してみました。

#2014年10月時のメンテナンスの順番

* メンテナンス状況は、主にユーザーフォーラムで通知していました。
* SNG01に始まり、SJC01で終わっています。
* 世界中のDCを1筆描きでメンテナンスしていたかのような印象です。

![2014_10.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/9a2378a8-130b-a136-eba1-79730dbb5090.jpeg)


#2015年3月時のメンテナンスの順番

* メンテナンス状況は、チケットで逐次通知されていました。メールでの通知が鬱陶しい（？）人は、カスタマーポータルにて、**Account -> Manage -> Subscriptions -> Planned Maintenance**から通知先ユーザーを除外することで、一時的に非通知にすることが可能です。
* HKG02に始まり、DAL05で終わっています。DallasはたくさんDCがあるので、複数回に分けてメンテナンスされたようです。
* 世界中を何回もぐるぐると回っている感じです。UTCベースで、黒線が1日目、緑線が2日目、黄線が3日目、紫線が4日目、橙線が5日目を表しています。複数回通るDallasだけは白色にしました。
* なるべく現地のローカル時間の深夜にメンテナンスが実施されるように調整されているように見受けられます。

![2015_03.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/68e5ff3f-1df2-3133-9067-c18787bfadd5.jpeg)



#終わりに
絵にしてみると、ちょっと面白い。
Selenium IDE でfocusoutイベントを実行する


inputへの入力操作後にfocusoutイベントを実行する必要があったので
Selenium IDEで以下のコマンドを実行する

| 項目 | 設定値 |
|:-----------|:------------|
|コマンド|fireEvent|
|対象|イベントを発生させたい要素（例 id=address）|
|値|blur|
VBAにおける正規表現の性能評価１

## 結論
VBAの正規表現では、正規表現オブジェクトの生成にかなりコストがかかっているのでできるだけ使い回すか、通常のテキスト処理で代用しましょう。

## 実験結果
1. 正規表現オブジェクトを毎回生成
 - 10万件：34秒
2. 正規表現オブジェクトを使い回す
 - 100万件:6秒
3. InstrとRightでテキスト処理
 - 1000万件:7秒

## 実行コード
ある文字列から、★が現れるまでを抽出

### 実行環境
- Windows 7
 - Excel 2010
 - Microsoft Visual Basic for Applications 7.1
- i5 M460 2.53GHz


### 1. 正規表現オブジェクトを毎回生成
10万件：34秒

```vb.net:sample
Sub sample()
    Dim output As String
    Dim StartTime, StopTime As Variant
    
    StartTime = Time
    
    For i = 1 To 10000
        output = sampleRegEx("犯人はこのなかにいる★ぞ！！！") & vbNewLine
    Next i

    StopTime = Time
    StopTime = StopTime - StartTime

    MsgBox "ケース１：所要時間は" & Minute(StopTime) & "分" & Second(StopTime) & "秒 でした"

End Sub


'' 引数に★があるとき、先頭から★のひとつまえまでの文字を切り出して返却する
Private Function sampleRegEx(ByVal message As String)
    Dim RE As Object, Matches  As Object
    
    Set RE = CreateObject("VBScript.RegExp")
    
    '' 正規表現を用いて、「)」が文末にのみ存在する最初のシートを抽出する（例：発注覚書2015-02-18(水)）。
    strPattern = "^([^★]+)"
    With RE
        .Pattern = strPattern       ''検索パターンを設定
        .IgnoreCase = True          ''大文字と小文字を区別しない
        .Global = True              ''文字列全体を検索
    End With
    
    Set Matches = RE.Execute(message)
    
    sampleRegEx = Matches.Item(0).Value
   
    Set RE = Nothing
End Function
```

### 2.正規表現オブジェクトを使い回す
100万件:6秒

```vb.net:sample2
'' 引数に★があるとき、先頭から★のひとつまえまでの文字を切り出して返却する
Sub sampleRegExZ()
    Dim RE As Object, Matches As Object
    Dim StartTime, StopTime As Variant
    Dim sampleRegEx As String
    
    Set RE = CreateObject("VBScript.RegExp")
    
    '' 正規表現を用いて、「)」が文末にのみ存在する最初のシートを抽出する（例：発注覚書2015-02-18(水)）。
    strPattern = "^([^★]+)"
    With RE
        .Pattern = strPattern       ''検索パターンを設定
        .IgnoreCase = True          ''大文字と小文字を区別しない
        .Global = True              ''文字列全体を検索
    End With
    
    StartTime = Time
    For i = 1 To 10000000
       message = "犯人はこのなかにいる★ぞ！！！"
       Set Matches = RE.Execute(message)
       sampleRegEx = Matches.Item(0).Value
    Next i
    StopTime = Time
    StopTime = StopTime - StartTime
    MsgBox "ケース２：所要時間は" & Minute(StopTime) & "分" & Second(StopTime) & "秒 でした"
   
    Set RE = Nothing
End Sub
```
### 3. InstrとRightでテキスト処理
1000万件:7秒

```vb.net:sample3
Sub sample3()
    Dim output As String
    Dim StartTime, StopTime As Variant
    
    StartTime = Time
    StartTime = Time
    For i = 1 To 10000000
        output = sampleInstr("犯人はこのなかにいる★ぞ！！！") & vbNewLine
    Next i

    StopTime = Time
    StopTime = StopTime - StartTime

    MsgBox "ケース３：所要時間は" & Minute(StopTime) & "分" & Second(StopTime) & "秒 でした"
End Sub


'' 引数に★があるとき、先頭から★のひとつまえまでの文字を切り出して返却する
Private Function sampleInstr(ByVal message As String)
    Dim pos As Integer
    
    pos = InStr(message, "★")
    If pos > 0 Then
        sampleInstr = Right(message, pos)
    Else
        sampleInstr = message
    End If
End Function
```

### 雑感
- Qiitaでこれくらいの調べればすぐわかるの書くのは文化的にどうなんでしょうか
- VBAでライブラリっぽいのどういう文化なんだろう。どう探せばよいのやら・・
- VBAの性能がどこで左右されているかもっと細かいところ調べるにはどうしたらいいか調べなきゃ
UICollectionViewで、下に引っ張ったときにぐるぐる更新させる方法

```
@IBOutlet weak var myCollectionView: UICollectionView!

override func viewDidLoad() {
        super.viewDidLoad()

        //UIRefreshControllのインスタンスを生成する。
        var refreshControl = UIRefreshControl()
        //下に引っ張った時に、リフレッシュさせる関数を実行する。”：”を忘れがちなので注意。
        refreshControl.addTarget(self, action: "guruguru:", forControlEvents: UIControlEvents.ValueChanged)
        //UICollectionView上に、ロード中...を表示するための新しいビューを作る
        myCollectionView.addSubview(refreshControl)
    }

        //リフレッシュさせる
    func guruguru(sender:AnyObject) {
        sender.beginRefreshing()
        myCollectionView.reloadData()
        sender.endRefreshing()
    }
```
PHPからのDynamoDBアクセスを高速化する



このドキュメント([Performance Guide](http://docs.aws.amazon.com/aws-sdk-php/guide/latest/performance.html))を見ていて、何かDynamoDBのアクセスをチューニングできないかと思って試してみたメモです。

試してみたのは、 下記の3種類とその組み合わせです。

1. pecl の uri_templateを入れてみる
2. validation を falseにしてみる
3. http接続にする (httpsをやめる)

(httpにすると早くなるらしいというのは、どこかで見かけたのだけど、覚えてない…）

## テスト内容

* $client->getItem() で 1件取得 を1000回繰り返して、1件ごとに消費した秒数の平均を計算
* Read Capacityは予め多めにしておく。


## 結果

| パターン | 平均秒数 |
|:-----------|------------:|
| normal | 0.282|
| uri_template       |  0.262      |
| validation=false |0.268 | 
| scheme=http | 0.087 |

uri_template と、validation = false　は少し早くなりました。
が、断然早くなったのは、「http接続にする」で、約3.2倍の速度がでました。

次に、上記の組み合わせで試してみました。


| パターン | 平均秒数 |
|:-----------|------------:|
| scheme=http, uri_template | 0.058  |
| scheme=http, uri_template, validation=false | 0.056 |

http接続＋uri_template にすると、通常の4.8倍程度の速度になりました。
validation=falseも組み合わせてみましたが、あまり変わらず。
何度か試していると逆に遅くなるケースもあり、誤差の範囲のようです。

![DynamoDB-Performance-Test.png](https://qiita-image-store.s3.amazonaws.com/0/18743/86fc8c81-80aa-970d-1704-306cdbb9d10b.png "DynamoDB-Performance-Test.png")


## コード

### http接続にする

```php
$client = Aws\DynamoDb\DynamoDbClient::factory(array(
    'region' => 'ap-northeast-1',
    'scheme' => 'http',
));
```

### validation を offにする

```php
$client = Aws\DynamoDb\DynamoDbClient::factory(array(
    'region' => 'ap-northeast-1',
    'validation' => false
));
```

### uri_template

```
$ sudo pecl install uri_template
$ sudo echo "extension=uri_template.so" > /etc/php.d/uri_template.ini
```

## まとめ

* http接続 ＋ uri_template にすると、通常の4.8倍くらいになるよ。
* 当然ながら暗号化されないので、ご利用は自己責任で。

## 追記（2015/03/07）

DynamoDBへのアクセスに 200ミリsecとかかかってて、遅すぎじゃね？と思って調べたら、
Aws\DynamoDb\DynamoDbClient::factory でインスタンス生成して、初回のgetItemのみ、200msくらいかかって、それ以降は数msになった。

```
0.228
0.007
0.013
0.013
0.01
0.007
0.015
0.013
0.012
0.018
```

https でも http でも同様に2回め以降は 数msから数10msの範囲だったので、ほぼ差はみられなかった。

「初回の遅さ」が何に起因しているのか調査が必要。
ALMinium上のリポジトリを使ったGit操作（Linux）

gitがすでにインストールされていることが前提となっています。

ここからターミナルによる操作。
まずgitの設定を行う。
**$ git config --global user.name (user名)**
**$ git config --global user.email （メールアドレス）**
**$ git config --global http.sslverify false**
↑このコマンドでSSLで利用する証明書による検証を無効にする       

次にALMinium上のリポジトリからクローンを行う。
**$ git clone https://（ALMiniumがインストールされているサーバのIP）/git/（ALMiniumのプロジェクト名）**
このあとユーザ名とパスワードを聞かれるのでALMiniumプロジェクトでのuser名とパスワード入力

これでローカルにリポジトリからクローンされたファイルができる。
そのファイルに修正を加えたり、場合によっては新規にファイルを追加する。

修正が終わったら修正（新規作成）したファイルをaddする。
**$ git add （修正（新規作成）ファイル）**

コミットを行う。
**$ git commit**

ALMinium上のリポジトリにプッシュする。
**$ git push -u origin master**
（クローンするとリポジトリはorigin、作業ブランチはmasterという名前に自動的になっている。）

以上です。
「Windows アカウントが多バイト文字を含むとコンパイルエラー」の簡単な対処

Visual Studio に CUDA Toolkit をビルトインし、～.cu をコンパイルしたとき、こんなエラーが起こりませんか?
![cuda1.png](https://qiita-image-store.s3.amazonaws.com/0/33424/d7ef353b-6941-5daf-f6ce-9d6f1bb9ef5e.png)
原因はnvccがコンパイルの過程で使用するテンポラリ・ディレクトリが日本語を含むためです。nvccはコマンドラインに与えたpathやfileに多バイト文字を含むことができないのです。

これを解決するには日本語を含まないアカウントを作ることになりますが、日本語アカウントのままでも(姑息ではあるにせよ)簡単に回避できます。

プロジェクト・プロパティ: CUDA C/C++ / Common / Keep Processed Files を"はい" に切り替えます。
![cuda2.png](https://qiita-image-store.s3.amazonaws.com/0/33424/d0fb8d20-ede4-757e-b0f7-016b5da39d06.png)

すると、nvccが使用するテンポラリ・ディレクトリが <プロジェクト>/Release もしくは <プロジェクト>/Debug となります。
なのでプロジェクトのfull-pathが日本語を含まないなら、上記エラーを回避できます。

中間ファイルがいくつか消えずに残りますが、プロジェクトのクリーンを行えば消去されます。
apply


みんな大好き apply

```shell-session:
$ touch 1 3 5 7 9
$ cat list.txt
1   2
3   4
5   6
7   8
9   10
$ apply -2 mv $(cat list.txt)
$ ls
10 2 4 6 8 list.txt
```

とか


```shell-session:
$ apply 'expr %1 + %2 + %3' $( seq 1 9 )
6
15
24
```

とか。

でも、[xargs](http://qiita.com/bunzaemon/items/1a99d37eab1c9829eec8) と同じく function を指定したい場合、イマイチ。
xargs


### -I
置換文字列の指定

```shell-session:
$ yes | xargs -I {} echo {} 
y
y
```

### -i
gnu のみ。{} を置換文字列として使用すると宣言

```shell-session:
$ yes | xargs -i echo {} 
y
y
```
### -J
bsd のみ。パイプされた引数を一つの置換文字列にセットする。

```shell-session:
$ seq 1 10 | xargs -J {} echo {} no
1 2 3 4 5 6 7 8 9 10 no
```

### -L
```shell-session:
$ yes | xargs -L 10 -t
/bin/echo y y y y y y y y y y
y y y y y y y y y y
```

パイプから一度に、10行受けとる。

### -n

```shell-session:
$ yes | xargs -n 5 -t
/bin/echo y y y y y
y y y y y
```

コマンド（ここでは、-t ）に一度に与える引数の数を指示する。

### -L & -n

```shell-session:
$ yes | xargs -L 10 -n 5 -t
/bin/echo y y y y y
y y y y y
```

受けとるのは 10行でも与えるのは 5行

### -P

```shell-session:
$ yes | xargs -P 5 -I {}  bash -c "echo {} && sleep 1 ;"
y
y
y
y
y
（一休み）
```

一度に実行するプロセスの数を指定

## function を渡したい。

1. funciton 定義（当然 `.bashrc` に書かれてるなら省略可）
2. `export -f func`
3. `bash -c "func {}"`

スクリプト内ならともかく、ワンライナーで、こんな手間掛けるくらいなら、別の手段考えるわ。
capybaraでicheckのcheckboxをclickする

一苦労だったので、ここで共有します。

#目的
下の画像のようにicheckで変換されたcheckboxを触ります。

![Screenshot from 2015-03-06 21:23:32.png](https://qiita-image-store.s3.amazonaws.com/0/37516/7a6e860d-e8f2-b2ca-b417-4d21d8eca2c5.png)


#方法
input#agreementを囲っているdiv.icheckboxをclickします。

````rb
page.find(:xpath, '//input[@id="agreement"]/..').trigger('click')
````

以上です。
もっとスマートな方法があれば、教えて頂けると嬉しいです。

#参考
http://fronteed.com/iCheck/
http://stackoverflow.com/questions/4861863/how-to-get-parent-node-in-capybara
PHPのclassのコメントブロックを追加

# 概要

PHPのクラスファイルにコメントブロックを追加する方法。
sublime text3のプラグインも加えて。

IDEでは機能でコメントブロックを追加出来るけども、
通常のeditorでは皆さんどのようにしているんだろうか。。。

sublime text3 で使うことを想定。
環境は、Mac osx10.9

# インストール
```
$ sudo pear install PHP_DocBlockGenerator-1.1.2
```

# 使い方
下記で確認して下さい。

```
 % docblockgen -h
```

# sublime plugin

sublime text3 から実行するplugin


## plugin

https://gist.githubusercontent.com/mickey390/ea030c2cfc4b9966ffb9/raw/415b6e9648f5c5eead9992578991a016aa35f1fa/gistfile1.py


## 実行

### 準備

アウトプットディレクトリを作成する。
pluginの`out_dir `を作成する。

1. コメントを追加したいファイルを選択する。
2. `ctrl+shift+@`でコマンドIFを表示し、
3. `view.run_command('phpcadd')`と入力する。enter 

↓
アウトプットディレクトリに作成された
コメント追加されたファイルがopenされる
GoogleSpreadSheetでunixtimestampを出す方法＠日本

メモ書きです。

GoogleSpreadSheetでUNIXTIMEを出す関数がなかったっぽいので
無理やり書きました。

2015年3月6日21時10分＠日本だとすると以下のような書き方。
``=(DATEDIF(DATE(1970,1,1), INDEX(DATE(2015, 3,6), "D") * 60 * 60 * 24 + HOUR(21) * 60 * 60 + MINUTE(10) * 60 - 9 * 60 * 60)``

時差（-9時間)を考慮すると計算があいます。
日本以外で使った場合の考慮などはしてないので注意。
起動中のアプリケーションをpecoで選択して終了するシェルスクリプト


* pecoはインクリメンタルサーチだけでなく、複数選択もできる。
* さくさく選択してまとめて終了できる。
* Alfred Workflowにしたほうが便利かもしれないが、こちらのほうが何かと速い。

```quit
#!/bin/bash
while read AppName;do
  osascript -e "quit application \"$AppName\""
done < <(osascript -e 'tell application "System Events" to get name of every application process whose visible is true and name is not "Finder"' | sed "s/, /"\\$'\n'"/g" | peco --prompt "Select App to quit:")

```


## 参考
* [すべてのアプリを一発で終了させるアプリを自作する[Mac OS X] | Basic Werk](http://basicwerk.com/blog/archives/1066)
* [sedで改行を出力する](http://rcmdnk.github.io/blog/2014/09/21/computer-bash/)
Macのネットワーク環境をコマンドラインからpecoで選択して変更


`scselect`コマンドで、コマンドライン（ターミナル）からMacのネットワーク環境を選択できる。

```bash
$ scselect
Defined sets include: (* == current set)
 * 05522B10-xxxx-xxxx-xxxx-xxxxxxxxxxxx	(Automatic)
   1781AE2D-xxxx-xxxx-xxxx-xxxxxxxxxxxx	(USB)
$ scselect USB
CurrentSet updated to 1781AE2D-xxxx-xxxx-xxxx-xxxxxxxxxxxx (USB)
$ scselect
Defined sets include: (* == current set)
   05522B10-xxxx-xxxx-xxxx-xxxxxxxxxxxx	(Automatic)
 * 1781AE2D-xxxx-xxxx-xxxx-xxxxxxxxxxxx	(USB)
```

pecoで選択して変更してみる。

```bash
$ scselect | sed -e 1d -e 's/[^(]*(\(.*\))/\1/g' | peco --prompt "Select network env:" | xargs scselect
```

エイリアスとかしておくと、簡単にネットワーク環境を切り替えられる。

具体的には、iPhoneをMacBook AirにUSB接続したとき、テザリングするやつとしないやつの切り替えに利用している。

## 参考
* [OSX - コマンドラインからネットワーク設定を変更する方法 - Qiita](http://qiita.com/gm_kou/items/eadd221a9c65f1b45d4e)
samba Server on RaspberyPi

#ラズベリーパイをSamba Serverに

##HDDをマウントする。
HDDをUSBでRPiに接続した後以下のマウント作業を行いHDDにアクセスできるようにする。

まずはマウント先のディレクトリを作成する。

```bash:
cd /mnt

mkdir /disk1
```

HDDの中身を確認する。
```bash:
sudo sfdisk -l
```

HDD(=sda)1について以下のように情報がでてくる。
容量とか、フォーマットとかを確認する。
今回は最も容量の大きいsda3（NTFS）をマウントすることにする。

```shell-session:
Disk /dev/sda: 121601 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sda1          0+      7-      8-     57344    c  W95 FAT32 (LBA)
/dev/sda2          7+    398-    391-   3138560   83  Linux
/dev/sda3        398+ 121600- 121203- 973559808    7  HPFS/NTFS/exFAT
/dev/sda4          0       -       0          0    0  Empty
```

NTFSフォーマットを扱うにはツールみたいなのが必要らしい（理解してない）。そのツールをインストールする。

```bash:
sudo apt-get install ntfs-3g
```

いざマウントする。

```bash:
sudo mount /dev/sda3 /mnt/disk1
```

さてここで今回の主役sambaをインストール
そしてサービスを止めておく。

```bash:
sudo apt-get install samba

sudo service samba stop
```

sambaの設定ファイルをいじくる。
```bash:
sudo vi /etc/samba/smb.conf
```

以下変更・追加箇所。

```text:smb.conf
workgroup = yourWorkGroup
wins support = no
interfaces = 192.168.01. 127.0.0.0/8 eth
max log size = 100
security = share
encrypt passwords = no
load printers = no
usershare allow guests = yes
browseable = yes
read only = no

`#以下を追加する`
[test_disk]
comment = this is test disk
path = /mnt/disk1
guest ok = yes
writable = yes
share modes = yes
```
Mojoliciousのモデル構成例

# 0. 環境
OS: Ubuntu 12.04 LTS 64
Mojolicious 6.01
plenv: perl 5.18.1

# 1. ディレクトリ構成
mojo generate app MyAPPによりデフォルト構成は以下の通り。


```shell-session

my_app
├── lib
│   ├── MyApp
│   │   └── Controller
│   │       └── Example.pm
│   └── MyApp.pm
├── log
├── public
│   └── index.html
├── script
│   └── my_app
├── t
│   └── basic.t
└── templates
    ├── example
    │   └── welcome.html.ep
    └── layouts
        └── default.html.ep

```

# 2. Modelの追加
　Controllerディレクトリ以下のコントローラから使用する
モデルを追加します。追加するのはModel.pmとModelディレクトリです。

追加後のディレクトリ構成

```shell-session
my_app
├── lib
│   ├── MyApp
│   │   ├── Controller
│   │   │   └── Example.pm
│   │   │   
│   │   ├── Model
│   │   │   └── Hoge.pm
│   │   │
│   │   └── Model.pm
│   └── MyApp.pm
│
├── log
│   └── development.log
├── public
│   └── index.html
├── script
│   └── my_app
├── t
│   └── basic.t
└── templates
    ├── example
    │   └── welcome.html.ep
    └── layouts
        └── default.html.ep

11 directories, 13 files

```


MyApp.pmにModelを追加

```MyApp.pm
package MyApp;
use Mojo::Base 'Mojolicious';

+use MyApp::Model;
+has 'model' => sub {MyApp::Model->new};

```

自作モデルHogeを作成


```Hoge.pm
package MyApp::Model::Hoge;
use Mojo::Base 'Mojolicious';

sub hello {
  my $self = shift;
  # テストのためコメント
  # print('Hello');
  return;
}

1;
```

Model.pmにHogeを追加。

```Model.pm
package MyApp::Model;
use Mojo::Base 'Mojolicious';

use MyApp::Model::Hoge;
has 'hoge' => sub { MyApp::Model::Hoge->new };

1;
```

Example.pmから呼び出す
welcomeサブルーチンの中に記述。

```Example.pm
+ print $self->app->model->hoge->hello;
```

# テスト

モデルのテスト

```pl
use Test::More;
use Test::Mojo;

my $t = Test::Mojo->new('MyApp');
$t->get_ok('/')->status_is(200)->content_like(qr/Mojolicious/i);

# モデルテスト
my $app = $t->app;
is($app->model->hoge->hello, "Hello");
done_testing();
```


# 関連
http://qiita.com/uchiko/items/5ce3adc2bd96c45545a0
http://search.cpan.org/~sri/Mojolicious-6.66/lib/Mojo/Base.pm
https://github.com/yuki-kimoto/mojolicious-guides-japanese/wiki/Mojo::Base
RでGoogleVisを使う

# googleVis のインストール

Rのconsoleで以下を実行

```
> install.packages("googleVis")
also installing the dependency ‘RJSONIO’

 URL 'http://cran.rstudio.com/bin/macosx/mavericks/contrib/3.1/RJSONIO_1.3-0.tgz' を試しています 
Content type 'application/x-gzip' length 1279592 bytes (1.2 Mb)
 開かれた URL 
==================================================
downloaded 1.2 Mb

 URL 'http://cran.rstudio.com/bin/macosx/mavericks/contrib/3.1/googleVis_0.5.8.tgz' を試しています 
Content type 'application/x-gzip' length 960710 bytes (938 Kb)
 開かれた URL 
==================================================
downloaded 938 Kb
```

# googleVis ライブラリのロード

```
> library(googleVis)


Welcome to googleVis version 0.5.8

Please read the Google API Terms of Use
before you start using the package:
https://developers.google.com/terms/

Note, the plot method of googleVis will by default use
the standard browser to display its output.

See the googleVis package vignettes for more details,
or visit http://github.com/mages/googleVis.

To suppress this message use:
suppressPackageStartupMessages(library(googleVis))
```

# グラフを作成

```r
# 棒グラフオブジェクトを作成
> hoge = gvisColumnChart( df )


# ブラウザで表示
> plot( hoge )
```



http://cran.r-project.org/web/packages/googleVis/vignettes/googleVis_examples.html
MeCabに単語を登録

MacOS Mavericks で、 MeCab に単語を登録する方法

流れとしては、
1. 単語情報を記載したCSVファイルを作成
2. そのCSVファイルからユーザー辞書ファイルを作成
3. MeCabを実行(ユーザー辞書ファイルが使われる)
というストーリー。

以下の2つを任意のファイルパスで決めておく。

<dl>
  <dt>単語情報を記載したCSVファイル</dt>
  <dd>/path/to/word.csv </dd>
  <dt>MeCabが使うユーザー辞書ファイル</dt>
  <dd>/path/to/mecab.dic</dd>
</dl>


# MeCabがユーザー辞書ファイルを参照するように設定

```
# MeCabの設定ファイルのテンプレートをホームディレクトリに用意
$ cp -pr /usr/local/etc/mecabrc ~/.mecabrc
```

```
# ~/.mecabrc に、以下のように userdic エントリーを追加
$ cat ~/.mecabrc
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
dicdir =  /usr/local/lib/mecab/dic/ipadic

; userdic = /home/foo/bar/user.dic

; output-format-type = wakati
; input-buffer-size = 8192

; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n

userdic = /path/to/mecab.dic
```


# 登録する単語のCSVファイルを作成

/path/to/word.csv を、以下のようなフォーマットで作成。文字コードは UTF-8 にする。

```
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
```

活用しない一般名詞であれば、以下のように書ける。

```
Wi-Fi,,,1000,名詞,一般,*,*,*,*,WI-FI,Wi-Fi,ワイファイ
```

# 辞書の作成

以下のコマンドを実行する

```
$  /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic -u /path/to/mecab.dic -f UTF-8 -t UTF-8 /path/to/word.csv
```

# 辞書が機能するかどうかを確認

1単語になっていればOK.

```
$ echo "Wi-Fiが繋がらない" | mecab
Wi-Fi   名詞,一般,*,*,*,*,WI-FI, Wi-Fi, ワイファイ
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
繋がら  動詞,自立,*,*,五段・ラ行,未然形,繋がる,ツナガラ,ツナガラ
ない    助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
```
Titanium Android アプリを node-inspector で遊ぶ

まずは node-inspector が必要になります。npm でインストールしておいてください。

```sh
$ npm install node-inspector -g
```

おもむろに起動しましょう。

```sh
$ node-inspector
Node Inspector v0.9.1
Visit http://127.0.0.1:8080/debug?port=5858 to start debugging.
```

まだ待ってください！次にアプリを起動しましょう。

```sh
$ ti build -p android -C emulator --debug-host 5858
```

ビルドが終わってエミュレータでアプリが起動します。が、スプラッシュスクリーンで止まっているはずです。安心してください。お使いのエミュレータは正常です。先ほどの ```http://127.0.0.1:8080/debug?port=5858``` へブラウザでアクセスしましょう。

Titanium Studio な方、ごめんなさい。ちょっと面倒です。デバッガ起動するとコンソールに「デバッガはここのポートを使っているよ！」ってメッセージが表示されます。そのポートを覚えておいてください。```http://127.0.0.1:8080/debug?port=5858``` の 5858 をそのポートに置き換えてブラウザでアクセスします。が、その前にデバッガを停止しておいてください。この時 Studio のコンソールがクリアされてしまうので、ポートは必ず覚えておいてくださいね。

![スクリーンショット 2015-03-06 19.17.35.png](https://qiita-image-store.s3.amazonaws.com/0/47686/08675161-1c6e-de8c-d335-b25db50aa4b1.png)

画像にある再生ボタンをクリックしてください。スプラッシュスクリーンから先に進むことができます。ここからはブラウザのドキュメントインスペクタのように操作できるはずです。試しにコンソールで ```alert('Hello, world!')``` と入力してみてください。

どうですか？アプリにアラートが表示されましたか？コードがインジェクションできましたね！

※ 残念ながら iOS では遊ぶことができません。iOS はランタイムが v8 ではないですからね。。。
縁取りボタン

こんな感じで縁取ったボタン

![futidori.png](https://qiita-image-store.s3.amazonaws.com/0/68491/59d9f867-1da7-eccc-425f-675264502354.png)


IEは未確認（IE8ではだめ）

```html
<!DOCTYPE html>
<html>
<head>
<style>
.button {
	text-align: center;
	border: solid 2px #527ACC;
	border-radius: 5px;
	padding: 1px;
	background-color: #fff;
}

.button button,
.button a {
	padding: 0.6em 0 0.6em;
	color: #fff;
	background-color: #527ACC;
	cursor: pointer;
	width: 100%;
	border-radius: 3px;
	display: block;
}

.button button {
	border: none;
}

/* カーソルあてると色を変える */
.button:hover {
	cursor: pointer;
	border: solid 2px #94B8FF;
}
.button button:hover,
.button a:hover {
	background-color: #94B8FF;
}

.button a:link { text-decoration: none;}
.button a:visited { text-decoration: none;}
.button a:active { text-decoration: none;}

</style>
</head>
<body>
<div class="button">
	<button type="button"><span>button</span></button>
</div>
<br>
<div class="button">
	<a href="#"><span>a</span></a>
</div>
</body>
</html>
```
サーバー上の特定ディレクトリを共同編集可能にする

よくわかっていないけど、おそらくこういうことだろうというメモ

# やりたいこと

* １つのVPSにエンジニア用のアカウントが複数あり、プロジェクトのソースも複数案件分ある。
* 全てのプロジェクトのソースは、エンジニアであれば誰でも編集可能であり、新規ファイル作成も可能にしたい。

# 構想

```
/home
 |- tanaka
 |- kato
 |- tokui
 |- projects <--このディレクトリ以下を共同編集したい
   |- project1 <--WEBシステム１
     |- htdocs
     |- system
   |- project2 <--WEBシステム２
     |- public_html
     |- system
```

* 田中さんと加藤さんと徳井さんはエンジニアグループ（techグループ)
* projectsは共同作業用ユーザー
* エンジニアがprojects以下にファイルを作成すると、「グループがtechでありグループのパーミッションが書込可」となるとよい
* ディレクトリを作成したときもそうなるとよい

# 実現方法

* /home/projectsディレクトリをtechグループにする

```
groupadd tech
gpasswd -a tanaka tech
gpasswd -a kato tech
gpasswd -a tokui tech
chgrp tech /home/projects
chmod 775 /home/projects
```

* セットユーザIDとやらをセットする（新規ファイルが自動的にtechグループになる）

```
chmod g+s /home/projects
```

* umaskをセットする（新規ファイルが自動的にグループ書込み可になる）

```
umask 0002
```

※CentOSではログイン用のユーザーはデフォルトで0002になっているようなのでセット不要な模様。
　デフォルトで0002でない場合は、各ユーザーの.bash_profile等に書いておく。

* 既にファイルがある場合は全てに適用

```
chgrp tech -R /home/projects
chmod g+w -R /home/projects
find . -type d -print | xargs chmod g+s
```

## 結果

```
ls -al /home/projects

drwxrwsr-x.  5 projects  tech 4096 Mar  6 18:25 .
drwxr-xr-x. 21 root      root 4096 Mar  6 16:29 ..
drwxrwsr-x.  4 tanaka    tech 4096 Mar  6 16:34 project1
drwxrwsr-x.  2 kato      tech 4096 Mar  6 18:25 project2
```

## テスト

* ディレクトリを追加してみる

```
mkdir -p /home/projects/project1/htdocs/img
ls -al /home/projects/project1/htdocs

drwxrwsr-x. 2 kato       tech      4096 Mar  6 19:00 img
```

* ファイルを追加してみる

```
touch /home/projects/project1/htdocs/index.html
ls -al /home/projects/project1/htdocs

drwxrwsr-x. 2 kato       tech      4096 Mar  6 19:00 img
-rw-rw-r--. 1 kato       tech         0 Mar  6 19:04 index.html
```

これで、techグループのユーザーであればいくらでもソースを変更できます。

# おわり

これでやりたいことはできたと思う。
umaskはユーザー毎のようなので、デフォルトが022の場合は少し手順が増えそう。（よくわかってない）
tmux の複数の window を安全に終了させる


tmux では kill-session でセッション内の window を終了させることができるが、この場合、問答無用で HUP シグナルが送られる。

しかし、アプリケーションによっては INT シグナルを送ったり、exit とタイプしないと正常な終了処理が行われない場合がある。

現在のセッションのすべての window について、名前に基づいて適切な終了処理を行う tmkill という Ruby スクリプトを作成した。

```ruby
#!/usr/bin/env ruby
# tmux のウィンドウを安全に kill する
# ウィンドウ名にもとづいて exit [Enter] か control-c を送る

# セッション名・ウィンドウ名の取得
# #{} は tmux のフォーマット文字列
session = `tmux display-message -p "\#{session_name}"`.strip
window_names = `tmux list-windows -F "\#{window_name}"`.strip.each_line.map{|l| l.strip }

commands = []
window_names.each do |window|
  # ウィンドウ名に基づいて、送信するキー入力を決定する
  # ウィンドウ名の最初に [test] とついていれば、それを省く
  keys = case window.gsub(/^\[test\]/, "")
  when "guard", "rails-sh"
    %w(exit Enter)
  when "rails", "resque", "solr", "wordpress"
    %w(C-c)
  else
    # ignore
    next
  end
  commands << ["tmux", "send-keys", "-t", "#{session}:#{window}"] + keys
end

if (ARGV & %w(-n --dry-run)).any?
  require "shellwords"
  commands.each{|cmd| puts cmd.shelljoin }
else
  commands.each{|cmd| system *cmd }
end
```

kill-session と違ってセッション自体は終了させない。
また名前がマッチしない場合は何もしないようにして、シェルは終了させないようにしている。

# 解説

tmuxinator を使ってる場合にだいたい同様の事を実現している記事 ([Exit Tmuxinator Session Safely](http://www.kluks.de/blog/posts/16-exit-tmuxinator-session-safely)) を参考にした。

まず、現在のセッション名を取得する。

```bash
# tmux display-message は status line の表示
# -p で標準出力へ表示
# #{session_name} はセッション名を示すフォーマット文字列
$ tmux display-message -p '#{session_name}'
0
```

ウィンドウ名を取得する。

```bash
# tmux list-windows は現在のセッションのウィンドウ一覧の表示
# -F でフォーマットが指定できる
# #{window_name} はウィンドウ名を示すフォーマット文字列
$ tmux list-window -F '#{window_name}'
zsh
rails
guard
```

`tmux send-keys` コマンドでそれぞれのウィンドウにキー入力を送る。

```bash
# tmux send-keys -t セッション名:ウィンドウ名 キー入力1 キー入力2 ...
$ tmux send-keys -t 0:rails C-c
$ tmux send-keys -t 0:guard exit Enter
```
TimesTen学習メモ（個人用）


`ttMigrate` について下記のサイトが参考になる。

http://otndnld.oracle.co.jp/document/products/timesten/html/B25770-01/API%20and%20SQL%20Reference%20Guide-05-12.html

http://www.yanoo-japan.com/E16338_01/timesten.112/b56050/ttref343.htm

http://doc.adminschool.net/oracle/db112/timesten.112/b55285/upgrade.htm

あとで実機で検証する予定（検証したら、ログをアップ予定…）
Vagrant provision でも SSH Agent Forwarding する


githubに置いてあるprivateリポジトリを取得するようなprovisioningを行いたいときとか、ありますよね。
よね。

# まえおき

vgarantで動かしている仮想マシンでも、ssh-agentによるforwardingを行いたいときは、Vagrantfileにforwardingの設定を書けばOK。

```rb:Vagrantfile
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  # ssh-agentによるforwardingを使用する
  config.ssh.forward_agent = true

end
```

しかし、provisioningをしている間はどうにも有効になってない様子？

```rb:Vagrantfile
(前略)

  # Host認証がどうとか、って言われてエラー
  config.vm.provision "shell", inline: "git clone git@github.com:path/to/private/repository"

(後略)
```

このリポジトリは初期設定に必要なんだ！
どうしてもprovisioningで取得したいんだ！！！！！


# 解決方法

## 環境

* ホスト側
	* MacOSX 10.9.5
	* Vagrant 1.7.2
	* VirtualBox 4.3.24
	* githubの認証に使う鍵は `ssh-add` 済み
	* provisiongは `"shell"` で行う
* ゲスト側
	* Ubuntu 12.04 x64 (`precise64` boxを使用)

## やりかた
`provision` の引数に `privileged: false` を加えます。
これで、ゲスト側マシンでもホストの鍵が使えます。
（ただし、ユーザーが `vagrant` の状態でprovisioningが実行されるので注意。root権限が必要なprovisionは別に分けた方がいいかも）

しかしこのままでは、ホストの確認でyes/noを問われてしまい、スクリプトが進みません。
仕方ないので、StrictHostKeyCheckingを行わないようにします。




```rb:Vagrantfile
(前略)

  # もちろん、forwardingの設定も必要
  config.ssh.forward_agent = true

  # これでクローンができる
  config.vm.provision "shell", privileged: false, inline: <<-EOT
    echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
    git clone git@github.com:path/to/private/repository
  EOT

(後略)
```

# 参考

* [SSH Agent Forwarding not available during provisioning (using lucid32 box, maybe others) · Issue #1303 · mitchellh/vagrant](https://github.com/mitchellh/vagrant/issues/1303)
* [Non interactive git clone (ssh fingerprint prompt) - Server Fault](http://serverfault.com/questions/447028/non-interactive-git-clone-ssh-fingerprint-prompt)
Singleton in Objective-C

##Header file

```objc:Manager.h
@interface Manager : NSObject
+ (instancetype)sharedInstance;
@end
```

##Method file
* Prevent concurrent access from multiple thread by @synchronized or dispatch_once
* Prevent multiple allocation by overriding allocWithZone

```objc:Manager.m
@implementation Manager

static Manager *_manager = nil;

+ (instancetype)sharedInstance {
	@synchronized(self) {
	    if(!_manager) {
	        (void)[[self alloc] init];
	    }
	}
	return _manager;
}

+ (id)allocWithZone:(NSZone *)zone {
	@synchronized(self) {
	    if(!_manager) {
	        _manager = [super allocWithZone:zone];
	    }
	}
	return _manager;
}
@end
```
or

```objc:Manager.m
@implementation Manager

static Manager *_manager = nil;

+ (instancetype)sharedInstance {
	static dispath_once_t onceToken;
	dispatch_once(&onceToken, ^{
        (void)[[self alloc] init];
	});
	return _manager;
}

+ (id)allocWithZone:(NSZone *)zone {
    static dispath_once_t onceToken;
	dispatch_once(&onceToken, ^{
	    _manager = [super allocWithZone:zone];
	});
	return _manager;
}
@end
```

##Access

```objc
[Manager sharedInstance].property
[[Manager sharedInstance] method];

```

>References
http://qiita.com/yuky_az/items/27031ec5ca55a95d6209
http://programming-ios.com/objective-c-singleton/
http://news.mynavi.jp/column/objc/051/
iOSアプリで実際の描画サイズとself.view.frameの数値が違うとき、「Resize View from nib」にチェックを入れる


self.view.frameの幅：高さが、常に600:600になっていて困りました。
シミュレータがiPadでも5Sでも4Sでも6でも、常に600:600。
こうなると、画像の中心点xをself.view.frame.width / 2に置く、とかができません。

storyboardで設定したら直りました。

![a8c456292cf0b6b24a51a9c0690803a8.png](https://qiita-image-store.s3.amazonaws.com/0/28556/42928030-2498-6b7b-d973-d4756b222d1e.png "a8c456292cf0b6b24a51a9c0690803a8.png")

Attributes inspector内、View Controllerのlayoutにある「Resize View from nib」チェックボックスにチェックを入れます。
すると、self.view.frameのwidthやheightが実際の値になりました。

自分で外したんだと思いますが。。