OmniAICreator/Qiita-1.07M huggingface dataset:
multiple-cursor.elの設定を調整してみた


SublimeText2の複数カーソルに相当する[multiple-cursors.el](https://github.com/magnars/multiple-cursors.el)はとても便利なのですが、キーバインドを自分で考えて設定しないといけないのが敷居を高くしています。

そこで基本的な操作に困らないようにキーバインドを設定してみました。[multiple-cursors.elのキーバインドを少しだけ改善 - 備忘録](http://tam5917.hatenablog.com/entry/20121208/1354931551)のsmartrepを使うアイデアをを参考にしています。

## インストール
どちらも[package.el](http://ongaeshi.hatenablog.com/entry/20120613/1339607400)からインストール出来ます。

```
M-x package-install multiple-cursors
M-x package-install smartrep
```

## .emacs.d/init.el

```el:.emacs.d/init.el
(require 'multiple-cursors)
(require 'smartrep)

(declare-function smartrep-define-key "smartrep")

(global-set-key (kbd "C-M-c") 'mc/edit-lines)
(global-set-key (kbd "C-M-r") 'mc/mark-all-in-region)

(global-unset-key "\C-t")

(smartrep-define-key global-map "C-t"
  '(("C-t"      . 'mc/mark-next-like-this)
    ("n"        . 'mc/mark-next-like-this)
    ("p"        . 'mc/mark-previous-like-this)
    ("m"        . 'mc/mark-more-like-this-extended)
    ("u"        . 'mc/unmark-next-like-this)
    ("U"        . 'mc/unmark-previous-like-this)
    ("s"        . 'mc/skip-to-next-like-this)
    ("S"        . 'mc/skip-to-previous-like-this)
    ("*"        . 'mc/mark-all-like-this)
    ("d"        . 'mc/mark-all-like-this-dwim)
    ("i"        . 'mc/insert-numbers)
    ("o"        . 'mc/sort-regions)
    ("O"        . 'mc/reverse-regions)))
```

## よくあるパターン 
- キーワード選択→`C-t`連打でキーワードを選択
- `C-t`を押した後に`s`を押すとキーワードをスキップ, `u`で一つ前に戻る、`*`で全て選択、`d`でバッファ内をいい感じで全選択
- 範囲を選択して`C-M-c`で全ての行にカーソルを作成
- 範囲を選択して`C-M-r`で対話的にキーワードを入力してカーソルを作成

## リンク
- [Emacsでリファクタリングに超絶便利なmark-multiple (複数行同時編集) - ブログのおんがえし](http://ongaeshi.hatenablog.com/entry/20121205/1354672102) - mark-multipleはmultiple-cursorsの前身です
- [multiple-cursors.el setting.](https://gist.github.com/ongaeshi/5891530)
WindowsPowerShell入門 - 日付毎に最後のイベントログを表示する

Windows PowerShell は、Windowsの次世代コマンドラインです。
コマンドプロンプトではできなかったあんなことやこんなことがコマンドラインでできるようになります。

## 参考

[GUIユーザーのためのPowerShell入門 | コラム | エンタープライズ | マイナビニュース](http://news.mynavi.jp/column/powershell/index.html)

## 特徴

* オブジェクト指向
* いまどきの制御構造が使える
* .NET Frameworkの全機能が使える

## 起動方法

### A. 「ファイル名を指定して実行」で「powershell」と入力してEnter

「ファイル名を指定して実行」ダイアログは、「Windowsキー + r」同時押しで出てきます。

### B. エクスプローラーのアドレスバーに「powershell」と入力してEnter

エクスプローラーで開いている場所がカレントディレクトリになります。

## 基本コマンド

Windowsは大文字小文字を区別しないので、全て小文字でもOKです。

### イベントログの一覧を表示

    > Get-EventLog -List

### Get-EventLogのヘルプを表示

    > Get-Help Get-EventLog 

### イベントログ（Systemログ）を表示

※すごいでるので、満足したら「Ctrlキー + c」同時押しで終了させる。

    > Get-EventLog System

### 最新のイベントログ5件を表示

    > Get-EventLog System -Newest 5

### Errorログを抽出（grep）

PowerShellにもgrep用コマンドはありますが、
慣れ親しんだコマンドプロンプトのコマンドも使えます。

    > Get-EventLog System -Newest 500 | findstr "Error"

### 日時を表示

    > Get-Date

### 一日前の日時を表示

    > (Get-Date).AddDays(-1)

### 一日と一時間前の日時を表示

    > (Get-Date).AddDays(-1).AddHours(-1)

### 一日と一時間前以降のイベントログを表示

    > Get-EventLog System -After (Get-Date).AddDays(-1).AddHours(-1)

### 好きな日時を表示

    > New-Object System.DateTime 2013,11,29,11,29,29,29

### 変数に格納

    > $fav_date = New-Object System.DateTime 2013,11,29,11,29,29,29

### 変数の値を表示

    > echo $fav_date

または

    > $fav_date

### 1から10まで表示

比較演算子はUnixシェルと似ています。

    > for ($i = 1; $i -le 10; $i++) {
    >     echo $i
    > }
    > # いっこ余計にEnterで実行

## 応用

###  日付毎に最後のイベントログを表示

    > for ($day = 1; $day -le 30; $day++) {
    >     $start_time = New-Object System.DateTime 2013,6,$day,0,0,0,0
    >     $end_time   = New-Object System.DateTime 2013,6,$day,23,59,59,999
    >     Get-EventLog System -After $start_time -Before $end_time -Newest 1
    > }
    >

スクリプトに書いて実行することもできますが、権限を変更する必要があります。

* http://www.atmarkit.co.jp/fwin2k/win2ktips/1023ps1sec/ps1sec.html


## アプリケーションとサービスログを表示

### 印刷ログを表示するコマンド

    > Get-WinEvent -ProviderName "Microsoft-Windows-PrintService"
【Ruby on Rails】sitemap-generator の超簡単な使用方法

## まずはインストール
### １．Gemfileに以下を追記
```rb
gem "sitemap_generator"
#ぼくの環境では以下のとおり、バージョンも指定。
gem "sitemap_generator", "~> 4.1.0"
```
### ２．bundle installを実行
```rb:
bundle install
```

## 設定ファイルの生成
### １．以下のコマンドを実行
```rb:
rake sitemap:install
```
すると、/config/下にsitemap.rbが生成されるので、そこにサイトマップに載せたいURL情報を記述する

## 設定をする
### １．/config/sitemap.rbに追記していく。
### ２．ホスト情報を設定
```rb:
SitemapGenerator::Sitemap.default_host = 'http://example.com'
```
### ３．サイトマップの保存先を設定
```rb:
SitemapGenerator::Sitemap.sitemaps_path = 'sitemaps/'
```
上記だと、/publi/sitemaps/下に作成される

### ４．サイトマップに記載したいURLを設定していく
```rb:
#以下だとlastmod、changefreq、priorityがデフォルト値で設定される
add "/about"
```

## 実行する
### １．rake sitemap:refresh　コマンドを実行する
### ２．指定した場所（デフォルトではpublic直下）にsitemap.xml.gzという圧縮ファイルが生成されるので、解凍するとsitemap.xmlを確認できる。



ほんとにざっくりとした説明で申し訳ないです。
より詳しくは以下のサイトをご覧ください。
・ [sitemap.xmlの記載方法と書式、設置する事で得られるメリット](http://holy-seo.net/blog/seo/sitemap-sml-method-described-merit/)
・[【Ruby, Rails】sitemap-generatorを使ってsitemapを作成。](http://shirusu-ni-tarazu.hatenablog.jp/entry/2012/10/09/013117)
インスタンス変数の遅延初期化で ||= のイディオムが使えない場合


初期化で代入する値が nil や false となる可能性がある場合、 ||= による遅延初期化のイディオムが使えない。

そのような場合は、 instance_vairable_defined? メソッドを使う。

```ruby
class Hoge
  attr_reader :fuga

  def fuga
    unless instance_variable_defined?(:@fuga)
      @fuga = false
    end
    @fuga
  end
end
```


出展：[リファクタリング:Rubyエディション](http://www.amazon.co.jp/%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0-Ruby%E3%82%A8%E3%83%87%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3-Jay-Fields/dp/4048678841/ref=sr_1_1?ie=UTF8&qid=1372508059&sr=8-1&keywords=%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%3Aruby) より
Railsの存在演算子で、undefined local variable エラーを簡単に回避する

# Railsの存在演算子
CoffeeScriptでは存在演算子 ? を使うことによって、
null参照した時のエラーを簡単に回避することができます。

```coffeescript:CoffeeScript
hoge.foo
# hoge = undefinedのときエラーが発生
hoge?.foo 
# hoge = {foo: "bar"} のとき "bar"
# hoge = undefinedのときエラーが起きずに undefined 
```


Rails+Coffeescriptで開発していると、なぜRubyにこのような演算子がないのかと思いますが、
実はRailsのActiveSupportの try というメソッドで同じ事ができます。

```rb:Ruby

hoge.foo
# hoge = nilのときエラーが発生
hoge.try(:foo)
# hoge.fooというメソッドが定義されているとき hoge.foo
# hoge = nilのときエラーが起きずに nil


hoge.try(:foo, 3, 4)
# hoge.foo(3, 4)と同値
# 2引数目以降に代入された引数はfooメソッドに代入される


hoge.try(:[], "bar")
# hoge["bar"]と同値
# 結構使うことが多い
```

Railsにおいては実際こんなかんじに使うことが多いです

```rb:Rails
user.picture.try(:url) || "http://デフォルトの画像"
# ユーザーが画像を持ってるときはそのURL、もしない場合はデフォルトの画像のURL
```

　　
*****
tryの実装

```rb:try
def try(*a, &b)
  if a.empty? && block_given?
    yield self
  else
    __send__(*a, &b)
  end
end
```

（タイトルで存在演算子と言っていますが、tryはメソッドなので演算子ではありません）
複数行に対して矩形選択からの挿入

# 矩形選択からの挿入
Ctrl + v 矩形選択モード

挿入したいところにカーソル持ってくる

I(Shift + i)で入力開始

タイプする 1行だけ変わってるけど気にしない

ESC!

一気に挿入されます
deprecate と宣言されたメソッドを呼び出したときに警告を出す

出展： [リファクタリング:Rubyエディション](http://www.amazon.co.jp/%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0-Ruby%E3%82%A8%E3%83%87%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3-Jay-Fields/dp/4048678841/ref=sr_1_1?ie=UTF8&qid=1372508059&sr=8-1&keywords=%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%3Aruby) に掲載されていたコードを写経（出力されるメッセージなどは適当に変更している）。

以下のように Module クラスに deprecate メソッドを定義する。

```ruby:module_ext.rb
class Module
  def deprecate(method_name)
    module_eval <<-END
      alias_method :deprecated_#{method_name}, :#{method_name}
      def #{method_name}(*args, &block)
        $stderr.puts "Warning: #{self}##{method_name} メソッドは将来的に廃止される予定のため非推奨です!!!"
        deprecated_#{method_name}(*args, &block)
      end
    END
  end
end
```

以下のように、非推奨(deprecate) とするメソッド名をシンボルで渡す。

```ruby:hoge.rb
class Hoge
  def fuga
    puts "やほー!!!"
  end

  deprecate :fuga
end
```

実行結果：

<pre>hoge = Hoge.new
hoge.fuga

Warning: Hoge#fuga メソッドは将来的に廃止される予定のため非推奨です!!!
やほー!!</pre>
install centos（5.6） in linux textでインストしたときのメモ

# virtualboxでローカル仮想環境を作り、sshクライアントでアクセスしたいので作成

##1
To install or upgrade in text mode, type: linux text <ENTER>とある
linux textとタイプ > ENTER

##2 CD Found
CDメディアのテストをインストールする前に行うか聞いてくる
Skip > ENTER

##3 CentOS
ようこそ！
OK > ENTER

##4 Language Selection
言語選択
Japanese > OK > ENTER

##5 Language Unavailable
インストール中は日本語表示できないから英語で続けるねと言われる
OK > ENTER

##6 Keyboard Selection
普通は106キーボードかな
jp106 > OK > ENTER

##7 Partitioning Type
パーティションの選択
全部消してから初期設定で作るよということで
Remove linux partitions on selected drives and create default layout.

特に変更せず
OK > ENTER

##8 Warning
データ全部消えるけどいい？と聞かれる
問題なければ
Yes > ENTER

##9 Review Partition Layout
パーティションの情報を確認または変更するか
必要なければ
No > ENTER

##10 Configure Network Interface
ネットワークの設定をするか
Yes > ENTER

##11 Network Configuration for eth0
IPv4を使うので
Enable IPv4 support > SPACE > OK > ENTER

##12 IPv4 Configuration for eth0
DHCPであればそのまま
OK > ENTER

##13 Hostname Configuration
ホスト名の設定
automatically via DHCPそのままで
OK > ENTER

##14 Time Zone Selection
時間帯の設定
Asia/Tokyoで
OK > ENTER

##15 Root Password
ルートのパスワード。6文字以上で適当に
入力後、OK > ENTER

##16 Package selection
今回はputtyを使って接続し操作するためSeverを選択
初期状態でチェック済みのDesktop - Gnomeはいらないので外す
Desktop - Gnome > SPACE > Server > SPACE > OK > ENTER

##17 Installation to begin
インストールログファイルは /root/install.log に作られるよといわれる
OK > ENTER

しばらく放置

##18 Complete
Reboot > OK

おつかれさまです
フォーマット文字列内での波括弧のエスケープ

Pythonでフォーマット文字列を使用する場合,波括弧をプレースホルダの指定に使用する. 
波括弧自体を文字列として使用したい場合, 以下のように波括弧を重ねる必要がある.

```python:波括弧のエスケープ
>>> 'test {{{0}}}'.format('hoge')
'test {hoge}'
```

バックスラッシュではエスケープできないので注意.

(ref) http://docs.python.org/2.7/library/string.html#formatstrings
Eclipse4.3 で Web Application Serverのautoreloadを有効にする。

J2EEでクラスファイルをいじった場合、再読み込みが必要です。
Eclipseを使ったときは、保存時に自動的にコンパイルしてくれるので、どうせだったら自動的に再読み込みしてほしい、そのための設定です。

J2EEパースペクティブのServersビューのサーバをダブルクリック。
開いたページのPublishing→Modify settings for publishingで、Automatically publish when resource changeを選択すると再読み込みしてくれます。
「エイト・クイーン問題」をErlangで その2

エイト・クイーン問題([Wikipedia](http://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%A4%E3%83%88%E3%83%BB%E3%82%AF%E3%82%A4%E3%83%BC%E3%83%B3))をErlangで解いてみました。

[前回](http://qiita.com/pazworld/items/2a50f208ca2e5c1b4098)は再帰の先端で結果を表示するだけでした(ので個数は別プロセスのアクターに数えさせていました)が、今回はすべての解をリストのリストで返すようにしました。

バックトラッキングの先端から解を返すため、「下降時にも戻りの上昇時にも自分自身を呼び出し続ける」方式になっています。関数がリターンするのはすべての探索を終了した時だけです。

公開されている関数:

- solve() … 解をリストのリストで返します。
- solve_count() … 解の個数(92)を返します。
- solve_display() … 前回と同様に解をボード状態のAAで返します。

```erlang:eq2.erl
% solve 8-queens problem.

-module(eq2).
-export([solve/0, solve_count/0, solve_display/0]).

% Solve and return answer as a list of lists.
solve() -> solve(1, [], []).

% Solve and return count of answers.
solve_count() -> length(solve()).

% Solve and display them in user friendly style.
solve_display() -> lists:foreach(fun display/1, solve()).

% Found an answer of queens position.
solve(_, Queens, L) when length(Queens) == 8 ->
  solve(hd(Queens) + 1, tl(Queens), [Queens|L]);

% Finished searching all cell on the board.
solve(9, [], L) -> L;

% Finished searching one line.
solve(9, [H|T], L) -> solve(H + 1, T, L);

% Search.
solve(Col, Queens, L) ->
  case not conflict(Col, Queens) of
    true -> solve(1, [Col | Queens], L);
    false -> solve(Col + 1, Queens, L)
  end.

% Check if a column conflicts with queens.
conflict(Col, Queens) ->
  Conflict = fun({N, QCol}) -> Col == QCol orelse abs(Col - QCol) == N end,
  lists:any(Conflict, with_idx(Queens)).

% [a,b,c] -> [{1,a},{2,b},{3,c}].
with_idx(L) -> lists:zip(lists:seq(1, length(L)), L).

% Display board.
display(Queens) ->
  Frame = "**********",
  io:fwrite("~s~n", [Frame]),
  lists:foreach(fun(X) -> io:fwrite("*~s*~n", [make_line(X)]) end, Queens),
  io:fwrite("~s~n~n", [Frame]).

% Make a line of board.
make_line(X) -> string:chars($., X - 1) ++ "Q" ++ string:chars($., 8 - X).
```
Doctrine 2 DBALを使ってみる（SQL直投げ編）


## 1.DBALを使えるようにする

今回は**Composer**に依存管理をお願いしてDoctrineを準備してもらいます。
なので、まずはComposerを準備します。

### Composer準備

``` console
curl -s http://getcomposer.org/installer | php
```

そしてcomposer.jsonというファイルを準備。


```composer.json
{
	"require": {
		"doctrine/dbal": ">=2.3.0"
	}
}

```

後はComposerに任せるだけ。

```console
php composer.phar install
```

コマンドの実行後にカレントディレクトリには**vendor**というディレクトリが出来ています。
Composerがよしなにしてくれるので、Composerに追加してあるものであれば以下のファイルをインクルードするだけで済みます（便利！）

```php
<?php
include_once "vendor/autoload.php";
```

次にDoctrineの初期化処理をしていきます。

### Doctirne準備

```php
<?php

use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\DriverManager;

// 接続するDBの設定
$conn = [
	"driver"=>"pdo_mysql",
	"host"=>"localhost",
	"user"=>"root",
	"password"=>"password",
	"dbname"=>"db_name",
	"charset"=>"utf8",
];

// デフォルトのフェッチ形式を連想配列にする
$config = new Configuration([ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]);

$doctrine = DriverManager::getConnection( $conn, $config );

```

これでDBALが利用できるようになりました。


## 2.SQLを投げてみる

### 一番シンプルなの

基本的には以下のようにするだけです。

``` php
$result = $doctrine->fetchAll( 'SELECT * FROM sample_table' );
var_dump( $result );
```

### バインドを使ってみる

バインドとは何か？
とりあえずは下のソースを見てみましょう！


```php
$result = $doctrine->fetchAll( 'SELECT * FROM sample_table WHERE id = :id', ['id'=>1] );
var_dump( $result );
```
SQL文中になにやら怪しげなのが！？
**id = :id**
:が付いているのがありますね。
実は:をつけたものは第二引数で指定している配列上のパラメータに置き換えをしてくれます（便利！！）
これが、バインドという機能です

### INSERTしてみる

INSERT/UPDATE/DELETEをする際には、**fetchAll**ではなく**executeUpdate**を使います。
また、返値は行数が帰ってきます。

```php
<?php
$result = $doctrine->executeUpdate(
	'INSERT INTO sample_table ( id, description ) VALUES ( :id, :description',
	[ 'id'=>2, 'description'=>'INSERTしてみる！' ]
);
var_dump( $result );
```
### 書き方のバリエーション

```php
<?php

	// ベースとなるSQLをprepareでセット
	$stmt = $doctrine->prepare( 'SELECT * FROM sample_table WHERE id = :id' );

	// ex. 複数のIDで抽出したいとか（WHERE INとかにするべきなんだろうけどとりあえず
	// WHERE IN にする方法があるという気もするけど・・・・
	$stmt->bindValue( ':id', 1 );
	$stmt->execute();
	var_dump( $stmt->fetchAll() );
	
	$stmt->bindValue( ':id', 2 );
	$stmt->execute();
	var_dump( $stmt->fetchAll() );

	// 単一行の抽出ならfetchAssoc()
	var_dump( $stmt->fetchAssoc() );
```

----

次回、もしかしたらQueryBuilder編が・・・・！
SensorEventのtimestampについてのメモ

`SensorEvent.timestamp`はシステムブート時からの経過時間(ナノ秒)。
じゃあ`SensorEvent`をもらった時のいわゆるUNIX時間をもらいたいときはどうしたらいいんだ？となって書いてみたのが以下のコード。

```MySensorListener.java

long eventOccuredTimeMilli = -1;
long eventOccuredTimeNano = -1;

@Override
public void onSensorChanged(SensorEvent event){
   if (eventOccuredTimeMilli < 0){
      eventOccuredTimeMilli = System.currentTimeMillis();
      eventOccuredTimeNano = event.timestamp;
   }
   long unixtime = eventOccuredTimeMilli
             + (event.timestamp - eventOccuredTimeNano) / 1000000;
   // 後略
}

```
イケてない。。。

`SensorEvent.timestamp`の値って`System.nanoTime()`でもらえる値と一緒なのでしょうか。C++力低すぎて追いかけきれませんでした。リスナー作る時に一回調べるだけで済ませたいですよね。
OS Xでシリアル番号ごとに好みのホスト名を指定する方法

以下のスクリプトは**テストしていません**ので注意（次回にMacを購入したら、そのときにでもテストしようと思います）。

```sh:setHostName.sh
#!/bin/sh
PATH=/usr/sbin:/sbin:/usr/bin:/bin
SERIAL="$(system_profiler 2> /dev/null | grep 'Serial Number (system)' | awk -F ': ' '{print $2}')"
case "${SERIAL}" in
    C02JXXXXXXXX) EXPECTEDHOSTNAME=daystar.example.co.jp ;;
    C02JYYYYYYYY) EXPECTEDHOSTNAME=exegesis.local ;;
    *) EXPECTEDHOSTNAME= ;;
esac
if [ -n "${EXPECTEDHOSTNAME}" ]; then
    sudo scutil --set HostName "${EXPECTEDHOSTNAME}"
fi
ACTUALHOSTNAME="$(scutil --get HostName)"
test "${ACTUALHOSTNAME}" == "${EXPECTEDHOSTNAME}"
STATUS=${?}
case ${STATUS} in
    0)
        echo "Setting hostname ${EXPECTEDHOSTNAME} succeeded." ;;
    *)
        echo "Setting hostname ${EXPECTEDHOSTNAME} FAILED." ;;
esac
exit "${STATUS}"
```

ポイントは以下の2つです。

1. system_profilerからMacのシリアル番号が取得できること。
2. 「scutil --set HostName」でホスト名を指定できること。

シリアル番号はMacの保証について問い合わせる際に必要な情報なのでむやみに公開できるものではなく、したがってこのスクリプトを一般公開することはできないのですが、自分専用のgitレポジトリにでも置いておくとあとで楽なのではないかと思います。
scutilによるホスト名の設定

Macのホスト名は、デフォルトではたとえば「細野英朋 の MacBook Air」「hosono-hidetomo-no-MacBook-Air」のようになります。また、DHCPでネットワーク環境を取得するケースだと、IPアドレスの逆引きがシェルプロンプトに出てくることがありますが、これを固定したいという人は多いと思います。

このような場合、「システム環境設定」を起動、「共有」を開き、ダイアログ上部「コンピュータ名」の右下にある「編集」をクリックするとローカルホスト名の編集ができるようで、検索してもこの方法が一般的なようです。

しかし私は、『[ASCII.jp：知ってトクするOS Xのコマンド（1） (1/2)｜Apple Geeks](http://ascii.jp/elem/000/000/590/590880/)』に掲載されているscutilを使うのが好みです。

そこで、scutilを使ったホスト名の設定方法を簡単に書き出します。

ホスト名を「exegesis.local」（「ローカルネットワーク名は、コンピュータ名に『.local』を追加した名前」と定義されているので、サーバ利用などで固定IPアドレスが付与され逆引きが設定されている場合を除いて末尾の「.local」は必須のようです）としたいときは「--set HostName」を使います。root権限が必要です。

```
sudo scutil --set HostName exegesis.local
```

確認したいときは以下の通り、「--get HostName」を使います。こちらはroot権限不要です。

```
scutil --get HostName
```
system_profilerによるMacのシリアル番号取得

OS XではMacのシリアル番号をコマンドラインから取得することもできます。

```
h12o@Exegesis:~$ system_profiler 2> /dev/null | grep 'Serial Number (system)'
      Serial Number (system): C02JXXXXXXXX
h12o@Exegesis:~$ system_profiler 2> /dev/null | grep 'Serial Number (system)' | awk -F ': ' '{print $2}'
C02JXXXXXXXX
h12o@Exegesis:~$ 
```

切り出し方はもっといい方法がありそうですが、ひとまずはこのような方法があると紹介しておきます。
自分をコンパイルするCのソース

小さなプログラムを書いていると、コンパイラに渡すオプションとソースコードが別管理になっているのが不便に感じる。
そこで。

```c:hello.c
#if 0
CC_OPTS="clang -std=c99 -Wall"
target = $0+".bin"
t0=File.exist?(target) && File.mtime(target)
puts %x( #{CC_OPTS} #{$0} -o #{target} )
t1=File.exist?(target) && File.mtime(target)
if t1 && ( !t0 || t0<t1 )
  puts %x(./#{target})
end
__END__
#endif
#include <stdio.h>

int main()
{
  puts( "hello, world!");
  return 0;
}
```

こんな風にして、これを ruby のプログラムとして実行する。
言語の設定を変えてもう一度貼ると：

```ruby:hello.c[ruby]
#if 0
CC_OPTS="clang -std=c99 -Wall"
target = $0+".bin"
t0=File.exist?(target) && File.mtime(target)
puts %x( #{CC_OPTS} #{$0} -o #{target} )
t1=File.exist?(target) && File.mtime(target)
if t1 && ( !t0 || t0<t1 )
  puts %x(./#{target})
end
__END__
#endif
#include <stdio.h>

int main()
{
  puts( "hello, world!");
  return 0;
}
```

便利。
タイムスタンプをもう少しまじめに見た方がいいかなぁとか、出来上がるバイナリの名前がしょぼいとか、まあいろいろあるけれど。
NSWindowControllerのwindowをsheetとして呼び出す時には`Visible At Launch`のチェックを外す。


xib付きのNSWindowControllerをsheetとして別のwindowから呼びだそうとした時sheetとして呼び出されず別のwindowで開いてしまっていた。

私は、base windowのタイトルバーのところからニュっと降りてくるようにしたかった。

原因を調べている内に呼び出される側のxibファイルでwindowを選択し
window > Behaivior > Visible At Launch のチェックを外してみたらうまく行った。


```objc
 _webWindowController = [[WebWindowController alloc] initWithWindowNibName:@"WebWindowController"];
 [NSApp beginSheet:_webWindowController.window
       modalForWindow:self.window
        modalDelegate:self
       didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
          contextInfo:@"login webview close"];
```
cloud-initで設定ファイルをつくる

私は基本的にはchef使いなのでセットアップはそっちでやっていますが、chefを使うためのAMIを作成する等、chefを使うまでにセットアップ作業が必要になるケースはあります。

cloud-initで設定ファイルやスクリプトファイルの配備をする場合は、適当なWebサーバに置いてそこから取得するのが一般的だと思いますが、それを用意するのがどうにもめんどくさい場合、cloud-initで出来たら…と思うことがあります。

というわけで、cloud-initで設定ファイル等をつくるために有効なテクニックをご紹介します。

## ファイルに追記する
おなじみのこういうやつです。

```command_sample
echo "hoge hoge" >> /etc/settei.conf
```

これをcloud-initでやる場合はこうです

```yaml:echo_redirect
runcmd:
  - [sh, -c, 'echo "hoge hoge" >> /etc/settei.conf']
```

ポイントは`sh -c`を使っていることで、これを使うことでリダイレクトが使えるようになります。権限系の調整が必要な場合は、sudoでも使えるteeの方がいいかもしれません。

## ファイルを新規生成する
こんなやつ。つまるところ、改行入りのテキストファイルを新規作成ないしは追記したい場合のやり方です。

```command_sample
cat > /etc/settei.conf <<EOF
# settei file
hoge=settei
foo=bar
EOF
```

これをcloud-initでやる場合はこうです

```yaml:cat_redirect
runcmd:
  -
    - sh
    - -c
    - |+
      cat > /etc/settei.conf <<EOF
      # settei file
      hoge=settei
      foo=bar
      EOF
```

`sh -c`を使うところはechoを使うときと一緒です。
ただ、catで放り込むようなケースだと改行が入っているので、`|+`を使ってyamlに対して改行テキストとして認識させる必要があります。その場合`[a, b, c]`な表記だと厳しいので、上記のように配列部分は`[]`を使わず、インデントを下げた表現にしてます。改行テキストの中身部分もインデント位置はあわせます。（この表現で作られるファイルには、インデントした分のスペースは入らないのでご安心を）

## ファイルの中身を修正する
これは何の工夫もないですが、一応書いておきます

```command_sample
sed -i 's/en_US/ja_JP/' /etc/sysconfig/i18n
```

これはこうなります

```yaml:sed
runcmd:
  - [sed, -i, 's/en_US/ja_JP/', /etc/sysconfig/i18n]
```
Padrino で Letter Opener を使う


メール送信機能を実装したいんだけど、いちいち飛んできたメールを確認するのが面倒な場合に、使うと便利な [letter_opener](https://github.com/ryanb/letter_opener)

メールの内容がローカル環境にファイルとして生成され、ブラウザ上で確認できるようになります。

## つかいかた

```
$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.1]
$ padrino -v
Padrino v. 0.11.2
$
$ cd sample_project
```

Padrino Plugin でサクッと使えます

```
$ padrino g plugin letter_opener
$ bundle install
```
これで、

```
$ vim app/app.rb
```
```ruby:app/app.rb
module SampleProject
  class App < Padrino::Application
    # 省略

    get '/mail' do
      email do
      from    'foo@example.com'
        to      'bar@example.com'
        subject 'Welcome!'
        body    'Hello! Hello!'
      end
    end

    # 省略
  end
end
```

こんな感じのがあったとすると、ブラウザで `/mail` を叩けばメールが別ウィンドウで開くようになります。

## じぶんでやる

```
$ vim Gemfile
```
```Gemfile
gem "letter_opener", :group => :development
```
```
$ bundle install
```
```
$ vim config/apps.rb
```
```ruby:config/apps.rb
Padrino.configure_apps do
  # …
  if Padrino.env == :development
    set :delivery_method, {
      LetterOpener::DeliveryMethod => {
        location: Padrino.root('tmp/letter_opener')
      }
    }
  end
end
```
@dynamicを使って冗長なコードを排除しよう

入門書などではaddSubviewを行う際は、先ずオブジェクトを生成して、それをaddSubviewで対象のオブジェクトに追加するなどを行なっているかと思います。私自身も長らくそのようなソースの書き方をしておりました。この書き方は、何の処理をやっているのかが明確なので大変よいのですが、処理が少し冗長な気がします。

オブジェクトのインスタンス生成＆初期化処理などをgetterメソッドに記述して、自身でわざわざインスタンス生成＆初期化処理を行わなくても、使用する時（以下ではaddSubview実行時)にgetterメソッドを自動的に呼び出してもらいコード量を減らして処理をシンプルにすることが可能です。

これは@dynamicの活用例であります。

最近良く読む、オープンソースなどでこのような処理を多様しております。

@dynamicは省略できますが、ここではわかりやすいように記述しております。

```objc:
@interface SampleView()
@property (nonatomic,strong) UIButton *leftArrow;
@property (nonatomic,strong) UIButton *rightArrow;
@end

@implementation SampleView

- (id)appendSubview
{
    // getterメソッドを自分で記述することによりaddSubviewをCallした時にインスタンスを生成している
    [self addSubview:self.leftArrow];
    [self addSubview:self.rightArrow];
}

@dynamic leftArrow; // 省略可能
- (UIButton *)leftArrow
{
    if(_leftArrow) return _leftArrow;

    _leftArrow = [UIButton buttonWithType:UIButtonTypeCustom];
    _leftArrow.tag = 0;
    _leftArrow.frame = CGRectMake(0, 0, 52, 36);
    _leftArrow.accessibilityLabel = @"Previous";
    [_leftArrow addTarget:self action:@selector(change:) forControlEvents:UIControlEventTouchUpInside];
    [_leftArrow setImage:[UIImage imageNamed:@"left_arrow"] forState:0];
    return _leftArrow;
}

@dynamic rightArrow; //省略可能
- (UIButton *)rightArrow
{
    if(_rightArrow) return _rightArrow;

    _rightArrow = [UIButton buttonWithType:UIButtonTypeCustom];
    _rightArrow.tag = 1;
    _rightArrow.frame = CGRectMake(VIEW_WIDTH-52, 0, 52, 36);
    _rightArrow.accessibilityLabel = @"Next";
    [_rightArrow addTarget:self action:@selector(change:) forControlEvents:UIControlEventTouchUpInside];
    [_rightArrow setImage:[UIImage imageNamed:@"right_arrow"] forState:0];
    return _rightArrow;
}

@end
```
Java 5 以降の Windows インストール可能なバージョン

最近よく目にするので Javaのインストール可能なバージョン

| windows | java5 | java6 | java7 | java8 |
|--------:|------:|------:|------:|------:|
|    2000 |     0+|     0+|     - |     - |
|      XP |     0+|     0+|     0+|     - |
|   VISTA |     0+|     0+|     0+|     0+|
|       7 |     - |    18+|     0+|     0+|
|       8 |     - |     - |    10+|     0+|
|         |       |       |       |       |

# 以前の情報

| Windows Version |Java version | Start update | End update  |
|:-----------------|------------:|-------------:|------------:|
| Windows 8        |          7.0| update 10    | later       |
| Windows 8        |          6.0| not support  | not support |
| Windows 7        |          7.0| initialize   | later       |
| Windows 7        |          6.0| update 18    | later       |
| Windows 7        |          5.0| not support  | not support |
| Windows VISTA   |          7.0| initialize   | later       |
| Windows VISTA  |          6.0| initialize   | later       |
| Windows VISTA  |          5.0| initialize   | later       |
| Windows XP      |          7.0| initialize   | later       |
| Windows XP      |          6.0| initialize   | later       |
| Windows XP      |          5.0| initialize   | later       |
| Windows 2000    |          7.0| not support  | not support |
| Windows 2000    |          6.0| initialize   | later       |
| Windows 2000    |          5.0| initialize   | later       |
+ initialize : 初回リリース
Eclipse4.3をインストールして、Glassfish4.0を設定してみる。

Eclipse4.3、出ましたね。
記念にEclipse4.3をインストールしてみます。4.3の大きな変更点は、なんといってもJ2EE7対応。
なので、これまた最近出た、Glassfish4.0と一緒に使ってみます。

Eclipseのダンロード
---------------------------------------
http://www.eclipse.org/downloads/
からEclipse IDE for Java EE Developersをダウンロードします。私はMac 64bit.
容量246M。ダウンロードに少し待ちます。
eclipse-jee-kepler-R-macosx-cocoa-x86_64.tar.gzがダウンロードされたら、展開。
eclipseというフォルダができるので、その中のEclipseを起動。
起動、早くなりましたねー。
デフォルトでRetinaディスプレイに対応したようです。

Glassfish4.0のダウンロード
---------------------------------------
https://glassfish.java.net/download.html
から、glassfish-4.0.zipをダウンロードします。
好きな場所に展開。

EclipseからGlassfish4.0を起動できるようにする。
---------------------------------------
File → New → Other → Server → Serverで、ダイアログが開くので、右上の[Download additional server adapters]を開きます。
暫く待つと「Glassfish Tools」が選択肢に出るので、選択。インストールが終わると、Eclipseが再起動します。
再起動したら、File → New → Other → Server で、「Glassfish 4.0」が選択を選択して、Glassfish Server DirectoryにGlassfishを展開した中のglassfishディレクトリを指定してください。（Java 7が必要です。）
あとはfinishでGlassfishの設定完了。

さぁて、JAX-RS2.0行きますかね。
PHPで画像処理した時に縦横がおかしくなったらExifを疑うべし

画像の縮小処理をしたら、縦横が入れ替わってしまった様子。どうやらExifを見て判断されていたものが、縮小処理で欠落したので起こった事のようだ。

PHPではPelというライブラリが一般的な様子だが、古いものらしく所々エラーが出てしまう。githubで管理されているのでフォークした。その後パッチを作成している人のブランチをマージして解消している（なぜパッチ作成者が自身のmasterにマージしていないのかは謎）。リサイズのサンプルは以下のようになっている。

https://github.com/ms2sato/pel/blob/master/examples/resize.php

Facebook等に投稿してもこれで縦横が正常になった。
JDK 7 がインストールされていないとき

Java の開発環境、JDK 7 は、jdk-7u25-macosx-xXX.dmgでインストールしますが、
インストール後、
/System/Library/Java/JavaVirtualMachines/ 

にファイルはできません。

インストールされないなー。と思った方。

/Library/Java/JavaVirtualMachines/

を覗いてみてください。Javaがあるかも。

JDK 6まではAppleが提供していたんですが、JDK 7はOracleが提供。だからパスが変わったのかもしれませんねー。
ParseUserを拡張した際にハマった事


最近[Parse](http://parse.com/)を試しているのですがParseUserのequals()メソッドを書き換えるためにParseUserクラスを拡張したときの注意点をまとめました。

ParseObjectのサブクラス化については[公式のドキュメント](https://parse.com/docs/android_guide#subclasses)を読んでください。

```java:AppUser.java
@ParseClassName("_User")
public class AppUser extends ParseUser {
	public static final String FIELD_DISPLAY_NAME = "displayName";

	public String getDisplayName() {
		return getString(FIELD_DISPLAY_NAME);
	}
	public String setDisplayName(String value) {
		put(FIELD_DISPLAY_NAME, value);
	}

	@Override
	public boolean equals(Object o) {
		if (o == null) return false;
		if (!(o instanceof AppUser)) return false;
		if (getObjectId() != null) {
			return getObjectId().equals(((AppUser)o).getObjectId());
		} else {
			return super.equals(o);
		}
	}
}
```

```java:MyApplication.java
public class MyApplication extends Application {
	@Override
	public void onCreate() {
		super.onCreate();

		// 事前にParseObjectに紐付けするクラスを登録しておく
		ParseObject.registerSubclass(AnypicUser.class);

		// Parseの設定初期化
		Parse.initialize(this, "hogehoge", "hugahuga");
	}
}
```

### @ParseClassNameは"User"じゃなくて"_User"

"User"にすると検索結果が0件になります(多分別テーブルを検索してる?)

### ParseUserのインスタンスを作るとIllegalArgumentExceptionがthrowされます

```
06-29 00:38:25.677: E/AndroidRuntime(18712): Caused by: java.lang.IllegalArgumentException: You must register this ParseObject subclass before instantiating it.
06-29 00:38:25.677: E/AndroidRuntime(18712): 	at com.parse.ParseObject.<init>(ParseObject.java:147)
06-29 00:38:25.677: E/AndroidRuntime(18712): 	at com.parse.ParseObject.<init>(ParseObject.java:108)
06-29 00:38:25.677: E/AndroidRuntime(18712): 	at com.parse.ParseUser.<init>(ParseUser.java:48)
```

拡張したクラス(AppUser)のインスタンスを作りましょう。

ちなみにParseUserを取得する分には問題ないです。

```java
ParseUser me = ParseUser.getCurrentUser();
```
文字列型の確認

###はじめに
個人的な確認です。何かあればお願いします。

###文字列型の注意点
- データ型が異なればデータの格納方法が異なる
- NULL値はゼロでも空白文字でもない特殊な値である
- カラムの最大長を超える値を割り当てると、カラムのサイズに合わせて値が切り捨てられる

###MySQL

>[MySQL :: MySQL 5.6 Reference Manual :: 11.4.1 The CHAR and VARCHAR Types](http://dev.mysql.com/doc/refman/5.6/en/char.html)

#####CHAR型

- 固定長のデータ型
- あらかじめ指定した文字数の領域を固定的に確保する
- 値の格納時に、指定された長さになるよう右側にスペースが埋め込まれる

#####VARCHAR型

- 可変長のデータ型
- 文字列を格納するのに必要な文字数分の領域しか確保しない
- 値の格納時に、埋め込み処理が行われない

###SQL Server

>[SQL Server 2012 :: データ型 (Transact-SQL) :: 文字列型とバイナリ型](http://msdn.microsoft.com/ja-jp/library/ff848814.aspx)

#####CHAR型

- Unicode ではない固定長の文字列データ
- 指定できる値の範囲は 1 ～ 8,000
- 記憶領域のサイズは n バイト
- 値の格納時に、指定された長さになるよう右側にスペースが埋め込まれる

#####VARCHAR型

- Unicode ではない可変長の文字列データ
- 指定できる値の範囲は 1 ～ 8,000
- 記憶領域のサイズは 入力したデータの実際の長さ + 2 バイト
- 値の格納時に、埋め込み処理が行われない

#####NCHAR型

- 固定長の Unicode 文字列データ
- 指定できる値の範囲は 1 ～ 4,000
- 記憶領域のサイズは n の 2 倍のバイト数

#####NVARCHAR型

- 可変長の Unicode 文字列データ
- 指定できる値の範囲は 1 ～ 4,000
- 記憶領域のサイズは入力したデータの実際の長さの 2 倍のバイト数に 2 バイトを足した数
「第11回オフラインリアルタイムどう書くの問題」をPHPで解く

http://qiita.com/Nabetani/items/93cde1a6b7561426a3ac
http://nabetani.sakura.ne.jp/hena/ord11bitamida/

[前回](http://qiita.com/rana_kualu/items/bb3b4bf367143b21d0c4)はいきなり第12回を解いてたので、だんだん後ろに戻ってみたいと思います。
今回は第11回。
お題はビットあみだくじ。

```php:
<?php
	class AMIDA{
		
		/**
		* あみだを解いて返す
		* @param String 「d6-7b-e1-9e」みたいな文字列
		* @return String 「740631825」みたいな文字列
		*/
		public function get($hexData){
			// 初期値
			$nowAmida = range(0, 8);
			// 入力値を2進数にする
			$bitArray = $this->extractHex($hexData);
			foreach($bitArray as $key=>$bits){
				// 1段進む
				$nowAmida = $this->getNext($nowAmida, $bits);
			}
			// 終了
			return implode('', $nowAmida);
		}
		
		/**
		* 1段進む
		* 1があれば、次の0を探してそこと入れ替えればよい
		* @param array 現在の配列
		* @param String '01010101'みたいな
		* @return array 一歩進んだ後の配列
		*/
		private function getNext($nowAmida, $bits){
			$bits .= '0'; // 最後の0
			$left = -1; // 左端の1の場所
			
			for($loop=0; $loop<strlen($bits); $loop++){
				// 1だった
				if($bits[$loop]==='1'){
					// 左端が無ければ左端としてセット
					if($left < 0){ $left = $loop; }
					continue;
				}
				// 0だった
				// 左端がセットされていれば、その位置と入れ替える
				if($left > -1){
					list($nowAmida[$loop], $nowAmida[$left]) = [ $nowAmida[$left], $nowAmida[$loop] ];
					$left = -1;
				}
			}
			return $nowAmida;
		}
		
		/**
		* 16進数を2進数に展開
		* @param String 「d6-7b-e1-9e」みたいな文字列
		* @return array ['00000000', '11111111' ]
		*/
		private function extractHex($hexData){
			$bin = explode('-', $hexData);
			array_walk($bin, function(&$n) {
				 $n = str_pad(base_convert($n, 16, 2), 8, '0', STR_PAD_LEFT);
			});
			return $bin;
		}
	}
	
	// 以下はテスト
	$test = [
		['d6-7b-e1-9e', '740631825' ], ['83-4c-20-10', '123805476' ], ['fb-f7-7e-df', '274056813' ], ['55-33-0f-ff', '123456780' ],
		['00-00-00-00', '012345678' ], ['00-00-00-55', '021436587' ], ['40-10-04-01', '021436587' ], ['00-00-aa-00', '103254768' ],
		['80-20-08-02', '103254768' ], ['ff-7e-3c-18', '876543210' ], ['aa-55-aa-55', '351708264' ], ['55-aa-aa-55', '012345678' ],
		['db-24-db-e7', '812543670' ], ['00-01-00-40', '021345687' ], ['00-00-80-00', '102345678' ], ['01-40-00-00', '021345687' ],
		['00-00-00-02', '012345768' ], ['00-00-02-00', '012345768' ], ['00-14-00-00', '012436578' ], ['00-00-01-40', '021345687' ],
		['00-80-01-00', '102345687' ], ['c8-00-00-81', '120354687' ], ['05-48-08-14', '021435687' ], ['24-05-00-f0', '413205687' ],
		['40-08-14-01', '021536487' ], ['18-c8-80-80', '210534678' ], ['1c-88-52-00', '120564738' ], ['ec-dc-67-62', '213468705' ],
		['0a-b6-60-e9', '035162784' ], ['52-d6-c6-c2', '120345678' ], ['47-e7-b0-36', '231047658' ], ['0f-85-91-aa', '108263754' ],
		['76-b6-ed-f3', '601435782' ], ['f5-5e-f7-3d', '025847163' ], ['dd-e7-fb-f9', '610247538' ], ['8f-f4-af-fd', '583246017' ],
		['bf-fb-cb-f7', '105382674' ], ['e5-fd-ff-ff', '512046378' ], ['ef-df-ef-fe', '713205648' ], ['bf-7f-fd-d7', '826437105' ],
		['36-ff-df-de', '814527603' ], ['6f-dd-ff-ff', '230685147' ]
	];
	$amida = new AMIDA();
	foreach($test as $key=>$data){
		$answer = $amida->get($data[0]);
		if($answer !== $data[1]){
			print('えらー');
		}
	}
```

ビット演算が苦手なので、地味に左から見ていくだけという単純かつ地道なアルゴリズムになっています。
そのかわりといってはなんですが、5段以上、10行以上のあみだにも簡単に対応できます。
jQuery TEのメモ

[http://jqueryte.com/](http://jqueryte.com/)

上記サイトからダウンロード
jsファイルとcssファイルをそれっぽいところに置く
pngはcssと同じディレクトリに置いた

```html:View
<script type="text/javascript" src="js/jquery-te-1.4.0.min.js" charset="utf-8"></script>
<link type="text/css" rel="stylesheet" href="css/jquery-te-1.4.0.css" charset="utf-8" >
```

```html:View
<textarea name="txt" placeholder="本文" rows="10" class="editor"></textarea>
```

```html:View
<script>
$(".editor").jqte();
</script>
```

これで終わり。あまりにもあっけなくてびっくりした。
いまのところTwitter Bootstrapとは競合してない感じ
↓こうなった

![jqueryte.PNG](https://qiita-image-store.s3.amazonaws.com/0/26200/5cfc28fb-b7fe-4b9f-519f-9f3baafe72c0.png)
git pull を --set-upstream-to で引数無しで実行可能にする

# --set-upstream-to を使う

git pull は基本は引数が必要

```zsh:
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> branch_name
```

デフォルト参照先を決めるのには、各ローカルブランチごとに `--set-upstream-to` を使う

```zsh:
$ git branch --set-upstream-to=origin/master master
$ git branch --set-upstream-to=origin/develop develop
$ git branch --set-upstream-to=origin/gh-pages gh-pages
```


# 設定の一覧を見るには git branch -vv

教えていただいた

```zsh:
$ git branch -vv
* develop  6834af6 [origin/develop] Commit message..
  gh-pages aec8d8f [origin/gh-pages] Commit message..
  master   ac4f990 [origin/master] Commit message..
```

こんな `-vv` ダブルピースなオプションあったんですね..


# git push -u origin branch_name でお手軽登録

教えていただいた、その2

```zsh:
$ git push -u origin master
```
【Unity】スクリプトからオブジェクトやコンポーネント操作まとめ

###
Unity3dのシーン内に表示されるオブジェクトはすべてGameObjectで構成されている。
細部項目はComponentに含まれ階層になっている。
 
空GameObjectを作り、さまざま項目を追加し、利用できる。
必要なオブジェクトを作り管理しやすい。

だけど、スクリプト上、各オブジェクトを操作があいまいな場合があって
これについて知っている限りメモみたいな感じで書く。

### HierarchyでGameObject探し
グローバルメソッドのGameObject.Find() / GameObject.FindWithTag() で探す
GameObject obj = GameObject.Find( typeof(MyObject) );
GameObject obj = GameObject.FindWithTag("MyObjectTag");

### 親子オブジェクトの操作
GameObjectは子オブジェクトや親オブジェクトの情報を持っている
実際はGameObjectよりGameObjectのコンポーネントのTransFormオブジェクトが持っている
Transformはworld positionやlocal positionなどを管理するやつだから
このオブジェクトを使って親オブジェクトや子オブジェクトを得られる。

GameObject child = transform.Find("ChildObject").gameObject;
GameObject parent = transform.parent.gameObject;
GameObject child2 = transform.Find("Child/ChildObject").gameObject;

### スクリプト操作
GameObjectまでつなぐと含まれたコンポーネントはGetComponentで探す
MyBehaviour myScript = (MyBehaviour) child.GetComponent( typeof( MyBehaviour ) );
myScript.Something();

### 親子オブジェクトリスト
子オブジェクトを配列で取ってきて順である作業をするときに使う

Transform[] objList = gameObject.GetComponentsInChildren(typeof(Transform));
foreach( Transform child in objList ) {
      child.gameObject.GetComponent( ....);
}

20150301追記
// ジェネリックバージョン(要using System.Collections.Generic;)
Transform[] objList = gameObject.GetComponentsInChildren<Transform>();
// 子オブジェクトリストが非アクティブの場合はパラメータ(true)を渡せば取得可能
Transform[] objList = gameObject.GetComponentsInChildren<Transform>(true);

20140323追記
// 子Transform数を取得し、index順でループを回す
for (int i = 0; i < this.transform.childCount; i++) {
      GameObject go = transform.GetChild(i).gameObject;
}

// 子Transformのコンポーネントをすべて取得し、ループで回す
Transform[] objList = GameObject.FindGameObjectWithTag("BlockList").GetComponentsInChildren<Transform>();
foreach( Transform child in objList ) {
      child.transform.position = new Vector2(child.transform.position.x, child.transform.position.y + 1);
}


### オブジェクトの活性化/非活性化
初期は非活性化状態である瞬間、各オブジェクトを活性化する必要がある。
この場合は各オブジェクトを探してactive = true; にするときに

gameObject.SetActiverecursively( true );
PHPよかった探し(array_map)

PHPちょうべんりですね()

```touch.php
<?php
$files = array(
    '/tmp/a.txt',
    '/tmp/b.txt',
    '/tmp/c.txt',
);

// 空ファイルつくる
array_map('touch', $files);
// ファイル消す
array_map('unlink', $files);
```

 * まじめに補足しておくと、この簡潔さはRubyやPythonでは出しにくいですね
 * といふか、この例に限ってはこころなしかLispっぽさありますね
   * 副作用目的であって、返値を捨ててるのがアレだけど
 * でもな… 函数名の文字列… 文字列…
   * [callable](http://php.net/manual/ja/language.types.callable.php) の仕様作った人すごい… (虚ろな目をしながら)
ShellScript でもテストを書こう with shUnit2

併せて読みたい: [ShellScript - そのシェルスクリプトのあるディレクトリに移動する - Qiita [キータ]](http://qiita.com/ka_/items/6e4d1ff9800937a6bd8c)

とあるプロジェクトが，

```text:
APP_ROOT
|- a.sh
`- test/
   |- run.sh
   |- a.txt
   |- a-expected.txt
   `- shunit2
```

という構成になっているとします．`a.sh` を実行すると `test/a.txt` の内容が変わって `test/a-expected.txt` と一致することをテストしたいとします．このとき `test/run.sh` は以下のようになりました．

```bash:test/run.sh
#! /bin/sh

TEST_DIR=`dirname $0`

setUp()
{
  PREV_DIR=$PWD
  cd $TEST_DIR
  cp a.txt a.txt.bk
}

tearDown()
{
  if [ -f a.txt.bk ]; then
    mv a.txt.bk a.txt
  fi
  cd $PREV_DIR
}

testA()
{
  ../a.sh
  diff a.txt a-expected.txt
  assertEquals 0 $?
}

# load shunit2
. $TEST_DIR/shunit2
```

サンプルなんかでは最後の行は `. ./shunit2` と書かれているんですが，`test/run.sh` をどこから実行してもいいようにしたかった (思えばこれがそもそもどうでもいいかもしれませんが…) ので，まずそれを `. $TEST_DIR/shunit2` とします．`TEST_DIR` の取得方法は先述のエントリの通りですね．

ここからがアレでした．

そもそも `cd $TEST_DIR` して `. ./shunit2` にすればええやん？と思ってたのですが，なんと shUnit2 さんは `SHUNIT_PARENT` なる変数を用いて `shunit2` のあるディレクトリを監視し，そこから grep でテストスクリプト (今回なら `run.sh`) の中身を見てよしなにしてくれる仕様になってます．

そうすると何が起こるかって，今自分で `cd $TEST_DIR` して `test` の中にいるのに，そこから `test/run.sh` というパスになるファイルを扱おうとしてくれるわけです．はい，当然見つからないですね．`./run.sh` なら良かったんですが．

※うちの `shunit2` は自分で `make build` して作ったものですからもしかしたら微妙な差異はあるのかもです．

※うちの環境での話をするなら，`shunit2` 内での件の grep は 934 行目で，`SHUNIT_PARENT` の設定は 36 行目からの処理で行われていました．

ということは，`cd $TEST_DIR` するのはテストの実行時だけにしなければなりません．

なので上記のように `setUp` 内で `cd $TEST_DIR` を行う必要があるわけです．

で，次に `cd $TEST_DIR` しっぱなしでいるとテストが追加されたときにまずいことになります．最初の 1 つのテストはいいんですが，次のテストで再び `cd $TEST_DIR` しようとしても今既にそこに居るので「そんなファイル or ディレクトリ無いです」って言われます．エラーにこそなりませんが出力が汚くなります．警告の表示を無視するとかプログラマとしてやりたくないですよね．なので一々 `setUp` 時点での `$PWD` を記録しておいて，`tearDown` 内で戻るわけです．

ん？じゃあ `oneTimeSetUp` 使ってそこで `cd $TEST_DIR` すればいいじゃんって？

ダメなんです…　先述の grep の処理はなんと `oneTimeSetUp` の「後」に行われるんです…　なんてこった．

そういうわけで，こういう形に落ち着いたわけです．

うーん，テストの書き方が難しいというのはテストという目的としてどうなのか…　検算のやり方が本来の答えを導き出す手法未満の難易度じゃないとテストって意味が無い気がするんですよね…

## References

* [shUnit2](http://code.google.com/p/shunit2/)
* [Documentation](http://shunit2.googlecode.com/svn/trunk/source/2.1/doc/shunit2.html)
* [kaosf/semi-automatic-text-editor](https://github.com/kaosf/semi-automatic-text-editor)
「エイト・クイーン問題」をErlangで

エイト・クイーン問題([Wikipedia](http://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%A4%E3%83%88%E3%83%BB%E3%82%AF%E3%82%A4%E3%83%BC%E3%83%B3))をErlangで解いてみました。

工夫した点：

- バックトラッキング方式です。
- 2つのクイーンが同じ行に来ない性質を利用し、1行ごとに1つのクイーンの場所を探しています。
- クイーンがぶつかるかどうかは、これから置こうとしている場所がすでに置かれたクイーンと同じ列にあるか、行の差と列の差が等しい(＝斜めに位置している)かで判断しています。
- 解の総数が合っているかどうか確認するため、カウンターを別プロセスで起動し、解を発見するごとにカウントアップし、処理の最後に値を表示しています。

```erlang:eq.erl
% solve 8-queens problem.

-module(eq).
-compile(export_all).

solve() ->
  register(counter, spawn(fun() -> counter(0) end)),
  solve(cols(), []),
  counter ! show.

cols() -> [1,2,3,4,5,6,7,8].

solve(_, Queens) when length(Queens) == 8 -> display(Queens);

solve([], _) -> ok;

solve([Col|T], Queens) ->
  case not conflict(Col, Queens) of
    true  -> solve(cols(), [Col | Queens]);
    false -> ok
  end,
  solve(T, Queens).

conflict(Col, Queens) ->
  Conflict = fun({N, QCol}) -> Col == QCol orelse abs(Col - QCol) == N end,
  lists:any(Conflict, with_idx(Queens)).

with_idx(L) -> lists:zip(lists:seq(1, length(L)), L).

display(Queens) ->
  counter ! countup,
  Frame = "**********",
  io:fwrite("~s~n", [Frame]),
  lists:foreach(fun(X) -> io:fwrite("*~s*~n", [make_line(X)]) end, Queens),
  io:fwrite("~s~n~n", [Frame]).

make_line(X) -> string:chars($., X - 1) ++ "Q" ++ string:chars($., 8 - X).

counter(N) ->
  receive
    countup -> counter(N + 1);
    show    -> io:fwrite("Count: ~w~n", [N])
  end.
```

「c(eq).」「eq:solve().」を実行すると、解を延々と表示します。最後の部分は次のような感じになります。

<pre>
**********
*....Q...*
*......Q.*
*.Q......*
*.....Q..*
*..Q.....*
*Q.......*
*...Q....*
*.......Q*
**********

Count: 92
</pre>

92と表示されます。[Wikipediaによると解の総数は92個](http://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%A4%E3%83%88%E3%83%BB%E3%82%AF%E3%82%A4%E3%83%BC%E3%83%B3#.E8.A7.A3)とのことですので、合っているようです。
&&とandの違い

優先度が違う

> Ruby 2.0.0 リファレンスマニュアル > spec/operator
> [演算子式](http://doc.ruby-lang.org/ja/2.0.0/doc/spec=2foperator.html#and)
> まず、左辺を評価して、結果が真であった場合には右辺も評価しま す。and は同じ働きをする優先順位の低い演算子です。
> and を伴う式をメソッドの引数に渡す場合は二重に括弧が必要となります。

```ruby:pry
2.0.0 (main)>a = true && false
2.0.0 (main)>a
#=> false

2.0.0 (main)>b = true and false
2.0.0 (main)>b
#=> true
# ( b = true ) && false 

2.0.0 (main)>c = (true and false)
2.0.0 (main)>c
#=> false
```

---

`render foo and return`とかの場合以外は`&&`を使うようにしています。


---
追記: 2013-07-16

以下のような状況で注意

```rb:pry-edit
if true and false
  puts "1: true"
else
  puts "1: false"
end
#=> 1: false


true_and_false = true and false
if true_and_false
  puts "2: true"
else
  puts "2: false"
end
#=> 2: true
```

--- 
追記: 2013-08-06

> [Contributing to Ruby on Rails — Ruby on Rails Guides](http://guides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions)
> - Prefer &&/|| over and/or.

どっかで見たなーと思ったら、Rails Guidesに記述がありました。

> 実録！Railsのはまりポイント10選
> http://www.slideshare.net/drecom/edgerails2

ここにも出てきますね。
Padrino での多言語化対応(I18n)のつかいかた


Rails でのやり方をまとめた[この記事](http://morizyun.github.io/blog/i18n-english-rails-ruby-many-languages/)がいいなーと思ったので Padrino 特有の部分を設定方法を中心に書き出してみました。

# 設定のしかた
Padrino では `config/boot.rb` で default_locale の設定をします。

```ruby
I18n.default_locale = :ja
```

何も設定しなければ、I18n のデフォルト値( :en )が設定されます。  
ちなみに、I18n の読み込みは padrino-helper が担当してます。

# 言語ファイル
以下のファイルが標準で読み込まれます。

- [padrino-core](https://github.com/padrino/padrino-framework/tree/master/padrino-core/lib/padrino-core/locale)
- [padrino-helper](https://github.com/padrino/padrino-framework/tree/master/padrino-helpers/lib/padrino-helpers/locale)
- [padrino-admin](https://github.com/padrino/padrino-framework/tree/master/padrino-admin/lib/padrino-admin/locale/admin)
- [padrino-admin-orm](https://github.com/padrino/padrino-framework/tree/master/padrino-admin/lib/padrino-admin/locale/orm)

これらに設定されている文言が気に入らない場合は、上記ファイルを `[your_apps_root_path]/locale/` 配下に設定し、適宜編集すれば、そちらが優先されます。

また、言語ファイルの設置場所を変更したい場合は、`[your_apps_root_path]/app.rb` で locale_path を設定します。

```ruby
set :locale_path, Proc.new { Dir[Padrino.root('config', 'locales', '**/*.yml')] }
```

モデル用の言語ファイルは、

```
# ActiveRecord or MiniRecord を使っている場合
$ rake ar:translate
# MongoMapper を使っている場合
$ rake mm:translate
```
で `app/locale/models/` 直下に生成されます。

今のところ、出力先は固定です…。

# view での使い方
省略。Railsと同じ感じで t とか l とかで使えます。

本筋から外れますが、モデルのエラーをバラして１つずつ表示したい場合があったので、次のようにしてみました。
もっといいやり方があれば教えてください。

```ruby
def show_error_message(model, field)
  return if model.errors.messages[field].blank?
  attribute = I18n.t(field, default: field.to_s.humanize, scope: [:models, model.class.name.underscore, :attributes])
  message = model.errors.messages[field].first
  safe_content_tag :p, "%s %s" % [attribute, message], class: :error-message
end
```

# locale の切り替え
[padrino-contrib](https://github.com/padrino/padrino-contrib)に auto_locale とか便利そうなのがありますが、使ったことないので使ったら追記します。
そのシェルスクリプトのあるディレクトリに移動する

## 追記 3

つい 3 日ほど前にまるで同じ内容のエントリが同じく Qiita 内にあったそうです．

[bash/zshでsourceされたスクリプト内で、ファイル自身の絶対パスをとるシンプルな記法 - Qiita [キータ]](http://qiita.com/yudoufu/items/48cb6fb71e5b498b2532)

さらにこのエントリでも触れられているように，bash で `source` を使ってこのエントリの内容を実行すると正常に動作しないことを確認しました．

ということで一応本文は残しておきますが，内容的にも今紹介したエントリを読んだ方が良いかと思われます．

## 本文

```bash:a.sh
#! /bin/bash

cd `dirname $0`

find $PWD -name a.sh #=> found always!
```

どこから実行しても `a.sh` があるディレクトリに移動します．

多分．

「こういう場合に動かないよ！」とかありましたらご指摘お願いします．

一応最初にこんなのも思い付いた (その後 `dirname` コマンドの存在を知った) のでメモがてら．

```bash:a.sh
#! /bin/bash

THIS_FILE_PATH="$PWD/$0"
cd ${THIS_FILE_PATH%/*}
```

`dirname` なんて便利コマンドがあるなら要らないと思います．`dirname` ってとりあえず Mac と Ubuntu では使えたけど他でも問題無いよね？POSIX だよね？

## 用途

`test` ディレクトリの中に移動してそこでテストスクリプト走らせたいしそもそもそこにテストスイートも置いてあるし…な状況で使えると思います．

シェルスクリプトのユニットテストは shUnit2 ってので出来るらしいですよ奥さん (情報提供 [sue445](https://qiita.com/users/sue445) さん ([コレ](https://twitter.com/sue445/status/350518560474398721)))．

### 追記

なんかこのまま

```bash
. ./shunit2
```

すると `PWD` の乱れが発生してつらみがマッハなう…　何とかしてます…　何とかなったら新しいエントリ作るぽよ…

### 追記 2

このエントリ自体は特に問題ないと思う．ただ shUnit2 とこのエントリの内容を組み合わせようとするとちと面倒なことが起こったので次のエントリにそのことについて書きました．

[ShellScript でもテストを書こう with shUnit2 - Qiita [キータ]](http://qiita.com/ka_/items/1271df92c95e5d8084c2)

## References

* [【FreeBSD】シェルスクリプトでパス文字列からファイル名／ディレクトリ名／拡張子を抽出する](http://www.kishiro.com/FreeBSD/get_filename_in_shellscript.html)
* [シェルで、自身のスクリプトファイル名を取得する (tec-q note)](http://www.tec-q.com/note/2007/06/post_1.html)
* [【FreeBSD】どのディレクトリから実行されても動作する入れ子形式のシェルスクリプトを作る](http://www.kishiro.com/FreeBSD/current_directory_free_shellscript.html)
Gradle で自作のライブラリを ivy リポジトリとしてアップロードして参照する

社内で共有のライブラリとかを作る場合, こんな感じ。sources も一緒に作りましょう。

```groovy
// build.gradle (library)

task sourcesJar(type: Jar, dependsOn:classes) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

artifacts {
    archives sourcesJar
}

def releaseDir = file(releaseRepositoryDir).absolutePath
uploadArchives {
    repositories {
        add(new org.apache.ivy.plugins.resolver.FileSystemResolver()) {
            name = "release"
            m2compatible = true
            addIvyPattern "${releaseDir}/[organisation]/[module]/[revision]/[module]-[revision].ivy"
            addArtifactPattern "${releaseDir}/[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]"
        }
    }
}
```

これを参照するだけ。今回は単純にリポジトリを VCS 上で管理してチェックアウトして参照してます。

```groovy
// build.gradle
repositories {
    mavenCentral()
    maven {
        url "https://repository.jboss.org/nexus/content/groups/public-jboss/"
    }
    ivy {
        url file(repositoryDir).absolutePath
        layout "pattern", {
            ivy "[organisation]/[module]/[revision]/[module]-[revision].ivy"
            artifact "/[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]"
            m2compatible = true
        }
    }
}
```
Macの濁点ファイルをなんとかする


Macで作った『ほげほげ.txt』をLinuxに転送すると、、

```
ほけ゛ほけ゛.txt
```


みたいに、濁点が1文字として扱われ、おかしなファイル名になっちゃう。
<br>
## convmvで変換して解決
既にLinuxに転送してしまったファイルは、Linux上でなんとかしたほうが手っ取り早い。
例えば、Debian/Ubuntuならaptでconvmvをインストールできる。

```
$ sudo apt-get install convmv
```

カレントディレクトリのファイル名全部を変換したい場合はこんな感じ

```
$ convmv -r -f utf8 --nfd -t utf8 --nfc * --notest
```
> --notestのオプションを外せば、実行結果の確認だけできる（ファイルへの反映は無し）

<br>
## rsyncで転送時になんとかする
Macから転送する際にファイル名をなんとかする方法は、rsyncのiconvオプションを使うこと。
最初から用意されてるrsyncではiconvのオプションが上手く使えないので、Homebrewでインストールする。

```
$ brew tap homebrew/dupes
$ brew install libiconv
$ brew install rsync
```

rsyncのバージョンを確認

```
$ /usr/local/bin/rsync --version
rsync  version 3.0.9  protocol version 30
```

~/tmpに用意した『ほげほげ.txt』を example.comの~/tmpにファイル名の文字コードを直しつつ転送する例

```
$ /usr/local/bin/rsync -arvz --delete --iconv=UTF8-MAC,UTF-8 -e ssh ~/tmp/ほけ<3099>ほけ<3099>.txt example.com:~/tmp
```
Riak doc の riak Command Line を意訳してみた


# riak Command Line

大雑把な意訳、訳しにくい箇所は英文と一緒に転載します
http://docs.basho.com/riak/1.3.2/references/Command-Line-Tools---riak/

## Overview

riak は、Riak ノード・プロセスを制御する主要なスクリプトです。

```
Usage: riak { start | stop | restart | reboot | ping | console | attach | chkconfig }
```

## start

バックグラウンドで Riak ノードを起動します。もし既に起動している場合は、メッセージ "Node is already running!" が出力されます。正常に起動した場合は、何も出力されません。

```
riak start
```

## stop

Riak ノードを停止します。もし既に停止している場合は、メッセージ “Node 'riak@127.0.0.1' not responding to pings.” が出力されます。正常に停止した場合は、メッセージ "ok" が出力されます。

```
riak stop
```

## restart

Erlang VM を終了せずに Riak ノードを再起動します。もし既に停止している場合は、メッセージ “Node 'riak@127.0.0.1' not responding to pings.” が出力されます。正常に再起動した場合は、メッセージ "ok" が出力されます。

```
riak restart
```

## reboot

Erlang VM を終了し、Riak ノードを再起動します。もし既に停止している場合は、メッセージ “Node 'riak@127.0.0.1' not responding to pings.” が出力されます。正常に再起動した場合は、メッセージ "ok" が出力されます。

```
riak reboot
```

## ping

Ring ノードが動作しているかを確認します。もし停止している場合は、メッセージ “Node 'riak@127.0.0.1' not responding to pings.” が出力されます。正常に再起動した場合は、メッセージ "ok" が出力されます。

```
riak ping
```

## console

フォアグラウンドで Riak ノードを起動し、Erlang シェルと実行時メッセージを取得します。もしバックッグラウンドで起動している場合は、メッセージ "Node is already running - use 'riak attach' instead" が出力されます。

```
riak console
```

## attach

バックグラウンドで動作している  Riak ノードのコンソールに接続し、Erlang シェルと実行時メッセージを取得します。もし停止している場合は、メッセージ “Node is not running!” を出力します。

```
riak attach
```

## chkconfig

設定ファイル app.config が有効かどうか確認します。もし有効でない場合は、エラーメッセージが出力されます。有効な場合は、メッセージ "config is OK" が出力されます。

```
riak chkconfig
```

## End

[Release Note](https://github.com/basho/riak/commit/8caf983c13777cb8fe4a02ac490f10d10c09e0ce) によると、attach サブコマンドは Riak 1.4.0 から挙動がかわるようなので注意が必要かな。