OmniAICreator/Qiita-1.07M huggingface dataset:
iOS8でsegueを利用してpopoverする

iOSでpopoverを行おうとしたら、背景が真っ黒でなんでやねん！という事態に陥った方もいるのではないでしょうか(私は陥りました)。

ここでは、標準?のStoryboardとsegueを利用した形でのpopoverの方法をご紹介します。

## 1. popover用のViewControllerを作成する
popover用のViewControllerについて、重要なポイントは以下2点です。

* Viewの背景を透明(Clear Color)にする
* Viewの上にpopover用のViewを重ねる

イメージ的には以下のような感じです。選択されているViewのBackgroundがClear Colorになっていて、その下のViewが実際現れるpopoverの画面になります。

![popoverView.png](https://qiita-image-store.s3.amazonaws.com/0/25990/15946e7e-c00d-9097-fb6d-0e1d0d053ec5.png)

## 2. Segueでつなぐ
呼び出し元からpopover用のViewControllerはPresentModally、popoverを閉じるために閉じるボタン的なものから呼び出し元のViewControllerまでをDismissのSegueでつなぎます。

ポイントなのは、PresentModallyのPresentationの種別を"Over Current Context"にすること。普通のCurrentContextだとpopoverした瞬間に背景が真っ黒になってしまいます。


これにて、コードレスでpopoverが実現できたはず。
Supervisorを使ってpresentを動かす


[golangで書かれたSlack bot でエンジニアに話題提供しよう](http://hakobe932.hatenablog.com/entry/2014/12/18/193819)
hakobeさんが作ってる、slack botを導入するにあたって、goのWebアプリケーションを動かすのにどういう環境が良いのかなと思って調べた所、Supervisorが良さそうだったので使ってみました。

本当はdeployとかいろいろ検討するポイントがあるのだけど、今回は個人で利用するので、supervisorで動かすところだけやりました。

## 環境
Ubuntu 14.04
go 1.4

## presentのインストール
記事に書かれている通りなので割愛

## Supervisorのインストール
```
sudo apt-get install supervisor
/etc/supervisor/supervidord.conf #こちらは必要に応じて編集
```

presentの起動設定を追加
ブログに記載されてる内容のコマンドをそのままcommandで指定しても期待通りには動かないので、supervisorのenvironmentに環境変数を記述する必要がある。というぐらいの違い。

```/etc/supervisor/conf.d/present.conf
[program:present]
command=present
user=username
environment=PRESENT_SLACK_INCOMMING_URL="https://hooks.slack.com/services/ABCDEFG/HIJKLMN/1234567qwerty",PRESENT_DB_DSN="id:password@hostname/present?parseTime=true&charset=utf8",PRESENT_NAME="engineerkun",PRESENT_WAIT="900",PRESENT_NOOP_LIMIT="3",PORT="8080"
autorestart=true
stdout_logfile=/var/log/supervisor/jobs/present-supervisord.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=5
stdout_capture_maxbytes=1MB
redirect_stderr=true
```

## 動かし方
```
# 起動
sudo service supervisor start


# 確認
sudo service supervisorctl status
# present                          RUNNING    pid 10190, uptime 0:22:45
# 動いてるサービスが確認できる

# 停止
sudo supervisor stop

# 再起動
sudo supervisor restart

# 設定ファイルの読み込み
sudo supervisor reload

# presentの起動
sudo supervisorctl start present

# presentの再起動
sudo supervisorctl restart present

# presentの停止
sudo supervisorctl stop present
```

## まとめ
自分用のメモです。
golangでWebアプリケーション作ったらどうやって運用してるのかなーという辺りを、いろいろ調べるきっかけになって勉強になりました。

普段は公開するほどドキュメントをまとめきれないのでEvernoteに書き留めてストックしてるのですが、試しに書いてみました。

面白いアプリを作ってくれたhakobeさんに感謝。
mitmproxyの導入時の作業メモ


ここら辺の記事をみて興味が湧いたのでインストールしてみた。

[モバイルアプリ開発者のための mitmproxy 入門](http://qiita.com/hkurokawa/items/9034274cc1b9e1405c68)
[mitmproxy を使ってアプリの API を無理やり開発環境に向ける](http://qiita.com/yuya_takeyama/items/979e00cf0b87dae92e28)

いくつか導入までにエラーが出たので、適当なものですが作業記録を残しておきます。
pythonしらない人が作業しているので、変な事してたら教えて下さい。

### 環境

|ソフトウェア|バージョン|
|:-:|:-:|
| OS | Max OSX 10.9.5|
| python | 2.7.5 |
| pip | 1.5.6|
| mitmproxy | 0.11.1 |

### 大まかな作業

[1] Download and install pip
https://pip.pypa.io/en/latest/installing.html

[2] pip実行時にDistributionNotFoundというエラーに遭遇
http://qiita.com/saicologic/items/90667c36f780cf6e2bb1

- pipをupgradeしたら直った
- 最新の入れたつもりなんだけど、なんででしょう

[3] pip install mitmproxyするとlibxml関連？のヘッダがないと怒られる
http://qiita.com/namakecat/items/5fa0327ae7f33c2ca2f3

- xcode コマンドラインツール及びlibxmlのインストールで直った

[4] pip install mitmproxy
http://qiita.com/hkurokawa/items/9034274cc1b9e1405c68

[5] pyopensslのバージョンが古い(0.14以前)と言われ動かない
https://github.com/dutzi/tamper/wiki/Troubleshooting

- pip listからみると0.14ってなってるが上記のエラーがでる
- 古いバージョンをみてしまっている？以下のように古いのをリネームしておくとエラーが出なくなった

```bash
$sudo mv /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/OpenSSL /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_OpenSSL
```
コミットしたらGitBucketとJenkinsとHipChatに任せて他の事やってましょう(3)

[コミットしたらGitBucketとJenkinsとHipChatに任せて他の事やってましょう(1)](http://qiita.com/ryuthky_github/items/c27b8f0f15b7e658efc2)
[コミットしたらGitBucketとJenkinsとHipChatに任せて他の事やってましょう(2)](http://qiita.com/ryuthky_github/items/f3d5e641cfbe8d4f3cde)
からのつづき

JenkinsからのHipChatじゃなくて他の通知方法が知りたい方はこっちで

* [Slack](http://qiita.com/ryuthky_github/items/c7e68fba13ddf230159a)
* [Chrome](https://chrome.google.com/webstore/search/jenkins)
* [その他もろもろ(本家プラグイン)](https://wiki.jenkins-ci.org/display/JENKINS/Plugins#Plugins-Buildnotifiers)

# 7.HipChatとJenkinsの連携設定
## 7.1.HipChatの準備
1.)すでに使用してる場合Webで管理画面をだします
![HipChat.png](https://qiita-image-store.s3.amazonaws.com/0/10605/ad721ef1-eaaf-c8c0-f587-ac220c0eaf63.png)
2.)[Group admin]-[Integrations]-[Find Now]を選択
![HipChat   Integrations.png](https://qiita-image-store.s3.amazonaws.com/0/10605/26b3186e-eb36-8800-d941-fd5d4cd19f89.png)
Jenkinsおじさんを探してください！
3.)Installします
![HipChat   Jenkins.png](https://qiita-image-store.s3.amazonaws.com/0/10605/4a469920-e642-445d-7c25-ddc2cc96c79f.png)
「API Token」を生成しますこれがJenkinsおじさんとの絆です
「Room IDと名前」は「here」のリンク先にあります
4.)APIが生成されているか確認します
[API]に移動します
「autogenerated-jenkins」が表示され「Token」が先程のと一致していればOK
![HipChat   API Tokens.png](https://qiita-image-store.s3.amazonaws.com/0/10605/2be623cb-615d-4718-3b54-ec6fec5c4c56.png)

## 7.2.Jenkinsの設定
1.)システムの設定
[ダッシュボード]-[Jennkinsの管理]-[システム設定]
![システムの設定  Jenkins .png](https://qiita-image-store.s3.amazonaws.com/0/10605/feed86ee-f271-5f56-8b28-13fcb6422609.png)
ここに先ほどHipChatから取得した
「API Token」「Room ID」を入力「Jenkins URL」は自分を指定して[適用]か[保存]をする
2.)ジョブの設定
![qiita Config  Jenkins4 .png](https://qiita-image-store.s3.amazonaws.com/0/10605/746ba7b3-125c-dce2-5d42-1948970cb844.png)
「ProjectRoom」が個別にある場合は記入
「Start Notification」にチェックをいれるとビルド始まったよって言うのも通知してくれる
![qiita Config  Jenkins 5.png](https://qiita-image-store.s3.amazonaws.com/0/10605/3c08e969-5f93-dde7-333f-9ac78b17ea41.png)
「ビルド後の処理の追加」から「HipChat Notifications」を追加して[適用]か[保存]をする

# 8.結合確認
![HipChat   Web Chat2.png](https://qiita-image-store.s3.amazonaws.com/0/10605/bda7308e-ae9b-e395-2438-37619544ffb4.png)

おーjenkinsおじさんしゃべっております。

これにて完結。
NSTextField の初期化でハマりまくった件について


Swift の勉強がてら、簡単なアプリを作ろうと思ってハマりまくりました。Qiitaの記事を含めあちこち調べたのですが、そのものズバリの解説を[StackOverflow の日本語版](http://ja.stackoverflow.com/questions/2032/nstextfield-の初期化の方法について/2039#2039 "NSTextField の初期化の方法について")で解説していただきました。
超はずかしい初心者の失敗ですが、後学のために共有したいと思います。

##やりたいこと
NSTextField のテキストボックスにあらかじめ文字列を代入して表示させたい。

## View
真ん中のボックスが NSTextField です。

![StoryboardのView](https://qiita-image-store.s3.amazonaws.com/0/33292/ea865422-d725-fe9c-01bc-70cddc29b072.png "view.png")

##失敗した Code

```swift:ViewController.swift
import Cocoa

class ViewController: NSViewController {

	@IBOutlet weak var textField: NSTextField!
	
	override func viewDidLoad() {
    	super.viewDidLoad()
   }

	override var representedObject: AnyObject? {
		didSet {
            // Update the view, if already loaded.
    	}
	}

	required init?(coder: NSCoder) {
		super.init(coder: coder)
		textField.stringValue = "a string"
	}
}
```

これが、次のようなエラーを起こします。

`fatal error: unexpectedly found nil while unwrapping an Optional value`

##成功した Code
NSTextField への代入が `init?(coder:coder)` から `override func viewDidLoad()` に移動しています。


```swift:ViewController.swift
class ViewController: NSViewController {

    @IBOutlet weak var textField: NSTextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        textField.stringValue = "a string"
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }

    required init?(coder: NSCoder) {        
        super.init(coder: coder)
    }
}
```

##成功したView
![textField.png](https://qiita-image-store.s3.amazonaws.com/0/33292/2e4609fe-1c3b-45d9-e65f-7b138bb12cdf.png "textField.png")

##反省
* init の段階で outlet の接続はまだ済んでいないということを知らなかった。ドキュメントはちゃんと読みましょう (^^;

* 古いブログ記事を読んでも何がなんだかよくわからなかった。Apple 公式の最新リソースをちゃんとチェックしましょう (^o^;
Eclipseの日本語化について

LinuxMint 17においてEclipseの日本語化プラグインである __Pleiades__ を使用しようとしてハマったので、備忘録としてここにあげときます。

基本的な手順についてはPleiadesに同梱されている __README__ の通りで良いのですが、以下の部分に注意です。

>```text:
>2\. eclipse.ini の最終行に以下の記述を追加。
>　-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
>　(Windows 以外の場合は後述の Eclipse 起動オプション参照）
>```

上記の中でjarの場所を設定しているのですが、私の環境だと以下の様に絶対パスで記述しないとエラーになってしまいます。

```text:
-javaagent:/home/User/opt/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
```

eclipseを`/home/User/opt/`以下に置いていることに起因するかもしれませんが、他の環境でも起きるかもしれないのでお気をつけ下さい。
Swift をMacのターミナルから実行する

#### 1. インストールしたXcodeのDeveloperディレクトリのパスを確認

```bash
$ xcode-select --print-path

# => /Applications/Xcode.app/Contents/Developer
```

※ もしここで違うXcodeのパスが表示された場合は、以下のコマンドで修正可能。

```bash
# Xcode6.X.app の部分は適宜変えて下さい
$ sudo xcode-select --switch /Applications/Xcode6.X.app/Contents/Developer
```

#### 2. swift コマンドを使う

Yosemite の場合は今の状態で`swift`と打つだけで使用できる。
Mavericks の場合、`swift`コマンドは以下の場所にある。
`/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift`

なので、ターミナルで`swift`とうてばこのコマンドが呼ばれるように設定する。

私がよく使うのは`~/.bash_profile`なので、今回はこの方法で設定してみる。以下の行を追加。

```~/.bash_profile
alias swift='/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift'
```

再読み込み

```bash
$ source ~/.bash_profile
```

実行してみる

```bash 
$ swift
Welcome to Swift!  Type :help for assistance.
1>  
```

起動できた。終了は`Control + d`。
Windows環境のGitからタグを作成すると文字化けする

手短に

状態

* コミットメッセージは文字化けしない
* タグメッセージが文字化けする

要因

* fileencodingsが設定されていない

対策

* インストールしたGitフォルダにあるvimrcを編集(Git/share/vim/vimrc)
* TAG_EDITMSGを追記する


`autocmd BufReadPre COMMIT_EDITMSG,TAG_EDITMSG,git-rebase-todo setlocal fileencodings=utf-8`
Firebugが入っているとFirefoxの開発ツールが開かなくなることがあるらしい。

普段はChromeなのですが、
クロスブラウザのテストの一環で、Firefoxでゴニョゴニョしてた時に
開発ツールが開かなかったので、調べてみた。

こんなissueがfirebugの方であがっていた。

Disable default Firefox Developer Tools
https://code.google.com/p/fbug/issues/detail?id=7435

やっぱりぶつかることがあるっぽい。
firebug消したら動きました。

ちなみにfirebugを入れてるのはFirefoxの開発ツールのCookieとかの情報がまだまだ情報不足だから。
やっぱりGoogle Chromeのほうが便利だな。

（追記）
開発ツールが開くなるようになったらFirebugを入れなおせば、また共存できます。
もしかしたらFirebug無効にするだけでもいいのかも？
【Redshift】ログインしているユーザーの権限を確認する

```sql
select tablename, 
   HAS_TABLE_PRIVILEGE(tablename, 'select') as select,
   HAS_TABLE_PRIVILEGE(tablename, 'insert') as insert,
   HAS_TABLE_PRIVILEGE(tablename, 'update') as update,
   HAS_TABLE_PRIVILEGE(tablename, 'delete') as delete, 
   HAS_TABLE_PRIVILEGE(tablename, 'references') as references 
from pg_tables where schemaname='public' order by tablename;
```
FlexでListを使った時のマウスホイールの挙動制御　その2

[FlexでListを使った時のマウスホイールの挙動制御](http://qiita.com/imp954sti/items/72a98a2df43b312e6afb)
でかいたスクリプトだとChromeのFlashPlayerがPPAPIの場合に正しく動作しなかった。

そこでchromeの場合のみ違う方法でマウスホイールの挙動制御を行う

```as3:as3
// ブラウザのスクロールを有効にする(swfが非アクティブになった時）
ExternalInterface.call("browserScrollEnabled", true);
// ブラウザのスクロールを無効にする(swfがアクティブになった時)
ExternalInterface.call("browserScrollEnabled", false);

```

```js:javascript
// ブラウザがchromeかどうかの判定フラグ
var ua = navigator.userAgent.toLowerCase();
var isChrome = ua.indexOf('chrome') != -1 && ua.indexOf('opr') == -1;
// ブラウザのスクロール有効フラグ
var browserScroll = true;

init();

/**
 * 初期化処理
 */
function init(){
	alert(navigator.userAgent.toLowerCase());
	if(!isChrome){
		if(window.addEventListener){
			alert("addEventListener")
			window.addEventListener('DOMMouseScroll', mouseScroll, false);
		}else if(window.attachEvent){
			window.attachEvent('onmousewheel', mouseScroll);
		}
		window.onmousewheel = mouseScroll;
		document.onmousewheel = mouseScroll;
	}else{
		alert("init isChrome = " + isChrome);
	}
}

/**
 * DOMMouseScrollイベント
 * @param event
 */
function mouseScroll(event){
	if(!browserScroll){
		// ブラウザのスクロールを無効化する
		if(!event){
			event = window.event;
		}
		if(event.preventDefault){
			event.preventDefault();
		}
		event.returnValue = false;
	}
}

/**
 * ブラウザスクロールを有効にする
 * @param flg true:ブラウザスクロール有効 false:ブラウザスクロール無効
 */
function browserScrollEnabled(flg){
	if(isChrome){
		if(flg){
			document.documentElement.style.overflowY = "auto";
		}else{
			document.documentElement.style.overflowY = "hidden";
		}
	}else{
		browserScroll = flg;
	}
}
```
Herokuのコマンドメモ

よく使うコマンドを自分用にメモメモ

##Heroku CLIのインストール

事前に https://toolbelt.heroku.com/ からHerokuのCLIをダウンロードしておく。


##各コマンド


###ヘルプ(実はこれだけで充分)


```
heroku help
heroku help [COMMAND] # heroku help addons　など
```


###アプリのデプロイ

```
cd YOUR_APP_DIR # git管理前提
heroku create --app APP_NAME # 初回のみ
git push heroku master
```


###アプリ再起動

```
heroku restart --app APP_NAME
```

###ログ確認

```
heroku logs --tail
```

###コマンド実行

```
heroku run [Command]  # heroku run 'node -v'　など
```

###デプロイ先にログイン

```
heroku run bash
```

###環境変数

```
heroku config # 一覧表示
heroku config:set KEY=VALUE # 値をセット
heroku config:add KEY=VALUE # config:setと同じ
heroku config:get KEY # 値をゲット
heroku config:remove KEY # 値をクリア

```
Swiftでsubviewsを全て削除する

addSubviewしたviewを削除するには、親viewから一括して削除する方法はなく、subviewからremoveFromSuperview()する必要があるようです。

```swift
func removeAllSubviews(parentView: UIView){
    var subviews = parentView.subviews
    for subview in subviews {
        subview.removeFromSuperview()
    }
}
```
このように、subviewsをforeachで回して消していくことができました。


※ただし状況によってですが、数が固定しているviewの内容が更新されるような場合には、viewの削除→再追加ではなく、view自体の値を書き換える方が効率的です。
OpenCVその２

http://docs.opencv.org/trunk/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html

そのままですが前提.
gcc,OpenCV,CMakeインストール済み。

ステップ
1.DisplayImage.cpp
2.CMake file CMakeLists.txt
3.cmake make
4.Run

Using OpenCV with gcc and CMake
Note We assume that you have successfully installed OpenCV in your workstation.
The easiest way of using OpenCV in your code is to use CMake. A few advantages (taken from the Wiki):
No need to change anything when porting between Linux and Windows
Can easily be combined with other tools by CMake( i.e. Qt, ITK and VTK )
If you are not familiar with CMake, checkout the tutorial on its website.
Steps

Create a program using OpenCV
Let’s use a simple program such as Mycamera.cpp shown below.

元記事を明確にしたら、追記しておきます。
ここでした。http://opencv.jp/cookbook/opencv_io.html#id6

```cpp:Mycamera.cpp
//Mycamera.cpp
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;

int main(int argc, char *argv[]) {
  VideoCapture cap(0);
  cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
  cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
  if (!cap.isOpened()) return -1;

  namedWindow("Capture", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
  for(;;) {
    Mat frame;
    cap >> frame;
    // write image processing here ...
    imshow("Capture", frame);
    if (waitKey(30) >= 0) {
      break;
    }
  }
  return 0;
}
```

Create a CMake file
Now you have to create your CMakeLists.txt file. It should look like this:

```CMakeLists.txt
cmake_minimum_required (VERSION 2.6)

project( Mycamera )
find_package( OpenCV REQUIRED )
add_executable( Mycamera Mycamera.cpp ) 
target_link_libraries( Mycamera ${OpenCV_LIBS} )
```

Generate the executable
This part is easy, just proceed as with any other project using CMake:

```

CMakeの参考。http://qiita.com/janus_wel/items/a673793d448c72cbc95e

cd <Mycamera_directory>
cmake .
make
```
Result
You should get a nice window as the one shown below:
画像のセーブも出来ました。おっさんでごめん。
![01.png](https://qiita-image-store.s3.amazonaws.com/0/33317/abab6d89-bc83-1719-5b3f-5e1739cd688b.png "01.png")
なんかやばいらしいのでgitのバージョン上げる


https://github.com/blog/1938-vulnerability-announced-update-your-git-clients
やばいらしいのでバージョン上げる

ちょっと詰まったのでメモ
せっかくなのでhomebrewで上げる

まずアップデート

```
$ brew update
error: Your local changes to the following files would be overwritten by merge:
	Library/Formula/go.rb
Please, commit your changes or stash them before you can merge.
Aborting
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
```

こけた

```
$ cd /usr/local/Library/Formula
$ git reset --hard FETCH_HEAD
$ brew update
```
これでOK

```
$ brew upgrade git
==> Upgrading 1 outdated package, with result:
git 2.2.1
==> Upgrading git
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/git-2.2.1.mavericks.bottle.tar.gz
######################################################################## 100.0%
==> Pouring git-2.2.1.mavericks.bottle.tar.gz
==> Caveats
The OS X keychain credential helper has been installed to:
  /usr/local/bin/git-credential-osxkeychain

The "contrib" directory has been installed to:
  /usr/local/share/git-core/contrib

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completion has been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
  /usr/local/Cellar/git/2.2.1: 1356 files, 31M
```

OK

```
$ git --version
git version 1.9.3 (Apple Git-50)
```

パスがbrewの方をみてない
/etc/pathsをいじってbrewでインストールした方を優先させるようにする
/usr/local/binを一番上に持ってくる

```
$ cat /etc/paths
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
```

ターミナル再起動して確認

```
$ git --version
git version 2.2.1
```

OK
Yosemite(OSX 10.10.2)でGoogle Chromeがクラッシュするのをパッチを当てて回避したい



まず、パッチファイルを作る。

```objective-c:$HOME/Desktop/patch.m
#import <AppKit/AppKit.h>

__attribute((constructor)) void Patch_10_10_2_entry()
{
NSLog(@"10.10.2 patch loaded");
}

@interface NSTouch ()
- (id)_initWithPreviousTouch:(NSTouch *)touch newPhase:(NSTouchPhase)phase position:(CGPoint)position     isResting:(BOOL)isResting force:(double)force;
@end

@implementation NSTouch (Patch_10_10_2)
- (id)_initWithPreviousTouch:(NSTouch *)touch newPhase:(NSTouchPhase)phase position:(CGPoint)position     isResting:(BOOL)isResting
{
return [self _initWithPreviousTouch:touch newPhase:phase position:position isResting:isResting force:0];
}
@end


```

つぎに、コンパイルする。

```console
$ clang -dynamiclib -framework AppKit $HOME/Desktop/patch.m -o $HOME/Desktop/patch.dylib
```

ターミナルからChromeを立ち上げる。

```console
$ env DYLD_INSERT_LIBRARIES=$HOME/Desktop/patch.dylib  "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
```

以上。

ターミナルを閉じなければChromeがクラッシュせずに使うことができる。Tipsとして、tmuxのセッションの中で起動しておくといいかも。tmuxならターミナルのタブを閉じてもChromeが生き続ける。



Chromiumでは直ってるかなと思ってChromiumを入れてみたが改善せず。やはり、パッチを当ててターミナルから起動する運用をしばらくせざるを得ないようだ。


参考: [Google Chrome crashes hard with Mac OS 10.10.2 beta, here’s the fix | 9to5Mac](http://9to5mac.com/2014/11/30/google-chrome-crashes-hard-with-mac-os-10-10-2-beta-heres-the-fix/)
Xcode6で「.xibファイル」+「自作UIViewクラス」で、汎用できるViewを作りたい

# 今日の結論
ソースコード内で汎用できるViewを、xib+自作UIViewクラスで作ったとき、
Outletを置く時は、Objectに「"File's Owner"でなく、**自作UIViewクラス**」を指定する

# 経緯
久しくiOS開発をやっていなかったということもあり、
xibファイル+自作UIViewクラスで作成する方法に戸惑いましたので
手順をここに記載します。

# 環境
|  |  |
|:-----------|:------------|
|MacOS|YOSEMITE 10.10.1|
|Xcode|6.1.1|
|言語|Swift|

# カスタムViewを作る手順
## (手順1) .swiftファイルと、.xibファイルを作成する
- CustomView.swift

![create uiView.png](https://qiita-image-store.s3.amazonaws.com/0/61953/1a0e3768-cdd6-02fa-c197-31749f49a25a.png)
[Next] -> "Class:"に任意クラス名、"Subclass os:"に"UIView"を指定 -> [Next] -> [Create] 

- CustomView.xib

![MyDailogView_xib.png](https://qiita-image-store.s3.amazonaws.com/0/61953/595fa47e-049a-44f7-6a6e-c8cc3de88195.png)
任意クラス名を指定して、ファイルを作成する

<br><br>![CustomView.png](https://qiita-image-store.s3.amazonaws.com/0/61953/e5063da5-1706-c0ae-2a0b-b75c96c24184.png)
↑こんな感じに作成できればOK
## （手順2） CustomView.swiftファイル編集

例えばこんな感じ↓

```swift
import UIKit

class CustomView : UIView {

    class func instance() -> CustomView {
        return UINib(nibName: "CustomView", bundle: nil).instantiateWithOwner(self, options: nil)[0] as CustomView
    }

}
```
(参考)
http://qiita.com/ryota-ku/items/3e3485baed79842c51f2
http://blogios.stack3.net/archives/195

## （手順3）xibファイルのCustomClassを設定する

1. `PlaceHolders`の`File's Owner`の`Custom Class`を
作成したViewファイル名（ここでは"CustomView"）に変更する。

![customclass1.png](https://qiita-image-store.s3.amazonaws.com/0/61953/1603e120-cfd2-3f36-21bf-4ce49ff6035c.png)


1. `設置されている最上位View`の`Custom Class`を 
作成したViewファイル名（ここでは"CustomView"）に変更する。

![CustomClass2.png](https://qiita-image-store.s3.amazonaws.com/0/61953/c41acc1b-e216-6f2c-3fa7-be48793dd3d5.png)



## （手順4）ViewのOutletを作成する
作者はここで不毛な2時間を過ごした。

1. Outletを作成したいViewを.swiftファイルに引っ張ってくる（できなかったら手順3の設定を見直す）
1. Objectに**"Custom View（自分が作成したカスタムViewクラス）"**を指定する。
<br>
=>"File's Owner"を指定した場合、このカスタムViewを呼び出す処理でNSExceptionが発生してアプリが終了してしまう。

![Outlet.png](https://qiita-image-store.s3.amazonaws.com/0/61953/bd1bca40-719d-c70a-d7eb-b982d3407ce6.png)

<br>↓↓↓↓↓↓できた！！↓↓↓↓↓↓↓
![20141219104117.png](https://qiita-image-store.s3.amazonaws.com/0/61953/e66fee0a-8f03-65b3-f6f4-b03808d60453.png)

作者は、ここで3時間程、立ち止まりました（恥）

## （手順5）ViewController等からカスタムViewを呼び出す。
各々使用したいところで、`CustomView.instance()`でカスタムViewを生成する。

```swift
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        self.view.addSubview(CustomView.instance())
    }
```

# 最後に
iOS不明点が多い。Swiftもいろいろわからないです。
現状の知識で、なぜFile's OwnerではNSExceptionが発生するのか、説明できない。`Placeholders`？ `File's Owner`？ `FirstResponder`？  少しずつ頑張ります。
・・・AutoLayoutとかも謎なので、勉強したい。
CSVファイルを1行づつの読み込みます

CSVのファイルをShift-JISで読み込みます。
今回の読み込み方法はStreamReaderを使って読み込みたいと思います。。
StreamReaderは特定のエンコードで文字を入力する際に使用します。
文字コードはCSVのためshit-JISになります。

```csharp
StreamReader csvText = new StreamReader(csvPath, 
Encoding.GetEncoding("Shift-JIS")); //文字コードを設定してCSVファイルの読み込み
ArrayList lineCsv = new ArrayList();
string csvTextLine = csvText.ReadLine();
while (csvTextLine != null)
{
lineCsv.Add(csvTextLine);
csvTextLine = csvText.ReadLine();
}
```

ArrayListで動的な配列を行います。
ReadLineでテキストの1行づつ読み込みます。
それぞれを、再度配列"csvTextLine"に追加していきます。
そして、さらに動的な配列lineCsvに加えて行きます。
Rails4の画像の置き場所について

Railsの「***.html.erb」ファイルから画像を呼び出しをする場合、その画像置き場所には、２つ使われています。

１つ目は、app/assets/imagesです。
その場合、画像の呼び出し方は以下のようになります。

```lang:***.html.erb
<%= image_tag 'test.jpg' %>
```
ファイル名でそのまま呼び出すだけで、デフォルトでassete/images/test.jpgと配置されるようになっています。

2つ目は、public/です。
その場合、画像の呼び出し方は以下のようになります。

```lang:***.html.erb
<%= image_tag '/test.jpg' %>
```
/(スラッシュ)をつけただけで、指定配置場所がpublic/test.jpgとなってしまうんですね。app/assets/images/***/test.jpgの指定にならないということを意識しておいた方が良さそうです。
【GM】GoogleMapで検索した住所等の緯度経度を知りたい

#緯度経度を知る方法

##右クリックする方法

グーグルマップ上で緯度・経度を知りたい場所で右クリックをして、「この場所について」を選択すると、下に緯度・経度が表示されます。

URLから知る方法ありますが、右クリックがお勧め。

##URLから判断する方法

ウェブの仕組みを知ってる方からすれば、見ればわかるよって話ですが、
GoogleMapで住所等を検索すると、URLに緯度経度が表示されてます。

例えば「東京都千代田区千代田１−１」と検索するとURLに 35.6838512,139.7539732 と表示されます。
カンマ区切りで緯度経度が表示されます。

![googlemap.jpg](https://qiita-image-store.s3.amazonaws.com/0/42231/1d7e087e-36db-122b-eb62-692cdaf75637.jpeg)

URLに表示される緯度経度は10進法表記になるそうです。

下記のサイトでは、住所を入力すると10進法と60進法の両方で緯度経度を表示してくれます。

[Googleマップで緯度・経度を求める （拡張版）](http://user.numazu-ct.ac.jp/~tsato/webmap/sphere/coordinates/advanced.html)
超手軽にランダムウォークを鑑賞するGem作ったヨ！

# あいさつ

まあ本当にたまになんですけども、適当な確率過程の遷移をふと鑑賞したい時って絶対あると思うんですよ、

特に疲れているとかは単純マルコフ過程で癒されたいみたいなは割とネタじゃなくてオススメです.


[![Gyazo](http://i.gyazo.com/73ec9ff893e88a3893fe07bb6793d2b8.gif)](http://gyazo.com/73ec9ff893e88a3893fe07bb6793d2b8)


なんか癒されるのは遷移が画する軌道がその時の状態にしか依らないので比較的頭を使わないで済むからですかね.

個人的にはなんかめっちゃ気に入っていて毎日5, 6回は鑑賞しています.

乱択には単純にRubyの`Array#sample`を使っているので、ちょっとアレですがとにかく簡単にランダムウォーク鑑賞出来ます.

# 5秒で完了！

ランダムウォークの描画まではたった２コマンドで到達出来る.
(Ruby環境があればね）

    $ gem install enjoy_markov

    $ enjoy_markov


コマンドラインの縦を離散時間、横を離散マルコフの累積値にとった確率過程の試行が描画されます.

# オプション

オプションは２つあります.

    $ enjoy_markov -r 30 -s 0.03
    $ enjoy_markov -s 0.1
    $ enjoy_markov -r 40


-r ... ランダムウォークが終了する上下限の絶対値. Defalut: 20

-s ... 各試行の間に挟まれるsleep時間. Defalut: 0.05


上下限に達するとこうなります:

![Screenshot 2014-12-18 13.57.36.png](https://qiita-image-store.s3.amazonaws.com/0/30440/74e775cf-8f40-0ca0-f53d-7149e3773ef4.png)


README.mdも貼っておきます.

https://github.com/gogotanaka/enjoy_markov/blob/master/README.md

# Feature works

Gem名 が`Enjoy Markov` である事からも分かる通り、マルコフ過程全体を扱いたいと思っています.

後、遷移確率コントロールしたり、期待値や分散も取り扱えたりしたら面白そーと思っています.

描画の仕方とか色々考えなきゃいけない事はありそうですが、PR頂ければ大体マージします.
IE対応バージョンベクタ

IEへのブラウザ対応は、大変ですよね。

以下のコードを<html>タグの頭につけることでブラウザを識別し、jsなどの読み込みを条件分岐させられるようです。

参考:http://dtp.jdash.info/archives/51946101.html

```lang:filename
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
```
Management Consoleのアクセス制御（IP制限）


ネタとしては既知すぎるかも知れませんが、個人的なメモとして記録しておきます。

Console自体へのアクセス制御はできませんが、ログインした後の各サービスに対する操作に対しては、
IAMのUser-PolicyでIP制限がかけられます。

```json:Policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "*",
      "Resource": "*"
    },
    {
      "Sid": "SourceIPRestriction",
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "xxx.xxx.xxx.xxx/32",
            "xxx.xxx.xxx.xxx/32",
            "xxx.xxx.xxx.xxx/32"
            ]
        }
      }
    }
  ]
}
```

当たり前ですが、SourceIpはCIDRレンジで設定できます。
また、ユーザ毎にこの設定を行うのは面倒なので、GroupのPolicyとして設定するのもお忘れなく!!
これもまた当たり前ですが…
リアル脱出ゲームのクリエイティブ

http://www.marble-co.net/portfolio/

ポスターとかサイトのデザインがいちいちかっこいいと思ってたんだけど
ここが作っているみたい![img01.jpg](https://qiita-image-store.s3.amazonaws.com/0/63458/e814f1dd-8bae-986f-cc94-55bbd9a64211.jpeg)
【FileMaker】開発時の履歴を管理したい


誰か教えてください。

っていうくらい、開発時の履歴を残す方法がほとんど提供されていないFileMakerです。
どんだけがんばってGoogle様にお願いしても出てきません。

FileMakerの開発は、開発機能を分散して寄ってたかってプログラムをみんなで作るというよりは、一人の人が全てを作り上げていき、引き継ぎ資料もない環境が多いです。

そう。

**FMファイルが無言の仕様書。**

そう。

**今あるFMファイルが最新。**

過去のことは知ったこっちゃないのです。

いいんだけど、今日自分がどこまで実装できたかを確認する手立てがないのが痛い。（→どんだけ自分にご褒美をあげればいいのかわからない）
進捗報告するのにいちいち動かしてみないとわからない。
自分の頭をひっくり返さないとわからない。

FM以外の人＞そんなの昨日の分と今日の分の差分を比べればいいじゃない。


**それができれば苦労はしないのよ！**

ということで、FileMakerの開発時における履歴管理ツール、絶賛募集中です。

あぁ、締まらない。
Github Flowの概要をまとめてみた

#Github Flowとは？
GithubFlowは、いつでもデプロイ可能な１つの「masterブランチ」とmasterブランチからcloneされた開発トピックごとに作られる「開発ブランチ」の２種類からなる。特徴は、こまめな２種類のブランチしか無いといううシンプルさと、こまめなアップデートとデプロイができるということである。似たものにGitFlowという考え方があるが、それよりもよりシンプルなものである。

参考①https://gist.github.com/Gab-km/3705015
参考②http://www.atmarkit.co.jp/ait/articles/1401/21/news042.html
参考③http://qiita.com/tbpgr/items/4ff76ef35c4ff0ec8314


#登場人物
![10859823_738387232921800_1092914650_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/48577/945918ba-e61d-6341-fb9e-9ac550ff74ee.jpeg)


#ブランチの動き
![10863608_738387219588468_2124964559_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/48577/8fb80ccc-88e4-080c-8c94-e6b89abf13e8.jpeg)
※開発ブランチは同時に複数ありうる
![10853910_738387236255133_150382097_o.jpg](https://qiita-image-store.s3.amazonaws.com/0/48577/f10ae351-b985-b25b-f25c-f7d17bdc721d.jpeg)



#開発の流れ
①clone
masterブランチをcloneし開発トピックが理解できるタイトルで開発ブランチを作成する

②commit
ローカルでこまめにcommitする

③push
リモートの同じ名前のブランチにも定期的にPushする

④PullRequest
Mergeしてほしいときや助言してほしいときには、PullRequestを送る
※助言してほしいときのPull Requestには、WIPとタイトルの頭につける。質問をするときにはメンションを送ることも出来る。

⑤Merge&Deploy
レビューに他の開発者からOKがでればmasterブランチにMergeし、ただちにデプロイする。Pull Requestはここでcloseする。

#追記
基本形は、masterブランチと開発ブランチの２種類からなるが、いきなりmasterブランチにmergeするのはちょっと・・という場合には、動作確認用のステージングブランチを作るなど、自分たちのプロジェクトごとに工夫していくのが良いかもしれません。
Galaxyとかがなんか画面の縦サイズ小さい件

drawableとかの後ろにつける文字列って、実は結構色々種類あるんだけど、
http://developer.android.com/guide/topics/resources/providing-resources.html

「navexposed」「navhidden」っていうのが、もしかしたら、
Galaxyとか、一部の端末で、液晶の下の方ちょっと陣取ってバックキーとか表示させてるじゃない。
アレのせいで、「drawable-xhpi-720x1280」とか書いても、反応しないんだよね。
もしかして、「drawable-xhpi-navexposed」とかって書けばいいんだろうか、と、思ったり。

まぁ、最近、横幅が320dipの端末なんてほとんどなさそうだから別にいいのかもだけど。
後で色々検証してみよう。
slackからAWS SNS経由でpush通知を送る

誰でも簡単にpush通知が送れるようになったら良いかと思いslackとhubotでAWS SNSを操作してみた。
SNSでAppの登録とEndpointが登録されていることが前提。

### AppからEndpointを取り出して新規Topicに入れる
* slcakからは```hubot sns create```とかで作れるようにする

```js
AWS = require('aws-sdk')
AWS.config.region = 'ap-northeast-1'
sns = new AWS.SNS()
platformApplicationArn = 'arn:aws:sns:ap-northeast-1:xxx:xxx'

module.exports = (robot) ->
  Date::format = ->
    "#{@.getFullYear()}#{@.getMonth() + 1}#{@.getDate()}#{@.getHours()}#{@.getMinutes()}#{@.getSeconds()}"

  subscribe = (topicArn, endpointArn) ->
    sns.subscribe({TopicArn: topicArn, Protocol: 'application', Endpoint: endpointArn}, (err, data) ->
      if err
        console.log(err, err.stack)
      else
        console.log(data)
    )

  robot.respond /\s+(?:sns)\s+create\s*/i, (msg) ->
    # topicを作ったのが誰だか分かるようにした
    topicName = "push-notifications-topic-#{msg.message.user.name}-#{new Date().format()}"
    sns.createTopic({Name: topicName}, (err, data) ->
      if err
        console.log(err, err.stack)
        msg.send err
        return
      else
        topicArn = data.TopicArn
        sns.listEndpointsByPlatformApplication({PlatformApplicationArn: platformApplicationArn}).eachPage((err, data) ->
          if err
            console.log(err, err.stack)
            msg.send err
          else if !data
            msg.send "create success\n```\n#{topicArn}\n```"
          else
            for endpoint in data.Endpoints
              # 無効なトークンは除外
              continue if endpoint.Attributes.Enabled == 'false'
              subscribe(topicArn, endpoint.EndpointArn)
        )
    )
```

### 作成したTopicに対してpush通知を送る
* slcakからは```hubot sns push <topicArn> <message>```とかで送れるようにする
* topicArnは上で作った(botが返す値)を入れる
* 送信し終わったTopicは削除しておく

```js
  robot.respond /\s+sns\s+push\s+(\S+)\s+[\'|\"]?(.+?)[\"|\']?$/i, (msg) ->
    # topicArnを簡易チェック(自分が作ったTopicしか操作出来ないようにした)
    if ! ///push-notifications-topic-#{msg.message.user.name}-///i.test(msg.match[1])
      msg.send "error: topicArn(#{msg.match[1]})"
      return
    topicArn = msg.match[1]
    params = {
      TopicArn: topicArn,
      Message: msg.match[2]
    }
    sns.publish(params, (err, data) ->
      if err
        console.log(err, err.stack)
        msg.send err
      else
        message_id = data.MessageId
        sns.deleteTopic({TopicArn: topicArn}, (err, data) ->
          if err
            console.log(err, err.stack)
            msg.send err
          else
            msg.send "push success\n```\n#{message_id}\n```"
        )
    )
```
GoogleMapで表示されている地図の範囲を表示する

画面に表示されている地図がどの範囲まで表示されているかを取得するサンプルです。

[Google Maps JavaScript API v3](https://developers.google.com/maps/documentation/javascript/?hl=ja)を使っています。

## 画面サンプル
<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/n/nakaji999/20141219/20141219043926.png" alt="f:id:nakaji999:20141219043926p:plain" title="f:id:nakaji999:20141219043926p:plain" class="hatena-fotolife" itemprop="image"></span></p>

## コードサンプル
google.maps.Map クラスの bounds_changed を使用します。

``` html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>表示されている地図の範囲を表示する</title>
    <script src="scripts/jquery-1.10.2.js"></script>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
    <script>
        $(function () {
            google.maps.event.addDomListener(window, 'load', initialize);
            function initialize() {
                var myLatlng = new google.maps.LatLng(33.839193, 132.765563);
                var mapOptions = {
                    zoom: 15,
                    center: myLatlng
                }
                var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

                google.maps.event.addListener(map, 'bounds_changed', function () {
                    $("#addressList").val(
                        "北東:" + map.getBounds().getNorthEast().lat() + "," + map.getBounds().getNorthEast().lng() + "\r\n" +
                        "南西:" + map.getBounds().getSouthWest().lat() + "," + map.getBounds().getSouthWest().lng()
                        );
                });
            }
        });
    </script>
</head>
<body>
    <h1>表示されている地図の範囲を表示する</h1>
    <textarea style="width: 100%; height: 50px;" id="addressList"></textarea>
    <div id="map-canvas" style="height: 250px;width: 500px;margin: 20px;padding: 20px;"></div>
</body>
</html>
```
linux + usb-flash で biosアップデート

usbフラッシュドライブをブータブルにして freeDOS (DOS完全互換) をインストール、
そこからBIOSをアップデートする。
(いや、一応USBのフロッピードライブはまだ持ってるんだけどサ・・・)

下のリンクが死ぬほどまとまっていて、もはや記事を書くまでもないという感じ。
もはや、解凍してbunzipしてdd if=XXX.img of=/dev/sdX してディスクに書き込んだ後、
BIOSアップデータをコピーするだけ。

http://chtaube.eu/computers/freedos/bootable-usb/

はじめはarchwikiから調べ始め、
unetbootin から freeDOS syslinux isolinux とどんどん調べたが
結局 memdiskで読み込むイメージファイルにBIOSアップデータを追加するのが面倒くさく...
調べてたら上のサイトが出てきた。

近々訳すかもしれないけど、訳すほどのものもないなあ。。。
制約こそが力

## フルスタック

GitHub, Composer, Packagist ... これだけ疎結合の良質なコンポーネントが選択可能で[FIG](http://www.php-fig.org/)などのインターオペラビリティ（相互運用）が整って来ている時代に全てを提供する「フルスタックフレームワーク」の価値は何にあるのか、本質的なものが問われる時代が来るのではと考えています。

[設定より規約](http://ja.wikipedia.org/wiki/%E8%A8%AD%E5%AE%9A%E3%82%88%E3%82%8A%E8%A6%8F%E7%B4%84)でオブジェクト間の関係もハードコードしてある密結合のシステムではフルスタックは**必須**で機能します。「早く簡単に」つくれる事は素晴らしいことで価値があります。しかし一般にこれらはRAD（早期プロトタイピング）のためのフレームワークです。本来は短期的な問題をうまく解決するようにつくられたアーキテクチャです。

しかし例えば、[60/60ルール](http://d.hatena.ne.jp/asakichy/20120420/1334872770)のように変更可能性や保守性をより重視することを考えたらどうでしょうか。疎結合で相互運用性が高いシステムにとって、フルスタックの意味はどのようなものになっていくでしょうか。

## アプリケーション制約

**アプリケーション制約**としてのフルスタックはどうでしょうか。アプリケーションが使用するコンポーネント一式をオールインワンパッケージとして提供してやり、それらをセットで使ってもらうことでアプリケーションに制約が生まれます。

## ノースタック

BEAR.Sundayはこのようにオールインワンのライブラリを提供することでアプリケーション制約を提供していません。

変わりにオブジェクト間の関係や横断的関心に**DIP**や**AOD**といった制約を設けています。情報を単なる値として取り扱うのではなく、リソースとして**ハイパーメディア制約**を設けています。

## 制約 as a power

ソフトウエアに真の力を与えるのは適切な制約だと考えます。PHPの言語としての進化もそうです。PHP4では`public`しかなかったメソッドの修飾子に`private`と`protected`が加わりました。スタティックメソッドは嫌われ、どこからでもアクセスできるグローバルなシングルトンも多くのフレームワークでは利用できなりました。

何か出来なったものが出来るようになってる訳ではないのです。**できなく**なっているのです。しかしそれらは**適切な制約**として機能し、短期的な問題より長期的な問題により良く対処します。

アプリケーション制約をフレームワークとして考えると、フレームワーク設計というのはアプリケーション制約の設計に他ならないと考えます。
node v0.10.34 で CERT_UNTRUSTED のエラーが発生する


Heroku で Hubot を動かしている方とかで、今日(2014/12/18)急に bot が動かなくなった方は、エラーログの中に下記のエラーが出力されているかもしれません。

```
CERT_UNTRUSTED
```

どうやら 2014/12/17 頃から node v0.10.34 で問題が発生しているようで、下記の Github Issues に既に報告されていました。ルート証明書を更新したことによる不具合のようです。

[node v0.10.34 causes untrusted cert errors](https://github.com/joyent/node/issues/8894)

下記のコマンドで、 Heroku にログインして node の version を確認してみましょう。

```sh
// Heroku ログイン
$ heroku run bash

// node バージョン確認
$ node -v
=> 0.10.34
```

上記のように、0.10.34 に上がってしまっている場合、バージョンを前の状態に戻したいと思うかもしれません。その時は、heroku 用のリポジトリ直下に配置している package.json の node の値を **0.10.x** から **0.10.33(戻したいバージョン)** に修正しましょう。

```json
{
  "name": "TechTaro",
  "version": "0.0.0",
  "private": true,
  "author": "ken880guchi <>",
  "description": "A simple helpful robot for your Company",
  "dependencies": {
    "hubot": "^2.9.0",
    "hubot-diagnostics": "0.0.1",
    "hubot-google-images": "^0.1.0",
    "hubot-google-translate": "^0.1.0",
    "hubot-help": "^0.1.1",
    "hubot-heroku-keepalive": "0.0.4",
    "hubot-maps": "0.0.0",
    "hubot-pugme": "^0.1.0",
    "hubot-redis-brain": "0.0.2",
    "hubot-rules": "^0.1.0",
    "hubot-scripts": "^2.5.16",
    "hubot-shipit": "^0.1.1",
    "hubot-slack": "^2.2.0",
    "hubot-youtube": "^0.1.2"
  },
  "engines": {
    "node": "0.10.33"
  }
}
```

続けて下記のコマンドを実行すれば、node の version を過去の状態へ戻すことが出来ます。

```sh
// 編集した package.json を commit
$ git add package.json
$ git ci -m '[Fix] temporarily fix version to 0.10.33'

// 変更内容を heroku へ push
$ git push heroku master
=> Fetching repository, done.

Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 286 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)

-> Node.js app detected
-> Resetting git environment
-> Requested node range:  0.10.33
-> Resolved node version: 0.10.33
-> Downloading and installing node

...(省略)

```
iOS8 ではデバイスに対して固定の座標値を得る方法が変わった

UICoordinateSpace プロトコルの記述によれば、
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UICoordinateSpace_protocol/index.html

Window と Screen の座標系原点は、iOS7 まではデバイスをポートレートにした時の左上に固定されていたが、iOS8 からはユーザーから見て常に左上になるように UI の回転に合わせて移動するようになったとのこと。（言い換えると、iOS7 までは Window と Screen はデバイスに固定で View がその中で回転していたが、iOS8からはScreen 自体がデバイスに対して回転するようになった。）

このため、iOS7までは

    CGPoint in_window = [view convertPoint:point toView:nil];
    CGPoint in_screen = [view.window convertPoint:in_window toWindow:nil];

とすると、UI の向きによらずデバイスに対して固定した座標値になりましたが、iOS8 からはこのコードでは向きに依存した値になってしまいます。

iOS8 以降では、新設された API を使って

    CGPoint in_screen = [view convertPoint:input toCoordinateSpace:view.window.screen.fixedCoordinateSpace];

とするとのこと。API には次のようなバリエーションが有ります。

    convertPoint:toCoordinateSpace:
    convertPoint:fromCoordinateSpace:
    convertRect:toCoordinateSpace:
    convertRect:fromCoordinateSpace:

（View は UICoordinateSpace プロトコルを実装しているので、View はこのメッセージのレシーバーにも引数にも対照的に使えるのが少しトリッキー。でも美しい。）


参考：
http://stackoverflow.com/questions/24150359/is-uiscreen-mainscreen-bounds-size-becoming-orientation-dependent-in-ios8
https://developer.apple.com/videos/wwdc/2014/#214
Windows7でF8キーを使わないセーフモードの起動方法

# はじめに

Windows7であるファイルを弄りたいと思った。
念のためセーフモードを起動させたいと思いたち、検索するとごまんと出てくるのはF8キーをWindows立ち上げ前に連打する、というものである。
そんな中、キーボードの種類によっては(あるいはBIOSの種類によっては)Windows起動前にキー入力が受け付けられないことがある。
筆者がまさにそうで、解決方法を探ったので共有(備忘録)しようと思った次第である。

# セーフモードで起動するようにする

Windowsキー→検索窓(もしくは<Win>+Rキー同時押し)から`msconfig.exe`と入力

![boot.png](https://qiita-image-store.s3.amazonaws.com/0/39318/66d7dc4e-46d0-1d95-468c-087ae96a4664.png)

するとこんなかんじで出てくるので、セーフブートにチェックを入れてOK→再起動
するとあら不思議セーフモードで起動できます。
TeX で章立ての表記を変える方法


論文をまとめる時期になりまして，5年ぶりくらいにTeXを触っている @isseium です．

第n章と表示したいのですが，スタイルによっては，n （数字だけ）ということもあるでしょう．
そんなときは，プリアンブルにこんな感じで記入します．

```
\renewcommand{\thesection}{第\arabic{section}章}
```
【解答例】Haskell リストモナド 超入門

[Haskell リストモナド 超入門](http://qiita.com/7shi/items/deb19c4cba933590ffbf)の解答例です。

# リストの作成

【問1】`return`を使って`[1, 2, 3]`を作ってください。

```hs
main = do
    print $ 1 : 2 : return 3
```
```text:実行結果
[1,2,3]
```

# 型クラス制約

【問2】次に示す関数`join`の型から仕様を推定して、コードで検証してください。

二重にネストしたモナドを一重にします。

```hs
import Control.Monad

main = print $ join [[1, 2], [3]]
```
```text:実行結果
[1,2,3]
```

# ループ

【問3】次のコードを`join`と`forM`で書き替えてください。

```hs
import Control.Monad

main = do
    print $ join $ join $
        forM [1..3] $ \x ->
            forM "abc" $ \y ->
                return (x, y)
```
```text:実行結果
[(1,'a'),(1,'b'),(1,'c'),(2,'a'),(2,'b'),(2,'c'),(3,'a'),(3,'b'),(3,'c')]
```

# 再実装

【問4】リストモナドを扱う`bind`と`return'`を実装してください。`bind`には`foldr`を使ってください。

```hs
bind xs f = foldr ((++) . f) [] xs
return' x = [x]

main = do
    print $ [1..3] `bind` \x -> "abc" `bind` \y -> return' (x, y)
```
```text:実行結果
[(1,'a'),(1,'b'),(1,'c'),(2,'a'),(2,'b'),(2,'c'),(3,'a'),(3,'b'),(3,'c')]
```

# リスト内包表記

## 書き換え

【問5】次のリスト内包表記を`do`で書き換えてください。

```hs
main = do
    print $ do
        x <- [1..5]
        y <- [1..5]
        if x + y == 6
            then return (x, y)
            else []
```
```text:実行結果
[(1,5),(2,4),(3,3),(4,2),(5,1)]
```

## テスト

【問6】問5のコードを問4で実装した`bind`と`return'`に対応させてテストしてください。

```hs
bind xs f = foldr ((++) . f) [] xs
return' x = [x]

main = do
    print $ do
        [1..5] `bind` \x -> [1..5] `bind` \y ->
            if x + y == 6 then return' (x, y) else []
```
```text:実行結果
[(1,5),(2,4),(3,3),(4,2),(5,1)]
```
Android Intent逆引き辞書

よく使うやつをまとめました。

## 指定したURLをタイトル付きでシェアする

```java
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TITLE, title);
intent.putExtra(Intent.EXTRA_TEXT, url);
startActivity(Intent.createChooser(intent, chooserTitle);
```

## 指定したURLを外部ブラウザで開く

```java
Uri uri = Uri.parse(mUrl);
Intent i = new Intent(Intent.ACTION_VIEW,uri);
startActivity(i);
```

## 指定したアプリのGoogle Playを開く

```java
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=<アプリのパッケージ名>"));
startActivity(intent);
```

## 電話をかける

```java
Intent intent = new Intent(
    Intent.ACTION_CALL,
    Uri.parse("tel:" + phoneNumber));
    startActivity(intent);
```
GradleをZshで補完する


快適なAndroid(Studio)ライフを送りたい

# 内容

ZshでもGradleコマンドを補完出来るようにした

![gradle_zsh_complete.gif](https://qiita-image-store.s3.amazonaws.com/0/280/19ab9d9b-a5b8-8bad-5e2d-410e2234fe83.gif "gradle_zsh_complete.gif")

### 参考

[zsh補完関数を自作すると便利 - はこべブログ ♨](http://hakobe932.hatenablog.com/entry/2012/02/13/214934)

# 動機

[Android開発を爆速にする10のコマンドラインスクリプト - クックパッド開発者ブログ](http://techlife.cookpad.com/entry/2014/12/17/182050)
この記事でGradleにも補完があるのを知ったが、
紹介されていた[Gradle tab completion for Bash. Works on both Mac and Linux.](https://gist.github.com/nolanlawson/8694399)
を見るとBash用の補完関数だった...。

普段Zshを使っているので、Gradleを使う時だけBashを使うなんて嫌だしZsh用に移植したい

# コード

ほとんどは上のBash版と同じ

```sh:/path/to/_gradle
# refs: https://gist.github.com/nolanlawson/8694399 : bash-version
_gradle() {
  local cur="$1"
  local gradle_cmd='gradle'
  if [[ -x ./gradlew ]]; then
    gradle_cmd='./gradlew'
  fi
  if [[ -x ../gradlew ]]; then
    gradle_cmd='../gradlew'
  fi

  local completions=''
  local cache_dir="$HOME/.gradle_tabcompletion"
  mkdir -p $cache_dir

  local gradle_files_checksum='hoge';
  if [[ -f build.gradle ]]; then # top-level gradle file
    if [[ -x `which md5 2> /dev/null` ]]; then # mac
      local all_gradle_files="$(find . -name build.gradle 2>/dev/null)"
      gradle_files_checksum="$(md5 -q -s "${all_gradle_files}")"
    else # linux
      gradle_files_checksum="$(find . -name build.gradle | xargs md5sum | md5sum)"
    fi
  else # no top-level gradle file
    gradle_files_checksum='no_gradle_files'
  fi

  if [[ -f $cache_dir/$gradle_files_checksum ]]; then # cached! yay!
    completions=$(\cat $cache_dir/$gradle_files_checksum)
  else # not cached! boo-urns!
    completions=$($gradle_cmd --no-color --quiet tasks | grep --color=none ' - ' | awk '{print $1}' | tr '\n' ' ')
    if [[ ! -z $completions ]]; then
      echo $completions > $cache_dir/$gradle_files_checksum
    fi
  fi

  local -a commands
  commands=( "${(z)completions}" )
  compadd $commands
  return 1;
}

compdef _gradle gradle
compdef _gradle gradlew
compdef _gradle ./gradlew
```

[gist](https://gist.github.com/petitviolet/910c0b54b067405d0aa3)にも置いた
配列にして`compadd`すればいいっぽいことを学んだ
`#compdef gradle`とファイルの頭に書いてもいいが、`gradle`と`gradlew`と`./gradlew`に対応させられるかどうか検証するもの面倒だったのでこうした

### Bashの場合

上のリンクにあるBash用のやつ、コメントにもあるように

```
-    if [[ -x `which md5 2 > /dev/null` ]]; then # mac
+    if [[ -x `which md5 2> /dev/null` ]]; then # mac
```

と修正しないとBashでも動かないはず

# 使い方

このファイルは

```sh:~/.zshrc
source /path/to/_gradle
```

このように`~/.zshrc`にでも書いておけば読み込んでくれる

簡単にするならこれで試せるはず

```sh
curl -o </path/to/_gradle> https://gist.githubusercontent.com/petitviolet/910c0b54b067405d0aa3/raw/6cc95427f82f0673b6248de7e58ee6eb901099ff/_gradle
echo 'source </path/to/_gradle>` >> ~/.zshrc
```

なお、初回のみタスクの読み込みに時間がかかるが、2回目以降はファイルキャッシュを読み込むため比較的速くなる
choroplethr - Vignettes - h) コロプレス図の動画

Rのパッケージ`choroplethr`のビネットの翻訳です．
( 原文: http://cran.r-project.org/web/packages/choroplethr/index.html )

* a) [イントロダクション](http://qiita.com/nakamichi/items/23730349f31a377fb071)
* b) [アメリカの州単位コロプレス図](http://qiita.com/nakamichi/items/b8267674b610ef6e1cab)
* c) [アメリカの郡単位コロプレス図](http://qiita.com/nakamichi/items/2f63dcfb7b1cc407d87c)
* d) [アメリカの郵便番号に基づく地図](http://qiita.com/nakamichi/items/889d3883e9b2ff8e2cdf)
* e) [国家単位のコロプレス図](http://qiita.com/nakamichi/items/5090b4dadeed42c2e13c)
* f) [国勢調査の地図](http://qiita.com/nakamichi/items/de929da9335f96f6468c)
* g) [世界銀行データの地図](http://qiita.com/nakamichi/items/66fa782bb3104dd815bf)
* h) [コロプレス図の動画](http://qiita.com/nakamichi/items/02ca0f678933405cf18f)
* i) [自分の地図を作る](http://qiita.com/nakamichi/items/99ff93769f4f67b97d18)
* j) [行政区画レベル1の地図を作る](http://qiita.com/nakamichi/items/8fde40a12c6aca2abbd3)

----------

# h) コロプレス図の動画 #

コロプレス図の動画は地域ごとの値のがどのように時間変化するのかを理解するための有効な方法です．
アメリカ大統領選挙のコロプレス図について考えてみましょう．通常は，この図は各州が直近の大統領選挙でどのように投票したかを示すために使われます．しかし直近の選挙がその前の選挙と比較してどうなっているか理解したい場合にはどうでしょうか？あるいは，さらに前の選挙と比べたい場合はどうでしょう？このような場合には，コロプレス図の動画がデータを理解するための有効なツールになります．


## 例：アメリカ大統領選挙結果のヒストリカルデータ ##

`choroplethr`はサンプルデータセットとして全てのアメリカ大統領選挙の結果を持っています．このデータは`df_president_ts`変数に格納されています．

```{r}
library(choroplethr)

?df_president_ts
data(df_president_ts)

head(df_president_ts, n=1)
```
```{r}
##    region 1789 1792 1796 1800 1804 1808 1812 1816 1820    1824 1828 1832
## 1 alabama <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>   DR Jackson    D    D
##   1836 1840 1844 1848 1852 1856 1860 1864 1868 1872 1876 1880 1884 1888
## 1    D    D    D    D    D    D   SD <NA>    R    R    D    D    D    D
##   1892 1896 1900 1904 1908 1912 1916 1920 1924 1928 1932 1936 1940 1944
## 1    D    D    D    D    D    D    D    D    D    D    D    D    D    D
##   1948 1952 1956 1960 1964 1968 1972 1976 1980 1984 1988 1992 1996 2000
## 1   SR    D    D    I    R   AI    R    D    R    R    R    R    R    R
##   2004 2008 2012
## 1    R    R    R
```


## データを動画にする ##

このデータフレームを動画にするためには，`choroplethr_animate function`関数を使います（?`choroplethr_animate function`）．この関数の引数はひとつだけで，コロプレス図のリストです．
したがって，まずは`df_president_ts`データフレームをコロプレス図のリストに変換する必要があります．

```{r}
# 各年の大統領選挙結果のコロプレス図のリストを作成
choropleths = list()
for (i in 2:ncol(df_president_ts)) {
  df           = df_president_ts[, c(1, i)]
  colnames(df) = c("region", "value")
  title        = paste0("Presidential Election Results: ", colnames(df_president_ts)[i])
  choropleths[[i-1]] = state_choropleth(df, title=title)
}
```

それから，`choroplethr_animate`関数を，このコロプレス図のリストを引数にして呼び出します．

```{r}
choroplethr_animate(choropleths)
```


## 出力 ##

`choroplethr_animate`関数は各々のコロプレス図を`choropleth_1.png`，`choropleth_2.png`といったファイル名で現在の作業ディレクトリに書き出します．次に`animated_choropleth.html`という名前のHTMLファイルを書き出します．このファイルをブラウザで開けば，JavaScriptベースの動画プレイヤーによってコロプレス図が動画として再生されるのを見ることができます．

ここでは動画プレイヤーのスクリーンショットを示します．右上の角に再生ボタンと停止ボタンがあることに注目してください．これらのボタンをクリックして動画の再生と停止を行うことができます．さらに，＋ボタンと－ボタンで動画の再生速度を調整することができます．

![animation-screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/58917/37b5bb95-09c7-4a79-e51b-740d44b6e258.png)
CentOS6.5 64bit に MongoDB をいれてみたメモ

#インストール#
いろいろ参考にしながらMongoDBをいれてみた際のメモです。

##レポジトリを追加##

こんな感じで追加。

`$ sudo vi /etc/yum.repos.d/mongodb.repo`

```:mongodb.repo
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
```

##インストール##
ていっ。

`$ sudo yum install mongodb-org`


##自動起動するようにしとく##
`$ sudo chkconfig mongod on`

##確認##

確認してみるです。

 `$ mongo`

↓↓↓

```
MongoDB shell version: 2.6.6
connecting to: test
```

よっしゃ。
VisualStudioPro2013のTypeScriptプロジェクト、出力設定

この記事は[TypeScript Advent Calendar](http://qiita.com/advent-calendar/2014/typescript)の19日目の記事です。

## はじめに
* visual studio 2013 professional update 3  の環境で検証しました。
* 余り需要は無いかもしれませんが、一番はまったプロジェクトの出力の設定についてです。
* エディタのみVSでjsの出力等はgrunt等でやられている方には無意味な可能性があります。
* grunt等を使わずmsbuildで型定義ファイルや複数のtsを一つのjsに纏めたりします。

## プロジェクト作成
* 本記事で説明する箇所はVSで作成されるTypeScriptプロジェクトの出力の部分です。
* まずは、TypeScriptのプロジェクトを作成しましょう。

![プロジェクト画像1.png](https://qiita-image-store.s3.amazonaws.com/0/61773/6c55f210-f640-cb29-a9d9-a067512facc4.png)

今回は書き方は何でもいいので中身は下記のような空のクラスです。

```ts:TestA.ts

//TestA用の空のクラス
class TestA {

}
```
```ts:TestB.ts

//TestA用の空のクラス
class TestA {

}
```

## プロジェクトのプロパティ
* プロパティを開いてTypeScriptビルドをクリックします。
* 下記画像の赤で囲ってある部分が出力の設定です。

![出力画像1.png](https://qiita-image-store.s3.amazonaws.com/0/61773/cd3c2730-ced8-e20d-d0b9-79ac5f484f33.png)

### JavaScript出力にコメントを残す
* 名前のままです。チェックすると出力されるjsにコメントが残ります。

### JavaScript出力をファイルに結合する
* これは同一プロジェクト内のtsを一つのjsとして出力します。
* 拡張子まで指定する必要があります。
* プロジェクトの位置から相対パスで記入可能です。
記入例:script/kappa.js

出力されたjs

```js:kappa.js
//TestB用の空のクラス
var TestB = (function () {
    function TestB() {
    }
    return TestB;
})();
//TestA用の空のクラス
var TestA = (function () {
    function TestA() {
    }
    return TestA;
})();

```
このように出力されます。
※参照関係もちゃんと考慮するのでTestAがTestBを参照していた場合は下記が出力されます。

```js:kappa.js
//TestA用の空のクラス
var TestA = (function () {
    function TestA() {
    }
    return TestA;
})();
/// <reference path="TestA.ts" />
//TestB用の空のクラス
var TestB = (function () {
    function TestB() {
    }
    return TestB;
})();
```

## 追記！！　[tsc 1.4.1.0で--out オプションがきかない？？](http://qiita.com/orzngo/items/8dfcbf83dd5405326caa)
まだ試せてないのですが、VSって内部的にoutオプション使ってファイルを結合している気がする。
この記事を読んでoutオプションが使えないならVSでもバージョンアップでファイル結合ができなくなるかも。。。
試したら追記します。


### JavaScript出力をディレクトリにリダイレクトする
* これも名前の通りjsのディレクトリを指定する設定です。
* jsは指定したフォルダに出力されます。
* 注意点として上記の「JavaScript出力をファイルに結合する」にチェックをしていた場合はこの設定は効きません。
記入例:script
→scriptフォルダにTestA.js、TestB.jsが出力されます

※「JavaScript出力をファイルに結合する」にkappa.jsを入れていた場合
→プロジェクトフォルダにkappa.jsが作成されます。

### 宣言ファイルを作成する
* 各tsの型定義ファイルを作成します
* 上記の「JavaScript出力をディレクトリにリダイレクトする」にチェックしている場合にはそのディレクトリに出力されます。
* 「JavaScript出力をファイルに結合する」にチェックをしていた場合は結合したjsと同じフォルダに出力されます。

## プロジェクトをWebで作ってしまった場合
.projファイルを開いてxmlの下記部分にTypeScriptの文を追加します。

```xml
  <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
   <!--ここの部分に追加-->
    <TypeScriptOutFile>script/kappa.js</TypeScriptOutFile>
  </PropertyGroup>
```

するとプロパティから見れるようになります。

## 感想
VSでTS人は多いと思うのですが、設定について書いてる人が少なかったので書いてみました。

設定を組み合わせればgruntを使用せずに大規模なプロジェクトでもmsbuildのみで運用できるかもしれない。。。
しかし、組み合わせで出力先が変ったり、作成した型定義ファイルの出力先の指定が個別にできないので、
結局移動するようなケースがあると思う。(jsとtsの型定義ファイルの出力先が同じ事なんてあるのだろうか。。。)

あとjsに出力する際にminify等の設定が無いので、minify等は別で仕組みを整える必要がある。
あれ。。。gruntとかの方が早くない？まさか気のせい気のせい :sweat_smile:
GCMのテスト配信


参考: http://dev.classmethod.jp/smartphone/android/gcm/

わざわざサーバを立てなくても curl コマンドで配信することができる。便利。

```
$  curl --header "Authorization: key={API Key}" \
--header Content-Type:"application/json" \
https://android.googleapis.com/gcm/send \
-d "{\"registration_ids\":[\"{Registration ID}\"],\"data\":{\"message\":\"Hello\"}}"
```