OmniAICreator/Qiita-1.07M huggingface dataset:
Pythonメモ：文字列に値を代入する際

三つ方法がある。

###### 例１：一つだけ代入

```py
name = "juniskw"

print("Hello %s!" % name)
```

###### 例２：複数代入（タプル）

```py
f_nm = "jun"
l_nm = "iskw"

print( "Hello %s%s" % (f_nm,l_nm,) )
```

###### 例３：複数代入（辞書）

```py
f_nm = "jun"
l_nm = "iskw"

print( "Hello %(first)s%(last)s!" % {'first':f_nm,'last':l_nm,} )
```

いずれでも出力は同じ（"Hello juniskw!"）。代入する数に応じて使い分けてく感じか。
rbenv プラグインは ruby-build しか使ってないマン向け

ruby-build しか使ったことない人向けに、なんとなくプラグイン 3 つ紹介。

[rbenv-gemset](https://github.com/jf/rbenv-gemset)
---------------------------------------

プロジェクトごとに使う gem を分けたいときに使う。

たとえば、`rake`, `rspec` が古いバージョン前提で作られてるプロジェクトの開発で、新しい他のプロジェクトとバージョン競合を避けたりできる。[rbenv-binstubs](https://github.com/ianheggie/rbenv-binstubs) でもいいんですが、そもそも目的が若干違うんだけど、結果的に rbenv-gemset が機能的に上位互換になるのかな。

[rbenv-default-gems](https://github.com/sstephenson/rbenv-default-gems)
---------------------------------------

`rbenv install XXX` をフックして、予めユーザによってリストアップされた gem を自動でインストールしてくれる。

どうせ Ruby インストールするたびに `gem install bundler` するので自動でやってほしいですね。

[rbenv-each](https://github.com/chriseppstein/rbenv-each) 
----------------------------------------

rbenv でインストールされた全 Ruby バージョンで同じコマンドを実行する。

これは複数のバージョンで動かすことを想定したライブラリをメンテナンスしているととても助かります。例えば `rbenv each clobber test` とやれば、インストール済みの全バージョンでテストができます。

ただ、特定のバージョンのみ実行するってことはできないようなので、その場合は [多バージョンの ruby のテストしたい]( http://qiita.com/k_ui/items/67382d5e558ed32b79c6) みたいなことをしてます。

他にも
---------------------------------------

[Plugins · sstephenson/rbenv Wiki](https://github.com/sstephenson/rbenv/wiki/Plugins) で幾つかまとめられている。
よく使うHerokuコマンド


使用状況により随時アップデートします。

## SSH Keys
キー一覧表示

```
heroku keys
```

キーの追加

```
heroku keys:add
```

詳細
https://devcenter.heroku.com/articles/keys

## 環境変数
環境変数の確認

```
heroku config
```

環境変数の設定

```
heroku config:set PASSWORD=password
```

## アドオン
アドオンの確認

```
heroku addons
```

アドオン追加

```
heroku addons:add mongohq
```

## その他の確認
任意のコマンド実行

```
heroku run "ls -l"
```

Rails console

```
heroku run rails console
```

ログ確認

```
heroku logs
```

ログ確認（リアルタイム）

```
heroku logs --tail
```

アプリステータス確認

```
heroku ps
```

ブラウザで開く

```
heroku open
```

コマンドの使い方

```
heroku help logs
```

## 初回

アプリ作成

```
git init
git add .
git commit -m "init"
heroku create
```

デプロイ

```
git commit -m 'update' .
git push heroku master
```

## 既存アプリ

チェックアウト

```
heroku git:clone -a myapp
```
.NET (C#) の比較色々

いつも調べるのでまとめておく。~~（書きかけっぽい感じですみません。。。）~~

[比較についてのコラム的なものはこちらのコメントを参照してください。](https://qiita.com/Zuishin/items/62c5b726bfa589b3fb9b#comment-3f7d205da15f28f50e6d)

# Object.ReferenceEquals(Object objA, Object objB) メソッド

* その名の通り参照の等価を比較
* `Object` 型に対する `a == b` と等価
* ==演算子をオーバーロードするときにお世話になるかも（普通に `a == null` を呼び出すと無限ループになるため）

# Object.Equals(Object objA, Object objB) メソッド

* 両方、あるいは片方が `null` であればその場で `true` もしくは `false` を判定して返す。
* そうでなければ（両方とも `null` でなければ） `objA.Equals(objB)` を呼び出す。
* `IEquatable<T>` は利用されない。

```csharp
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Object.Equals(new Hoge { Fuga = "abc" },
                                        new Hoge { Fuga = "abc" }));
        // -> True

        Console.WriteLine(Object.Equals(new Hoge { Fuga = "abc" },
                                        new Hoge { Fuga = "xyz" }));
        // -> False

        Console.Read();
    }
}

public class Hoge : IEquatable<Hoge>
{
    public string Fuga { get; set; }

    public override bool Equals(object obj)
    {
        if (Fuga == "xyz") throw new NotImplementedException();
        if (obj == null) return false;
        if (obj is Hoge)
        {
            return ((Hoge)obj).Fuga == Fuga;
        }
        return base.Equals(obj);
    }

    public override int GetHashCode()
    {
        return (Fuga != null ? Fuga.GetHashCode() : 0);
    }

    public bool Equals(Hoge other)
    {
        throw new NotImplementedException();
    }
}
```

# EqualityComparer<T>.Default.Equals(T x, T y) メソッド

`IEquatable<T>` が利用される点が異なる。

* `null` チェックについては `Object.Equals(Object, Object)` と同様。
* `x` が `IEquatable<T>` を実装する場合は `IEquatable<T>.Equals(T other)` が呼び出される。
* さもなければ `Object.Equals(Object obj)` が呼び出される。

# EqualityComparer<T> クラス

* `IEqualityComparer<T>` を実装するための基底クラス。
* `Equals(T x, T y)` および `GetHashCode(T obj)` をオーバーライドして使用する。

# StringComparer クラス

* `IComparer<string>`, `IEqualityComparer<string>` の 2 つを実装。
* `StringComparison` 列挙体に対応した序列判定、等価性判定を提供する。

# IStructuralEquatable<T> インターフェース

^m^
よく使うalias

##alias

```bash:alias
alias cp='cp -i'
alias ll='ls -l'
alias rm='rm -i'
alias lt='ls -lrt'
alias ltt='ls -lrt | tail'
````

lttはカレントディレクトリでファイル更新日が最新のファイルをとりあえず表示させるときに使用
Ruby初心者から上級者まで!! 知っても使えないRuby知識

__この記事の要約: 役に立ちません__

## 1. %記法ではどの文字が使える？
英数字以外のASCIIなら、なんでもありです。

```rb
%{open{  # => "open"  
%%percent% # => "percent"
%\back slash\ # => "back slash"
% space  # => "space"
%
LF
# => "LF"
%null% # => "null"
```
Rubyのパワーにはシンタックスハイライトもついてこれません。

## 2. ?記法ではどの文字が使える？
文字を表すのに便利な?xも結構なんでもありです。

```rb
?, # => ","
(?ま..?も).count # => 5
?̀..?ͯ # => ?̀..?ͯ
? # => "\b"
```
## 3. 変数宣言してみよう

代入=を使うと左辺のローカル変数は宣言されます。

```rb
if false
 orange = mikan = 100.yen # 通らないはず
end
orange # => nil
mikan # => nil

defined? code = exit
code # => nil
```

for文でも宣言されます。

```rb
for banana in [];end
banana # => nil
```
## 4. 変数/メソッド名ではどの文字が使える？

変数/メソッド名等には英数字およびアンダースコア('_')しか使えない、と多くのドキュメントにあります。
ex. [リファレンス](http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2flexical.html)

実際には非ASCII文字も使えます。

```rb
うどん = "そば"; うどん # => "そば"
Tシャツ = ""; Object.constants.grep(/Tシャツ/) # => [:Tシャツ]
def メソッド
  "method"
end
メソッド # => "method"
```

実は[リファレンス](http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fm17n.html)にも、利用できる（が非推奨）と書かれています。
Texpliseがutf8で動作する環境をメモ


MacとWindowsで[Texlipse](http://texlipse.sourceforge.net/)というEclipseのプラグインを使っているのですが、論文執筆には欠かせないlatexを書くときの必需品となっております。
具体的に何が便利なのかと言いますと、

* itemizeやrefの時に補完できる。
* bibtexと連携して参考文献の補完もできる。
* 数式やギリシャ文字なども分かりやすく補完してくれる。
* あらかじめ設定したプログラムの構成に基づいて、texファイル保存後に自動的にpdfまで仕上げてくれる。

という感じで、主に補完機能が素晴らしいのですが、いざ使おうとすると設定に戸惑ってしまいます。そこで、どのように構成をすればutf8で使えるのかメモをしておきます。(utf8だと世界各国の文字が書けるので便利です)
<前提条件>

* Latexに関連するプログラムをダウンロードしておくこと（Win は[TeXインストーラ3](http://www.math.sci.hokudai.ac.jp/~abenori/soft/abtexinst.html) Macは[Drag&Drop UpTeX](http://www2.kumagaku.ac.jp/teacher/herogw/)が便利です）
* Eclipseをインストールしておくこと（最新版が望ましい）
* Texlipseを[インストール](http://texlipse.sourceforge.net/manual/installation.html)しておくこと

まずは、Eclipseをutf8に対応させます。方法はEclipseにて、
Win: Window > Preferences > General > Workspace
Mac: Eclipse > Preferences > General > Workspace
を開き、Text file encoding を UTF-8 にします。

次に、同じくPreferences > Texlipse > Builder Settings を開くと、ずらりとLatexのビルドに必要なプログラムの名称とパスが並んでいると思います。ここにダウンロードしたLatex関連のプログラムのパスを記述していきます。基本的に全部名前の通りに埋めると良いのですが、utf-8の場合はいくつか設定を変える必要があります。

Latex program ( your_env/uplatex.exe )
* uplatexであることに注意
Bibtex program ( your_env/jbibtex.exe )
* Editを押して、パラメータを %input -kanji=utf8 にする
Dvipdf program ( your_env/dvipdfmx.exe )
* utf8とは関係ないかもしれませんが…… 名前が似ているので注意

your_envはlatex関連プログラムをインストールしたフォルダです。
例えば、Winでは your_env = C:/w32tex/bin だったり、 Macでは /Applications/UpteX.app/tetTex/bin だったりします。これで、僕は Win 8 と OSX Marvericks でTexlipseをutf8で動かしています。ご参考になれば幸いです。
Docker でユーザ名を指定してコンテナを起動する


Docker でコンテナを起動するとデフォルトは root になりますね.

run するときに -u オプションでユーザを指定することができます.

http://docs.docker.io/en/latest/commandline/cli/#run

ただしこのユーザ名はコンテナ内でのユーザ名なので, ホスト側のユーザ syoyo を使って,

```
$ sudo docker run -u syoyo -i -t syoyo/centos6 /bin/bash
```

としても /etc/passwd に syoyo が見つからないと言われます. 

## ユーザを作る.

コンテナ内にログインするなりして,

```
# useradd syoyo
```

としてユーザを作り, イメージを作っておきましょう.

```
$ sudo docker run -u syoyo -i -t syoyo/centos6 whoami
syoyo
```

素敵ですね!

## 疑問点

* パスワードとか設定したほうがいいのかな?
* -i のあとに -u を指定するとうまくユーザ名が通知されないみたい？
RubyMotionでビルド時にcode signの処理をスキップするようにする設定

Macアプリ(`--template=osx`)専用の設定です (iOSアプリでこの設定を使うことはできません)

release modeでのビルドしたい時や完成したアプリをApp Storeに申請しない方法で配布する際などに、`Rakefile`に下記の設定を追加して`rake build:relase`するとcode signの処理をスキップしてくれます。

```rb:Rakefile
Motion::Project::App.setup do |app|
  app.codesign_for_release = false # これを追加する
end
```

なお、に追加されたのは下記のcommitのようです。
https://github.com/HipByte/RubyMotion/commit/a6de0f4021cf9dc155151cdc22887728ddddd6ca
「都道府県市区町村」が入る都道府県市区町村の一覧

住所文字列から都道府県や市区町村の部分を取り出したい時、すぐに思いつくのは正規表現ですが、それでうまくいくとは限りません。「京“都”府」や「四日“市”市」のように名前の中に地名接尾辞となる文字が含まれていると、単純な正規表現では正しい区切り位置を見つけられません。

そんなわけで「都道府県市区郡町村」のような文字が名前本体部分に含まれている都道府県市区郡町村の一覧を用意しました。

https://github.com/geocol/data-jp-areas/blob/master/data/jp-regions-suffix-mixed-names.json#L388

このリストを使って、例えば

```perl
$pattern = join '|', JSON に入っている都道府県市区郡町村のリスト;
while ($address =~ s/^($pattern|[^都道府県市区郡町村]+[都道府県市区郡町村])//o) {
  warn $1;
}
```

... のようにすると、住所の先頭から都道府県、市区町村を抜き出せます。

ただし、

* 現行の市区町村のみのリストなので、統廃合前の地名や架空の地名は正しく扱えないかもしれません
* 市区町村内の町や区は正しく扱えないかもしれません
tableView didSelectRowAtIndexPathが呼ばれない

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath が呼ばれなくて数日間ハマりました。

**numberOfRowsInSection**でゼロを返すと呼ばれないとかは経験済みだったのでそのへんは確認して散々悩んだ挙句。

storyBoardでTableViewのSelectionを確認したところ、「No Selection」と、なってました。
「Single Selection」に変更して解決。

![](https://qiita-image-store.s3.amazonaws.com/0/4784/f39b8b41-806c-9795-ae5a-6c635bb46e9b.png)
Pow + Foreman = Invoker


[Invoker](https://github.com/code-mancers/invoker) は、開発環境で複数プロセスを管理するための Ruby 製のツールです。

[![Introducting Invoker](http://img.youtube.com/vi/uu6NZrYvSQ8/0.jpg)](http://www.youtube.com/watch?v=uu6NZrYvSQ8)


設定ファイルで指定した複数のプロセスを管理しつつ、
そのプロセスがWEBアプリケーションである場合は、ローカルドメインでアクセスできます。

[Foreman](https://github.com/ddollar/foreman) と [pow](http://pow.cx/) に触発されたとのことで、それらの特徴を併せ持ったツールとなっています。
ただ、Pow の代替としては、ちょっと機能が足りなかったり手間だったりするところがあるので、
ローカルドメインでアクセスできるようにした foreman という感じでしょうか。

現時点では Python と Node、Ruby のアプリケーションに対応しているそうです。

以下は[紹介ページ](https://github.com/code-mancers/invoker)に記載されている内容を簡単にまとめただけです。
そちらには Pow から移行する場合や rvm, rbenv と一緒に使う場合の注意点などが記載されています。

## 準備

Ruby 1.9.3 以上が必要です。

```
$ gem install invoker
```

## 設定ファイルを作る

invoker を使って管理したいプロセスを定義するための設定ファイルを作ります。

```
$ vim invoker.ini
```

```
[padrino]
directory = /path/to/app
command = bundle exec padrino s -p 5000

[sidekiq]
directory = /path/to/app
command = bundle exec sidekiq -r ./config/sidekiq.rb

[solr]
directory = /path/to/app
command = bundle exec rake solr:start
```

設定ファイルを作ったら、次のコマンドでプロセス管理を開始できます。

```
$ invoker start invoker.ini
```

## Procfile を使う

`Procfile`が既に存在しているのであれば、`ini`ファイルは不要です。

```
$ invoker start Procfile
```

## .dev でアクセスできるようにする

Mac OSX のみですが、次のコマンドを実行すると、`/etc/resolver/dev` や `/Library/LaunchDaemons/com.codemancers.invoker.firewall.plist` といったファイルが作成され、Invoker で起動した http のサービスに
xxx.dev というローカルドメインでアクセスでるようになります。

```
$ sudo invoker setup
```

上記で作成されたファイルを削除するには uninstall コマンドを使います。

```
$ sudo invoker uninstall 
```

上記に加え、`ini`ファイル内でアプリケーションの待ち受けポートを `$POST`または port というキーで指定すれば準備完了です。

```
[terminal]
directory = /path/to/ayr-terminal
port = 3000
command = node app

[mezzainine]
directory = /path/to/mezzainine
command = python manage.py runserver $PORT --noreload

[rails]
directory = /path/to/rails
command = bundle exec rails s -p $PORT 
```

## 起動中のプロセスを管理する

invoker 経由で起動中のプロセスを再起動したりできます。

```
# Invoker で管理されている実行中のプロセスの一覧を表示します
$ invoker list

# プロセスに SIGINT を送り遅延ジョブの停止を試みます
$ invoker remove dj

# SIGINT で停止できないプロセスに対して任意のシグナルを送信します
$ invoker remove dj -s 9

# プロセスを追加・起動します
$ invoker add dj

# コマンドラベルで指定したプロセスを再起動します
$ invoker reload dj

# コマンドラベルで指定したプロセスを任意のシグナルを使って再起動します
$ invoker reload dj -s 9
```

Mac OSX では、terminal-notifier という gem をインストールすると、結果が通知されるようになります。


## .dev じゃないドメインを使いたい

今のところはムリそうです。

## サブドメインを使いたい

今のところはムリそうです。
JavaScriptをラブライブ！のロゴに変換するトランスレーター作った

[【ピザハット日和、です！】「ラブライブ！ × ピザハット」のページソースを見たら愛溢れすぎてたｗｗｗｗｗｗｗ : はちま起稿](http://blog.esuteru.com/archives/7546686.html)を見て思い付いたので作ってみました。

[alucky0707/lovelive-logo](https://github.com/alucky0707/lovelive-logo)
[lovelive-logo](http://alucky0707.github.io/lovelive-logo/)

##どんなの？

こんなを実行すると、

```js:sample.js
console.log(
  require('lovelive-logo').lovelivalize('console.log("Hello, World!");')
);
```

こんなのが出力されて、

![20140215152527.png](https://qiita-image-store.s3.amazonaws.com/0/11219/b8c5f6af-5f42-8d72-2693-63c1bdae332b.png)

(長いしQiitaだと折り返されてしまって残念なので、完全なものはGistに貼っておきます。=> <https://gist.github.com/alucky0707/8998777>)

きちんと実行できるって奴です。

```
> node sample.js | node
Hello, World!
```

##実用性は？

そんなものなかった。

というか、Perlで言う __Acmeモジュール__ みたいなものなので実用性なんて必要ないのです。笑わせたら勝ちなんです。

##どうやってやってるの？

黒魔術っぽいですが大したことありません。

ロゴの中にある、`$KOSAKAHONOKAXJHDM`や`$SAXVSONODAUMIOHIU`、`Y8`、`ZA`といった変数を`global`に対する`__defineGetter__`で捕捉して、

```js:lovelive-logo.js(line69-70,97-114)
//lovelive-logo.jsの69-70行目らへん
setA = ["$KOSAKAHONOKAXJHDM", "$SAXVSONODAUMIOHIU", "$HOSHIZORARINNZAC$", "$KOIZUMIHANAYOXAZ$"],
setB = ["Y8", "ZA", "WA", "CO"];

//lovelive-logo.jsの97-114行目らへん
var
as = [],
bs = [],
lovelived = [];

setA.forEach(function (a, i) {
  global.__defineGetter__(a, function () {
    as.push(i);
    return 1;
  });
});

setB.forEach(function (b, i) {
  global.__defineGetter__(b, function () {
    bs.push(i);
    return 1;
  });
});
```

ロゴの一番最後にある`ｐ_ｒ_ｏ_ｊ_ｅ_ｃ_ｔ`のゲッターで一つ一つのロゴについてまとめていき、

```js:lovelive-logo.js(line116-120)
global.__defineGetter__('ｐ_ｒ_ｏ_ｊ_ｅ_ｃ_ｔ', function () {
  lovelived.push([as.join(''), bs.join('')]);
  as = []; bs = [];
  return 1;
});
```

一通り実行したら呼ばれる`setImmediate`でそれを文字列にして、ソースコードとして実行します。

```js:lovelive-logo.js(line91-95,129-131)
//lovelive-logo.jsの91-95らへん
function unlovelivalize(lovelived) {
  return new Buffer(lovelived.map(function (xs) {
    return inverse[xs[0]] * 24 + inverse[xs[1]];
  })).toString();
}

//lovelive-logo.jsの129-131行目らへん
setImmediate(function () {
  Function(unlovelivalize(lovelived))();
});
```

`inverse`というのは0から3までの数値の組み合わせの配列のインデックスと値を逆にしたもので、18文字の変数と2文字の変数の出てくる順番を変えることで、一つのロゴに一文字分の情報を持たせているわけです。

変換の場合はソースコードを文字に分解して、その文字コードの数値に合わせて変数名をロゴのテンプレートに埋め込み、つなげています。

言葉で説明するのが苦手なので、そんなに長いソースコードではないし1ファイルなので、ぜひ読んでみてください。

##閑話

艦これにケッコンカッコカリが実装されたのですが、どんなにページを更新してもサーバーに入れません。
辛くなってきたので(どうせ99レベの艦娘いないし)、Acme::DoubleHelixみたいなnpmパッケージを作ってみようかと思ったのですが、JavaScriptの仕様的に、

```js
A----T
```

が、

```js
(A--)-- T
```

のように解釈されてしまったりするので不可能な気がしてきて、代替案も思い付かないし、じゃあどうしようか、と考えた末に30分くらいで作ったものです、これは。

PerlのAcmeモジュールって面白そうだなー、と思うのですがnode.jsにはああいうのはできないんですかね…。
npmにpublishするときも結構躊躇しました。こんな不真面目なパッケージ上げていいのかなぁ…と。
まあ、結局上げましたが。

そんなわけで、このパッケージは、

```

npm install lovelive-logo
```

で一発でインストールできるはずです。
インストールして遊んでみてもらえたら幸いです。

##追記

ブラウザでも動くようにしてみました。

lovelive-logo - <http://alucky0707.github.io/lovelive-logo/>

![20140215152730.png](https://qiita-image-store.s3.amazonaws.com/0/11219/e498c89d-d543-2fd9-92ca-b51cb0649a03.png)

新しめのブラウザじゃないと上手く動かないかもしれませんが遊んでみてください。

最後に、こんな下らない記事を最後まで読んでくださりありがとうございました。感謝感激です。
Ruby 色々な素数の求め方

## 素数 検索

```prime.rb
def prime_number(n)
  sqrt = Math.sqrt(n)
  factor_number = (2..sqrt).any? { |num| n % num == 0 }
  unless factor_number || n == 1
    "#{n}は素数です"
  else
    "#{n}は素数ではない"
  end
end

prime_number(1000)

```

##双子素数 検索

```prime.rb

def twins_range_prime(numbers)
  prime_number = Proc.new { |number|
    sqrt = Math.sqrt(number)
    factor_number = (2..sqrt).any? { |num| number % num == 0 }
    unless factor_number || number == 1
      number
    end
    }
  array = []
  (1..numbers).each do |number|
    array << prime_number.call(number)
  end
  array.compact.each_cons(2).select{ |b, r| (r - b) == 2}
end

p twins_range_prime(1000)

```

##三つ子素数 検索
```prime.rb

def prime_triplet(numbers)
   prime_number = lambda { |number|
    sqrt = Math.sqrt(number)
    factor_number = (2..sqrt).any? { |num| number % num == 0 }
    unless factor_number || number == 1
      number
    end
    }

  array = []
  (1..numbers).each do |number|
    array << prime_number.call(number)
  end
  array.compact.each_cons(3).select{ |a, b, c| (b - a == 2 && c - a == 6) || (b - a == 4 && c - a == 6) }
end

p prime_triplet(1000)
```

##四つ子素数 検索

```prime.rb

def prime_quadruplet(numbers)
   prime_number = lambda { |number|
    sqrt = Math.sqrt(number)
    factor_number = (2..sqrt).any? { |num| number % num == 0 }
    unless factor_number || number == 1
      number
    end
    }

  array = []
  (1..numbers).each do |number|
    array << prime_number.call(number)
  end
  array.compact.each_cons(4).select{ |a, b, c, d| (b - a == 2 && c - a == 6 && d - a == 8) }
end

p prime_quadruplet(1000)

```

##メルセンヌ素数 検索

```prime.rb

def mersenne_number(multiplier)
  prime_number = proc { |number|
    sqrt = Math.sqrt(number)
    factor_number = (2..sqrt).any? { |num| number % num == 0 }
    unless factor_number || number == 1
      "2の#{multiplier}乗は#{number}で素数です"
    else
      "2の#{multiplier}乗は#{number}で素数ではありません"
    end
  }

  number = (2 ** multiplier - 1)
  prime_number.call(number)
end

(1..10).each do |a|
puts mersenne_number(a)
end

```
pingを中断せずに統計を見る

* Mac: ctrl+t (SIGINFO)
* Linux: ctrl+¥ (SIGQUIT)
  * もしくは kill -QUIT <pingのPID>
* Windows: ctrl+Break

[2011-05-23 - Dマイナー志向](http://d.hatena.ne.jp/tmatsuu/20110523)

こういうの載ってるからmanは面白い
Gruntでcompassを複数ディレクトリでそれぞれコンパイル

メモ書き。

example.com/css
example.com/scss
example.com/下層/css
example.com/下層/scss

があるとする。同一案件なので一括でコンパイルさせたいんだよー。

example.com/Gruntfile.js
example.com/config.rb
example.com/下層/config.rb
を用意。


上層下層の文字は適当に入れ替えてください。

```Gruntfile.js

module.exports = function(grunt) {
	grunt.initConfig({
		compass: {
			上層: {
				options: {
					config: 'config.rb'
				}
			},
			下層: {
				options: {
					config: '下層/config.rb'
				}
			}
		}
	});
//～～～～
};
```


compass

```上層config.rb

http_path = "/"
css_dir = "css"
sass_dir = "scss"
images_dir = "images"
javascripts_dir = "js"

output_style = :compact

line_comments = false
```

```下層config.rb

http_path = "/"
css_dir = "下層/css"
sass_dir = "下層/scss"
images_dir = "下層/images"
javascripts_dir = "下層/js"

output_style = :compact

line_comments = false
```

あんまり考えずに作ったので、超適当。
config.rbも下層のconfig.rbから上層のを上手くインポートさせれば一元管理できるかもね。
GitHub Pages + Octopress カスタマイズ vol.2


[前回](http://qiita.com/PSP_T/items/07365ed24eef63602233)の続きです｡テーマは､[octostrap3](https://github.com/kAworu/octostrap3)を使います｡

##Mobile

モバイルサイトでリンク文字(a)やコード表現(code)が記事(body)をはみ出す問題を解決します。

```css:sass/custom/_styles.scss
code {
word-break: break-all;
white-space: inherit;
}

a {
word-break: break-all;
}
```


##Top image


```html:source/_includes/custom/navigation.html
<div class="container2">
  <a href="/"><img src="URL"></a>
</div>
```

```css:sass/custom/_styles.scss
.container2 {
  padding-right: 160px;
  padding-left: 160px;
  padding-top: 10px;
  padding-bottom: 10px;
  color: #000000;
  background-color: #000000;
}
```



##Plugin

###octopress-tagcloud

タグクラウドをサイドバーに表示します｡




[https://github.com/tokkonopapa/octopress-tagcloud](https://github.com/tokkonopapa/octopress-tagcloud)


```
.
├─ plugins/
│  └── tag_cloud.rb
└─ source/
   └─ _includes/
      └─ custom/
         └─ asides/
            ├─ category_list.html
            └─ tag_cloud.html
```

```html:octopress/_config.yml
default_asides: [
	asides/recent_posts.html,
	custom/asides/about.html,
	custom/asides/tag_cloud.html
]
```

###octopress-category-list

タグリストをサイバーに表示します｡

[https://github.com/ctdk/octopress-category-list](https://github.com/ctdk/octopress-category-list)
[http://kaworu.github.io/octopress/blog/2013/10/03/category-list-aside/](http://kaworu.github.io/octopress/blog/2013/10/03/category-list-aside/)

```html:custom/asides/category_list.html
<section class="panel panel-default">
  <div class="panel-heading">
    <h3 class="panel-title">Categories</h3>
  </div>
  <div class="list-group">
    {% for category in site.categories %}
    {% capture category_url %}{{ site.category_dir }}/{{ category | first | slugize | downcase | replace:' ','-' | append:'/index.html'}}{% endcapture %}
    <a class="list-group-item {% if category_url == page.url %}active{% endif %}" href="{{ root_url | append:'/' | append:category_url }}">
        <span class="badge">{{ category | last | size }}</span>
        {{ category | first }}
      </a>
    {% endfor %}
  </div>
</section>
```

```html:octopress/_config.yml
default_asides: [
    asides/recent_posts.html,
    custom/asides/category_list.html
]
```

###Qiita Widget

[http://qiita-widget.suin.org/](http://qiita-widget.suin.org/)

```html:custom/asides/qiita.html
<a class="qiita-timeline" href="https://qiita.com/users/{ユーザ名}" data-qiita-username="{ユーザ名}">{ユーザ名}のtips</a>
<script src="//qiita-widget.suin.org/widget.js"></script>
```

```html:octopress/_config.yml
default_asides: [
    asides/recent_posts.html,
    custom/asides/qiita.html
]
```

###Hatena Widget

[http://b.hatena.ne.jp/guide/blogparts](http://b.hatena.ne.jp/guide/blogparts)

```css:sass/custom/_styles.scss
.hatena-bookmark-widget-body ul {
background-color: transparent !important;
padding: 10px 10px 0px 10px;
}
 
.hatena-bookmark-widget ul li {
}
 
.hatena-bookmark-widget-title {
display:none;
}

.hatena-bookmark-widget-footer {
}
```

```html:custom/asides/hatena.html
ここにタグを貼り付ける
```

```html:octopress/_config.yml
default_asides: [
    asides/recent_posts.html,
    custom/asides/hatena.html
```
EclipseでAWS Toolkitを使う

# EclipseでAWS Toolkitを使う

開発している時に一々Management Consoleを使うのも面倒なので、Eclipseから直接操作して、インスタンスの起動、SSHログインを行う


## インストール

Eclipse Marketplaceを起動して、「aws」で検索
AWS Toolkitが出てくるので、インストールボタンを押す

![Eclipse Marketplace](https://qiita-image-store.s3.amazonaws.com/0/15148/f52f53b5-c882-e099-4f83-abd196280223.png)


## 設定

Eclipseの環境設定で「AWS Toolkit」を選択
AccessKeyとSecretAccessKeyを入力

![Eclipse 環境設定](https://qiita-image-store.s3.amazonaws.com/0/15148/0ff1bbd9-8eea-1f13-6370-482f7719b15d.png)


KeyPairが無ければ作っておきます。

![KeyPair](https://qiita-image-store.s3.amazonaws.com/0/15148/f2e6bf9b-032a-87e1-9c49-f312abaaea8c.png)


デフォルトリージョンは東京にしておきます。

![デフォルトリージョン](https://qiita-image-store.s3.amazonaws.com/0/15148/765221dd-f041-8f76-1819-d3fc6e071f07.png)


## 使い方

Eclipseの右上にあるアイコンのOpen Perspectiveから「AWS Management」を選択
Amazon EC2 → Amazon Machine Imageと選択
検索窓に「amzn-ami-pv-2013」と入力して出てきた対象から起動したいOSのイメージを選択して下さい
「ami-0d13700d」(AmazonLinux64bitの2013年9月版)

![Amazon Machine Image](https://qiita-image-store.s3.amazonaws.com/0/15148/8eb538e0-01b2-4175-a450-46cd0a209890.png)

右クリックして「Lanch」を選択する
出てきたウィンドウで起動するインスタンスの台数、タイプ、AZ、Keypair、SecurityGroupを選択すると「Finush」ボタンが押せるようになり、押せばEC2インスタンスが起動されるます。（お金がかかります）
SecurityGoupは少なくともSSHが可能な物を選択して下さい。
特に何もいじっていない場合は、quick-startを選択すれば22番と80番ポートが開放されます。

![EC2インスタンス起動](https://qiita-image-store.s3.amazonaws.com/0/15148/73c0fe6e-01ae-0c15-65b9-7006efd9153f.png)


今度はInstancesを選択すれば、起動したEC2インスタンスを確認する事ができます。
今起動したインスタンスを右クリックして「Open Shell」を選択すれば、対象のサーバにSSHでログインできます。
（Windowsの場合は、Eclipseの環境設定のAWSTools→ExtarnalToolsでPuttyのインストールディレクトリを指定する必要があります)

![インスタンス確認](https://qiita-image-store.s3.amazonaws.com/0/15148/8eab2fc1-f010-899d-621e-e0fd00672583.png)
Linuxのちょっとした便利コマンドメモ1

ググるのが面倒なときにでも参考にしてもらえれば。

【リモートサーバの全ユーザのcron設定内容を引っ張ってくる方法】
○基本編

```
ssh <ユーザ名>@<リモートサーバ> "sudo su - -c \"egrep -nv '^#|^$' /var/spool/cron/*\""
```


・実行例

```
[root@test_sv01]# ssh koizumi@test_sv02 "sudo su - -c \"egrep -nv '^#|^$' /var/spool/cron/*\"" 
/var/spool/cron/root:1:50 3 * * 0 /bin/sh test1.sh
/var/spool/cron/root:8:10 4 * * * /bin/sh test2.sh
/var/spool/cron/root:10:*/1 * * * * /bin/sh test3.sh
/var/spool/cron/root:14:15 4 * * * /bin/sh test4.sh
/var/spool/cron/root:17:*/10 * * * * /bin/sh test5.sh
/var/spool/cron/root:20:10 3 * * * /bin/sh test6.sh
[root@test_sv01]# 
```

コメントアウト行と空白行は除外しています。

この方法だと、1回ssh接続するたびにパスワード聞かれます。
また、sudoもノンパスでできるようにしておかないと、2回パスワード聞かれます。

なので、大量のサーバを調査する際は、sudoをノンパスでできるユーザを用意したうえで、
鍵認証でノンパス接続できるようにするか、expectを使って自動ログインできるようにしておくことを
オススメします。




○応用編(4時台に実行されるJOBだけ抜き出す)

```
[root@test_sv01]# ssh koizumi@test_sv02 "sudo su - -c \"egrep -nv '^#|^$' /var/spool/cron/*\"" |awk ' $2 ==4 {print}'
/var/spool/cron/root:1:50 3 * * 0 /bin/sh test1.sh
/var/spool/cron/root:8:10 4 * * * /bin/sh test2.sh
/var/spool/cron/root:10:*/1 * * * * /bin/sh test3.sh
/var/spool/cron/root:14:15 4 * * * /bin/sh test4.sh
/var/spool/cron/root:17:*/10 * * * * /bin/sh test5.sh
/var/spool/cron/root:20:10 3 * * * /bin/sh test6.sh
[root@test_sv01]# 
```

awkで条件指定して抜き出してるだけですｗ
MySQLTuner-perlに感動した

* [MySQLTuner-perl](https://github.com/major/MySQLTuner-perl/)

MySQLサーバーのチューニング箇所をアドバイスしてくれる。

```bash:
$ perl mysqltuner.pl
```

![スクリーンショット 2014-02-14 18.07.10.png](https://qiita-image-store.s3.amazonaws.com/0/25728/6ff17ebd-8551-9b5b-bb0a-0e55c644a624.png)


参考サイト

* [Dマイナー志向](http://d.hatena.ne.jp/tmatsuu/?of=5)
sshの接続を早くする(ControlMaster)

* [OpenSSHのセッションを束ねるControlMasterの使いにくい部分はControlPersistで解決できる - Dマイナー志向](http://d.hatena.ne.jp/tmatsuu/20120707/1341677472)
* [SSH_CONFIG (5)](http://www.unixuser.org/~euske/doc/openssh/jman/ssh_config.html)

```bash:.ssh/config
Host *
    ControlMaster auto
    ControlPath ~/.ssh/mux-%r@%h:%p
    ControlPersist 30m
```

* と書いておけば、2本目以降のsshの接続が一瞬です。(1本目のssh接続を使って接続する。)
* 接続まで3秒くらいかかるサーバ(多段接続していたらチョイチョイある)に何度も入る場合便利。
* LocalCommandは1本目のみ実行される。

## 注意点

* localforwarding (-NLのこと) を使う場合、control-cで終了させても接続が残るのでハマらないように。
  * `killall ssh`すればよい。

### コメントの注意

```diff:.ssh/config
 Host *
    ControlMaster auto
    ControlPath ~/.ssh/mux-%r@%h:%p
    ControlPersist 30m
+    # n*
```

* なぜか`*` が解釈されて予期せぬ動作をするので、コメントに `*` を書かないこと



## GSSAPIAuthentication no

ssh接続に時間がかかる。
`ssh -v`で確認したところ以下出力あり。

> debug1: Next authentication method: gssapi-with-mic
> debug1: Unspecified GSS failure.  Minor code may provide more information
> No Kerberos credentials available
> debug1: Unspecified GSS failure.  Minor code may provide more information
> No Kerberos credentials available
> debug1: Unspecified GSS failure.  Minor code may provide more information
> debug1: Unspecified GSS failure.  Minor code may provide more information
> No Kerberos credentials available


```bash:~/.ssh/config
Host *
    GSSAPIAuthentication no
```

一瞬で接続できるようになった。
Macでssh先のディレクトリをマウント

2009年に[MacFUSE](https://code.google.com/p/macfuse/)がメンテされなくて悲しいと思っていたところ、[FUSE for OS X](http://osxfuse.github.io/)という新しプロジェクトができていることに気づく。早速、[FUSE for OS X](http://osxfuse.github.io/)より以下をダウンロードしてインストールする。

* OSXFUSE 2.6.2
* SSHFS 2.5.0

あとは、以下のようにしてマウントするだけで普通に利用できる。

```
mkdir ~/remotes/myserver
#`ssh user@myserver`でログインできるサーバに対して
sshfs user@myserver: ~/remotes/myserver
```
コマンドプロンプトでよく使うかどうかはわからないけどコマンドのメモ

随時増えていくかもしれない。

#ファイル検索
```bat:
>dir <検索するファイルの名前> /s
```

スイッチの前に検索したいファイルの名前を入れる。

__参考__

- [Windows TIPS：dirコマンドでファイル名の一覧を取得する - ＠IT](http://www.atmarkit.co.jp/ait/articles/0412/04/news014.html)

#指定フォルダのファイルをコンカチ
```bat:
>for /f %a in ('dir /b path\to\dir') do @type %a >> concat.txt
```

#指定フォルダ以下全てのファイル名出力
```bat:
>for /f %a in ('dir /b /s path\to\dir') do @echo %a
```

#１行に複数のコマンドを書く
```bat:
>cd /d D:\ & dir /b
```

`&` で繋げられる。

#任意の
サイズのファイルを作成する
```bat:
>fsutil file createnew hoge.txt 1024

>dir hoge.txt
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は BA1A-A357 です

2014/02/28  13:07             1,024 hoge.txt
               1 個のファイル               1,024 バイト
```

`fsutil file createnew <ファイル名> <ファイルサイズ>` で作成。

ファイルサイズはバイト指定。

#ポートが使用されているか確認する
```bat:8080ポートが使用されているか確認する場合
>netstat -ano | find "8080"
```

#複数ファイル内文字列検索
```bat:
> type * | find "検索文字列"
```

`type *` でカレントフォルダの全ファイルを対象にして、 ` | find "検索文字列"` で、検索する。
本番環境で db:reset してしまう悪い夢を見たので

運用始まったら Rakefile に書き足しておくといいと思った。

```ruby:Rakefile
namespace :db do
  task :drop => :abort_on_production
end
task :abort_on_production do
  abort "Don't drop production database. aborted. " if Rails.env.production?
end
```
【メモ】JavaScriptで継承（っぽいの）

# 継承

```js
// 簡単な継承。雑
var Hoge = function(){};
var Piyo = function(){};
Hoge.prototype = Piyo.prototype;
```

```js
// 簡単な継承
function inherit(oldCls, object){
  var newCls = function(){};
  newCls.prototype = oldCls.prototype;
  for(var prop in object){
    if(!object.hasOwnProperty(prop)){ continue; }
    newCls.prototype[prop] = object[prop];
  }
  newCls.prototype.constructor = newCls;
  return newCls;
}
```

n番煎じだと思うJSの継承のメモ書き。
`extend`は拡張、`inherit`が継承　と英単語的には違うらしいのでいつも悩んだりします。


# クラス定数…
`public static String CONST_HOGE = 'hoge';`
のような定数が作れたとすると、上記のロジックでは継承することが出来ないです。

```js
for(var prop in object){
  if(!object.hasOwnProperty(prop)){ continue; }
  newCls[prop] = oldCls[prop];
}
```

たぶんこんな感じになる。


# そもそも

出力すると分かるんですが…。
`object`が持っているプロパティをすべて`newCls.prototype`に入れちゃっているので、
インスタンスを作った時に、`__proto__`の中にいて、まるで

「僕も継承されちゃったんですよ☆」

みたいな状態になってて凄く腹ただしい。
ただコンストラクタ関数で`this.bar`と宣言するか、`instance.foo`のようにインスタンスオブジェクトに付けないと出てこないので、

考えるのをやめた。


# ともあれ

JavaScriptでそこまで継承をすることは（現状私には）ないし、
ちょっと足りないので、まぁいいかなと。
プロトタイプチェーンの勉強にはなると思いますが。
というかプロトタイプチェーンの話のためのネタですよね？？？
アニメーションでフレームアウトさせる(StoryBoard)


フレームアウト（Viewを徐々に欠けさせていく）するには親Viewの範囲外にある子ビューを表示しないようにする設定が必要です。

簡単な例で説明します。
まずはViewの構造を以下の様にします。

`ViewController → ParentView → ChildView`

このときParentViewの設定をいじります。
`Attribute Inspector→Clip Subview`にチェックしてください。

これでParentViewの範囲外に出たChildViewは表示されなくなります。
C言語でglob

globというライブラリがあり、これはpatternでしていしたパスを全部とってくることが可能です。

下記は、現在のフォルダにあるxxx.txtというファイルのパスをすべて取得するものです。

```globtest.c
#include <stdio.h>
#include <glob.h>

int main(void)
{
    glob_t globbuf;
    int i;

    int ret = glob("./*.txt", 0, NULL, &globbuf);
    for (i = 0; i < globbuf.gl_pathc; i++) {
        printf("%s\n", globbuf.gl_pathv[i]);
    }
    globfree(&globbuf);

    return 0;
}
```

これは、第１引数で指定したパターンのパスをすべてglobbuf.gl_pathvに格納されています。
ヒットしたパスの数は、globbuf.gl_pathcに入っています。

ただ、globが使えない環境もあります(Androidのndkとか)
その場合は、opendir/readdirとか、strxxx等を駆使して頑張らないといけないです。
下記は、上記をglobを使わないで書きなおしたものです。

```dirtest.c
#include <sys/types.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <malloc.h>

int main(void)
{

    DIR *dir = opendir(".");
    struct dirent *dp;
    while ((dp = readdir(dir)) != NULL) {
        char *p = strchr(dp->d_name, 0);
        if (strstr(p-sizeof(".txt"), ".txt")) {
            char *s = malloc(2 + sizeof(dp->d_name) + 1);
            strncpy(s, "./\0", 3);
            s = strcat(s, dp->d_name);
            printf("%s\n", s);
            free(s);
        }
    }
    close(dir);
}
```
Go言語: いろいろなマップの作り方まとめ


# 空っぽのマップを作る

## パターン1: var _variable_ map[ _key_type_ ] _value_type_ = map[ _key_type_ ] _valute_type_ 

長い書き方。

```go
var languages map[string]string = map[string]string{}
```

実行結果

```go
map[string]string(nil)
```

## パターン2: _variable_ := make(map[ _key_type_ ] _value_type_ )

`make` を使った書き方。

```go
languages := make(map[string]string)
```

実行結果

```go
map[string]string{}
```

予め指定した要素数分のメモリを確保することもできる。

```go
// 要素42個分の領域を予め確保
languages := make(map[string]string, 42)
```

## パターン3: _variable_ := map[ _key_type_ ] _value_type_ {}

短い書き方。

```go
languages := map[string]string{}
```

実行結果

```go
map[string]string{}
```

# 要素が入ったマップを作る

## パターン1

長い書き方。

```go
var languages map[string]string = map[string]string{"go":"golang", "rb":"ruby", "js":"javascript"}
```

実行結果

```go
map[string]string{"go":"golang", "rb":"ruby", "js":"javascript"}
```

## パターン2

短い書き方。

```go
languages := map[string]string{"go":"golang", "rb":"ruby", "js":"javascript"}
```

実行結果


```go
map[string]string{"go":"golang", "rb":"ruby", "js":"javascript"}
```


## パターン3

各要素を改行する場合は、1要素ごとに カンマ`,`をつけないとパースエラーになるので注意。 

```go
languages := map[string]string{
	"go":"golang", 
	"rb":"ruby", 
	"js":"javascript",
}
```


## パターン4

`make` で作った時はキーを指定して代入する。

```go
languages := make(map[string]string)
languages["go"] = "golang"
languages["rb"] = "ruby"
languages["js"] = "javascript"
```

---

最後までお読みくださりありがとうございました。Twitterでは、Qiitaに書かない技術ネタなどもツイートしているので、よかったらフォローお願いします:relieved:→[Twitter@suin](https://twitter.com/suin)
Stormで実現するビッグデータのリアルタイム処理プラットフォーム


本内容は、デブサミ2014の講演のメモです。
http://event.shoeisha.jp/devsumi/20140213/session/399/

# ビッグデータ x リアルタイム

## リアルタイムが必要な理由

IoT (Internet of Things)
センサーなどのインターネット
に注目

Googleの提案

- 2003 GFS
- 2004 Map Reduce
- 2006 BigTable
- 2010 Percolator / Dremel (BigQuery)

オープンソースプロダクト

- 2007 Hadoop
- 2008 HBase
- 2011 Twitter Storm
- 2013 Drill

これまで

ログ解析、処理時間短縮、リコメンドエンジン　＝＞　主にバッチ処理

今後求められる

1. 不正利用、不正アクセス検知
2. センサーデータ

ビッグデータの種類

- バッチ
技術：MapReduce
プロダクト：Hadoop

- クエリ　インタラクティブクエリ　
技術：クエリ、OLTP
プロダクト：Drill / Impala / Stinger / Presto

- ストリーム
技術：Stream processing
プロダクト：Storm / Spark Streaming

Ltencyはバッチからストリームに向かって低くなる

### ストリームデータ処理

利用例

- 大量のデータの事前処理
- リアルタイムデータ集計
- センサーデータの集計・分析
- セキュリティ


# ストリームデータ処理を実現するStrom

Twitterがオープンソースとして公開
コアエンジンはClojure、コンポーネントはJava
コンポーネントは、Scala Rubyなども可

### 特徴

１. Integrates
２. Simple API
３. Scalable
４. Fault tolerant
5. Guarantees data processing
6. Use with any languages
7. Easy to deploy and operate


### 構成

Nimbus -> Zookeeper -> Supervisor - Worker - Executor

### Topology

Spout -> Bolt 
 
Spout：TUpleとしてデータソースを送出する
Bolt：StreamからTupleを受信し、処理する

1. Stream groupoings
2. Deistrbuted RPC
3. Transactional 
4. Trident
5. Metricds

# ストリームデータ処理のアーキテクチャ

- 大量データの収集方法
- 増減刷るストリームデータへの対応
- 分散処理
- 中間データの扱い

一旦キューに入れて

## 実例

ログのリアルタイム作成、フィルタリング

## Stomethign + Strom

Storm on YARN

Amazon Kinesis with Storm
Kinesisはデータの収集

＃＃Stormでオンライン機会学習

AcroMUSASHI Stream
https://github.com/acromusashi/

オンライン機会学習
Stream-ML


モチベーション

1. イベント処理 => CEP => 機械学習 on ストリームデータ
2. スケーラブル　＋　高信頼性でリアルタイム系で利用できる機械学習
3. チャレンジ！！

特徴

- スケーラビリティを備えた高速分散処理
- 機械学習のアルゴリズム単体ではなく、データ分析全体のリアルタイム処理


## バッチとリアルタイムのハイブリッド

### ラムダアーキテクチャ　（バッチ x ストリーム）

Serving Layer

- SploutSQL
− ElephantDB

- HBase
- Casandra

これらを、Strom Imparaなどでマージ
グリーのデータ分析基盤


本内容は、デブサミ2014の講演のメモです。
http://event.shoeisha.jp/devsumi/20140213/session/410/

## 過去の話

### 2011
Webサーバのログをrsyncでストレージに蓄える
バッチ処理をしたものをMySQLに格納

### 2012
生データを触りたいという要望から、解析用のSQLServeを導入

### 困ってきた

データが欲しい人が増えた
　サービスが増えた
　人が増えた

データ提供が難しくなり、遅延が発生し始めてきた


## 現在の話

コンセプト

- Accessability
誰でも自由に

- Scalability
どれだけ貯めこんでも



### ゲーム

- Treasure Dataデータベース
ゲームへのアクセスログ

- Hadoopクラスタの構築が不要

- コレクトからストアまで
fluentd

- スキーマレスで自由度の高いログフォーマット
time int, v map<string, string>


- データ・ウェアハウスの運用コストの低減

- BIツールとの用容易なインテグレーション

- 構成
Webサーバからログを、2台のLog Aggregateor Serverに集約した上で、Treasure Dataへ移行
約20ゲームタイトル
ウェブサーバ2000台以上
log aggregatorサーバ40台以上
送信データ量 1TB

- ログデータをゲーム改善のアクションにつなげる
アクセス状態分析
Webサイトでは一般的な手法をソーシャルゲームに導入
- ジョブ管理をしっかりする
誰でも触れるので、負荷などを監視できるように


#### アクセス遷移分析
- ページ遷移
- 離脱
- クリック

#### Chrome Extensionを利用して実際の画面にオーバーレイ

- アクセス遷移分析

- クリック分析
お知らせやランキングの効果などで活用

#### ジョブ管理ツール

非効率なジョブが投入されるケースが存在する

- ジョブを可視化
- ジョブの送信元の特定
- スロークエリの可視化と特定

**Treasure Dataを利用しているが、その利用方法を社内でシステム化**


### GREE Platform

- Hadoopベース
ゲームからAPIへのログ
ユーザ情報

- 利用状況
5000ジョブ/ 日
数ヶ月分で、圧縮した状態で60TB
ユーザは120人、ほとんどが非エンジニア


#### アクセス方法

Hive Presto Macaronで構成されたシステムに対して

- アクセス
**SQuirreLSQL** を推奨
JDBC / ODBC（接続は可能）

- グラフ化
Macaron（自社製品）

- その他
Shell, Python, R, PHP
Thriftのおかげ


## 近い未来の話

Speedy & Intelligently


### Presto

OSSな分散SQLエンジン
Post Hive (produced by Facebook)
Hiveよりも速い

速度
Impara > Presto > Hive

Imparaはメモリ効率が悪そうということで、Prestoを採用
Prestoはオープンソース。内部の改変は必要となるので、Prestoが利用しやすい。

### Spark

Hadoopより速い
非同期のMapReduce
機械学習に最適
新卒エンジニア研修ですべきことできること


本内容は、デブサミ2014の講演のメモです。
http://event.shoeisha.jp/devsumi/20140213/session/366/

## 新卒研修って？

教えることは無限にある
教えることを絞っても教えることが難しい

やれる範囲でやろう

でも、全然やれてない。やる前に投げている。

## 研修自体の問題を整理

- 技術レベルが求める水準に達していない
現場のエンジニアが直に教える
工夫が大事
諦めの連鎖を断ち切る

- 研修でやってきた知識が現場で活きない
知識技術は幅広で奥深い上に流動的
特定のものに絞って教えるのはギャンブル
特定の状況でしか役立たないものを排除
基本を大事に
むしろ、 **理想を先に刷り込む**

- 現場で教える時間がない
勝手に学ぶ習慣をつける
観察眼、応用力を養う

技術や知識は、「水準・本質・応用力」の３本柱

**自走できるエンジニア**

##４つのフェーズ

- 座学
- 企画
- 設計
- 実装

卒業は早抜け方式
早ければ２ヶ月、最長９月末まで

### レビュー
各フェーズ各ステップ５〜７回を１回１時間
新卒と更新の１対１

大事なこと

- 正しく論破する（納得させる）
- 指摘の仕方や促し方を１人１人変える
- 対面
- レビューでの出来事や内容を記録


進捗と成長度合いに早めに気がつく

- 進みに差がでる
- 成長を促す手を打てる

**計測第一**
徹底したPDCAで、的確なアクションで学習を加速

### フォローアップ

対象者に

- 毎日or隔日で30分講師と1on1
- プログラミングのハマり解消
- 問題解決の手法トレーニング
- 議論のトレーニング
- 成長促進のための徹底した振り返り **KPT**

一人ひとり丁寧に
最終的に自信を付けさせる

フォローアップで、

- 本質を見抜く力
- 自分のたどった道のりを把握
- 間違った道に入ったことを検知
- ゴールまでの距離
- 立ち向かう的を分断して立ち向かう

自分の弱いところと向き合う。これは辛い

http://www.slideshare.net/DaisukeTamada/perl-26371335
テスト自動化を見直そう！


本内容は、デブサミ2014の講演のメモです。
http://event.shoeisha.jp/devsumi/20140213/session/372/

#自動化への投資が開発チームをクリエイティブにする

coverity japan　安竹さん
Coverity
静的解析ツールの販売

## 本当に自動化が解決策？

自動化よりもプロセスの改善が先の場合もある
問題が自動化よりも他にある場合もある。
客観的なデータが必要。
自動化する明確な理由が必要。

## 担当者のスキルセットは正しい？

スキル大事
自動テストのコードを書くにはスキルが必要

## コードカバレッジの罠

カバレッジ100%と機能的に正しいとは別

## 優先度を設定しているか？

変更箇所から優先的に自動化を導入する
一番、効率がよい

## クリーンなコードになってる？

結合レベルでクリーンであるべき
Coverityツール
1. コーディング
2. ユニットテスト
3. 最新ビルドでクリーンであることを確認

静的解析が自動化を高める

オープンソースのプロジェクトでは、Coverity Scanが無料で利用できる
やる気を引き出す組織風土の作り方



本内容は、デブサミ2014の講演のメモです。
http://event.shoeisha.jp/devsumi/20140213/session/409/

講演者：サイバーエージェント　藤田社長

3000人近くいるので、一人ひとりフォローはできない
仕組みで対応するしかない

サイバーエージェントの特徴

- 大型買収しない
- 人材もヘッドハンティングよりも、社内で育てる

# 前提

- 会社の業績が伸びていること
- 社員が十分な対価を得られていること

# サイバーエージェントの施策

## 組織の特徴

### 年齢割合
20-30第が大半　平均年齢30.3歳
上が詰まっていない
会社が、大学の研究室のような雰囲気
終身雇用を謳っているので、ずっとこの状態が続く訳ではないが、安心感がモチベーションにつながっている

### 男女比

男：女　＝　70% : 30%
半々が理想　＝＞　モラルが高くなる

### 定期的な新卒採用

2013年度　230名　（エンジニア130名、総合職100名）
日本独島であるが、優秀な人材を取りやすい
部署に新人が配属されると、部署が活性化しやすい

### ポジティブな社員がマジョリティ

100%がポジティブは怪しい。宗教っぽい。
根っからのポジティブ、ネガティブの人を除くと、8割くらいはどっちにも転ぶ
伝染するので、早い対応が必要

### 抜擢は実績以上に人格を重視

実績のある人を抜擢し易いが、人格が問題のある人が上に経つと、その配下は潰れる
実績がなくても人格者を上に上げるとちゃんとスタープレーヤーを引き上げてくれる


## 人事制度

### CA8

２年毎に１〜３名の取締役を入れ替える制度
ずっと役員が固定だと、閉塞感を与えてしまう。必ず２席開くことでモチベーションを。
やってみると、役員がものすごくがんばってくれる（はずされたくないから）
組織全体を活性化

### CAJJ制度

事業をJ5（新規事業）からJ1（営業利益１怨念以上/Q)の格付けをする

- J1
- J2 営業理経0.5〜1奥
- J3 ３ヶ月平均粗利1500万円＆黒字
- J4 粗利500万円
- J5

目的：

- 目標を明確にする
上場を目指すなどは分かりやすい

- 撤退のルールを明確にする
最初から決めておくルールがあると、モチベーションが違う
納得する

### あした会議

取締役と選抜社員で、半年に一回実施　５０〜７０人（１役員が６，７名のチーム）
１泊２日で実施
中長期的な目標、先送り事項などの課題解決を提案、意思決定する合宿
こういった意思決定の場に、エンジニアを巻き込むことで、現場にその意図を広められる

### 社内キャリアエージェント

#### 適材適所を目指す
- 社内異動公募制度
- 月１成果状況シート

キャリアエージェント部署を用意して、管理する

### 合宿

経営陣が行う役員合宿
開発チームやプロジェクトなど様々な単位で頻繁に開催
お台場に合宿所を保有
合宿の開催を奨励

問題が起きていると、全体を見渡すことは難しい。
場所（環境）を変えることで、見方が変わり１日で解決することもある。

### 福利厚生

採用が難しく、コストが非常に大きい
辞めたくないと思う環境にコストを払う方が安い

- ２駅ルール
会社から２駅のところに住むと、家賃補助３万円がでる
入社５年後はどこでもルールに変更

- 毎年休んで５

- 部活動支援

などオリジナル制度多数（ネーミング重視）

## 社風

### 社員総会

意外と喜ぶ
演出がとても大事。ビデオや音楽、内装。
わざとらしくなく、かつ、豪華

### 社内ポスター・トピックスメール

- トピックスメール
活躍した社員がいたら、その情報を全社にメールする
これによって社内の空気が変わる

### オープンなSNS活用

SNSの使い方で怒ることはない
会社の判断などもブログで分かる
社長もブログを書く（話すよりも書く方が得意）
社内で通知があるよりもオープンな形で情報が提供される
説明がしっかりある

### 飲みニケーション

やっぱり重要
会社は必ずわだかまるもの。
飲みに行くことだけで、解決するものもある
成果を出したプロジェクトには、飲み代＋翌日の半休が提供される

### 社内結婚が多い

社内で遊びで手を出したら左遷と
ただし、ちゃんとした恋愛、結婚は推奨

### 若手の抜擢

ひるまない
新卒入社の子会社取締役数４２名
停滞した際に抜擢すると、不満もあった。
しかし、慣れてるくと、そのうち自分もという形になっていった

## 効果がありそうでないもの

- 離職率の低さ
離職率が低すぎるのは問題
仕事ができないのに給料をもらい続けている社員がいる際に、仕事ができる社員のモチベーションの低下は大きい

- ストックオプション
気がついたら大金を手にしていた。という形はよい。
ただし、ストックオプションを目当てに頑張らせるのは問題になりやすい。
仕事の目的が金になってしまう。

- 美人が多い？
サイバーエージェントは美人が多いが社員のモチベーションをあげるためではない
そんな程度で長期的なモチベーションにはつながらない

- 人参ボーナス
目標とボーナスを連動させると、「思い」で仕事をしなくなる
回数を重ねると、ボーナスの多い、少ないでモチベーションが変動する
ボーナスを渡す際は、こっそり渡す
理由なども説明しない（説明すると金のために意識が向く）

- 仕事とプライベートの切り分け
LWBを過度に意識して、仕事と明確に分けるのは逆効果


# まとめ

継続的に不断の努力で見続けないと、あっという間に状況が社員のコンディションは変わる
空気感、雰囲気はとても大事
金で人を引っ張るのは逆効果になりやすい
金で引き抜くと、金が原因で去っていく
駅とか路線のマスターデータの入手方法

# 背景
WEBサービスで駅とか路線のマスター情報とか使いたいときが結構あると思います。自分でマスター管理するのは大変なので、どこかにお願いしたいですよね。そんな時はこちら。

# 無料
## [駅データ.jp](http://www.ekidata.jp/)
- 無料（有料プランもあり）
- 事業者マスタ、路線マスタ、駅マスタ、接続駅マスタがCSVで提供されます
- APIでの提供も用意されています
- 商用利用やデータの改変についても制約がなく使い勝手が良さそうです
- 有料契約すると取得できる情報がちょっと詳細になります

## [リクルートWEBサービス](http://webservice.recruit.co.jp/manabi/reference.html)
- 無料
- APIでの情報提供になりますが、沿線マスタAPIで全件取得できますので、それをもとにAPIをぐるぐる回せば自分で駅マスターは作れそうです
- ただ利用者としてリクルート社のコンテンツをマッシュアップしてサービス提供したい人向けのようなので、全く無関係のシステム・サービスで利用しようとしている場合は利用許可がでないかもしれません

## [HeartRails Express](http://express.heartrails.com/)
- 基本無料（マスターデータ販売は有料）
- 無料で利用できるのはAPIです。こちらも工夫すればAPI経由でマスターデータが作れそうです
- それが面倒な場合は有料でマスターデータ購入しましょう

## [国土交通省国土政策局国土情報課](http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N02-v2_2.html) 
- xml形式なのでDBにはそのまま入れづらいので一手間かける必要があります
- 線路の座標も取得できるようです
（情報提供 @tamura_CD さん）


# 有料
## [国土地理協会](http://www.kokudo.or.jp/database/004.html)
- 有料（初年度160万円、次年度以降30万円）
- 沿線マスタ、駅マスタ、事業者マスタがCSVで提供されます
- 年4回更新

## [駅すぱあとWeb Service](http://webservice.ekispert.com/)
- 有料（APIの一部機能は無料で利用できます）
    - [無償版駅すぱあとWebサービスの紹介](http://webservice.ekispert.com/free_provision/)
- APIによるデータ提供だけでなく、HTML5、Flashを使ったWEBパーツとしての提供方式も用意されています。
- 路線図、時刻表、運行情報、料金情報などAPI経由で取得することができます
- マスターデータとしての配布はしてないようですので、自分のシステムにデータを持っておきたい場合はAPI叩いてローカルに保持する必要がありそうです

## [駅探法人向けサービス](http://go.ekitan.com/info/index.shtml)
- 有料
- CSVによるマスターデータ提供、APIによる検索提供、ASPサービスとしての提供など豊富なラインナップ
- サービスメニューが豊富で柔軟に対応してくれそうな雰囲気です

## [マピオン法人向け地図画像、地図検索サービス](http://www.mapion.co.jp/sales/)
- 有料
- 駅・路線情報に関しては検索APIという形で提供されています
- マスターデータとしての配布はしてないようですので、自分のシステムにデータを持っておきたい場合はAPI叩いてローカルに保持する必要がありそうです


# 仲間募集
[株式会社スピカ](http://spika.co.jp)では一緒に切磋琢磨できるエンジニアの方を募集しています！ぜひ、[こちら](https://www.wantedly.com/companies/spika/projects)をご覧ください！！
2/14日のJavaScript学習内容

本日のJavaScriptの学習内容はelse...ifを用いて
さまざまな制御分を作成いたしました。
例えば、テストの点によって評価を表示させるプログラムでは、
var score □;とし、条件を>=80,>=70,>=60,elseとすることで評価分けを行いました。

他には変数をvar year □;とし、
与えた年数yearによって閏年かそうでないかを判定するプログラムです。
閏年になる条件は、
①その年の数が４で割り切れて１００で割り切れない
②その年の数が４００で割り切れる
このどちらかを満たしていれば良いため、
まず、条件①で&&を用いて論理積を条件として記入し、
更に条件①と②の論理和を||で取ることによって
条件分岐を行う事が出来ました。

本日は以上です。

本日の学習内容　P70~75まで
次回　P76のfor文による繰り返しのプログラムからやっていきます。
JavaScriptの勉強4日目：2014年2月14日(金)

本日もドットインストールにあるJavaScriptの動画を参考に学習をした。

2月13日に新しくJavaScript入門の動画がアップロードされたが、旧版の動画と内容に大差がなかったため、深く触れるのはやめ、ストップウォッチの作成とおみくじの作成の動画を視聴し、作成を行った。

ストップウォッチの作成では、時間の計算の概念を学習した。
今から○○秒経過した、という考え方ではなく、基準点から何秒経過した、という考え方を学んだ。ほとんどテンプレートで使えると思うので、しっかりと抑えておきたい。

おみくじの作成では乱数の使い方を学習した。
Math.floor(Math.random()*omikuji.length);
で、乱数を使うことができる。この記述の仕方はJavaと同じである。配列の長さの指定についてもほとんど同じである。
よく、JavaとJavaScriptは全くの別物ということがあるが、確かに宣言の仕方などに大きな差があるが、このような点において類似点があるため、スムーズに自分に落とし込める。
今後もしっかりと学習した内容を自分のものにしていきたい。
windows serverのメモリ使用率を求める

携帯からテスト

インフラエンジニア半年目の初心者です。
初投稿します。

windows server 2003 のカウンターログ
windows server 2008 のパフォーマンスモニターについて

メモリ使用率を測るときに使うカウンターは
available MByte/sec

1つだけ注意が必要で、availableの言葉通り、
「使用可能なMByte」を表している。
なので、「使用率」を求めるのなら、
総量RAMからデータとして出た　available MByte/sec を除算し、%換算する。

「(メモリ使用率を求めるのに)　pages/sec　を何で使わないの？」と、最近リーダーに詰められましたが、
pages/sec は名前の通り、物理ディスクへの書き込み読み込みです。仮想メモリへの値です。


メモリリークが気になる場合、page faults/sec を取ったら良いのかなと思いました。google先生にきこう。
おわり
nginx で http でのアクセスを https にリダイレクト

ちょっと検索すると<code>rewrite</code>するやり方が結構出てくるのだけど色々見てたら<code>return</code>を使う方法がシンプルだったので採用してみた。正規表現とか<code>if</code>とか出てこないのでわかりやすい。

```nginx
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443;
    ssl on;
    # ...
}
```



## 参考文献
- http://qiita.com/shiftky@github/items/6bda0ba6a9e697361e7f
- http://stackoverflow.com/questions/18523180/redirecting-to-ssl-using-nginx
- http://serverfault.com/questions/250476/how-to-force-or-redirect-to-ssl-in-nginx
tailで文字列をハイライト表示する風

アクセスログなど流速が早いログを`tail -f`しているときに特定文字列を見ておきたいときがあります。
grepしてもいいんだけど、それだと見逃すログがあるためlessコマンドで実現します。

```
$ less -p "404 " /var/log/httpd/access_log
```

`-p`は指定されたパターンをサーチするオプション。これを実行中に`F`を押します。これで`tail -f`と同じ動作になります。

![0.png](https://qiita-image-store.s3.amazonaws.com/0/16906/6ccfcafb-0706-13af-0a8a-085d3c5d5e4f.png "0.png")

これにて完了です。
Go言語: スライスをshiftするだけの関数




```go:main.go
func sliceBytes(slice []byte) (shifted byte, newSlice []byte) {
	if len(slice) < 1 {
		return
	}
	
	newSlice = make([]byte, len(slice) - 1)
	copy(newSlice, slice[1:])
	shifted = slice[0]
	return
}
```

PHPとかJSのsliceと違って、サイドエフェクトはありません。
goのappendがそうだったのでならいました。

サンプル

```go:main.go
package main

import (
	"log"
)

func main() {	
	numbers := []byte{1, 2, 3}
	
	number, numbers2 := sliceBytes(numbers)
	
	log.Println(number, ",", numbers2)
}


func sliceBytes(slice []byte) (shifted byte, newSlice []byte) {
	if len(slice) < 1 {
		return
	}
	
	newSlice = make([]byte, len(slice) - 1)
	copy(newSlice, slice[1:])
	shifted = slice[0]
	return
}
```

実行結果

```
2014/02/14 12:51:01 1 , [2 3]
```
サイトから画像ファイルの習得

#はじめに
画像をサイトからダウンロードする用途でwgetコマンドを下のように使っても何故か上手くいきませんでした。

```terminal
wget -r -l 5 -Ajpg hoge.html
```
なので自分でシェルスクリプトを作ってみました。
もっといい方法があると思うんだが・・・

#環境と使用するもの
mac 10.9
zsh
ruby
wget

wgetを入れてないければ、homebrewで入れちゃいましょう。

```terminal
brew install wget
```

#流れ
サイトのURLを引数にカレントディレクトリにjpg画像がダウンロードされるようにします。

+ wgetでhtmlファイルをダウンロード
+ htmlをtxtに変換後rubyで画像のurlだけ抽出
+ urlをwgetで習得

以上です.
ファイルは以下の用になります
#ruby

```imgCrawler.rb
str = ""
file = open(ARGV[0])
while l = file.gets
   str += l.to_s
end

ary = str.split("<")

for l in ary
url = l.scan(/http:.*jpg/)
  if(url[0] != nil)
     puts all[0]
  end
end
```

#スクリプト

```imgCrawler.sh
#!/bin/sh
wget -O hm.html $1
cat hm.html > hm.txt
ruby ~/Path/imgCrawler.rb "hm.txt" > url.txt #PathはimgCrawler.rbのあるパスに書き換える。
wget -i url.txt
rm hm.html url.txt hm.txt
```

作成後、以下を実行してください.

```terminal
chmod u+x imgCrawler.sh
```

#使い方

```terminal
mkdir picdir #ダウンロード用ディレクトリ
cd picdir
imgCrawler.sh hoge.html
```
数秒待ってから処理をする


非同期通信をするときなどにsetTimeout()ってたまに使ってます．

```
setTimeout(function(){
	//処理を記述
},/*待つ秒数*/);
```

##通常のJSで10秒待ってからリダイレクト
```
setTimeout(function(){
	location.href="/";
},10000);
```

##node.jsで30秒待ってからリダイレクト
```
setTimeout(function(){
	res.redirect('/');
},30000);
```
Flash環境構築と速習

## リソース
* [AIRランタイム]("http://get.adobe.com/air/?loc=jp")
* [AIR SDK]("http://www.adobe.com/devnet/air/air-sdk-download.html")
* [windows7環境変数設定]("http://note.chiebukuro.yahoo.co.jp/detail/n129063")
* [Flex SDK]("http://www.adobe.com/devnet/flex/flex-sdk-download-all.html")

## 環境
* OS:  windows7
* CPU: Intel i7
* memory: 4GB

## 手順

#### 基本
 * AIRランタイムの入手とインストール
  * AIRランタイム
 * JREの入手とインストール
  * インストール済み　java version "1.7.0_01"
 * AIR SDK入手と配置
  * AIR　SDK
  * 環境変数設定
  * > adl -help で、確認OK

#### SDK/Ajax版（HTML）のhelloAIR
 * htmlファイル

   ```html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
  <title>タイトル： Hello AIR</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
  <h1>Hello AIR</h1>
  <p>アプリケーション</p>
</body>
</html>
```

 * xmlファイル

   ```xml
<?xml version="1.0" encoding="utf-8"?>
<application xmlns="http://ns.adobe.com/air/application/1.5">
  <id>com.websysd.HelloAIR</id>
  <version>1.1</version>
  <filename>helloAIR</filename>
  <initialWindow>
    <content>helloAIR.html</content>
    <visible>true</visible>
    <width>400</width>
    <height>200</height>
  </initialWindow>
</application>
```

 * 実行

   ```shell-session
C:\workspace> adl helloAIR-app.xml
```

#### Flex版のhelloAIR

 * FlexSDKの入手と配置
  * Flex SDK
  * 環境変数設定
  * > amxmlc -helpって、確認OK

 * FlexSDKで、helloAIRを作成
  * mxmlファイル

   ```xml
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
                        layout="absolute" title="hello air">
  <mx:Label text="hell AIR" horizontalCenter="0" verticalCenter="0" />
</mx:WindowedApplication>
```

   * コンパイル

    ```shell-session
C:\>amxmlc helloAIR.mxml
```

   * xmlファイル(アプリケーション記述ファイル)

    ```xml
<?xml version="1.0" encoding="UTF-8"?> 
<application xmlns="http://ns.adobe.com/air/application/3.1" minimumPatchLevel="0"> 
    <id>examples.html.HelloWorld</id> 
    <versionNumber>1</versionNumber>
    <filename>helloAIR</filename> 
    <initialWindow> 
        <content>helloAIR.swf</content> 
        <visible>true</visible> 
        <width>400</width> 
        <height>200</height> 
    </initialWindow> 
</application>
```

   * 実行

    ```shell-session
C:\workspace> adl helloAIR-app.xml
```


#### ActionScript3速習

```xml
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
                        layout="horizontal" title="hello air">
  <mx:Script>
    <![CDATA[
      private function button_click():void {
        mx.controls.Alert.show("button is pushed.", "message");
      }
    ]]>
  </mx:Script>
  <mx:Label text="name: "/>
  <mx:TextInput text="input your name"/>
  <mx:Button label="send" click="button_click()"/>
</mx:WindowedApplication>
```



#### Adobe Creative Cloudで、体験版Flex Builderをインストールした


## その他
 * AIRは開発環境の選択肢が多い
   * Dreamweaverを使用してHTML/Ajaxベースの開発
   * FlashコンテンツもそのままAIRアプリケーションに変換できる
   * Flexベースで作成できる。　MXML；　Flex BuilderでGUI作成
 * Webアプリケーション <-> Flash playerで実行 <-> Flash文書(.fla)
 * デスクトップアプリケーション <-> Adobe AIRで実行 <-> MXMLファイルとActionScriptファイル
GameObjectに紐付いたクラスインスタンスの取得

Unity(C#)で他のGameObjectに紐付けられたクラスのメソッドをコールしたい場合は、
GameObjectをFindした後にGetComponentで取得することで実現可能です。

ex.) 以下は、ExtendMonoBehaviourGameObject という名前のGameObjectに紐付けられた
ExtendMonoBehaviourクラスのインスタンスを取得する例

```Test.cs
using UnityEngine;
using System;

public class Test: MonoBehaviour {

	private ExtendMonoBehaviour _emb = null;

	// Findメソッドは実行コストが高そうなのでAwakeイベントでFindするのがベター
	void Awake () {
		_emb = GameObject.Find("ExtendMonoBehaviourGameObject").GetComponent<ExtendMonoBehaviour>();
	}

	void Update () {
		//タッチ時にExtendMonoBehaviourクラスのインスタンスのメソッドをコールする
		if (Input.GetMouseButtonDown(0)) {
			_emb.setFoo("hoge");
		}
	}

}


```
プロセスを実行した時の環境変数を知りたい(Linux)

Linuxでプロセスを実行したときの環境変数を知りたい場合は、`/proc/[pid]/environ`ファイルで確認できます。
ただ、各項目がnullで区切られているので、catなどで表示しても見にくいです。
以下のコマンドで見やすくなります。

## その1(stringsを使う)

```
strings /proc/[pid]/environ
````

stringsコマンドは、バイナリフィアルや得体のしれないファイルから文字列を拾ってくれます。
何のファイルかの見当をつけるのにも使えます。

## その2(trを使う)

```
cat /proc/[pid]/environ | tr "\000" "\n"
```
xcodeがattaching to appnameで止まるときの対処法

ぐぐるとよくLLDBをGDBにしろとか書いてるけどschemeのdebuggerにgdb表示されない
更に調べてるとどうやらhostsが原因らしい。

/etc/hostsに
127.0.0.1 localhost

がない場合にLLDBでうまく起動できないようだ。
attaching to appnameで止まるって嘆いてる人は是非試して欲しい。