OmniAICreator/Qiita-1.07M huggingface dataset:
PythonのyieldをJavaScriptやJavaで表現する

PythonのyieldをJavaやJavaScriptで表現するにはどうすればいいのかを考えてみました。

今回は実用的に何か作ってみたというのではなく、コードジェネレーターをなどを作るとすればどう置き換えればいいのかを考えてみたというレベルなのであしからずです。

とりあえず、これを題材にしてみました。

http://ideone.com/PG6xOJ

```py
# your code goes here
def Generator(n):
	yield 1;
	
	idx = 0
	while idx < n:
		yield 2
		idx += 1

	yield 3
	
g = Generator(5)
for x in g:
	print x
```

ちょっと考えた方針

* ループはgoto文のようなもので置き換え可能
* while文とswitch文を組み合わせればgoto文を表現可能
* yieldした位置をstateとして保存しておく

この方針でJavaScriptで書いてみました。

http://ideone.com/24L64n

```js
// your code goes here
function Generator(n) {
	var ctx = { state:0, idx:0 };

	return function() {
		while (1) {
			switch (ctx.state) {
				case 0:
					ctx.state = 1;
					return 1;
				
				case 1:
					if (ctx.idx < n) {
						ctx.idx++;
						return 2;
					}

					ctx.state = 2;
					break;
					
				case 2:
					ctx.state = -1;
					return 3;
				
				default:
					return undefined;
			}
		}
	};
}

(function() {
	var g = Generator(5);
	while (1) {
		var x = g();
		if (x === undefined)
			break;
		print(x);
	}
})();
```

同様にJavaで書いてみました。

http://ideone.com/YnxHkv

```java
/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	private static class Generator {
		final int n_;
		int state_ = 0, idx_ = 0;
		boolean completed_ = false;
		
		Generator(int n) {
			n_ = n;
		}
		
		int generate() {
			while (true) switch (state_) {
				case 0:
					state_ = 1; return 1;
					
				case 1:
					if (idx_ < n_) {
						idx_++;
						return 2;
					}
					else {
						state_ = 2;
					}
					break;
					
				case 2:
					completed_ = true;
					return 3;
			}
		}
		
		boolean isCompleted() { return completed_; }
	}

	public static void main (String[] args) throws java.lang.Exception
	{
		Generator g = new Generator(5);
		while (! g.isCompleted()) {
			int x = g.generate();
			System.out.println(x + "");
		}
	}
}
```

どちらも一応目的の動きはしています。

こんなコードジェネレーターはすでにあるんでしょうか。

世の中でブラウザでyield文が普通に使える時代になればこんなことは考えなくてすみますね。
リボン付きエクスプローラーでコマンドプロンプト&PowerShellを起動

Windows8からエクスプローラーのメニューが一新され、リボンUIになりました。

で、何が便利かって、コマンドプロンプトの起動が追加されています。
![screen1.png](https://qiita-image-store.s3.amazonaws.com/0/3790/87c6080d-3b28-7d8e-c50f-5b289bb64c4f.png)

そして、リボンUIなのでクイックアクセスに追加できます。
![screen2.png](https://qiita-image-store.s3.amazonaws.com/0/3790/3ed27fea-dcfa-f475-dcfe-0cdf3a488507.png)

とりあえず追加。
![rapture_20140209191408.png](https://qiita-image-store.s3.amazonaws.com/0/3790/708fb97f-13c9-a68d-6e29-2129690a31af.png)


↓ではアドレスバーから起動したり、逆にプロンプトからエクスプローラーを起動する方法が紹介されています。
[エクスプローラからコマンドプロンプトやPowerShellを開いたり, その逆をする方法のまとめ - Qiita](http://qiita.com/skkzsh/items/9d32f6fa937f49053523 "エクスプローラからコマンドプロンプトやPowerShellを開いたり, その逆をする方法のまとめ - Qiita")
AngularJSのHelloWorldテンプレート

[2014/03/10追記] あれからいろいろ勉強して、こっちの方が雛形としてはいいです^^;
- http://qiita.com/hkusu/items/7d748b55ba73cc8a3675

***

スクリプトを書いてローカルブラウザで挙動を確認するためのテンプレートです。
下記の `index.html`(名前はなんでもいいけど) をローカルPCに保存して、お使いのブラウザへドラッグすれば動きます。
（外部サイトのJavaScriptライブラリを直接参照してるので、ネットに繋がってる必要はあります。）

```javascript:index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html ng-app>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.12/angular.min.js"></script>
<script type="text/javascript">
    //Controller
    function TestCtrl($scope){
        $scope.sample = "こんにちは世界！";
    }
</script>
</head>
<body>

<div ng-controller="TestCtrl">{{sample}}</div>

</body>
</html>
```

まだあまり触っていませんが、Knockout.jsと比較して、非JavaScriptプログラマや、例えばPHPのSmarty等のテンプレートエンジンに慣れ親しんでいる方は、AngularJSの方がとっつきやすい印象です。

## おまけ：初心者の学習の参考になるサイト

http://js.studio-kingdom.com/angularjs/guide
http://tech.aainc.co.jp/archives/6281
Python複数version環境をPythonz, virtualenvで管理


バージョン管理をPythonz, 仮想環境をvirtualenvで構築

# virtualenv, wrapper環境設定
## install

```Bash
$ sudo pip install virtualenv virtualenvwrapper

```

## .zshrcにvirtualenv設定
virtualenv環境を ~/.virtualenvs とする場合 

```
## virtualenv, virtualenvwrapper
which virtualenvwrapper.sh > /dev/null
if [ $? -eq 0 ]; then
    source `which virtualenvwrapper.sh`
    mkdir -p ~/.virtualenvs
    export WORKON_HOME=~/.virtualenvs
    export PIP_RESPECT_VIRTUALENV=true
fi
```

# Pythonz環境設定

## install 

```Bash
$ curl -kL https://raw.github.com/saghul/pythonz/master/pythonz-install | bash

```

## .zshrcにPythonz設定

```
# Pythonz
if [ -s $HOME/.pythonz/etc/bashrc ]; then
    source $HOME/.pythonz/etc/bashrc
fi
```

## 複数Python version install

```Bash
$ pythonz install 2.7.5
$ pythonz install 2.6.9
$ pythonz install 3.3.3

# 確認
$ pythonz list

==>
  CPython-2.6.9
  CPython-2.7.5
  CPython-3.3.3
```

# Pythonz + virtualenv

## 仮想環境作成

```Bash
$ mkvirtualenv -p ~/.pythonz/pythons/CPython-2.6.9/bin/python2.6 v2.6.9 && deactivate

$ mkvirtualenv -p ~/.pythonz/pythons/CPython-2.7.5/bin/python2.7 v2.7.5 && deactivate

$ mkvirtualenv -p ~/.pythonz/pythons/CPython-3.3.3/bin/python3.3 v3.3.3 && deactivate

```

## 環境切り替え & 削除
```Bash
# activate
$ workon v2.7.5

# deactivate (to System)
$ deactivate

# remove
$ rmvirtualenv v2.6.9

```

[参考]
・virtualenvwrapper コマンドリファレンス
http://virtualenvwrapper-docs-ja.readthedocs.org/en/latest/command_ref.html
Djangoのdbshellを使う

起動

```
python manage.py dbshell
```

テーブル一覧確認

```
.table
```

ヘルプ

```
.help
```

テーブル構造確認

```
.schema テーブル名
```


終了

```
.exit
```

***


※補足（普通のSQL覚え書き）
テーブル一覧取得

```
SELECT * FROM table001
```

テーブルにフィールド追加

```
ALTER TABLE table001 ADD title char(100);
```

テーブル作成

```
CREATE TABLE table001
(First_Name char(50),
Last_Name char(50),
Address char(50),
Gender int,
Birth_Date datetime);
```
HerokuにPHPをデプロイしてみた

皆さん大好きHeroku、 **公式サポートはしていない** けど **公式がビルドパックを公開してくれている** のでなんら問題なくPHPアプリが走らせれるんですね。
デフォルトだと https://github.com/heroku/heroku-buildpack-php でApacheを使うみたい。

たまたま他のサーバーで走らせていたPHPをgitで管理していたのでそのままPushしてみたらなんとすんなりデプロイ成功。

特に`mbstring`やDBとかは今回は必要なかったからそのままで大丈夫そう。
mbstringとかは [これ](http://qiita.com/hokkai7go@github/items/1b564651fb34bd706cce)とかが参考になりそう。<small>(試してみたけど成功してないとか言えない)</small>

HTTPSも特に設定なしでいけたり独自ドメインとかも簡単に設定できて快適。

それだけ。


## ちなみにお前は何をしたんだ？

```sh
$ cd app-dir
$ heroku create #アプリをCreateしてやる。gitには自動的にリモートブランチにセットされる
$ git push heroku master
```

`index.php`がなかったりするとデプロイ出来なかったりするらしい。
[ruby] epub の比較ツール


２つの epub ファイルの比較判定 (true/false) を行うコマンドラインツールを作ってみました。
https://github.com/katoy/compare_epub

作成日付けとか、 内部の ID 値の差は無視して、比較を行います。
(ソースコードを変更すれば、比較対象から外す項目は目的にあわせて調整可能。)  

コンソールには 一致判定結果の true/false だけを出力します。
しかし ./work-diff/ 以下には 2 つの epub を zip 展開した結果と、それらをフィアル毎の nokogiri-diff での比較結果を出力しています。

なお、動作チェック用の epub は  pandoc (http://johnmacfarlane.net/pandoc/demos.html) をつかって作成しました。
また、生成した epub は epubcheck (https://github.com/IDPF/epubcheck) でのチェックをパスすることを確認しています。

ここでつかった方法は、docx のように xml ファイルが zip 化されているデータについては、そのまま応用が可能なはず。
誰でもできるようになる、やさしいVim入門


はじめに
======

こんにちは。

私が Vim を真剣に使い始めて、まだそんなに時間が経っていません。

Vim の習熟曲線はとても急勾配であると言われます。

しかし、私は短期間のうちに、
標準的な他のエディタを使った場合と比較して、
およそ倍の速度でテキストを編集できるようになりました。

その方法を皆さんにもお伝えします。

タイトルに偽りはありません。

きっと、誰でもできるようになります。
むずかしくもありません。

**ただ、指がつるまで反復練習をするだけです。**

とても簡単です。

レッスン0
=============

まず最初のレッスンを始める前に、前提となる条件を確認しましょう。

必須なのは、

* タッチタイピング(ブラインドタッチ)ができること

これだけです。
できない人は回れ右して帰ってください。
最近は、Vim にこだわらなくても、いいエディタが沢山ありますよ。
Sublime Text なんて流行っているし良いんじゃないですか？
タッチタイプができない人は、そういうダサいエディタを使っていた方が幸せです。

 レッスン1
=========

### Vim をテクるために

Vim をテクるためには、以下を繰り返すしかありません。

* 便利な機能を知る
* ひたすら反復して身体に覚え込ませる

さらに間が空くと忘れたりするので、定期的に復習する必要があります。
なんでこんな辛いことをしなくちゃいけないんだろう、と思います。

しかし、文句を言わずに部活だと思ってやるしかないのです。
前世の業だと思ってやるしかないのです。
**俺が打ち続けなければ地球に巨大隕石が落ちる。人類のためにあと5回だけ頑張れ！**
と考えながらやるしかないのです。

では、簡単なものを実践してみましょう。

プログラミングの用途で Vim を使う方が多いと思います。
まず、以下のソースを Vim にコピペしてください。

```c
#include <stdio.h>
 
int main(void)
{
    printf("Hello world!");
    return 0;
}
```

では、このソースコードの編集をしてみましょう。
あ！ノーマルモードと挿入モードとかは把握している前提で進めます！

"Hello world!" を "The world!" に変えてみよう！
----

### 概要

ソースコード中の、"Hello world!" を "The world!" に変更します。
まず、`gg` と叩いて、ファイルの先頭にカーソルを持っていってください。

この、カーソルが先頭にある状態から、"Hello world!" を "The world!" に変える方法はいくつもありますが、
Vim を使う場合は、できるかぎり **「思考したこと=操作」** となるような操作となるよう意識すべきです。

つまり、頭のなかで、「カーソルを下、カーソルを下、カーソルを下、そして右」みたいな、
「目標をセンターにいれて某」みたいな思考はしないはずです。

思考をトレースしてみましょう。普通は例えば、

- 5行目にダブルクォートでくくられた `Hello world!` があるようだね
- そこの `Hello` を `The` に書き換えればいいんじゃないかな
- よし変えた (この間約0.02秒)

とかになるかと思います。

それでは、上記の思考の流れをそのまま実行してみましょう。
記載されているものをそのままタイプしてください。

### 実践

- 5行目に移動

```
5G
```

- `Hello` を消すためにそこ(`Hello` の先頭)へ移動

```
fH
```

- `Hello` を消して挿入モードIN

```
ciw
```

- `The` を入力

```
The
```

- 挿入モードを抜ける

```
<ESC>
```

- おしまい

### 解説

上記の **実践** では、以下の操作を使いました。

#### G

前置した(先に入力した)行へジャンプします。
例えば `3G` だと3行目に飛びます。
行ジャンプは、他に以下のコマンドでも可能です。

```
:5<Enter>
```
ちなみに、Vim では以下で簡単にコマンドのヘルプが参照できます。
とても素晴らしいヘルプがその場で確認できるので、
ググるより先にヘルプを見てみましょう。

```
:h G
```
```
G			[count] 行目の最初の非空白文字に移動します(行単位
			|linewise|)。
			カウントの前置がなければ最後の行に移動します。
			'startofline' がセットされていなければ同じ桁位置に移動
			します。
			G はジャンプモーション (|jump-motions|) です。
```

#### f

`f`に続いて入力した文字を、今いる行で右に向かって検索し、
見つかった位置にカーソルが置かれます。

ヘルプを見ておいてください。

```
:h f
```

#### c

`c` に続いて入力したモーションを削除し、挿入を始めます。
モーションというのは、その名の通り「動作」を意味します。
`iw` というのが、「カーソル位置にある単語を選択する動作」を意味するコマンドなので、
結果として、「カーソル位置にある単語が削除され、挿入を始める」という操作になります。

ヘルプもね。

```
:h c
```
```
:h iw
```

### 反復

では、ここで学んだ操作を指がつるまで繰り返してみましょう。

1. `gg`
2. `fH`
3. `ciw`
4. `The<ESC>`
5. `u` （アンドゥ）

これから同じような場面では完璧にこなせるはずです。

### 補足

上記手順は、結構まわりくどいやり方でやってます。
もちろん、`Hello` をいきなり検索したり置換した方が早いです。

次回のレッスン
===========

未定！！！！！！！
[Objective-C] ランタイムAPIのメモ


Dynamic Objective-Cを読んでいて色々面白そうなことが書いてあるのでそのメモ。

##ランタイムAPI

Objective-Cの実装は、紐解けばC言語での実装になっています。
なので、ランタイムAPIを駆使すればほぼすべての処理に対してあとから干渉することが出来ます。
（例えば、コンパイル時に存在しないクラスを生成したり、とか）

ただ、ARCがオンの場合には動作しないものもあるので、なにかいじってみる場合は注意してください。
また、ランタイムAPIを利用する場合は`<objc/runtime.h>`をimportする必要があります。

##クラスの実体

Objective-Cで実現されているクラス構造は、実はすべてCの構造体により実現している。
よく使われる`id`型の宣言は以下のようになっている。

```struct.m
typedef struct objc_object {
	class isa;
} *id;
```

ちなみに`isa`は「イズーア」だと思われる。（オブジェクト指向の用語である「isa」）
つまり`isa`メンバは継承元（<del>スーパークラス</del> メタクラス（コメントで指摘いただきました））への参照を持つ。
（余談だけど「This class is a meta class.」の「is a」から来ていると思う。（英語の文章はわりと適当；））

--------------------

##クラスからインスタンスを生成

```objc
id hoge = class_createInstance([hoge class], 0);
```

`class_createInstance`関数でインスタンスを生成する。

--------------------

##インスタンスメソッドの実装を取得

Objective-Cではちょっとおもしろい実装になっていて、メソッドとメソッドの実装が切り分けられている。
上で、Objective-Cのクラスは、実はただのCの構造体と書いたけど、メソッドもただの構造体の中の１メンバに過ぎない。

そして構造体にはメソッド「名」とメソッドの「実装」をそれぞれ個別に持つようになっていて、ランタイム時に指名されたメソッドの実装を取り出して実行する、ということをやっている。
そしてその「メソッドの実装」の型が`IMP`型になる。

###サンプルコード

```objc
Method method;
IMP imp;
method = class_getInstanceMethod([NSString class], @selector(length));
imp = method->method_imp;
```

ちなみにこれを読んで腹落ちしたのがObjective-Cの「セレクタ」という概念。
最初はなにを「セレクト」しているんだろうとずっと疑問だったけど、つまりは「メソッドの実装」をセレクトしていた、というわけ。

##ランタイムAPIのリファレンス
[Objective-C Runtime Reference](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html)

##記事
http://www.ss.cs.meiji.ac.jp/CCP055.html
【PHP】homebrewで入れたphp,xdebugをIntelliJでデバッグする【IntelliJ】


phpはv5.5です。IntelliJはUltimate、v12の最新です。PhpStormでも同様だと思います。
php、xdebugいずれもhomebrewでインストールしました。
インストール方法は割愛

#xdebug

xdebugの設定は下記に変更。

```/usr/local/etc/php/5.5/conf.d/ext-xdebug.ini


[xdebug]
zend_extension="/usr/local/Cellar/php55-xdebug/2.2.3/xdebug.so"
xdebug.remote_port=9500
xdebug.remote_enable=true
xdebug.profiler_enable=true
xdebug.remote_autostart=true
xdebug.remote_connect_back=true
```

リモートポートはデフォルトでは9000です。
ほかとバッティングしたので、9500に変更しています。


#IntelliJ

Preferences -> PHP -> Debug

Xdebugのところで、Debug portを、9500に変更します。


#デバッグ実行

IntelliJの虫のアイコンの右隣に2つ目（わかりづらくてすみません）、
電話みたいなアイコンがあるので、それを押す。
ソースコードにブレークポイントを設定して、ブラウザから叩いた時に止まればOK。
MacにPyramid+mongodb環境


# install - project作成

## pyramid, module install

```Bash
$ pip install pyramid Paste mongo

```

## Pyramid, mongodb用のscaffold install

```Bash
$ pip install pyramid_mongodb
```

## pyramid+mongodb project作成
"mongo"という名前でproject作成
ディレクトリがカレントに作成される

```Bash
$ pcreate -s pyramid_mongodb mongo
```

## setup
関連モジュールなどのinstall

```Bash
$ cd mongo
$ pip install -e .
```

# 環境設定

## development.iniの編集

[app:mongo]の下記を環境に応じて編集

mongodb.url = mongodb://localhost
mongodb.db_name = mydb


# 起動
pserveコマンドで起動(default_port 6543 )

```Bash
$ pserve development.ini
```

# その他

## routingの確認

```Bash
$ proutes development.ini 
```
F#で限定継続

#FsControl
[FsControl](https://github.com/gmpl/FsControl)というオーバーロードのためのライブラリがある。
これはHaskellの型クラスのような機能を実現する。
詳しい使い方は[FSharpPlus](https://github.com/gmpl/FSharpPlus)のコードを読むと良い。実際の使い方がよく分かる。
今回は、FsControlが標準で提供してくれているCont型を使って限定継続を実装する。

#限定継続
『[F#で shift／reset プログラミング。限定継続（風）モナドで四天王問題を解く。 - Bug Catharsis](http://zecl.hatenablog.com/entry/20120630/p1)』を参考にさせていただいた。

コードはほぼ[http://www.haskell.org/haskellwiki/MonadCont_done_right](http://www.haskell.org/haskellwiki/MonadCont_done_right)の翻訳である。

#コード

```fsharp

open FsControl.Core.Types
open FsControl.Core.TypeMethods
open FsControl.Core.TypeMethods.Applicative
open FsControl.Core.TypeMethods.Monad

//https://github.com/gmpl/FsControl/blob/master/FsControl.Core/Samples/Haskell.fsx
let inline return' x = Inline.instance Pure x
let inline (>>=) x (f:_->'R) : 'R = Inline.instance (Bind, x) f 
type DoNotationBuilder() =
    member inline b.Return(x)    = return' x
    member inline b.Bind(p,rest) = p >>= rest
    member        b.Let (p,rest) = rest p
    member    b.ReturnFrom(expr) = expr
let do' = new DoNotationBuilder()

let runCont = Cont.run
let callCC' = Cont.callCC
let inline when'  p s = if p then s else return' ()
let inline unless p s = when' (not p) s

//let returnCont = fun n -> Cont(fun k -> k n)
let returnCont :'a->Cont<'b, 'a> = return'

//限定継続（http://www.haskell.org/haskellwiki/MonadCont_done_right）
let reset e = returnCont <| runCont e id
let shift e = Cont <| fun k -> runCont (e (returnCont << k)) id

[<EntryPoint>]
let main argv = 
    reset <| do'{
        let! first = shift <| fun k -> do'{
            let! second = k(1)
            printfn "%A" (second, "2")
            return 3
        }
        printfn "%A" (first, "1")
        return 2
    }
    |> runCont <|
        fun third -> printfn "%A" (third, "3")
    
    0

```

#かっこいい
いろいろ遊べそう
あるファイルを別のファイルに連結させる

タイトルの通りです。あるファイル A.txt の内容を別のファイル B.txt の末尾に連結させます。

```ps1:concat.ps1
Get-Content A.txt | Add-Content B.txt
```

たったこれだけで、元々の B.txt に A.txt の内容が追記されます。

さらに何も考えずに同じ A.txt を複数回 B.txt に追記したい場合も簡単です。

```ps1:concatMany.ps1
# 3回 A.txt の内容を B.txt に追記する
1..3 | ForEach { Get-Content A.txt | Add-Content B.txt }
```

本当に、たったこれだけです。

何に使えるの？とお思いの方もいらっしゃると思いますが、僕もそう思います。
VirtualBox上のCentOSのHDD容量を拡張する

%VIRTUAL_BOX_HOME%\VBoxManage.exe modifyhd [対象のvdiファイル] --resize [変更後サイズ(MB)]

※ VIRTUAL_BOX_HOME = VirtualBoxのインストールディレクトリ

上記操作を実行後、GParted等を使用してHDDのパーティショニングを設定する
Hubotにニコニコ動画のダウンロードを指示する

Hubot使い始めた。Coffeeでプラグインを書けて良さがある。良さがあるので、プラグインを書いた。

#　hubot-nicovideo

![img](https://github.com/uetchy/hubot-nicovideo/raw/master/screenshots/usage.png)

[hubot-nicovideo](https://github.com/uetchy/hubot-nicovideo)というHubotプラグインをつくった。
これをリポジトリのREADME.mdに書いてあるとおりにインストールすると、ニコニコ動画のダウンロードをHubotに指示できるようになる。

hubot-nicovideoを追加したHubotを自宅NAS、例えばMac miniとかに置いておけば、IRCでダウンロードを指示するだけでNASに動画が保存されるようになる。保存した動画はどこでもMyMacとかAirVideo経由で見る。便利。
Haskellの型

#Haskellの型
Haskellは、強力な型システムを持っている。

##式の型の調べ方
GHCi を使って調べることができます。

```hs
ghci>:t 'a'
'a' :: Char
ghci>:t True
True :: Bool
```

##一般的なHaskellの型
* Intは整数。数全般に使用。1はIntになれるが、1.3はIntになれない。
  Intは最小値と最大値がある(有界がある) 64bitなら -2^63 - 2^63-1
* Integerも整数。但し、有界がないため、大きい数を示すのに使える。
* Floatは単精度浮動小数点数
* Doubleは倍精度浮動小数点数
* Boolは真理値型
* CharはUnicode文字。シングルクオート(')で括って表記。

####他のHaskell記事
[Haskellの関数一覧](http://qiita.com/yoshikiAvu/items/ab5bccd056f9f6707275)
Haskellの関数一覧

#Haskellの標準関数
Haskellの標準関数の一覧を示す。
##標準関数一覧
| 関数 | 引数 | 戻り値 | 使用方法例 |
|:-----|:-----------:|:------------|:------------|
| succ | 数値、文字列 | 次に大きい数  | succ 8      |
| min  | 数値、文字列 | 小さい方     | min 9 10     |
| max  | 数値、文字列 | 大きい方     | max "a" "c"  |
| div  | 数値        | 数値         | div 94 10   |
CentOs 6.4（sakura vps）でMySQLのバージョンを5.6にする

MySQLのバージョンを5.6にアップデートするためにググったところ、
5.6のrpmをwgetしたらnot found..になる記事ばかり。

自分のやり方が正しくなかったのかは不明ですが以下の方法でアップデートできました。

##ファイルをバックアップ
```
cd /var/lib
cp -arp mysql mysql.backup
cd /etc
cp my.cnf my.cnf.org
```

##インストールされているMySQLのバージョンを確認

```
rpm -qa | grep -i mysql

mysql-5.1.69-1.el6_4.x86_64
mysql-devel-5.1.69-1.el6_4.x86_64
mysql-server-5.1.69-1.el6_4.x86_64
mysql-libs-5.1.69-1.el6_4.x86_64
```

##パッケージをアンインストール

```
yum erase mysql-5.1.69-1.el6_4.x86_64 mysql-devel-5.1.69-1.el6_4.x86_64 mysql-server-5.1.69-1.el6_4.x86_64 mysql-libs-5.1.69-1.el6_4.x86_64
```

##パッケージをダウンロード

```
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.16-1.el6.x86_64.rpm
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.16-1.el6.x86_64.rpm
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-devel-5.6.16-1.el6.x86_64.rpm
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-5.6.16-1.el6.x86_64.rpm
```

##パッケージをインストール

```
rpm -ivh MySQL-client-5.6.16-1.el6.x86_64.rpm
rpm -ivh MySQL-devel-5.6.16-1.el6.x86_64.rpm
rpm -ivh MySQL-server-5.6.16-1.el6.x86_64.rpm
rpm -ivh MySQL-shared-5.6.16-1.el6.x86_64.rpm
```

##MySQLをスタートしてバージョンを確認

```
service mysql start
```

※mysqldにしたい人は下記を実行

```
mv /etc/rc.d/init.d/mysql /etc/rc.d/init.d/mysqld
```

##MySQLへログインしてバージョンを確認

```
# mysql -u root -p

Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.16 MySQL Community Server (GPL)
```

見事5.6にバージョンアップできました

##追記

railsでmysql2のORM使っている場合、
5.6にアップデートして rails consoleを起動したら下記のエラーが発生！

```
ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
```

mysql 5.6にアップデートすると、libmysqlclient_r.so.16がlibmysqlclient_r.so.18に変わっていました。

```
ls -la /usr/lib64/libmysqlclient*


lrwxrwxrwx 1 root root      20 Feb  9 13:37 /usr/lib64/libmysqlclient.so -> libmysqlclient.so.18
lrwxrwxrwx 1 root root      24 Feb  9 13:37 /usr/lib64/libmysqlclient.so.18 -> libmysqlclient.so.18.1.0
-rwxr-xr-x 1 root root 8854601 Jan 15 00:55 /usr/lib64/libmysqlclient.so.18.1.0
lrwxrwxrwx 1 root root      17 Feb  9 13:37 /usr/lib64/libmysqlclient_r.so -> libmysqlclient.so
lrwxrwxrwx 1 root root      20 Feb  9 13:37 /usr/lib64/libmysqlclient_r.so.18 -> libmysqlclient.so.18
lrwxrwxrwx 1 root root      24 Feb  9 13:37 /usr/lib64/libmysqlclient_r.so.18.1.0 -> libmysqlclient.so.18.1.0
```

mysql2のgemを再インストールして解決！

```
gem uninstall mysql2
gem install mysql2
```
AngularUI Routerの使い方

##まえおき
AngularUI RouterはAngularJS用のルーティングモジュールで、標準のngRouteより高機能。
詳しくは[AngularUI Routerの使い方 - ばかおもちゃ本店](http://b.denkizakana.com/2014/02/angularui-router.html)にも書いた。
実働サンプルもあるよ！（宣伝）

##ngRouteより高機能な部分。

以下のようなことがngRouteより高機能。

- 複数の部分にviewを表示できる
- URLではなくて階層化したstateで表示状態を管理する
- stateに結び付けられるURLは正規表現で指定できる
- ui-srefでURL構造に依存しないでリンクを貼れる（URL変更時とかに何もしなくていい）

##サンプル

```js
angular.module('app',['ui.router','ListCtrl'],
function($stateProvider,$urlRouterProvider){
    $urlRouterProvider.otherwise('/emp');
    $stateProvider
        .state('emp',{
            url:"/emp"
            ,templateUrl:"list.html"
            ,controller:"ListCtrl"
        })
        .state('emp.detail',{
            url:"/detail/{empID:[0-9]{5}}"
            ,templateUrl:"detail.html"
            ,controller:function($stateParams,$scope){
                $scope.params = $stateParams;
            }
        })
        .state('emp.detail.pictures',{
            url:"/pictures"
            ,views:{
                "@":{
                    templateUrl:"pictures.html"
                    ,controller:function($stateParams,$scope){
                        $scope.params = $stateParams;
                    }
                }
            }
        });
}]);
```
このサンプルは自サイトの実働サンプルまま。
この設定で、

- 社員一覧みたいなのを表示
- 一覧から一人クリックすると、リストの下の詳細ビューに詳細が表示される
- 詳細内のリンクをクリックすると、一番上の階層のビューに写真一覧が表示される

みたいな感じの動作になる。

##ngRouteとの設定の違い

+ routeProvider -> stateProvider
+ otherwiseは$urlRouterProviderに設定する
+ 第一引数がURLではなくてstate
  + stateはドット区切りで階層化できる（parentプロパティに設定でも可）
  + urlはオプション内のプロパティに指定する
  + 正規表現は"/detail/{empID:[0-9]{5}}"こんな感じ
  + urlは親のurl以下に続くが、'^/hoge'みたいにすると一番上から指定しなおせる
+ viewを指定するときは直接controllerやtemplateを設定するのではなく、viewsに設定する
  + viewsのプロパティ名で表示するview名@state名を指定できる
  + @書かなきゃ親state下、view書かなきゃ無名view、@書いてstate書かなきゃ最上位state下

##リンク側

```html
<a ui-sref=".detail({empID:e.id})">{{e.name}}さんの詳細</a>
```

みたいな感じで書く。

+ ドットで始まってる場合、現在のstate以下のstateを選ぶ
+ ^で始まってる場合、親state以下のstate（siblings）
+ 何もなしで始まる場合、一番上の階層下のstate

記号は違うけど、ファイルパスの指定なんかと似たような感じ。

以上。
Underscore.jsを試す

Underscore.js を試しに使ってみたときのメモ。

http://jsfiddle.net/opengl_8080/TxfJM/

関数名をクリックしたら、コンソールに結果が出力されます。

jQuery 単体だと足りていなかった部分をいい感じに補完してくれそう。

#参考
- [enja-oss/Underscore · GitHub](https://github.com/enja-oss/Underscore)
RubyMotionでアプリを申請しようとしたらAppleからはじかれた

```
ERROR ITMS-9000: "This bundle is invalid. Apple is not currently accepting applications built with this version of the SDK." at SoftwareAssets/SoftwareAsset (MZItmspSoftwareAssetPackage)
```

こんな感じで怒られたけど、次の方法で解決

[ERROR ITMS-9000: "This bundle is invalid. Apple is not currently accepting applications built](http://stackoverflow.com/questions/21525124/error-itms-9000-this-bundle-is-invalid-apple-is-not-currently-accepting-appli)

要するにバージョン2.21以上を使え、ということです。
ターミナルでC++のコンパイル

仮にmain.cppというc++ファイルがある場合

```
$ c++ main.cpp
$ ./a.out
```
<br />

クラスを定義したhファイル(仮にclass.h)、メンバ関数を定義したcppファイル（仮にclass.cpp）、そのクラスを使用したmain.cppの複数ファイルがある場合

```
$ c++ main.cpp class.cpp
$ ./a.out
```
<br />

別のコンパイル方法

```
$ c++ -c -o main.o main.cpp
$ c++ -c -o class.o class.cpp
$ c++ main.o class.o
$ ./a.out
```
この方法では、"-c -o"でそれぞれのオブジェクトファイルを作成するようです。以下のサイトで詳しく解説してありました。
http://www.ysr.net.it-chiba.ac.jp/data/cc.html

<br /><br />
今まで数行のプログラムでもXcodeを使ってプログラムを書いていたのですが、ここ数ヶ月Vimでファイルを作成して、ターミナル上からコンパイルするということを今更ながらやっています。主に蟻本の勉強に使っていたので、ファイルは1つですんでいたのですが、複数ファイルをコンパイルしようとして躓きました。Twitterでそのことをツイートしたら、快く教えてくれた人たちがいたので、メモしておきます。
Artistic Style(AStyle)でC++のコードをきれいに整形する

ブログに書いたよ。
<a href="http://d.hatena.ne.jp/replication/20140209/1391912114">Artistic Style(AStyle)でC++のコードをきれいに整形する - 大人になったら肺呼吸</a> <a href="http://b.hatena.ne.jp/entry/d.hatena.ne.jp/replication/20140209/1391912114"><img src="http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/replication/20140209/1391912114" alt="はてなブックマーク - Artistic Style(AStyle)でC++のコードをきれいに整形する - 大人になったら肺呼吸" border="0" /></a>
どうしてもActiveAdminを拡張したいならこの方法を使おう

AcitveAdminは管理画面を自動的に作成してくれる便利なライブラリですが、大幅に拡張するには少し手間がかかりすぎてしまいます。

正直はてなブログやNaverまとめのようなイイ感じの管理画面を作りたいなら自作するのが一番いいと思うのですが、初心者なのでgemとかで何とかしたい！という方のためにActiveAdminを拡張するためのソースをまとめてみました。

実際に使ってみて上手く稼動した＆比較的使いやすかったgemだけをチョイスしています。

## 記事の下書き、投稿済み
[ActiveAdmin State Machine](https://github.com/macfanatic/active_admin-state_machine)
READMEにはdraft, preview, publishedの3つの記事の状態の作成方法が掲載されてますが、他の状態も簡単に拡張出来ます。

## 画像をS3に保存
[carrierwave](https://github.com/carrierwaveuploader/carrierwave)
画像のアップロードは他にも[paperclip](https://github.com/thoughtbot/paperclip)などがありますが、今後他のgemと連携する場合はcarrierwaveを選択するのがオススメです。画像のファイル名とかも簡単に変更できるので、特にファイル名を乱数にしたいといった人は便利。

## 記事の編集をもっと便利に
[CKEditor](https://github.com/galetahub/ckeditor)
ActiveAdminが公式にサポートしているフォームをHTMLに対応させるためのgemです。他にも[rich](https://github.com/bastiaanterhorst/rich)、[ActiveAdmin Editor](https://github.com/ejholmes/active_admin_editor)、[ActiveAdmin WYSI5 Editor](https://github.com/stefanoverna/activeadmin-wysihtml5)などがあり、比較的後者の方がインストールや設定をしやすかったのですが、Rails4では上手く動かなかったり、carrierwaveとの連携がやりにくかったり、HTMLの編集機能が少なかったりしたのでCKEditorをオススメしました。
CKEditorはActiveAdminのinitializerで設定でき、HTMLの編集機能も豊富です。

ただし機能制限などを行う場合は、config.jsファイルを作成する必要があり、 このconfig.jsの編集方法を理解しないといけないので、HTMLの編集機能はそんなにこだわらない方はあまり使わない方がいいかもしれないです。
もし時間をかけてHTMLの機能制限をしてもいい方は、こちらのサイトを参考にしてみてください。
[CKSource - CKEditor Toolbar](http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar)

## メニューを制限する
例えば、カテゴリというモデルを作って、あるemailでログインしてない場合はカテゴリをメニューに表示させたくない場合は、以下のコードをモデルに追加しましょう。

~~~ruby:app/models/admin_user.rb
def admin?
  self.email == "your email address"
end
~~~

~~~ruby:app/admin/category.rb
menu :if => proc{ current_admin_user.admin? }
~~~

## Admin画面へのURLを変更する
~~~ruby:config/initializers/active_admin.rb
ActiveAdmin.setup do |config|
  config.default_namespace = :route_name #route_nameに自分で決めたURLを書く
end
~~~
2014年に学ぶべきプログラミング言語を播州弁で意訳してみた(1位〜3位編)


### ソース
[10 Programming Languages You Should Learn in 2014 - Mashable](http://mashable.com/2014/01/21/learn-programming-languages/)

## 1. Java
![java](http://rack.0.mshcdn.com/media/ZgkyMDE0LzAxLzE1LzE1L2phdmEyLmFjZjUwLmpwZwpwCXRodW1iCTEyMDB4OTYwMD4/85689318/d32/java2.jpg)
#### Javaとは何ぞや？
Javaゆうたらクラスってもんで構成されとるオブジェクト指向言語で、1990年台にサンマイクロシステムが作った言語やんけ。ワシが説明せんでも、あんたらも知っとるやろがい！ Androidとかweb上のコンテンツとかゲームとかいろんなモン作れるし、いろんなOSで使えるさかいに勉強しときや！
#### ここで勉強したらええらしいで
[Udemy](https://www.udemy.com/blog/learn-java/), [Lynda.com](http://www.lynda.com/Java-training-tutorials/1077-0.html?utm_source=google&utm_medium=cpc&utm_campaign=Search-Dev-Java-XCT&utm_content=36326176986&utm_term=learn%20to%20program%20java&gclid=CNvrk4f_gLwCFREaOgodzFMAkA), [Oracle.com](http://www.oracle.com/technetwork/topics/newtojava/overview/index.html), [LearnJavaOnline.org](http://www.learnjavaonline.org/)

## 2. C言語
![C](http://rack.1.mshcdn.com/media/ZgkyMDE0LzAxLzE1LzlhL2MyLjQzY2I0LmpwZwpwCXRodW1iCTEyMDB4OTYwMD4/0ff29852/8c6/c2.jpg)
#### 最近の若者は、これ何や？って言うとるらしいな。
いやC言語やん。70年台に出来たホンマに何でも使える言語やで。あんたらの使ってる言語は何でできとると思っとるん？　ぎょーさんの言語はCで出来とるねんで！ 後からゆうC#とかJavaとかJavaScriptとかPythonとかもそうやんか。まぁJavaScriptの代わりにCでWeb系のプログラミングする阿呆はおらんけど、えらいぎょうさんの言語に埋め込めるさかいに、あんたらの作ったプログラムをちょいちょい早くしたい思たら面倒臭がらんと使ったりや。

#### 終わったら100円で駄菓子買ってきてもええから、一旦ここおり〜
[Learn C](http://www.learn-c.org/),[Introduction To Programming](https://itunes.apple.com/itunes-u/introduction-to-programming/id455865447),[Lynda.com](http://www.lynda.com/Eclipse-tutorials/CC-Essential-Training/94343-2.html?utm_source=google&utm_medium=cpc&utm_campaign=Search-Dev-C&utm_content=34132478586&utm_term=%2Blearning%20%2Bc&gclid=COe65caGgbwCFaxQOgodoSUASA),[CProgramming.com](http://www.cprogramming.com/),[Learn C The Hard Way](http://c.learncodethehardway.org/book/)

## 3. C++
![C++](http://rack.2.mshcdn.com/media/ZgkyMDE0LzAxLzE1LzlkL2NwbHVzcGx1cy44OTVhOC5qcGcKcAl0aHVtYgkxMjAweDk2MDA-/aee5cfcd/379/cplusplus.jpg)
### 何や？
さっきC言語の説明したったやろ？　一回使ってみ？　特にポインタとかもそうやけど、めっちゃしんどぉなかったけ？　このC++ゆうたらホンマJavaみたいにオブジェクト使えるし、C並みのパワー持っとる、馬でゆうたらアンライバルトみたいな最強名馬や！　競馬じゃなくてもええから若いうちからラジオ聞いときや。テレビばっか見とってもアカンで！（先週電車の中で隣のおばちゃんにこんな感じの説教されました。）
話ずれてもうたけど、C++はFirefoxとかWinamp、Adobeのプログラムに使われとるねんて。話まとめたったら、システムソフトやアプリケーションソフト、どえらい早いサーバー＆クライエントアプリとかテレビゲームとか作れるゆうわけや。
#### C++のオススメサイトここやて聞いたで。
[Udemy](https://www.udemy.com/objective-c-for-iphone-developers/),[CPlusPlus.com](http://www.lynda.com/SharedPlaylist/2b647dd117ef423f81493e2860f967b0?utm_medium=viral&utm_source=slideshare&utm_campaign=top-programming-languages),[LearnCpp.com](http://www.learncpp.com/),[CProgramming.com](http://www.cprogramming.com/tutorial.html)

## 最後に
私は19歳まで、地元の兵庫県多可郡多可町という小さな過疎の田舎で過ごしてきましたが、大学生になってから現在３年間大阪にいるため、少し大阪弁が入っているかもしれないです。もし播州や大阪地方のプログラマの方がご覧になって、ここ播州弁ちゃうよっという所を発見されましたらコメントよろしくお願いします。

テスト明けに徹夜で地元の子と遊んでフラフラになりながら書いているので、また続きは寝てから書きます。
.Net FrameworkでBOMありのストリームを読み込む

.NETでストリームを扱う時に、BOMの扱いについて困りましたが、何とか解決。

stream.ToArray()を使う方法があるのですが、
この方法でBOMありのストリームを読みこんだ場合、
BOMも文字列に含まれてしまい、ストリームに書き込んだ文字列と異なってしまいます。

.NETは普通に書き込むとBOMありになるため、
これは困ります。

StreamReaderなどを使いましょう。

```csharp
var input = "test";
var stream = new MemoryStream();
var writer = new StreamWriter(stream, Encoding.UTF8);

await writer.WriteAsync(input);
await writer.FlushAsync();

stream.Position = 0;
var reader = new StreamReader(stream, Encoding.UTF8);
var output1 = await reader.ReadToEndAsync();

stream.Close();
var output2 = Encoding.UTF8.GetString(stream.ToArray());

var b1 = input == output1; // => true
var b2 = input == output2; // => false
```
express + passport + mongoose + kue

Node.jsで実践的なWebアプリ開発をやったメモ

https://github.com/yuiseki/ieiri-crowds

# ライブラリのドキュメントとリポジトリ

- **express** : Node.jsのSinatra風Webアプリケーションフレームワーク
  - 特筆すべきことはないシンプルなやつ
  - http://expressjs.com/
  - http://expressjs.com/guide.html
  - http://expressjs.com/api.html
  - https://github.com/visionmedia/express

- **passport** : Expressのための認証フレームワーク
  - よくある認証のパターンがStorategyとしてまとめられて提供されていて数行でログイン処理が書ける
  - http://passportjs.org/
  - http://passportjs.org/guide/
  - https://github.com/jaredhanson/passport

- **mongoose** : Node.jsのMongoDBモデリングツール、ODM
  - MongoDBのスキーマ定義したりモデルオブジェクトを作ったりして操作できる
  - http://mongoosejs.com/
  - http://mongoosejs.com/docs/guide.html
  - http://mongoosejs.com/docs/index.html
  - http://mongoosejs.com/docs/api.html
  - https://github.com/LearnBoost/mongoose

- **kue** : Node.jsの非同期ジョブキューフレームワーク
  - 非常にシンプルな、ジョブキューサーバーのためのフレームワーク
  - ジョブの管理にredisを利用している
  - http://learnboost.github.io/kue/
  - https://github.com/learnboost/kue

# 組み合わせてできること

- passportとpassport-twitterでTwitter OAuth認証して、mongooseでUserモデルと連動させてトークンなどを保存、取り出し
- mongooseから特定の条件でUserモデルを取り出してkueでジョブを登録して実行させる
  - 自動ツイートなどをジョブキューで実装


# 引っかかった点

- passportのログイン時処理をmongooseのモデル内に書きたい
  - → staticメソッドとして定義してログイン時の引数をそのまま受け取るように実装すれば書ける、動く

- mongooseのモデルをAPI経由でjsonで出力するときに、表に出したくないフィールドがある
  - → schema.set("toJSON", {transform: function(doc, ret, options){...} }) でjsonにするときの処理を定義できる

- mongooseでpaginationをやりたい
  - → require "mongoose-pagination"

- kueを扱うスクリプトでmongoose使う方法
  - require '../models/user'とかやって問題なく動く
  - modelの依存を少なくしておかないと外から呼ぶ時面倒になる可能性はある
  - 終了処理だけmongoose.connection.close()を呼ぶように気を付ける必要がある
C言語の関数にsliceの中身をポインタとして渡す

```go
intSlice := []int{0, 1, 2, 3, 4}
some_func_requiring_intptr( (*C.int)(&intSlice[0]) )
```

引用元: [Pass Go slices as C array parameters | coderwall](https://coderwall.com/p/m_ma7q)

上のリンクではキャスト付いてないけど、実際に使ってみるとコンパイラに怒られたのでキャストしましょう

ポイントは

- &slice[0]でポインタが取得できる（っぽい）
- Goは型にうるさいのでキャストする

です

## 例

例を書いておく。cgoを使って、例えば以下のようなC言語の関数をラップすることを考える。

```c
// 第一引数に入力の配列をとって、結果を第二引数に格納する。配列の長さは第三引数で指定する
void doSomething(double *inputBuffer, double *resultBuffer, const int sizeOfBuffer);
```

以下のように書く

```go
// パッケージ名
package hoge

// #include <インクルードファイルの名前>
// LDFLAGS、pkg-config等、必要であれば書く
import "C"

func doSomethingInGo(inputBuffer []float64) []float64 {
	resultBuffer := make([]float64, len(inputBuffer))
	C.doSomething((*C.double)(&inputBuffer[0]), (*C.double)(&resultBuffer[0]), C.int(len(inputBuffer)))
	return resultBuffer
}
```

## おわり

```go
	resultBuffer := hoge.doSomethingInGo(inputBuffer)
```
NetBeansをインストールしたのでメモ

NetBeansをインストールしたのでメモします。
今回の環境は下記になります。
・Windows8 Pro(64bit)
・JDK 7u51
・NetBeans 7.4 Java EE

# JDKのインストール
まず、JDK(Java Development Kit)をインストールします。
ここでインストールするバージョンは、「7u51」です。

1. http://www.oracle.com/technetwork/java/javase/downloads/index.html にアクセスします。


1. Java Platform(JDK) 7u51 のDOWNLOADアイコンをクリックします。
![0_0.png](https://qiita-image-store.s3.amazonaws.com/0/22465/4c1adf73-f0ab-6f59-56c6-6700d3aebbd2.png)


1. ライセンスを読み、『Accept License Agreement』ラジオボタンをクリックして、使用OSに合わせて、ダウンロードするファイルをクリックしてダウンロード開始します。
Windows8 64bitであれば jdk-7u51-windows-x64.exe を選択します。
![0_1.png](https://qiita-image-store.s3.amazonaws.com/0/22465/2a08dc14-db16-92bc-a174-893931ecc53a.png)


1. ダウンロードしたインストーラの指示に従ってインストールします。
特にこだわりが無ければ途中の設定はすべてデフォルトで問題ありません。


1. 環境変数JAVA_HOMEをインストールしたフォルダに設定します。
変数[JAVA_HOME]
値[C:\Program Files\Java\jdk1.7.0_51;]
![0_2.png](https://qiita-image-store.s3.amazonaws.com/0/22465/96ff3e74-28d6-e3da-b092-1dfadad8a152.png)


#NetBeansインストール
次にNetBeansをインストールします。

1. https://netbeans.org/downloads/ にアクセスして目的にあったバンドルをダウンロードします。今回は、「Java EE」を選びます。
![001_1.png](https://qiita-image-store.s3.amazonaws.com/0/22465/30eada05-8c47-d234-17ab-95634758ddaf.png)


1. ダウンロードしたEXEファイルを実行し、インストールを開始します。

1. チェックはデフォルトのまま、次へをクリックします。
![002.png](https://qiita-image-store.s3.amazonaws.com/0/22465/90a5018e-43d6-02ff-245c-c5ac2f20af20.png)

1. ライセンス同意にチェックし、次へをクリックします。
![003.png](https://qiita-image-store.s3.amazonaws.com/0/22465/03e65878-18f5-8197-cfd9-f90071db8cdb.png)


1. JUnitをインストールを選択し、次へをクリックします。
![004.png](https://qiita-image-store.s3.amazonaws.com/0/22465/27f50cf7-2526-bc2e-7d61-340dbeec334f.png)


1. NetBeansのインストール先とJDKのパスを選択します。今回は下記になります。
NetBeans IDEのインストール先「I:\NetBeans\NetBeans 7.4」
NetBeans IDE用のJDK「C:\Program Files\Java\jdk1.7.0_51」
![005.png](https://qiita-image-store.s3.amazonaws.com/0/22465/d63a17a5-7233-4e59-a1e5-ecd6498e221d.png)


1. GlassFishのインストール先とJDKのパスを選択します。今回は下記になります。
GlassFishのインストール先「I:\GlassFish\glassfish-4.0」
GlassFishアプリケーションサーバー用のJDK「C:\Program Files\Java\jdk1.7.0_51」
![006.png](https://qiita-image-store.s3.amazonaws.com/0/22465/e84c296b-ae1a-deb2-471d-ea6987af3317.png)


1. チェックはデフォルトのまま、インストールをクリックします。
![007.png](https://qiita-image-store.s3.amazonaws.com/0/22465/5a6b5546-f106-237c-4b6f-f7245da2d1da.png)


1. 終了をクリックしてインストールは完了です。
![008.png](https://qiita-image-store.s3.amazonaws.com/0/22465/3af5cb1a-f32e-6833-66e9-54d00b55c913.png)


# NetBeansのエンコーディング設定
NetBeans のエンコーディングは デフォルトでwindows-31j で設定されているので、UTF-8で開けるように設定します。

1. NetBeansのインストールディレクトリ下のetc\netbeans.confを開きます。今回は「I:\NetBeans\NetBeans 7.4\etc\netbeans.conf」
　
1. netbeans_default_options="..." と書かれた箇所があるので、ダブルクォートで囲まれている内側に下記を記入します。

```
-J-Dfile.encoding=UTF-8
```

以上です。
秘密鍵の設定

※超基本的な解説です※

# sshのログの確認
なんかうまくいかない時はログを見る←超基本なので覚えるべし  

```  
# cat /var/log/secure
```



##うまくいっている時の所有者とアクセス権  

クライアント(User: hoge)側  

```text  
$ ls -l ~/
drwx------.  2 hoge hoge    .ssh

$ ls -l ~/.ssh/
-rw-r--r-- 1 hoge hoge    config
-rw------- 1 hoge hoge    id_rsa
-rw-r--r-- 1 hoge hoge    known_hosts
```  


サーバー(User: root)側  

```text  
# ls -l
drwx------.  2 root root    .ssh

# ls -l ~/.ssh/
-rw------- 1 root root    authorized_keys
-rw-r--r-- 1 root root    known_hosts
```
#鍵を複数使用したい場合
  
##configの設定
192.168.x.yというサーバに対してrootでssh接続する個別の設定を作る  

クライアント(User: hoge)側  
  
```text  
$ vim ~/.ssh/config
```  
```:config
Host 192.168.x.y 
    User            root
    IdentityFile    ~/.ssh/id_rsa-hoge

```

# GitHubに鍵認証をする
凄く悩んだが簡単なことで解決した

秘密鍵: id_rsa-iganari
公開鍵: id_rsa-iganari.pub

### 秘密鍵のディレクトリ
  
```text:~/.ssh/
-rw------- 1 root root id_rsa-iganari
```
### 公開鍵の登録
github -> 「Account Setting」->「SSH Keys」->「Add SSH key」 
こちらにid_rsa-iganari.pubを登録する
### configファイルに設定を追記

```text:~/.ssh/config
+ HOST github.com
+ Hostname github.com
+ Identityfile             ~/.ssh/id_rsa-iganari

```

### 疎通確認

```
# ssh git@github.com
PTY allocation request failed on channel 0
Hi iganari! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
```
これでsuceessfullyが出ればOK
出ない場合は下記で原因を探る

```
# ssh -vvv git@github.com
```

### 余談

* 鍵の作り方


```
# cd ~/.ssh
# ssh-keygen -t rsa -C 'for iganari' -f ./iganari_rsa
```
PukiWikiで凍結解除パスワードにMD5を使用する。

あんまり流行ってない気もしますが、解凍すればほぼすぐ使える気軽さでデモ設置したので覚書

pukiwiki.inc.php に
`$adminpass = '{x-php-md5}!';`

というのがあって、公式のマニュアルには、
上記の「{x-php-md5}!」の部分を書き換えます。
とあるが、Linuxで、
`# echo 'pass' | md5sum`
`4528e6a7bb9341c36c425faf40ef32c3`

`$adminpass = '4528e6a7bb9341c36c425faf40ef32c3';`

とかしても凍結解除出来ない。
めんどくさくなって

`$adminpass = 'pass'; // Cleartext`

とかしてしまうが、やってみれば簡単

設置したPukiWikiの以下のアドレスで開いたページの値を入れる

`/index.php?cmd=md5`

そして、pukiwiki.inc.phpの記述は、こうする。

`$adminpass =’{x-php-md5}4528e6a7bb9341c36c425faf40ef32c3′;`

ちなみにデモ設置したのはここ
http://ohmylab.net/demo/wiki/pukiwiki/
postfixにsaslでリモートから認証できるようにするための最低限の設定


## 目的

postfixにリモートホストからメールを送信できるようにしたいが、最低限の認証はかけておきたい

## 前提

* ローカルホストからメール送信できる設定までは完了している
* ここではdebianを想定している
* postfixとsasl2_bin はインストール済み

## 手順

### 1. /etc/postfix/main.cf を編集

以下を追加

```
smtpd_sasl_auth_enabled = yes
```

### 2. /etc/postfix/sasl/smtpd.conf を作成

以下の設定でpostfix自身がsasldbを見るようになる

```
pwcheck_method: auxprop
```


### 3. sasldb2をつくる

debianでいれたpostfixはchrootが有効になっているため、/var/spool/postfix以下にsasldb2は設置する必要がある

```
$ sudo saslpasswd2 -f /var/spool/postfix/etc/sasldb2 -c -u `/usr/sbin/postconf -h myhostname` <username>
$ sudo chgrp postfix /var/spool/postfix/etc/sasldb2
```

### 4. restart postfix

```
sudo /etc/init.d/postfix restart
```

### 5. 確認

telnetでsmtpの認証を確認する。

まずsaslpasswd2で入力したパスワードとユーザ名からbase64エンコードした認証用文字列をつくる必要がある
以下はユーザ名test, パスワード testpassとした場合のもの

```
$ perl -MMIME::Base64 -e 'printf encode_base64("test\0test\0testpass")'
dGVzdAB0ZXN0AHRlc3RwYXNz
$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 debian.local ESMTP Postfix (Debian/GNU)
AUTH PLAIN dGVzdAB0ZXN0AHRlc3RwYXNz
235 2.7.0 Authentication successful

```

successfulとでればsasl認証はOK

## 備考

* mynetworksは適切に設定しておくように
* このままだと暗号化はされないので、basic認証と同程度のセキュリティであることに注意
Git で新しいリモートブランチをローカルに持ってくる

下記エラー出る場合
fatal: git checkout: updating paths is incompatible with switching branches.
Did you intend to checkout 'origin/remote-name' which can not be resolved as commit?

```shell-session
git remote show origin
git remote update
git fetch
git checkout -b local-name origin/remote-name
```
renameコマンドの6個の用法


コマンドラインから一括リネームできる何かを探していて見つけたのでメモ。
ざっくりテストしてますが、
間違ってたらコメントお願いします。

## インストール

```bash
brew install rename
```

## 対象ファイルの元々の命名
以下のファイルがあるとする
a_data.txt
b_data.txt
c_data.txt


## ファイル名の置換
data → test
a_test.txt
b_test.txt
c_test.txt

``` bash
rename -s data test
```

## 連番
data-1.txt
data-2.txt
data-3.txt

``` bash
// 1 が開始番号
// -Xは拡張子保護
// *.txtで.txtで終わるファイルのみを対象にする
rename -N ...1 -X -e '$_ = "data-$N"' *.txt
```


## 0埋め連番
data-003.txt
data-004.txt
data-005.txt

``` bash
rename -N 003 -X -e '$_ = "data-$N"' *.txt
```

## ファイル名の最後に文字列追加
a_data_hoge.txt
b_data_hoge.txt
c_data_hoge.txt

``` bash
// 拡張子保護の -X をつけること でないとtxt_hogeになる
rename -X -a _hoge *.txt
```

## ファイル名の最初に文字列追加
fuga_a_data.txt
fuga_b_data.txt
fuga_c_data.txt

``` bash
rename -A fuga_ *.txt
```


## ファイル名のスペースをアンダースコアに変換
a a.txt
↓
a_a.txt

```
rename --nows *.txt
```


// ドキュメント
http://plasmasturm.org/code/rename/



// 参考URL
docs http://plasmasturm.org/code/rename/
homebrew  https://formulae.brew.sh/formula/rename
10のコマンドで覚えるLinux (Unix)

90%以上の操作がこれで出来るはず。Linuxと書きましたが他のUnixでも使えます。
オプションも最低限書きます。

#### ls (LiSt)ファイル一覧の表示
`ls -l` 詳細表示
`ls -a` すべて表示
`ls -la` 上記の組み合わせ

#### cd (Change Directory)ディレクトリ移動
`cd /` ルートディレクトリに移動
`cd ../` 一つ上に移動

#### pwd (Prit Working Directory)カレントディレクトリ表示
オプションは、ヘルプとバージョンくらいですので必要ありません。

#### mkdir (MaKe DIRectory)ディレクトリ作成
`mkdir test` testというディレクトリを作る、権限(パーミッション)が無いと作れません。

#### mv (MoVe)ファイルの移動、またはリネーム
`mv aaa ../` aaaを一つ上のディレクトリに移動
`mv aaa bbb` aaaをbbbにリネーム

#### cp (CoPy)コピー
`cp aaa bbb` aaaをコピーしてbbbを作る
`cp -p aaa bbb` 属性を保持したままコピー
`cp -r aaa bbb` 再帰的にコピー(ディレクトリごと)

#### rm (ReMove)削除
`rm aaa` aaaを削除
`rm -rf dir`  ディレクトリの場合

#### less (? moreの反対とマニュアルにある) テキスト表示
`less text.txt` text.txtの中身を表示途中で止まります、スペースで次、b で戻る、qで終了
`ls -l | less` パイプを使って途中で止めれます。

#### man (MANual)マニュアル表示
`man cp` cpのマニュアル表示、man man でman のマニュアル表示、操作はlessとだいたい同じ

#### exit (EXIT)ログアウト
操作が終了したら忘れずにログアウトしましょう。

コマンドを1文字以上入力してからタブキーで補完されます。2回押すと候補が出ます。
上下キーでコマンド履歴表示

VirtualBoxとかでいくらでもインストールできる時代です、どんどん練習しましょう。
viもそのうち書きたいね。
GitHubにpush出来なかった件

つまづいたので、覚書。

Set Up Git のページを見ながらユーザー名とメールアドレスを設定
https://help.github.com/articles/set-up-git

Create A Repo にならって、Hello Worldを作成する。
ただ、publicでしか作成できなかった。
https://help.github.com/articles/create-a-repo

ローカルにはgit cloneで持ってきた。

```
 $ git clone https://github.com/user_account/project_name.git
```

git pushしようとすると下記のエラーが発生。
 could not read Username for 'https://github.com': No such file or directory

ググっていたら同一症状の人がいたので、ならってgitプロトコルで試してみる。
コマンドでURLを変更。

```
 $ git remote set-url git@github.com:user_account/project_name.git
```

git pushを試みる。。。エラー。

```
 Permission denied (publickey).
 fatal: Could not read from remote repository.
```

鍵の問題らしいので、生成してUP。
登録先は、ページの右上にある工具マークのところ。
ページが遷移したら「SSH Keys」。

```
 $ ssh-keygen -t rsa
```

これでPushしたらOKでした！


### 追記
@uasi様より情報頂きました。
当エラーはmsysgit 1.8.5.2のバグだそうです。
環境を確認してみたらまさにそれ。。。

参考で貼っていただいたURLもこちらの載せさせていただきました！


# 参考URL
1. [windowsのgit 1.8.5.2.で fatal: could not read Password for 'https://XXXXX':No such file or directoryのエラーになる](http://orangeclover.hatenablog.com/entry/2014/01/15/215758)
1. [Do not use _wfopen() for DOS device filenames #111](https://github.com/msysgit/git/pull/111)
jqのバージョンを最新にしたらjsonの処理が捗りすぎて怖い


jsonの処理は[jq](http://stedolan.github.io/jq/)に任せるとすこぶる捗るというのは有名ですが、Homebrewとかで入れた場合は、そのすごさが発揮されていないことがわかりました。

バージョン見ると1.3で最新版っぽいんですが、どうも英語マニュアルに載ってる機能のいくつかが使えなくて困っていました。

[jqのマニュアル](http://stedolan.github.io/jq/manual/) ([日本語](http://dev.classmethod.jp/tool/jq-manual-japanese-translation-roughly/)) 


英語には、splitとか便利っぽいのが載っているのですが、日本語には載っていないので、最近更新された新しい機能のようです。

[jqの最新版](https://github.com/stedolan/jq)をgitから落としてきてコンパイルして新しいjqを体験しましょう。

## 新しいjqのコンパイルでちょっとはまる

前提として、mac(mavericks)で作業してます。

作業の流れとしては、

```
$ git clone https://github.com/stedolan/jq.git
$ cd jq
$ autoreconf -i
$ ./configure
$ make
```
となるのですが、少し詰まりました。

### autoreconf

automakeを入れてないと、aclocalがないって怒られます。

```
$ brew install automake
```

### configure

configureのところで、bisonが古いって怒られます。

```
$ brew install bison
```
で新しいbisonがインストールできるのですが、/usr/local/binにシンボリックリンクが張られないので、エラーになっていました。
手動でリンク張りましょう。

```
$ cd /usr/local/bin
$ ln -s ../Cellar/bison/3.0.2/bin/bison bison
$ ln -s ../Cellar/bison/3.0.2/bin/yacc yacc
```


## split機能を使ってみる

こういうjsonファイルがあるとします。

```example.json
{"messages":[{"date":"2014-02-06T10:01:07+0900","from":{"name":"daxanya (-v-)","user_id":544xxx},"message":"https:\/\/github.com\/bowery\/orcheTstrate.js"},{"date":"2014-02-06T10:01:11+0900","from":{"name":"daxanya (-v-)","user_id":544xxx},"message":"orchestrate.js"},{"date":"2014-02-06T10:01:18+0900","from":{"name":"daxanya (-v-)","user_id":544xxx},"message":"http:\/\/www.slideshare.net\/who_you_me\/neo4j-24294061"},{"date":"2014-02-06T10:01:22+0900","from":{"name":"daxanya (-v-)","user_id":544xxx},"message":"\u30b0\u30e9\u30d5\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u300cNeo4j\u300d\u306e \u5c0e\u5165\u306e\u5c0e\u5165"}]}
```

普通にjq使うと、

```
$ cat example.json | jq '.messages[] | .date+" "+.message'
```

```
"2014-02-06T10:01:07+0900 https://github.com/bowery/orcheTstrate.js"
"2014-02-06T10:01:11+0900 orchestrate.js"
"2014-02-06T10:01:18+0900 http://www.slideshare.net/who_you_me/neo4j-24294061"
"2014-02-06T10:01:22+0900 グラフデータベース「Neo4j」の 導入の導入"
```

こういう結果が得られるのですが、もうちょっと日時のところを加工したいなーと思ってもsedとかに頼らざるを得なくて困っていたのです。

最新版ではsplitが使えるのでこういうことができます。

```
$ cat example.json | jq 'def a(f): f|split("T")|.[1]|split("+")|.[0]; .messages[] | a(.date)+" "+.message' 
```

```
"10:01:07 https://github.com/bowery/orcheTstrate.js"
"10:01:11 orchestrate.js"
"10:01:18 http://www.slideshare.net/who_you_me/neo4j-24294061"
"10:01:22 グラフデータベース「Neo4j」の 導入の導入"
```

defと併用すると、特定の要素のみにsplitが適用できるので、他の要素に影響されることなく分割できます。便利！
Enumerable.Pairwise

ここでPairwiseは、
1,2,3,... 
のようなシーケンスに対して、隣り合う2つを組にして
(1,2),(2,3),(3,4),...
というシーケンスを返す関数のことです。

これは.NET標準のEnumerableクラスにはありませんが、次のように書けます。

```csharp
// seq は IEnumerable<T>, seq2 は IEnumerable<Tuple<T,T>>
var seq2 = seq.Zip(seq.Skip(1), Tuple.Create);
```

よく忘れるのでメモ。拡張メソッドにするならこんな感じ？

```csharp
public IEnumerable<TResult> Pairwise<T, TResult>(this IEnumerable<T> e, Func<T, T, TResult> resultSelector)
{
    return e.Zip(e.Skip(1), resultSelector);
}
```
pip と wheel を windows でも使いこなす

この投稿で作成する環境は ``https://bitbucket.org/toruuetani/venv_base`` で構築できる。
``hg clone`` して ``cmd.bat`` を実行すると、 Fabric がインストールされた virtualenv 環境が構築される。

# 前提
windows PC で開発し、それを動作させるのは別の windows PC 。ただし、その PC はオフライン環境で動作する。

# なぜ今頃 pip を使いだすのか
pip はバイナリからインストールできないから。
pure python でないパッケージはソースからコンパイルしないといけないが、 linux と違って windows には C コンパイラがないことが多いため、 そういうパッケージをインストールできない。そのため windows 向けにバイナリパッケージが用意されている(XXX-1.2.1.win32-py2.7.exe など)。このバイナリパッケージは  easy_install なら問題なくインストールできるが、 pip ではインストールできない。
そのため pip がいくら進化しようと、 windows では easy_install 一択だった。

上記のような状況は wheel の登場により改善されてきている。 wheel フォーマットはバイナリも含められるため、特殊なパッケージ( pywin32, psycopg2, py2exeなど )を除いては、ほぼ pip だけで行けるようになっている。

2014/02/14 追記
-> [ここ](http://qiita.com/toruuetani/items/e717fa18fc2b87eacc28)で記述したが、 wininst2wheel でより easy_install から pip への移行が可能になっている。

# モダンな環境構築
現在 virtualenv を使わない環境は考えられないので、当然使うことにする。

* python 2.7.6
* virtualenv 1.11.2
* setuptools 2.1
* pip 1.5.2
* wheel 0.22.0

以下の説明では次のディレクトリを使う。

* $ 作業ディレクトリ
* VENV_DIR virualenv 環境の構築ディレクトリ $/tools/venv
* WHEELHOUSE_DIR wheel 格納ディレクトリ $/tools/setup/wheelhouse

## virtualenv 環境の構築
https://pypi.python.org/pypi/virtualenv/ から virtualenv-1.11.2.tar.gz をダウンロードして解凍すると、以下のようなファイルができるのでこれを使う。

* virtualenv.py
* virtualenv_support/pip-1.5.2-py2.py3-none-any.whl
* virtualenv_support/setuptools-2.1-py2.py3-none-any.whl

```
python virtualenv.py %VENV_DIR%
```

これで easy_install, pip が使えるようになる。

## wheel のインストール
https://pypi.python.org/pypi/wheel/ から wheel-0.22.0.tar.gz をダウンロードして使う。

```
pip install wheel-0.22.0.tar.gz
```

これで wheel フォーマットが使えるようになる。

## wheel の作り方
慣習的に wheel は wheelhouse というディレクトリに格納するので、これに倣っておく。

```
pip wheel %PACKAGE_NAME% -w "%WHEELHOUSE_DIR%"
```

たとえば [Fabric](http://docs.fabfile.org/) の wheel を作る場合は以下のようにする。

```
pip wheel Fabric -w "%WHEELHOUSE_DIR%"
```

そうすると依存関係を解決して wheel を作成してくれる。

* ecdsa-0.10-py27-none-any.whl
* paramiko-1.12.1-py27-none-any.whl
* pycrypto-2.6.1-cp27-none-win32.whl
* Fabric-1.8.1-py2.py3-none-any.whl

（注）現時点の pip には [バグ](https://github.com/pypa/pip/issues/1310) があるため、 PyPI に登録されていると作成してくれない。したがって Fabric-1.8.1-py2.py3-none-any.whl のみ PyPI からダウンロードする。


## wheel を使ったインストール
``pip wheel`` は wheel を作るだけなので、 実際インストールするには ``pip install`` を使って

```
pip install "%WHEELHOUSE_DIR%\Fabric-1.8.1-py2.py3-none-any.whl"
```

のようにする。この状態で ``pip freeze`` すると現在インストールされているパッケージが表示される。

```
> pip freeze
Fabric==1.8.1
ecdsa==0.10
paramiko==1.12.1
pycrypto==2.6.1
wheel==0.22.0
```

pip には ``pip freeze`` の結果をもとにパッケージをインストールする仕組みがある。上記結果を requirements.txt として保存するとパッケージを一括でインストールできる。なお、 wheel を作成済みで  PyPI を検索する必要はないため、 ``--no-index`` をつけておく。
ある程度パッケージが多くなったら、こちらの方法が便利だろう。

```
pip install -r requirements.txt -f "%WHEELHOUSE_DIR%" --no-index
```


# まとめ
wheelhouse に格納した wheel があれば、オフライン環境でも環境は構築できる。現状ではまだ一部 easy_install に頼らざるを得ないが、十分実用的と言えるだろう。
freenodeの追加方法(Limechat/Win)

# freenodeの追加方法(Limechat/Win)

## 右下のチャンネル一覧の何もないところで右クリック、「サーバの追加」
![スクリーンショット 2014-02-08 21.58.45.png](https://qiita-image-store.s3.amazonaws.com/0/37234/6c4f1a87-a2de-2ff9-2289-86972ee7d584.png)

## ホスト名に **"chat.freenode.net"** (ポート **"6697"**, **SSLにチェック**), 文字コード **"UTF-8"** を指定し追加します。(ニックネームは適宜変えてください)
*文字コードの設定忘れやすいので注意してください！！*

![スクリーンショット 2014-02-09 10.05.38.png](https://qiita-image-store.s3.amazonaws.com/0/37234/20721346-eac5-23a0-469e-b97fafb961be.png)


## チャンネルを追加します
![スクリーンショット 2014-02-08 22.00.01.png](https://qiita-image-store.s3.amazonaws.com/0/37234/474bc754-972b-bbcf-1a3c-2896ec084257.png)

![スクリーンショット 2014-02-08 22.00.18.png](https://qiita-image-store.s3.amazonaws.com/0/37234/08856744-08a5-2a5a-ee35-2a70a9c50055.png)

## あとはサーバを右クリックして接続すればOK！お疲れ様でした！

# freenode の便利機能

## nickserv, chanserv

freenodeにはニックネーム登録制度"nickserv"機能およびチャンネル乗っ取り防止機能"chanserv"機能があります。登録しなくても使えますが、興味のある人はぜひどうぞ。
http://bit.ly/3bZVxp
CentOS起動しない！

CentOS6.5が起動時に現れる最初のプログレスバーから先に進まず、起動しないという問題に対して、応急処置的ですが対応をまとめてみました。
良かったら読んでみて下さい。
http://infotech776.blog.fc2.com/blog-entry-36.html
msdnのC#チュートリアルでつまずいた点まとめ 

C#に興味がわいたのでmsdnのチュートリアルを行った。
[C#チュートリアル](http://msdn.microsoft.com/ja-jp/library/aa288436%28v=vs.71%29.aspx)

# 前提
VS Express 2013 for Windows Desktop

# Hello World
まずは基本のHello World表示。
何も問題ないと思っていたが、例３でつまづいた。

## 例３
以下で入力したいコマンド引数を設定できる
Solutoin->プロパティ->デバッグ

## まとめ
C++をやってきたから、C#のコーディングが楽でしょうがない。

# コマンドラインパラメータ
つまづいた点はなし。

## foreach文の書き方
```csharp
foreach(string s in args)
{
    Console.WriteLine(s);
}
```

## まとめ
foreach文は配列等の全てのパラメータの走査に便利そう。

#配列
## 配列の宣言の仕方
```csharp
// 1次元
int[] numbers = new int[5];

//多次元配列
string[,] names = new string[5,4];

//配列の配列 (ジャグ配列)
byte[][] scores = new byte[5][];
for (int x = 0; x < scores.Length; x++) 
{
   scores[x] = new byte[4];
}
```

## 配列の初期化
```csharp
//１次元配列
int[] numbers = {1, 2, 3, 4, 5};

// 多次元配列
int[,] numbers = { {1, 2}, {3, 4}, {5, 6} };

// ジャグ配列
int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

## まとめ
多次元配列の初期化が直観的でよいな。

```
RedmineにREST apiでアクセスするgit subcommandをRubyのActiveResourceを使って作ってみた


## はじめに
Rubyは初めてさわりました。なんとかgitのsubcommandがつくれましたが、動作はするもののコード的に書き方が正しいのかよくわかりません。なのでとりあえずgistで公開。

## 置き場所
[gist](https://gist.github.com/mm-git/026bde752ad2581a73d9)

## 使い方
git configに下記の設定をします。

```
git config redmine.url https://hoge.com/
git config redmine.apikey yourKey
git config redmine.project yourProjectName
```

### チケット一覧表示
`git redmine`

### n番のチケットタイトル表示
`git redmine n`

### n番のチケットステータス変更
`git redmine issue n status_id`

### バージョンのステータス変更
`git redmine version versionName [open|closed]`


## 予定
カスタムフィールドの設定、取得を作る必要があるので、公開するかも。