OmniAICreator/Qiita-1.07M huggingface dataset:
xyplotでカテゴリ描いた図の順番を逆にしたい

**Rのlatticeパッケージのxyplotでカテゴリごと描いた図の順番を逆にしたい。**
組み込みデータのairqualityを使って説明してみる。
月ごとに，温度とオゾンの散布図を描く。
```
library("lattice")
xyplot(Ozone ~ Temp | Month,
       layout=c(1,5),
       data=airquality
       )
```
![f1.jpg](https://qiita-image-store.s3.amazonaws.com/0/42986/c49ae326-7aee-c35d-5532-e0d95eb3cd72.jpeg)

この図だと，月ごとのグラフが下から上と並ぶのが気持ち悪いので，逆順にしたい。
当たり前だけど，y軸の最大値と最小値を逆にしてylimで設定したのではうまくいかない。
オプションのas.tableを使う。
```
xyplot(Ozone ~ Temp | Month,
       layout=c(1,5),
       data=airquality,
       as.table=T
       )
```
![f2.jpg](https://qiita-image-store.s3.amazonaws.com/0/42986/e1146435-3433-47a2-9a45-9f88310a84c5.jpeg)
逆順に並びました。
丁寧にやるなら，本当はMonthをfactorにして，levelを指定すれば良い。

月名を表示させた例は次回に。
ScrollView を作る


チュートリアルビデオ：[NGUI 3.6.0 Tutorial 4 - YouTube](https://www.youtube.com/watch?v=UK3aMHRfgcw&feature=youtu.be&t=0m17s)

手順：

1. [NGUI]-[Create]-[ScrollView] で ScrollView を配置

2. ScrollView を選択して、 [NGUI]-[Create]-[Grid] で Grid を配置

3. Grid を選択して、 [NGUI]-[Create]-[Sprite] で Sprite を配置

4. Sprite を選択して、[NGUI]-[Attach]-[Colider] で Sprite に Box Colider コンポーネントを追加

5. Sprite を選択して、インスペクタから[Add Component] を開き、Drag Scroll View を追加
Swift で空の Array の生成方法色々


## Apple お勧めのやつ
Apple お勧めの一番ベーシックなのがこれ。

``` objectivec:Sample1

var hogeArray: Hoge[] = []

```

## ジェネリクスを使ったアレ
ジェネリクスを使って多少やぼったく書くならこれ。

``` objectivec:Sample2

var hogeArray: Array<Hoge> = []

```

## The Swift Programming Language でよく出てくるアレ
初期値を設定しない場合の Array の生成方法として紹介されています。
インスタンス変数として空の Array を生成する時なんかはコレが良いかもしれません。

``` objectivec:Sample3

var hogeArray = Hoge[]()

```
処理時間簡易計測マクロ


以下のマクロをPrefix.pchに追加しておくと、ちょっとした最適化をしたいときに簡単に処理時間を測れます。
ただし、結果にはばらつきがあるのと、精度が<1msのようですので、あくまで目安です。

マクロ
-----
```
#ifdef DEBUG
#define TIMING_START NSDate *timingStartDate = [NSDate date];
#define TIMING_LOG(message) NSLog(@"[%@] elapsed time: %f msec", message, [[NSDate date] timeIntervalSinceDate:timingStartDate] * 1000);
#else
#define TIMING_START ;
#define TIMING_LOG(message) ;
#endif

```

サンプル
-----
```Sample.m
NSDictionary *dictionary = @{ @"name" : @"tarou", @"age" : @20, @"gender" : @"male" };
NSMutableString *description = [[NSMutableString alloc] init];

TIMING_START;

#if 1
NSEnumerator *enumerator = [dictionary keyEnumerator];
NSString *key;
while (key = [enumerator nextObject]) {
    [description appendFormat:@"%@は%@。", key, dictionary[key]];
}

#else

[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    [description appendFormat:@"%@は%@。", key, obj];
}];

#endif

NSString *message = [NSString stringWithFormat:@"finish: %@", description];
TIMING_LOG(message);

```

```結果(keyEnumerator)
2014-06-04 20:03:30.296 MyApp[181:60b] [finish: nameはtarou。ageは20。genderはmale。] elapsed time: 0.109017 msec
```

```結果(enumerateKeysAndObjectsUsingBlock)
2014-06-04 20:06:06.984 MyApp[204:60b] [finish: nameはtarou。ageは20。genderはmale。] elapsed time: 0.126958 msec
```

精度について
-----
* http://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%99%82%E5%88%BB
* https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html
【Java初心者】値渡しと参照の値渡し(”参照渡し”という言葉は誤解を生むとのことで修正しています)

**20190422追記**
「参照渡し」への間違い部分に修正を入れています。
当時の私がそうであったように初心者は「参照渡し」という言葉でググるだろうという予想から、タイトル長くなってしまっているのですが、このようなタイトルにしています。
一部取り消し線で対応していますが、取り消し線での対応が難しい部分は大きく改変しています。(該当部分にはその旨を書いています)
**追記ここまで**

Java歴約1年、まだまだ初心者です。
今日は値渡しと~~参照渡し~~参照の値渡しについてまとめようと思います。

##メソッドの引数
メソッドの引数には、基本データ型、参照型のどちらも使用できます。
しかし、どちらの型を使うかによって、挙動が変わってきます。

##基本データ型
呼び出し元でメソッドの引数に基本データ型を使用した場合、メソッドではその値のコピーを受け取ります。
これを **値渡し**といいます。
単純に値のコピーを渡しているだけなので、メソッド内でその値に変更を加えても、呼び出し元には影響しません。

```java
// class宣言等は省略
int num = 10;
methodA(num);
System.out.println(num);    // 10が出力されます

void methodA(int num){
 　 num += 10;
 　 System.out.println(num);　// 20が出力されます
}
```

##参照型
呼び出し元でメソッドの引数に参照型を使用した場合、メソッドではその値への~~参照を受け取ります~~ **参照のコピーを受け取ります** 。
~~これを 参照渡しといいます。~~

参照している先をたどると、同じ場所を参照しているため、メソッド内で値へ変更を加えると呼び出し元にも影響を与えます。

```java
// class宣言等は省略
int[] num = {10,20};
methodB(num);
System.out.println(num[0]);    // 20が出力されます

void methodB(int[] num){
  　num[0] += 10;
 　 System.out.println(num[0]);　// 20が出力されます
}
```

**追記**
C++、C#、PHP等では「参照渡し」という呼ばれる挙動があり、Javaで言われている「参照渡し」とは挙動が異なります。
Javaで言われている「参照渡し」は「参照の値渡し」と呼ぶ方もいるようです。とはいえ、この挙動をどう呼ぶかは様々なところで議論されており・・・　統一した呼び方がないのが現状です。
(そもそもJavaではすべて値渡しなので、参照という言葉が出ることがおかしいという意見もあります)。

この記事では「参照の値渡し」と表現させていただきました。
**ここまで追記**



##では以下は？
以下のコードではどうなるでしょう？

```java
// class宣言等は省略
String text = "A";
methodC(text);
System.out.println(text);     // ②

void methodC(String text){
  　text = "B";
  　System.out.println(text);   // ①
}
```

正解は　①B　②A　　です。
String型は参照型なので、これまでの話の通り行くと②でもBが出力されそうです。
しかし、String型のインスタンスはimmutableであるため、値の書き換えを行うことができません。
そのため、メソッド内で値の変更をしても呼び出し元に影響がないのです。

String型についてはまた別記事にしようと思います。



**2014年6月8日追記**
~~参照渡し~~参照の値渡しについて別途まとめました。
[【Java初心者】参照渡しのまとめ](http://qiita.com/chihiro/items/06460671a45b2b2582f1)
PHPフレームワークphalconのディベロッパーツールを使ってみる


昨日に続いて、今日は開発者ツールを使ってみます。
昨日の内容は以下のリンクとなります。
[PHPフレームワークのphalconをeclipseで使ってみる](http://qiita.com/yuji0602/items/145fb8d609057c06fb70 "PHPフレームワークのphalconをeclipseで使ってみる")

## 作業場所

vagrantにて作業を行います。
phalconのサイトで提示されているvagrantを利用するといいと思います。
http://phalconphp.com/ja/download/vagrant


## コマンドラインで利用するPHPにphalconを使えるようにする

vagrantを作成した段階ではブラウザではphalconが利用できるのですが、コマンドラインだと利用できない状態です。
/etc/php5/cli/php.iniにphalcon.soを追加します。

```
extension=phalcon.so
```

## ディベロッパーツールを使う

[昨日書いたディベロッパーツール](http://qiita.com/yuji0602/items/145fb8d609057c06fb70#2-3 "デベロッパーツール")の作業を終えた段階で、以下を実行します。

```
vagrant@precise32:/vagrant$ phalcon commands

Phalcon DevTools (1.2.5)

Available commands:
  commands (alias of: list, enumerate)
  controller (alias of: create-controller)
  model (alias of: create-model)
  all-models (alias of: create-all-models)
  project (alias of: create-project)
  scaffold
  migration
  webtools
```

phalconのコマンドラインが使えるようになっていればOKです。


### プロジェクトスケルトンの生成

phalcon project [name]でプロジェクトを作成できます。

```
vagrant@precise32:/vagrant$ phalcon project test

Phalcon DevTools (1.2.5)


  Success: Controller "index" was successfully created.


  Success: Project 'test' was successfully created.
```


ディレクトリはこんな感じのものができています。

```
vagrant@precise32:/vagrant/test$ tree
.
|-- app
|   |-- cache
|   |-- config
|   |   |-- config.php
|   |   |-- loader.php
|   |   `-- services.php
|   |-- controllers
|   |   |-- ControllerBase.php
|   |   `-- IndexController.php
|   |-- models
|   `-- views
|       |-- index
|       |   `-- index.volt
|       |-- index.volt
|       `-- layouts
|-- index.html
`-- public
    |-- css
    |-- files
    |-- img
    |-- index.php
    |-- js
    `-- temp
```

app/cacheに書き込み権限が無いとエラーになることがあるので注意しましょう。

```
cd app
chmod -R 777 cache
```

ブラウザにアクセスし、Congratulations!が表示されれば成功です。
私の環境では以下のURLにて表示されます。
http://192.168.100.20/test


## webtoolを利用する

webtoolがあるようなので、適用してみます。
web上でControllerやModelの作成、Scaffoldの作成などが出来るようです。

```
vagrant@precise32:/vagrant/test$ phalcon webtools enable

Phalcon DevTools (1.2.5)


  Success: Webtools successfully enabled!
```

以下のURLにアクセスすると、Phalcon Web Toolsが表示されると思います。
http://192.168.100.20/test/webtools.php



とりあえず、今日はこの辺で失礼します。
Groovyのちょっとしたこと「try{return func1()}finally{return func2()}の挙動」

どうも、えいやです。

tryとfinallyで、両方リターンすると両方評価されて、返り値はfinallyの方です。

```groovy:tryFinallyBothReturn.groovy
def func = {
  try{
    return {print('a');0}()
  }finally{
    return {print('b');1}()
  }
}
println func() // ab1
```

Javaでも挙動は同じなはずです。

まぁ、そもそもこんなコード書いちゃダメだけどね。
ぼくがかんがえたさいきょうのマウスオーバー

**Compass 使用**

```scss
$mouseover:.15s;

a {
	& ,
	&:before ,
	&:after {
		@include transition(background-color $mouseover linear,background-image $mouseover linear);
	}

	> * {
		@include transition(opacity $mouseover linear);
	}

	img {
		background:#fff;
	}

	&:hover {
		text-decoration:underline;

		> * {
			@include opacity(0);
			text-decoration:none;
		}
	}
}
```

`a{リンクテキスト}` の場合、`a:hover`にマウスオーバー画像・色指定。

`a:before` / `a:after` の場合、`a:hover:before` / `a:hover:before` にマウスオーバー画像指定。

 `* > a > img` の場合、`*` / `a` にマウスオーバー画像・色指定。

いい感じにマウスオーバーしてくれるはず。
SwiftでUIWebViewを使ってみる


## 追記 2016/02/15

swiftのソースを一部修正しました。(swift2.1対応版)

# はじめに

Swiftが発表されたので、簡単なWebviewアプリでも作ってみようと思いましたが、
Xcode6の補完が全く効かず、URLを読み込んだ所で心が折れました。

# Swiftでの記述

プロパティを作って、初期化してURLを読み込む。
webviewの宣言を`var webview: UIWebView?`でやると
webviewのプロパティにアクセスする度に`!`をつけろと怒られるので、
宣言したタイミングで初期化すれば怒られなくなりました。

ただ、このタイミングだとviewが作られていないので`init(frame: CGRect)`で`self.view.bounds`とか入れると落ちます。
なのでframeだけ後から指定してみました。


```swift:
class ViewController: UIViewController ,UIWebViewDelegate{

	//MARK: - Properties
    private var webview: UIWebView!

	//MARK: - View Lifecycle
    override func viewDidLoad() {
        super.viewDidLoad()

        webview = UIWebView(frame : self.view.bounds)
        webview.delegate = self;
        self.view.addSubview(webview)

        // NSURLのinitializer(public convenience init?(string URLString: String))は返り値がoptional型なので扱いに注意
        let url = NSURL(string : "http://google.com")
        let urlRequest = NSURLRequest(URL: url!)
        self.webview.loadRequest(urlRequest)
    }

	//MARK: - UIWebViewDelegate
    func webView(webView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool {
        return true
    }

}
```

# Objective-Cでの記述

```objectivec:
@interface WebViewController ()<UIWebViewDelegate>

@property (nonatomic) UIWebView *webview;

@end

@implementation WebViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    self.webview = [[UIWebView alloc] initWithFrame:self.view.bounds];
    self.webview.delegate = self;
    [self.view addSubview:self.webview];

    NSURL *url = [NSURL URLWithString:@"http://google.com"];
    NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:url];
    [self.webview loadRequest:urlRequest];
}

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    return YES;
}
```

#終わりに

全然たいした事していないのに結構ハマってしまった。(`!`とか`?`とか)
プロパティはnilを許容すると毎回`!`とか`?`とか付けないといけないので、宣言のタイミングで初期化してしまった方が良いような気がしますが、どうなんでしょうか。

基本的にUIKIt周りのアクセス方法はObjective-Cとたいして変わらないのでそんなに困る事は無いかもしれませんが、現状ではコード補完が効かないので不安になります。
Xcode6のSwiftコード補完が使えるようになったら掘り下げてみよう。
2 つの変量の関係を調べる (1)

# 相関係数を調べる

データの分析においてまず基本となるのは興味あるデータを収集することです。統計学の関心はあくまでも全体の状況や傾向であり、それを知る基本は分布のモデルと統計量 (平均や分散) です。

相関係数を調べることは基本中の基本です。以前も[線形回帰](http://qiita.com/ynakayama/items/d6e8513791b43f18d28b)や[相関係数](http://qiita.com/ynakayama/items/f5f42b5d46b97009638b)の話はさんざんしましたが、ここでさらに紐解いて詳細を探っていきましょう。

## データを集めて図にする

あるスポーツをするにあたり、高校生のボール投げと握力の値を調べてみました。

|生徒|握力|球投げ|
|:--|:--|:--|
|A|26|16|
|B|26|11|
|C|26|14|
|D|27|16|
|E|28|18|
|F|29|16|
|G|32|18|
|H|29|21|
|I|24|14|
|J|26|19|

何度も繰り返すようですが、統計とはまずデータ収集にはじまります。今回の例では生徒個人個人のスポーツの成績を記録し表にしてみました。しかし表だけでは関係がよくわかりません。そこで図にしてみます。二つの変量 x と y のあいだにどのような関係があるか、これは散布図を描くことによっておおまかな傾向をつかむことができます。

ではさっそく[今までに学んだ知識](http://qiita.com/ynakayama/items/2ec380ab1176e4569ebe)を生かして散布図を描いてみましょう。

```py3
import numpy as np
import matplotlib.pyplot as plt
X = np.array( [26, 26, 26, 27, 28, 29, 32, 29, 24, 26] )
Y = np.array( [16, 11, 14, 16, 18, 16, 18, 21, 14, 19] )
plt.plot(X, Y, 'o', color="blue")
plt.show()
plt.savefig("image.png")
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/38501/5085799c-268a-5a8e-e340-f5f6cb8f8943.png)

なんとなく正の相関がありそうです。

## 相関係数を求める

これも散々今まで説明してきましたが、次に知りたいのは 2 つの変量 x,y の関係の強弱を数値化して調べることです。これが相関係数です。

相関係数の具体的な計算としては、次の共分散を求める公式を利用します。

```math
Cov(x,y) = \frac 1 N \sum_{k=1}^N X_kY_k - \overline{x} \overline{y}
```

思い出しましたか。相関係数は次のように求まります。

```math
r(x,y) = \frac {Cov(x,y)} {\sigma(x)\sigma(y)}
```

したがって

```math
r(x,y) = \frac {10 * 4481 - 273 * 163} {\sqrt{(10*7499-273^2)(10*2731-163^2)}} = 0.53
```

となります。

果たしてこの手計算は正しいでしょうか。これもコードを書いて実際に試してみましょう。

```py3
corr = np.corrcoef(X, Y)[0,1]
print("X と Y の相関係数は %(corr)s" %locals() )
#=> X と Y の相関係数は 0.532109266822
```

さすが [NumPy](http://www.numpy.org/) です。たった 1 行のコードで答えが求まりました。

## まとめ

統計の基本ともいえる 2 つの変量の関係についてもう一度復習をはじめました。今回は手始めに散布図と相関係数を求めました。
アヒルコード with Swift

Swiftでアヒルコードはじめました。 :smiley:
元ネタからアヒルの数を増やしながらSwiftの名前空間を漂ってみました。 
アヒルちゃんの数を増やす競争が楽しめそうですね。 :+1:

#アヒルコード
```duckTyping.swift
import Foundation

typealias 🐣🐣 = String
func 🐣🐣🐣(🐣🐣🐣🐣:🐣🐣) -> 🐣🐣 {
    var 🐣🐣🐣:🐣🐣 = 🐣🐣🐣🐣
    for 🐣 in 🐣🐣🐣🐣 {🐣🐣🐣 = 🐣🐣🐣 + 🐣}
    return 🐣🐣🐣
}
let 🐣🐣🐣🐣:🐣🐣 = 🐣🐣🐣(🐣🐣🐣("🐣🐣🐣"))
println(🐣🐣🐣(🐣🐣🐣🐣))
```

#実行結果
```
🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣
Program ended with exit code: 0
```

#ref.

* [https://twitter.com/calebd/status/473875599228813314](https://twitter.com/calebd/status/473875599228813314)
* [Swift Programming Language - Apple Developer](https://developer.apple.com/swift/)
Dokku プラグイン フックポイント

Dokku、プラグインを作ると、それぞれの名前の実行可能ファイルを作れば、Dokkuでのビルドやデプロイなど様々なタイミングでフックを実行してくれる。

* https://github.com/progrium/dokku/blob/master/dokku

このファイルを探せば、それっぽいポイントがいくつかあることがわかる。

```
    pluginhook pre-build $APP
    pluginhook post-build $APP
    pluginhook pre-release $APP
    pluginhook post-release $APP
    pluginhook pre-deploy $APP
    pluginhook post-deploy $APP $port
```

この辺をよく使いそう。
【メモ】高さをcssで%指定し、可変に。

###高さを%で指定し、可変にする

> 例
> height:calc(80%);


説明下手なので、サンプルで。。
コピペして確認してください。すみません。
↓↓↓↓↓

```ruby:html
<html>
<body style="text-align:center;">
<div style="height:100%">
<div style="height:60px;">
header<span style="color:#ccc;">(60px)</span>
</div>
<div style="border:1px solid blue;height:calc((100% - 120px) / 2)">
BOX 1 <span style="color:#ccc;">(100% - 120px) / 2</span>
</div>
<div style="border:1px solid red;height:calc((100% - 120px) / 2)">
BOX 2 <span style="color:#ccc;">(100% - 120px) / 2</span>
</div>
<div style="height:60px;">
footer<span style="color:#ccc;">(60px)</span>
</div>
</div>
</body>
</html>
```

#訂正
```
<!doctype html>
<html>
<head>
<style>
  html, body { width: 100%; height: 100%; margin: 0; padding: 0; }
  * { box-sizing: border-box; }
</style>
</head>
<body style="text-align:center;">
<div style="height:100%">
  <div style="height:60px;">
    header<span style="color:#ccc;">(60px)</span>
  </div>
  <div style="border:1px solid blue;height:calc((100% - 120px) / 2)">
   BOX 1 <span style="color:#ccc;">(100% - 120px) / 2</span>
  </div>
  <div style="border:1px solid red;height:calc((100% - 120px) / 2)">
   BOX 2 <span style="color:#ccc;">(100% - 120px) / 2</span>
  </div>
  <div style="height:60px;">
   footer<span style="color:#ccc;">(60px)</span>
  </div>
</div>
</body>
</html>
```
コメントにてご指摘をいただきました。
訂正させていただきます。
@irxground さん、本当にありがとうございます！（2014/6/5）
CasperJSでWEBサイトの画面キャプチャを取得してみた


[ブログ](http://staffblog.yumemi.jp)にも書きましたが、こちらにも。

---

CasperJSは、JavaScriptで動かせるローカルの仮想ブラウザです（内部的にはWebKitを使ってるらしい）。WEBサイトのスクレイピングや、ブラウザ上のテストを自動化することができます。

- 公式サイト：http://casperjs.org/
- GitHub：https://github.com/n1k0/casperjs

また画面キャプチャもとれるようなので、今回はGoogleのトップページ画面をキャプチャするところまで試してみます。

# 環境構築

- 環境は Mac OS X (Mavericks) とします。
- インストールには npm を使います。

### ①まず事前に[PhamtomJS](http://phantomjs.org/)が必要らしいのでインストール

```shell
# npm install -g phantomjs
```

### ②続いてCasperJSをインストール

```shell
# npm install -g casperjs
```

以上で環境の構築は完了です。試しにヘルプを表示してみます。

```shell
$ casperjs --help

CasperJS version 1.1.0-beta3 at /usr/local/lib/node_modules/casperjs, using phantomjs version 1.9.7
Usage: casperjs [options] script.[js|coffee] [script argument [script argument ...]]
       casperjs [options] test [test path [test path ...]]
       casperjs [options] selftest
       casperjs [options] __selfcommandtest

Options:

--verbose   Prints log messages to the console
--log-level Sets logging level
--help      Prints this help
--version   Prints out CasperJS version
--engine=name Use the given engine. Current supported engine: phantomjs and slimerjs

Read the docs http://docs.casperjs.org/
```

# 利用してみる

公式サイトに載っている例を参考に、まずはGoogoleのトップページからタイトルを取得しています。次のように `sample.js` を用意し、

```javascript:sample.js
var casper = require('casper').create();

casper.start('http://www.google.com', function() {
    this.echo(this.getTitle());
});

casper.run();
```

これを実行してみます。

```shell
$ casperjs sample.js

Google
```

タイトルが取得できました^^ 
次に、Googleのトップページ画面をキャプチャしてみます。次のように `sample2.js` を用意し、

```javascript:sample2.js
var casper = require('casper').create();

casper.start('http://www.google.com', function() {
    this.capture('hoge.png');
});

casper.run();
```

これを実行してみます。

```shell
$ casperjs sample2.js
```

カレントディレクトリに `hoge.png` が作成されたので開いてみます。

![hoge.png](http://staffblog.yumemi.jp/wp-content/uploads/2014/06/hoge.png)

キャプチャできました^^

# おわりに

内部的に WebKit が動いている？ようなので、コマンドの結果が返るまでちょっとかかります。これを使って色々な自動化が出来そうな感触がしたので、今後、有効活用していきたいと思います。
試して面白いプログラミング言語6選

今日は、プログラマなら誰でも試して面白いと思えると私が考えているプログラミング言語6つを紹介したいと思います。

- [元記事](http://www.egison.org/blog/six-langs.html) (英語)
     
## [Haskell](http://www.haskell.org/haskellwiki/Haskell)

Haskellは静的型システムを持つ純粋関数型言語です。
Haskellはプログラミング言語の分野の有名な研究者たちによって設計されています。
Haskellによるプログラミングを通して、Haskellプログラマは、プログラミング言語の理論について多く学ぶことができます。
Haskellには優秀なユーザがとても多くいます。

Haskellの問題は多くの人にとって使い始めるのが難しいことです。
Haskellを使いこなすには、プログラミング言語の理論の抽象的な概念を多く理解する必要があります。

しかし、その表現力はとても強力です。
今までにない全く新しいコンセプトのソフトウェアを実装する際の実装言語として、Haskellは最も最適なプログラミング言語だと私は考えています。

## [Coq](http://coq.inria.fr/)

Coqは証明支援システムです。
Coqはコンピュータ上で証明を記述するための言語とその証明を形式的に検査するためのツールを提供しています。
この分野はこの先とても重要な技術になると私は考えています。

Coqの問題点と私が考えているのは、Coqで記述された証明は全く直感的でないところです。
中学校で習うような初等的な数学の命題や証明さえ直感的には記述できません。
もっと直感的な証明を記述できる言語を作りたいというのが私の将来の目標の1つです。

## [Erlang](http://www.erlang.org/)

Erlangは分散システムを実装する際にとても便利なプログラミング言語です。
実は私の職場での業務の1つに分散オブジェクトストレージ[LeoFS](http://leo-project.net/leofs/)の開発のサポートというのがあり、
平日Erlangを書いていることがあります。
Erlangはスケーラビリティが高く、ダウンしにくいソフトウェアを実装するのに便利なライブラリがあります。

最近、Erlangの技術は注目を浴びていて、Erlangの特徴を含む新たな言語が現れてきています。
Ruby風のシンタクスをもつ[Elixer](http://elixir-lang.org/)やLisp風のシンタクスをもつ[Lisp Flavored Erlang](http://lfe.io/)などが注目を浴びています。

## [Elm](http://elm-lang.org/)

Elmはfunctinal reactiveという珍しい概念を持つプログラミング言語です。
以下のリンクを訪ねると、Elmの面白さがすぐにわかると思います。

- [Elm Editor: Mario](http://elm-lang.org/edit/examples/Intermediate/Mario.elm)

マリオを高くジャンプできるようにしたり、多段ジャンプできるようにしたり、もっと速く動くように遊んでみました。
とても面白いです。
公式サイトに他にも面白いサンプルがいくつもあります。

## [Viscuit](http://www.viscuit.com/)

Viscuitはヴィジュアルプログラミング言語です。
Viscuitの面白いところは、ヴィジュアルプログラミング言語ならではの完全に普通のプログラミング言語とは違うメカニズムで動作するところです。
Viscuitプログラマは、メガネと呼ばれる左右の穴それぞれに絵を描くことによってのみプログラミングを行います。
左の絵が、右の穴に描かれた絵に次の瞬間にボード上で変換されるという単純な仕組みで動作します。

以下のリンクのビデオを見るとすぐにそのコンセプトを理解できます。

- [しゃくとり虫の作り方](https://www.youtube.com/watch?v=tuCBy6JrMdo)
- [感染のシミュレーション](https://www.youtube.com/watch?v=e09S2S_SAOE)

## [Egison](http://www.egison.org)

Egisonは私が作っているプログラミング言語です。
[元記事(英語)](http://www.egison.org/blog/six-langs.html)もこの記事もこのEgisonの宣伝のためにもともと書きました。
([先週の記事](http://qiita.com/egisatoshi/items/38f7f8aef32ac67ccd4b)で紹介したRubyのGemもEgisonの宣伝のために一生懸命実装しました)

Egisonは強力なパターンマッチの表現力をもつプログラミング言語です。
ぜひ以下のデモンストレーションを見てみてください。

- [ポーカーの役判定](http://www.egison.org/demonstrations/poker-hands.html)
- [無限数列に対するパターンマッチ](http://www.egison.org/demonstrations/sequence.html)
- [木構造に対するパターンマッチ](http://www.egison.org/demonstrations/tree.html)

Egisonは海外のニュースサイトで["注目を浴びつつある10のプログラミング言語"](http://www.infoworld.com/slideshow/146094/not-the-usual-suspects-10-plucky-programming-languages-the-rise-240677)として最近取り上げられたこともあります。

- [GitHub上のEgisonのレポジトリ](https://github.com/egison/egison)
【メモ】テキストをcssで行数指定する

### テキストをcssで行数指定

> position: relative;
> word-wrap: break-word;
> overflow: hidden;
> text-overflow: ellipsis;
> display: -webkit-box;
> -webkit-line-clamp: 7; ←行数
> -webkit-box-orient: vertical;



© arifuku_san
ノウハウ募集：検索クエリを動的SQL組み立てしたくない

動的にSQLを組み立てない、というのはRDBを扱う上で鉄則と言えましょう。

* SQLインジェクションを防ぐため
* コンパイルのオーバーヘッドを避けるため

などとは言いますが、何よりもプログラムをランタイムに動的生成するということ自体に本能的な嫌悪感を感じます。たとえ組み立てをしてくれるのがフレームワークであっても。

さて、とはいえ動的SQL組み立てがどうしても避けられないシーンが、意外に日常的なタスクで出てきます。
それは、 **複数の検索項目をもつ検索フォーム** です。

項目になにかユーザー入力があればそれは絞込対象なのでWHERE句にAND条件追加、とせざるを得ません（それをフレームワークに任すとしても）。

あくまでプリペアドステートメントで表現しようと`(:mail_cond IS NULL OR mail like :mail_cond + '%')`なんて書いてみたこともありますが、「あわよくば適切なインデックスをつかってくれ」という望みが完全に絶たれるんですよね。

複数の検索項目をもつ検索フォーム、皆様はどのようにプログラミングなさっているでしょうか。ご意見お聞かせください。
WebStormでNode.jsをつかうメモ 【準備編】

スタティックサイトジェネレーターをあさる過程で (いまさら) Node.jsを使ってみようと思い、インストールからメモ。

# Node.jsの準備
## ダウンロード
http://nodejs.org/
上記にアクセスして [INSTALL] を押すと、msiファイルのダウンロードが開始する。

## インストール
msiファイルを実行する。
規約同意にチェックを入れて [NEXT] を押していくだけ。
これで終わり。面倒な設定は一切なし。

## テスト
コマンドラインプロンプトを起動して、「node」と入力してエンターキーを押す。
するとディレクトリ表示がなくなり「>」だけになる。
試しに「1+2」と入力してエンターキーを押してみると、「3」と返ってくる。
正常にインストール出来ていることを確認できたのでおわり。
終了するときは、「Ctrl+C」を2回押せばいいです。

## エラーが出たら?
nodeコマンドとかnpmコマンドを打ってエラーが出たら、大体がこの辺で詰まってます。

* 環境変数パスが変。
    * C:\nodejs\; になってたら C:\nodejs; にする。
* C:\Users\XXXXXXXXX\.AppData\Roaming\npm フォルダーがない。
    * その場所にフォルダーを作るだけ。
* 一部のモジュール実行でエラーがでる。
    * Program Files配下にNode.jsを入れるとそうなるっぽいので、C:\ 直下にインストールする。

# WebStormの準備
## ダウンロード
http://www.jetbrains.com/webstorm/download/
上記にアクセスして [Get WebStorm 8 Now] を押すとexeファイルのダウンロードが開始する。

## インストール
exeファイルを実行する。
普通のアプリケーションインストールなので特に説明しません。

# Node.js meets WebStorm
実はWebStormはNode.jsをサポートしているので特に使うための設定は必要ない。
メモ以下の紙 (?) くずになってしまったがここまで。

次は実際にNode.jsを使ってなんかしてみる。
python覚え書き

**ソースの文字コードをUTF-8にしたい**

```
# -*- coding:utf8 -*-
```

-*-ってこんな意味があったのか
http://d.hatena.ne.jp/nishiohirokazu/20080425/1209083439

**pythonにはswitch~caseがない**

**pythonにはdo~whileはない**

**pythonのINT_MAXってなに**

```
sys.maxint
```
figaroでrailsで環境ごとの定数管理してherokuに設定するまで


railsで環境ごと（development,staging,production）の定数をどこで持てばいいんだろうと考えて、config/environments/developmentあたりに書いてRails.application.config.HOGEとかでアクセスするとか、どう考えてもみんなやってないだろうなと思って、他にもdotenvとかもあるらしいけど今回は"figaro"というgemを使ってみることに。

bundle installして、

```Gemfile
gem 'figaro'
```

インストール。
以下だとなぜか怒られた

```
rails g figaro install
# > Could not find generator figaro
```

なので、

```
rails generate figaro:install
```

で、config/application.ymlと.gitignoreに/config/application.ymlが追加される。
先輩にならってgit上で管理・共有したい設定は、application.yml.exampleとか作ってそちらはgitのリポジトリで管理。

```application.yml
KEY: '1234567'

development:
  CLIENT_URL: 'http://localhost:8080'

staging:
  CLIENT_URL: 'http://example-stg.com'

production:
  CLIENT_URL: 'http://example.com'
```

こんな感じで設定したものを、

```
Figaro.env.CLIENT_URL
```

こうやって参照できる。
Figaro.env is a convenience that acts as a proxy to ENV.とのことなので以下でいいのか。

```
ENV["CLIENT_URL"]
```



herokuにpushする前に設定を追加する。

```
rake figaro:heroku[appname-stg] RAILS_ENV=staging
rake figaro:heroku[appname] RAILS_ENV=production
```

便利。
main.mに追記が必要なライブラリ(Pixate freestyle)をSwiftで動かす


#はじめに
PixateFreestyleとは、UI部品のデザインにCSSが使えるようになるというものです。


![pixate_blue_typography.png](http://pixate.github.io/pixate-freestyle-ios/themes/assets/pixate_blue_typography.png "pixate_blue_typography.png")

詳細は以下などを参照ください
http://hidekit.hatenablog.com/entry/2014/05/28/195122

問題はこのライブラリはmain.mに以下のような修正が必要だということ

```objective-c:main.m

#import <UIKit/UIKit.h>

#import "AppDelegate.h"

#import <PixateFreestyle/PixateFreestyle.h> //<--追加箇所

int main(int argc, char *argv[]) {
  @autoreleasepool {
    [PixateFreestyle initializePixateFreestyle]; //<--追加箇所
    return UIApplicationMain(argc, argv, nil,
                             NSStringFromClass([AppDelegate class]));
  }
}

```

ところがSwiftではmain.mがありません。
どうするか・・・。

#対応

main.swiftを作成します。

```Swift:main.swift

import Foundation

import UIKit

PixateFreestyle.initializePixateFreestyle() //PixateFreestyle用の追加箇所
UIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(UIApplication), NSStringFromClass(AppDelegate))

```



上記を入れただけだと以下の様なコンパイルエラーが出ます。

```XXXXX/AppDelegate.swift:12:1: 'UIApplicationMain' attribute cannot be used in a module that contains top-level code```

AppDelegate.swiftも修正します。

```Swift:AppDelegate.swift


//@UIApplicationMain <--コメント化
class AppDelegate: UIResponder, UIApplicationDelegate {

```

後はObjective-C Brideging Headerに設定しているヘッダファイルに
```#import "PixateFreestyle.h"```を追加するだけです。

#参考
http://stackoverflow.com/questions/24020000/subclass-uiapplication-with-swift
http://hidekit.hatenablog.com/entry/2014/05/28/195122
http://pixate.github.io/pixate-freestyle-ios/
swiftでtwitterアプリを作ったときにハマったこと

Swiftを使ってTwitterアプリを作ったときにハマったことをメモに残します。
※自分の備忘録と今後開発してみたいという方の参考になると嬉しいです。

Twitter アプリの作成には、[ツイッターアプリを作ろう。誰でもわかるiPhone開発講座](http://www.appbank.net/2012/06/30/iphone-news/434166.php)を参考にしました。

# Twitter.hのインポート
Swiftでは、headerをインクルードする代わりにframeworkをインポートする

```objc
// Objective-Cの場合
#include <Twitter/Twitter.h>
```

```go
// Swiftの場合
import Twitter
```

# ブロックを引数に渡す

```objc
// Objective-Cの場合
[accountStore requestAccessToAccountsWithType:twitterAccountType
              withCompletionHandler:^(BOOL granted, NSError *error)
     {
         if (!granted) {
             NSLog(@"ユーザーがアクセスを拒否しました。");
         }else{
             NSLog(@"ユーザーがアクセスを許可しました。");
         }
     }];
```

```go
// Swiftの場合
// 一度 ACAccountStoreRequestAccessCompletionHandler で handlerを宣言しないとエラーになる
// そのうち調べよう
let handler: ACAccountStoreRequestAccessCompletionHandler =
{granted, error in
    if(!granted) {
        NSLog("ユーザーがアクセスを拒否しました。")
    } else {
        NSLog("ユーザーがアクセスを許可しました。")
    }
}
//
accountStore.requestAccessToAccountsWithType(twitterAccountType, handler)
```

```go
// Swiftの場合(エラーが発生)
// Could not find an overload for 'requestAccessToAccountsWithType' that accepts the supplied arguments が発生する
accountStore.requestAccessToAccountsWithType(twitterAccountType, {(granted:Bool, error:NSError) in
    if(!granted) {
        NSLog("ユーザーがアクセスを拒否しました。")
    } else {
        NSLog("ユーザーがアクセスを許可しました。")
    }
})
```

# Type Cast
```objc
// Objective-Cの場合
ACAccount *account = [twitterAccounts objectAtIndex:0];
```

```go
// Swiftの場合
let account = twitterAccounts[0] as ACAccount
```

# TWRequest で構文エラー
TWRequestのインスタンスを作成するコードを書いた時にエラーが発生して数時間ハマってしまいました。
[Developer Forums](https://devforums.apple.com/message/973767)に質問して原因を教えて頂きました。

```go
// Extra argument in callが発生するパターン
let url = NSURL.URLWithString("http://api.twitter.com/1/statuses/home_timeline.json")
let request = TWRequest(url, nil, TWRequestMethodGET) //ERROR
```
urlという変数名が１つ目の引数と被ってしまったことが問題だったようです。

```go
// Could not find an overload for 'init' that accepts the supplied argumentsが発生するパターン
let url = NSURL.URLWithString("http://api.twitter.com/1/statuses/home_timeline.json")
let request = TWRequest(URL: url, parameters: nil, requestMethod: TWRequestMethodGET) // ERROR
```
３つ目のパラメータにTWRequestMethodGET を指定したのが問題でした。

これらを踏まえて動くようになったコードです。

```go
let url = NSURL.URLWithString("http://api.twitter.com/1/statuses/home_timeline.json")
et request = TWRequest(URL: url, parameters: nil, requestMethod: TWRequestMethod.GET)
```
swiftを触ってみた

swiftをちょこっと触って見ました。NDAには触れないと思います。

試すのに便利な事に、 web から実行できるplayground が用意されていますので、下のURLを開き、
右の「Try Swift online」をクリックします。

http://swift-lang.org/


```
  tracef("こんにちは。これは %s のコードです\n","Swift");
```

そして *execute* を押します。

```
Swift run starting at 08:15:49
08:15:52 ??????????????????????????? Swift ??????????????????
Final status: 08:15:52

```

うーん、残念。日本語は化けてしまうようですね。


* Mapperとforeach

上のリストボックスからforeachを選ぶと、以下の用に出てきます。

```
type file;

app (file o) simulate_app ()
{
  simulate stdout=filename(o);
}

foreach i in [1:10] {
  string fname=strcat("output/sim_", i, ".out");
  file f <single_file_mapper; file=fname>;
  f = simulate_app();
}
```

ここで、
```
  app (file o) simulate_app ()
```
は関数を示します。また、

```
foreach i in [1:10] {
```

は繰り返しを示します。ここで重要なのは、foreachの中は *並列実行* される、
ということです。

また、以下の部分を見てください。

```
  file f <single_file_mapper; file=fname>;
```

swiftの特徴の一つとして *mapper* というのがあります。

これはメモリ上にあるデータセットをファイルとしてマップする、というものです。
上記例では、 single_file_mapper というデフォルトで用意されているmapperを使い、
simulateで生成した乱数を書き出しています。(simulateがまだよく分かってないので違うかもしれません)

実行すると、下のリストボックスに 「output/sim_1.out」 などがでてきますので、それを見るとファイルが吐き出されていることが分かります。

1から10までのファイルに並列に書き出しています。


このように、 swift を使うと、並列実行やメモリとファイルの透過的処理ができますので、シミュレーションなどに便利だと思います。
commons-daemonとAkkaでバッチアプリケーションの作成


[ScalaとApache Commons Daemonで常駐プログラムを作る](http://qiita.com/reoring/items/83b416457727c560d6d6)を参考に、akka-actorを使う場合はどうするかサンプルを作ってみる。

ファイル構成は以下の様なベタ書きを想定。パッケージを分ける場合は適宜`import`を補完してください。

```
Main.scala
ApplicationDaemon.scala
ReaperActor.scala
SampleActor.scala
```

## Main

実行起点。これ自体はすぐに終了。

`Daemon`の方でスレッドの終了を待機しているので、`ActorSystem#awaitTermination`とかは必要ありません。

```scala:Main.scala
object Main extends App {
  new ApplicationDaemon("sample").start
}
```

## ApplicationDaemon

`Daemon`インターフェースの実装を行う。外部から停止指示があった場合、`stop()`が呼ばれたりする。

ちなみに、`Actor`のコンパニオンオブジェクトで`props`を実装するのが好み。引数を定義したりしやすいので。

追記：好みというか、推奨されるパターンですね。http://doc.akka.io/docs/akka/current/scala/actors.html#Recommended_Practices

今回は`start()`, `stop()`のみ処理を記述したが、他のメソッドも利用を検討して欲しい。

```ApplicaitonDaemon.scala
import org.apache.commons.daemon.{Daemon, DaemonContext}

class ApplicationDaemon(appName: String) extends Daemon {

  private[this] val actorSystem = ActorSystem(appName)

  override def init(context: DaemonContext) {}
  override def destroy {}

  override def start {
    val reaper = actorSystem.actorOf(ReaperActor.props, "reaper")

    val sampleActor = actorSystem.actorOf(SampleActor.props, "sample")
    reaper ! ReaperActor.Watch(sampleActor)

    sampleActor ! SampleActor.CountDown(10)
  }

  override def stop {
    if (! actorSystem.isTerminated) {
      // 通常はActorに終了指示を送るなど…
      actorSystem.shutdown
    }
  }
}
```

## ReaperActor

死神。死亡を監視したいクリティカルな`ActorRef`を送信しておいて、どれかが死亡した時に全てのアクターに終了指示を送って`ActorSystem`の終了に向かわせる。

全体的な流れの図や他の終了パターンは [Let it crash • Shutdown Patterns in Akka 2](http://letitcrash.com/post/30165507578/shutdown-patterns-in-akka-2) を参照すると良いです。

```ReaperActor.scala
import akka.actor.{Actor,ActorRef,Props,Terminated,PoisonPill}

class ReaperActor extends Actor {
  private[this] val watchingActors = scala.collection.mutable.ArrayBuffer.empty[ActorRef]

  def receive {
    case ReaperActor.Watch(actor) =>
      context.watch(actor)
      watchingActors += actor
    case Terminated(actor) =>
      watchingActors -= actor
      if (watchingActors.isEmpty) { context.system.shutdown }
      // 通常は終了を知らせるメッセージを自前で定義して利用する
      watchingActors.foreach(_ ! PoisonPill)
  }
}

object ReaperActor {
  def props = Props[ReaperActor]
  case class Watch(actor: ActorRef)
}
```

## SampleActor

サンプルの処理。自分自身の終了だけを管理する。
ここでは1秒おきにカウントダウンしていくアクターを作ってみる。

```SampleActor.scala
import akka.actor.{Actor,ActorRef,Props}

class SampleActor extends Actor {

  import SampleActor._

  def receive {
    case CountDown(0) => 
      context.stop(self)
    case CountDown(n) =>
      println(n)
      Thread.sleep(1000)
      self ! CountDown(n-1)
  }
}

object SampleActor {
  def props = Props[SampleActor]
  case class CountDown(n: Int) { require(n >= 0) }
}
```
Swift: コマンドラインで引数を受け取る方法



```swift:work-with-args.swift
var args = String[]()

for index in 0..C_ARGC {
	args.append(String.fromCString(C_ARGV[Int(index)]))
}

println(args)
```

```console
% swift work-with-args.swift && ./work-with-args foo bar baz
[./work-with-args, foo, bar, baz]
```

コマンドラインからの実行方法は[Swiftをコマンドラインから実行 - Qiita](http://qiita.com/smurakami/items/a11643cf2cb93df27720)を参考にしました。
イベントハンドラに匿名デリゲートメソッドを割り当てる


Tween終了のイベントに割り当てる場合

```CSharp:test.cs
			UITweener tweener = m_firstLogo.GetComponent<UITweener>();
			EventDelegate.Add(tweener.onFinished, delegate() {
				Debug.Log("Finished!");
			});
			tweener.Play(true);
```
竹内関数を使って分散並列言語Swiftのオーバーヘッドを見てみる

[竹内関数](http://ja.wikipedia.org/wiki/%E7%AB%B9%E5%86%85%E9%96%A2%E6%95%B0)は関数呼出のオーバーヘッドのベンチマークやメモ化の例題としてよく挙げられます。

では分散処理言語で竹内関数を実装してみましょう。

分散処理言語では、多数の計算資源へ多数のタスクを良い感じに割り当てて分散処理する、といった事にフォーカスしてデザインされています。「良い感じ」というのには、対象となる処理の特性やネットワークの特性などによって様々なゴールがあるので、まあ色々です。

で、ちょうど、良い感じの分散処理スクリプト言語の[Swift](http://swift-lang.org/)が見つかったのでこれでやってみます。

Swiftではプロシージャ単位で良い感じに分散処理されます。竹内関数をプロシージャとして実装すると、全然良くない感じになるので、分散処理のオーバーヘッドがベンチマークができるはずです。

では実装してみます。プロシージャ名を`t`として実装します。Swiftでは名前付の多値引数と多値返値が扱えます。返値は`return`文で返すのではなく返値の変数に代入します。変数への代入は1度しかできない点にも注意です。（よくある事です。）

```tarai.swift
(int result) t (int x, int y, int z) {
	if(x <= y) {
		result = y;
	} else {
		result = t(
			t(x-1, y, z),
			t(y-1, z, x),
			t(z-1, x, y)
		);
	}
}
trace(t(8, 4, 0));
```

そして実行します。

```shell-session
time ./bin/swift tarai.swift
Swift 0.94.1 swift-r7114 cog-r3803

RunID: 20140604-1607-h5vkatrb
Progress:  time: Wed, 04 Jun 2014 16:07:21 +0900
SwiftScript trace: 8
Final status: Wed, 04 Jun 2014 16:07:28 +0900

real	0m11.067s
user	0m18.387s
sys	0m1.284s
```
　　　＿人人人人＿
　　　＞　11秒　＜
　　　￣Y^Y^Y￣

おそらく12605回のタスク割当とプロシージャ呼出と沢山のメッセージ交換が起こったのでしょう。おつかれさまです。

ちなみにRubyでも実行してみます。

```tarai.rb
def t(x,y,z)
  if x <= y
    y
  else
    t(t(x-1, y, z), t(y-1, z, x), t(z-1, x, y))
  end
end
puts t(8, 4, 0)
```

えい。

```
$ time ruby tarai.rb 
8

real	0m0.037s
user	0m0.029s
sys	0m0.007s
```

0.037秒でした。

ということで、この手のたぐいのプログラミング言語では、無意識に再帰呼出をすると悲しみの海が広がるので注意しましょう。
jQuery 1.1.4 以降のextendの挙動を調べたYO

jQueryのextendのオプションの挙動がよくわからなかったのでまとめました。

http://api.jquery.com/jquery.extend/

まずは４種類のオブジェクトを用意します。

```
var deepObject1 = {
  x: 200,
  y: 1000
}

var deepObject2 = {
  a: 777,
  b: 999
}

var target =  { 
  a: 1,
  b: 2,
  y: deepObject1
}

var object1 = {
  a: 'object1',
  x: 100, 
  y: deepObject2
}
```

これらのオブジェクトに対してextendを色々していきます。
## deepオプションfalseの場合
```js
var hoge = $.extend(false,target,object1);

object1.a = 0000000;

console.log(hoge);
console.log(target);
console.log(object1);
```
### 結果は
```
[object Object] {
  a: "object1",
  b: 2,
  x: 100,
  y: [object Object] {
    a: 777,
    b: 999
  }
}
[object Object] {
  a: 1,
  b: 2,
  y: [object Object] {
    x: 200,
    y: 1000
  }
}
[object Object] {
  a: 0,
  x: 100,
  y: [object Object] {
    a: 777,
    b: 999
  }
}
```
hogeに２つのオブジェクトが結合されたものができています。
hogeオブジェクトのyフィールドにはdeepObject2が入っています。最後の引数が優先されました。
もともとのオブジェクトは変化していません。
また、あとからいじったobject1への変更はhogeには反映されていません。

## deepオプションtrueの場合
```js
var hoge = $.extend(true,target,object1);

object1.a = 0000000;

console.log(hoge);
console.log(target);
console.log(object1);
```
### 結果は
```
[object Object] {
  a: "object1",
  b: 2,
  x: 100,
  y: [object Object] {
    a: 777,
    b: 999,
    x: 200,
    y: 1000
  }
}
[object Object] {
  a: "object1",
  b: 2,
  x: 100,
  y: [object Object] {
    a: 777,
    b: 999,
    x: 200,
    y: 1000
  }
}
[object Object] {
  a: 0,
  x: 100,
  y: [object Object] {
    a: 777,
    b: 999
  }
}
```
hogeとtargetが同じになっているのがわかります。
deep=trueにするとtarget自体が拡張されるということのようです。
またこちらもあとから変更したobject1の状態は他のオブジェクトに反映されていません。
つまりいわゆるディープコピー・シャローコピーのディープコピーのことではないようです。

ただし、hogeとtargetどちらのyフィールドもdeepObject1がdeepObject2で拡張されているのがわかります。
どうやら再帰的に拡張してくれるようです。

## deepオプション無しのextend
```js
var hoge = $.extend(target,object1);

object1.a = 0000000;

console.log(hoge);
console.log(target);
console.log(object1);
```
### 結果は
```
[object Object] {
  a: "object1",
  b: 2,
  x: 100,
  y: [object Object] {
    a: 777,
    b: 999
  }
}
[object Object] {
  a: "object1",
  b: 2,
  x: 100,
  y: [object Object] {
    a: 777,
    b: 999
  }
}
[object Object] {
  a: 0,
  x: 100,
  y: [object Object] {
    a: 777,
    b: 999
  }
}
```
こちらはhogeとtargetは同じになっていますが、yフィールドは再帰的には拡張されていません。
もちろんあとから変更したobject1の状態は他のオブジェクトに反映されていません。

## まとめると
| extend | target自身の拡張 | 再帰的な拡張 |
|:-----------|:------------:|:------------:|
| deepオプションfalseの場合| されない | しない |
| deepオプションtrueの場合|  される | する |
| deepオプション無しのextend| される | しない |

以上
pythonで現在の環境にインストールされているパッケージの一覧取得

# インストールされているパッケージの一覧取得

pythonで現在の環境でインストールされているパッケージの一覧が欲しい場合がある。
そのような場合にどうすれば良いかのまとめ。

## コマンドライン

単に情報を知りたい場合には、コンソールで以下の様にすればすれば良い。

```bash
pip freeze
# .. output messages of command (example)
Jinja2==2.7.2
MarkupSafe==0.23
Pygments==1.6
Sphinx==1.2.2
docutils==0.11
```

## プログラミング

何らかのコード上で例えばListとして出力したい場合。
pipのコードを読めば分かる。(参考になるのはpip/commands/freeze.py)

```py3
from pip.util import get_installed_distributions

skips = ['setuptools', 'pip', 'distribute', 'python', 'wsgiref']
for dist in get_installed_distributions(local_only=True, skip=skips):
    print(dist.project_name, dist.version)

""" output of script
docutils 0.11
Jinja2 2.7.2
MarkupSafe 0.23
Pygments 1.6
Sphinx 1.2.2
"""
```

## pipにも依存したくない場合

pip/util.pyのなかを見てみる。

```python
def get_installed_distributions(local_only=True,
                                skip=stdlib_pkgs,
                                include_editables=True,
                                editables_only=False):
    """
    Return a list of installed Distribution objects.

    If ``local_only`` is True (default), only return installations
    local to the current virtualenv, if in a virtualenv.

    ``skip`` argument is an iterable of lower-case project names to
    ignore; defaults to stdlib_pkgs

    If ``editables`` is False, don't report editables.

    If ``editables_only`` is True , only report editables.

    """
    if local_only:
        local_test = dist_is_local
    else:
        local_test = lambda d: True

    if include_editables:
        editable_test = lambda d: True
    else:
        editable_test = lambda d: not dist_is_editable(d)

    if editables_only:
        editables_only_test = lambda d: dist_is_editable(d)
    else:
        editables_only_test = lambda d: True

    return [d for d in pkg_resources.working_set
            if local_test(d)
            and d.key not in skip
            and editable_test(d)
            and editables_only_test(d)
            ]
```

結局、pkg_resources.working_setの中のオブジェクトを条件によって絞り込んでいるだけ。
なので、特に細かな絞り込みが必要ない場合にはpkg_resources.working_setを見れば良い。

```py3
import pkg_resources
for dist in pkg_resources.working_set:
    print(dist.project_name, dist.version)

#  output of script
"""
docutils 0.11
Jinja2 2.7.2
MarkupSafe 0.23
pip 1.4.1
Pygments 1.6
setuptools 0.9.8
Sphinx 1.2.2
"""
```
VagrantのDocker ProviderでhostVMをCoreOSにする

Vagrant 1.6からサポートされたDocker Provider。
Dockerホストを務めるhostVMとDockerコンテナ両方をVagrantが一括して取り扱います。

デフォルトではhostVMはboot2docker 0.4.0で起動しますが、CoreOSが提供している`coreos-vagrant`にリプレースして起動まで成功したので備忘録を。

ひとまずDockerコンテナのVagrantfileを置くディレクトリを作ります。

```bash:$
mkdir vagrant-docker-coreos
cd vagrant-docker-coreos
git init .
```

Vagrantfileを作成します。

```rb:vagrant-docker-coreos/Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.provider "docker" do |d|
    d.vagrant_vagrantfile = "coreos-vagrant/Vagrantfile"
    d.vagrant_machine = "core-01"
    d.image = "centos"
  end
  [80, 8080, 443, 3306].each do |port|
    config.vm.network :forwarded_port, guest: port, host: port
  end
end
```
`d.vagrant_vagrantfile`に別個Vagrantfileを設定することでhostVMを指定できます。
ここに記述するポートフォワーディングはguest: dockerコンテナ → host: hostVM の設定になります。お好みで。

上述した`coreos-vagrant`を取り寄せます。

```bash:vagrant-docker-coreos$
git clone --recursive https://github.com/coreos/coreos-vagrant/
cd coreos-vagrant
```

ここで立ち上げるCoreOSをboot2dockerのようにホストOSから使うために、`user_data`と`config.rb`をコピーして`tcp://127.0.0.1:4243`にdockerソケットが通るようにします。

```bash:vagrant-docker-coreos/coreos-vagrant$
cp user_data.sample user_data
cp config.rb.sample config.rb
```

```rb:config.rb
--snip--
# You can then use the docker tool locally by setting the folloing env var:
#   export DOCKER_HOST='tcp://127.0.0.1:4243'
$expose_docker_tcp=4243

# Setting for VirtualBox VMs
--snip--
```
~~Docker Providerの現行の仕様では、hostVMのnameは`default`しか見ていない様子でした。
`coreos-vagrant/Vagrantfile`に修正を加えます。~~

> 2014/06/09 追伸
Docker側Vagrantfileに`d.vagrant_machine = "core-01"`を追記すれば良かった話でした。

```rb:vagrant-docker-coreos/coreos-vagrant/Vagrantfile
--snip--
  (1..$num_instances).each do |i|
    # config.vm.define vm_name = "core-%02d" % i do |config|
    config.vm.define vm_name = "default" do |config|
      config.vm.hostname = vm_name

      (49000..49169).each do |port|
        config.vm.network :forwarded_port, guest: port, host: port
      end
      [80, 8080, 443, 3306].each do |port|
          config.vm.network :forwarded_port, guest: port, host: port
      end

      if $enable_serial_logging
--snip--
```
`$num_instances`が2以上の場合はコンフリクトしないようによしなにお願いします。


```bash:vagrant-docker-coreos/coreos-vagrant$
cd ..
vagrant up --provider docker
```

これで起動するハズ。
`docker ps`とハッシュは共有しませんが、`vagrant global-status`で全体像を一覧できます。


参考：
[Vagrant1.6のDocker provider | SOTA](http://deeeet.com/writing/2014/05/08/vagrant-docker-provider/)
[タイトルとか決めてないけどこのままでもいいかもしんない: Vagrant1.6のDockerの機能使ってコンテナにSSH接続してWebサーバー立ててみたよ](http://toshihirock.blogspot.jp/2014/05/vagrant16dockersshweb.html)
[Vagrant 1.6 が出たので Docker Provider を試してみた – I'm Sei.](http://im-sei.tumblr.com/post/85022085933/vagrant-1-6-docker-provider)
[Vagrant 1.6 Feature Preview: Docker-Based Development Environments - Vagrant](https://www.vagrantup.com/blog/feature-preview-vagrant-1-6-docker-dev-environments.html)
Vagrant + PHPStorm で開発環境を構築


前回、Vagrant で仮想環境を構築しました。

[Mac 上で Vagrant を使って CentOS + Apache をセットアップ](Mac 上で Vagrant を使って CentOS + Apache をセットアップ)

そこで、今回は PHPStorm の統合開発環境(IDE)を使って、プロジェクトの生成、GitHub への登録までを簡単に整理します。

----

# 事前準備
* Vagrant で仮想環境構築
* GitHub でアカウント作成

こちらは事前に実施しておいてください。

----

# PHPStorm とは
JetBrains 社が開発している PHP 用 IDEです。
[http://www.jetbrains.com/phpstorm/](http://www.jetbrains.com/phpstorm/)

# PHPStorm のインストール

国内の代理店はサムライズ社となります。下記よりライセンスを購入します。1ヶ月の無料試用も可能です。

[http://samuraism.com/products/jetbrains/phpstorm](http://samuraism.com/products/jetbrains/phpstorm)

IDE は Eclipse などでもいいと思うのですが、ライセンスを購入してでも PHP 専用の IDE を使ってみたかったので、こちらを選択しました。完全に自己満足の世界です。

* ライセンス購入
* ダウンロード
* インストール
* ライセンスキー登録

上記フローで問題なくインストールできると思います。

また、PHPStorm 全体の使い方については、いろいろありますのでそちらを参考にしてください。

[PHPStorm検索結果](http://qiita.com/search?utf8=%E2%9C%93&sort=&q=PHPStorm)

# プロジェクトの作成
まずはプロジェクトの新規作成です。普通に「Create New Project」にてプロジェクトを作成します。

* Location で Vagrant で作成したディレクトリを選択

問題なくプロジェクトが作成できると思います。

![スクリーンショット 2014-06-04 12.52.49.png](https://qiita-image-store.s3.amazonaws.com/0/39380/92419038-dd2d-6250-dd93-dd4bf244918a.png "スクリーンショット 2014-06-04 12.52.49.png")

プロジェクト作成後のイメージは次の通りです。
![スクリーンショット 2014-06-04 13.00.16.png](https://qiita-image-store.s3.amazonaws.com/0/39380/08602532-57a5-9f15-6864-50c166d01cac.png "スクリーンショット 2014-06-04 13.00.16.png")

プロジェクト配下に次のファイルがあることがわかります。

* httpd.conf
* index.html
* Vargrantfile

# Github への登録
次にこのファイルを GitHub でリポジトリを管理するように設定します。

* [VCS]-[Import into Version Control]-[Share Project on GitHub]を選択
* GitHub アカウント情報登録

![スクリーンショット 2014-06-04 12.53.40.png](https://qiita-image-store.s3.amazonaws.com/0/39380/8d1db698-02b5-4729-0640-80849f99b3b7.png "スクリーンショット 2014-06-04 12.53.40.png")

# 編集、確認と GitHub へ Commit

PHPStrem 内で index.html ファイルを編集します。今回は、「Hello PHPStorm」と変更します。

![スクリーンショット 2014-06-04 15.38.11.png](https://qiita-image-store.s3.amazonaws.com/0/39380/b68c7820-6180-627f-6d6b-5fe3c749654e.png "スクリーンショット 2014-06-04 15.38.11.png")


すぐさまブラウザで内容を確認します。更新されてない場合には、リロードをお願いします。

![スクリーンショット 2014-06-04 15.39.17.png](https://qiita-image-store.s3.amazonaws.com/0/39380/6989fb07-c629-0083-cd62-cf4a4e4441c8.png "スクリーンショット 2014-06-04 15.39.17.png")


GitHub への Commit は、[VCS]-[Commit Changes...]にて実施します。

![スクリーンショット 2014-06-04 15.19.21.png](https://qiita-image-store.s3.amazonaws.com/0/39380/ce639a90-daff-59a7-b9fd-15150e30fe13.png "スクリーンショット 2014-06-04 15.19.21.png")

Commit 画面です。

![スクリーンショット 2014-06-04 15.24.09.png](https://qiita-image-store.s3.amazonaws.com/0/39380/4ff5eff1-fb42-d13f-b716-5767c331e893.png "スクリーンショット 2014-06-04 15.24.09.png")

Push 画面です。

![スクリーンショット 2014-06-04 15.24.39.png](https://qiita-image-store.s3.amazonaws.com/0/39380/81776950-468b-9f1d-177e-1a45bbc795e3.png "スクリーンショット 2014-06-04 15.24.39.png")


これで問題なく GitHub へソースコードが登録できたと思います。

----

Vagrant の仮想環境設定と、PHPStorm IDE と GitHub の登録が準備できました。基本的なところまでしかやれていませんが、ローカルのIDE 環境でソースコードを修正し、仮想環境で動作確認を実施、その後ソースを GitHub へ Commit という一連の流れが準備できました。

あっ結局、PHP 的なコードは一切ありませんね。そちらについては次回ということで。徐々に整理してまいります。
Swiftスクリプトで Hello world 

[Swift parallel scripting language](http://swift-lang.org/) で Hello world を実行します。（同名別言語に注意）

動作環境

* Debian 5.0.7
* Java 1.6.0_22

パッケージを取得・展開

    $ wget http://ec2-54-82-19-125.compute-1.amazonaws.com/packages/swift-0.94.1.tar.gz
    $ tar xvzf swift-0.94.1.tar.gz

パスの設定

    $ export PATH=$PWD/swift-0.94.1/bin:$PATH

チュートリアルのディレクトリへ移動

    $ cd swift-0.94.1/examples/swift/tutorial

Swiftスクリプトの内容

    $ cat hello.swift
    type messagefile;

    app (messagefile t) greeting() { 
        echo "Hello, world!" stdout=@filename(t);
    }

    messagefile outfile <"hello.txt">;

    outfile = greeting();

スクリプトの実行

    $ swift hello.swift 
    Swift 0.94.1 swift-r7114 cog-r3803

    RunID: 20140604-1434-tz4fxmg2
    Progress:  time: Wed, 04 Jun 2014 14:34:49 +0900
    Final status: Wed, 04 Jun 2014 14:34:49 +0900  Finished successfully:1

実行結果

    $ ls -tr
    ...
    swift.log
    hello.swiftx
    hello.kml
    hello.txt
    hello-20140604-1434-tz4fxmg2.log
    hello-20140604-1434-tz4fxmg2.d

    $ cat hello.txt
    Hello, world!
[ メモ ] ANEを含んでパブリッシュするとでてくるあるエラーの直し方

ある日Xcode5.1でANEを作ったらこういうエラーがでてきて解決方法がわからず、
ずっと悩んでました。

![スクリーンショット 2014-06-04 15.10.03.png](https://qiita-image-store.s3.amazonaws.com/0/12966/0110c0b3-2508-f675-df05-6a93e845ac05.png)

どんなエラーかって言うとarchitecture armv7のInitializerとFinalizerがねぇってエラーですね。


これの原因がどうもXcodeのデフォルトの設定でBuild Active Architecture OnlyのDebugがYesになってたのが原因みたいで、ここをNOにすることで複数のarchitectureに書き出せれるようになるみたいです。

![スクリーンショット 2014-06-04 15.19.10.png](https://qiita-image-store.s3.amazonaws.com/0/12966/879bfca0-952f-3bd8-9fdc-49d2d53a4fee.png)

参考にさせてもらったページ
http://spacetimebubble.net/2012/12/26/xcode%E3%81%AEarmv7s%E3%83%93%E3%83%AB%E3%83%89%E3%82%A8%E3%83%A9%E3%83%BC/

http://qiita.com/yimajo/items/df7264d7dcc78a57a75d
Swift のクロージャが面白い

# 省略記法

Swift のクロージャの基本的な書き方はこう：

```
let sorted = sort(anArray, { (s1: String, s2: String) -> Bool in
    return s1 < s2
})
```

型推論が効くので、仮引数の型とカッコ、返り値の型は省略できる：

```
let sorted = sort(anArray, { s1, s2 in
    return s1 < s2
})
```

クロージャ本体が式ひとつだけからなる場合、 `return` も省略できる：

```
let sorted = sort(anArray, { s1, s2 in s1 < s2 })
```

プレースホルダを使えばここまで短くなる：

```
let sorted = sort(anArray, { $0 < $1 })
```

さらに、 `<` 演算子を operator function として渡すこともできる：

```
let sorted = sort(anArray, <)
```

# 後置記法

関数の最後の引数に渡すクロージャは、関数呼び出しの後ろに置くことができる（Ruby と同じ）：

```
let doubled = map([1, 2, 3], { $0 * 2 })
// ↓
let doubled = map([1, 2, 3]) { $0 * 2 }
```

# @autoclosure

`@autoclosure` 属性を持つ引数に渡される式は、評価されずにクロージャとしてキャプチャされる：

```
func doTwice(f: @autoclosure () -> Void) {
    f()
    f()
}

doTwice(print("hello")) // => hellohello
```

<del>面白いが使いどころが思いつかない。明示的にクロージャを書けばいいと思うんだが。</del>→[短絡評価する演算子を定義するとき使えるとのこと](#comment-fe78b7fb614aadb6a9c9)

# キャプチャリスト

クロージャが外部の変数をどうキャプチャするか指定できる。 Objective-C で面倒だった self の循環参照回避が簡単になる：

```
// self がクロージャを強参照し、クロージャが self を強参照して循環参照に陥る
self.aProperty = {
    self.doSomething()
}

// unowned self としてキャプチャすると、クロージャは self を所有しない
self.aProperty = {
    [unowned self] in
    self.doSomething()
}
```
ImageJで複数画像を動画に変換


複数画像を動画に変換するのはffmpegがあれば良いという意見もありそうだが，最近どうも僕のマシンでのffmpegの挙動がおかしいので，ImageJというソフトを用いる．

## 複数画像の読み込み
Macには，32bit版と64bit版とがあるが，32bit版でないと，動画変換してくれないかもしれない．

ImageJの32bit版を起動し，「File > Import > Image Sequence...」メニューを選択し，ファイルのあるディレクトリを指定する．

そうすると以下のようなウィンドウが出てくるので，「Number of images」と「File name contains:」に適宜記入して，stackとして読み込むために「Use virtual stack」にチェックを入れて「OK」とする．

![スクリーンショット 2014-06-04 14.57.14.png](https://qiita-image-store.s3.amazonaws.com/0/41830/8f439efb-07f2-b2d1-b962-8872ec63f4c5.png "スクリーンショット 2014-06-04 14.57.14.png")

そうすると，複数の画像の連続イメージとしてのstackが作成されるので，「File > Save as > QuickTime movie...」メニューを選択して，圧縮方式などを指定すればよし．
brew services で作ったDBプロセスの参照先

下記の方法でmongodbがデーモンとして動いたのはいいが、どこにデータを保存しているのか分からなくて困った。
http://qiita.com/note109/items/11722a6284c4d1754e0f


```bash
$ brew services mongodb
# mongoは起動するけど、dbpathどこ?
```

アクティビティモニタで、mongodとかmongoプロセスの詳細情報を見たら以下にあることが分かった。

```
/usr/local/var/mongodb
```


brewのservicesコマンドは簡単に裏で動くプロセスを作れて便利だけど、--dbpathとかのオプションはどうやって付けたらいいんだろう。
mongo shellを使ってみる

ターミナルとかからmongoDBをさわれる。

```bash
$ mongo
```

## dbを選ぶ

.0とか.nsがあるディレクトリでmongo shellを起動。

```bash
> use <db name>
swiched to db <db name>
> db
<さっき設定したdbnameが出るはず。>
```

## DBの設定を確認・変更

一部のmongod起動時のオプションは、ここからget, set可能。
例えばログに出力するクエリのレベルを設定したいときはこんな感じ。
http://docs.mongodb.org/manual/reference/method/db.setProfilingLevel/

```bash
> db.<collection name>.setProfilingLevel(1, 100)
```

## クエリの実行内容を確認

explain()を使うと、find()したときどのように実行されたかを見られる。

```bash
> db.collection.find(<query>).explain()
```

このコマンドの結果返されるオブジェクト

* cursor: カーソルタイプ(BasicCursor, BtreeCursor)
* nscanned: スキャンされたインデックスまたはオブジェクトの数
* nscannedObject: スキャンされたオブジェクト
* n: 処理結果数
* millis: 処理に掛かったミリ秒
* nChunkSkips: Chunkマイグレーション中にスキップしたドキュメント数
* nscannedObjectsAllPlans: http://stackoverflow.com/questions/13959482/what-does-the-nscannedobjectsallplans-in-mongodb-explain-mean
* indexBounds: 使用されたindex