OmniAICreator/Qiita-1.07M huggingface dataset:
Insert後、 テキストボックスを空にするには？

プログラマー２年目です。
現在Seasar2(SAStruts/S2JDBC),Java,JSPでDBを使ったWebアプリケーションを作成しています。

そこで質問があります。
結論から言うと
<br>
**Insert後 テキストボックスを空にするにはどのように書けばいいでしょうか？**
<br>

＜状況＞
・値をDBにInsertするWebページを作っており、そのInsertする機能はできている。
・テキストボックスに値を入力し、挿入ボタンを押すと挿入はできるが、テキストボックスに値が残ったままになってしまう。

↓画面
![画面.PNG](https://qiita-image-store.s3.amazonaws.com/0/60528/eeb5cdba-352e-ca59-0611-8f32003738aa.png)
<br>

＜やろうとしていること＞
・Insert処理の後、ActionFormに値が保持されたままであるから、テキストボックスに値が残ると考える。
・ActionFormの値をクリアするコードを書けばいい。

そこで次のようなBeans.copyを使った書き方でuserFormの値をクリアしようとしましたが...

```rb:IndexAction.Java
@Execute(validator = false)
	public String insert()
	{
		user = Beans.createAndCopy(User.class, userForm).execute();
		userService.insert(user);
		Beans.copy(null, userForm).execute();
		return "findAll";
	}
```

これではヌルポで例外が発生し、うまくいきません。

<br>
＜やろうとしていること＞を実現できる書き方がわかる方、あるいはそれ以外の書き方でもわかる方がいれば教えていただけると嬉しいです。

<br>
以下に画像を貼っておきます。


↓IndexAction.Java
![a.PNG](https://qiita-image-store.s3.amazonaws.com/0/60528/4b0c70b4-61cf-2f49-7792-a1d2c14db20d.png)

<br>


↓index.jsp
![b1.PNG](https://qiita-image-store.s3.amazonaws.com/0/60528/d6a2da2a-d9c4-8cc3-d8da-34201086bd98.png)
IntelliJの便利なショートカット


Mac 10.5+の特によく使うコマンド

| 用途 | ショートカットコマンド |
|:-----|:-------------------|
| メソッド一覧表示 | Command + F12 |
|呼び出し元検索| Alt + Command + F7|
| プロジェクトツリーの開閉| Command + 1 |
| 最近使用したファイルウィンドウを開く| Command + E |
| 選択行の移動 | Shift + Command + ↑(↓) |
| 行複製 | Command + D |
| 行切り取り | Command + Y |
| 行削除 | Command + Delete |
| 選択範囲の拡大(縮小) | Option + ↑(↓) |
| タブ移動 | Control + Tab / (逆方向)Control + Tab + Shift |
| リネーム | Shift + F6 |
| JavaDocの開閉 | Command + . |
| JavaDocの表示| Control + J |
| コードフォーマット | Alt + Command + L |
| ブロックコメントアウト| Alt + Command + / |
| メソッドの並び順を変更 | Command + Shift + ↑(↓) |
Variadic Template 使った場合の型要素に switch 文で実行時アクセスしたい

http://stackoverflow.com/questions/7381805/c-c11-switch-statement-for-variadic-templates の日本語要約

# Q:
DoSomething メンバ関数を持つ複数のクラスを std::tuple に入れた. 
整数 i を用いて std::get<i>(t).DoSomething() とすることでタプル t の i 番目の要素の DoSomething() を呼べる.
ここで i は実行時に決まるとすると, 動的ディスパッチするために

```cpp
switch(i) {
case 0: get<0>(t).DoSomething(); break;
case 1: get<1>(t).DoSomething(); break;
case 2: get<2>(t).DoSomething(); break;
case 3: get<3>(t).DoSomething(); break;
}
```

としていたんだけど, 長ったらしくて変更に弱い. マクロで case を展開しても限界がある.
C++11 での良いやり方は?

# A:
pack展開して関数ポインタテーブル作っちゃえばいいんだよ. 再帰でテンプレート関数探すとswitchより効率悪いしね.

```cpp
template<int... Indices>
struct indices {
    typedef indices<Indices..., sizeof...(Indices)> next;
};

template<int N>
struct build_indices {
    typedef typename build_indices<N - 1>::type::next type;
};

template<>
struct build_indices<0> {
    typedef indices<> type;
};

// No need to be variadic on the tuple elements as we don't care about them
// So I'm using perfect forwarding for the tuple
template<typename Tuple, int... Indices>
void
do_something_by_index(Tuple&& tuple, int index, indices<Indices...>)
{
    using std::get;

    typedef void (*element_type)(Tuple&&);
    static constexpr element_type table[] = {
        [](Tuple&& tuple)
        { get<Indices>(std::forward<Tuple>(tuple)).DoSomething(); }
        ...
    };

    table[index](std::forward<Tuple>(tuple));
}

// Proverbial layer of indirection to get the indices
template<typename Tuple>
void
do_something_by_index(Tuple&& tuple, int index)
{
    typedef typename std::decay<Tuple>::type decay_type;
    constexpr auto tuple_size = std::tuple_size<decay_type>::value;
    typedef typename build_indices<tuple_size>::type indices_type;

    do_something_by_index(std::forward<Tuple>(tuple), index, indices_type{});
}
```
proxy設定まとめ(Mac開発環境)

毎度、忘れるのでメモ。

ターミナル

.bash_profileに書く

```shell-session
export http_proxy=http://$your_proxy
export https_proxy=$http_proxy
export HTTP_PROXY=$http_proxy
export HTTPS_PROXY=$http_proxy
```

zsh使いの人用).zshenvに書く

```shell-session
http_proxy=http://$your_proxy
https_proxy=$http_proxy
HTTP_PROXY=$http_proxy
HTTPS_PROXY=$http_proxy
```


git

```shell-session
git config --global http.proxy $http_proxy
git config --global https.proxy $http_proxy
```

npmに設定

```shell-session
npm -g config set proxy $http_proxy
npm -g config set https-proxy  $http_proxy
```

curl
.curlrcに追記

```shell-session
proxy=http://$your_proxy
```
CakePHP メモ

##file_get_contentsより早い
```
App::uses('HttpSocket', 'Network/Http');
class hogeComponent extends Component {
	function hogehoge($url, $query) {
		$sock = new HttpSocket();
		$res   = $sock->get($url, $query);
		return $res['body'];
	}
}
```

##定数
[Cakephp公式](http://book.cakephp.org/2.0/ja/core-libraries/global-constants-and-functions.html)
##リクエストパラメータ
###実行中コントローラー名の取得
	$this->name

###実行中アクション名の取得
	$this->action

###POST値取得
	$this->request->data

###GET値取得
	$this->request->query
	
###コントローラ名以下のURLを配列で取得
	$this->request->pass

##マイグレーション
###スキーマテーブル作成
	app/Console/cake Schema create

###テーブル内容を手動で変更後、マイグレーションへ反映
	app/Console/cake Migrations.migration generate -f

###スキーマファイルに従い更新
	app/Console/cake Schema update
linux > ファイルのバイナリ表示(ASCII文字) > od -Ax -tx1z [ファイル]

動作確認

    CentOS 6.5

一部ASCII文字が含まれるファイルでASCII文字を見たい。

~~バイナリファイルで一部ASCII文字が含まれる場合、以下のようにすることで、ASCII文字を見ることができる。~~

~~```    
$od -tc sample.elf | less
0000000 177   E   L   F 001 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000020 002  \0   (  \0 001  \0  \0  \0  \0  \0  \0  \0   4  \0  \0  \0
...
```~~

~~上記の例では"ELF"という文字を見ることができる。~~

<hr>
(追記 2015/03/18)
lainzeroさんに教えていただいた方法が見やすい。

```
$od -Ax -tx1z sample.elf
000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00  >.ELF............<
000010 02 00 28 00 01 00 00 00 00 00 00 00 34 00 00 00  >..(.........4...<
000020 0c 60 03 00 00 02 00 05 34 00 20 00 02 00 28 00  >.`......4. ...(.<
000030 1b 00 18 00 01 00 00 00 00 80 00 00 00 00 00 00  >................<
...
```
こちらの場合ASCII文字列が連続で表示されるので、例えば"ELF"で検索ができる。
Capybara - Poltergeistで動いているサーバのhostとポートを知る

[How can I get the current hostname and port when running Capybara with Poltergeist? - Stack Overflow](http://stackoverflow.com/questions/17460015/how-can-i-get-the-current-hostname-and-port-when-running-capybara-with-poltergei)

によると

```
Capybara.current_session.server.host
Capybara.current_session.server.port
```
Unity ContentSizeFitterコンポーネントの使い方例

## 今回の概要
Unityの**ContentSizeFitterコンポーネント**を使用し、テキストの長さに応じて背景の大きさを変更する方法〜

## TextとImageの配置
① Hierarchy上に Create > UI > Text を行いテキストを追加する。
② テキストの子要素として Create > UI > Image を行いイメージを追加する。

![スクリーンショット 2015-03-18 11.22.57.png](https://qiita-image-store.s3.amazonaws.com/0/56434/08baec2a-37c3-85f6-2fd8-ea1128f0810b.png)

## Textの後ろにImageの配置
Canvasコンポーネントを子要素のImageに追加し、**SortOrder**を**-1**に変更する。
![image02.png](https://qiita-image-store.s3.amazonaws.com/0/56434/112db540-6ad3-ed1b-687f-3cd75c9f89e4.png)


![スクリーンショット 2015-03-18 11.23.56.png](https://qiita-image-store.s3.amazonaws.com/0/56434/1d4ed00b-98dc-c0f0-a072-562a870da35b.png)
ここで、HierarchyのImageの表示名をBGに変更！

## BGのアンカー設定
アンカープリセットを表示し、**shiftキー**と**optionキー**を押しながら右下の上下にStretchを選択します。
![スクリーンショット 2015-03-18 11.25.08.png](https://qiita-image-store.s3.amazonaws.com/0/56434/6dac4611-c82a-f34a-a447-ac6509c9aba6.png)

RectTransformコンポーネント内のLeft・Top・Right・Bottomの値にそれぞれ**-5**と入れる。
![image03.png](https://qiita-image-store.s3.amazonaws.com/0/56434/a731292e-41e4-b682-1347-e191ecbb58e4.png)

## TextにContentSizeFitterコンポーネントを追加
ContentSizeFitterコンポーネントを追加し、**Horizontal/Vertical Fit**の値を**Preferred Size**に変更する。
コンポーネントの説明は以下の表に記載する。

| 選択肢 | 内容 |
|:------|------|
|Unconstrained　 |サイズを変更しない  |
| Min Size | サイズを[Min Width/Height]の値に自動的に合わせる |
| Preferred Size |サイズを[Preferred Width/Height]の値に合わせる |

![スクリーンショット 2015-03-18 11.25.58.png](https://qiita-image-store.s3.amazonaws.com/0/56434/6002fc95-6a6d-4776-ca19-03c9dcbe6d9a.png)

以上の工程で、文字数に応じて背景の大きさが変更されるようになりました！

## 参考資料
↓今回は資料のp113を参考にしています↓
[UnityゲームUI実践ガイド 開発者が知っておきたいGUI構築の新スタンダード](http://www.amazon.co.jp/Unity%E3%82%B2%E3%83%BC%E3%83%A0UI%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E9%96%8B%E7%99%BA%E8%80%85%E3%81%8C%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84GUI%E6%A7%8B%E7%AF%89%E3%81%AE%E6%96%B0%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%80%E3%83%BC%E3%83%89-%E6%B1%A0%E5%92%8C%E7%94%B0%E6%9C%89%E8%BC%94/dp/4844364855)
Excelの表をMarkdown形式に変換

<script language="JavaScript">
$(document).ready( function () {
   $("a[href^='http']:not([href*='" + location.hostname + "'])").attr('target', '_blank');
})
</script>

*2017/06/07：じわりと伸びているので、補足を追加し、再編集しました*

markdownの表を手で書くのは大変なのでExcelをコピペできるツールを探していたところ、
便利なツールを見つけたので使い方を簡単にメモ。

**[Tables Generator](http://www.tablesgenerator.com/markdown_tables)**（Excelの表をいろんな書式に変更してくれます）

## 変更書式を選択
まずは利用したい書式をページ上部から選びましょう。
今回は**Markdown Tables**を選びます。
![table3.png](https://qiita-image-store.s3.amazonaws.com/0/72202/5fbb03ed-d1ee-df60-7789-12b11b427515.png)



## 表の情報をインポート
Excel表をコピーしたら、
File＞Paste table data...を選択してクリップボード経由でテーブル情報をペースト
*※注意：空白のセルは上手く変換されない事があるので（最初の行とか）、適当な文字などを入れて回避して下さい。*
![table1.png](https://qiita-image-store.s3.amazonaws.com/0/72202/deaf06e9-b7a6-cd25-0668-f3b0c0a7dcb2.png)
　
　
　
## 変換情報の取得
そうすると以下のように変換済みの情報が取得されるので、「copy to clipboard」でコピー可能。

![table2.png](https://qiita-image-store.s3.amazonaws.com/0/72202/bdd6ddea-b05f-8f89-1994-d8a1bafbc91d.png)

基本的にこれだけでQiitaなどに貼り付けできます！
超簡単！！

　
## 表を編集する
数値をダブルクリックすると、サイト上でも数値をいじれたりするので、ちょこっと修正したい場合に便利です。
編集が反映されない場合は**Generate**ボタンを押しましょう。
行列の追加も**Column**、**Row**の項目から追加できます。

![table4.png](https://qiita-image-store.s3.amazonaws.com/0/72202/fbfd71a6-a1ac-3d21-62bc-a42ed1f66ed2.png)
特定の日付の１日前とかを取得する

いつも忘れるので備忘録として。

普通に、現在時間から計算して、1日前/1日後などは簡単に出せます。

### 現在時間から特定の日時を取得

```php
// 1時間前
echo date('Y-m-d H:i:s', strtotime('-1 hour', time()));

// 1週間前
echo date('Y-m-d H:i:s', strtotime('-1 week', time()));
```

### 指定時間から特定の日時を取得

単純にstrtotimeの第二引数に指定時間のタイムスタンプを渡してあげればOKでした。

```php

// 3/10 0時を基準に考える
$targetTime = strtotime('2015-03-10 00:00:00');

// 3/10 0時の1時間前
echo date('Y-m-d H:i:s', strtotime('-1 hour', $targetTime)); // => 2015-03-09 23:00:00

// 3/10 0時の1週間前
echo date('Y-m-d H:i:s', strtotime('-1 week', $targetTime)); // => 2015-03-03 00:00:00 
```
sublime text 2 > 関数ジャンプ機能 > ctags利用 

動作確認

    CentOS 6.5

関数ジャンプをしたい。SublimeCodeIntelというパッケージを試したがうまく動作しなかった。

代わりにctagsを使う方法でうまくいった。

[参考](http://hyokonia.tumblr.com/post/35694935569/sublime-text-2)

以下、行ったこと

#セットアップ
1. $sudo yum install ctags
2. Package ControlにてCtagsをインストール
3. [Preferences]-[Package settings]-[Ctags]-[Settings - User]にて[Settings - Default]の内容をコピーした上で、"tag_file" : "tags",とした (元は".tags")

#使い方

以下にてtagsファイルを作成する (後述の"Ctrl+t" "Ctrl+r"でもよい)

    $cd workFolder
    $ctags -R


以下のいずれかで宣言している場所候補が表示されるので選択すればジャンプできる。

- [Ctrl]+[Shift]+関数名をクリック
- "Ctrl+t" "Ctrl+t"


ジャンプ元に戻る方法は

- "Ctrl+t" "Ctrl+b"

ctagsファイルを再作成 (時間がかかる)


- "Ctrl+t" "Ctrl+r"してから「Open File's Directory」という表示でフォルダを選択する

[参考](http://ylan.segal-family.com/blog/2013/01/07/code-navigation-in-sublime-text-2-with-ctags/)
field値での重複削除

djangoのquerysetでuniqueな値を取得する方法のメモ書き．

1.4系以降ではdistinctの引数でfield名を指定できるようになっているらしい．
ただしposgresql以外だとNotImplementedError('DISTINCT ON fields is not supported by this database backend')が出る．
http://django-docs-ja.readthedocs.org/en/latest/ref/models/querysets.html#distinct



一度取得してpythonで処理させてもよかったけどなんとなくDBにやらせたかったので調べたらvalues_listを使うといいらしい．
http://stackoverflow.com/questions/15626175/distinct-on-in-django

というわけで，MyModelのhogeフィールドのユニークな値を取るqsは以下のとおり．

```
MyModel.objects.all().values_list('hoge', flat=True).order_by('hoge').distinct()
```

order_by('hoge')を付けないと下のDBみたいにバラバラに入ってる場合にちゃんと取り除いてくれないので注意

| id | hoge |
|:--:|:-----|
| 1  | foo  |
| 2  | bar  |
| 3  | foo  |
| 4  | piyo |
【自習記録】プログラミングHaskell 第２章

# 実行環境セットアップ
次のブログを参考に進めました。
・Haskellを始めよう
http://d.hatena.ne.jp/nanntekotta/20100504/1272952476

次のサイトからWindows用のインストーラをダウンロード＆インストール
Hugs
https://www.haskell.org/hugs/pages/downloading.htm

＜追記＞
Hugsは2006年以降更新が止まっているとのことで、GHCを使った方が良いとのこと
次のサイトより、Haskell platformを導入しました。以降はこちらを使う方針でいきます。

Haskell platform
https://www.haskell.org/platform/ 

# 動作確認
p12～p13のサンプルを動作させてみた。
・四則演算子(+ - * /)の動作確認　⇒ 書籍通りの動作
・'div' ⇒ エラー、~~原因調査はまた今度~~
　　　　＜追記＞シングルクォートではなくバッククォートでした。\`div\`として書籍通りの動作を確認。
　　　　（@philopon様ありがとうございました。）
・↑ ⇒ べき乗演算子。付録Bを参考に^へ読み替えて動作確認
・head、tail 等の配列処理の関数？ ⇒ 書籍通り動作
・ 1 \`div\` 0 ⇒ 書籍通りエラー(Program error: divide by zero)
・head[] ⇒ 書籍通りエラー(Program error: pattern match failure: head [])

# 関数適用
・Haskellでは関数の適用は単に空白文字を使う
・関数適用は他のすべての演算子より高い結合順位を持つ
　⇒例えば、`F a + b` は `F(a) + b` と解釈される（Fは関数）
・`F(g(x)` という風に関数を適用したい場合は、`F(g x)`と書く
　⇒`F g x` と書くと `F(g,x)` と解釈されてしまうので注意が必要
・\`\`(バッククォート)で囲むと中値関数とすることができる
　⇒たとえば、mod 7 2 を 7 \`mod\` 2と書くことができる
　　⇒引数が２つの場合のみ？

今日はここまで
Vagrantのpublic networkのIP固定でもvagrant-hostsupdaterを効かせたい

###環境
* vagrant-hostsupdater 0.0.11


###コード変更
**変更するファイル**
`"C:\Users\<username>\.vagrant.d\gems\gems\vagrant-hostsupdater-0.0.11\lib\vagrant-hostsupdater\HostsUpdater.rb"`

```rb:HostsUpdater.rb
          key, options = network[0], network[1]
          ip = options[:ip] if key == :private_network
          ips.push(ip) if ip
```

これを

```rb:HostsUpdater.rb
          key, options = network[0], network[1]
          ip = options[:ip] if key == :private_network || key == :public_network
          ips.push(ip) if ip
```

こう。

簡単ですね。

尚、Win8.1などでは通常のコマンドプロンプトからではhostsファイルの変更ができないので、Vagrantの起動に使うコマンドプロンプトは**管理者として実行**したコマンドプロンプトを使おう。
x10で外部プロセス実行

x10で外部プロセスを実行する方法。
C++またはJavaのNativeの関数を呼ぶ。

```SystemTest.x10
import x10.io.Console;
import x10.compiler.Native;

public class SystemTest {

  @Native("c++", "system( (#1)->c_str() );")
  @Native("java", "JRuntime.exec(#1)")
  native static def system(cmd:String):Int;

  public static def main(args:Rail[String]) {
    val rc = system("ls");
    Console.OUT.println(rc);
  }
}
```

JavaのJRuntimeクラスは以下のように実装

```JRuntime.java
import java.io.*;
class JRuntime {
  public static int exec(String cmd) {
    try{
      Process proc = Runtime.getRuntime().exec(cmd);
      BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
      String line;
      while((line=in.readLine())!=null)  {
        System.out.println(line);
      }
      return proc.exitValue();
    }catch(IOException e){
      System.out.println("fail: "+cmd);
      e.printStackTrace(System.out);
    }
    return 1;
  }
}
```
is.js と underscore.js の empty チェック関数の違い

- [is.js](http://arasatasaygin.github.io/is.js/)
- [underscore.js](http://underscorejs.org/)

| | is.js | underscore |
|:---:|:---:|:---:|
| ""(空文字) | true | true |
| null | false | true |
| undefined | false | true |
| \[\](空配列) | true | true |
| 0 | false | true |

```js
is.empty('')  // true
_.isEmpty('') // true

is.empty(null)  // false
_.isEmpty(null) // true

is.empty(undefined) // false
_.isEmpty(undefined) // true

is.empty([])  // true
_.isEmpty([]) // true

is.empty(0)  // false
_.isEmpty(0) // true
```
deviseを使った権限管理の３つの方法(研究中)

# deviseを使った権限管理の３つの方法

web_admins 
shop_admins( has shop_id)
shops
の３つのmodelでweb_adminとshop_adminの権限を分けたい。

## 1. single table inheritance
shop_admin < admin
web_admin < admin

- admin = Admin.find(:id)
- controllerを一つに出来るのでDRYで書けそう
- 権限管理が要りそうだが、面倒ではなさそう
- deviseのsign_up処理を分けることが難しくなる

## 2. adminにカラム追加で制御
ほぼ1.と同じ
admin < ActiveRecord
admin.is_web
admin.is_shop

- cancanなどによる権限管理が必要、面倒そう
- deviseのsign_up処理を分けることが難しくなる


## 3. 別モデルを持ちnamespaceで区切る
admin/
shop_admin/

- 権限管理がdeviseだけですむので楽
- sign_up処理を分けられる
- viewが複数になり、DRYに反する

deviseを使う場合どれがbest practiceか研究中です
CoffeeScriptでSingleton



```
class Common

  instance = null
  @$: ->
    instance ?= new Private()

  class Private
	constructor: ()->
		
		..content of class..
	

```

ASの時と同じ。

静的変数instanceへのアクセスを@$()メソッドに絞る。
@$()はいわゆるgetInstance()
Jenkinsでシェルスクリプトを他のユーザとして実行


Capistrano でつくった cap タスクを、Jenkins に移行していく場合など、Jenkins のビルド(シェルスクリプト)の実行ユーザを指定したいことがある。

以下のように sudo 実行できるようにしてやればよい。
(jenkins ユーザが Jenkins を実行している想定)

### sudoの設定を変える

jenkins ユーザで特定のスクリプトに限り、tty が無くても sudo できるようにする。

```
$ sudo /usr/sbin/visudo
```

```/etc/sudoers
# Defaults requiretty
Defaults:jenkins !requiretty
jenkins ALL=(user) NOPASSWD: /home/user/foo.sh
```

### 実行する処理をスクリプトにまとめておく

異常終了時にビルドを中止できるよう、-xe 指定で実行しておく。

```/home/user/foo.sh
#!/bin/bash -xe

echo "foo"
```

### Jenkins のビルド設定で sudo -uオプションでユーザを指定してビルドのシェルスクリプトを書く

```
sudo -u user /home/user/foo.sh
```
Web Applicationを探してみた

## Terminal Emulator

* [butterfly](http://paradoxxxzero.github.io/2014/02/28/butterfly.html)

```bash:インストール(Macにて確認)
pip install butterfly
```

```bash:起動
butterfly.server.py --unsecure
```

http://localhost:57575/
にアクセス。ログインID:Passを入力し操作開始。

* vimやmuttなどで日本語の表示問題なかった。日本語の入力は出来ないっぽい


## VNC

* noVNC

```bash:
git clone https://github.com/kanaka/noVNC.git
```

```bash:
cd noVNC
./utils/launch.sh --vnc 192.168.100.11:5901
```

`--listen`でWebUIのListenポートを変更できる。

URLが表示されるのでブラウザでアクセスすると、
`192.168.100.11:5901`へのVNCアクセスがブラウザ経由で出来る。
(要VNCパスワード)
メモ：Unityアニメーションとブレンドツリーとシングルトンの参考ページ(自分用)

●アニメーション
http://www.gaprot.jp/pickup/unity-mecanim/vol1/
●ブレンドツリー
http://www.gaprot.jp/pickup/unity-mecanim/vol2/
http://qiita.com/kuuki_yomenaio/items/f9be3083afc19fb0f86c

●シングルトン
http://naichilab.blogspot.jp/2013/11/unitymanager.html
Rubyの算術演算

Rubyの算術演算についてまとめてみます。

|演算子<br>メソッド|内容|備考|
|:-----------:|:------------:|:------------:|
|+|加算||
|-|減算||
|*|乗算||
|/|除算||
|quo|除算|Floatオブジェクトを用いていない場合、<br>演算結果をRationalオブジェクトで返す|
|div|商||
|%<br>modulo|剰余||
|remainder|剰余|x.remainder(y)の場合、演算結果はxと同符号となる|
|divmod|商と剰余|演算結果を[商,剰余]の形式で返す|
|**|べき乗|Floatオブジェクトを用いていない負のべき乗の場合、<br>演算結果をRationalオブジェクトで返す|
Symfony 2.6でCRUDアプリ作成方法

# インストール

## Composerのインストール

```
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
chmod a+x /usr/local/bin/composer
```

## Symfonyのインストール

```
curl -LsS http://symfony.com/installer > ~/bin/symfony.phar
sudo mv symfony.phar /usr/local/bin/symfony
chmod a+x /usr/local/bin/symphony
```

# プロジェクトの作成と初期設定

```
symfony new myproject
cd myproject
php app/console generate:bundle --namespace=MyProjectBundle --format=yml
```

# DBの設定と作成

## DB名の指定

今回は`myproject`というDB名に変更します。

- vi app/config/parameters.yml

```yml:app/config/parameters.yml
parameters:
    database_name: myproject
```

## DB作成

```bash
php app/console doctrine:database:create
```

## テーブルの作成

今回は[DoctrineMigrationsBundle](https://github.com/doctrine/DoctrineMigrationsBundle)を使用してマイグレーションファイルを作成しテーブルの変更を管理します。

### DoctrineMigrationsBundleのインストールと設定

#### DoctrineMigrationsBundleのインストール

- vi composer.json
  - 以下を追記
    
```json:composer.json
{
    require: {
        ・・・
        "doctrine/migrations": "1.0.*@dev",
        "doctrine/doctrine-migrations-bundle": "2.1.*@dev",
        ・・・
    }

}
```

- install

```bash
composer update
```

#### 設定

- vi app/AppKernel.php

```php:app/AppKernel.php
public function registerBundles()
{
    $bundles = array(
        //...
        new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
        //...
    );
}
```

- `app/console`を実行して`doctrine:migrations:diff`などのものがあれば成功

### Migrationの初期化

```
php app/console doctrine:migrations:status
```

### Migrationファイルの作成

```
app/console doctrine:migrations:generate
```

- 生成されたmigrationファイル(app/DoctrineMigrations/Version*.php)に以下を追記

```php
    /**
     * @param Schema $schema
     */
    public function up(Schema $schema)
    {
        // this up() migration is auto-generated, please modify it to your needs
        $sql = <<<SQL
CREATE TABLE `hoge` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SQL;
        $this->addSql($sql);
    }
```

### Migrationの実行(テーブル作成)

```
php app/console doctrine:migrations:migrate
```

これで`myproject`データベース内に`hoge`というテーブルが作成されました。

# Entityの作成

```
php app/console doctrine:mapping:import --force MyProjectBundle yml
php app/console doctrine:generate:entities MyProjectBundle
```

# ControllerとViewの作成

```
php app/console doctrine:generate:crud --entity=MyProjectBundle:Hoge
```

これで
```
php app/console server:run
```
して

`http://localhost:8000/hoge/`へアクセスすれば完了です！
vmware > タブをウィンドウ間で移動する

動作確認

    vmware workstation v11.0.0

vmwareで以下のような使い方をしている。
- あるWindow(Window1)である仮想環境(ImgA, ImgB)を立ち上げ
- 別のWindow(Window2)で別の仮想環境(ImgC)を立ち上げ

画面配置の関係などでWindiow1->ImgBをWindow2に持っていきたくなった時、以下の手順で移動できるようだ。

1. Window1にて[ファイル]-[タブを閉じる]でImgBを閉じる。この時「バックグラウンドで実行(B)」にしておく
2. Window2にてImgBを開く
Shimple HTML DOM Parser でブログのjsonの情報から最初の記事のimgの srcを抜いてimagemagicで加工した

はじめまして。さいきゆみと申します。いつも読まして頂いて感謝しています。
恥ずかしながら、ちょっと自分でもこれは便利かなというものができましたのでご紹介します。


Bloggerが配信するJSON [私のブログの例](http://blog.kita-o.com/feeds/posts/default?alt=json)をPHPの**[Shimole HTML DOM Parser](http://so-zou.jp/web-app/tech/programming/php/library/simplehtmldom/)**で **img**を抜くのは、わりと簡単で、JSON の構造を、[こういうところで](http://json.parser.online.fr/)分析し、

本文であれば、

```lang:php

$url="http://blog.kita-o.com/feeds/posts/default?alt=json";
$array =file_get_contents($url);
$obj = json_decode($array,true);  // trueを入れるのがミソです
print ($obj['feed']['entry'][0]['content']['$t']);
```

と書くと0番目の本文をprint させられます。
ちなみに…

```lang:php
$obj['feed']['entry'][0]['link'][4]['href']  ←リンク
$obj['feed']['entry'][0]['title']['$t']　    ←タイトル
```
です。

例えばブログの最新の記事の写真を1枚だけ抜き出したいと思った場合、このデータを格納したものを　findで　imgを見つけます。

```lang:php

$html = $obj['feed']['entry'][0]['content']['$t'];
$html= str_get_html($html);
include('simple_html_dom.php');//domの読み込み
$img = $html->find( 'img', 0 ); 
print $img
```
これで抜けるのは、

```lang:html

<img src ="やたら長い.jpg"　width="さまざま">
 
```

となってしまいますので、 src="**ココ**"　が欲しい。と思うのですが、検索しても　foreach 構文で抜きながら配列に入れるやり方ばかりが出てきて困ったのですが、

@$img = $html->find('img',0)->src;

と、なんのことはなかったです。ただ、これはエラーを叩くことがあるので、@をつけて制御します。

これを応用して、jQuery　で画像を連番で出して並べ替え、加工してアニメにするなど様々なことができると思います。

ただ、[imgLiquid](http://kwski.net/jquery/1077/)はPHPで生成した画像ではうまく加工できないようです。
そこで、私が使っている[heteml](http://heteml.jp/support/manual/cgi/)サーバーでは　[imagemagic](http://www.imagemagick.org/) が使えるのでこれでやってみました。

```lang:PHP
@$img = $html->find( 'img', 0 )->src; 
$thumbnail = 'nowon.jpg';
$cmd = '/usr/bin/convert -thumbnail 220x220 '.$img.' '.$thumbnail;
system($cmd);
print "<img src=\"nowon.jpg\" />;
 
```

詳しくは私の[ブログ](http://blog.kita-o.com/search/label/json?max-results=40)もご参考にしてください。
エラー: JsonObjectRequestの参照はあいまいです。

volleyでJSONの処理したい時に、以下のような記述で動作していたアプリがAndroidStudioでタイトルのようなエラーを出すようになりました。

```
String api_url = "http://test.com";
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.GET,api_url,null,
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject jsonObject) {
        	// 処理
		}
    },
    new Response.ErrorListener(){
    	@Override
        public void onErrorResponse(VolleyError error){
        	//
        }
    }
);
```

昨日の朝まではエラーも出ずに問題なかったんですけれど。

*エラー: JsonObjectRequestの参照はあいまいです。
JsonObjectRequestのコンストラクタ JsonObjectRequest(int,String,String,Listener<JSONObject>,ErrorListener)
とJsonObjectRequestのコンストラクタ JsonObjectRequest(int,String,JSONObject,Listener<JSONObject>,ErrorListener)
が両方適合します*

というエラーメッセージでした。
なぜ今まではエラーが出なかったのか、理由はわかりません。

http://afzaln.com/volley/com/android/volley/toolbox/JsonObjectRequest.html
コンストラクタには上記の他にリクエストメソッドの引数が無いコンストラクタも定義されていたので、これでも問題無い自分の環境では

```
String api_url = "http://test.com";
JsonObjectRequest jsonRequest = new JsonObjectRequest(api_url,null,
	new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject jsonObject) {
        	// 処理
		}
    },
    new Response.ErrorListener(){
    	@Override
        public void onErrorResponse(VolleyError error){
        	//
        }
    }
);
```

とすることでエラーを回避できました。
HibernateのWrongClassException

ORMにhibernateを利用しているとき
DBからデータを取得した際org.hibernate.WrongClassException が出た場合は、データが不整合になっているケースが高い。

```
java.lang.Object
  extended byjava.lang.Throwable
      extended byjava.lang.Exception
          extended byjava.lang.RuntimeException
              extended byorg.hibernate.exception.NestableRuntimeException
                  extended byorg.hibernate.HibernateException
                      extended byorg.hibernate.WrongClassException
```

public class WrongClassException extends HibernateException

> Thrown when Session.load() selects a row with the given primary key (identifier value) but the row's discriminator value specifies a subclass that is not assignable to the class requested by the user.

Session.load()メソッドで、主キーで行を取得しようとした時に、行のdiscriminator(識別子)の値が期待されているものと違うサブクラスを表している場合に投げられる。
http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch10.html#inheritance-tablepersubclass-discriminator

discriminatorは1つのテーブルにクラスの階層構造をストアするときに使うもの(table-per-classヒエラルキー)

> The element is required for polymorphic persistence using the table-per-class-hierarchy mapping strategy and declares a discriminator column of the table. The discriminator column contains marker values that tell the persistence layer what subclass to instantiate for a particular row.

たとえば
```
org.hibernate.WrongClassException: Object [id=1] was not of the specified subclass [myEntity] : loaded object was of wrong class class [myAnotherEntity]
```


この場合ObjectのIDはmyEntityがサブクラスなのでこれが取得されるのを期待してるんだけど取得しようとしてるのが別のmyAnotherEntityになってしまっているよという意味になり
直接DBなどいじったりして外部参照してるIDが違うところについてたりとかそういう不整合が起きている可能性がある
Vagrantでpublic network設定時に固定IPを使う（外部アクセス可能版）

###環境
* Vagrant 1.3.5
* VirtualBox 4.3.12
* CentOS 6.5

###設定
Vagrantfileの`config.vm.network`の設定を以下の通りにする。

```rb:Vagrantfile
  config.vm.network :public_network, :auto_config => false
  config.vm.provision :shell, :path => "bootstrap.sh"
```

Boxのフォルダに以下の内容のshellスクリプトを置く（Vagrantfileと同階層のところね）

```shell-session:bootstrap.sh
#/bin/sh

sudo ifconfig eth1 192.168.0.10 netmask 255.255.255.0 up
sudo ip route del default gw 10.0.2.2 eth0
sudo ip route add default gw 192.168.0.1 eth1
```

いろいろ情報が散乱してたので、自分でまとめてみた。

***
###なんでこんなめんどくさいことを？
通常、public network設定でIP固定にしたい場合は以下の内容で十分だった。

```rb:Vagrantfile
config.vm.network :public_network, ip: "192.168.0.10"
```

でもこれだとApacheなどでWebサーバーを立てた時、ホストPC以外からアクセスができないという問題にぶちあたる。（publicなのに！）
どーもVagrantのBox起動時にroute設定が勝手にされちゃうようで、default routeの設定がおかしくなる。
なので`bootstrap.sh`でそこを上書きしちゃおうという内容ですね。
Elasticsearch 1.3.xの色々あってGroovyScriptから使えなかったときの対処メモ

1.3.9のライブラリを使用中に遭遇。

現象は以下のライブラリをGrabした際に発生。

```groovy
@Grab('org.elasticsearch:elasticsearch:1.3.9')
```

以下で解決した。（検証が不足している点もあるので自己責任でね）

### 1. antlr-runtimeがDL出来ない

Grabを自分で書く

``` groovy
@Grab('org.antlr:antlr-runtime:3.5.2')
```

### 2.  asm-commonsがDL出来ない

Version違いなら落とせるので、Upper VersionのライブラリをGrabするよう自分で書く

``` groovy
@Grab('org.ow2.asm:asm-commons:5.0.3') // 要求されているversion違うけど使えるっぽい
```

この時点でビルド可能。

### 3.  Buildersが見つからない言われる

ランタイムエラー吐くねん。

```groovy
@Grab('com.vividsolutions:jts:1.13')
```

以前報告したことのある、GroovyからBuildersが使えない件と関係があるかもしれないが、
まだ調べてないよ。
AlamofireでBasic認証を事前に(全体に)適用する

通常は公式にあるとおり、リクエストごとに認証(authenticate)をいれてリクエストする方法があります。

```
let user = "user"
let password = "password"

Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)")
         .authenticate(user: user, password: password)
         .response {(request, response, _, error) in
             println(response)
         }
```

ただ毎回同じ場合、１箇所に設定しておきたいですよね。
下記のようにAppDelegateに設定可能です。

```swift:AppDelegate.swift
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        
        let user = "user"
        let password = "password"
        
        let plainString = "\(user):\(password)" as NSString
        let plainData = plainString.dataUsingEncoding(NSUTF8StringEncoding)
        let base64String = plainData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.allZeros)
        
        Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = ["Authorization": "Basic " + base64String!]

//以下省略

```

参考
https://github.com/Alamofire/Alamofire/issues/32
セキュリティについて気にしなければいけない事覚え書き

とりあえず覚えにざくっとメモ書き

アプリケーション寄りの技術

##プログラムにて対策
　安全なウェブサイトの作り方
　https://www.ipa.go.jp/security/vuln/websecurity.html
　ウェブサイトにおける脆弱性検査手法の紹介(ソースコード検査編)
　http://www.ipa.go.jp/files/000036973.pdf
##WAF
　Web Application Firewall 読本
　http://www.ipa.go.jp/security/vuln/waf.html
　PHP-Suhosin（PHPエクステンションのWAF）
　https://suhosin.org/stories/index.html
##ミドルウェアが余計な情報を出さないように設定、不要なアクセスを遮断する。
　Apache　Security
　http://www.petefreitag.com/item/505.cfm
　PHP Security Guide
　http://www.asial.co.jp/company/files/php-security.swf
##侵入されても情報を持ち出せないようにする。
　データベース暗号化
　MySQL Enterprise Encryption
　http://www-jp.mysql.com/products/enterprise/encryption.html
##侵入されたことを気づく
　監査ログ
 http://www.secureos.jp/index.php?plugin=attach&refer=events%2Fjsosjk06&openfile=jsosjk06-linux-audit.pdf
##ネットワーク側で防ぐ、検知する。
　FireWall（IP/ポートベース）
　iptablesの設定でサーバー攻撃対策と海外からのアクセスを制限
　http://falsandtru.hatenablog.com/entry/iptables-firewall
　UTM(侵入検知)
　http://www.fortinet.co.jp/products/fortigate/security_feature1.html#ips

ネットワーク寄りの技術

#その他・運用
##アタックを未然に防ぐ
　セキュリティ脆弱性検査
　http://ja.wikipedia.org/wiki/%E8%84%86%E5%BC%B1%E6%80%A7%E6%A4%9C%E6%9F%BB%E3%83%84%E3%83%BC%E3%83%AB
　JVN iPedia - 脆弱性対策情報データベース
　http://jvndb.jvn.jp/index.html
複数ファイルの文字列を一括置換

LinuxやMacのターミナル上で、簡単に複数ファイルの文字列を一括置換出来る方法です。いつも失念してしまうので、備忘録として残します。

## 方法

具体的な方法としては下記のような処理を行います。

- Grepで置換したい文字列を含むファイル一覧を取得
- Perlを用いて文字列を実際に置換

```
grep -rl "beforeString" ./ | xargs perl -i -pe "s/beforeString/afterString/g"
```

## 補足

perlのオプションは下記の通りです。

|オプション|機能|
|----|----|
|-e|文字列をスクリプトとして実行|
|-p|繰り返し処理と標準出力|
|-i|ファイルを編集して、バックアップを作成|
React.jsでES6の文法を使って defaultProps などを設定する

## 環境

| Tools             | Version | 
| :---------------- | :------ | 
| react-tools       | 0.13.1  |
| jsx               | 0.12.2  |
| react.js          | 0.13.1  |
| JSXTransformer.js | 0.13.1  |

`react-tools`を`npm`でインストールし、`jsx`に`--harmony`オプションを付けてコンパイルした。

```
npm install -g react-tools
jsx --harmony -w src build
```

## 方法

```jsx
var Hello = React.createClass({
  getDefaultProps: function() {
    return {name: "Default Props"};
  },

  render: function() {
    return <div>Hello {this.props.name}</div>;
  }
});
```

を

```jsx
class Hello extends React.Component {
  constructor(props) {
    super(props);
    console.log(props);
    console.log(this.props);
    this.state = {name: this.props.initialName};
  }

  render() {
    return <div>Hello {this.state.name}</div>;
  }
}
Hello.defaultProps = {initialName: "Default Props"};
```

にする。

## 詳細

普通にdefaultPropsを記述すると、

```jsx
var Hello = React.createClass({
  getDefaultProps: function() {
    return {name: "Default Props"};
  },

  render: function() {
    return <div>Hello {this.props.name}</div>;
  }
});
```

となる。
これを、ES6で記述すると、

```jsx
class Hello extends React.Component {
  getDefaultProps() {
    return  {name: "Default Props"};
  }

  render() {
    return <div>Hello {this.props.name}</div>;
  }
}
```
となるとおもいきや、`defaultProps`が全然効かない。

Reusable Componentsのドキュメントを読むと、`propTypes`と`defaultProps`や`propTypes`はどうやら書き方がちょっと違うらしい。

- [Reusable Components#es6-classes](http://facebook.github.io/react/docs/reusable-components.html#es6-classes)

>The API is similar to React.createClass with the exception of getInitialState. Instead of providing a separate getInitialState method, you set up your own state property in the constructor.

>Another difference is that propTypes and defaultProps are defined as properties on the constructor instead of in the class body.

サンプルを見ながら書き換える。

```jsx
export class Hello extends React.Component {
  constructor(props) {
    super(props);
    console.log(props);
    console.log(this.props);
    this.state = {name: this.props.initialName};
  }

  render() {
    return <div>Hello {this.props.name}</div>;
  }
}
Hello.defaultProps = {initialName: "Default Props"};
```

コンパイルは通るが、ブラウザで表示すると以下の様なエラーが出る。

```
Uncaught Error: Parse Error: Line 3: Illegal export declaration
    at file:///Users/yoshiki_aoki/work/react-tutorial/build/alone.js:3:undefined
export var ____Classm=React.Com ...
^
```

ちなみに、React.jsのページにある[JSX Compiler](https://facebook.github.io/react/jsx-compiler.html)で、ドキュメントに載っているコードをコンパイルすると同じエラーが出る。

試しに`export`をはずすと、エラーは発生しないがデフォルト値がセットされていない。
これは、別の箇所が原因で`render`の`props`を`state`に変更するのを忘れていた事が原因だった。

```jsx
class Hello extends React.Component {
  constructor(props) {
    super(props);
    console.log(props);
    console.log(this.props);
    this.state = {name: this.props.initialName};
  }

  render() {
    return <div>Hello {this.state.name}</div>;
  }
}
Hello.defaultProps = {initialName: "Default Props"};
```

これで無事表示された。

## References

- [Reusable Components](http://facebook.github.io/react/docs/reusable-components.html)
- [JSX Compiler](https://facebook.github.io/react/jsx-compiler.html)
Google Web Fundamentalsを読んだときのメモ


GoogleWebFundamentalsを読んで、いくつか後で使えるかもなと思って残している自分用のメモ。
https://developers.google.com/web/fundamentals



# Forms and User Input
https://developers.google.com/web/fundamentals/input/?hl=en

### Choose the best input type

適正なインプットタイプを選択することで、適切なキーボードを呼び出すことができるということ。


https://developers.google.com/web/fundamentals/input/form/choose-the-best-input-type

- datalist
input typeではないけど、ユーザーに提案することができる

```html
    <label for="frmFavChocolate">Favorite Type of Chocolate</label>
    <input type="text" name="fav-choc" id="frmFavChocolate" list="chocType">
    <datalist id="chocType">
      <option value="white">
      <option value="milk">
      <option value="dark">
    </datalist>
    
```

### フォームのフルサンプル
http://googlesamples.github.io/web-fundamentals/samples/input/form/order.html

### ラベルと名前を適正にいれること

https://developers.google.com/web/fundamentals/input/form/label-and-name-inputs?hl=en


- autofocus　属性をつかうことも出来るが、キーボードのフォーカスを奪うことになるので、要注意

### リアルタイムバリデーションの実装
clientサイドで行うバリデーションなので
セキュリティのためには、サーバーサイドとの一貫したバリデーションの実装が必要。


- pattern 属性

```html
<input type="text" pattern="^\d{5,6}(?:[-\s]\d{4})?$" ...>
```

その他多数紹介されている
最大値、最小値チェックなども可能。
https://developers.google.com/web/fundamentals/input/form/provide-real-time-validation?hl=en


- pseudo-classes(疑似クラス)
リアルタイムにユーザーにフィードバックを返却できるように、インプットに対する新しい疑似クラスが用意されています。


```css
 :valid
:invalid
:reauired
:optional
:in-range
:out-of-range
```


# Multi-Device Layouts
https://developers.google.com/web/fundamentals/layouts/?hl=en


### view portの設定をする
view portの設定については、こちらのブログがとてもわかりやすかった。

これがスマートフォン向けサイトを作るときの viewport 設定３パターンだ - てっく煮ブログ http://tech.nitoyon.com/ja/blog/2013/02/15/viewport/


```html
<meta name="viewport" content="width=device-width,initial-scale=1.0">

body {
  -webkit-text-size-adjust: 100%;
}
```


# Web Starter Kit

Googleでの紹介ページをたどれば、環境のセットアップは簡単にできた。

セットアップに必要なSublimeTextのエクステンション＋Chromeのエクステンションはいれておきましょう。

日本語では、以下のページの説明がよくまとまっていたです。
Googleのベストプラクティスに沿ったモダンな製作の出発点「Web Starter Kit」 | HTML5Experts.jp http://html5experts.jp/nakajmg/8931/
MacでのWordPress導入でFTPを使うときの設定


ローカル環境でWordpressを開発するときのメモ。


##  MacでFTPサーバの起動
``` sudo launchctl load -w /System/Library/LaunchDaemons/ftp.plist```

## MacでFTPサーバの終了
```sudo launchctl unload -w /System/Library/LaunchDaemons/ftp.plist```


## WordpressでのFTPの設定

ホスト：localhost
ユーザ：Mac にログインしているアカウント名
パスワード：Mac にログインしているアカウントのパスワード
嘗める

Listに含まれる全てのitemについて、同じ処理を行いたい、と言うときに、どのようなやり方があるか、と言う話。

ここでは、QStringListをサンプルに、中身を全てトリムすると言う処理を考えてみる。(以下のソースに出てくるm_listはQStringListです)

# サンプルソース
## Qtのforeachキーワード
単なるdefineらしいですが。

```cpp
foreach (const QString &data, m_list) {
    (void) data.trimmed();
}
```
嘗める、と言う意味では使えるのですが、今回のように内容を書き換えたいときには利用できません。

## Qtのiterator
```cpp
for (QStringList::iterator it = m_list.begin(); it != m_list.end(); it++) {
    *it = it->trimmed();
}
```
STLのiterator準拠です。const_iteratorもありますが、今回のように変更したい場合はiteratorを使います。

## Qtのjava-style iterator
```cpp
for (QMutableStringListIterator it(m_list); it.hasNext();) {
    QString &data = it.next();
    data = data.trimmed();
}
```

## QListのindex access
```cpp
for (int i = 0; i < m_list.size(); i++) {
    QString &data = m_list[i];
    data = data.trimmed();
}
```

## QtConcurrentのblockingMap()
```cpp
QtConcurrent::blockingMap(m_list, [](QString &data) {
    data = data.trimmed();
});
```
QtConcurrentとc++11のlambdaを使っているので、*.proに以下が必要です。

```mf
QT += concurrent
CONFIG += c++11
```

## STLのalgorithmのfor_each
```cpp
std::for_each(m_list.begin(), m_list.end(), [](QString &data) {
    data = data.trimmed();
});
```

## c++11の拡張for
```cpp
for (QString &data : m_list) {
    data = data.trimmed();
}
```

# 実行時間
試しに、OS X上のQt 5.4.0で実行時間を測ってみました。
10回実行して、平均ではなく最頻値を取っています。リストのサイズは10万件です。

| やり方        | 実行時間(ms) |
|:-------------|------------:|
| foreach      |          14 |
| iterator     |          18 |
| java iterator|          18 |
| index access |          17 |
| blockingMap  |          36 |
| for_each     |          15 |
| for          |          15 |

ビルド時の-Oオプションをつけたりしてみましたが、OS Xではほとんど変わりませんでした。(ただし、ここには結果を乗せていませんが、件数を100万件にすると少し差がでました)
foreachは、今回の要件(リスト内の文字列を全てtrimする)を満たさないので、今回は使えませんが、サンプルとして載せています。リストの要素の書き換えがない分早いと思われます。

# QtConcurrentについて
実行時間を見ると、QtConcurrentのblockingMapだけ他から群を抜いて遅いことがわかります。
QtConcurrentのmap/blockingMapは、名前がmapなのでrubyのArrayのmapと同じように考えてしまうかも知れませんが、Concurrentが示す通り並列実行してくれます。
今回のように、MapFunctionの実行時間が小さいときは、並列実行のメリットよりもオーバーヘッドの方が大きくなってしまい、効果が得られませんが、MapFunctionの実行時間が大きいときには、並列実行の効果が得られます。
後述するgithubのソースをチェックアウトして、mylist.cppで`EMULATE_TIME_CONSUMING`をdefineすると、その様子を見ることができます。

QtConcurrentが使える条件を以下に示します。
* 要素毎の処理の順序に意味がない
* 要素毎の処理を並列実行しても問題がない
* 要素毎の処理に一定以上の時間がかかる

# 結論
今回の実行時間の計測結果だけを見て、「STLのfor_eachかC++11のforを使おう」などと判断してはいけません。
環境やコンパイラ、ライブラリの実装によって、簡単に結果が変わってくるからです。
初期の実装時には、下手な最適化よりも、コードのわかりやすさを基準にアルゴリズムを選択すべきです。

今回のサンプルソースも、githubに上げてあります。
https://github.com/false-git/iteratortest
モバイルフレンドリーとSEO

SEOに関係ある「モバイルフレンドリー」

#### 1. [モバイルフレンドリーチェック](https://www.google.com/webmasters/tools/mobile-friendly/)で対応サービスかチェック出来る

* ちなみにクローラーのgoogle botのUAは[こちら](https://developers.google.com/webmasters/mobile-sites/references/googlebot?hl=ja)

* ただ上記は全ページに対してやらないといけなさそう
    * example.com/
    * example.com/page1
    * example.com/page2

#### 2. モバイルフレンドリーチェッククリアーしていたらレスポンシブルでも良い
* seo的にはpcとモバイルの2パターンでも良い
* よりユーザーに使いやすくするにはレスポンシブル対応出来た方がgood

※参考資料
[Googleのモバイルフレンドリーのランキングファクターはリアルタイム＆ページ単位基準](http://www.seojapan.com/blog/google-mobile-friendly-ranking-factor-runs-real-time-page-page-basis)
【神アプリ】ColorSnapperが超便利


## 紹介
　いままでCSSでcolorプロパティに色を反映するときにOSX標準のDigital Color Meterを起動して抽出していたが、App Storeにある[<b>ColorSnapper</b>](http://www.colorsnapper.com)がより使いやすい。

## 使い方
1. インストールするとタスクバーにアイコンが出現。<br>　
2. アイコンをクリックしてメニューから「Pick Color」をクリック。<br>![pict001.png](https://qiita-image-store.s3.amazonaws.com/0/64861/911eaeb8-18f6-991b-712a-f982ecf756a0.png "pict001.png")<br>　

3. 虫眼鏡が出現するので欲しい色にポインタを合わせる。（とまあ、ここまではDigital Color Meterと同じ）<br>　
4. 欲しい色でクリック。タスクバー下に色のRGB表示が現れる。<br>![pict002.png](https://qiita-image-store.s3.amazonaws.com/0/64861/ca7dcf94-dbab-31a6-3c53-350d0b650016.png "pict002.png")<br>　

5. もう一度タスクバーをクリックすると、選んだ色がメニューに追加されている。<br>![pict003.png](https://qiita-image-store.s3.amazonaws.com/0/64861/13e296bf-047f-ecd6-3322-cf874e2d7bb5.png "pict003.png")<br>　

6. 「Preference...」をクリック。<br>![pict004.png](https://qiita-image-store.s3.amazonaws.com/0/64861/9fd40e04-d9ec-48d8-62c9-eaa9b81303c2.png "pict004.png")
色のフォーマットを2種類で選べる。<br>・「Clipboard format」は通常クリックで指定したフォーマット文字列でクリップボードにコピーされる。<br>・「Alternative format」はoptionキーを押しながらクリックでコピーされます。optionキーを押すだけでもそのフォーマットでの表示がされます。ちゃんとSwift表記にも対応。![Kobito.Wq7yba.png](https://qiita-image-store.s3.amazonaws.com/0/64861/caa5f7a3-b0af-04df-fa18-4ce082334665.png "Kobito.Wq7yba.png")


## Digital Color Meter との比較
　Digital Color MeterはShift-Cmd-Cでもコピーできるが、ペーストしてみないと文字列を確認できない。ColorSnapperはその点の手間が省ける。

　あるときはCSSコーダー、あるときはGIMPで画像処理、またあるときはObjective-Cコーダーな人には非常にありがたい。

## ColorSnapper2
ColorSnapper2が今30％Offキャンペーン中。
2015/10/08 El Capitanリリースのスペシャルセール（50％OFF）実施中とのこと。
http://colorsnapper.com/

なお、El Capitanにアップデートしたところ旧版は動作できなくなりました。
osxでomake -Pを動くようにしてみた


# はじめに

omakeはocaml製の便利なビルドツールです。
しかし、残念ながらosx上でviやemacs以外のエディタで編集した場合はなぜかポーリングして自動的にビルドを走らせる事が出来ません。そこで、原因を調べて対策してみました。

## 1. opam

最初omakeのファイルをダウンロードして来てビルドしてみたのですがうまく行きません。
調べてみると、patchを当てないと行けないようです。omakeはopamのパッケージとして提供されています。
omakeのファイルにパッチを当てるというような情報もopamのリポジトリにあります。

opamのパッケージを変更出来れば、簡単に改良が出来るはずです。

そこでまず、opamのパッケージの改良をする事を考えました。

opamでomakeをインストールするとomakeのパッケージ情報がどこかに格納されているはずです。

opamの情報は ~/.opam にあります。

omakeのパッケージ情報は ~/.opam/packages/omake にあります。

これを改良してみましょう。

https://github.com/ocaml/opam/wiki/Packaging

を参考にするとよさそうです。

	$ mkdir -p ~/dev/testing
	$ opam repo add testing ~/dev/testing

	
のようにして、ローカルのリポジトリを作ります。

	$ opam repo  # eq. to 'opam repo list'

これで、リポジトリが登録されている事が確認出来ます。

	$ opam update testing

とするとアップデートをかける事が出来ます。

## omakeのパッケージをコピーする

	$ cp -rf ~/.opam/packages/omake ~/dev/testing/packages/.

としてコピーします。

	$ cd ~/dev/testing/
	$ ls
	omake.0.9.8.6-0.rc1

と１つだけディレクトリがあります。これを

	$ mv omake.0.9.8.6-0.rc1 omake.0.9.8.6-0.rc2
	$ ls

新しいバージョンにします。


	cd ~/dev/testing && opam-admin check && opam-admin make -g omake
	opam update testing
	opam install omake

で、最新バージョンがインストール出来ます。


	cd ~/dev/testing/archives/
	ls
	omake.0.9.8.6-0.rc1-2+opam.tar.gz

とファイルが出来ているので、

	tar xvfz omake.0.9.8.6-0.rc1-2+opam.tar.gz

として解凍する事でソースが見れます。

	cd omake.0.9.8.6-0.rc1-2
	ls *.patch
	fam.patch	fam_osx.patch	opam.patch	readline.patch

	patch -u -p1 < fam.patch
	patch -u -p1 < fam_osx.patch
	patch -u -p1 < opam.patch
	patch -u -p1 < readline.patch
	
でパッチまで当たります。

	make all

で、ビルド

	make install

でインストール出来ます。インストール先は、例えば、/usr/local/binになります。

	opam uninstall omake

として、omakeをアンインストールしておけばテストが楽でしょう。
デバッグする場合は

	make install

だけでビルドからインストールまで出来て便利です。

## opamリポジトリに登録

githubのリポジトリをforkしてpull requestすればよいのだと思うのですがやった事がないので、教えてください。よろしくお願いします。

https://github.com/hsk/opam-repository/tree/master/packages/omake/omake.0.9.8.6-0.rc1-2

とりあえず動けばという事で、リソースIDがあってないとかで問題があるかもしれないので、使ってみて問題無さそうであれば登録する等していただけると幸いです。
osxのnpm installをsudo無しで行えるようにする


下記コマンドを実行してフォルダの権限を変更すれば、以降はsudo無しでnpm installが可能になります。

```
// 共通
$ sudo chown -R $(whoami) ~/.npm

// -gのnpm installをsudo無しにしたい場合
$ sudo chown -R $(whoami) /usr/local/lib/node_modules

// アプリケーションのnpm installをsudo無しにしたい場合
$ sudo chown -R $(whoami) [nodeアプリケーションのパス]/node_modules
```

自動デプロイ時などで、sudoのパスワード入力をスキップしたい場合に便利です。
SublimeText2でCoffeeScriptを実行する時のビルド設定（Windows）

SublimeText2でCoffeeScriptを実行する時のビルド設定
====

Windowsだと文字コードとかでよくハマるので、動作確認済みのビルド設定を下記にメモしておきます。

## 環境

- Windows7
- SublimeText2

```
{
	"cmd": ["coffee.cmd", "-c", "$file"]
,	"selector": "source.coffee"
,	"encoding": "cp932"
,	"working_dir": "$project_path"
,	"variants":
	[
		{
			"name": "Run",
			"cmd": ["coffee.cmd", "$file"]
		}
	]
}
```
CentOS 7のパブリックミラーサイトのディレクトリ構成

この投稿ではCentOS 7のパブリックミラーサイト（一例として、 http://mirror.centos.org/centos/7/ ）のディレクトリ構成を説明する。

# 各ディレクトリの説明

## centosplus

CentOSPlusリポジトリを含むディレクトリ。このリポジトリにはbaseリポジトリやupdatesリポジトリに含まれるパッケージの一部へCentOS独自の拡張パッチを当て機能拡張したパッケージが配置されている。デフォルトではyumのリポジトリとしては無効になっているので、利用するには明示的に有効にする必要がある。

## cr

CR(continuous release)リポジトリを含むディレクトリ。このリポジトリには次期ポイントリリースに含まれるパッケージが配置されている。この配置が行われるのは次期ポイントリリースの数日前であり、事実上、リリース候補版に相当する。ポイントリリースが行われた後はここに配置されたパッケージは移動させられ、なくなることになる。CentOS 7ではデフォルトではyumのリポジトリとしては無効になっているので、利用するには明示的に有効にする必要がある。CentOS 6までは無効ではなく、リポジトリ設定さえされていなかった。

## extras

CentOS Extrasリポジトリを含むディレクトリ。このリポジトリにはRHELで提供されているが十分にテストされていないパッケージが配置されている。つまりどういうことかと言うと、updatesリポジトリ（や、大抵のbaseリポジトリ）にあるパッケージは、通常は新しいパッケージが提供されてもバックポートによる対応となるため、バージョン番号が上がることはなくパッチ番号が増えるだけだが、extrasリポジトリに置かれるのは進化が速すぎる等の理由でバックポートによる対応ができないので、都度新しいバージョンを提供することにしたパッケージである。デフォルトでyumのリポジトリとして有効になっている。

## fasttrack

CentOS-Fasttrackリポジトリを含むディレクトリ。このリポジトリは次期ポイントリリースに含まれる予定のパッケージを何らかの理由で先行して公開するためのものであり、CRと違って常設である。デフォルトではyumのリポジトリとしては無効になっているので、利用するには明示的に有効にする必要がある。

## isos

このディレクトリにはCentOSのインストールイメージとなるISOファイルを配置する。ポイントリリースごとに中身は固定であり変更されない。CentOS 7においては現在のところ以下のようなISOファイルが配置されている。

* DVD.iso

Everything.isoからDVD1枚に収まるように、使用頻度が低いと思われるパッケージを取り除いたものである。CentOS 6におけるDVD1.isoに相当する。

* Everything.iso

CentOSのインストーラに、そのポイントリリースで提供されるすべてのbaseリポジトリに含まれるパッケージを同梱したものである。CentOS 6におけるDVD1.isoとDVD2.isoをまとめて1つのISOファイルにしたもの、と考えることができる。

* GnomeLive.iso

デスクトップ環境をGNOMEにしたライブイメージ（インストールせずにOSを起動可能にしたイメージ）である。

* KdeLive.iso

デスクトップ環境をKDEにしたライブイメージである。

* Minimal.iso

Everything.isoから「最小限のインストール」に含まれるパッケージ以外を取り除いたものである。OSインストール時に使用すると必ず「最小限のインストール」となる。

* NetInstall.iso

Everything.isoからすべてのパッケージを取り除いたものである。OSインストール時にはパッケージ参照元としてインターネット上のパブリックミラーが選択される。

* livecd.iso

GnomeLive.isoからCD1枚に収まるように、使用頻度が低いと思われるパッケージを取り除いたものである。

## os

このディレクトリに配置されるのはEverything.isoの中身そのものであり、OSインストール時にはパッケージ参照元として利用可能である。ポイントリリースごとに中身は固定であり変更されない。またbaseリポジトリを兼ねる。baseリポジトリに含まれるのはそのポイントリリースで標準として提供されるパッケージである。これらのパッケージはRHELでも提供されているが、CentOSではRed Hatの商標関係などを取り除いたり、Red Hatの何かが参照先となっている箇所を変更したりしている。baseリポジトリはデフォルトでyumのリポジトリとして有効になっている。

## updates

updatesリポジトリを含むディレクトリ。このリポジトリには次期ポイントリリースまでに提供された、baseリポジトリのパッケージに対するアップデートが配置されている。デフォルトでyumのリポジトリとして有効になっている。

# おわりに

このページはCentOS 7のCRにパッケージが公開されたのを記念して書いてみた。
つまりこれを書いた2015-03-18時点でCentOS 7.1.1503のリリースがもう近づいている、ということである。
ただ、 http://seven.centos.org/2015/03/centos-7-next-release/ にはCentOS 7.1.1503は3月18日から20日のリリース予定となっているが、CRのパッケージ公開が13日から14日予定だったのが遅れたので、リリースも多少遅れるかもしれない。
[Unity] Unityからnendの広告を表示させる方法

Unityからnendを表示させる方法とサンプルコードを紹介します。
nendのバージョンは1.0.2を想定しています。

# 広告表示の確認する際に注意したいこと

広告の表示は、**実機に広告を表示するアプリをインストール**しないと、確認することができません。
**UnityのScene画面からは確認することができない**ので注意してください。

# 広告を表示する方法

広告を表示するためには、以下の手順が必要です。

1. [nendのマニュアル](https://github.com/fan-ADN/nendSDK-Unity/wiki)に従い、nendをunityにインストールします。
2. 以下のスクリプトを呼び出します。


```javascript:show_nend_ad.js
var banner = GetComponent(NendAdBanner);
banner.Show();
banner.Resume();
```

# シーン遷移時の処理に気をつけよう

シーンが変わる時には、以下の手順に従って**広告を一旦無効化する必要があります**。

```javascript:hide_nend_ad.js
var banner = GetComponent(NendAdBanner);
banner.Hide();
bannder.Pause();
```

遷移時になぜ広告を無効化するか、その理由を忘れてしまいました。
もし知っている方がいましたら教えてください。


# nend広告表示簡易化スクリプト

これらの処理を行うのが面倒だという方のために、簡単なスクリプトを作成しました。

[Nend_Ad_Banner_Controller.js](https://github.com/nutti/Unity-Utility-Library/blob/master/Ad/Nend_Ad_Banner_Controller.js)

このサンプルをシーン管理するオブジェクト(シーン内でずっと存在するオブジェクトであればなんでもよい)にNendAdBannerと一緒にコンポーネントとして追加します。
NendAdBannerの追加の方法は[マニュアル](https://github.com/fan-ADN/nendSDK-Unity/wiki/%E3%83%90%E3%83%8A%E3%83%BC%E5%9E%8B%E5%BA%83%E5%91%8A#banner_scene)を参照してください。

サンプルを利用することで、シーン開始とともにnendの広告が自動的に表示されるため、nendの広告を表示するためのコードを追加する必要はありません。
ただし、シーンの遷移直前にnend広告を非表示にする必要があるため、シーン遷移処理(LoadLevel等)の直前に以下を呼び出す必要があります。

```javascript:display_ad.js
GetComponent(Nend_Ad_Banner_Controller).OnScreenChanged();
```

ここまでの作業を全てのSceneについて行えば、nendの広告を表示させるための作業は完了です。

# 参考文献
* [nendマニュアル](https://github.com/fan-ADN/nendSDK-Unity/wiki)
【CoffeeScript】正規表現リテラル内で変数を展開する

# CoffeeScriptにおける正規表現
## Block Regular Expression
Rubyでは文字列と同じく，正規表現リテラル内でも変数展開が可能である．

```ruby
`/#{hoge}Script/`
```

ではRubyと同様の文字列リテラルでの変数展開を利用できるCoffeeScriptだとどうか？

```coffeescript
# これは死
# /#{hoge}Script/

# これならOK
///#{hoge}Script///
```

この3重スラッシュは[**Block Regular Expressions**](http://coffeescript.org/#regexes)という名前らしい．

> extended regular expressions that ignore internal whitespace and can contain comments and interpolation
>
> <cite>[Block Regular Expressions - CoffeeScript](http://coffeescript.org/#regexes)</cite>

```coffeescript
///#{hoge}Script/// # =>`RegExp(hoge + "Script");` に変換される
```

Perlのxオプションのように改行とか空白，コメントも自由に入れられる（空白を無視してほしくない時はエスケープする: `\ `）．

> Modeled after Perl's /x modifier

```coffeescript
# 変換前
OPERATOR = /// ^ (
  ?: [-=]>             # function
   | [-+*/%<>&|^!?=]=  # compound assign / compare
   | >>>=?             # zero-fill right shift
   | ([-+:])\1         # doubles
   | ([&|<>])\2=?      # logic / shift
   | \?\.              # soak access
   | \.{2,3}           # range or splat
) ///

# 変換後
# var OPERATOR;
# 
# OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/;
```


便利．

```coffeescript
text = 'Java'
msg = 'JavaScriptTypeScriptCoffeeScriptTypeScriptJavaScriptCoffeeScript'

pattern = ///#{text}Script///g
msg.replace(pattern, 'TypeScript')
# => TypeScriptTypeScriptCoffeeScriptTypeScriptTypeScriptCoffeeScript
```

TypeScript最高(╹◡╹)

# Ref

* [Block Regular Expressions - CoffeeScript](http://coffeescript.org/#regexes)