OmniAICreator/Qiita-1.07M huggingface dataset:
EclipseユーザのためのXcodeショートカットキー

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

Eclipseのショートカットキーに慣れた、XcodeデビューするDeveloperに捧ぐ。
（つもりで書き始めたが、途中から単なるリファレンスになってしまった・・・後悔はしていない）

多くのショートカットはWeb記事や人づてで知ったもの。

本文中の表記
==========

|表記|キー名|
|:--|:--|
|Cmd|Commandキー|
|Ctrl|Controlキー|
|Opt|Optionキー|

ナビゲーション操作
===============
とりあえず **Cmd + Shift + O** と **Cmd + Shift + J** を覚えると幸せになれる。

|Eclipse|説明|操作|補足|
|:--|:--|:--|:--|
|型を指定して開く|ファイル名を指定して開く|Cmd + Shift + O|入力後 Opt + Enter で分割したエディタで開く
|エディタと同期|ナビゲーションと同期|Cmd + Shift + J|Cmd + Shift + O の直後に使うと便利
|戻る/進む|戻る/進む|Cmd + Ctrl + Left/Right
|クイックアウトライン|メソッドや定義に移動|Ctrl + 6
|ワークスペースを検索|全体検索|Cmd + Shift + F

エディタ操作
==========
Eclipse(JDT)最強コマンドの1つであるインポート編成は使えない。（おそらく言語仕様上の問題）
とりあえず、 **Ctrl + I** を覚えれば幸せになれる。

|Eclipse|説明|操作|補足|
|:--|:--|:--|:--|
|入力補完|-|ESC or Ctrl + Space
|フォーマット|ソースの整形|Ctrl + I|**I**ndent
|検索|検索|Cmd + F|**F**ound
|置換|置換|Cmd + Opt + F
|インポート編成|-|-|XcodeというかObjective-Cでは出来ないかも
|宣言にジャンプ|定義に移動|Ctrl + Cmd + J or Cmd + クリック
|行番号を指定してジャンプ|-|Cmd + L|**L**ine
|コメントアウト/解除|-|Cmd + /
|名前変更|スコープ内の名前を一括変更|Ctrl + Cmd + E|リファクタリングによる名前変更より圧倒的に高速
|JavaDocコメント生成|ドキュメンテーションコメント|///|[VVDocumenterPlugin](https://github.com/onevcat/VVDocumenter-Xcode)必須

ビルド
=====
iOSアプリの開発だと頻繁にするので覚えると幸せ。

|Eclipse|説明|操作|補足|
|:--|:--|:--|:--|
|実行|-|Cmd + R|**R**un
|ビルド|-|Cmd + B|**B**uild
|クリーン|-|Cmd + Shift + K
|中断|-|Cmd + .

デバッグ
======
このあたりのキーバインドはEclipseと一緒。
ただ、Macのキー配列だとFunctionキーが独立していないキーボードが多いので少し（かなり）使いづらい。

|Eclipse|説明|操作|補足|
|:--|:--|:--|:--|
|ステップオーバー（F6）|-|F6
|ステップイン（F7）|-|F7
|ステップアウト（F8）|-|F8
|ブレークポイントの有効化/無効化|-|Cmd + Y

リファクタリング
==============
デフォルトではショートカットキーは割り当てられていない。
必要に応じて設定のKey Bindingsから割り当てると便利。

|Eclipse|説明|操作|補足|
|:--|:--|:--|:--|
|名前変更|変数やメソッド名を変更|-|Ctrl  + R（Rename）がオススメ|
|メソッドの抽出|処理の抽出|-|Ctrl + M（Method）がオススメ
|スーパークラスの作成|-|-|Ctrl + S（Super）がオススメ
|スーパークラスに移動|-|-|Ctrl + U（Up）がオススメ
|サブクラスに移動|-|-|個人的にはあまり使わない
|Getter/Setterの生成|カプセル化|-|Objective-Cでは@propertyを使うのが定石。

ソース管理
========

|Eclipse|説明|操作|補足|
|:--|:--|:--|:--|
|コミット|コミット用ダイアログを開く|Cmd + Opt + C

Xcode
=====
Xcodeに特化したもの。とりあえずメモしておく。

|説明|操作|補足|
|:--|:--|:--|
|ナビゲーターの表示/非表示|Cmd + 0|左領域のこと
|ユーティリティーの表示/非表示|Cmd + Opt + 0|右領域のこと
|Welcomeウィンドウを表示|Cmd + Shift + 1
|Organizerウィンドウを表示|Cmd + Shift + 2
Djangoにsocketioを導入する際に起きた謎現象

http://gevent-socketio.readthedocs.org/en/latest/

```
pip install gevent-socketio
```

をするとsocketioというモジュールも一緒に付いてくるのだが、この中にあるnamespace.pyというファイルは

```
pip install django-socketio
```

によってどういうわけか消滅する模様。

#### 自分の環境に原因があるのかもしれないが・・・・・
Knockout.js の if, ifnot, visible バインディングが View に反映されるまで要素を非表示にする

## CSS で一時的に非表示に。
```css
/* for knockout.js */
*[data-bind^="visible"], *[data-bind^="if"] {
  visibility: hidden;
}
body.visible *[data-bind^="visible"], body.visible *[data-bind^="if"] {
  visibility: visible;
}
```

## 反映後に表示。
```js
// view model bindings
var view = new ViewModel();
ko.applyBindings(view);
document.body.className += "visible";
```

更にエレガントな方法があれば教えて下さい！

## [追記] エレガントな方法
```html
<ul data-bind="foreach: items, visible: true" style="display: none">
  <li data-bind="text: name"></li>
</ul>
```
Knockout.js でデータバインディングを行う一番外側の要素に、上記のように `style`, `data-bind` を指定すると、完了した時点で表示される。

```html
<div data-bind="visible: false">読み込み中...</div>
```
逆にこのように書くと、データバインディングが行われるまでメッセージを表示させることも出来る。
[参考](http://stackoverflow.com/questions/9532595/what-is-the-best-way-to-hide-the-screen-while-knockout-js-bindings-are-being-bui/13977553#13977553)
細か過ぎて伝わらない地図関連データ加工ツール2題作りました


まさに俺得なだけの小ネタツール2題作りました。
誰がいるねん＆Macの.NETで作って誰が使うねん…。

# Tile2MBTiles

https://github.com/tilemapjp/Tile2MBTiles

既にタイルを作ってしまったディレクトリから、タイル画像を読み込んでMBTilesを作成します。
[MBTiles](https://www.mapbox.com/developers/mbtiles/)が判らない人には多分不要の代物です。

MapTilerで生成できるじゃんとか言わない。
既に先に作ってしまったタイルデータがあって、後からMBTilesが欲しくなった時とかに地味に便利。

# WorldFileResolver

https://github.com/tilemapjp/WorldFileResolver

投影系が判っていてマッピングポイントのセットもある絵地図画像の、ワールドファイルを計算で生成します。
[ワールドファイル](http://en.wikipedia.org/wiki/World_file)が判らない人には多分不要の代物です。

QGISのgeoreferencerでできるじゃんとか言わない。
既にマッピングポイントセットがある時にコマンドラインだけで使えるのと、複数の投影系を振って計算中途の座標値で分散を取って、正しい投影系を推定するためのライブラリを作るベースとして作成。

# 1000年に1度くらいは

誰か使うんじゃないかな…。
画像やブロックの高さを考慮しながら親要素の中央に配置させるjQuery拡張

## ちょうど真ん中の位置になるようにmargin-topを設定してるだけ

vertical-alignを使えない時とかのために。
微妙に毎度毎度使うので備忘。

```js
(function($){
	$.fn.verticalMiddle = function() {
		this.each(function(){
			var $this = $(this);
			var _height = $this.height();
			var _parent_height = $this.parent().height();
			$this.css('marginTop',(_parent_height/2) - (_height/2));
		});
		return this;
	};
})(jQuery);

```

## 使い方


```js
$(function(){
	$('.top-logo').verticalMiddle();
});
```
Vimでerbのインデントが微妙な人が入れると良いかもしれないプラグイン

filetypeの付加をしなくてよさそうなので，完全に以下の記事と同じ方法になってしまいました．
http://alice345.hatenablog.com/entry/2014/01/09/233747

# 症状
erbの次の行をインデントしてくれない．

``` erb
<ul class="nav">
  <% @entries.each do |entry| %>
  <li class="hoge">
    <%= link_to entry_path(entry) %>
  </li>
  <% end %>
</ul>
```

# 解決法
- html5.vimを入れる．
https://github.com/othree/html5.vim

## 手順
NeoBundleを使っている前提です．

1. `NeoBundle 'othree/html5.vim'`を追加
2. `:NeoBundleInstall`

以上となります．

それから，html5-vimには特にerbについて明示されていない気がするのですが，ひとまずインデントしてくれるようになったのでよしとします．


（追記）
初回投稿時に

- 拡張子が*.erbのファイルにfiletypeを追加

``` .vimrc
autocmd BufRead,BufNewFile *.erb set filetype=eruby.html
```

という手順を書いていたのですが，どうやら設定しなくても動作しそうです．

# 参考文献
http://kadoppe.com/archives/2011/09/vim-html5-highlight-indent-erb.html
http://alice345.hatenablog.com/entry/2014/01/09/233747
を参考にしました．

# 余談：filetypeの確認方法
```
:echo &filetype
```

メモ程度の記事なので，間違っている点などはコメントをいただけたら嬉しいです！
javascriptでprivate変数とメソッドを定義する方法

javascriptには、javaで云うアクセス修飾子が言語上存在しない為、
オブジェクト内の要素はパブリックとなる。
クロージャを使うことにより、外部から参照が不可能な変数・メソッドを定義することが可能です。
以下にサンプルソースを記載しています。


```js

// オブジェクトの定義
var obj = function() {

    // プライベート変数の定義
    var privateVar = 'プライベート';
    // プライベート変数の定義
    var privateFunc = function() {
        alert(privateVar)
    };

    var F = function(){};

    // パブリックファンクション定義
    // 内部でprivateメソッドにアクセス
    F.prototype.publicFunc = function() {
        privateFunc();
    }; 
    return new F();
};

var testObj = obj();

// publicにアクセスしてみる。
testObj.publicFunc(); // プライベートが表示

// privateにアクセスしてみる
alert(obj.privateVar); // undefinedとなりアクセス不可！

alert(obj.privateFunc()); // TypeErrorとなりアクセス不可！

```

privateVarとprivateFuncについては、外部から直接アクセスは不可で
publicなpublicFunc経由でしかアクセスできない様になっています。
PHPUnitのDBUnit拡張を使ってデータをXMLやYAML形式にエクスポートする

PHPUnitのDBUnit拡張を使うと、既存のDB上のデータをDataSetとして利用可能なファイル形式でエクスポートできます。また、XMLからYAMLへの変換等もできます。

エクスポート可能な形式は、FlatXmlDataSet、MysqlXmlDataSet、XmlDataSet、YamlDataSetです。

PHPUnit自体は不要なので、composerを使う場合は`composer.phar require --dev phpunit/dbunit:1.2.*`で良いでしょう。phar版PHPUnitはこのような用途（PHPUnit内の一部の機能だけ使いたい）では向いていないようです。

```php
<?php
require_once 'vendor/autoload.php';
// PEARの場合は require_once "PHPUnit/Extensions/Database/Autoload.php";

$pdo = new PDO(DSN, DB_USER, DB_PASS);
$con = new \PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection($pdo);

// 指定したテーブルをエクスポートする
$dataSet = $con->createDataSet(array("table1", "table2"));
// $dataSet = $con->createDataSet(); だとすべてのテーブルをエクスポートします

// DBからYAMLへ変換
\PHPUnit_Extensions_Database_DataSet_YamlDataSet::write($dataSet, "dataset.yml");

// YAMLからXMLへ変換
$yaml = new \PHPUnit_Extensions_Database_DataSet_YamlDataSet("dataset.yml");
\PHPUnit_Extensions_Database_DataSet_FlatXmlDataSet::write($yaml, "dataset.xml");

// クエリの結果をエクスポートする
$queryTable = $con->createQueryTable('users', 'SELECT * FROM users ORDER BY name LIMIT 1');
$dataSet = new PHPUnit_Extensions_Database_DataSet_DefaultDataSet(array($queryTable));

\PHPUnit_Extensions_Database_DataSet_YamlDataSet::write($dataSet, "query.yml");

```
Dropboxで複数マシン間でVagrant開発環境を同期している時に、vagrant upで既存仮想マシンが利用されない問題

MacBook AirとMac Mini間で同じ開発環境を使用するため、Vagrantを使い、かつ`Vagrantfile`、provision内容、カスタムボックス、設定ファイルなど一式をDropboxで同期していました。

ただ、困ったのが一方のマシン（VM未作成）でVMを作ると、もう一方のマシン（VM作成済）で`vagrant up`しても作成済のVMを使わず、新たにBoxをインポートしてVMを作ってしまうこと。

調べてみると、VagrantはVMを作成した際に、そのVMのID情報を`Vagrantfile`があるディレクトリと同じ場所に`.vagrant`フォルダとして作成しているようでした（Vagrantの以前のバージョンでは`.vagrant`*ファイル*だったようです）

参考：[Vagrantの仮想マシンとの紐付けの直し方](http://douzen.net/vagrant-fix-associate-wrong-vm-boot)

つまり原因は、一方のマシンでVMが作られ、同期されることで、紐付情報が変わってしまうことでした。もう一方のマシンは「あれ、紐付け先のVMないじゃん。じゃあ、boxから作っちゃおーと」という感じで作成してしまっていたということですね・・。

なので、Dropboxの選択型同期機能で.vagrantフォルダを同期対象から外すことで解決しました。初歩的なところで結構つまづきました・・

参考：[Dropboxで特定のファイルやフォルダを同期することができる「選択型同期」がかなり熱い！](http://gori.me/mac/32138)

追記：
同期する場合は、[UUID（紐付情報）を変更する](http://ri.hateblo.jp/entry/2013/10/22/232749)＆`.vagrant`フォルダ以下の紐付け情報を更新する、でもいいと思う。面倒なので試してないけど！
OSXで特定のアプリケーションだけを英語で起動する

OSXの言語を日本語のままで特定のアプリケーションだけを英語で起動する方法

```
defaults write -app アプリケーション名 AppleLanguages "(en, ja)"
```

例えば SourceTree を英語で起動するならこうする

```
defaults write -app SourceTree AppleLanguages "(en, ja)"
``` 

元に戻すときはこうする。

```
defaults delete -app アプリケーション名 AppleLanguages
```
Boxen環境下のrbenvでruby 2.1.0をinstallする。

Macで[Boxen](http://boxen.github.com)を使ってrbenvをインストールした場合、rbenvは以下のパスになる。

`/opt/boxen/rbenv`

ruby2.1.0にするためには`ruby-build`をupdateする必要があるが、boxenを使った場合、`ruby-build`は

`/opt/boxen/rbenv/plugins/ruby-build`

に位置するのでこれをupdateする。

```
cd /opt/boxen/rbenv/plugins/ruby-build
git pull

# pull 出来なければ
mv ruby-build ruby-build_bk # とりあえずバックアップ
git clone https://github.com/sstephenson/ruby-build
```

そして
`rbenv install -l`
をすると
` 2.1.0` が存在するのでこれをインストールする

```
rbenv install 2.1.0
rbenv local 2.1.0
```

でruby 2.1.0 にバージョンアップ完了。

2.1.0、速い！！！！
【PHP】++$varと$var++の違い


##結論

インクリメントされるタイミングが異なる。

##説明


| 演算子 | 名称 | 返り値 |
|:--------|:--------|:--------|
| $var++ | 後置インクリメント  |$var|
| ++$var | 前置インクリメント  |$var + 1|
| $var-- | 後置デクリメント  |$var|
| --$var | 前置デクリメント  |$var - 1|

> 参考：プログラミングPHP(O'REILLY)

+ 後置インクリメント(デクリメント)は、インクリメント(デクリメント)する前に元の値を返す。
+ 前置インクリメント(デクリメント)は、インクリメント(デクリメント)した後で新しい値を返す。

文字よりコードを見た方が分かりやすいです。

###後置インクリメント

```php
<?php
$var = 1;
echo '$var++は、' . $var++; #インクリメントする前に元の$var = 1を返す
echo '$varは、' . $var;     #インクリメントした後の新しい値を返す
#$var++は、1
#$varは、2

```

###前置インクリメント

```php
<?php
$var = 1;
echo '++$varは、' . ++$var; #インクリメントした後の$var = 2を返す
echo '$varは、' . $var;     #既にインクリメントされているので$var = 2
#++$varは、2
#$varは、2
```

###ベンチマーク

PHP 5.5.6
前置インクリメント(デクリメント)の方が最大3.8%ほど速かったが、誤差の範囲内ではなかろうか。
(++$iを2回行っているのは、初めの++$iが何故かかなり遅くなるため)

![SS 2014-01-25 16.00.10.png](https://qiita-image-store.s3.amazonaws.com/0/18573/983bb13b-88ff-1d36-3424-32181607cd6b.png "SS 2014-01-25 16.00.10.png")



```php
<?php
require_once('Benchmark/Timer.php');

function before_inc($num) {
	for($i = 0; $i < $num; ++$i) {

	}
}

function after_inc($num) {
	for($i = 0; $i < $num; $i++) {
		
	}
}


function before_dec($num) {
	for($i = $num; $i > 0; --$i) {
		
	}
}

function after_dec($num) {
	for($i = $num; $i > 0; $i--) {
		
	}
}

$num = 10000;
echo $num . "\n";

$timer = new Benchmark_Timer();
$timer->start();

before_inc($num);
$timer->setMarker('++$i_1');

before_inc($num);
$timer->setMarker('++$i_2');

after_inc($num);
$timer->setMarker('$i++');

before_dec($num);
$timer->setMarker('--$i');

after_dec($num);
$timer->setMarker('$i--');

$timer->stop();
$timer->display();

```


##参考
[プログラミングPHP 第2版](http://www.amazon.co.jp/exec/obidos/ASIN/4873113423/ikemonn-22/)

[前置インクリメントと後置インクリメントの違い](http://d.hatena.ne.jp/yosshi71jp/20090524/1243179793)

[PHPパフォーマンスベンチマーク 後置加算・後置減算(++, --)より前置加算・前置減算(++, --)が高速](http://kaworu.jpn.org/kaworu/2008-01-29-2.php)
Numpyで行列の連結

【追記】 学生のときに血迷ってこのようなメモを書きましたが、冷静に```np.concatenate```を使って下さい: https://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html

---

どっちがどっちかよく忘れるのでメモ．

``` python
>>> import numpy as np
>>> a = np.array([[1,2,3], [4,5,6]])
>>> b = np.array([[7, 8, 9], [10, 11, 12]])
>>> c = np.array((1, 2, 3))
>>> d = np.array((4, 5, 6))

>>> a
array([[1, 2, 3],
       [4, 5, 6]])

>>> b
array([[ 7,  8,  9],
       [10, 11, 12]])

>>> c
array([1, 2, 3])

>>> d
array([4, 5, 6])

>>> np.r_[a, b]
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

>>> np.c_[a, b]
array([[ 1,  2,  3,  7,  8,  9],
       [ 4,  5,  6, 10, 11, 12]])

>>> np.r_[c, d]
array([1, 2, 3, 4, 5, 6])

>>> np.c_[c, d]
array([[1, 4],
       [2, 5],
       [3, 6]])

```
gitでローカルにあるブランチをリモートにpushする

ローカルに以下のブランチがあるとします

```
$ git branch
master
my-work
travis
```

```push_git.rb
list = `git branch`
puts list
lists = list.split("\n")
lists.each do |branch|
  branch = branch[2..-1]
  `git push -f origin #{branch}`
end
```

以下でoriginにpushします。

```
$ ruby push_git.rb
```
PlayFramework 2.2を本番環境で稼働

PlayFramework 2.2からプロダクションモードでの開始スクリプトの場所が変わりました。

```shell-session:2.1以前
play clean compile stage
./target/start > /dev/null 2>&1 &
```

下記のようにパスが変更されています。

```shell-session:2.2以降
play clean compile stage
./target/universal/stage/bin/[app_name] > /dev/null 2>&1 &
```

TomcatやJBossで動作させている方も多いと思いますがNettyでそのまま運用することもおすすめです。
playをそのまま使いこなせばCIで無停止運用も十分可能です。（もちろんTomcatやJBossでも可能ですが）

それはまた別の記事で。
Macで使えるPostgreSQL GUI client

最近Mac+Heorku+PostgreSQLでアプリを作ることが多いので、GUIクライアントをいくつか試しました。

なお、他のDBでは

- MySQL: [Sequel Pro](http://www.sequelpro.com/)
- SQLite 3: [Base 2](http://menial.co.uk/base/)

を使っています。


# [PG Commander, a PostgreSQL client for Mac](https://eggerapps.at/pgcommander/)

![ss 2014-01-25 at 9.28.27.png](https://qiita-image-store.s3.amazonaws.com/0/7567/4b7c89d2-a595-c0d0-f52e-e8e000aeec10.png)

![ss 2014-01-25 at 9.35.13.png](https://qiita-image-store.s3.amazonaws.com/0/7567/b12ec9e9-4d04-94b7-2aae-df23c93a62d0.png)

- 今のところ一番使いやすい
- 有料(今日現在: ¥5,200)
    - もうちょっと使ったら払ってしまおうかと思っている
- 無料でも使える
    - 接続先の保存は5件まで
    - 複数ウィンドウを開けない
        - (`PG Commander.app`を複製することで回避可能？)
- HerokuのPostgreSQLに接続する方法
    - `heroku config`して、`DATABASE_URL`をクリップボードにコピー(Command+C)
    - PG Commanderを起動して、`New Favorite`を押すとDB情報が入力済になっている
    - あとはNicknameを付けて接続するだけ

# [Induction; A Polyglot Database Client For Mac OS X](http://inductionapp.com/)

- オープンソース
- まだαリリースで不安定
- "Induction supports PostgreSQL, MySQL, SQLite, Redis, and MongoDB"
- [hangs when connect to heroku postgres · Issue #67 · Induction/Induction](https://github.com/Induction/Induction/issues/67)
    - 最新版だとherokuのPostgreSQLにつなぐとフリーズするので、ここで別のビルドが配布されてる
- HerokuのPostgreSQLに接続する方法
    - `DATABASE_URL`を直接入力可能

# [pgAdmin: PostgreSQL administration and management tools](http://www.pgadmin.org/)

![ss 2014-01-25 at 9.53.21.png](https://qiita-image-store.s3.amazonaws.com/0/7567/d6fb1193-745d-ef31-b9be-987ec31eeb17.png)

- UIがアレ
- HerokuのPostgreSQLに接続する方法
    - 地道にusername等を入力
    - 大量のDBから自分のDBを探すのが面倒

# [DBeaver - Universal Database Manager](http://dbeaver.jkiss.org/)
![ss 2014-01-25 at 10.03.44.png](https://qiita-image-store.s3.amazonaws.com/0/7567/1750eb02-dd20-8c95-eee4-fcd7dac8e022.png)

- データのロードが遅い
- データの編集方法がカラムごとにポップアップが出て面倒
- HerokuのPostgreSQLに接続する方法
    - 地道にusername等を入力
        - driverでSSLオプションを選択する必要がある

# [Tuples - PostgreSQL database management tool for Mac OS X](http://www.tuplesapp.com/)

- 有料(30USD, 30日のトライアルあり)
- "first native client for PostgreSQL for Mac OSX"らしい。
- データをちょっと確認したい時に、毎回SQL書く必要があって面倒

# See also:

- [Community Guide to PostgreSQL GUI Tools - PostgreSQL wiki](http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools#PG_Commander)
[Ruby]基礎から日記。入力と出力って鏡みたいでややこしい。

引き続き[筑波大学](http://klis.tsukuba.ac.jp/klib/index.php?plugin=attach&refer=KISL%2Ftop&openfile=ruby.pdf)の問題でございます。また苦手な```while true```です。

```rb:[Ruby-43]
io = open("foo.txt", "r")
while true
	line = io.gets
	print(line)
	if line == nil
		break
	end
end
io.close
```

```while true```の何がtrueやねん。line〜endまでがtrueなら、という解釈でいいんでしょうか……。

ioでテキストファイルを開いて、lineでテキストファイルの中身を読み取って出力。nilはテキストファイルの中身がこれ以上読み取れませんでしたよ、という時点でbreakする。というわけで厳密な仕組みはともかく動くことは分かった。

と、ここまでやってみて2つのファイルを同時に開いて出力（入力？）するにはどうしたらいいんだろう。

```io = open("foo.txt", "hoge.txt", "r")``` と続けてファイル名を指定してはダメなようだ。というわけで、

```rb
io = open("foo.txt", "r")
io2 = open("foxo.txt", "r")
while true
	line = io.gets
	line2 = io2.gets
	print(line, line2)
	if line && line2 == nil
		break
	end
end
io.close
io2.close
```

と書いてみたら、最初のファイルを1行目しか読んでくれないという始末。```line && line2```のところがおかしいのかな？
Blocksの構文(syntax)まとめ


変数なら

```ObjC
returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};
```

propertyなら

```ObjC
@property (nonatomic, copy) returnType (^blockName)(parameterTypes);
```

仮引数なら

```ObjC
- (void)someMethod:(returnType (^)(parameterTypes))blockName {...}
```

実引数なら

```ObjC
[someObject someMethod: ^returnType (parameters) {...}];
```

typedefなら

```ObjC
typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...};
```
[Ruby]基礎から日記。input

[筑波大学](http://klis.tsukuba.ac.jp/klib/index.php?plugin=attach&refer=KISL%2Ftop&openfile=ruby.pdf)の問題をまだやっている。分からないことばかりだ。Qiitaで一番レベルが低いことは重々承知。でも出力していかないと上達しないらしいので、がんばる。

```rb:Ruby-42
filename = "foo.txt"
input = open(filename, "r")
line = input.gets
line.chomp!
print("Contents is ", line, "\n")
input.close
```

まず`` ` ``自体をようやくキーボードから入力できた。``esc``の下にキーがあったなんて……。右側から``shift``+``option``押しながら全部のキーを押して回ったよ。前も英語キーボードだったはずなんだけど、13インチと15インチでは大分キーの印象がちがう。それでもキーボードの場所を把握できなくなったらボケの始まり、という変な固定概念を持っているので、たくさん入力してたくさん間違えないと。

今回まちがった、というか勘違いしていたのはinputなのにディレクトリにないファイル名を指定していたこと。前回がoutputでファイルを作成したのだから、今回はinputで読み込む、という当然のことに気が付かなかった。

それでも`` "r" ``は読み取りだ、とか`` chomp! ``は改行削除だ、などいろいろ分かっているような気がしてきた。
[Grails]PostgreSQLのsequenceについて

参考
http://nobeans.hatenablog.com/entry/20091030/1256896937
http://stackoverflow.com/questions/2822623/how-to-set-up-an-insert-to-a-grails-created-file-with-next-sequence-number

GrailsでPostgreSQLを使う場合、デフォルトだとPostgreSQLのsequenceが利用されない。
以下のように各ドメインに自分のsequenceを定義することで利用できるようになる。


```groovy
package hoge

class Test{

    String word
    static constraints = {
    }
    static mapping = {
        id generator:'sequence', params: [sequence:'test_id_seq']
    }
}
```

ただし、これだと実は落とし穴があって、GrailsがCreateDropモードの場合は、上記のsequenceも含めてテーブルを全部自動生成してくれるけど、 **そのテーブルのidには、属性としてそのsequenceのnextvalが指定されない。**
そのため、生のSQLでidを省略すると、 **idにnullは許されないぜ！** というエラーが当然発生する。

以下はその条件でGrailsによって自動生成されるテーブルの定義

```sql
-- こっちがテーブル
mydb=# \d test
     Tabelle public.test
 Spalte  |          Typ           | Attribute
---------+------------------------+-----------
 id      | bigint                 | not null
 version | bigint                 | not null
 word    | character varying(255) | not null
Indexe:
    "test_pkey" PRIMARY KEY, btree (id)

-- こっちがsequence
mydb=# \d test_id_seq
     Sequenz public.test_id_seq
    Spalte     |   Typ   |           Wert
---------------+---------+---------------------------
 sequence_name | name    | test_id_seq
 last_value    | bigint  | 4
 start_value   | bigint  | 1
 increment_by  | bigint  | 1
 max_value     | bigint  | 9223372036854775807
 min_value     | bigint  | 1
 cache_value   | bigint  | 1
 log_cnt       | bigint  | 32
 is_cycled     | boolean | f
 is_called     | boolean | t
```

**id** のAttributeにnextvalが指定されていないので、以下のようなSQLがエラーになる。

```sql
INSERT INTO test (version,word) VALUES(1, 'aaa')
```

Grails自体は、ドメインに指定されたsequenceの情報を知っているので、ちゃんと生成したsequenceを使ってくれる。
でも、PostgreSQL自体は、上のテーブル定義を見れば分かるとおり、testテーブルのidに対応するsequenceの情報がどこにも書かれていないので、INSERT時にidが省略された場合、自動でsequenceを利用することが出来ない。

本来は以下のようなテーブル定義になる必要がある。
こうすれば、idを省略すると、nextvalが指定されているので自動的にPostgreSQLがそのsequenceを利用してくれる。

```
                          Tabelle public.test2
 Spalte |   Typ   |                       Attribute
--------+---------+--------------------------------------------------------
 id     | integer | not null Vorgabewert nextval('test2_id_seq'::regclass)
 name   | text    |

```

Grailsの用意している機能を使ってデータベースを利用する場合は、sequenceを使おうが使うまいが特に問題はない。
問題になるのは、SQL(INSERT)を自分で書いて実行する場合。

対応策としては以下の2点がある
1.テーブルとsequenceは全て自分で生成する or 後からnextvalを追加する。
2.SQLを直接実行する際には、idをちゃんと指定する。


2番の場合は以下のような感じになる。

```groovy
def query = "INSERT INTO test (id,version,word) VALUES(nextval('test_id_seq'),?,?)"
sql.executeInsert(query, [1,"test-data-a"])
```

ちなみにサービスの中でSQLを直接実行してもちゃんとロールバックできる。
Xcodeのコマンドラインツールを入れる (Xcode 5.0)


Xcodeのコマンドラインツールを入れるのは、バージョンによって一緒に入っていたり、別途入れなきゃいけなくて大変だったりするのですが、Xcode 5.0 ではコマンドラインツールを導入するためのコマンドが用意されているようです。

今回確認したのは **Xcode 5.0.2** です。

![Xcode 5.0.2.png](https://qiita-image-store.s3.amazonaws.com/0/8760/d8ac04e1-ecc1-5bef-02d3-974ead4d647a.png "Xcode 5.0.2.png")

コマンドラインツールがまだ導入されていない場合、また前のバージョンのXcodeからバージョンアップをした場合、`xcode-select` というコマンドがあるので、おもむろに実行します。このコマンドは XCode そのものがインストールされてなくても Mavericks には存在しているようです。

![xcode-select cli.png](https://qiita-image-store.s3.amazonaws.com/0/8760/3c555234-f3de-c3ac-c14b-bd76aadb9612.png "xcode-select cli.png")

そうするとダイアログが表示されて、あとはそれに従っていくだけです。

![xcode-select gui.png](https://qiita-image-store.s3.amazonaws.com/0/8760/2c64badd-ed03-6951-1645-70fe0c3bdec9.png "xcode-select gui.png")

細かな認識違いなどあるかもしれませんが、とりあえずこの手順で Xcode 5.0.2 のもと、コマンドラインツールを手軽に入れることができました。
Emacsのhelmで簡単にroot権限でファイルを開く

Emacsで書き込み権限のないファイルに書き込みしたい場合、

```
sudo emacs
```

すれば良いわけですが、Emacsって起動遅いし今起動してるEmacsで書き込みたいわけです。
で、ぐぐると

- [Emacsの中でsudoする方法 ～これでrootによる操作も楽々～ - (rubikitch loves (Emacs Ruby CUI Books))](http://d.hatena.ne.jp/rubikitch/20101018/sudoext)
- [tramp - Emacsでsudoしつつファイルを開く方法 - DQNEO起業日記](http://dqn.sakusakutto.jp/2011/08/tramp-emacs-sudo.html)

こんな感じの記事が出てくるんですが、わざわざ拡張入れるほどのことでもないし、`/sudo::/`とか忘れるし、パスを一から入力しないといけないの面倒だったりするわけです。

けど大丈夫。そう、`helm`ならね。

# やり方要約

1. `helm`のファイル選択画面で編集したいファイルをフォーカスしてタブを押す
2. `find file as root`を選択

以上

# やり方詳細
`helm-mini`とか開いたらこんな画面になるじゃないですか

![スクリーンショット 2014-01-25 2.12.31.png](https://qiita-image-store.s3.amazonaws.com/0/94/4712c578-e356-12dc-d939-675ae882eb19.png)

ここで編集したいファイル選んでタブ押すとこうなります。

![スクリーンショット 2014-01-25 2.13.01.png](https://qiita-image-store.s3.amazonaws.com/0/94/befd6825-7166-a93a-9d91-f9a1571cd3b9.png)

で、この中に`find file as root`ってのがあります。`root`とか入力して絞り込むと良いです。

![スクリーンショット 2014-01-25 2.13.12.png](https://qiita-image-store.s3.amazonaws.com/0/94/a249a5b0-db81-a27a-3bf1-d2c53584a75c.png)

で、Enterするとパスワード入力を求められます。

![スクリーンショット 2014-01-25 2.13.26.png](https://qiita-image-store.s3.amazonaws.com/0/94/b12432d7-5bfe-b096-2035-9429a79a674d.png)

で、入力したら成功。

![スクリーンショット 2014-01-25 2.13.40.png](https://qiita-image-store.s3.amazonaws.com/0/94/cdca4486-8e73-c821-2d07-8f7da1587880.png)

編集・保存出来るようになります。

`anything`でも出来るかどうかは知りません。
JavaScriptの非同期処理には何を使うべきか

## JavaScriptの非同期処理

JavaScriptにおける非同期処理のライブラリは非常にたくさん乱立していて、一体どれを使えばいいのか判断がつきません。
（本記事はその答えを明確に示すものではないので、もしそういうのを期待してたらごめんなさい）

ライブラリはたくさんありますが、いくつかの方式にカテゴライズすることができそうです。（ここに挙げてない方式もきっとあるでしょう）

* **いつか値を返すのでとりあえずプレースホルダを受け取っておいてよ方式** ：[promise](http://wiki.commonjs.org/wiki/Promises), [jQuery.Deferred](http://api.jquery.com/category/deferred-object/), [goog.result](http://docs.closure-library.googlecode.com/git/namespace_goog_result.html) など

* **generator(yield)を使って同期処理みたいに非同期処理が書けるよ方式** ：[co](https://github.com/visionmedia/co), [task.js](http://taskjs.org/) など

* **そんなことよりFunctional Reactive Programmingだ！方式** ：[RxJS](https://github.com/Reactive-Extensions/RxJS), [Bacon.js](https://github.com/baconjs/bacon.js) など

はて、こんな対立構造をどこかで見たことあるなあと思ったら、C#でも以前同じような議論がありました。

* [C#次世代非同期処理概観 - Task vs Reactive Extensions](http://www.slideshare.net/neuecc/asynchronous-rx-andtask)

それぞれ対応付けてみるとこんな感じですね。

|      C#     |  JavaScript  |
|:------------|:-------------|
|  Task       | promiseなど   |
| async/await | coなど    |
| Reactive Extensions | RxJSなど |

## 各方式は対立するのか？

ところでこれらの方式って、必ずしも対立するってわけじゃないんですよね。

JavaScriptのgeneratorはまだ使えるところが限られるけど、コールバックが不要で同期処理のように簡単に書けるのはやはり魅力的です。

一方で、ちょっとした非同期処理をReactive Programmingで処理するのはおおげさですが、ストリーム的に流れてくる複数のイベントを合成したり、時間的な操作をしたりする場合には圧倒的に便利です。

なので、適材適所で使い分けるのがよさそうです。（なんの解決にもなってない！）

## promise, co, RxJS

さて、使い分けると言っても、方式が異なるものを混ぜて使うことは可能でしょうか？
実は、それぞれの方式は対立しないどころか、連携することも可能です。

各方式の代表的な実装であるpromise, co, RxJSを例にみてみましょう。

まず、promiseとRxJSですが、RxJSにObservable.fromPromise(),Observable.toPromise()というAPIが用意されているので、それを呼ぶだけで相互に変換が可能です。

次に、coはyieldableなオブジェクトを扱うことができるそうです。（参考：[いぇーい yield と co と koa](http://havelog.ayumusato.com/develop/javascript/e583-yield_co_thunkify.html)）

なのでpromiseはそのままcoで扱うことができるし、次のような変換関数を用意しておけば、RxJSのObservableをcoで扱うことも可能になります。

~~~js
function observableToThunk(observable) {
    return function(fn){
        var d = observable.subscribe(function(res) {
                d.dispose();
                fn(null, res);
            },
            function(err) {
                d.dispose();
                fn(err);
            });
    }
}
~~~

これをcoの中で呼ぶようにしてあげます。

- https://github.com/zoetrope/co/blob/master/index.js#L123

そうすると、RxJSのObservableが同期処理のように書けます。エラーもtry/catchで処理できます。
ただしストリーミング的な非同期処理はできなくなるので注意です。

~~~js
co(function *() {
  var ret = yield Rx.Observable.return(new Date()).delay(3000);
  console.log("date: " + ret);
})();
~~~

※coをchromeで動作させるためには、chrome://flagsの#enable-javascript-harmonyを有効にする必要があります。

## 連携例

promise, co, RxJSの全部を組み合わせると、こんなことができたりします。

- http通信の結果をpromiseで取得する（AngularJSの$httpサービスを想定）
- 1つめのhttp通信の結果を使って2つめのhttp通信を行う
- RxJSを使ってイベント合成など複雑な処理を行う
- coを使うことで最終結果の取得とエラー処理を同期処理のように書く

~~~js
co(function *() {
  try {
    var id = yield $http.get("/getid"); 
    var promise = $http.get("/items/" + id);
    var obs = Rx.Observable.fromPromise(promise)
        .zip(mouseEvent, function (received, ev) { return received; })
        .throttle(1000)
        .select(JSON.parse);
    var ret = yield obs;
    console.log(ret);
  } catch (e) {
    console.log("error: " + e);
  }
})();
~~~

うまく連携できてますね！
Railsでtemplateをerb -> slim

現行のRails製のプロジェクトでテンプレートエンジンにslimを使いたかったので、
erbからの変換手順をメモ。

```rails
group :development do
  gem 'erb2haml'
  gem 'haml2slim'
end
```

一時的に上記のgemを追加し、erb -> haml -> slimの順に変換する

```bash
# .erb => .haml(erbは残す)
$ rake haml:convert_erbs
# .haml => .slim(hamlは残す)
$ for i in `find app/views -name '*.haml'` ; do be haml2slim $i ${i%haml}slim ; done
# .erb .hamlファイル削除
$ for i in `find app/views -name '*.erb'` ; do rm $i ; done
$ for i in `find app/views -name '*.haml'` ; do rm $i ; done
```

変換完了後、変換用に加えたgemをGemfileから削除し、`$ bundle clean`
Railsでslimを使うため、Gemfileに`gem 'slim-rails'`を追加し`$ bundle install`

slimに関しては下記が参考になります。
[slim/README.md at README_ja](https://github.com/yterajima/slim/blob/README_ja/README.md) 
[HamlとSlimをMiddleman上で比較する](http://tech-sketch.jp/2013/07/haml-slim-middleman.html)
dockerで複数個のポートフォワーディングを行う

Webサーバの入ったコンテナに対してポートフォワーディングを行いたいが、例えば80番と443番のように、複数個のポートフォワードを設定したいという場合があると思う。

そういうときは、

```
docker run -p 80:80 -p 443:443 d2b1a9e25105
```

のように、`docker run`に対して`-p`オプションを複数個設定すればよい。
iPhoneアプリ開発で、フォントや色をスッキリ管理するやり方

デザイナーの方とアプリを作っていると、文字などで使う色のパターンがある程度決まってくる。
それを、いちいちxibやstoryboardで指定するのは面倒だし、コードで指定する場合でも毎回[UIColor colorWithRed:green:blue]で指定していると変更があった時に死ぬ。
そこで、ちょっとしたカテゴリを作成しておくとスッキリ管理できて簡単に使えるようになる。

```objc:UIColor+MYExtention.h
#import <UIKit/UIKit.h>

@interface UIColor (MYExtention)
+ (UIColor *)myC1;
+ (UIColor *)myC2;
@end
```

```objc:UIColor+MYExtention.m
#import "UIColor+MYExtention.h"

@implementation UIColor (MYExtention)
+ (UIColor *)colorWithDecimalRed:(NSInteger)red green:(NSInteger)green blue:(NSInteger)blue alpha:(CGFloat)alpha
{
    return [UIColor colorWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:alpha];
}

+ (UIColor *)myC1
{
    return [UIColor colorWithDecimalRed:111 green:103 blue:100 alpha:1.0];
}

+ (UIColor *)myC2
{
    return [UIColor colorWithDecimalRed:150 green:144 blue:138 alpha:1.0];
}
@end
```

\#import "UIColor+MYExtention.h"をhoge-Prefix.pchに追記しておけば、プロジェクトのどこからでもimport無しで利用できるようになる。
使うときはこんな感じ。

```objc:
self.view.backgroundColor = [UIColor myC1];
```

同様に、フォントもカテゴリを作成しておくと何かと便利。

```objc:UIFont+MYExtention.h
@interface UIFont (MYExtention)
+ (UIFont *)myF200;
+ (UIFont *)myF160;
@end
```

```objc:UIFont+MYExtention.m
#import "UIFont+MYExtention.h"

@implementation UIFont (MYExtention)

+ (UIFont *)myF200
{
    return [UIFont fontWithName:@"AvenirNext-UltraLight" size:200];
}

+ (UIFont *)myF160
{
    return [UIFont fontWithName:@"AvenirNext-UltraLight" size:160];
}
@end
```
Vimからrefeを使うまでの覚書

大きな流れは以下のエントリーが参考になりました．
http://chulip.org/entry/20110814/1313331345

# refeのインストール
まず`gem install refe`をすると，`refe Array inject`でエラーを吐かれるのは上のエントリーと同じです．
しかし，ソースコードを落としてシンボリックリンクを貼らなくても，`gem install refe2`で入れたものは正常に使える様子．
`rbenb`を使っている人は忘れずに`rbenv rehash`して`refe Array inject`をしてみると，日本語ドキュメントが表示されます．

# vimからrefeを使う
NeoBundleを使っている前提です．

`.vimrc`に`NeoBundle 'thinca/vim-ref'`を追加し，
`:Ref refe Array`をするとリファレンスが表示されるはずです．

デフォルトでは`shift-k`でカーソル位置の単語を検索してくれるようです．

# 最後に
ソースコードからビルドしたり，BitClustなどを入れたりと紆余曲折したのですが，最終的にはこの方法で良いのではないかなぁと思います．
まっさらな状態からは試していないので，もしこの方法でうまくインストール出来ない場合コメントなどをいただけると幸いです．
LINQのPython実装 "linqish"の紹介

# LINQは.Netだけのものじゃない！！

Pythonのモジュールに面白いものがあったので紹介します。LINQ to ObjectsのPython実装「linqish」です。
LINQのメソッドチェイン構文をほぼ完全にサポートしています。

https://pypi.python.org/pypi/linqish

最新バージョンは0.5.2です。インストールは
``pip install http://linqish-py.googlecode.com/files/linqish-0.5.2.zip``
で行けると思います（私はPyCharm使ってるのでSettingからGUIでやりました）
Python2.7.5で確認しましたが、3.3.3では使えないようです

さっき見つけたばかりで、公式ドキュメントもなかったのですが直感でFizzBuzzは書けました。楽しい！

```py
import linqish

fizzbuzz = linqish.Query(range(0, 100)).select(lambda x: x + 1).select(
    lambda x: "FizzBuzz" if x % 15 == 0 else "Fizz" if x % 3 == 0 else "Buzz" if x % 5 == 0 else x)

for i in fizzbuzz:
    print i
```

基本はこの部分

```py
fizzbuzz = linqish.Query(range(0, 100))
```

linqish.Query(データ構造)で、.NetでいうIEnumerable&lt;T&gt;のインスタンスが生成されます。listとtupleは確認しましたがsetでもできるのかどうかは実験してないです
これ以降は見たとおり本家LINQと何ら変わらない書き方です。わかりやすい！

おそらくコードの短さや、実行速度なんかは組み込みのリスト内包表記には敵わないとは思いますが、他言語（特にC#）を書いている人がPythonでデータ構造をいじくるのにいきなりリスト内包表記はハードルが高いと思うので、
linqishのメソッドチェインでわかりやすく操作するのもいいと思います。

本当に公式ドキュメントがないので不安なところもありますがすごく面白いプロジェクトだと思うので今後も更新が続けられることを期待しています！
ほぼ万能の文字化け予防策は、署名に「◉」「⌘」「♡」などを入れておくこと。

友人はiphoneからAndroidへメールをしたが、文字化けました。
本文には中国語と日本語の両方が混在しています。
本文は中国語で書かれて、最後の署名が日本語でした。

ネットで情報を調べたら、最後の署名に「◉」「⌘」「♡」などを入力しておくと文字化けしないらしいです。
参考したサイトは下記の通りです。

文字化けに悩んでいる方がいたら、試してみてください。

http://d.hatena.ne.jp/NAOI/20120516/1337145807

http://plaza.rakuten.co.jp/mscrtf/diary/201306180000/
すべてのボタンのスタイルを変更する方法

UIAppearance で色や画像を簡単に変える事ができる。

UIAppearance は、iOS5 から導入されたプロトコル。
これを使うと UINavigationBar や UIButton のインスタンスの色を変更することができる。

インスタンスではなくクラスに対して色設定ができるので、画面上で使われている指定されたクラスすべての色を変えることができる。

例えば、アプリ内の全ての UIButton に対して、同じ画像を適用したい場合、以下のように記述する。

```objc
// すべてのボタンのスタイルを変更する
UIImage *btnImg = [UIImage imageNamed:@"noimage.png"];
UIImage *btnImgHighlighted = [UIImage imageNamed:@"noimage.png"];
 
[[UIButton appearance] setBackgroundImage:btnImg forState:UIControlStateNormal];
[[UIButton appearance] setBackgroundImage:btnImgHighlighted forState:UIControlStateHighlighted];
```

そうすると、アプリ内の UIButton 全ての背景画像が変更される。
    
また、appearance の代わりに appearanceWhenContainedIn を使うと、指定した親ビューを条件に指定することができる。

例えば、

```objc
// 指定した条件のボタンのスタイルを変更する
UIImage *btnImg = [UIImage imageNamed:@"noimage.png"];
UIImage *btnImgHighlighted = [UIImage imageNamed:@"noimage.png"];

// 条件を指定
[[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil]
     setBackgroundImage:btnImg forState:UIControlStateNormal];
    
[[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil]
     setBackgroundImage:btnImgHighlighted forState:UIControlStateHighlighted];
```

こうすると、UINavigationBar （親ビュー） の中の UIButton だけに適用される
親ビューは、複数指定することができる。

条件の指定には、カスタムクラスも指定できる。

これを活用するケースは、例えば、iOS7ベースで開発したアプリを、iOS6に対応させたい場合、１つ１つバージョン判定をして、切り替えるのではなく、`application:application didFinishLaunchingWithOptions:launchOptions` などに記述して、アプリ内のものを一括で切り替える事ができる。

ただ、条件が細かったりすると、ちょっと使いづらいので、ケースによっては、カスタムなボタンを作った方がよい場合もあるので、ケースバイケースで、使うことをオススメします。
DXライブラリでキーが押された瞬間を判別する

掲題の通りです。
質問があったもので

```cpp
#include "DxLib.h"

// キー入力
int key[256]; // 0:入力されていない 1:入力された瞬間 2:入力されている
void inputKey() {
	static char buf[256];
	GetHitKeyStateAll(buf);
	for (int i = 0; i < 256; i++) {
		if (buf[i]) {
			if (key[i] == 0) key[i] = 1;
			else if (key[i] == 1) key[i] = 2;
		} else key[i] = 0;
	}
}

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
	ChangeWindowMode(TRUE);
	DxLib_Init();
	SetDrawScreen(DX_SCREEN_BACK);
	while (!ProcessMessage()) {
		ClearDrawScreen();
		inputKey();
		if (key[KEY_INPUT_SPACE] == 1) {
			DrawString(0, 0, "SPACE押された瞬間", GetColor(255, 255, 255));
		} else if (key[KEY_INPUT_SPACE] == 2) {
			DrawString(0, 24, "SPACE押されている", GetColor(255, 255, 255));
		}
		ScreenFlip();
	}
	DxLib_End();
	return 0;
}
```
複数行に渡ったクエリを実行する

コンソールからクエリを実行するとき、複数行にわたったSQLを実行したい。
普通にdb2コンソールを開くと改行をトリガーとしてSQLを実行してしまうのが厄介なのです。

こんなSQL。
```
select 
  id as member_id,
  sales_slip_id
from 
  sales_data
where
  create_time > '2014-01-01-00.00.00.000000'
```

調べたところ、コンソールからdb2ダイアログを起動するときに、「-t」オプションを指定すればよいぽい。

```
db2 -t
```

これで、改行があっても、「;」が出るまでは1クエリとして扱ってくれました。
やったー！
MySQLのテーブルをOracleに移すときに調査に使ったSQLだお

テーブル名が長すぎるテーブルを探すSQL

```sql:
SELECT TABLE_NAME as Name, CHAR_LENGTH(TABLE_NAME) from information_schema.TABLES
 WHERE TABLE_SCHEMA = DATABASE() ORDER BY 2;
```

カラム名に予約語を使ってないか調べるSQL

```sql:
SELECT * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() 
AND COLUMN_NAME IN (
"access",
"add",
"all",
"alter",
"and",
"any",
"as",
"asc",
"audit",
"between",
"by",
"char",
"check",
"cluster",
"column",
"comment",
"compress",
"connect",
"create",
"current",
"date",
"decimal",
"default",
"delete",
"desc",
"distinct",
"drop",
"else",
"exclusive",
"exists",
"file",
"float",
"for",
"from",
"grant",
"group",
"having",
"identified",
"immediate",
"in",
"increment",
"index",
"initial",
"insert",
"integer",
"intersect",
"into",
"is",
"level",
"like",
"lock",
"long",
"maxextents",
"minus",
"mlslabel",
"mode",
"modify",
"noaudit",
"nocompress",
"not",
"nowait",
"null",
"number",
"of",
"offline",
"on",
"online",
"option",
"or",
"order",
"pctfree",
"prior",
"privileges",
"public",
"raw",
"rename",
"resource",
"revoke",
"row",
"rowid",
"rownum",
"rows",
"select",
"session",
"set",
"share",
"size",
"smallint",
"start",
"successful",
"synonym",
"sysdate",
"table",
"then",
"to",
"trigger",
"uid",
"union",
"unique",
"update",
"user",
"validate",
"values",
"varchar",
"varchar2",
"view",
"whenever",
"where",
"with"
);
```

◯◯TEXT型を使ってないか調べるSQL

```sql:
SELECT * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() and DATA_TYPE like "%TEXT";
```

色々ハードルがありますねー
[Ruby]基礎から日記。今月中にファイルを開いて該当する文字を検索するプログラム書きたい

というわけで、それにはファイルを開けるようにならないといけないのだ。

```ruby:Ruby-40
filename = "foo.txt"
out = open(filename, "w")
out.print("This is a test.\n")
out.close
```

`out`というのがメソッドに見えてしまうので、『たのしいRuby』の索引をひっくり返しては、そんなのないぞ！と憤ることしばし。`out`を`moisture`とかに変えても同じ結果になったので、これがローカル変数ってやつなのかな。アルファベットの小文字で始まってるし。

それにしてもprintさんは単にTerminalに表示するだけじゃなく、"w"があったからファイルに書き込みまで出来てしまうなんてびっくりだ。ポケモンが進化した時の喜びみたいなものを感じます。
FlexでListを使った時のマウスホイールの挙動制御

FlexでListを使った時にページ自体にスクロールがあるとListの中だけスクロールして欲しいのに
ページ自体もスクロールして非常に使いづらかったりする。

そこでExternalInterfaceを使ってswfがアクティブ・非アクティブになったタイミングで
ページ側のマウスホイールの制御をすることでList内だけでスクロールすることができる。


```mxml:Main.mxml
<s:application active="activeHandler(event)" deactive="deactiveHandler(event)">
	<fx:Script>
			/**
			 * swfがアクティブになった
			 * @param event
			 */
			protected function activateHandler( event:Event ):void {
				ExternalInterface.call( "wheelEnabled", false);
			}

			/**
			 * swfが非アクティブになった
			 * @param event
			 */
			protected function deactivateHandler( event:Event ):void {
				ExternalInterface.call( "wheelEnabled", true );
			}
	</fx:Script>
</s:application>
```


```js
//ブラウザのホイールの状態(初期値有効)
var _wheelEnabled = true;

//Flashから呼ばれる関数
function wheelEnabled(flg){
	_wheelEnabled = flg;
}

//ホイールイベントの処理
function wheel(event){
	if(!_wheelEnabled){
		if(!event){
			event = window.event;
		}
		if(event.preventDefault){
			event.preventDefault();
		}
		event.returnValue = false;
	}
}

//イベントリスナーの登録
if(window.addEventListener){
	window.addEventListener('DOMMouseScroll', wheel, false);
}
window.onmousewheel = document.onmousewheel = wheel;	
```
Macでpyenv+virtualenv


Marvericksをクリーンインストールしたついでに、python環境を刷新してみた。
従来はvirtualenv+virtualenvwrapperくらいで間に合ってたくらい。
ディレクトリ単位でpython環境切り替え可能っていうからきっと便利。

そして既に先輩たちにより、いくつか同じ情報書かれてたけど、自分用ってことで割り切り。

# 環境
* OSX 10.9.1
* [Homebrew](http://brew.sh/index_ja.html)

# pyenv

## インストール
### pyenvだけ
```zsh
$ brew install pyenv
```
なんとこれで終わり。

### pyenvにプラグインとしてvirtualenvも使うなら
```
$ brew install pyenv-virtualenv
```
最初からこれするだけで、pyenvも一緒に入ってくれる。

## 設定
インストール時に注意点として下記を促してくれるので適宜。

```
To enable shims and autocompletion add to your profile:
  if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

To use Homebrew's directories rather than ~/.pyenv add to your profile:
  export PYENV_ROOT=/usr/local/opt/pyenv
```

## 使い方
### 環境をつくる
```
$ pyenv install 2.7.6
```
指定バージョンのpythonがインストールされる。
もちろんpipも共に。

なお、インストール可能なバージョンの一覧を確認するには

```
$ pyenv install -l
```

インストール済みの環境一覧を確認するなら

```
$ pyenv versions
```


### global: 環境を共通利用
これは個人的にはしてもしなくても、な気がする。しなかったらsystem側のpythonを見に行くだけ。

```
$ python --version;which python
Python 2.7.5
/usr/bin/python

$ pyenv global 2.7.6
$ exec $SHELL -l

$ python --version;which python
Python 2.7.6
/usr/local/opt/pyenv/shims/python
```

### local: 任意ディレクトリで任意環境を適用する

バージョン3.3.3環境を導入。

```
$ pyenv install 3.3.3
```

任意ディレクトリに移動して環境指定する。

```
$ cd ~/Projects/sandbox/
$ pyenv local 3.3.3
$ pyenv version
3.3.3 (set by /Users/xxx/Projects/sandbox/.python-version)
```

指定ディレクトリ以外はglobalのほうをみてることを確認。

```
$ cd
$ pyenv version
2.7.6 (set by /usr/local/opt/pyenv/version)
```

### virtualenv
`pyenv install`時に指定したバージョンごとの環境を元に、新たに環境を複製しくれるのがvirtualenv。
同じバージョンで違うパッケージ構成にしたい時とか便利。

```
$ pyenv virtualenv 2.7.6 sandbox276
```

ここでつくられた環境も`pyenv versions`にのってくる。
`pyenv local sandbox276`とかすれば任意ディレクトリでの環境利用も同じく使える。

## 環境の削除
バージョンごと環境もvirtualenv環境一緒。

```
$ pyenv uninstall 3.3.3
$ pyenv uninstall sandbox276
$ pyenv versions
  system
* 2.7.6 (set by /usr/local/opt/pyenv/version)
```

ただしlocal指定で、任意ディレクトリに環境つくった場合、`.python-version`というファイルが出来上がってそこに環境名が書かれているけど、それは消えないのでご注意を。

# 感想
バージョンで縦にフレキシブル！
virtualenvで横にフレキシブル！
きっと便利！

# 参考
* [pyenv](https://github.com/yyuu/pyenv)
* [pyenv-virtualenv](https://github.com/yyuu/pyenv-virtualenv)
Django Templateのif-elseを短く書く

# Django Templateのif-elseを短く書く 
Bootstrap.cssとDjangoのテンプレートエンジンを組み合わせて利用していると

```html
{% if param.status == 1 %}
    <!-- 特定の条件の場合activeというクラス名をつける -->
    <li class="active">
{% else %}
    <li>
{% endif %}

        <a href="#">Active</a>
    </li>
……
```
みたいに書かなくてはならない時があります。
インデントはややこしくなるし、
たったこれだけの処理に何行も費やすのは見難いです。

そこでどうかけば短く書けるのか探してみたところ、
｢yesno｣という組み込みフィルタを見つけました。
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#yesno

このフィルタはカンマ区切りの文字列を引数に取ります。
値がTrueと解釈できるなら 引数の最初からカンマまでを、
値がFalseと解釈できるなら、最初から2つめのカンマまでを、
そして値がNoneなら、2つめのカンマから後ろを返してくれます。
(Noneはオプションです)

```python
{{ value|yesno "はい,いいえ,なし" }}
```
とすれば、
値がTrueの時(例: ｢1｣｢"hoge"｣なんかもOK)の時 ｢はい｣に、
値がFalseの時(例:｢0｣｢""])の時は｢いいえ｣になります。

この面白いフィルタを使って上のテンプレートを書き換えると

```html
<!-- 特定の条件の場合activeというクラス名をつける -->
<li class="{{ param.status|yesno:'active,' }}">
    <a href="#">Active</a>
</li>
```
となります。
一行が長くなってしまいますが、前の書き方より
インデントの構造がスッキリして見やすくなるのでメリットが大きいです。
rubyのsoap client savonでBASIC認証

savonを使ってみます。現時点ではversion3系はunstableなのでversion2系を使ってみました。

# 認証

APIがBASIC認証を要求する場合は以下のようにします。ドキュメントがなかなか見つからず小一時間苦労しました...。

```ruby:get_operations.rb
#!/usr/bin/env ruby

require 'savon'

client = Savon.client(
  wsdl: 'https://server/wsdl',
  basic_auth:  ['username', 'userpasswordhere'],
  ssl_verify_mode: :none
)
p client.operations
```
CakePHP2.xでvalidationルールで日本語がチェックされない


CakePHP2.xでalphaNumericのバリデーションで日本語が通ってしまう。
初歩的なのかもしれないけど、CakePHPは初だったので、書き方の問題かと思い小一時間悩んだのでメモ。

要は、alphaNumericのメソッドにある正規表現に問題があるらしいので、
AppModelでメソッドを上書きさせてあげると良いらしい。

```PHP
public function alphaNumeric($check) {
	$value = array_values($check);
	$value = $value[0];
	return preg_match('/^[a-zA-Z0-9]+$/', $value);
}
```

これで、日本語をはじくようになる。

***
参考サイト

* [(CakePHP 2.x) validationルールのalphaNumeric日本語対応する方法](http://www.tailtension.com/cakephp/1112/)
* [CakePHPのバリデーションルール「alphaNumeric」は要注意！](http://ivystar.jp/programming/php/cakephp-php-programming/cakephp%E3%81%AE%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%AB%E3%83%BC%E3%83%AB%E3%80%8Calphanumeric%E3%80%8D%E3%81%AF%E8%A6%81%E6%B3%A8%E6%84%8F%EF%BC%81/)
railsコマンドでInsecure Error

CentOSにrbenvを使ってruby環境をセットアップし、rootですべておこない、rails newできるところまでいきました。

この後、wheelにいる一般ユーザでrails newしようとしましたがInsecure operationでアプリを作れません。
gem env もエラーが返ります。

/usr/local/rbenv にインストールするのには無理があるのでしょうか…ご助言いただけないでしょうか＞＜

環境
CentOS6.3

$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [i686-linux]
$ rails -v (このコマンドはrootで確認)
Rails 3.2.13

rbenvインストール先
/usr/local/rbenv/bin/rbenv

通してあるパス (echo $PATH)
/usr/local/rbenv/bin:
/usr/kerberos/sbin:
/usr/local/bin:
/usr/local/rbenv/shims:
/usr/local/rbenv/bin:
/usr/kerberos/bin:
/usr/local/bin:
/bin:
/usr/bin

インストール先権限
/usr 755
/usr/local 755
/usr/local/rbenv 755


$ rails new で返ってくるエラー
/usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:710:in `[]': Insecure operation - [] (SecurityError)
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:710:in `block in each_gemspec'
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:709:in `each'
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:709:in `each_gemspec'
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:717:in `each_stub'
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:736:in `stubs'
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:255:in `matching_specs'
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:279:in `to_specs'
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:309:in `to_spec'
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_gem.rb:53:in `gem'
        from /usr/local/rbenv/versions/1.9.3-p484/bin/rails:22:in `<main>'

$ gem env で返ってくるエラー
/usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:329:in `exist?': Insecure operation - exist? (SecurityError)
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:329:in `load_file'
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:196:in `initialize'
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/gem_runner.rb:74:in `new'
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/gem_runner.rb:74:in `do_configuration'
        from /usr/local/rbenv/versions/1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/gem_runner.rb:39:in `run'
        from /usr/local/rbenv/versions/1.9.3-p484/bin/gem:21:in `<main>'
Twitter Card/Open Graph support for Blogger

The <meta> tags you put in the head of your Blogger template to support Twitter Cards and Open Graph.

```xml
<!-- Begin Open Graph metadata -->
<meta content='summary' name='twitter:card'/>
<meta content='@<your twitter account>' name='twitter:site'/>
<b:if cond='data:blog.metaDescription'>
<meta expr:content='data:blog.metaDescription' name='og:description'/>
<b:else/>
<!-- Twitter Cards require a description but blogger posts don't always have one -->
<meta content='<Default Post Description>' name='og:description'/>
</b:if>
<b:if cond='data:blog.pageType == &quot;item&quot;'>
    <!-- For the individual blog post page -->
    <meta content='article' property='og:type'/>
    <meta expr:content='data:blog.title' property='og:site_name'/>
    <meta expr:content='data:blog.pageName' property='og:title'/>
     <b:if cond='data:blog.postImageThumbnailUrl'>
     <meta expr:content='data:blog.postImageThumbnailUrl' property='og:image'/>
     </b:if>
<b:else/>
    <!-- Index, search etc. -->
    <meta expr:content='data:blog.title' property='og:title'/>
    <meta content='website' property='og:type'/>
    <meta content='<Default image url here>' property='og:image'/>
</b:if>

<meta expr:content='&quot;<your locale>&quot;' property='og:locale'/>
<meta expr:content='data:blog.canonicalUrl' property='og:url'/>
<!-- End Open Graph metadata -->
```
Rspec requestを利用する際にsessionの設定をする為の工夫（とりあえずこうでいい？）

クールな方法は無さそうだったので、望むようなsessionの状態を作るURLをテスト用にのみ公開するのが良いと考えた。例としてユーザーのログイン情報がセッション上にuser_idとして格納されている状態を作りたい場合：

```routes.rb
  if Rails.env.test? # こうしておけばテストでだけ使えるURLにできる
    get 'test/user/session/:id', to: 'test#getSession'
    post 'test/user/session/:id', to: 'test#userSession'
  end
```

```test_controller.rb
class TestController < ApplicationController
  skip_before_filter :authorize

  def userSession
    user = User.find_by_id params[:id] # ここをidで取らない実装もあり得る
    session[:user_id] = user.id
    head :no_content
  end

  def getSession
    render json: session # テストなのでセッション丸々返しても大丈夫だろう（いい加減）
  end

end
```

```test_spec.rb
require 'spec_helper'

describe 'create user' do

  before do
    @user = FactoryGirl.create(:user)
  end

  it "should" do
    post "test/user/session/#{@user.id}" # postするとセッション情報作成できる

    get "test/user/session/#{@user.id}" # getでセッション情報取得
    ret = JSON.parse(response.body)
    ret['user_id'].should == @user.id
  end

end
```

もっと楽な方法を知っている人がいたら是非教えてください。
SQLAlchemy で Enum を使う


[便利な Enum 型](http://qiita.com/methane/items/8612bdefd8fa4238cc44)
ですが、 Web アプリで使う場合は O/R Mapper でそのまま使いたいですよね。

SQLAlchemy は、 `TypeDecorator` を使って、既存の型をラップした独自型を簡単に定義できます。 Integer をラップして Enum を保存してみます。

```python
from __future__ import print_function, division, absolute_import
from sqlalchemy import Integer
from sqlalchemy.types import TypeDecorator


class EnumType(TypeDecorator):
    """Store IntEnum as Integer"""

    impl = Integer

    def __init__(self, *args, **kwargs):
        self.enum_class = kwargs.pop('enum_class')
        TypeDecorator.__init__(self, *args, **kwargs)

    def process_bind_param(self, value, dialect):
        if value is not None:
            if not isinstance(value, self.enum_class):
                raise TypeError("Value should %s type" % self.enum_class)
            return value.value

    def process_result_value(self, value, dialect):
        if value is not None:
            if not isinstance(value, int):
                raise TypeError("value should have int type")
            return self.enum_class(value)
```

キーワード引数 `enum_class` で指定した Enum を保存する専用のカラム型ができました。使ってみましょう。

```python
import enum
from sqlalchemy import Integer, Column, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker


Base = declarative_base()

Color = enum.Enum("Color", "red green yellow")

class Light(Base):
    __tablename__ = 'some_table'
    id = Column(Integer, primary_key=True)
    color = Column(EnumType(enum_class=Color))


engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()

session.add(Light(color=Color.red))
session.commit()

for L in session.query(Light).all():
    print(L.id, L.color)

session.add(Light(color=42))
session.commit()
```

実行結果はこうなります

```
1 Color.red
Traceback (most recent call last):
...
  File "enum_column_sample.py", line 19, in process_bind_param
    raise TypeError("Value should %s type" % self.enum_class)
sqlalchemy.exc.StatementError: Value should <enum 'Color'> type (original cause: TypeError: Value should <enum 'Color'> type) u'INSERT INTO some_table (color) VALUES (?)' [{'color': 42}]
```

このように、DBから取得した値が適切に Enum に戻りますし、 Enum じゃない整数値は Insert で蹴られるようになりました。
ruby-soxでかっこいい音楽を作ってみる

linux環境下では、[sox](http://www.hcn.zaq.ne.jp/___/unix/sox-ja.html)という素敵な **音声処理のためのスイスアーミーナイフ** が存在します。
画像におけるImageMagick、動画におけるffmpegのように、サーバ内で自動的に音声処理をするのに向いています。

それをrubyでお手軽に使えるようにしたのが[ruby-sox](https://github.com/TMXCredit/ruby-sox)です。
ruby-soxの使い方のレクチャーとして、rubyで自動的に音声をぶった切って新しい音色を作る、ということをやってみたいと思います。

まずはsoxのインストール。


ruby-soxはgemからインストールできます。

    gem install ruby-sox


soxにはいろいろコマンドが用意されているのですが、ただ使うだけだとコマンドラインからsoxを実行するのとあまりかわらないので、せっかくなのでループを使ってできることをしてみたいと思います。

今回のサンプルでは、グラニュラーシンセシスという技法を使います。
グラニュラーシンセシスとは、元々ある音源を非常に細かく切ってグレイン(粒子)という単位まで分割し、再構成することによって新しい音色を作るというものです。
今回は音源を一定の個数に切り、それをランダムにつなぎ直す用にしました。
サンプルでは5.5秒のデータを0.1秒ごとに区切って並び替えています。

```ruby:granular.rb
require "ruby-sox"

try_num = 55

try_num.times do |num|
sox = Sox::Cmd.new().add_input("test.mp3")
        .set_output("tmp/test_#{num}.mp3")
        .set_effects(:trim => "=#{num*0.1} =#{(num+1)*0.1}",:rate => 44100, :channels => 2)
        .run
end

a = []
try_num.times do |num|
  r = rand try_num
  a.push "tmp/test_#{r}.mp3"
end

combiner = Sox::Combiner.new(a, :combine => :concatenate, :rate => 44100, :channels => 2)
combiner.write('test.mp3')
```

soxのドキュメントを見ると、エフェクトをかけたり、音の調整をしたり、音響周りのいろいろなことができるので、画像や動画投稿サービスに続いて、これらを駆使したシステムを作ってみるのもいいのかもしれないなと思っています。