OmniAICreator/Qiita-1.07M huggingface dataset:
git https接続で毎回パスワードを聞かれてしまう

#windows git の https接続で毎回パスワードを聞かれてしまう

WindowsのQtCreator(mingw)で使えるsshaskpassがないのとファイアウォールでSSH外部サーバ接続ができない環境のため、https接続を試してみたりもしたが、パスワードを頻繁にきかれてしまうので実質使えない状態だった。

[Codebreak](http://codebreak.com/ja/)のよくある質問で紹介されていたgit-credential-winstoreというツールを使ったら、解決。

[Codebreakのよくある質問](http://codebreak.com/ja/contents/faq/about_git_hosting_service/#why_does_the_system_ask_me_my_password_every_time_i_access_with_https)より

git-credential-winstoreはこちらから入手
http://gitcredentialstore.codeplex.com/

おかげでWindowsのQtCreator(mingw)でも外部gitサーバにclone/push/pullできるようになった。
iOSアプリ開発:リポジトリにコミット出来ない

※個人で管理しているHPに引っ越ししました。
リンク切れ等考慮して本ページは残しておきますが、今後は[HP](https://kittenkitten.net/2014/06/01/ios_repo_commit_ng/)のほうで更新します。

※Prj1というフォルダがあり、その下で開発をしている。
と言う前提で記述しています。
※Xcode4.6で確認。


[ターミナルで必要ファイルを追加](http://qiita.com/pgcmg00/items/ca1fe7bfbd93404d2c3e)したので、次はコミット！

と言う事で、Xcodeからコミットを試みた所、
下記のようなエラーが出てしまいコミット出来ない状況に。


`
The working copy "Prj1" failed to commit files.
error: pathspec '"Prj1/test.m"' did not match any file(s) known to git.
`

##原因
今既に無いファイルをAddする情報が残っていたようです。

##解決方法
ターミナルで下記を実行
`
cd Prj1
/Applications/Xcode.app/Contents/Developer/usr/bin/git reset
`

##色々細かい話
今回の件は、
作業の途中でバックアップしたファイルをそのままPr1フォルダ以下に置いた状態で、
ターミナルでAdd。
その後不要になったので削除。
を行ったため発生しました。

そもそも、バックアップするなら別階層にしましょうね。って話もあり。

####Xcodeのコミット手順

一応書いておきます。
`File`->`Source Control`->`Commit`

Project Viewが一番分かりやすいと思うのでそれを選択し、
コミットしたいものの左にあるチェックボックスにチェックを入れる。

右下の`Commit * Files`を選択したらコミットされます。

ちなみに、今回みたいにエラーが出た時は、
チェック入れた数と右下のコミットする数が違いました。

実際にコミットしたいファイルは数件なのに、
Commit 100 Files
みたいな事になっていて…。

`File View`や`Flat View`なら、そのファイルも全部見れます。
見れるだけで、ここでは解決出来ませんでしたが…。
世界で戦うプログラミング~5-2

```py3:bit.py
#-*- coding:utf-8 -*-

class Bitutils():

    
    def getBit(self,num,i):
        return(num & (1 << i) !=0 )
    
    def setBit(self,num1,i):
        return (num | (1 << i))
    
    def clearBit(self,num,i):
        mask = ~(1 << i)
        return num & mask
    
    def clearBitsMSBthroughI(self,num,i):
        mask = (1 << i) -1
        return num & mask
    
    def clearBitsIthrough(self,num,i):
        mask = ~((1 << (i+1)) -1)
    
    def updateBit(self,nim,i,v):
        mask = ~(1 << i)
        return (num & mask) | (v << i)
    
    def updateBit(self,n,m,i,j): #5-1
        allOnes = ~0
        
        left = allOnes << (j + 1)
        
        right = ((1<<i) - 1)
        
        mask = left|right
        
        n_cleared = n & mask
        m_shifted = m << i
        
        return n_cleared | m_shifted
    
    def printBinary(self,num): #5-2
        if num >= 1 or num <= 0:
            return "Error"
        tmp_str = ""
        tmp_str += "0."
        
        while num > 0:
            if len(tmp_str) >= 33:
                return "Error"
            r = num * 2
            if r >= 1:
                tmp_str += "1"
                num = r - 1
            else:
                tmp_str+= "0"
                num = r
                
        return tmp_str
            
            
            
    

if __name__ == '__main__':
    N = 1024
    M = 19
    i = 2
    j = 6
    b = Bitutils()
    
    #5-1
    #c = b.updateBit(N,M,i,j)
    #print(bin(c))
    
    #5-2
    c = b.printBinary(0.75)
    print(c)
    
    c = b.printBinary(0.875)
    print (c)

```

pythonでは今ある文字列に新しい文字を継ぎ足すときはこれでいいのであろうか
これでは全く新しい文字列を作っていることになるんがろうか
Spring Data JPA 環境構築時のエラー

Springプロジェクトでデータアクセス用にSpring Data JPAを使おうとしてつまづきました。

リポジトリのbase-packageを以下のように設定するとエラーが発生してしまいました。
以下、xmlファイルとエラーメッセージ。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

--- 省略 ---

    <jpa:repositories base-package="jp.co.xxx" />

--- 省略 ---

```

```:エラーメッセージ
AnnotationConfigUtils.processCommonDefinitionAnnotations(…) is not public! Make sure you're using Spring 3.2.5 or better. The class was loaded from file:/Applications/
 eclipse/plugins/org.springframework.context_4.0.0.20130829-M3.jar.: 
 org.springframework.context.annotation.AnnotationConfigUtils.processCommonDefinitionAnnotations(org.springframework.beans.factory.annotation.AnnotatedBeanDefinition)
```

Springのバージョンは4以上なんですけど。うーん...

どうやらSTS(Spring Tool Suite)のバージョンが古いのが問題なようで、アップデートしてみると無事解決しました！


以下に似たようなエラーが出ている人がいたので参考にさせていただきました
http://stackoverflow.com/questions/22111780/problems-compiling-spring-data-mongodb-repository-definition
MacでRuby環境を整えてchef、knife-soloを実行可能にするまでの手順

## 追記 2015/3/14

Chefやその他付随ツールのインストールは、今はChefDKで行うのが推奨されているみたいです。この記事の方法は基本非推奨です。
https://downloads.chef.io/chef-dk/

ちなみに、ChefDK環境にはknife-soloやknife-zeroは入っていないため、使う場合は以下のようにインストールすると入れられます。

```bash:
$ chef gem install knife-solo knife-zero
```


## 概要


Ruby力の低いPHPerがdotinstallのchef講座で詰まったのでやってみて、いろいろやって成功したのでメモ。

### 環境
* OS X 10.9.3 Mavericks
* homebrew 0.9.5（インストール済みとする）

### 方針
* 最新版厨です。
* 絶対にsudoしたくない人です。
* 公式サイトに載ってる一行インストールコマンドも使いませんでした。

## 事前

以前にhomebrewでごりごりrubyいれちゃった、という人は削除しておきましょう。一応。

``` 
$ brew uninstall ruby-build
$ brew uninstall rbenv
$ brew uninstall ruby
```

## Ruby環境構築

まずruby-buildとrbenvをhomebrewでインストール。ここでポイントなのがrubyをインストールしないこと！

```
$ brew install rbenv ruby-build 
```

終わったらrbenvの場所を確認。以下のようになっていたらおｋ。

```
$ which rbenv
/usr/local/bin/rbenv
```

そして以下の行を.bash_profileに追加。~~コンソールを開く~~シェルにログインするたびにrbenvを初期化するようになります。

```~/.bash_profile
eval "$(rbenv init -)"
```

コンソール立ち上げ直すか source ~/.bash_profile したあと、rubyのインストール。

```
# 最新版を確認。
$ rbenv install -l

# バージョン名を指定してインストール
$ rbenv install 2.1.2

# グローバルで使用するバージョンを設定してリンク更新
$ rbenv global 2.1.2
$ rbenv rehash
```

```
$ which ruby
/Users/ユーザ名/.rbenv/shims/ruby
$ which gem
/Users/ユーザ名/.rbenv/shims/gem
```

に通っていればよし。

## Chef・knife-solo・Berkshelfのインストール

gemで入れます。

```
$ gem install --no-ri --no-rdoc chef
$ gem install --no-ri --no-rdoc knife-solo
$ gem install --no-ri --no-rdoc berkshelf
```

コンソール立ち上げなおして、パスが.rbenv内に通っていることを確認。

```
$ which chef-client
/Users/ユーザ名/.rbenv/shims/chef-client
$ which knife
/Users/ユーザ名/.rbenv/shims/knife
```

これで無事knife solo init chef-repoが実行でき、dotinstallを進めることができました。

ポイントはhomebrewのgem等を使わないことだと悟った。homebrewで入れるのはrbenvとruby-buildだけ。gemはrbenvで作成したものをつかって、そのgem上でchefとknife-soloをいれる。

こちらをかなり参考にしました。
http://qiita.com/hidekuro/items/4c926587f3a1cb2ec1e0

Open to any questions and comments.
OS  と Python とモジュールとツールのバージョンを Markdown に吐き出す toolsver をつくりました

インターネットで調べものをしていると平気で古い記事やバージョンが現行と違うものが載っていて、知らないうちにハマってしまうということが多々あり、あまりにツラいのでみなさんがバージョンなどを公開したら幸せになれるのかなと思いつくってみました。  


ただし、アプリケーションの検索には Spotlight を使用してバージョンを確認しているので Mac OS X でないと使用できません。  
アプリケーションのバージョンを示すのは、開発者のこだわりやトレンドみたいなものが反映されたら面白いと思ったためですが、正しい名称でないと補足できないので使い勝手はよくありません。  

[github.com/toolsver](https://github.com/trsqxyz/toolsver)

たとえばこんな内容の Markdown ファイルが作成されます
=
## ENVIRONMENT  
2014-03-16 02:52:16.838725
Python 3.3.3
## OS  
ProductName:	Mac OS X
ProductVersion:	10.9.2
BuildVersion:	13C64  
## MODULE  
autopep8 (1.0)
pep8 (1.4.6)
pip (1.5.4)
setuptools (3.2)  
## APPS
テーブル構造のファイルを読み込む

## 趣旨

[Qiita: 二次元Listジェネリックにファイル読み込み][L1]

この記事は、上記事のＩＦ版です。
元記事では```List<List<string>>```へ格納していますが、この記事では```DataTable```を使用します。

## 読込部

```csharp:Program.cs

static DataTable LoadTable( string path, Encoding encoding )
{
	var rows = from x in File.ReadLines( path, encoding )
				select x.Split( new[ ] { '\t' }, StringSplitOptions.None );

	var dataTable = new DataTable( );
	using ( var enumerator = rows.GetEnumerator( ) )
	{
		if ( enumerator.MoveNext( ) )
		{
			var columns = from x in enumerator.Current
							select new DataColumn( x );

			dataTable.Columns.AddRange( columns.ToArray( ) );
		}
		while ( enumerator.MoveNext( ) )
		{
			dataTable.Rows.Add( enumerator.Current );
		}
	}
	return dataTable;
}

```

## 表示部

```csharp:Program.cs

static void Main( string[ ] args )
{
	using ( var table = LoadTable( "sample.txt", Encoding.UTF8 ) )
	{
		var columns = from x in table.Columns.Cast<DataColumn>( )
						select x.ColumnName;

		Console.WriteLine( string.Join( " ", columns ) );

		var rows = from x in table.Rows.Cast<DataRow>( )
					select x.ItemArray;

		foreach ( var row in rows )
		{
			Console.WriteLine( string.Join( " ", row ) );
		}
	}
	Console.ReadKey( );
}

```

[L1]: http://qiita.com/yukkuribemani/items/62206eac33c31394a8df "二次元Listジェネリックにファイル読み込み"
NSSet の内部実装


ふと気になったので調べてみたところ、以下のリンクを見つけた。

- [objective c - NSSet implementation - Stack Overflow](http://stackoverflow.com/questions/5863510/nsset-implementation)

どうやら実装としてはハッシュテーブルらしい。だから、要素の挿入、削除、検索が一定時間でできる。

なんでそんなことがわかるかというと、NSSet のC言語実装である CFSet が CFHashTable というハッシュテーブルを使って書かれているから。

実は CoreFoundation のソースコードは公開されていて、その一部である CFSet のソースコードも見ることができる。

- [CoreFoundation](http://opensource.apple.com/source/CF/CF-550.42/)
- [CFSet.h](http://opensource.apple.com/source/CF/CF-550.42/CFSet.h)
- [CFSet.c](http://opensource.apple.com/source/CF/CF-550.42/CFSet.c)

CFSet のメソッドを見ていると、NSSet のどのメソッドと対応しているか、それとなくわかる。気になる実装を軽く眺めてみるだけでも楽しいかも。
zsh と oh-my-zsh を入れて、zshに再入門した


# 概要

bashで満足していたが、zshが便利と聞いたので入れてみた。


# zshのインストール

最初yumでインストールしたが、
日本語が正常に処理できないバージョンだったので、
最終的にソースからインストールした。

```shell
$ wget http://downloads.sourceforge.net/project/zsh/zsh/5.0.5/zsh-5.0.5.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fzsh%2Ffiles%2F&ts=1401584908&use_mirror=jaist
$ tar jxvf zsh-5.0.5.tar.bz2
$ cd zsh-5.0.5
$ ./configure && make && make install
```

# oh-my-zshのインストール

githubからダウンロードしてくる。

```shell
$  git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
$ cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
```

# .zshrcの編集

プロンプトのテーマがたくさんあり、
デフォルトのテーマはきれいだが、
特殊文字が入っていてときどき変な動きをするので変更した。
選んだテーマは"mh"。
https://github.com/robbyrussell/oh-my-zsh/wiki/themes (テーマ一覧)

```shell:.zshrc
ZSH_THEME="mh"
```


デフォルトで、tmuxなどで複数開いたシェル間でコマンド履歴を共有する設定となっている。
自分的にはあまり好きな動作ではないので、オフにした。

```shell:.zshrc
setopt no_SHARE_HISTORY
```


.bashrcで設定していたものを持ってくる。

```shell:.zshrc
export LANG=ja_JP.UTF-8
alias vi="vim -u NONE --noplugin"
alias v=vim
alias g=git
alias pl=perl
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

などなど...
```

# デフォルトのシェル設定

以下のコマンドで利用できるシェルの一覧を確認。

```shell
$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh
/usr/local/bin/zsh
```

以下のコマンドでデフォルトのシェルを設定。

```shell
$ chsh -s /usr/local/bin/zsh
```

ログインパスワードを入力して設定完了。


# 使ってみて

シェル入力補完が強力になったり、
履歴検索が便利になったり、
色々便利になったっぽい。


# 参考

oh-my-zsh を使って zsh の便利な設定をまとめて取り入れる
http://mollifier.hatenablog.com/entry/20101009/p1

[さくら]さくらサーバーのデフォルトシェルをbashに変更する方法
http://blog.smileeeen.com/2010/06/sakura/bash/

CentOS上のzshで日本語入力が文字化けする件
http://taichino.com/engineer-life/linux/210
Vagrantで作成したVMにAnsibleを使う時にハマったこと




## Vagrantfile
安易に以下のようなBoxとVagrantfileを使ってVMを作成。

```bash
vagrant box add trusty64 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
```

```ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "trusty"
  config.vm.network :private_network, ip:"192.168.200.100"
end
```

## VMと通信できない
とりあえずpingモジュールを使って疎通確認をしてみるが失敗。

```bash
$ ansible all -i hosts -m ping

192.168.200.100 | FAILED => SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue

```
　　

普通にPingすれば通る

```bash
ping 192.168.200.100
```
　　
ansibleコマンドに"-vvvv"オプションを付けると、何が起こっているかは大体わかる。

### 答え
* ~/.ssh/config に設定をちゃんと書く。

何も考えずにansibleコマンドを使うと、rootユーザー＆.ssh以下にある秘密鍵を使ってSSHしようとするため失敗する。したがって、ログインユーザー名を指定して、鍵も指定すれば解決する。

```bash
cat < _EOS_ >> ~/.ssh/config
Host 192.168.200.*
  User vagrant
  IdentityFile /Users/pengin/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
_EOS_
```
　　
.ssh/configに書き込んだら、以下のコマンドを再度実行する。

```bash
$ ansible all -m ping

192.168.200.100 | success >> {
    "changed": false,
    "ping": "pong"
}
```

## root権限が必要なタスクの実行に失敗する
例えばaptなど、root権限が確実に必要なタスクを素で実行してみると以下のようなエラーを出力して失敗する。

```bash
$ ansible all -i hosts -m apt -a "name=nginx state=present"

192.168.200.100 | FAILED >> {
    "failed": true,
    "msg": "'apt-get install 'nginx' ' failed: E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)\nE: Unable to lock the administration directory (/var/lib/dpkg/), are you root?\n",
    "stderr": "E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)\nE: Unable to lock the administration directory (/var/lib/dpkg/), are you root?\n",
    "stdout": ""
}
```

### 答え
* root以外のユーザーでログインするように設定した場合には、"-s" オプションを指定してsudoするようにしなくてはいけない。
* パスワードなしでsudoできないユーザーの場合には、"-K" オプションを指定してパスワードを尋ねるようにしなくてはいけない。

vagrantユーザーはroot権限を持っていないし、パスワードなしでsudoを実行できるようにもなっていない。したがって、sudoを使ってコマンドを実行してもらうようにするのとともに、パスワードも与えるようにすれば解決。
　　　　

```bash
$ ansible all -i hosts -m apt -a "name=nginx state=present" -s -K

192.168.200.100 | success >> {
    "changed": true,
    "stderr": "",
    "stdout": "Reading package lists...
(以下略)
```
Sublime Text3 | HTML編集に便利そうなプラグインを作った

htmlを編集していると、
原稿をコピー、タグの中身を選択して、ペースト
原稿をコピー、タグの中身を選択して、ペースト
原稿をコピー、タグの中身を選択して、ペースト
・・・・
のような作業が多いので何とかならないかと思ったが
ぱっと見ちょうど良いものが見つからなかったので作った

https://github.com/ichi944/niconi

カーソルを置いたところを基準に'>'と'<'の間を
クリップボードの内容で置き換える超単純な実装
DOMの解析とかしない（そのうち機能増やしたい）　

使い方
-----

例えば

`<p>矢澤</p>`

の矢のあとにカーソルを置いて実行すると

`<p>にっこにっこにー</p>`

のようになる
Canvasの基礎

#Canvasの描画

##canvasを取得

```
//書き方
//canvas要素 = document.getElementById('エレメントID');
var canvasElement = document.getElementById('myCanvas');
```

##2Dコンテクスト取得
```
//書き方
//2Dコンテクスト = canvas要素.getContext('2d');
var context2D = canvasElement.getContext('2d');
```

##2Dコンテクストを描画
    

```
//書き方
//2Dコンテクスト.fillRect(x座標, y座標, 幅, 高さ);
context2D.fillRect(10, 10, 100, 100);
```

##色を塗る
```
//書き方
//2Dコンテクスト.fillStyle = カラー値;
context2D.fillStyle = 'rgb(155, 187, 89)';
```

#直線で形を描く

| メソッド | 内容 | 
|:-----------|:-----------|
| beginPath() | パスのはじめ |
| closePath()| パスを閉じる | 
| fill() | 塗り | 
| storoke()| 線 | 
| strokeStyle | 線の塗り | 
| lineWidth | 太さ | 
| moveTo()|  直線の書き始めの座標 | 
| lineTo() | 直線を結ぶ | 

```js
context2D.beginPath();
context2D.moveTo(10,  10);
context2D.lineTo(110, 10);
context2D.lineTo(110,110);
context2D.lineTo(10,110);
context2D.closePath();
context2D.fill();
context2D.stroke();
```

#星を描く

drawStar(2Dコンテクスト, 中心のx座標, 中心のy座標, 頂点数, 山の半径, 谷の半径)

##山と谷の間の中心角の出し方
360/(頂点数-2) = 180 / 頂点数

##山と谷のxy座標の出し方
x座標 = 半径 × cos角度 + 中心のx座標
y座標 = 半径 × sin角度 + 中心のy座標

#サンプル
[サンプル](http://jsdo.it/matsui_q/zS7B)

#参考サイト
[Canvasリファレンス - HTML5.JP](http://www.html5.jp/canvas/ref.html)
[canvas - jsdo.it](http://jsdo.it/tag/canvas?search_order=favorite)
さくらのVPSでカスタムOS、Ubuntu14.04を入れるやり方の一つ(osインストールのみ)

#####OSを再インストールしなければならないことになったので、やり方をシェアしておこうとこの記事を書きました。スクリーンショットを取りながら行いました。2014/6/1に行ったので最新です。
---
## Ubuntu14.04 
### Ubuntu14.04を選択する 
0. [さくらVPSコントロールパネル](https://secure.sakura.ad.jp/vpscontrol/main)へログインする。
1. OS再インストールを押すと、[カスタムosインストールへ]というリンクが表示されていますのでそれをクリック。
2. os選択というところをクリックして、ubuntu14.04amd64を選択して確認ボタンをおす。
3. 選択したのがubuntu14.04 amd64であることを確認したら実行ボタンを押します。(これを実行するとVPSのデータはすべて削除されます。)

### インストール  
1. Installを選択  
![スクリーンショット 2014-06-01 3.21.25.png](https://qiita-image-store.s3.amazonaws.com/0/32982/6871056f-0bec-3033-d504-652eee80fabf.png)
2. キーボードを選択する  
![スクリーンショット 2014-06-01 3.21.58.png](https://qiita-image-store.s3.amazonaws.com/0/32982/82b57bfc-b963-afa5-fd18-0a8c127eec4c.png)
![スクリーンショット 2014-06-01 3.22.04.png](https://qiita-image-store.s3.amazonaws.com/0/32982/a79e3975-afac-3882-86fc-48e00a02571e.png) 

私はEnglish(us)なので、English(us)を選択しました  
3. [さくらVPSコントロールパネル](https://secure.sakura.ad.jp/vpscontrol/main)に掲載されているIPアドレスの情報を入力する画面が出てくるので入力していく(ここでただしく入力出来なければ、インストールされません)

![スクリーンショット 2014-06-01 3.24.38.png](https://qiita-image-store.s3.amazonaws.com/0/32982/aa0246d7-d990-e5e9-8b55-4040772ad5db.png) 

入力はIPアドレス->ネットマスク->ゲートウェイ->ネームサーバー(左の方)
4. アカウントの設定に移ります。
フルネーム->アカウント名->パスワード->パスワードの確認
![スクリーンショット 2014-06-01 3.28.30.png](https://qiita-image-store.s3.amazonaws.com/0/32982/7be296e5-c369-cf86-acb0-eaddd21abe0d.png)
5. ユーザのホームディレクトリの暗号化を行うかどうかを聞かれるので、noでエンター
![スクリーンショット 2014-06-01 3.29.45.png](https://qiita-image-store.s3.amazonaws.com/0/32982/4cc20bef-11ee-483d-ab3a-73f511d0b610.png)

6. パーティションの設定  
unmount partitions that are in use? -> Yes    
![スクリーンショット 2014-06-01 3.30.08.png](https://qiita-image-store.s3.amazonaws.com/0/32982/6b7c0d33-3767-da1a-81d9-28fa97138f4d.png)  
Guided-user entire disk  
![スクリーンショット 2014-06-01 3.30.14.png](https://qiita-image-store.s3.amazonaws.com/0/32982/3460e183-882a-897e-d377-892aaef46a72.png)  
Virtual Disk 1  
![スクリーンショット 2014-06-01 3.30.21.png](https://qiita-image-store.s3.amazonaws.com/0/32982/bba564e6-9897-d653-0c33-91f13da91cd2.png)  
上書きしてもいいですか？(yes)   

7. ここまで終わったらこの画面になります
![スクリーンショット 2014-06-01 3.30.36.png](https://qiita-image-store.s3.amazonaws.com/0/32982/216499a2-985a-a0f9-0de4-8029f6bbbc49.png)
8.OSのインストール処理が終了するとこの画面が出てきますので、continueを押してください。
![スクリーンショット 2014-06-01 3.40.42.png](https://qiita-image-store.s3.amazonaws.com/0/32982/d365b20f-922c-c2ed-878a-acdc57e51d32.png)
PHP の file_get_contents でステータスコードを取得する

http://blog.manabusakai.com/2013/02/file-get-contents-status-code/

```php:上記記事より転載

$context = stream_context_create(array(
    'http' => array('ignore_errors' => true)
));
$response = file_get_contents('http://example.com/', false, $context);

preg_match('/HTTP\/1\.[0|1|x] ([0-9]{3})/', $http_response_header[0], $matches);
$status_code = $matches[1];

switch ($status_code) {
    case '200':
        // 200の場合
        break;
    case '404':
        // 404の場合
        break;
    default:
        break;
}

```

コメントでいただいた助言

・この関数はデフォルトで 200 以外は FALSE を返します
・ignore_errors と @ を両方付ける意味はありません
joda-timeで年齢取得

birthdayがStringで「1980/01/01」フォーマットだったときパターン

```java
import org.joda.time.LocalDate;
import org.joda.time.Years;
import org.joda.time.format.DateTimeFormat;

public int getAge() {
		LocalDate now = new LocalDate();
		LocalDate birthday = LocalDate.parse(getBirthday(), DateTimeFormat.forPattern("yyyy/MM/dd"));
		Years age = Years.yearsBetween(birthday, now);
		return age.getYears();
	}
```
mruby用マイコンビルド環境構築

# 始めに

弊社にてmruby向けのビルド環境について質問が出たらしいのでメモ。WindowsかつARM向けの話で、基本的に他の人のマネです。

# Windowsビルド環境

mrubyはホスト側で動作するmrbcがクロスコンパイルする場合でも必要。そのためWindowsでもホスト側のビルド環境をインストールしておきます。VisualStudioExpressでもcygwinでも結構です。私は社内ツール作成でC#を多用するのでVSを入れてます。

# ARMクロスコンパイル環境
ARM向けのクロスコンパイル環境構築は[ねむいさんのぶろぐ](http://nemuisan.blog.bai.ne.jp)の通りにすれば問題ありません。クロスコンパイラ(LAUNCHPAD gcc)、デバッガ(openocd)、GDBインタフェース(insight)をインストールしてLチカ程度の確認までしておきます。

# ruby/bisonのインストール

mrubyを作るにはこれだけではまだ足りず、ruby/bisonのインストールが必要です。

# mrubyライブラリ構築

これで漸くARM向けのmrubyライブラリが構築できます。STM32F4 Discovery向けとしてbuild_config.rbに以下の内容を追記します。

```ruby
MRuby::CrossBuild.new('STM32F4') do |conf|
   toolchain :gcc
   conf.cc do |cc|
     cc.command='C:/Devz/ARM/LAUNCHPAD/bin/arm-none-eabi-gcc'
     cc.flags = []
     cc.flags << '-mcpu=cortex-m4 -march=armv7e-m -mtune=cortex-m4'
     cc.flags << '-mthumb -mlittle-endian -mno-unaligned-access'
     cc.flags << '-mapcs-frame -mno-sched-prolog -mfpu=fpv4-sp-d16 -mfloat-abi=soft '
     cc.flags << '-std=gnu99 '
     cc.flags << '-fno-strict-aliasing -fsigned-char'
     cc.flags << '-ffunction-sections -fdata-sections '
     cc.flags << '-fno-schedule-insns2 '
     cc.flags << '--param max-inline-insns-single=1000 '
     cc.flags << '-nostartfiles -fno-common '
     cc.flags << '-fno-hosted'
     cc.flags << '-gdwarf-2 -O0 -flto-partition=none -fipa-sra'

  cc.flags << %w(-DMRB_USE_FLOAT)
  cc.defines << %w(MRB_HEAP_PAGE_SIZE=8)
  cc.defines << %(MRB_IREP_ARRAY_INIT_SIZE=128u)
  cc.defines << %w(MRB_USE_IV_SEGLIST)
  cc.defines << %w(KHASH_DEFAULT_SIZE=8)
  cc.defines << %w(MRB_STR_BUF_MIN_SIZE=20)
  #cc.defines << %w(DISABLE_STDIO) #if you dont need
  cc.defines << %w(MRB_GC_STRESS)   #no document
  cc.defines << %w(POOL_PAGE_SIZE=256) #effective only for use with mruby-eval

   end
   conf.archiver do |ar|
     ar.command = 'C:/Devz/ARM/LAUNCHPAD/bin/arm-none-eabi-ar'
   end
   conf.bins = []
   conf.build_mrbtest_lib_only
   conf.gem :core => "mruby-toplevel-ext"
   conf.gem :core => "mruby-fiber"
   conf.gem '../mruby-direct'
end
```

クロスコンパイラの設定は構築したビルド環境に準じます。チューニングパラメータは
[￥1,650で買えるARM基板STM32F4DISCOVERYでmrubyを動かす](http://d.hatena.ne.jp/kyab/20130806)をコピペしてます。ここは他力本願。後はVSなりCygwinなりのWindowsビルド環境のコンソールでmakeすれば完成です。

# ターゲットプログラムのビルド

ライブラリが完成したら、それを組み込みます。Makefileに追記します。

```mf
# mruby flags
MRUBY_PATH = c:/Devz/prj/mruby/mruby/
MRUBY_CFLAGS = -I$(MRUBY_PATH)include
MRUBY_LFLAGS = $(MRUBY_PATH)build/STM32F4/lib/libmruby.a
```

後はMRUBY_CFLAGS/MRUBY_LFLAGSをコンパイラ/リンカのオプションに追加するだけです。mrubyの組込み方法は説明を省きます。

# その他バッドノウハウ等

これで一通り問題ないはずですが、gcc4.8だとリンカでmemmoveがないと蹴られます。gccのバージョンを一つ落して4.7でビルドすると解決します。4.8の解決策は追求してません。

mrubyはヒープを多く消費します。ですのでリンカスクリプト等で十分なメモリを確保する必要があります。ARMマイコンでしたら[ねむいさんのぶろぐ](http://nemuisan.blog.bai.ne.jp)でメモリ確保のノウハウが入手できます。ここも他力本願。

# 終りに
Windows向けの内容でしたが、使用するツールはMacでもLinux/BSDでも同じですので、他のOSでも同じく構築はできます。ただし、openocdがgccでないとコンパイルできない等、OS毎にバッドノウハウがありますので注意が必要です。

御精讀、ありがたうございました。
Dockerでホストとコンテナ間でのファイルコピー


## コンテナからホストへのコピー

docker cp コマンドが使えます。

```sh
# コンテナIDを調べる
$ sudo docker ps

$ sudo docker cp <コンテナID>:/etc/my.cnf my.cnf
```


## ホストからコンテナへのコピー

（追記：2016/01/22）
[Docker 1.8](http://blog.docker.com/2015/08/docker-1-8-content-trust-toolbox-registry-orchestration/)からホストからコンテナへのコピーも docker cp コマンドでサポートされるようになりました！
https://docs.docker.com/engine/reference/commandline/cp/

```
$ sudo docker cp my.cnf <コンテナID>:/etc/my.cnf
```

~~こちらは ```docker cp``` コマンドで実現することはできません。~~
~~現状、Dockerfile に記述して、コピーするしかないみたいです。~~

~~`ADD my.cnf /etc/my.cnf`~~


~~ちなみに、```docker cp```コマンドでホストからコンテナへのコピーをサポートしてほしいという要望がコミュニティ内でも根強くあるみたいです。~~

~~[dotcloud/docker #905](https://github.com/dotcloud/docker/issues/905)~~
Xcode の組み込みスニペットを編集できるアプリ

# はじめに

Xcode にはじめから入っているスニペット、編集できなくてもどかしいです。ショートカットを変えたいだとか、中身を変えたいだとかいろいろ思うところがありますが、それが出来ないのです。
Xcode.app を掘っていけばきっとどこかにスニペットを収録した plist なりがあるのでしょうが、それを調べるのもたるいです。でもそれを GUI で簡単に編集できるアプリがありましたのでここに使い方をメモしておきます。

# Snippet Edit

![se.png](https://qiita-image-store.s3.amazonaws.com/0/3603/cf52f14f-7201-89b3-e83c-7c8d0a34ae4d.png)
http://cocoaholic.com/snippet_edit/

Snippet Edit を使うと、組み込みスニペットを編集する事が出来ます。一覧に表示されるのは組み込みスニペットだけで、ユーザ追加のものも含めて管理出来る訳ではないようです。
ここで編集済みのスニペットにはアイコン部分に `User` が付きます。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/3603/7e593950-6262-cf6e-0730-f841838db268.png)

Snippet Edit だけではショートカットを変更できないのですが、Xcode に移動して先ほど編集したスニペットを開くと、ショートカット等も編集できるようになっています。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/3603/3ff406f3-51ad-3bf1-6d29-dbe20e2842a7.png)
phpMyAdminでtbl_replace.php: パラメータがありませんのエラー

# phpMyAdminでエラー発生
phpMyAdminでテーブルに挿入しようとしたところ、謎のエラーが出現。

```
tbl_replace.php: パラメータがありません goto
```

ググるとCookie周りのバグだと言われるが、その辺を弄っても変化なし。

## 動作環境
phpMyAdminの動作環境。vagrantでサーバー立ててます。

|プラットフォーム|バージョン|
|:--|:------|
|OS|CentOS6|
|PHP|5.5.12|
|MySQL|5.1.73|

## ブラウザをFirefoxに変えてみる
Chromeで操作していたので試しにFirefoxで起動してみると...

```
Cannot start session without errors
```

そもそもphpMyAdminに接続できない。なんでだ(´・ω・`)？

原因を調べたところ、php.iniの`session.save_path`に原因があるとのこと。

## session.save_pathを設定
php.iniを見に行くと...

```php.ini
;session.save_path = "・・・"
```

そもそも設定されていませんでした＼(^o^)／

```php.ini
session.save_path = "/var/lib/php/session"
```

大抵はこれで設定されているようなので、このディレクトリを設定。

## パーミッションと所有権の確認
`session.save_path`で設定したディレクトリの所有権やパーミッションが正しく設定されていないとこれまたエラーになるようなので、ちゃんと設定。

```bash
drwxrwxrwx   2 root root 4096 May 18 16:15 session
```

所有権をroot/root、パーミッションを777に。

## 動作確認
ちゃんと`service httpd restart`でapacheの再起動を行った後、動作を確認。
接続成功し、挿入も通常通り行えました。
二次元Listジェネリックにファイル読み込み

##**概要**
　タブ区切りのtxtファイルを読み込み、その内容を2次元Listのジェネリック```List<List<string>>```
へと格納して呼び出し側に返すメソッドを作る。
　仕事で取り組んだ時に、2次元ジェネリックの格納に不慣れで手間取ったのと、情報が少なかったため投稿

##**内容**

```csharp:LoadFileData.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace test
{
    static class FileLoad
    {
        public static List<List<string>> load(string filename)
        {
            List<List<string>> LoadFileData = new List<List<string>>();
            string filepath = "テキストファイルがあるパス";
            filepath += filename;
            try
            {
                using (StreamReader sr = new StreamReader(filepath, Encoding.GetEncoding("utf-8")))
                {
                    //sr.ReadLine(); 最初の一行分(表のヘッダ部分)を飛ばしたい場合
                    while (!sr.EndOfStream)
                    {
                        List<string> addData = new List<string>();
                        string line = sr.ReadLine();//一行ずつ読み込む
                        string[] splitData = line.Split('\t');//タブ区切りで分割したものを配列に追加
                        for (int i = 0; i < splitData.Length; i++)
                        {
                            addData.Add(splitData[i]);//追加用のList<string>の作成
                        }
                        addData.Add("\n");
                        LoadFileData.Add(addData);//List<List<string>>のList<string>部分の追加
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            return LoadFileData;
        }
    }
}
```

出力用

```csharp:main.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace test
{
  class Program
  {
     static void Main(string[] args)
     {
            List<List<string>> loadData = (FileLoad.load("sample.txt"));
            for (int i = 0; i < loadData.Count; i++)//ジェネリックの出力
            {
                foreach (string data in loadData[i])
                {
                    Console.Write(data);
                }
            }
            Console.ReadKey();            
        }
    }
}

```

ファイルの中身

```text:sample.txt
名前	アドレス	コメント
hamutaro	koushi@example.com	ﾊﾑﾀﾛｻｧﾝwww
hoge太郎	hogehoge@example.com	hogehoge
null彦	nullnull@example.com	ヌルポ
```

実行結果
![実行結果.png](https://qiita-image-store.s3.amazonaws.com/0/42607/efc69b36-1847-8d36-327c-27743efb35f2.png)

このように行単位で読み込んだ内容を出力できることを確認した。

##**まとめ**
2次元ジェネリックに要素を追加する際に、始めは直接2次元配列風に
LoadFileData[0][0].add(xxx)のようにしてみたがエラー
となり、2次元の添字指定をしたaddはできなかった。

だが、難しく考えずにジェネリックの表記通りにListに対して、別で作成したListをaddすればよいというだけだった。
Scala-SBTで伺かを実行する

Scala勉強会に参加したさいに、発表者が口を揃えてScalaのコンパイルが遅いと言っていたので、SBTで伺かを実行する方法を調べました。
コンパイルが遅いなら伺かのかけあいを見てればよいじゃない！！

![うにゅう_and_うにゅう_and_さくら_and_さくら_and_Kinzal_—_Kinzal_MacBook-Air___Volumes_DISK_Dropbox_Projects_mandelbrot_—_zsh_—_99×26.png](https://qiita-image-store.s3.amazonaws.com/0/5522/3aa1c637-4505-19b5-84d4-80d26bccb0dd.png)

# タスクを追加する

SBTにタスクを追加するには下記のようにコードを追記します。

```scala
val sstp = taskKey[Unit]("sstp send script.")

sstp := {
}
````

1行目の````val sstp````でこの名前のタスクを作りますよと宣言して、3行目の````sstp := { ... }````でタスクと実行内容を紐づけます。
これをひな形として実際にSSTP通信を行い、伺かで実行するスクリプトを送信する処理を作成します。

# ソケット通信を行う

Scalaだけではソケット通信は行えないのでJavaのライブラリを使用してソケット通信を行います。

```scala
import java.io._
import java.net.{ InetAddress, Socket }

val sstp = taskKey[Unit]("sstp send script.")

sstp := {
  val ia = InetAddress.getByName("localhost")
  val socket = new Socket(ia, 9801)
  val out = new DataOutputStream(socket.getOutputStream)
  val script = "SEND SSTP/1.1\r\n" +
               "Sender: sbt\r\n" +
               "Script: \\h\\s0SBTでコンパイルするよ\\u\\s0これでScalaのコンパイルをさらに長くできるな\\e\r\n" +
               "Charset: UTF-8\r\n"
  out.write(script.getBytes("UTF-8"))
  out.flush()
  out.close
  socket.close
}
````

注意点としては````out.write(script.getBytes("UTF-8"))````でスクリプトで指定したcharsetのバイトを送信するようにしてください。
````writeBytes````や````writeUTF```で文字列を送信すると伺か側で文字化けを起します。

2時間ハマりました。。

この状態で````sbt sstp````と実行すると伺かが喋りだします。

# コンパイルの実行前にタスクを実行する

ここまで出来たら、あとはコンパイルの実行前にタスクを実行するように仕込むだけです。

```scala
compile <<= (compile in Compile) dependsOn sstp
````

上記のコードを追記すると````sbt compile````で伺かが喋りだしてくれます。

---

これでコンパイル時間が楽しくなれますね！！！
プラグイン化は誰か任せました。コンパイルの時間に合わせてランダムにかけあいをする素敵なプラグイン誰か作ってください。
【私的メモ】AVX覚え書き

Advanced Vector eXtensionとは、インテルCPUに搭載されたSIMD演算命令であり、
256bitのデータを一つのレジスタに格納して、同一演算を行うことが出来る。
で、気を抜くとすぐに書き方を忘れるので覚え書き程度に書いておこうっと。

#gcc拡張を使う
移植性？何それうまいの？という人向け。

まずAVXの型を登録しておく
メモリのalignmentを256bitにしておく必要があるので、typedefしておく。
これは倍精度×4の場合。

```cpp
typedef double v4df __attribute__((vector_size(32)));
```

更に、unionを使ってAVX型と通常の型の読み替えを簡素に出来るようにしておく。

```cpp
union AVX{
	v4df v;
	double x[4];
};
```
もちろん演算子のオーバーロードとかを行っておくと本当は便利だけど今は取り敢えずお試しAVXという事で放置。

で、使ってみる。

```cpp
int main(void){
	AVX z;
	AVX x = {. x = {1., 2., 3., 4.}};
	AVX y = {. x = {2., 1., 4., 3.}};
	z.v = x.v + y.v;
	for(int i = 0 ; i < 4 ; ++ i){
		std::cout << z.x[i] << std::endl;
	}
	return 0;
}
```
とまぁこんな感じ。
コンパイルオプションに-mavx着けるのを忘れないでおこう。

```
g++ foo.cpp -mavx
```

アウトプットはたぶん

```
3
3
7
7
```
…のはず。-S付けてアセンブラを見ると`ymm`レジスタが使われているので、AVX化されたと思えばいいのかしら？

#intrinsic関数を使う
そのうち書く。。。
Oracle SQL*Loaderを使ったデータ挿入の方法

ブログに書いたよ。
<a href="http://replication.hatenablog.com/entry/2014/06/01/011100">Oracle SQL*Loaderを使ったデータ挿入の方法 - 大人になったら肺呼吸＠はてブロ</a> <a href="http://b.hatena.ne.jp/entry/replication.hatenablog.com/entry/2014/06/01/011100"><img src="http://b.hatena.ne.jp/entry/image/http://replication.hatenablog.com/entry/2014/06/01/011100" alt="はてなブックマーク - Oracle SQL*Loaderを使ったデータ挿入の方法 - 大人になったら肺呼吸＠はてブロ" border="0" /></a>
Git 2.0.0 を Ubuntu 14.04 にインストールした

```bash
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update

sudo apt-get install git
# or, if you have already installed git
sudo apt-get upgrade
```

```bash
git --version #=> git version 2.0.0
```

## Reference

* [Git stable releases : “Ubuntu Git Maintainers” team](https://launchpad.net/~git-core/+archive/ppa)
【XCode】コードスニペットの追加と複数端末での同期や共有

自分のよく書くコードをスニペットとして追加しておくと捗りますよね。
ではその追加・共有方法等諸々を記述していきます。

# 動作環境

| Soft | Version |
|:-----------|------------:|
| MacOS      | 10.9.1 |
| Xcode      | 5.0.2  |

# コードスニペットの追加

僕が下手に書くよりmatttさんの記事見れば一目瞭然かと。

http://nshipster.com/xcode-snippets/


# コードスニペットを複数端末で同期

###以下の手順は個人向けです。複数人でという場合は飛ばして次に進んでもよいかと。

今回はDropboxを使います。（他のサービスでもいいです）
同期にはMacDropAnyを使用します。では以下手順です。

***


以下よりMacDropAnyをダウンロード

http://www.zibity.com/macdropany

***

Dropbox上に「CodeSnippets」という名前のフォルダを作成。
gitで管理したい場合は別途対応してください。（省略します）

***

~/Library/Developer/Xcode/UserData/CodeSnippets
配下にある *.codesnippetファイルを先ほど作成したDropboxのフォルダへ移動。
~/Library/Developer/Xcode/UserData/CodeSnippetsフォルダを削除。
（１つもcodesnippetファイルがなければフォルダ自体がありません）

***

MacDropAnyを起動し、最初に選択するフォルダをDropBoxフォルダに作成したCodeSnippetsフォルダとする。
次に使用するCloudサービスの選択で「Dropbox」を選択。
２度目に選択するフォルダを
~/Library/Developer/Xcode/UserData
とする。

***

~/Library/Developer/Xcode/UserData/下にDropbox上のCodeSnippetsフォルダのエイリアスがあることを確認。

***

Xcodeを再起動し、コードスニペットを利用できることを確認。

***

他端末では*.codesnippetファイルのDropboxのCodeSnippetsフォルダへ移動以降を行えば共有出来るはずです。


#コードスニペットをプロジェクトや会社とかで共有

上記手順だとCodeSnippetsフォルダを共有扱いすれば複数人でも共有可能ですが、
会社単位とか結構多い人数だと面倒ですね。
その場合は以下の素晴らしい記事を参考にしていただければと思います。

[Xcode5でCodeSnippetsをgit管理する](http://qiita.com/morizotter/items/1025c30e8070433cde68)

#世に上がっているオレオレスニペ

###こんなのあるよとか言っていただけると助かります。

[Xcode-Snippets](https://github.com/mattt/Xcode-Snippets)
matttさん作。流石としか言いようが無い。

[xcode_tool](https://github.com/tangqiaoboy/xcode_tool)


#参考
Xcode 4のスニペットをDropboxで同期する
http://blog.seasons.cc/entry/20110328/1301300189

Dropbox MacDropAnyで様々なファイルを同期する
http://imatomo.blogspot.jp/2012/04/dropbox-macdropany.html
gitを2.0.0をMACにインストールした

## はじめに
macbookのgitを2.0.0にしました。(もともとgit version 1.8.5.2 (Apple Git-48)とやらが入っていた) 一番楽そうなのがbrewだったのでそれでインストールしました。
macのバージョンは10.9です。そして普段使いはなぜかhgです。どうでもいいですね、すみません。

## 既存のバージョンとパスの確認

パスが通っている場所の確認とそのgitのバージョンを確認

``` Terminal
$ which git
/usr/bin/git
$ git --version
git version 1.8.5.2 (Apple Git-48)
```

## gitのインストール

先にも述べましたがbrewを使います。

```Terminal
$brew update
$brew versions git
2.0.0    git checkout e2e2236 /usr/local/Library/Formula/git.rb

```
brewではgitをインストールしていなかったので、

```Terminal
$ brew install git
$ /usr/local/bin/git --version
git version 2.0.0
```

でインストールできました。
すでに入っている人は $brew upgrade git で入るそうです。
## パスの優先順位を変える

/etcの中に pathsというファイルが有ります。

```Terminal
$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
```
となっていたのでこのままだと/usr/bin/git を使い続けてしまうので

```Terminal
$ cat /etc/paths
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
```
に書き換えます。コンソールを再起動してパスを読み直します。 ※ 全体に影響するので十分注意してください。

```Terminal
$ git --version
git version 2.0.0
```

以上で完了です。
【ST】SublimeTextショートカット（Win・Mac）

# **SublimeTextショートカット一覧**

WindowsとMacの両方で使用しているとショートカットを忘れるのでチートシートを作成しました。
他にも便利なショートカットがあるので、暇なときに追加します。

## **文字の操作**

|操作|Windows|Mac|
|:---|:---|:---|
|文字検索|Ctrl + F|command + F|
|文字置換|Ctrl + H||
|文字サイズの変更|Ctrl + プラス or マイナス|command + プラス or マイナス|
|単語を選択　※入力ごとに同じ単語を選択|Ctrl + D|command + D|
|丸括弧内を選択|Ctrl + Shift + M|control + shift + M|

## **行の操作**

|操作|Windows|Mac|
|:---|:---|:---|
|行の選択|Ctrl + L|command + L|
|行の削除|Ctrl + Shift + K|control + shift + K|
|行ごと移動|Ctrl + Shift + 上 or 下|control + command + 上 or 下|
|行ごと下の行へコピー|Ctrl + Shift + D|command + shift + D|
|行の下に空行を挿入|Ctrl + Enter|control + return or enter|
|行の上に空行を挿入|Ctrl + Shift + Enter|control + shift + return or enter|
|インデントを一つ追加　※複数行もOK|Ctrl + ]|command + ]|
|インデントを一つ削除　※複数行もOK|Ctrl + [|command + [|

## **その他**

|操作|Windows|Mac|
|:---|:---|:---|
|画面分割|Shift + Alt + 1〜4|command + option + 1〜4|
|コメントアウト（一行）|Ctrl + /|command + /|
|コメントアウト（複数行）|Ctrl + Shift + /|command + option + /|
【C#】コンテキストメニューのローカライズでちょっとだけハマった件

# 右クリックメニューをローカライズしたかったんです

ここを参考にしてました．
http://msdn.microsoft.com/ja-jp/library/y99d1cd3(v=vs.110).aspx

フォームのLocalizableをtrueに設定し，言語は（既定）を選択，コンテキストメニューは英語表示でした．
その後，フォームの言語を日本語に設定，コンテキストメニューも日本語化して保存．その後既定の言語に戻してみると…

## あ…あれ…

英語表記していたハズの既定のメニュー表示が日本語になってるじゃありませんか．
よく見るとプロジェクトにも言語リソースファイルが作られていない様子．

# 原因

どうやらコンテキストメニューの前に，フォーム内のコンポーネントの何かしらをローカライズして，言語リソースファイルを作らないといけないらしい．
今回，フォーム内は全て英語でいいやと思っていたので，直接コンテキストメニューをローカライズしようして失敗していました．
でも，これって仕様…にしてはおかしいよね…
関連するモデルも一緒に削除する




```rb
#会社モデル
class Company << ActiveRecord::Base
  #dependentがキモ
  #↑ちなみに”依存している”という意味らしい
  has_many :members, dependent: :destroy
end
```

```rb
#社員モデル
class Member << ActiveRecord::Base
  belongs_to :company
end
```

ER図風AAだとこんな感じ
１対多の関係
company --< members

このように記述しておけば、Companyモデルを削除する際に関連するMemberモデルも一緒に削除される。

会社が倒産したら社員も存在しなくなるのである…

*ググるワード*
rails association dependent
Ricty Diminished フォントが超絶いい！！

# Ricty Diminished
Ricty (リクティ) 使ってみようかとフォント合成が面倒だと思っていたら、Ricty Diminished がでていたとは

## インストールは簡単
[プログラミング用フォント Ricty Diminished](http://save.sys.t.u-tokyo.ac.jp/~yusa/fonts/rictydiminished.html)から、[tar ball](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q126813737) をダウンロードして展開する。展開した ttf ファイルを右クリックして「インストール」を選択。これだけ（tar.gz の解凍は、[7-zip](http://sevenzip.sourceforge.jp/howto/kaitou.html) がおすすめ）
※インストールの方法は、[ここ](http://nelog.jp/how-to-use-ricty-diminished-font)を参照

### Puttyや、Eclipesで使うといいよ
Ricty Diminished Discord を選択、アンチエイリアス に設定するだけで[ハッカー](http://cruel.org/freeware/hacker.html)みたいな人の画面に変身した気分になれます。ｗ

![04.png](https://qiita-image-store.s3.amazonaws.com/0/44540/a3a84f08-df5f-5226-07f5-455fd4321dde.png)
プリファレンスに配列を保存

# プリファレンスに配列保存したいですね！

## ※ 2015/4/6追記 以下リンクにプレファレンスにオブジェクトを保存する方法があったので書きました。これで配列でもなんでも保存できます。
http://qiita.com/ueno-yuhei/items/3810576dc391c2513586

こんなのがいいんじゃないかと思って書いてみました。
参考になれば幸いです。

保存する際は、配列を文字列に変換・保存
取得する際は、文字列を配列に変換

```java
// プレファレンスに保存
String[] arrayItem1 = {"aaa","bbb","ccc","ddd","eee","fff"};			
saveArray(arrayItem1,"StringItem");

// プリファレンスから取得
String[] arrayItem2 = getArray("StringItem");

// プリファレンス保存
// aaa,bbb,ccc... の文字列で保存
private void saveArray(String[] array,String PrefKey){
	StringBuffer buffer = new StringBuffer();
	String stringItem = null;
	for(String item : array){ 
		buffer.append(item+",");
	};
	if(buffer != null){
		String buf = buffer.toString();
		stringItem = buf.substring(0, buf.length() - 1);

		SharedPreferences prefs1 = getSharedPreferences("Array", Context.MODE_PRIVATE);
		SharedPreferences.Editor editor = prefs1.edit();
		editor.putString(PrefKey, stringItem).commit();
	}
}
	
// プリファレンス取得
// aaa,bbb,ccc...としたものをsplitして返す
private String[] getArray(String PrefKey){
	SharedPreferences prefs2 = getSharedPreferences("Array", Context.MODE_PRIVATE);
	String stringItem = prefs2.getString(PrefKey,"");
	if(stringItem != null && stringItem.length() != 0){
		return stringItem.split(",");			
	}else{
		return null;
	}
}
```

他にいい方法があったら教えてくださいね！
Terminal のビープ音がうざいので全カット (仮)

試行錯誤中のメモ。

* * *
Vagrant ssh とかやった時、ことあるごとにビープ音が出てうざかったので対応。


## bash
```.inputrc
set bell-style none
```

シェルに再ログインが必要かも


## vim
```.vimrc
set visualbell
```
node-webkitでネイティブモジュールを使う

#概要
node-webkit使ってシリアルポート経由で、arduinoが送ってくるカラーセンサーの値を読もうとしたらserialportモジュール入れるのに苦労した。ので、対処したときの記録。もしかすると必要ないものとか、手順もあるかもしれない。
もっと簡単な方法とかあったらぜひ知りたい。
#なにが困るのか
node.jsのモジュールにはfsとかみたいな組み込みのモジュール、Javascriptで書かれたモジュール、c++なんかで書かれたネイティブモジュールがある。
で、ネイティブモジュールをnode-webkitで使うと、エラーが出て動かない（そのまま動くときがあるのかは知らん）。それはABI（application binary interface）がnode.jsで動くときとnode-webkitで動くときで違うらしいんだけど、詳しいことは良くわからない。
#ではどうするのか
npmでインストールしたあと自分でリビルドする。
node.js向けだとnode-gypってのを使ってビルドするんだけど、node-webkitではnw-gypっていうnode-gypのフォークを使う。で、そのためにはビルド環境を先に準備しておく必要がある。環境についてはnode-gypと同じでいいみたい。
#ビルド環境

https://github.com/TooTallNate/node-gyp#installation

Unixの場合、python2.7とmakeとGCC（とか）で、windowsの場合、python2.7とVC++（Express可）をあらかじめ入れておく必要がある。今回はwindowsでpython2.7、VC++2010 Expressを使った。

#手順
上記をインストールしたら、nw-gypをグローバルに入れる。

```
npm install nw-gyp -g
```

次にプロジェクトのnode_modules内の各モジュールのディレクトリに移動する。
たとえばserialportを利用するなら、プロジェクトのホーム以下のnode_modules/serialportに移動する。そこでnw-gypコマンドを実行する。で、そのときnode-webkitのターゲットバージョンを指定する。

```
nw-gyp rebuild --target=0.9.2
```

で、これでちゃんとイケるんじゃないかと思うけど、serialportの場合上手く行かなかった。以下の様な感じのエラーが出る。

```
gyp: Undefined variable module_name in binding.gyp
gyp ERR! configure error
```

エラーメッセージでググると、こんな記事があった。

https://github.com/rogerwang/node-webkit/wiki/Build-native-modules-with-nw-gyp

node-pre-gypってパッケージを使え、ということらしい。
なんとなくで読むと、node-gypを簡単に使えるようにするパッケージか何かではないかと思うので、binding.gypを書いて適切に設定できれば必要ないのかもしれない。でもよく分からんので、入れて使う。

```
npm install node-pre-gyp -g
node-pre-gyp rebuild --runtime=node-webkit --target=0.9.2
```

runtimeをnode-webkitにしてあるので問題なくイケる。
で、32bitだとこれで大丈夫なんだけど、64bitのwindowsを入れてるマシンで試した時はちゃんと32bit向けのビルドだってことを明示しないとエラーで落ちた。

```
node-pre-gyp rebuild --runtime=node-webkit --target=0.9.2 --target_arch=ia32
```

というわけで、これで動くようになった。
やったね。
新しいテレビの楽しみ方 放送をHackするHybridcast

最近テレビを見てますか？
スマホでニュース、タブレットでニコ動かYoutube、テレビはお茶の間の飾り・・・という方も最近は多いかもしれません。

しかし、どの家どの年代のお茶の間にもほぼあるという「媒体の普及率」、そこで放映されている「コンテンツの認識度」、これらはとても魅力的なプラットフォームではないでしょうか。

そんな媒体をHackしてコンテンツを好きにいじれたらー？

![Bodkwa_IgAA17xy.jpg](https://qiita-image-store.s3.amazonaws.com/0/25990/7b014e1b-6f3b-742d-0e83-fc236b6da86a.jpeg)

こんな風に友達と一緒に大相撲見ながら囃し立てたりとかできちゃいますね。

これは正真正銘、NHKの大相撲放映に合わせこちらのアプリの情報を配信しています。
それを可能にしているのが、今回ご紹介するHybridcastなのです！

## Hybridcastとは
Hybridcastとは、端的に言えば放送とWebを同時に配信する技術です。
実体としては、テレビに搭載されたブラウザが放送にプラスしてHTMLコンテンツを表示します。このコンテンツはHybridcast専用のなにかではなく、本当に普通のHTML&JavaScriptのアプリケーションです(HTML5の機能も利用可能！)。

上記の例では、大相撲という放送にプラスしてイルカたちでチャットできるWebアプリケーションがブラウザ上で実行されているわけです。

![hybridcast.JPG](https://qiita-image-store.s3.amazonaws.com/0/25990/d31eb751-d3ad-f1de-3ec2-6af45a75bcdf.jpeg)

[IPTVフォーラム ハイブリッドキャストのはじめ方より抜粋](http://www.iptvforum.jp/hybridcast/first-step.html)

上記の図にもある通り、配信先は何もテレビだけに限りません。放送に合わせてタブレットやスマートフォンに対してコンテンツを配信することも可能です。

これにより、例えばテレビで講義を配信しつつタブレットに小テストを配信する、天気予報の際に視聴者のスマホの温度センサから実際の温度をモニタするなど、よりテレビというコンテンツの楽しみ方を拡張することができます。

より詳細な情報は[IPTVフォーラム](http://www.iptvforum.jp/)、また[NHKの紹介サイト](http://www.nhk.or.jp/hybridcast/online/)で確認することができます。
NHKによる2013年度の取り込みは[Web上で閲覧可能](http://www.nhk.or.jp/hybridcast/online/pdf/hybridcast_report_2013.pdf)なので、興味がある方はこちらも見てみて下さい。

## Hybridcastの現状
・・・ここまで盛り上げておいてなんなのですが、今のところ「いますぐ実装するぜ！」というのはできない状態です。

上記のテレビを見ながらのチャット機能は、2014/5/24-25にわたって開催された[NHKハッカソン](http://mashupawards.doorkeeper.jp/events/10804)の際、Hybridcast使うぜ！という思いの下私も含めた3人のメンバで開発したものです。

テーマは国際報道を若い世代に見てもらう、というものでした。チームでは若者=LINEと思い至り、テレビ上でLINEみたいにチャットやスタンプでコミュニケーション、教えあったりして、そうすることでキャラクター(あのイルカ)が成長したりすると面白いねということで作りました。

あのイルカ。つぶらな瞳のこの子はメンバによる手書きです！
![BoZBfCYIgAAspNs.jpg](https://qiita-image-store.s3.amazonaws.com/0/25990/2f4351a2-fa71-f99a-2ab9-cca01bd4ac35.jpeg)

この時は特別にHybridcastに対応したテレビ、そして本当は勝手に変えられないWebコンテンツの配信先のサーバーを任意に設定できるようにしてもらいました。
接続先はMicrosoft様よりAzureを使わせていただき、そこにASP.NET MVCのアプリを配置、チャット機能はSignalRで実装しました。

そんなわけで、WebサイトはともかくまずテレビがHybridcastに対応していなければならないというカベ、そして配信先サーバーは勝手に変えられない(自宅のはどうにかすればいけるかもしれませんが、他の人の家はさすがに無理)という断崖により、iPhoneやAndroidアプリのように「俺の開発したアプリをみんなのテレビに配信だ！」とはいかない状況なのです。

※テレビ内のブラウザの実装がメーカーごとに謎、また民放の場合HybridcastしちゃうとCMみなくね？みたいな政治的な問題もゴニョゴニョしたりするそうで、実際の事情はもっと複雑みたい・・・

## Hybridcastの今後
なんだ結局無理なんか、とあきらめる・・・にはまだ早いと思います。
このNHKハッカソンで優勝したチームは[5sec GIF NEWS](http://www.nhk.or.jp/kokusaihoudou/hackathon/winning.html)というニュース映像を5秒でわかるGitアニメにまとめるというものだったのですが、これはNHK内部でしか使用できない、放送内容をキャプチャした映像を取り出せるAPIを使用していました。

もしかしたら、この受賞を機にこのAPIは公開APIになるかもしれません。
私たち開発者が、こうしたAPIがあればこんなことができる、こんな可能性がある、と提示することが風向きをちょっと変えたり、中で動こうとしてくださっている方の力になることもあるんじゃないかと思います。

この記事でもなんでも、Hybridcastがスゲェ！という機運が高まればアプリマーケットの検討がされたりということもあるかもしれません。そういう意味では、Hybridcastの将来をにぎっているのはあなたである！と言っても過言ではない・・・と思います。

テレビ上で自分のアプリが動くというのは、思いのほか感動するものでした。
また、リモコンのボタンでイルカがピコピコしたりイェーなスタンプが送れたりといった単純な機能でも、それが目の前のテレビで動くというのは思わず自分で遊んじゃうくらい楽しかったです。

![Boc7uhpIIAEL2Qe.jpg](https://qiita-image-store.s3.amazonaws.com/0/25990/ff13565f-1a52-449b-77a4-527d60f3a1b9.jpeg)

いつかHybridcastが一開発者の手に届くその日を夢見る今日この頃です。

追記：
待ちきれない、という方のためにYouTube上で同じようなことができる[Chrome拡張のサンプル](https://github.com/icoxfog417/YourHybridcast)を作ってみました。
まだ試験中ですが、感じをつかむためのサンプルにはなると思います。
ブラッディ・マンデイみたいになる夢を抱いて

本日までに
コンパイルエラーの嵐に心折れながら・・・
その折れた心を癒すべく
ブラッディ・マンデイ見て中二病心をくすぐられながら（笑）

一応、明解Ｃ言語Ｐ５２までおわらせたぞーー！！
なんで一応かというと
ここまで完璧に理解できてるか？と聞かれたらＮＯ！！だからです（笑）

一番感動したのはif文のp40 非0の判定(0か0でないか)
のところです。
なんていうんですかね二進法の考え方？なんですが
if()のところに数字を入れるだけで
0か0でないかを判断できるんです！！

はいちょっと驚くほど説明不足ですね（笑）
とにかく簡潔に言うと感動しました！！

ブラッディ・マンデイみたいに出来るようになるぞー（完璧ドラマにやられたなこれ）
Macセットアップメモ


## install

* Google Chrome
* Kobito
* Command Line Tools for Xcode
* Alfred　[リンク](https://www.alfredapp.com/)
* Homebrew [リンク](https://brew.sh/index_ja.html)
* git `brew install git`
* PyCharm CE
* SublimeText



## configuration

* コンピュータ名の変更
> システム環境設定>共有

* git ssh key, `git config`
Cygwin＆gnuplot環境構築

Windows上にLinux環境を構築するCygwinの導入から、Cygwin上にグラフ描画ソフトであるgnuplotをインストールするまでの手順を私のブログにまとめてみました。↓
http://infotech776.blog.fc2.com/blog-entry-56.html
良かったら参考にしてください！
TitaniumでHTTPリクエスト



# HTTPリクエストの送信及びレスポンスの処理

setOnload, setOnerrorでHTTPレスポンス受信時に呼ばれるコールバックが指定できる。
ステータスコード200以外でonload関数が呼ばれるのかはまだ不明。

```javascript:http_post.js
	var json_body = { hoge : "foo" }; 
    var client = Ti.Network.createHTTPClient();
    client.open("GET", "http://www.example.com/");
	client.setOnload(function(){
		if(this.status == 200)
		{
			alert(this.responseText);
		}
	});
	client.setOnerror(function(){
		alert(this.responseText);
	});
    client.send(json_body);
```


# Basic認証

以下のように自分でAuthorizationヘッダーを設定してあげればいい。
openを呼び出した後じゃないとsetRequestHeaderが効かない(かも)。

```javascript:http_req_basic.js
	var username = "username";
	var password = "password";
    var client = Ti.Network.createHTTPClient();
    client.open("GET", "http://www.example.com/");
    client.setRequestHeader(
      'Authorization', 
      'Basic ' + Ti.Utils.base64encode(username+':'+password));
    client.send();
```

# JSONをPOST

JSON.stringifyしなくても勝手にやってくれるっぽい。

```javascript:http_post.js
	var json_body = { hoge : "foo" }; 
    var client = Ti.Network.createHTTPClient();
    client.open("POST", "http://www.example.com/");
    client.send(json_body);
```
railsのmodelでGeocoderを使う

google map apiをrubyで使う方法を探していました。
すると、Geocoderというgemを使うと、モデル内で緯度経度を取得できることが分かりました。
この方法が便利だったので共有します。

##使い方

````none:Gemfile
  gem 'geocoder'
````

`latitude`と`longitude`を持つ`store`を例に説明を進めます。
`bundle exec rails g model store latitude:float longitude:float`


````app/model/store.rb
  geocoded_by :address, :latitude, :longitude
  before_validation :geocode

  def address
    "福岡市中央区天神"
  end
````
上記の設定で`@store.valid?`や`@store.save`などを呼ぶと、`latitude`と`longitude`に`address`の緯度と経度が入ります。

##緯度経度に別のカラム名を使いたい場合
`lat`と`lng`を持つ`store`を例に説明を進めます。
`bundle exec rails g model store lat:float lng:float`

````app/model/store.rb
  geocoded_by :address, latitude: :lat, longitude: :lng
````

上記のように記述することで、緯度と経度の代入先を指定できます。

以上です。
おかしいところがあれば指摘していただけると嬉しいです。

http://www.rubygeocoder.com/
https://github.com/alexreisner/geocoder
即売会サービスを作ろう１０(AndEngine編)



![Screenshot_2014-05-31-19-45-16.png](https://qiita-image-store.s3.amazonaws.com/0/2029/63acc12a-d9b0-9e58-c5c8-2bbb214b3136.png "Screenshot_2014-05-31-19-45-16.png")

今回はAndEngineを組み込んでクォータービューでサーバから取得した情報どおりに床をレンダリングするようにしました。
https://github.com/nagai/freemarket/tree/20140517






## クォータービューについて



![名称未設定 1.png](https://qiita-image-store.s3.amazonaws.com/0/2029/ed025308-76ea-2d52-ce15-eac2e4a0b501.png "名称未設定 1.png")

今回のアプリはプログラム内部では昔のドラクエのようなトップビューで管理していて
レンダリングする直前にクォータービューに変換してます。

トップビューからクォータービューへ変換および、クォータービューからトップビューへ変換は以下のように実装してます

```Java
        // トップビューからクォータービューへ座標変換する
        // →↓　にx,yが増えていく座標系
        // 右上,右下にx,y が増えていく座標系
        public static Point convertQuarterViewFromTopView( Point top ){	
        	Point q = new Point();
        	
        	q.x = (top.x + top.y);
        	q.y = (-top.x + top.y)/2;
       	
        	return q;
        }
        
        public static Point convertTopViewFromQuarterView( Point q ){	
        	Point top = new Point();
        	
        	top.x = q.x/2 - q.y;
        	top.y = q.x/2 + q.y;
       	
        	return top;
        }  

```

どうやってこの式になったかといえば、トップビューのチップとクォータービューのチップは変換できるわけで
クォータービューのチップの頂点座標からクォータービューの四隅になるように導いてます。
行列、三角関数をつかってもできますが今回はわりと強引にやりました。


次回はフリックでホールのスクロールができるようにします。
外部アプリ起動Intent発行まとめ

# Intentとは何か？
アプリ間でデータの受け渡し、連携が出来るAndroidの仕組み。
端末内では、色んなIntentが発行されている。

例えば・・・
・バッテリーの値が変化した
・充電器が接続された
・端末の電源が入った
・端末のロックを解除した
・ブラウザで〇〇ってページ開いてー
・こんな形式のファイル開けるアプリいない？

といったIntentが端末やアプリから発行されている
もちろん自作アプリで特定のIntentが送られた場合、それトリガーに何か処理を行うといった事も可能です。

# 暗黙的・明示的Intentとは？

## 暗黙的Intent
暗黙的Intentが発行された場合、発行した時点でそのIntentが受け取れるアプリ一覧が表示されます。
URLをタッチしたら、端末内のブラウザ一覧が表示されたことはありますよね？
あれは、暗黙的Intentが発行されています。

「誰かこのURL開けるアプリいない？」
「あ　それ開けるわ」
「こっちもOK〜」
「無理ー！」

といったやり取り端末内があり、処理可能なアプリが一覧などに表示されるわけです。

## 明示的Intent
明示的Intentが発行された場合、特定のActivityやServiceにIntentを送ります。
Activity間で、値を受け渡したりする際に使用します。
class名まで指定してIntentを発行します。

どんな時に使うか
・自作したActivityを起動する
・自作アプリ間で連携をしたい

Intentの内容を明示指定し、１つの特定アプリに値を受け渡したり処理を促します。
これが明示的Intentです。

今回は自分が作成していないアプリ起動のIntentを発行してみます。


# 外部アプリ起動 Intent発行手順まとめ

## そもそもアプリのclass名とかどうやって・・・

ある日、Logcatを見ながら電車に揺られていたのですが、ActivityManagerというTAGがついたLogが出力されていて気になったので色々実験してみました。

端末をPCに接続、EclipseのLogcat画面でLogを出力している状態にしてください。もしくはadb logcatしてください。
そして目立てのアプリを起動してください。

ここでLogをよく確認してみてください。
TAGにActivityManageというTAGがついたLogが出ています。

例えばGoogle+を起動してみます。

I/ActivityManager(  757): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.google.android.apps.plus/.phone.HomeActivity bnds=[282,519][516,781]} from pid 1057

これが発行されているIntentの様です。
※ Nexus5で確認してます。

## ActivityManagerのログからIntentを作成

act・cat・flg・cmpの = の後に注目してください。

act=android.intent.action.MAIN
cat=android.intent.category.LAUNCHER
flg=0x10200000
cmp=com.google.android.apps.plus/.phone.HomeActivity
bnds=[282,519]

bndsが何なのか、特定出来ていません。誰か知っている人がいたら教えてください
ログの内容を１つずつプログラムに当てはめていきます。

cmp=com.google.android.apps.plus/.phone.HomeActivity
ですが、/の後の「.」はcom.google.android.apps.plusが省略されてるということです。
AndroidManefest.xmlでActivityを定義する際にandroid:name=".MainAcitivity"
と記載するのと同じですね。

```java:Intent.java
Intent intent = new Intent(Intent.ACTION_MAIN); //act
intent.setAction("android.intent.category.LAUNCHER") // cat
intent.setClassName("com.google.android.apps.plus",
"com.google.android.apps.plus.phone.HomeActivity"); // cmp 省略せずに書く
intent.setFlgs(0x10200000) //flgs ここはIntentの定数を使用するのがいい
startActivity(intent);
```

これでOKです。startActivityにIntentを渡すとGoogle+のActivityが起動します。

実行するとこんなログが出ていました。
I/ActivityManager(  757): START u0 {act=android.intent.action.MAIN flg=0x10200000 cmp=com.google.android.apps.plus/.phone.HomeActivity} from pid 20121

バージョンの違いによって起動するActivityが違う場合もあります。(Google謹製アプリとか)
気をつけましょう。

以上、こんな力技で起動してみました。
全く関係ないアプリから、違うアプリの設定画面を開いていたりしたので、不思議だったんですがそういった所に使われている様です。