OmniAICreator/Qiita-1.07M huggingface dataset:
[Wordpress] Deploy wordpress


**Upload the file to the**

```bash
# If need zip the wordpress folder to zip file.
zip -r wordpress.zip wordpress

# Use scp to upload the zip file to your user home directory
scp wordpress.zip user@ip-address:~/

# Unzip the file
unzip wordpress.zip

# Move to the /var/www folder
mv wordpress /var/www/
``` 

**Change apache root folder**

Open the file `/etc/httpd/conf/httpd.conf` and edit this to line to the root directory of your wordpress.

```
DocumentRoot "/var/www/wordpress"

<Directory "/var/www/wordpress"
```

**Restart your apache**

```bash
/etc/init.d/httpd restart
```

**Create mysql database**

Enter mysql and create a database for wordpress.

```mysql
create database wordpress;
```

Create a mysql user for wordpress

```mysql
# Create a new user
create user 'wordpress'@'localhost' identified by 'password'

# Grant wordpress database to this user
grant all on wordpress.* to 'wordpress'@'localhost';
```

**Change wordpress config sample file name**

If you have some problem that wordpress can not write wp-config.php, try this.

```bash
cd /var/www/wordpress
mv wp-config-sample.php wp-config.php
# Also not forget to change wp-config.php content.
```

*Now enter your ip address then follow the guid of wordpress to config your wordpress*
初心者向け　プログラミングの標準入力、標準出力がわかる参考サイト

##標準入力、出力でつまづく
プログラマー転職サイトに、[paiza](http://paiza.jp/guide/keisai)というサービスがあります。このサービスは、「エンジニアは、技術力で評価されるべきである」という理念にしたがって、履歴書、自己PR、職務経歴書は一切不要。言語ごとに問題を解き、回答したコードによってランクが決定。自身のレベルで応募可能な会社の門が開かれていくというのが特徴です。

試しに2月21日に登録してみたのですが、問題を解く前の段階の「好きな言語で標準入力、標準出力、標準エラーを書いてみよう」というでつまづきました。なぜなら、初心者にとって初めて聞く単語だったからです。そこで、標準入力、標準出力についてわかったこと、参考サイトを紹介します。

##標準入力、標準出力についてわかったこと
前提として、これらはOS系で使われるそうです。なので、JavaScriptのような言語を使っていると、縁がないようです。<br>
1、標準入力とは、基本は、PCであったりの端末のキーボードを通した入力のことだそうです。プログラミングの命令をすることを、標準入力というのかもしれません。
2、標準出力とは、キーボードを通して入力されたモノを表示する出力先のことだそうです。基本は、PC、スマホの画面が標準出力先となりますが、標準出力先をファイルにして命令したプログラミングの結果をファイルに保存することができるとあります。

##まとめ
コメント欄で、標準入力についてのオススメのドキュメントを教えていただきました。ありがとうございます。丁寧に理解するには、これを読んだ方が良さそうです。

##参考サイト
[図解：標準入力、標準出力、標準エラー出力、パイプとは ?](http://www.creatology.jp/unix/outin.html#err)
[AdminWeb 標準入力をファイルから入力](http://www.adminweb.jp/command/redirect/index4.html)
[標準入出力](http://wisdom.sakura.ne.jp/programming/c/c44.html)
要素のイベントリスナーを取得する

ChromeのDevToolsだと`getEventListeners()`というのが使えて、要素を渡すとイベントリスナーを返してくれる。

![getEventListeners.png](https://qiita-image-store.s3.amazonaws.com/0/5538/576cf405-87d3-1ca8-58fb-ca73be79181c.png)

## 合わせて読みたい

- http://d.hatena.ne.jp/teramako/20130213/p1
- https://developer.chrome.com/devtools/docs/commandline-api
- http://qiita.com/zaru/items/b7732ebad9b732518359
CoffeeScriptでnodeのshebang(シバン、シェバン)を書く方法

node.jsでコマンドラインアプリケーション等を作って、コマンドを実行させる方法です。  
CoffeeScriptを直接実行する場合はファイルの１行目にshebangを書くだけです。  
（もちろんchmodして実行権限を与える必要があります）

```coffee:app.coffee
#!/usr/bin/env coffee
```

しかし実際には開発段階でJavaScriptにコンパイルして、nodeで実行させるのが普通だと思います。 
なのでshebangをnodeに変えてみます。

```coffee:app.coffee
#!/usr/bin/env node
```
 
ここで問題になるのが「CoffeeScriptで#から始まる行はコンパイル時に消去される」ということです。

## 対処法その１: 逆クォート(backquote)を使う

まず、普通にコンパイルすると全体を関数として閉じ込めて`call(this)`する形になりますのでshebangが１行目になりません。  
この対処の為にbareモードでコンパイルする必要があります。  
例えばgulpを使っている場合は以下の様にします。

```
coffee({bare: true})
```

次に、shebangをそのまま残す方法です。

```coffee:app.coffee
`#!/usr/bin/env node
```
最初に逆クォートを入れることでちゃんとコンパイルされます。  
しかしエディタの環境によっては以降の行が全て文字列と認識されてシンタックスハイライトが上手く表示できない場合があります。とても気持ち悪いです。

```coffee:app.coffee
`#!/usr/bin/env node`
```

上記のように逆クォートで囲むことで解決できますが、CoffeeLintを使っていると警告が出ます。  
これも気持ち悪いです。

## 対処法その２: 

実行するファイルが`app.coffee`をコンパイルした`app.js`だとします。  
この`app.js`を呼び出すファイルをjsで書くことで解決できます。  
「coffee書きたいんだよ！jsなんて直接書きたくないんだよ！」という人もほんの２行だけなのでガマンしてください。

```js:run.js
#!/usr/bin/env node
require('../js/app')
```
普通にshebangを書いて普通にrequireするだけです。パスは環境に応じて書き換えてください。  
gulp等で自動でコンパイルされる環境の方は、間違っても`run.coffee`を作って上書きしないように注意してください。
Shellについて考えたこと

いくつか感じたことを書きます。一部は本などの受け売りも入っているかもしれません。

# 自信がなければ #!/bin/sh とは書かず #!/bin/bash のように明示的に指定する

シェバンの #!/bin/sh は環境によって大きく異なるものを指します。
もしこの記述を「今」するのであれば、POSIX shellの挙動に合わせるという意思があるときだけにしたほうが良いと思います。

この説明でまゆをひそめる人であれば、逆に#!/bin/bash の1行を読んだ時にその意図を外すことはないはずです。

# 自信がなければ、記述時点で使った実行環境が分かるようにする

あくまで人向けのメモというレベルであって、#!/bin/bashのように実行環境を縛る目的では使えません。しかし、コードの利用者やあなたの記事の読者、とくにShellの扱いに秀でている人には良いヒントになると思います。

Bashですら、バージョン3と4で挙動が違います。連想配列を使っているコードで #!/bin/bash と書かれていても、Bash 3系では利用できません。

http://wiki.bash-hackers.org/bash4

ではBash 3などという古いものを使ってるUnix系環境がこれを読んでいる大半の読者の近くにあるのか、と言いますと、あります。OS X 10.10.2 です。

```
$ /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.
```

＃もともとこの記事のきっかけになったのは、納品環境がLinuxな中、Mac内に仮想サーバ環境を含む実験環境を整えたいと思ったからでした。

実行時にバージョンを見るコードを書くのもよいでしょうが、もし書き手に能力がなければ中途半端に終わるのが常だと思われます。また、スクリプト実行者の個人的な環境(Macならbrewの使い方とPATHの通し方)に大きく結果が左右されます。

http://qiita.com/m-yamashita/items/889c116b92dc0bf4ea7d

readlinkの-fオプションは、BSD系(Mac含む)には今のところないのです。

Windows使いがLinux前提の記事を読んだ時(あるいはその逆)と同じという面はありますね。

# Shellという言葉にまず注意する

人によって色々な含意がある言葉です。広く認知されている単語であるのに、定義が曖昧なまま多くの人が色々な期待を詰め込もうとする場合、注意が必要です。

最新ツールの最新オプションを使って高度なことをすることも指しますし、BSDやAIXでも動くといった互換性の重要性からPOSIX shellの仕様を始めとする保守的なスクリプトを良しとする (kshでもzshでも動く！) 人も同じ言葉で語ることがあります。
ステガノグラフィで遊ぶ

> ステガノグラフィー
> 音声や画像などのデータに秘密のメッセージを埋め込む技術。紙に果汁で字を書いて火にかざすと文字が浮かび上がる「あぶり出し」のデジタル版。

というわけで，簡単に試せるツールのご紹介．

**S-tool** http://bit599.netai.net/s_tools.htm
古いけど，概念を知る分には十分．bmpとかgifとかに埋め込む．

**InvisibleSecrets** http://www.invisiblesecrets.com/
有償．30日は無料．暗号化や圧縮機能もあるが，試用期間中は制限あり．

専用ツールは監視されるので，それでもやろうとする人は，環境に合わせて自作する．．
\\sとか\\tとかでモールス信号にするとか，\\r\\nの使い分けとか，URL，ID，cookie偽装とか，やろうと思えば何でもできそう．

** 代替データストリーム
Windows環境内部であれば、"ALTER"コマンドを使うことで、不可視エリアにデータを書き込むことが可能。（オプション付きでlsすれば見えますが）
この領域は、もともと、ファイル属性を拡張するために作られたもので、例えば、インターネットからダウンロードしたファイルを開くときに警告文がでると思いますが、それを区別するためにこの領域を使っていたりします。

最近では、DLP(DataLossPrevention)関係のソフトで利用しているケースもみますね。（Windows外に出てしまえば無意味ですが・・・）
WebDeployパッケージ作成する際のParameters.xml設定例(appSettings要素)

[デプロイ時にWeb.configに値を設定する Parameters.xml の話](http://qiita.com/kamiyn/items/2311b9cfb7e7a20d5796)

を参考に、appSettings要素に対しての値設定するParameters.xmlを書いてみました。

```xml
<?xml version="1.0" encoding="utf-8" ?>

<parameters>
  <parameter name="appSettings_hoge" description="ほげ">
    <parameterEntry 
      kind="XmlFile"
      defaultValue="hoge"
      scope="\\Web.config$"
      match="//appSettings/add[@key='hoge']/@value" />
  </parameter>
  <parameter name="appSettings_foo" description="ふー">
    <parameterEntry
      kind="XmlFile"
      defaultValue="foo"
      scope="\\Web.config$"
      match="//appSettings/add[@key='foo']/@value" />
  </parameter>
</parameters>
```

これでWebDeployパッケージ作成すると、＜プロジェクト名＞.SetParameters.xmlは以下のような感じになります。

```xml
<?xml version="1.0" encoding="utf-8"?>
<parameters>
  <setParameter name="IIS Web Application Name" value="..." />
  <setParameter name="DefaultConnection-Web.config Connection String" value="..." />
  <setParameter name="appSettings_hoge" value="hoge" />
  <setParameter name="appSettings_foo" value="foo" />
</parameters>
```
[jQuery]フォームの透かし文字をtitleやvalueを使わず設定する

フォームのインプット欄に透かし文字を入れるのにvalueやtitle属性を使うプラグインは多いのですが、それだと不都合な場合は以下のコードで対応しています。

今回、HTML5のplaceholeder属性は無視しています。

~~※入力欄に入力した状態で送信→ブラウザの戻る機能で戻った時は、*透かし文字が消えず*文字がかぶってしまう状態ですので、戻る可能性がある際はご注意ください。~~
ページ戻りに対応しました。

**jQuery**

```js
$(function() {
	var wmText = ".watermark_text";	//透かし文字（テキスト）
	var wmCell = ".watermark";		//透かし文字を入れる入力欄(inputやtextareaなど)

	// 透かし文字をクリックした際の処理
	$(wmText).click(function(){
		$(this).addClass("hidden");
		$(this).parent().children(wmCell).focus();
	});

	$(wmCell).each(function(){
		//テキストボックスの値が空でなければ透かし文字を非表示に
		if ($(this).val() !== '') {
			$(this).parent().children(wmText).addClass('hidden');
		}

		// テキストボックスをフォーカス・ブラーした際の処理
		$(this).focus(function(){
			var wmText_on = $(this).parent().children(wmText);
			$(wmText_on,this).addClass("hidden");
		}).blur(function(){
			var wmText_on = $(this).parent().children(wmText);
			if($(this).val()== ""){
				$(wmText_on,this).removeClass("hidden");
			};
		});

	});
});
```


**HTML**

```html
<div>
	<span class="watermark_text">例）ここに透かしたい文字を入れます</span>
	<input class="watermark">
</div>
```

**CSS**

```css
/* 親要素 */
div {
	position:relative;
}

/* 透かし文字 */
.watermark_text {
	position:absolute; 	/* これを入れないと入力欄にかぶりません */
	padding: 5px; 		/* 透かし文字を自然な位置に置くため適当なpaddingを入れます */
	color: #999; 		/* 透かし文字なので薄めの文字色がいいかもしれません。お好みで。 */
}

/* 透かし文字を非表示にするためのclass */
.hidden {
	visibility: hidden;
}
```
Livetサンプル用、プロパティ定義コードスニペット

#初めに
[MVVMパターンのシンプルなサンプル（Livet + ReactiveProperty)](https://code.msdn.microsoft.com/windowsdesktop/MVVMLivet-ReactiveProperty-d120525d#content)を見て勉強したが、プロパティの定義が面倒。
このサンプルでは、「ReactiveProperty」を使えばもっと簡単にプロパティを定義できるのになぜかSampleを見るとSetのところが結構な行数を書かなければいけない。
Livet用のコードスニペットを作成した。
#サンプル
```xml+lasso
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets
    xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Livet プロパティ作成</Title>
            <Shortcut>mylprop</Shortcut>
            <Description>NotificationObject のプロパティを作成</Description>
        </Header>
        <Snippet>
            <Declarations>
              <Object>
                <ID>Name</ID>
                <ToolTip>プロパティの名前で置き換える</ToolTip>
                <Default>PropName</Default>
              </Object>
              <Object>
                <ID>Type</ID>
                <ToolTip>プロパティの型を置き換える</ToolTip>
                <Default>int</Default>
              </Object>
            </Declarations>
            <Code Language="CSharp">
                <![CDATA[private $Type$ _$Name$; 
        public $Type$ $Name$
        { 
            get { return _$Name$; } 
            set 
            {  
                if (_$Name$ == value) 
                    return; 
                _$Name$ = value; 
                RaisePropertyChanged("$Name$"); 
            } 
        } ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>
```
String.Indexを使った文字列処理


# String.Index

Stringの中のそれぞれの文字(Character型)にアクセスするにはString.Index型の値を使用する。
StringはCharacterの双方向リストで構成されており、ランダムアクセスはに時間がかかる。

# Indexを取得する

文字列からそのIndexを取得する場合は、まずstartIndexもしくはendIndexプロパティで最初か最後のIndexを取得する。

n番目のIndexを文字列から直接取得することはできない

```Swift
let str = "ABCDEF"
let startIndex = str.startIndex // 文字列の最初のIndexを取得
let endIndex = str.endIndex     // 文字列中の最後のIndexを取得

```

# Indexを進める、戻る

文字列からn番目のIndexを直接取得することはできず、startIndex/endIndexから順々に辿って目的のIndexを得る。


## Indexを次に進める/一つ前に戻る
```Swift
let str = "ABCDEF"
let startIndex = str.startIndex
let nextIndex = startIndex.successor()    // 次のIndexを取得する
let startIndex2 = nextIndex.predecessor() // 一つ前のIndexを取得する

```

## n個先のIndexを取得する

advance()という関数を使う

```Swift
let str = "ABCDEF"
let startIndex = str.startIndex
let idx4 = advance(startIndex, 4) // startIndexから3つ先にすすめる
```

# Indexから文字を取得

Indexを使って以下のように対応する文字を取得することができる

```Swift
let str = "ABC"
let idx0 = str.startIndex
let idx1 = idx0.successor()
let idx2 = idx1.successor()
str[idx0] // => 'A' Character型
str[idx1] // => 'B' Character型
srt[idx2] // => 'C' Character型
```

またfor文を使って文字をIterateすることもできる

```Swift
let str = "ABC"
for s in str{
    println("s \(s)")
}
//結果
//s A
//s B
//s C
```

# 部分文字列を取得

Stringから部分文字列を取得するメソッドは以下が用意されている

```swift
    // index位置（を含む）から文字列の最後までの部分文字列を返す
    func substringFromIndex(index: String.Index) -> String

    // 文字列のはじめからindex位置の前までの部分文字列を返す
    // index位置の文字は含まない
    func substringToIndex(index: String.Index) -> String

    // 与えられたindexの範囲の部分文字列を返す
    func substringWithRange(aRange: Range<String.Index>) -> String

```


使用例

```Swift
let str = "ABC"
let idx0 = str.startIndex
let idx1 = idx0.successor()
let idx2 = idx1.successor()

str.substringFromIndex(idx1) // => "BC"
str.substringToIndex(idx2)   // => "AB"

// idx1は含むがidx2は含まれない
str.substringWithRange(Range(start: idx1, end: idx2)) // => "B"

// idx1もidx2も両方含まれる
str.substringWithRange(idx1...idx2) // => "BC"

// idx1は含むがidx2は含まれない
str.substringWithRange(idx1..<idx2) // => "B"

// str.substringWithRange(idx1..idx2)　=> コンパイルエラー（半閉空間の指定の演算子は..<)


```
リンクをキーボードだけで手早く踏むTips


まあTabを押してりゃそのうち踏めるんだけど、昨今のWebページは画像だの広告だので溢れてて、Tabだけだといつまでかかるかわからないことが多い。
そんなときの手順。

stackoverflowかなんかで見かけたのだけど、URLはどっかいってしまった。。ので、オリジナルではないですとだけ。

ちなみにChromeでしかやってない。

- Ctrl+F でリンクが貼られているキーワードを検索する
- 目的のリンクにフォーカスが飛んだらEsc
- Enter!!!!

おわり。
たまにリンクが文字列と見せかけて画像だったりするとfuckしたくなるけど我慢。
Javaのcloneメソッドの正しい実装方法

`clone`メソッドの実装を行うにはコツが必要なようなのでまとめてみたいと思います。

#cloneメソッドとは
`clone`メソッドとは、Javaの全クラスの親クラスである`Object`クラスが持っているメソッドの一つで、自分自身を複製するという役割を持っています。

#cloneメソッドが必要な理由
自分自身を複製するのであれば、`Hoge a=this;`といった感じに記述すれば良いのではないか、と思われるかもしれません。しかし、Javaにおいて、クラス型の変数に入っているのは、インスタンスの中身への**矢印**(参照)なので、この場合、`a`は`this`と全く同じインスタンスを指しているということになります。そのため、片方のフィールドを操作すると、もう片方のフィールドも書き換わってしまいます。このような事態を避けるために`clone`メソッドを利用する、というわけです。

#Objectクラスのcloneメソッド
##処理手順
`Object`クラスの`clone`メソッドの処理手順を大まかに示すと次のようになります。

1. 複製するインスタンスのサイズを取得
2. 新たなインスタンスの中身を生成
3. 複製元のフィールドを丸ごとコピー

一見すると、これで完全な複製ができる、と思ってしまいますが、実はそうではありません。これは**浅いコピー**と呼ばれ、プリミティブ型の変数は複製されているものの、クラス型の変数は複製されていません。なぜなら、クラス型の変数の複製においては、インスタンスの中身への**矢印**(参照)を複製しているだけだからです。そのため、上で書いたのと同じことが起こってしまいます。
##特徴
`Object`クラスの`clone`メソッドは次のような特徴を持っています。

* `protected`修飾子が付いている
* `Clonable`インターフェイスを実装していないインスタンスを複製しようとした場合、`CloneNotSupportedException`が投げられてしまう
* 返り値が`Object`型である

なお、`Clonable`インターフェイスは、**マーカーインタフェース**と呼ばれる、中身が空のインターフェイスで、`Clonable`インターフェイスの場合には、__複製可能である__ということを示しています。

#cloneメソッドの正しい実装方法
以上のことから、`clone`メソッドは次のようにオーバーライドするのが正しいということになります(`Node`クラスは`clone`メソッドが正しくオーバーライドされているクラスとします)。

```Example.java
public class Example implements Cloneable{ //Clonableインターフェイスを実装
    private static Node u; //クラス型static変数(static変数は元々インスタンスの中身がひとつしかないので、浅いコピーで良い)
    private Node s; //クラス型変数
    private int p; //プリミティブ型変数

    /*何らかのメソッドやコンストラクタが入る*/

    @Override
    public Example clone() { //基本的にはpublic修飾子を付け、自分自身の型を返り値とする
        Example b=null;

        /*ObjectクラスのcloneメソッドはCloneNotSupportedExceptionを投げる可能性があるので、try-catch文で記述(呼び出し元に投げても良い)*/
        try {
            b=(Example)super.clone(); //親クラスのcloneメソッドを呼び出す(親クラスの型で返ってくるので、自分自身の型でのキャストを忘れないようにする)
            b.s=this.s.clone(); //親クラスのcloneメソッドで深いコピー(複製先のクラス型変数と複製元のクラス型変数で指しているインスタンスの中身が違うコピー)がなされていないクラス型変数をその変数のcloneメソッドで複製し、複製先のクラス型変数に代入
        }catch (Exception e){
            e.printStackTrace();
        }
        return b;
    }
}
```

#関連記事
* [Javaのcloneメソッド考察 - Qiita](http://qiita.com/uger/items/255de3454ea3327211d3#_reference-3eea29e1395c60c1f323)
* [JavaのStringについて - Qiita](http://qiita.com/SUZUKI_Masaya/items/47bb767aaef40a51b400)

#参考文献
* [正しい clone() の書き方 : kei@sodan](http://funini.com/kei/java/clone.shtml)
* [スッキリわかるJava入門 実践編 第2版(中山 清喬・著)](http://www.amazon.co.jp/dp/4844336770/ref=pd_lpo_sbs_dp_ss_2?pf_rd_p=187205609&pf_rd_s=lpo-top-stripe&pf_rd_t=201&pf_rd_i=4844330861&pf_rd_m=AN1VRQENFRJN5&pf_rd_r=1PFQT5YXDT5MVT7M888W)
今日から使えるPowerShellメモ

Powershellを使うにあたってこれぐらい知っておけばなんとなとく使える内容を集めたメモ

参考サイト：
http://codezine.jp/article/corner/10

###echo
Write-Host "hoge"

###コマンドレット一覧取得
Get-Command

###service取得
Get-Service

###ヘルプ
Write-Host -?
Get-Help Write-Host

###プロパティ表示
Get-Member
 alias: gm 
Get-Member -MemberType Method
Get-Member -MemberType Property

###特定のプロパティ表示
Select-Object(select)

###プロパティを一覧で表示
Format-List(fl) 
Get-Command | fl


###プロパティフィルタ
where-object
select-objectのエイリアスを表示したい場合
get-alias | where-object {$_.definition -match "select-object"}
{} はスクリプトブロック
$_はパイプで渡されたオブジェクトをさす
-eq 等しい
-match 正規表現
-like ワイルドカードよる比較


###イベントログ取得
Get-Eventlog -logname system


###グルーピング
Get-ChildItem *.* | Group-Object Extension
Group-Object(group)


###スクリプト実行ポリシ変更
Powershellスクリプトを実行するためにはポリシを変更する必要がある
Get-ExecutionPolicy


###コマンドライン引数
先頭の引数が$args[0]で受け取れる　


###定義されている関数一覧を取得
Get-ChildItem Function:


###変数
\$v = "value"
型を明示して宣言
\[int]$v = 10

\[int]$v = "hoge" => エラー


###制御文
foreach ($i in 1..10){ ... }
if(条件){}elseif(条件)else{}
for (<初期化>; <条件>; <繰り返し処理>)
while (条件){}

例外処理
trap [<例外の種類>]
{
    trap文本体
}

###演算子
基本的な演算はその他の言語やシェルと似てるので省略
-replace 置換
-is 型演算
-contains コレクションに指定したものが包含


###自動変数
Powershell内で暗黙に定義される変数
help about_automatic_variables | more


###関数定義
function global:Hello{
 write-host "hello world"
}
外から呼べるようにするにはglobal:をつける必要あり

###プロファイル
Powershell起動時に読み込まれるファイル
PS > $profile
C:\Users\XXX\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1


###スクリプトブロック

\$s = {$a + 3}

ブロック実行
& $s


###エラー処理
$Errorにエラー内容が配列で保存される

$? 最後に実行したコマンドの終了状態

ErrorAction
 Get-ChildItem Hoge -ErrorAction "continue"　そのまま出力
 Get-ChildItem Hoge -ErrorAction "silentlycontinue"　エラー表示しない
Get-ChildItem Hoge -ErrorAction "stop"　処理を中止

デフォルトエラーアクションの設定
$ErrorActionPreference = "silentlycontinue"


###デバッグ
Write-Debug　$DebugPreferenceシェル変数によって表示制御

Set-PSDebug -trace 1;　スクリプトのトレースを行う
Set-PSDebug -Strict 未定義の変数をエラーにする
Set-PSDebug -Step ステップ実行

$host.EnterNestedPrompt()   ブレークポイント
Atom でタブを消す CSS

『[Atomで開いてるタブを縦に並べるCSS](http://qiita.com/mizchi/items/d5c5c52b67d4c8814ba2)』を読んで。

ぼくはもうタブを消している。

```css
.tab-bar {
  display: none;
}
```

元 Vimmer のぼくには「 Pane ごとにタブ (Item) を持つ」という Atom の構造をどうしても受け入れられなかった。慣れるのを諦めて、もうタブを消してしまった。バッファの検索などは存在するし、特に困っていない。画面領域が広がってライフチェンジンだ。

念のため Vimmer 向けに説明すると Atom の Pane は Vim でいうと Window に近いもので、画面分割の単位である。デフォルトでは Pane ごとにタブが表示されている。
PHPでStrategyパターン

GoFパターンの中でも特に有名なStrategyパターンについておさらいします。

>strategyという単語は「戦略」「作戦」「方針」「方策」などの意味があります。
Strategyパターンは、この「作戦」や「戦略」を1つのクラスにまとめ、「作戦」や「戦略」の単位で切り替えられるようにするパターンです。

活用例としてはxmlとcsvにようにファイル形式が違う読み込みを行うとき、同じロジックでA社のAPIとB社のAPIを使う可能性があるとき、などなど、大枠の使用用途は決まっているものの、詳細までは決まっていないときなどに柔軟に実装を変えられるようにしたものです。

形は下記のようなかんじです。

![20100822162717.png](https://qiita-image-store.s3.amazonaws.com/0/34879/ff0ea440-4025-a41f-f0bc-039e0e666a81.png)

戦略A,B,Cのどれを採用するかわからない場合は、Strategyインターフェースを作成し、大枠の仕様を策定し、ContextクラスからはStrategyインターフェースを実装したクラスを呼び出すようにしておきます。こうすることで、

* 戦略Aを採用したい場合

```php
class Client {
   $strategy = new ConcreteStrategyA;
   $context = new Context($strategy);
   $context->doMethod1();
   $context->doMethod2();
   …
}
```

* 戦略Bを採用したい場合

```php
class Client {
   $strategy = new ConcreteStrategyB;
   $context = new Context($strategy);
   $context->doMethod1();
   $context->doMethod2();
   …
}
```

* 戦略Cを採用したい場合

```php
class Client {
   $strategy = new ConcreteStrategyC;
   $context = new Context($strategy);
   $context->doMethod1();
   $context->doMethod2();
   …
}
```

のようにすることができ、クライアント側の変更部分は`new ConcreteStrategyX`の部分だけでよくなります。
ここで一旦全体をみてみると、ぱっと見`$context`がいらなそうにみえます。

* 戦略Aを採用したい場合

```php
class Client {
   $strategy = new ConcreteStrategyA;
   $strategy->doMethod1();
   $strategy->doMethod2();
   …
}
```

これでも良さそうに思えます。しかしこれだと`doMethod1()`が戦略B,Cにも実装されている保証がないので、`new ConcreteStrategyX`の部分を編集するだけでは不十分で、`doMethod1()`、`doMethod2()` が
各戦略クラスに実装されていることを確認しなくてはいけなくなってしまいます。こういった状況を`Client`は`ConcreteStrategyA`に依存している、といいますが、特定の実装に対して依存しないようにするために作られたのが`context class`です。

さて、話を本題に戻して、Strategyパターンの例をみていきます。今回は特定文字列のハッシュ値を求めたいんだけど、いろんな方法があって、まだ実装はきまっていないです、企画次第です、みたいな状況を想定しようと思います。

まずそれぞれの実装を見ていきます。

```php:getHashByMd5.php
class getHashByMd5 implements hashInterface
{
   public function getHash($str)
   {
      return md5($str);
   }
}
```

```php:getHashBySha1.php
class getHashBySha1 implements hashInterface
{
   public function getHash($str)
   {
      return sha1($str);
   }
}
```

これらは`hashInterface`を実装しています。

```php:hashInterface
class hashInterface()
{
   public function getHash($str);
}
```

つぎに依存関係を解消するcontextクラスです。

```php:hashContext.php
class hashContext
{
   private $strategy;

   public function __construct($strategy)
   {
      $this->strategy = $strategy;
   }

   public function getHash($str)
   {
      return $this->strategy->getHash($str);
   }
}
```

最後にこれらを利用するクライアントです。

```php:Client.php
// md5でhash値を得たいとき
class Client 
{
   $strategy = new getHashByMd5;
   $hashContext = new hashContext($strategy);
   var_dump($hashContext->getHash('sample text'));
}

// sha1でhash値を得たいとき
class Client 
{
   $strategy = new getHashBySha1;
   $hashContext = new hashContext($strategy);
   var_dump($hashContext->getHash('sample text'));
}
```
再帰呼び出しを用いないフィボナッチ数列の計算

#問題
>
フィボナッチ数列の第n項を求めるプログラムを再帰呼出しを用いずに書いて下さい。
ただしnはコマンドライン引数で得るものとします。

※[こちらのサイト](http://vipprog.net/wiki/exercise.html)から引用

#解答
```ruby:fibonacci_number_not_recurrence.rb
# フィボナッチ数列を格納する配列
# 例に従い初項は0,第2項は1
$fibonacchi_array = [0,1]

# 第n項のフィボナッチ数を求めるメソッド
# term_n:求めたいフィボナッチ数列の項数
# 返り値:第n項のフィボナッチ数
def calc_fibonacchi(term_n)
  # 第0項か第1項が指定されたらそのまま返す
  if term_n == 0 || term_n == 1
    $fibonacchi_array[term_n]
  # それ以外だったらterm_1回足し算をする
  else
    (term_n - 1).times do |n|
      # n番目とn+1番目を足し算してn+2番目を求める
      $fibonacchi_array.push($fibonacchi_array[n] + $fibonacchi_array[n + 1])
    end
    
    #配列の最後の要素を返す
    $fibonacchi_array.last
  end
end
  

# 求めたい項数を入力
puts "フィボナッチ数列の第n項を求めます"
print "nをいくつにしますか？ : "
n = gets.to_i

# 第n項のフィボナッチ数列の数を求める
fibonacchi_n = calc_fibonacchi(n)

# 答えを表示
puts "フィボナッチ数列の第#{n}項の数は#{fibonacchi_n}です"
```

#結果
```
フィボナッチ数列の第n項を求めます
nをいくつにしますか？ : 10
フィボナッチ数列の第10項の数は55です
```
AdMob 7.0で「"GADBannerView.h file not found」と言われたときの対処法

```objc
#import "GADBannerView.h"
```
上記のようにBridging-Headerに書いてあったものを、

```objc
#import <GoogleMobileAds/GoogleMobileAds.h>
```
に変更すると、エラーは消えます。
再帰呼び出しを用いたフィボナッチ数列の計算

#問題
>
フィボナッチ数列の第n項を求めるプログラムを再帰呼出しを用いて書いて下さい。
ただしnはコマンドライン引数で得るものとします。

※[こちらのサイト](http://vipprog.net/wiki/exercise.html)から引用

#解答
```ruby:fibonacci_number_recurrence.rb
# フィボナッチ数列を格納する配列
# 例に従い初項は0,第2項は1
$fibonacchi_array = [0,1]

# 第n項のフィボナッチ数を求めるメソッド
# term_n:求めたいフィボナッチ数列の項数
# prev_fibonacchi:1つ前のフィボナッチ数列の数（デフォルトは0）
# current_fibonacchi:現在求まっているフィボナッチ数列の数（デフォルトは1）
# 返り値:第n項のフィボナッチ数
def calc_fibonacchi(term_n, prev_fibonacchi = $fibonacchi_array[0], current_fibonacchi = $fibonacchi_array[1])
  # 第0項が指定されたらそのまま返す
  if term_n == 0
    return $fibonacchi_array[term_n]
  # term_nが1になったら最後の要素を返す
  elsif term_n == 1
    return $fibonacchi_array.last
  end
  
  # 求まっている最新2つの要素を足して配列の最後に加える
  $fibonacchi_array.push(prev_fibonacchi + current_fibonacchi)
  
  # term_nが1になるまで再帰呼び出し
  # prev_fibonacchiとcurrent_fibonacchiは配列の後ろ2つ
  calc_fibonacchi(term_n - 1, $fibonacchi_array[-2], $fibonacchi_array[-1])
end

# 求めたい項数を入力
puts "フィボナッチ数列の第n項を求めます"
print "nをいくつにしますか？ : "
n = gets.to_i

# 第n項のフィボナッチ数列の数を求める
fibonacchi_n = calc_fibonacchi(n)

# 答えを表示
puts "フィボナッチ数列の第#{n}項の数は#{fibonacchi_n}です"
```

#結果
```
フィボナッチ数列の第n項を求めます
nをいくつにしますか？ : 10
フィボナッチ数列の第10項の数は55です
```
RubyでWebAPIを叩く


RubyでWebAPIを叩く際のテンプレコード。
比較的よく書く処理だけど、パラメータの指定やハンドリング処理とかすぐ忘れて毎回調べている気がするのでまとめておく。

## 前提
- WebAPIはJSON形式のデータを返す
- GETメソッドで情報を取得するパターンのみ
- 処理成功時にはHashに変換したデータを出力し、処理失敗時はロガーでログを残して終了する

## コード
```ruby:
require 'net/http'
require 'uri'
require 'json'
require 'logger'

# [ロガー]
# カレントディレクトリのwebapi.logというファイルに出力
logger = Logger.new('./webapi.log')

# [クエリパラメータ]
# URI.encode_www_formを使って「application/x-www-form-urlencoded」形式の文字列に変換
# 文字列はURLエンコードされた形式に変換（半角スペースの"+"への変換等）
#
# （変換例）
# 'bar baz' => 'bar+baz'
# 'あ' => '%E3%81%82'
params = URI.encode_www_form({ param1: 'foo', param2: 'bar baz' , param3: 'あ' })

# [URI]
# URI.parseは与えられたURIからURI::Genericのサブクラスのインスタンスを返す
# -> 今回はHTTPプロトコルなのでURI::HTTPクラスのインスタンスが返される
#
# オブジェクトからは以下のようにして構成要素を取得できる
# uri.scheme => 'http'
# uri.host   => 'mogulla3.com'
# uri.port   => 4567
# uri.path   => ''
# uri.query  => 'param1=foo&param2=bar+baz&param3=%E3%81%82'
uri = URI.parse("http://mogulla3.com:4567?#{params}")

begin
  # [GETリクエスト]
  # Net::HTTP.startでHTTPセッションを開始する
  # 既にセッションが開始している場合はIOErrorが発生
  response = Net::HTTP.start(uri.host, uri.port) do |http|
    # Net::HTTP.open_timeout=で接続時に待つ最大秒数の設定をする
    # タイムアウト時はTimeoutError例外が発生
    http.open_timeout = 5

    # Net::HTTP.read_timeout=で読み込み1回でブロックして良い最大秒数の設定をする
    # デフォルトは60秒
    # タイムアウト時はTimeoutError例外が発生
    http.read_timeout = 10

    # Net::HTTP#getでレスポンスの取得
    # 返り値はNet::HTTPResponseのインスタンス
    http.get(uri.request_uri)
  end

  # [レスポンス処理]
  # 2xx系以外は失敗として終了することにする
  # ※ リダイレクト対応できると良いな..
  #
  # ステータスコードに応じてレスポンスのクラスが異なる
  # 1xx系 => Net::HTTPInformation
  # 2xx系 => Net::HTTPSuccess
  # 3xx系 => Net::HTTPRedirection
  # 4xx系 => Net::HTTPClientError
  # 5xx系 => Net::HTTPServerError
  case response
  # 2xx系
  when Net::HTTPSuccess
    # [JSONパース処理]
    # JSONオブジェクトをHashへパースする
    # JSON::ParserErrorが発生する可能性がある
    p JSON.parse(response.body)
  # 3xx系
  when Net::HTTPRedirection
    # リダイレクト先のレスポンスを取得する際は
    # response['Location']でリダイレクト先のURLを取得してリトライする必要がある
    logger.warn("Redirection: code=#{response.code} message=#{response.message}")
  else
    logger.error("HTTP ERROR: code=#{response.code} message=#{response.message}")
  end

# [エラーハンドリング]
# 各種処理で発生しうるエラーのハンドリング処理
# 各エラーごとにハンドリング処理が書けるようにrescue節は小さい単位で書く
# (ここでは全て同じ処理しか書いていない)
rescue IOError => e
  logger.error(e.message)
rescue TimeoutError => e
  logger.error(e.message)
rescue JSON::ParserError => e
  logger.error(e.message)
rescue => e
  logger.error(e.message)
end
```

## 参考
- [RubyでJSON形式の結果が返ってくるURLをParseする - Qiita](http://qiita.com/awakia/items/bd8c1385115df27c15fa)
- [module URI](http://docs.ruby-lang.org/ja/2.2.0/class/URI.html)
- [class URI::Generic](http://docs.ruby-lang.org/ja/2.2.0/class/URI=3a=3aGeneric.html)
- [class URI::HTTP](http://docs.ruby-lang.org/ja/2.2.0/class/URI=3a=3aHTTP.html)
- [class Net::HTTP](http://docs.ruby-lang.org/ja/2.2.0/class/Net=3a=3aHTTP.html)
- [class Net::HTTPResponse](http://docs.ruby-lang.org/ja/2.2.0/class/Net=3a=3aHTTPResponse.html)
- [library json](http://docs.ruby-lang.org/ja/2.2.0/library/json.html)
【Androidアプリについての質問です！】カメラの回転が端末ごとにバラバラになる場合の対処法はどのように行っていますか？

Androidのカメラアプリを開発しています。

http://qiita.com/fslasht/items/be41e84cfbc4bbb91af7
上記のページ等を参考にさせて頂き組んでいるのですが、カメラの回転方向が端末ごとに異なっているようで、
90°回転している機種や、180°回転している機種など、バラバラになってしまいます。
SurfaceViewの表示は上手くいったかと思えば、bitmapへ保存してimageviewへ表示するとまた回転が変わったり…

現在は判明した機種ごとに分岐を掛けている状態ですが、キリがないです。

調べてみたところ、
`activity android:screenOrientation="landscape" `
で横固定にしてしまうという方法もあるようですが、
今回は、純正のソフトキーを活かした状態で縦固定のものをつくろうと思っているので、
` screenOrientation="portrait" `
を指定して作っています。

開発者の皆様はどのように対処されているのでしょうか。
端末ごとの回転に対応する有効な手段があれば、教えて頂けないでしょうか。



以下がPictureCallback部分のソースです。

```java:MainActivity.java

    //カメラのPictureCallback部分
    private PictureCallback mPictureListener =

        new PictureCallback() {

            @Override
            public void onPictureTaken(byte[] data, Camera camera) {


                // データを生成する
                Bitmap tmp_bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                int width = tmp_bitmap.getWidth();
                int height = tmp_bitmap.getHeight();

                // 画像データを回転する
                int rad_y = radianToDegree(orientationValues[2]);
                Matrix matrix = new Matrix();
                if ((rad_y > -45 && rad_y <= 0) || (rad_y > 0 && rad_y <= 45)) {
                    matrix.setRotate(0);
                } else if (rad_y > 45 && rad_y <= 135) {
                    matrix.setRotate(180);
                } else if ((rad_y > 135 && rad_y <= 180) || (rad_y >= -180 && rad_y <= -135)) {
                    matrix.setRotate(-90);
                } else if (rad_y > -135 && rad_y <= -45) {
                    matrix.setRotate(0);
                }


//上でうまくいかない機種は以下のような感じで、回転を変更しています
String deviceName = Build.DEVICE;

if(deviceName.equals("ここに機種名を入れてます")){
 int rotation = getActivity().getWindowManager().getDefaultDisplay().getRotation();
                    int degrees = 0;
                    switch (rotation) {
                        case Surface.ROTATION_0: degrees = 0; break;
                        case Surface.ROTATION_90: degrees = 90; break;
                        case Surface.ROTATION_180: degrees = 180; break;
                        case Surface.ROTATION_270: degrees = 270; break;
                    }
                    Matrix matrix = new Matrix(); 
                    matrix.setRotate(90-degrees);   
}


                Bitmap bitmap = Bitmap.createBitmap(tmp_bitmap, 0, 0, width, height, matrix, true);



//ここから下は、画像保存などの処理を行っています



            }
        };


```
herokuのPostgreSQLからvps管理のMySQLに移行する

最初に素早く作って素早く公開したアプリがherokuでPostgreSQLを使っていたが、データベースの無料枠を超えてしまって、herokuに課金し続けてとくに問題ない日々を過ごしていたが、アプリを気軽にどんどん増やす環境を作っておきたかったのでアプリ毎に課金する必要が出るのは避けたくなった。

なのでvpsを契約してmysql(いつも使っているので使いやすいため)に移行する方法。RDS使うようにしようって時にもやり方特に変わらんと思う。

[taps](https://github.com/ricardochimal/taps)を使う。

    gem install taps
    taps server mysql://{移行先user}:{移行先pass}@{移行先host}/{移行先database}?encoding=utf8 {一時的なuser} {一時的なpass}
    taps push postgres://{移行元user}:{移行元pass}@{移行元host}/{移行元database} http://{一時的なuser}:{一時的なpass}@localhost:5000

例

    taps server mysql://myaamori@dondondo-natu/musashino-animeshion?encoding=utf8 shiro bako
    taps push postgres://yano@youkan/musashino-animeshion http://shiro:bako@localhost:5000

とかとか。

最初は自分のlocal環境のmysqlに入れて試して、問題なかったので`mysql_dump`でsql出して移行先に入れた。だけど一旦localに入れる必要はなかったと思う。encodingの指定しないと文字化けするっぽい。

postgresの指定は`heroku config`の`DATABASE_URL`の設定そのままでいける。herokuコマンドでtaps使ってるっぽいので割と信頼できる。

あとはアプリのdb接続をmysqlにしたり念のための確認やらバックアップやりなんやらをしておいて

    heroku maintenance:on
    heroku config:add DATABASE_URL=mysql://{移行先user}:{移行先pass}@{移行先host}/{移行先database}
    heroku maintenance:off

でオッケー

vps管理になるので監視とか最適な設定とか必要になるでしょうのでそこら辺は別途いい感じにしましょう。RDSにしたほうが金余分にかかるけど全く意識しないメリットデカイのでそっちでもいいかなぁとか考えたり。

参考 : <a href='http://d.hatena.ne.jp/mat_aki/20100625/1277462239'>手軽にPostgreSQLからMysqlへデータを移行する - mat_akiの日記</a>
R6 class さっそく調査 #rstatsj

昨日の Tokyo.R における [R6 class についての発表](http://www.slideshare.net/__nakamichi__/r6-upload)が素晴らしかった。

プレゼンの最後に質問させて頂いたのだけれど、その点について調査してみた。

- S3 との組み合わせ(特に print)はどうなっているのか？
- サブクラスで再定義しなくてもスーパークラスのメソッドを呼べるのか？

### 1. R6 のインストール

CRAN にアップされているので、インストールは特に難しくない。

```r:R
install.packages("R6")
```

### 2. 基本的な使い方

使い方も特に難しくはない。むしろかなり自然に書ける。

```r:R
library("R6")

Person <- R6Class(
  "Person", 
  private = list(
    name = NA
  ),
  public = list(
    initialize = function(name) { self$set_name(name) },
    set_name = function(name) { private$name <- name },
    get_name = function() { private$name }
  )
)

me <- Person$new("hoxo_m")
me$get_name()
```

```:結果
[1] "hoxo_m"
```

### 3. 参照セマンティクスと環境

R6 の発想のすごいところは、参照セマンティクスを環境で実現しているところ。それを確認してみる。

```r:R
me <- Person$new("hoxo_m")
class(me)
mode(me)
str(me)
```

```:結果
[1] "Person" "R6"   
[1] "environment"
Classes 'Person', 'R6' <environment: 0x0000000008045d38>
```

確かにオブジェクトは環境になっている。
これは、内部で次のような感じで生成しているということ。

```r:R
env <- new.env()
class(env) <- c("Hoge")
class(env)
mode(env)
str(env)
```

```:結果
[1] "Hoge"
[1] "environment"
Class 'Hoge' <environment: 0x00000000079e5b70> 
```

環境にも class を定義できるとは初めて知った。

何がうれしいかというと、R の普通のオブジェクト(listなど)は、変数を再代入するとオブジェクトのコピーが起きる。

```r:R
a <- list(name="hoxo_m")
a2 <- a
a2$name <- "hoxo_m2"
a$name
```

```:結果
[1] "hoxo_m"
```

環境ではこれが起きない。
オブジェクト指向言語としてはこっちの方が自然である。

```r:R
me <- Person$new("hoxo_m")
me2 <- me
me2$set_name("hoxo_m2")
me$get_name()
```

```:結果
[1] "hoxo_m2"
```

### 4. S3 との共生

R6 オブジェクトを `print` するとどうなるだろうか。

```r:R
me <- Person$new("hoxo_m")
print(me)
```

```:結果
<Person>
  Public:
    get_name: function
    initialize: function
    set_name: function
```

ここで、class を確認してみる。

```r:R
[1] "Person" "R6"
```

S3 の `print` には `R6:::print.R6` が定義されており、それが使われているようだ。

ここで、`R6:::print.R6` の中身を確認してみる。

```r:R
> R6:::print.R6
function (x, ...) 
{
    if (is.function(x$print)) {
        x$print()
    }
    else {
...
```

どうやら、オブジェクトに `print` メソッドが定義されている場合、それが使われる仕様となっているようだ。

`Person` を継承して、`print` メソッドを持つ `PersonWithPrint` をクラスを定義してみよう。

```r:R
PersonWithPrint <- R6Class(
  "PersonWithPrint", 
  inherit = Person,
  public = list(
    print = function() {
      print(sprintf("My name is %s.", self$get_name()))
    }
  )
)

me <- PersonWithPrint$new("hoxo_m")
print(me)
```

```:結果
[1] "My name is hoxo_m."
```

S3 でわざわざ定義しなくても、R6 内部に `print` メソッドを持たせることによって、S3 の `print` には対応できることが確認できた。

### 5. 継承

上で書いた `PersonWithPrint` クラスには、`set_name()`, `get_name()` メソッドの定義を書いていない。
これらがちゃんとスーパークラスから継承できているか確認する。

```r:R
me <- PersonWithPrint$new("hoxo_m")

me$get_name()
me$set_name("hoxo_m2")
me$get_name()
```

```:結果
[1] "hoxo_m"
[1] "hoxo_m2"
```

おー、素晴らしい！
内部的にどうやっているのかはわからないが、普通のオブジェクト指向言語の動きを再現できているようだ。

### まとめ

R6、分かりやすいしかなり使えそうですね。

### 追記

@kohske さん作の R6 class 定義で list 書かなくてもいいやつ。

- [R99Class](https://rpubs.com/kohske/27925)

こっちをデフォルトにしてもらいたいですね。

### 参考

[R6パッケージの紹介―機能と実装](http://www.slideshare.net/__nakamichi__/r6-upload)
プログラムを1行も書かずに文書単語行列を作成する方法

1. テキストを準備する
2. ChaKi.NET (http://sourceforge.jp/projects/chaki/releases/) をインストールする
    1. MeCab (https://code.google.com/p/mecab/) や形態素解析辞書も
    2. 係り受け解析をしたければ CaboCha (https://code.google.com/p/cabocha/) も
    3. それぞれ辞書とモデルを
同じ文字コードでインストールすること 
3. ChaKi.NET 用の DB を作成する
    - [ツール]→[Text to Corpus] で Text to Corpus を立ち上げテキストファイルを DB 化
    ![header.png](https://qiita-image-store.s3.amazonaws.com/0/58247/fb5cef5e-6aea-b2cc-8bb8-2175bf5d7ecf.png)
    - ChaKi.NET のパネルではないウィンドウ上にテキストファイルをドラッグアンドドロップしても同じことができる
![import.PNG](https://qiita-image-store.s3.amazonaws.com/0/58247/98731d29-1059-8db0-dbd3-826a7beea3ce.png)
    - 文分割処理などを必要な情報に修正して[実行]
4. Search Conditions パネルの[コーパス]タブの[選択済コーパス]に作成した DB を追加
    - [追加]ボタンを押した後、複数の文書DBを選択 
![search.PNG](https://qiita-image-store.s3.amazonaws.com/0/58247/df11b89d-ceff-6577-4493-fc191e870846.png)
5. Search Conditions パネルで [Tag 検索]タブをクリック
    ‐ 品詞により制約付けしない場合は何も選択しなくてよい
![tag.png](https://qiita-image-store.s3.amazonaws.com/0/58247/d9d89e63-57f0-6319-193a-acd518d97a27.png)
    - 名詞だけで文書単語行列を作成する場合には PartOfSpeech を "^名詞"にする
![tagn.png](https://qiita-image-store.s3.amazonaws.com/0/58247/cce43cc9-6fd8-6aa7-5a78-5ce3ad0751c6.png)
6. Command パネルで[ワードリスト開始]をクリック
    - 結果の表示（デフォルトでは表層形 (Surface)で表示）
    ![result.PNG](https://qiita-image-store.s3.amazonaws.com/0/58247/8e6c0f5f-40a2-d17f-5be3-0052d8ee5343.png)
    - 集計する単位を変更する
        - Base Lexeme を展開する
![image](https://qiita-image-store.s3.amazonaws.com/0/58247/a67b1530-54ca-392d-e6dd-2f9daa10b06f.png)
        - Part of Speech を展開する
![image](https://qiita-image-store.s3.amazonaws.com/0/58247/799fdc26-f930-8a70-e990-605b21e14e75.png)
        - Surface を畳む
![image](https://qiita-image-store.s3.amazonaws.com/0/58247/34676b0d-9513-a1c7-bd26-3010e146ba5c.png)
7. できた文書単語行列は[ファイル]→[Excel/CSVへエクスポート]
![image](https://qiita-image-store.s3.amazonaws.com/0/58247/98d25349-555e-8d67-d0e5-4ac24da10476.png)
8. あとは Excel 上で整形して、Rなどのソフトウェアから読み込めばよい。
iOS開発のenvironment(development, production)設定

Webアプリケーションフレームワークにあるような環境ごとの設定ファイルを、iOS開発でどうすれば良いかわからなかったので、ググりながらまとめた。

# やりたいこと

開発と本番の設定ファイルをわけたい。APIのURLやOAuthの情報など。

# やったこと

## Build Configuration作成

* 開発用とAdHoc用のBuild Configuration作成する
 * 「Duplicate Debug Configuration」→「Dev-Debug」 とする
 * 「Duplicate Release Configuration」→「AdHoc」 とする

![alt](http://i.gyazo.com/f94abe937dfc1c78a7023a5bf0c21568.png)

## Info.plist作成

* Info.plistをコピペして、開発用のDev-Info.plist作成
* 追加したDev-Debug、AdHocのInfo.plistをDev-Info.plistに変更する

![alt](http://i.gyazo.com/53493af468f43a0837a477deea6fd906.png)

## スキーム作成

* デフォルトのスキームをDuplicateして作成

![alt](http://i.gyazo.com/89c3b9a98ffe6daf6b4c129b5033b565.png)

* Build Configuration を変更
 * 「Run」⇒「Dev-Debug」
 * 「Test」⇒「Dev-Debug」
 * 「Profile」⇒「AdHoc」
 * 「Analyze」⇒「Dev-Debug」
 * 「Archive」⇒「AdHoc」

* スキームのSharedにチェック

![alt](http://i.gyazo.com/10cbd4cb5ac8d5ed07d9c2c2fe23c787.png)

## Provisioning Profile

* AdHocにProvisioning Profile指定

![alt](http://i.gyazo.com/47c14cfbe50c9d91a9f5afa068d564ad.png)

## Pod install

新しいスキーム作成する前にpod installするとハマった

```bash
$ pod install
```

# まとめ

* 開発スキームで開発用アプリ、AdHocアプリを開発できる

![alt](http://i.gyazo.com/f2fecbc122a963a749c4410ac0fbb5d7.png)

* 本番アプリは、デフォルトのスキームでビルドする
ボタンの左の値をクリップボードに入れる

## 要件

* 値をマウス操作だけでコピーしたい。
* 書式や改行コードは不要。
* マクロ修正せずにコピペで利用者が対象を増やしていきたい。

![スクリーンショット 2015-02-22 8.08.00.png](https://qiita-image-store.s3.amazonaws.com/0/25728/9fd8067b-ec7c-ea66-509f-1705406d39c5.png)

## マクロ

```vbnet:copy_hidari
Sub copy_hidari()
'
' copy_hidari Macro
'

    Dim xy, hidari
    ' ボタンの座標を取得
    xy = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
    ' ボタンの左の値を取得
    hidari = Range(xy).Offset(0, -1).Value
    ' ボタン押したかわかるように、左のセルを選択しとく。
    Range(xy).Offset(0, -1).Select
    
    ' 値をクリップボードにコピー
    Dim myDO As New DataObject
    myDO.SetText hidari
    myDO.PutInClipboard

End Sub
```

後はこれを画像のようにボタン設置すれば良い。
Unityでプロパティに値をセットしているのに反映されない

こんな感じで書いているのに反映されなくてとても困った。

```csharp:fuga.cs
go.GetComponent<Hoge>().hoge = 123;
```

```csharp:hoge.cs
void Update()
{
    Debug.Log(this.hoge);
}
```

原因はすごい初歩的なことで完全に自分のミスだった。

```csharp:fuga.cs
var go = Resouces.Load<GameObject>("Prefabs/Hoge");
Instantiate(go);
go.GetComponent<Hoge>().hoge = 123;
```

`go`変数を`Instantiate`の戻り値で初期化していなかったためだった。
他の部分ではなにもエラーがでていなかったためどこがおかしいのか全然わからなくて途方にくれていたがこんなところに問題があった。
全然わからなくて詰まってしまったときは気分転換をしてからコードを見直せば何が悪いのかが見えてくると思うので、自戒の意味をこめてこの記事を書いた。
Pepperめも ～アプリチャレンジ落選作品～

#追記
- 説明用の動画がまさかの非公開設定というあなたIT時代の技術者なの？というアレげなミスしてましたので修正…コメントありがとうございますー

#アプリチャレンジ落選
しました。２週間前に。
まあ、半年近い期間があって４日で突貫したモノだったので当然の結末。
…コンセプトは良かったと自分的には信じてます！

#ということでー…
作ったものをアプリチャレンジ決勝前日あたりに公開するべくチマチマ作っていました。（べ、べつに悔しかったとかじゃないからね！）

ホントは今頃ペッパー君は発売されて御家庭に発送されていると思って（いませんでしたけど）いたので、発売日に遊べる（ような状況で発送されるとは１ｍｍくらいしか信じてなかったけど）ローンチを目指して制作しました！

結果は（思った通り）延期でしたけど、さらに５０万円払わないとクラウド音声認識とやらが使えないとか料金プランが裏切りに近い感じで、普及させる気あるのかとヤル気ゲージがミリ残り状態になりかけましたが…
本体価格で手に入れてハックしまくる入口を残してくれた事は良心的なんじゃないかと**割と本気で思い直して**ヤル気ゲージ復活です。
だって自分が感じているペッパー君の面白さは自分で妄想してそれを現実にクリエイトできる所にこそ本質があると思ってるので！

#前置き兼愚痴はおいておいて

アプリコンテストに応募した作品は、

- **PEPPERブロック**

という名前のブラウザアプリです。イワユル最近はやりのHTML5ってやつです。

自分、javascript＆HTML歴は趣味で半年以下程度の実力で、初めてのモバイル向けを目指したので、結構出来は**残念な状態**ですが、**随時更新**してゆくつもりです。

- でもどうが
 - [説明ざっくり](https://www.youtube.com/watch?v=mAVomswVWwg)
 - [入れ忘れた動画](https://www.youtube.com/watch?v=P-A1CBU85Qo)
 - ※結局当日の朝になってしまったので力尽き気味の動画になってます
- [githubのWebページへのリンク](http://haiatto.github.io/pepper_for_qiita/pepper_block/release/index.html)  
 - Chrome以外で試してません。動画の通りiosはios8ならソコソコ動きました。


見た人は気づいたかもしれない。つまりこれはMITメディアラボ制作の**あの世界でうん百万の子供が遊んでいるというスクラッチ**の（とっても劣化）クローンです！
コレグラフがあるじゃない、という意見はナンセンスです。だってあれ、いいものだけど難しいですし。

実際のところは実は元のコンセプト自体はスクラッチクローンではなかったのですけれど、まずは優れたアプリを参考にしてみることで作り始めようという魂胆でオマージュりました。

# 今後の展開
- githubのISSUEチケットとしてやってる作業が乗っかっています。zenhubというのを入れるとカンバンも見れます（たぶん入れるだけで見れるはず）
- まずはiOSのブラウザできっちり動くことを直近の目標に。

# 目指す先は…
鬼が笑うので話半分ですが…

- 気に入った。家に来てうちのペッパーをハックしていいぞ。

とハートマン軍曹張りのハードボイルドに言い放ち、誰でもハック出来る世の中を目指します！
まずはアキバのアルデバランにチビッ子含む老若男女が突撃して、スマフォを取り出し、みんなで、

- おら、足作るだ！
- ぼく、顔動かすー
- ワタクシ腰回りを担当いたしますのよ

てきな気軽さで遊べるオモチャにしてやろうか的なあたりから目指していきますー

# すぺしゃるさんくす
- このアプリ、締切の前日、最後は間に合わず[カラス](http://qiita.com/outlandkarasu@github)君に手伝ってもらったりしました。ありがとう！そして次もよろしくー

さーて観戦に備えて寝なくちゃ…
Googleマップの検索結果をGoogleカレンダーに登録するブックマークレットと拡張

Googleマップで乗り換えルートを検索し、結果を Google カレンダーに登録します（iPhone アプリでならこの操作ができるんですけどね）。

### Chrome 拡張
ブックマークレットの登録が面倒だったので、拡張にして公開しました。
https://chrome.google.com/webstore/detail/maps-to-calendar/lkmbclgjmbhdlfnobgfcapdpbdijhhph

### ブックマークレット
https://gist.github.com/takatama/7957488/
拡張より機能が足りないです。検索結果の「詳細」を表示してから、ブックマークを実行してください。

* 参考: [知ってそうで知らないブックマークレットの仕組みと使い方](http://www.lifehacker.jp/2013/04/130402bookmarklet_matome.html)
knife-zeroでnginx導入 + serverspecでテスト

rubyは2.2.0を使用。

Gemfileで必要なgemをインストールする

```Gemfile
gem "pry"
gem "json" ,'1.8.2'
gem "chef" , '12.0.3'
gem "knife-zero"
gem "berkshelf"
```

インストールが完了したら、実際にクックブックを作成していく。

下記を想定する

前提

・CentOS6.6サーバを用意。IPアドレスとネームサーバのみ設定済み

目標

・SELinuxはOFFにする

・iptablesは、80番ポートと22番ポート、およびICMPのみ受け付ける

・nginxをインストールする

・serverspecでプロセス、リッスンポートの確認をする


#対象サーバにChef Clientのインストール

```
bundle exec knife zero bootstrap 10.3.2.201
```

2つファイル（サーバ情報を記載したjson）ができる

```
[rails@zackey chef-zero]$ ll nodes/rp.local.json
-rw-rw-r-- 1 rails rails 81810  2月 19 20:52 2015 nodes/rp.local.json
[rails@zackey chef-zero]$ ll clients/rp.local.json
-rw-rw-r-- 1 rails rails 514  2月 19 20:52 2015 clients/rp.local.json
```

#適応したいレシピを追加する（run_listへの追加）

```
bundle exec knife node run_list add rp.local iptables
bundle exec knife node run_list add rp.local nginx
bundle exec knife node run_list add rp.local selinux::disabled  #SELINUXをOFFにしたい
```

レシピの編集

iptables/recipes/default.rb

task:テンプレートの順番は関係あるのか？？

```
if node["iptables"]["install_rules"]
  iptables_rule "prefix"
  iptables_rule "all_established"
  iptables_rule "all_icmp"
  iptables_rule "ssh"   #追加
  iptables_rule "http"   #追加
  iptables_rule "postfix"
end

```

追加したテンプレートは

cookbooks/ptables/templates/default/ssh.erb

```
-A FWR -p tcp -m tcp --dport 22 -j ACCEPT

```

cookbooks/ptables/templates/default/http.erb

```
-A FWR -p tcp -m tcp --dport 80 -j ACCEPT

```

#レシピの適用

```
 bundle exec knife zero chef_client 'name:rp.local' --attribute ipaddress
```

#serverspecによる確認

```
#setup serverspec env
gem "serverspec"

```

bundle install後、初期設定

```
[rails@zackey serverspec]$ bundle exec serverspec-init
Select OS type:

  1) UN*X
  2) Windows

Select number: 1

Select a backend type:

  1) SSH
  2) Exec (local)

Select number: 1

Vagrant instance y/n: n
Input target host name: rp.local
 + spec/
 + spec/rp.com/
 + spec/rp.com/sample_spec.rb
 + spec/spec_helper.rb
 + Rakefile
 + .rspec
```

rp.localはhostsで名前解決できるようにしておく。

また.sshの設定で下記を追加
task: rootユーザでよいのか。(ssh時何ユーザでアクセスするのか）

```
[rails@zackey serverspec]$ cat ~/.ssh/config
Host rp.local
  HostName rp.local
  Port 22
  User root
```
今回は公開鍵認証じゃないため、export ASK_SUDO_PASSWORD=1をいれてパスワードを対話形式でいれる

あとは実行

```
bundle exec rake spec

```

```
Package "nginx"
  should be installed

Service "nginx"
  should be enabled
  should be running

Port "80"
  should be listening

Finished in 0.23661 seconds (files took 5.12 seconds to load)
4 examples, 0 failures
```
Eclipseプラグイン開発時のデバッグとビルド方法

Eclipseプラグイン開発の小ネタ

## 開発したプラグインの実行・デバッグ

プロジェクトルートのplugin.xmlを『プラグインのマニフェスト・エディター』で開き、概要タブなどの右上にあるいつもの実行ボタンとデバッグボタンから、作成したプラグインの試験ができる。

![image](https://qiita-image-store.s3.amazonaws.com/0/38957/4e7e8282-2595-6013-260d-39dc6c3f2d41.png)

ボタンを押下すると、作成したプラグイン機能を持ったEclipseが立ち上がるので、そのEclipse上でプラグインの動作を確認することになる。


## 開発したプラグインのビルド

開発が終わったら、同じく上記図の右上にある、デバッグボタン（虫ボタン）の右の「デプロイ可能なプラグインおよびフラグメントのエクスポート」ボタンから、jarファイルを作成することが可能である。

![image](https://qiita-image-store.s3.amazonaws.com/0/38957/194e9269-8ea4-0db6-a821-6a5342d53b2a.png)

指定したディレクトリ配下にpluginsフォルダが作成され、その配下に作成したプラグインのjarファイルが配置される。
Elixirの環境構築をAnsibleのRoleで行う

Elixirをインストールする際、ローカルの開発環境(のMac)であれば

```bash
$ brew update
$ brew install elixir
```

で済むんですが、本番/ステージングサーバーや、Vagrant等の仮想環境にインストールする場合は、以下の様な作業が必要になり、わりかし手間だったりします。もっとライトにやりたいです。

- Erlangをインストール
- Elixirをインストール
- (必要なら)パスを設定
- etc

そこで、良いAnsible(ライトにという事なのでchefは候補から外しました)のRoleが無いかAnsible-Galaxyで探したんですが、

- Erlangをaptでインストールしているのでバージョンアップができない/遅い
- Elixirのバージョンが0.15.0固定(公式のzipを取得/解凍/binに配置)

というものしかなくて(残念ながら2015/2/22時点でこの1つだけ)、ちょっと実運用には耐えられんかなーという事で作成しました。

方針としては

- kerlでErlangのバージョンを指定してインストール
- Githubのelixirリポジトリをcloneして`make install`
- まずはCentOS/Fedora/AmazonLinuxをサポート(Ubuntu/Debianは現在対応中)
- Ansible-Galaxyに公開

という感じでRoleを作成してあります。

https://github.com/ohr486/ansible-elixir
https://galaxy.ansible.com/list#/roles/2930

利用方法は、galaxyからroleをインストールして、roles指定のplaybookを実行するだけです

```bash
$ ansible-galaxy install ohr486.elixir
```

```yaml:install_elixir.yml
- hosts: target-server
  sudo: yes
  roles:
     - { role: ohr486.ansible-elixir, erlang_version: 17.4, elixir_version: v1.0.3 }
```

```bash
$ ansible-playbook install_elixir.yml
```

Vagrant/Docker等と組み合わせると、開発環境構築が捗るのではないでしょうか。
VBS で LinkedList 

# LinkedList

双方向連結リストです。ListItem クラスと LinkedList クラスで構成されています。
https://github.com/asterisk9101/LinkedList

# 特徴
- メモリの許す限り要素を追加できる(一般的なリストと同様)
- EcmaScript の配列と似たメソッド名を持つ。
- 最後にアクセスした要素を内部のポインタに保存するので、付近の要素へのアクセスが高速になる。
    - n 番目の要素にアクセスした後、n + 1 番目の要素へのアクセスが高速に行える。
    - ある要素へのアクセスする際に、最短のアクセス順序(先頭から or 末尾から or ポインタから)を選択する。
- nextItem メソッドでイテレータ的に走査可能。

# 無いもの
- ラムダ式が前提のメソッド(sort, map, filter etc.)。

# API

```vbnet
' 要素の追加と取り出し（ポインタは動かない）

dim list
set list = new LinkedList

call list.push(1) ' 末尾への追加
call list.unshift(true) ' 先頭への追加
call list.insert(1, "a") ' 指定位置への追加

msgbox(list.toString(", ")) ' =>　"True, a, 1"

msgbox list.pop() ' => 1 末尾からの取り出し
msgbox list.shift() ' => True 先頭からの取り出し
msgbox list.remove(0) ' => "a" 指定位置からの取り出し

' ---

call list.push(1)
call list.push(2)
call list.push(3)

' ---




' 要素の参照と書き換え（ポインタが動く）

msgbox list.item(1) ' => 2 ポインタの位置が 1 へ移動する
call list.setElement(1, 10) ' ポインタからアクセスするので高速に動作する
msgbox list.item(1) ' => 10





' イテレータ

dim list2
set list2 = new LinkedList

dim item
list.rewind() ' ポインタの位置を最初に戻す。上で item メソッドを使ったのでポインタが 1 になっている。
do while list.hasNextItem()
    call list2.unshift(item.nextItem())
loop

msgbox list2.toString(", ") ' => "3, 10, 1"

' toArray, clone, length, indexOf, currentItem, concat etc.

```
ฅ(・ω・ฅ){ EA (Emoji Art) でサザンイマジネーション 第1回 お題「 Red => Green => Refactor 」 }

## <i class="fa fa-image" style="font-size:1em;"></i> 概要
Ascii Art ならぬ EA (Emoji Art) で 3 x 3 の絵を作る。

## <i class="fa fa-history" style="font-size:1em;"></i> 経緯
CodeIQ で <i class="fa fa-external-link" style="font-size:1em;"></i> [Emoji-サザンイマジネーション](https://codeiq.jp/ace/tbpgr_badge/q1323)
という問題の出題を始めました。

Emoji で 3 x 3 の絵を作るプログラムを作成する問題です。

この問題のフィードバック時に、解答者の 3 x 3 の Emoji に対して、
3 x 3 の Emoji でフィードバックする、という試みをしています。
これが結構楽しかったので、 Qiita 上でも出題期間中 ( ～ 2015年3月6日) は
1日1お題くらいやってみたいな、と思いました。

最近の チャットツール とか GitHub とか、多くのツールが Emoji をサポートしてるので
面白いものを作っておくと、開発メンバー間のコミュニケーションツールとして使えそうですよね。

Emoji のリストと対応サービスはこちらで確認。
<i class="fa fa-external-link" style="font-size:1em;"></i> [EMOJI CHEAT SHEET](http://www.emoji-cheat-sheet.com/)

## :flower_playing_cards: 作品 「 Red => Green => Refactor 」

:red_circle::arrow_right::large_blue_circle:
:arrow_up::recycle::arrow_down:
:blossom::arrow_left::shit:

## :books: 関連情報
* <i class="fa fa-external-link-square" style="font-size:1em;"></i> [emoji 関連記事](http://qiita.com/tbpgr/items/b32c83e2f3f348a4ce0a)
[Centos] Apache Mysql php install & config

### Install Apache Mysql php

Fist use the following command to install the apache & mysql & php.

```bash
yum install mysql-server php php-mysql wget
```

### Apache configuration

**Add the rule of allowing the tcp 80 port**

```bash
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
```

**Restart iptables**

```bash
/etc/init.d/iptables restart
```

**Setup apache start with when os startup**

Check your apache service is start when the os startup.

```bash
chkconfig --list httpd
```

If it shows something like this:

```bash
httpd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off
```

Then use the following command to turn on.

```bash
chkconfig httpd on
```

After this it should be something like this:

```bash
httpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
```

*Now input your server address, you will see apache home page!* :)


### Make sure php is working

Create a file and add this content to here `/var/www/html/phpinfo.php`

```php
<?php
phpinfo();
?>
```

*Now input the 'server-address/phpinfo.php', you will see the php info page.* :D

### Mysql Configuration

**Start Mysql**

```bash
/etc/init.d/mysqld start
```

**Change root password**

```base
/usr/bin/mysqladmin -u root password 'new-password'
```

**Make sure you can login with your new password**

```bash
mysql -u root -p
```

**Setup the mysql start up with os startup**

The same with apache:)

```bash
chkconfig mysqld on
```


### References
[Apache、MySQL、PHPのインストール](http://webkaru.net/linux/apache-mysql-php-install/)
iOSのUDIDをテキスト出力する方法

 前提条件：
---
　AIR SDK,iTunes(構成ユーティリティ,Xcode)などがインストールされている状態
　かつ、**"*adt*"**コマンドのPATHが通っている状態とする
　※もしくはそれ相応の環境が構築されていること　(Mac,Windows,Linux)

---


```shell-session:ターミナル
$ adt -devices -platform ios > iosudid_push.txt

~ ↓Text出力結果 ~
List of attached devices:
Handle	DeviceClass	DeviceUUID					DeviceName
   6	iPhone  	**********UDID**********	iPhone
```
---
感想:
-
　AIR SDKが如何に、便利なのかを痛感させられた。
　また、adtコマンドでは、アプリのインストール、アンインストール等、
　その他にもAndroid端末の情報とかも取得可能である。コレは、重宝したい。

---
「undefined method `configure'」と表示されたときの対処方法

## 状況

- [生まれて初めてプログラミングをする文系人間のためのチュートリアル](http://qiita.com/yoshimikeisui/items/0872739e771f8a18a956#rails-server%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B-125-rails-server)を見ながら、 `rails s` をしようとしたら、以下のようなエラー表示が出た

`undefined method 'configure' for #<FirstApp::Application:0x007fb5278fe6c8> (NoMethodError)`

## 対処方法

- stackoverflowの回答によると、 `config/environments/development.rb` を変えてあげればいいとのこと
- アプリ名が「FirstApp」だったので、以下のように修正した

```ruby:Gemfile
Rails.application.configure do
  ↓
FirstApp::Application.configure do
```

## 参考記事

- [Error launching Rails server: undefined method 'configure'](http://stackoverflow.com/questions/22977051/error-launching-rails-server-undefined-method-configure)
- [Railsチュートリアル3章でrails sしてコケた時の対処法](http://akinov.hatenablog.com/entry/2014/06/26/232207)