OmniAICreator/Qiita-1.07M huggingface dataset:
CentOS 6系 で lv を使う方法

# 事前準備

```vim
% sudo yum install rpm-build ncurses-devel autoconf
% sudo yum install gcc
```

# インストールします

```vim
% sudo wget http://ftp.riken.jp/Linux/centos/5.6/os/SRPMS/lv-4.51-8.1.src.rpm
% sudo rpm -ivh lv-4.51-8.1.src.rpm
% sudo rpmbuild -bb /root/rpmbuild/SPECS/lv.spec
% sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/lv-4.51-8.1.x86_64.rpm
```

これで使えるようになりました。

```vim
% lv -v
-----------------
# lv v.4.51.a (Oct.30th,2005)
# All rights reserved. Copyright (C) 1996-2005 by NARITA Tomio
# ABSOLUTELY NO WARRANTY; for details type `lv -h'
```
Pythonのインストール（Windows）

# やること
WindowsでPythonを利用できるようにする。  

#前提条件
* Pythonはstableの2.7を利用することとする。

# 環境
* Windows 7 Professional (x86)
* Python 2.7.6

# 事前準備

下記より、必要なファイルをダウンロードしておく。

* Python 2.7.6 Windows Installer  
[Download Python](http://www.python.org/download/ "Download Python") (python-2.7.6.msi)  
* easy_setupコマンドのインストーラ  
[ez_setup.py](https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py "")

# 手順

##  Python本体のインストール

### インストーラの実行
* python-2.7.6.msiを実行する  
※インストール中のオプションはすべてデフォルト

### 環境変数の設定
下記の環境変数を設定する。

|変数名|値|
|:--|:--|
|PYTHON_HOME|C:\Python27|

pathに下記の2つを追加

|フォルダパス|
|:--|:--|
|%PYTHON_HOME%|
|%PYTHON_HOME%\Scripts|


### 確認
```
> python --version
Python 2.7.6
```

### インタプリタ実行

```
> python
>>> print "hello, world"
hello, world
>>> exit()
```

### スクリプト実行

```py:hello.py
print "hello, world"
```

```
> python hello.py
hello, world
```

```py:hello.py
#coding: UTF-8
print "こんにちは, world"
```

```
> python hello.py
こんにちは, world
```



## easy_setupのインストール

python ez_setup.pyをダウンロードしたフォルダで、下記のコマンドを実行する。

```
> python ez_setup.py
.
.
Installed c:\python27\lib\site-packages\setuptools-2.0-py2.7.egg
Processing dependencies for setuptools==2.0
Finished processing dependencies for setuptools==2.0
```

## pip（パッケージマネージャ）のインストール

下記のコマンドを実行する。

```
> easy_install pip
.
.
Installed c:\python27\lib\site-packages\pip-1.4.1-py2.7.egg
Processing dependencies for pip
Finished processing dependencies for pip
```

インストールされているパッケージの確認と出力例
※下記は「sphinx」をpipでインストールした場合

```
> pip freeze
Jinja2==2.7.1
MarkupSafe==0.18
Pygments==1.6
Sphinx==1.2
docutils==0.11
```
boxenでの構築でハマった所メモ


- 不要なバージョンをコメントアウトする（コンパイルが長くなるし）

``` manifests/site.pp
  # node versions
  ## no need old version
  #include nodejs::v0_4
  #include nodejs::v0_6
  #include nodejs::v0_8
  include nodejs::v0_10

  # default ruby versions
  ## no need old version
  #include ruby::1_8_7
  #include ruby::1_9_2
  #include ruby::1_9_3
  include ruby::2_0_0
```

- firevalutを使わない時は、オプションつける

```
$ script/boxen --no-fde
```

- nodeのバージョンが指定されていないというエラーが出るので、明示的に指定しておく

```manifests/site.pp
  # NodeJS stuff
  class { 'nodejs::global':
    version => 'v0.10'
  }
```

- デフォルトで入ったrubyは readline の接続先の問題で、irbに日本語が通らないので、接続先を直す

```manifests/site.pp
  ## for ruby readline
  package {
    [
      'readline',
    ]:
  }
  # readlineの接続先直す | iii ThreeTreesLight
  # http://threetreeslight.com/post/58786169382/readline
  exec{ "replace_readline_of_ruby" :
   command => "find /opt/boxen/rbenv -name readline.bundle -exec install_name_tool -change /usr/lib/libedit.3.dylib `find /opt/boxen -name libreadline.dylib` {} \\;",
  }
```

- rbenv の globalを設定

```manifests/site.pp
  # set ruby global version
  class { 'ruby::global':
    version => '2.0.0'
  }
```


- [注意] boxenで入った memcacahed や mysql 等のdaemon系？は起動ポートがデフォルトと違う。
基本的に prefix が ```BOXEN``` の環境変数に入っている

```
$ echo $BOXEN_MEMCACHED_PORT
21211
$ echo $BOXEN_MYSQL_PORT
13306
```
詳細は、[boxen/puppet-memcached](https://github.com/boxen/puppet-memcached),[boxen/puppet-mysql](https://github.com/boxen/puppet-mysql) 等を見ると、rails等の設定サンプルが書いてあったりするので、とりあえず確認すると吉
logrotate の設定を確認する

シンタックスエラーは -d オプションでチェックできる。

```
$ logrotate -d /etc/logrotate.d/hoge
```

この場合、rotate は実行されない。

postscript などの動作も確認したい場合、`logrotate /etc/logrotate.d/hoge` とすれば cron を待たずに実行できるけど、タイミングによっては必ずしも rotate されない。
そういった場合は `--force` で強制的に rotate できる。

さらに daily/weekly/yearly などの動作も確認したい場合は、logrotate.status を変更する。
デフォルトは /var/lib/logrotate.status で、`--status` オプションで変更できる。
logrotate は status ファイルに、いつ rotate したかを記録し、次回実行時にそれを元に rotate するか判断する。
従って logrotate.status を変更すれば、--force を使わずとも rotate の確認が可能になる。
Maven で UnsatisfiedLinkError


JenkinsでMavenを叩いた所 `java.lang.UnsatisfiedLinkError`がスローされた.
例外の内容を読んでみると出ていたので`libXtst`をインストールすることで解決！

>   libXtst.so.6: cannot open shared object

Scientific Linux 6.3だったのでyumのsl-securityリポジトリに`libXtst`があったのでそれをインストール

```bash
$ sudo yum install libXtst
```

元々、Mavenを使っていたのでpomにMavenのプラグインを追記して以降発生したようです.
具体的にはどのプラグインかは未確認です.

## 例外の内容

```
ERROR: Failed to parse POMs
java.io.IOException: Remote call on Channel to Maven [/usr/java/latest/bin/java, -cp, /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven31-agent-1.4.jar:/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven3.1.1/boot/plexus-classworlds-2.5.1.jar:/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven3.1.1/conf/logging, jenkins.maven3.agent.Maven31Main, /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven3.1.1, /var/cache/jenkins/war/WEB-INF/lib/remoting-2.32.jar, /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven31-interceptor-1.4.jar, /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.4.jar, 41793] failed
	at hudson.remoting.Channel.call(Channel.java:723)
	at hudson.maven.ProcessCache$MavenProcess.call(ProcessCache.java:160)
	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:813)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:586)
	at hudson.model.Run.execute(Run.java:1603)
	at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:506)
	at hudson.model.ResourceController.execute(ResourceController.java:88)
	at hudson.model.Executor.run(Executor.java:247)
Caused by: java.lang.UnsatisfiedLinkError: /usr/java/jdk1.7.0_45/jre/lib/amd64/xawt/libmawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
	at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890)
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1851)
	at java.lang.Runtime.load0(Runtime.java:795)
	at java.lang.System.load(System.java:1062)
```
apiDoc を Java で使うときに気をつけたこと

[apiDoc](http://apidocjs.com/) を Java で使ってみたよ。

# package.json を作る

こんな内容でもいいから package.json を作ってカレントディレクトリに置いておく。

```json:package.json
{
  "name": "Great API",
  "version": "1.0.0",
  "description": "すごいよ！！！"
}
```

# オプションで java を明記する

apiDoc はデフォルトで js ファイルしか見ないので、-f オプションで java を見るように設定します。

```bash
apidoc -o apidoc -f ".*java$"
```

# javadoc のアノテーションと混ぜない

```java
/**
 * @api {get} /search.json 検索します
 * @return 結果のJSON
 */
```

こんな書き方をすると、return なんて知らん！って言われてしまいます。解決方法は以下のどちらか。

 * 通常の javadoc はバッサリ切ってしまう
 * apiDoc, javadoc の順で書く。メソッドの直前に javadoc を書いておくことで javadoc 的には OK
XY-Sort(2013.1.23の過去問)

1日1個 @nabetani さんの作った問題を解くAdventCalendarの13日目です。

今日の問題は http://nabetani.sakura.ne.jp/hena/ord7xysort/ にあります。

```hs
module Doukaku.XYSort (solve) where
import Data.List (transpose, sort)
import Data.Char (ord)

table :: [[Int]]
table = [
  [4, 1, 4, 2, 1, 3]
  , [7, 3, 2, 0, 5, 0]
  , [2, 3, 6, 0, 6, 7]
  , [6, 4, 5, 7, 5, 1]
  , [3, 1, 6, 6, 2, 4]
  , [6, 0, 5, 5, 5, 1]
  ]

solve :: String -> String
solve = concatMap show . head . foldl (flip change) table

num :: Char -> Int
num c
  | c `elem` "ABCDEF" = ord c - ord 'A'
  | otherwise         = ord c - ord 'u'

change :: Char -> [[Int]] -> [[Int]]
change c
  | c `elem` "ABCDEF" = transpose . change' (num c) . transpose
  | otherwise         = change' (num c)

change' :: Int -> [[Int]] -> [[Int]]
change' n tb = map ((tb !!) . snd) . sort . zip base $ [0..]
  where
    base = transpose tb !! n
```

`!!`使いまくっているので行儀も効率も悪いですが、素直な感じになりました。

http://qiita.com/Nabetani/items/7b08b0eb9ef84d7cfe49 に他の方の回答もありますので、見ると参考になるでしょう。
翻訳してくれている皆さんありがとう

## ソフトウェアが翻訳されるまで

ソフトウェアが翻訳されるまでの過程を、ざっくりとまとめてみました。

1. ソフトウェアを翻訳可能にする
1.  翻訳する
1.  翻訳がソフトウェアに取り込まれる

ソフトウェアの多言語対応もかなり大変です。とはいえ、プログラムを書くときのお作法は、gettextがだいぶ広まっています。なので、ソフトウェア自体は多言語対応している(メッセージを翻訳すれば、他の言語でも使えるようになっている)ケースが多いです。

翻訳する作業は、人力でやるため、かなり大変というか手間がかかります。将来的には自動翻訳になるかもしれませんが、現時点では人手がかなりかかります。

さて、頑張って翻訳したファイルですが、ソフトウェアに取り込まれると使い易くなります。ここも最近はgithubでマージすれば完了だったりするので、比較的楽になっています。

今日の記事では **2. 翻訳する** に焦点をあてます。

## なぜ翻訳するのか？

なぜ翻訳するか、というと、「そのソフトウェアを使いたい」からです。より正確に言うと、「ソフトウェアを翻訳するという手間をかけてでもそのソフトウェアを使いたい」からです。

## 翻訳されているソフトウェア

翻訳されているソフトウェアは、なぜ翻訳されているか、というと、翻訳した人がいるからです。翻訳した人は「翻訳してでもソフトウェアを使いたい」と思ったわけです。(開発元が発注して翻訳しているケースがあるかもしれませんが、そのケースは除外して考えています。)
なので、翻訳されていないソフトウェアで使いたい物があったら、自分で翻訳するわけですが、良いソフトウェアは既に翻訳に取りかかっている人がいることが多いです。このため、良いソフトウェアが、翻訳された状態で利用できる訳です。

## 翻訳してくれている皆さんありがとう

私もいろいろなソフトウェアの翻訳に関わっています。でも翻訳作業をしたことがあるソフトウェアは、せいぜい10個程度ですし、継続的に翻訳しているのは2〜3個です。なので、単に使っているだけのソフトウェアのほうがよっぽど多いですね。
翻訳してくれている皆さんのおかげで、いろいろなソフトウェアが使えているわけですね。皆さんありがとうございます。
zsh で source して使うプラグインを作るのは止めにしよう

zsh のシェルスクリプトを作るとき、基本的には普通のシェルスクリプトとして書く。「普通」というのは、1行目に `#!/bin/zsh` と書いてあって、今のシェルとは別プロセスで動かすスクリプトのことだ。

例えばこんな感じ。

```zsh:script_sample.zsh
#!/bin/zsh
echo "Hello World"
```

```zsh
# 使うとき
% chmod 755 script_sample.zsh
% ./script_sample.zsh
Hello World
```

でも、そうではなくて `source` して使うスクリプトを書くことがある。

```zsh:source_sample.zsh
homecd () {
  cd
  ls
}
```

```zsh
# 使うとき
% source source_sample.zsh 
% homecd
Desktop/  bin/  local/  tmp/   vimfiles/
Dropbox/  etc/  var/    work/
```

特に、cd や bindkey など、今動いているシェル上で副作用のある処理を行いたいときは `source` を使わないとうまくいかないだろう。

一方、`source` にはこんなデメリットがある。

- .zshrc でいっぱい `source` するとzsh の起動が遅くなる
- 現在動いているシェルの alias 設定の影響を受ける

特に2つめが厄介だ。例えば `grep` とかしたときに、`alias grep='grep -E'` なんか設定してあったら正規表現の意味が変わってしまう。一応 `command grep` とすれば alias を設定していない元の `grep` を実行できるけど、いちいちそう書くのも手間だ。

そんなときは `autoload` を使う形に書き換えるとうまくいく。

`autoload` というのは「関数本体の読み込みを実行する時まで遅らせる」という zsh の機能のこと。これで ~/.zshrc にいっぱい書いても起動が遅くならないですむ。さらに alias を無効する(現在の alias の影響を受けない)ようにもできる。これで変なことを気にしなくて良くなるので、関数が書きやすくなる。

### 基本的な例

まずは `hello_autoload` という名前の関数を autoload する例を見てみる。

まず、以下の内容でファイルを作成する。ファイル名は hello_autoload とする。このファイル名が実際に実行するときの関数名になる。

```zsh:hello_autoload
echo "Hello Autoload!"
```

普通、関数の定義は

```zsh
hello_autoload () {
  # 関数の中身
}
```

みたいに書くんだけど、 `autoload` するときは関数の中身だけ書くことに注意する。

この hello_autoload ファイルを $fpath の通ったところに配置すれば準備完了。

後は ~/.zshrc で autoload して、

```zsh:.zshrc
autoload hello_autoload
```

使いたい時に呼びだせば OK。

```zsh
% hello_autoload
Hello Autoload!
```

### 実践的な例

次は実際にプラグインっぽく作るときの書き方を見てみる。今回は「指定したディレクトリに移動して `ls` する」という関数を作ってみる。名前は `cdls` にする。

`cdls` という名前で次のファイルを作成する。

```zsh:cdls
cd $1
ls
```

ファイルを置く場所はどこでもいいんだけど、今回は ~/zsh/functions/Cdls/ とした。ディレクトリ名も何でもいいんだけど、慣習として先頭は大文字にするようだ。

次に .zshrc で fpath を通して `autoload` する。

```zsh:.zshrc
fpath=(~/zsh/functions/*(N-/) $fpath)

autoload -Uz cdls
```

`autoload` で `-U` と `-z` というオプションを指定してる。

`-U` は、呼び出し側のシェルで `alias` 設定を設定していたとしても、中の関数側ではその影響を受けなくなるというオプション。`ls` は alias を設定してることが多いと思うけど、この場合はそのままの `ls` が実行される。

`-z` は関数を zsh 形式で読み込むというオプション。代わりに `-k` を指定すると ksh 形式で読み込むようになる。普通は zsh 形式で関数を書くので `-z` と指定しておけば問題ない。

後は適当に source ~/.zshrc して、使いたい時に呼び出すだけだ。

```zsh
% cdls
Desktop  Dropbox  bin  etc  local  tmp  var  vimfiles  work
% pwd
/home/mollifier

% cdls ~/work
github-sandbox  javascript  nodejs  scala  vim  zsh
% pwd
/home/mollifier/work
```

うまくいってる。

これ以降、autoload が必要なスクリプトを追加するときは同じように ~/zsh/functions/ の下にディレクトリを作って配置すれば良い。

`fpath=(~/zsh/functions/*(N-/) $fpath)` という設定をしているので、~/zsh/functions/ の下にディレクトリがあればそこに勝手に fpath が通るようになってる。なので fpath の設定は書きなおさなくても OK。

こんな感じで `source` しないようにすればもっと便利になると思うので試してみてください!
Apache2@Debianでのバーチャルホスト設定まとめ

たまに設定すると細かなところ忘れてて躓いたりするんでまとめました

IPベースあるいは名前ベースでのバーチャルホスト設定がメインです。

#設定ファイル
DebianパッケージのApache2は以下のように設定ファイルが分散しています。

+ /etc/apache2/apache2.conf

各サイト共通の設定とかApacheの基本設定を記述する。

+ /etc/apache2/conf.d/*

conf.d以下のファイルに記述されている設定が追加される。

+ /etc/apache2/httpd.conf

通常は空ファイル。普通はここに設定を記述しない。RHL系で言うhttpd.confの内容はapache2.confとports.confとmods-availableとsites-availableに記述する。なんかApache関連のパッケージがインストールされたりすると、ここに設定ファイルが入ってくる。

+ /etc/apache2/ports.conf

待ちうけIPアドレスとポート番号、NameVirtualHostディレクティブを記述する。

+ /etc/apache2/mods-available/*

使用可能なmodの設定ファイルが入っている。

+ /etc/apache2/mods-enable/*

有効にするmodの設定ファイルへのシンボリックリンクが入っている。modを有効/無効にする際は、明示的にシンボリックリンクをいじる必要はなく、「a2enmod/a2dismod 設定ファイル名(拡張子はいらない)」コマンドで可能。

+ /etc/apache2/sites-available/*

使用可能なバーチャルホストの設定が入っている。ホストごとに設定ファイルを分ける。

+ /etc/apache2/sites-enabled/*

modと同様に、設定ファイルへのシンボリックリンクが入っている。これもa2ensite/a2dissiteコマンドがある。

#バーチャルホストの設定
##ports.conf
```
 Listen 80
```
といったように待ち受けポートを記述。SSLを使う場合は、

```
 Listen 443
```

と記述する。IPベースとポートベースのサイトが混在する場合は、

```
 Listen 192.168.0.101:80
 Listen 192.168.0.101:8080
 Listen 192.168.0.102:80
```

のように記述する。
次に、名前ベースのホスティングを行い場合は、

```
NameVirtualHost *:80
```

のように記述する。固定アドレスのときはIPアドレスを明示的に記述してやってもよい。名前ベースのみの時は*で問題ない。
IPベースと名前ベース混在のホスティングを行いたい場合は、

```
NameVirtualHost 192.168.0.101:80
```

のように名前ベースのホスティングを行うIPアドレスに対してのみ記述する。
名前ベースのホスティングを行わないIPアドレスに関しては要らない。

##sites-available
sites-availableディレクトリ以下にサイト毎の設定ファイルを作成し記述していく。

```
<VirtualHost IPアドレス:ポート番号>
     DocumentRoot  /hogehoge/example1
     ServerName   www.exampl1.com
     ...
</VirtualHost>
```

のように記述していく。
ServerAliasだとかなんだのは普通にVirtualHostディレクティブ内部に記述していけば大丈夫。
NameVirtualHostを記述していれば、www.exampl2.comに関しても同様の設定を行うことにより、ServerNameのホスト名にあわせてホスティングを行ってくれます。
 www.exampl1.comへのアクセスなら/hogehoge/example1を表示、www.exampl2.comへのアクセスなら/hogehoge/example2を表示といった感じです。


ここで、名前ベースのホスティングのみなら、IPアドレスは*で大丈夫です。ポートベースのホスティングも使用しないならポート番号も省略可能です。
また、複数のIPアドレスで同じサイトを表示したいとき(イントラネットとインターネットの間にある時等)は、スペースを空けてIPアドレス:ポート番号を複数記述すれば大丈夫。

#設定例
www.exampl1.comでサイト1、
www.exampl2.comでサイト2(SSL込み)を表示したいときの設定例を記述してみます。
www.exampl1.com:80, www.exampl2.com:80, www.exampl1.com:443(SSL用)のホスティングを行えばいいので、以下のように設定。

```:ports.conf
Listen 80
Listen 443
NameVirtualHost *:80
```

ポート443に関してはサイトが一つしかないのでNameVirtualHost *:443は必要ない(はず)。

```:sites-available/example1
<VirtualHost *:80>
  DocumentRoot /hogehoge/example1
  ServerName   www.exampl1.com
</VirtualHost>
```

```:sites-available/example2
<VirtualHost *:80>
  DocumentRoot /hogehoge/example2
  ServerName   www.exampl2.com
</VirtualHost>
```

``` :sites-available/example2-ssl
<VirtualHost *:443>
  DocumentRoot /hogehoge/example2
  ServerName   www.exampl2.com
</VirtualHost>
```

以下コマンドでサイトの設定を有効化

```
a2ensite example1
a2ensite example2
a2ensite example2-ssl
```

以上で動くはず。
さらに別IPアドレスのホスティングを行いたい場合は、*の代わりにIPアドレスを明示してやればよい。
まあhttp://httpd.apache.org/docs/current/ja/vhosts/に詳しく載ってるんでそれみたほうが手っ取り早いですが。
AtCoder Beginner Contest #003 参加記


はい。
[http://abc003.contest.atcoder.jp/](http://abc003.contest.atcoder.jp/)

A問題
最初は問題文を全然読んでなくて、サイコロは6面までとの思い込みで苦戦。。。
自分が書いたのはサンプルケースについてた解説のような式をforで回すパターンを。ただコレforで回す以外に 10000*(1+N)/2 という方法が合ったようです。(1+N)/2で1からNまでの総和の平均出して10000円掛ければ同じ値が出たようです。

```python:A問題
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
import sys
import io
import re
import math
#start = time.time()
start = time.clock()
a = 0
y=10000.0
n = float(raw_input())
for i in range(1,(int(n)+1)):
    a+=(y*i*(1/n))
print a
```
↑が時間中に提出したもの、↓が寝る前に書きなおしてみたもの

```python:A問題書き直し
n=input()
print sum([10000*(x+1)*(1.0/(n)) for x in range(n)])
```

B問題
文字列をリスト化して受け取って両方共を先頭から見て、
同じ文字なら次の文字を見に行く
いずれかが@で合ったならもう一方はatcoder置き換えられるかチェック
置き換えられるなら次の文字を、出来なければ'You will lose'
先頭から最後まで見終われば'You can win'
時間内には提出出来ず。

```python:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
import sys
import io
import re
import math
#start = time.time()
start = time.clock()
i = 0
chk=['a','t','c','o','d','e','r']
 
S = list(raw_input())
T = list(raw_input())
while i<= len(S):
        if i == len(S):
            print 'You can win'
            i+=20
        elif S[i]==T[i]:
            i+=1
        elif S[i]=='@' and T[i] in chk:
            i+=1
            pass
        elif T[i]=='@' and S[i] in chk:
            i+=1
            pass
        else:
            print 'You will lose'
            i+=20
```

配列の扱い方で色々と絶望的に差があるので他の方の回答を沢山読みます。。。

C問題
問題文からサンプルまで見てすぐ方針が決まった私的には今回の最易問だったような。先にA,B見てたので提出は遅いですけど。。
昇順でリストをソートして後ろから見ることが出来る本数を〜を達成できる最大レートになると信じて疑っていなかった。

```python:C問題
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
import sys
import io
import re
import math
#start = time.time()
start = time.clock()
a = 0
sw=0
 
(N, K) = map(float, raw_input().split())
R = map(float, raw_input().split())
x=N-K
R.sort()
for i in range(int(x), int(N)):
#    print a
    a=((R[i])+a)/2
print a
```

はい。
Linux で $HOME 内の日本語ディレクトリを英語表記にさせる

「デスクトップ」、「ダウンロード」…等のデフォルトで用意されている
2バイト文字のディレクトリを英語表記に変えるには、ターミナルで以下のコマンドを打ち、

```shell-session:
$ LANG=C xdg-user-dirs-gtk-update
```

実行後に出てくるウィンドウで、「Don't ask me this again」にチェックを入れて、
[ Update Names ] ボタンを押下すれば英語表記となる。

設定ファイルは ~/.config/user-dirs.dirs にあり。
ボロノイ/ドロネー図の描き方

![Delauney2D.png](https://qiita-image-store.s3.amazonaws.com/0/31414/8fe56996-3d31-5c4d-9d28-07996bc3d946.png)
・[ボロノイ/ドロネー図の描き方](http://www.luxidea.net/delphi-lab/delauney2d/) @ [LUXIDEA institute](http://www.luxidea.net/)
MroongaのテーブルとGroongaのテーブルの対応関係

# はじめに

Mroongaは、MySQL用のストレージエンジンであるため、MySQLユーザにとって、Groongaをほとんど意識せずに、容易に高速な全文検索を行うことができます。

Mroongaストレージモードで作成されるファイルの実体は、Groongaデータベースそのものであり、直接Groongaのコマンドを発行したり、GroongaのCライブラリやRroongaで作られたツールを使ってGroongaデータベースをメンテナンスすることも可能です。

そこで、MroongaのテーブルとGroongaのテーブルの対応関係を追ってみます。

[続きを読む](http://createfield.com/Mroonga%E3%81%AE%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%A8Groonga%E3%81%AE%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E5%AF%BE%E5%BF%9C%E9%96%A2%E4%BF%82 "MroongaのテーブルとGroongaのテーブルの対応関係")
Elixir の HTTPotion を使って Qiita API にアクセスしてみる

# 下準備

```bash
$ mix new qiita --bare
$ cd qiita/
```

`mix.exs` を開いて deps 関数を以下のように書く。HTTP API として [HTTPotion](https://github.com/myfreeweb/httpotion) を使い、json の処理ように jsx を使うようにします。

```ex
  defp deps do
    [
      { :httpotion, github: "myfreeweb/httpotion" },
      { :jsx, github: "talentdeficit/jsx" }
    ]
  end
```

書けたらライブラリの依存関係を解決します。

```bash
$ mix deps.get
```

# コード

そして `lib/qiita.ex` ファイルには以下を書きます。HTTPotion の README にサンプルコードとして載っている、GitHub API のパクリです。

```ex
defmodule Qiita do
  use HTTPotion.Base
  def process_url(url) do
    "https://qiita.com/api/v1/" <> url
  end

  def process_response_body(body) do
    json = :jsx.decode to_string(body)
    atomize_keys_json = Enum.map json, fn ({k,v}) -> { binary_to_atom(k), v } end
    :orddict.from_list atomize_keys_json
  end
end
```

これでコードは終わりです。HTTPotion.Base を use することで get, post, delete など使えるようになるのですが短いコードが cool ですね。ちなみに HTTPotion 自体も1ファイルだけで実装されています。HTTPotion が依存している ibrowse が結構頑張っているんですかね？
話がそれましたが一先ずこれで最低限のところまでできたので、後は試しに Qiita にアクセスしてみます。
まずはユーザ情報を取ってきてみます。

```iex
$ iex -S mix
iex(1)> Qiita.start
:ok
iex(2)> body = Qiita.get("users/ma2ge").body
...
iex(3)> body[:github]
"ma2gedev"
```

取れてるっぽいですね。次は post の例として投稿してみます。YOUR_TOKEN 部分は自分のものに置き換えてください。

```iex
iex(1)> Qiita.post("items?token=YOUR_TOKEN", ["title=test&tags[][name]=elixir&body=test from elixir api client&private=true"])
HTTPotion.Response[status_code: 201,
...
```

201 ということで[投稿](http://qiita.com/ma2ge/private/0e300fc869fce6381e20)されました。
body の渡し方が分からずハマりましたが、文字列として直接表現すれば良かったぽいです。TOKEN 取得するまで結構かかりました。。
このままだと少し使いづらいので、ハッシュぽく渡せるようにすると API としてよくなりそうですね。

# まとめ
HTTPotion 使ったら Qiita API にアクセスするのも、結構間単にできた。他にも HTTPoison という HTTP ライブラリもあるので、色々試してみるのもいいかもしれない。
今回のサンプルコードは[github](https://github.com/ma2gedev/qiita-ex)においておきました。

このエントリは Elixir Advent Calendar 2013 の12日目でした。明日は @udzura さんです！

# メモ
Qiita.start 呼ぶのが必須ぽいのですが、まだ理由を調べきれていないです。Erlang のプロセス立ち上げる必要があるため？？
oh-my-zshのgit pluginのaliasを使いこなす

皆さんzsh使ってますか。
oh-my-zsh使ってますか。

[oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh)はzshの便利ツール的なものですが、これ自体の説明はしません。ぐぐったら山ほど出てくると思います。

このエントリで紹介したいのは、このoh-my-zshのgit pluginを入れた時に設定されるaliasです。

git pluginは.zshrcに`plugins=(git)`と書いてから`oh-my-zsh.sh`を読み込んだら使うことが出来ます。
[oh-my-zshのzshrcテンプレ](https://github.com/robbyrussell/oh-my-zsh/blob/master/templates/zshrc.zsh-template)に`plugins=(git)`と書いてあるからそのままにしてあるけど結局何が変わるのか分からないっていう人多いんじゃないでしょうか。僕はそうでした。

で、git pluginを入れると何が起こるかというと、gitのaliasとfunctionが読み込まれます。
具体的にはこれらが読み込まれます。
https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/git.plugin.zsh

とはいえこれ全部覚えるとか骨が折れるし1分どころじゃなくなるので、おすすめを2つ紹介します。

```zsh
alias ggpull='git pull origin $(current_branch)'
alias ggpush='git push origin $(current_branch)'
```

`current_branch`は名前の通り[現在いるbranch名を取ってくる関数](https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/git.plugin.zsh#L104-L112)です。
つまり、`ggpull`で現在いるbranchをoriginからpull、`ggpush`でoriginに今いるbranchをpushします。
よく使うコマンドですし名前も覚えやすいのでおすすめです。

ここで紹介はしませんが他にも便利なaliasが多いので、一度目を通してみてはどうでしょう。
https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/git.plugin.zsh (再掲)

個人的には`gst`で`git status`、`gco`で`git checkout`、`gcm`で`git checkout master`あたりをよく使います。
Assetsの内容がアプリに反映されないときは


Assetsの中をいくら変更してもアプリに反映されないときは、メニューから

```
Product→Clean
```
を選択すればよい。

キーボードショートカットは

```
Command+Shift+K
```

でOK。


これに３日くらいはまってた・・・
コンソールでラテン語を勉強する。


# あるいは、WORDS の思い出。

William Whitaker 氏の [WORDS] (http://en.wikipedia.org/wiki/William_Whitaker's_Words) に出会わなければ、私はラテン語を勉強すること
はなかったかもしれない。

ラテン語の複雑な活用・屈折のパターンは、見るからにプログラムで解析でき
そうに見える。コンソールからWORDS を立ち上げて実際にラテン語
の単語を入力すると、たちどころにその原形や屈折・活用の解析結果を表示し
てくれる。ラテン語を読むとき、この機能は大変重宝した。

氏は米国空軍に在籍中は有名なプログラマであったらしく、Ada の開発に携わっ
ていた。WORDSは氏の退職後（退職時の階級は大佐）に作成された。そのため、
WORDSもまたAdaで書かれている。

コンソールでラテン語が解析できるため、その上に様々なスクリプトを書
いて、自分のUIを作ることができた。これを使って、Emacs のLookup に、
WORDS用の[エージェント] (https://github.com/lookup2/lookup2/blob/master/lisp/ndlatin.el) を作成し、
Emacsのバッファにラテン語原文を入れ、学習メモをはさみつつラテン語を読み
込んでいた。

氏は、2010年に [鬼籍] (http://www.legacy.com/obituaries/mywesttexas/obituary.aspx?n=william-whitaker&pid=147336402) に入られた。

しかし、氏のプログラムは未だに広くラテン語学習者に使われている。

一例を挙げれば、Macのラテン語辞書プログラム [Interpres] (https://sites.google.com/site/erikandremendoza/) もWORDSの上にUIをか
ぶせたものだ。アプリケーションフォルダの奥深く、
`/Applications/Interpres.app/Contents/Resources/words` には、氏の開発した
コマンドラインツールがそっくりそのまま入っており、コンソールから呼び出
して利用することが出来る。

そのソースコードと Windows/Mac用の [バイナリ] (https://github.com/dsanson/Words/tree/master/binaries) は、Interpres の作者によって [github] (https://github.com/dsanson/Words) に公開されている。
Xperia Z1のSensorEventのタイムスタンプがナノ秒単位のUNIXタイムだった件

[以前](http://akihito104.hatenablog.com/entry/2013/06/29/160248)、`SensorEvent`のタイムスタンプはシステム起動からのナノ秒単位の時間なので何時何分におきたイベントか知りたいときは一工夫必要だというようなことを書いた。しかし、Xperia Z1(Android 4.2.2)で表題のようなことを確認した。件のアルゴリズムで時刻を計算していたらとんでもなく先の日付になっていた。

件のアルゴリズムは、`SensorEvent.timestamp`と`System.nanoTime()`とは同じ起源の時間表現だという前提であったのだが、それもXperiaZ1の世界では違うということである。そういうことは大抵急いでいる時に発覚するので（したので）なかなかの衝撃だった。

確かに、公式のリファレンスには`SensorEvent.timestamp`にはナノ秒の時間が格納されているよ的なことしか書いていないが、少なくとも2通りの表現方法が存在しているのはちょっとこまる。桁数をみて場合分けすればよいのだろうか。
全角半角入り混じった文字列から半角数字のみ抜き出す

## コード
```js
var num = str.replace(/[^\x01-\x7E]/g, function(s){
    return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
}).replace(/\D/g, '');
```

## 参考リンク
http://www.nishishi.com/blog/2013/02/zenkaku_hankaku.html
http://hodade.adam.ne.jp/seiki/page.php?s_zenkaku
よく実行するコマンドにキーバインドを割り当てると捗る話

履歴を使えば同じコマンドを高速に実行できますが、キーバインドを使えばさらに高速化することが可能です。
zshのキーバインドの基礎を紹介します。

## zshのキーバインドの概要

zshには `bindkey` という組み込み関数が存在します。詳しくは [zshzle(1)](http://www.manpagez.com/man/1/zshzle/) の ZLE BUILTINS を読めということなんですが、これを使うとキーバインドを設定できます。

例えばzshをemacsモードで使っているとCtrl-Aでカーソルを先頭に移動させられますが、あれは内部的にはこのキーバインド機能を使って実現されているようです。

```zsh:.zshrc
bindkey -d  # いったんキーバインドをリセット
bindkey -e  # emacsモードで使う
# bindkey -a  # vicmdモード
# bindkey -v # viinsモード
```

おそらく.zshrcに上記のようなコマンドがある書いてある人が多いと思うんですが、この `bindkey -e` でemacsっぽい挙動をするキーバインドがあれやこれやと定義されるわけです。

オプション無しで `bindkey` コマンドを実行すると現時点で有効化されているキーバインドが一覧されます。

```zsh
% bindkey | grep '\^A'
"^A" beginning-of-line
```

この行は『Ctrl-Aを押すとbeginning-of-lineが実行されます』という意味です。このbeginning-of-lineは先ほどのzshzle(1)のSTANDARD WIDGETSのMovementの中に書かれていています。

> **biginning-of-line** *(^A) (unbound) (unbound)*
> Move to the beginning of the line. If already at the beginning of the line,
> move to the beginning of the previous line, if any.

蛇足ですが一行目の *(^A) (unbound) (unbound)* は左から順に

1. `bindkey -e` でCtrl-Aにバインドされる
2. `bindkey -a` ではバインドされない
3. `bindkey -v` ではバインドされない

という意味です。

## 新しいキーバインドを作る

好きな処理にキーバインドを当てるにはだいたいこんな感じのことをします

```zsh:.zshrc
function my_function() {
    # やりたい処理
    # キー実行時のプロンプトの内容は $BUFFER で取れる
    zle reset-prompt  # プロンプトを再描画
 }
zle -N my_function  # my_functionをwidgetとして登録
bindkey '^A' my_function # my_functionをCtrl-Aにバインド
```

味噌は `zle -N` で関数をwidgetとして登録できること、そして `bindkey` は関数ではなくwidgetを割り当てるものである、ということです。

## よく使うコマンドにキーバインドをあてる

なんとなくzshのキーバインドが何かわかってきたところで、日常的によく使うあれこれのコマンドにキーバインドを割り当てておくと大変便利です。

例えばgit-statusは息を吸う様に実行したくなります。毎回キーを打っていると腱鞘炎の危険があるのでもっと簡単に実行できるようにキーバインドを割り当てましょう。

```zsh
function _git_status() {
    if [ "$(git rev-parse --is-inside-work-tree 2> /dev/null)" = 'true' ]; then
        echo git status -sb # git statusを実行したっぽくみせかける
        git status -sb
    fi
    zle reset-prompt
}
zle -N git_status _git_status  # _git_status関数をgit_status widgetとして登録
bindkey '^G^S' git_status
```

gitリポジトリ内で間髪入れずにCtrl-G+Ctrl-Sと打つと `git status -sb` と表示されます。関数の中身をあれこれ変えれば好みのキーバインドを簡単に作ることができます。よく実行するコマンドを登録しておくといろいろと捗るのでおすすめです。

ちなみにemacsモードではCtrl-Gにはsend-breakというwidgetが登録されているのでCtrl-Gを押した後にグズグズしているとそちらが実行されます。
Riak Source Code Readingに参加した

先日行われたRiak SCRに行ってきたので雰囲気を伝えるエントリ。

## 大雑把なタイムテーブル

* 19:00 Bahsoのオフィスに集合、飲み物を頂く
* 19:00 - 20:00 前半。篠原さんがriak_coreについて発表
* 20:00 - 20:15 休憩という名の質問タイム
* 20:15 - 21:00 後半、と言うか前半の続き

## 雰囲気
話す予定の人が[Riak SCRのmarkdown](https://github.com/kuenishi/riak_scr_jp)とソースコードをプロジェクタに映しながら解説をしていく。
gistはあらかじめ用意しておく事前資料。
Erlangの細かい文法が分からなくても、要所は教えてくれるので大丈夫。でもプログラミングやソフトウェア一般の知識は必要。
基本的には処理の流れを追いながら、アルゴリズムとその実装を読み解いていく。
なんとなくEmacs使っている人が多い。(公式でerlang-mode配ってるし全体的にEmacs推奨な雰囲気。でもvimもOK)
質問があったら随時してOK。
人数は10名以下の少人数。
飲み物は缶ビール、ジンジャエール、お茶などから選べる。
![s_IMG_0093.JPG](https://qiita-image-store.s3.amazonaws.com/0/11737/fc72fa34-369b-5914-08e8-55d48e0b7dec.jpeg "s_IMG_0093.JPG")

## 進み方
最初にmarkdownを見ながら、今回読むソースコードの概要と見どころ、代表的な関数などを説明。
その後エディタを映しながらひたすら処理を追っていく。
アルゴリズムなど本質的な内容になったら、議論になることも多い。
また、riakにattachして関数を実際に使ったり、値を見たりすることも多い。
これまでは前半と後半で全く別のソースコードを読むことも多かったが、今回はriak_coreという重いテーマだったので、前後半でテーマが一貫していた。ちなみにriak_coreは今後も読み進めていく予定。難しい。

## 感想
始終和やかな雰囲気で進むので、安心しながらソースコードリーディングに集中できる。
実際にriakの動作を目の前で見て、返り値を皆で見ながら理解を深めていくことの、学習効果の高さを実感した。
後半になるに従って高度な内容になっていくが、議論を聞いてメモを取りながらならなんとか追いつける進行。（でも僕は2/3くらいのあたりから追いつかなくなっていく…）
riakの使い方や運用のコツなどすぐに役立つ内容に触れることもあり、実用面でも学ぶことが多い。
また、日本ではユーザが少ないErlangに触れられる貴重な機械でもあり、それが目的で参加する人もいるようだ。
実際、Erlangの実装例などで不明点を聞けるので、riak以外でも新たな発見が非常に多く、文字通り勉強になる。
定期的に少人数で開催されているOSSの読書会であり、効率的なコードリーディングの技術なども盗むことができるので、僕のように「OSSにコミットしたいけど何から始めたら良いか分からない」という人も参加するといいと思う。

ちなみに飲み物はジンジャエールがオススメ。とても美味しいです。
Xamarin.iOS で ViewController の名称を変える


今日も小ネタです。

Xamarin.iOS の SingleView Application とか(storyboard じゃないやつ)でプロジェクトを作ると、唯一の ViewController の名称が 「プロジェクト名ViewController.cs(.xib)」ってなるんですけど、なんかカッコ悪い。

MainViewController とか、StartupViewController にしたいですね。その方法です。

## 1. プロジェクトを作る

![](http://blog.amay077.net/assets/images/posts/xamarin_ios_rename_viewcontoller_01.png)

「RenameTest」という名称でプロジェクトを作ると、ViewController は ``RenameTestViewController.cs`` になります。

## 2. クラス名をリファクタ機能で変更

``RenameTestViewController.cs`` を開いてクラス名のところで右クリック→リファクタ。

![](http://blog.amay077.net/assets/images/posts/xamarin_ios_rename_viewcontoller_02.png)

``MainViewController`` に変更します。

これにより以下のようにファイルが変更されます。(git status を晒すことでスペースを稼ごう…)

```
$ git status
 On branch master
 Changes to be committed:
	modified:   AppDelegate.cs
	renamed:    RenameTestViewController.cs -> MainViewController.cs
	renamed:    RenameTestViewController.designer.cs -> MainViewController.designer.cs
	modified:   RenameTest.csproj
```

## 3. xib ファイル名を変更する

``RenameTestViewController.xib`` はリファクタに追従しないので、手動でファイル名を変更します。

それから、``MainViewController`` のコンストラクタで、リテラルに xib の名称を指定しているのでそこも修正します。

```csharp:MainViewController.cs
namespace RenameTest
{
    public partial class MainViewController : UIViewController
    {
        public MainViewController() : base(“MainViewController", null) // ← ココ！
        {
        }
```

## 4. Xcode との連携確認

.xib ファイルをダブルクリックすると Xcode が起動します。これは OK。けどファイル一覧を見てみると…

![](http://blog.amay077.net/assets/images/posts/xamarin_ios_rename_viewcontoller_03.png)

``RenameTestViewController.h`` ってファイルができてる！
``MainViewController.h`` になってほしいのですが。。。

Xamarin Studio にもどって、「RenameTestViewController」 が残っているところを探します。

![](http://blog.amay077.net/assets/images/posts/xamarin_ios_rename_viewcontoller_04.png)

お前らか！

``MainViewController.designer.cs`` は、マニュアルで修正してはいけないのですが、試しに直してみます。

``MainViewController.xib`` 内の方も古い名前は抹殺しておきます。
これは Xamarin Studio ではソースコードエディタで開くか、別なテキストエディタで編集します。(これも推奨されない)

![](http://blog.amay077.net/assets/images/posts/xamarin_ios_rename_viewcontoller_05.png)

どちらも直したら、再度 ``MainViewController.xib`` を実行して Xcode を起動。

![](http://blog.amay077.net/assets/images/posts/xamarin_ios_rename_viewcontoller_06.png)

やったー、ようやく ``RenameTestViewController`` を抹殺できました。この状態で Xamarin 側との outlet の連携など、問題ないようです。

まあ、Xcode 用のプロジェクトファイルは Xamarin Studio が自動生成するもの(obj ディレクトリに作成される)で、名前が元のままでも問題はないです。

以上、手順をまとめてみましたが、経験的に、些細な変更でアプリが起動できなくなったりするので、こまめにコミットしておく事をおすすめします。

Storyboard のプロジェクトだったら、[以前書いた](http://qiita.com/amay077/items/716742474bce343c5729)ように Xamarin Studio だけで完結できるので簡単ですが、まだα版です。はやくリリースされるといいですね。
Javaのオプションのデフォルト値が知りたい

Javaのオプションはたくさんあって、しかもバージョンによってデフォルト値が違ってわからない。そういうとき、`-XX:+PrintFlagsFinal`を使えばデフォルト値がわかることを教えてもらった。

```
$ java -XX:+PrintFlagsFinal 2>/dev/null
```

## 参考記事

- [JBoss AS 7のJava VMチューニング - nekopの日記](http://d.hatena.ne.jp/nekop/20111215/1324005497)
RSS1.0でdc:dateを取得する

```php
    $rss = simplexml_load_file("RSS1.0のURL");
    $array = array();
    foreach ($rss->item as $item) {
        $array[] = array('title'=>$item -> title,'url' => $item -> link,'date' => strtotime($item -> pubDate));
    }
```
最初こんな感じで、RSSのデータを取得しようとしていたのですが、
dateの値がとれませんでした。

ソースを確認してみると日付が入っているのは、
pubDateはなく、dc:dateでした。

タグがわかったところで、dc:dateの値をとろうと、
とりあえずvar_dumpしてみたのですが、なぜかdc:dateの値がとれません。


調べてみると、「：」は名前空間を意味しているため、
「：」が含まれていると値の取得ができないそうです。

##childrenメソッドを呼ぶ

これを解決するには、
childrenメソッドの引数に下記URLを指定します。

```php
http://purl.org/dc/elements/1.1/
```

具体的なソースはこんな感じです。

```php
    $rss = simplexml_load_file("RSS1.0のURL");
    $array = array();
    foreach ($rss->item as $item) {
        $dc = $item->children('http://purl.org/dc/elements/1.1/');
        $array[] = array('title'=>$item -> title,'url' => $item -> link,  'date'=> strtotime($dc->date));
    }
```

タイムスタンプの形で取得しないなら、
strtotime()を使用せずに、

```php
'date'=> $dc->date
```

で、大丈夫です。
__destruct() と __sleep() の順序

ぶち当たったのでメモ。

# `__destruct()` と `__sleep()`

以下のようなクラスがあるとする。

```php
class Test {
    
    private $data;
    
    public function __sleep() {
        echo "__sleep() called\n";
        return array('data');
    }
    
    public function __destruct() {
        echo "__destruct() called\n";
    }
    
}
```

## 1. `serialize()` を実行するとき

```php
serialize(new Test);
```

インスタンスを作ってシリアライズを実行、そのままガベージコレクションを発動させるコード。このときは当然

```text
__sleep() called
__destruct() called
```

となるが・・・

## 2. `$_SESSION` が保存されるとき

```php
session_start();
$_SESSION['test'] = new Test;
```

PHPはスクリプト終了時に `session_encode()` を使ってセッションの特殊なシリアライズを行うが、このときは

```text
__destruct() called
__sleep() called
```

<ins>デストラクタが先に呼ばれてしまう。</ins>自前のシリアライズとセッションへの格納を両方とも想定する場合、どちらが先にコールされても不具合が発生しないようにクラスを設計しておく必要がある。 `is_resource()` なんかが役に立つんじゃないだろうか。

```php
$fp = tmpfile();
echo "【Before fclose():】\n";
echo 'var_dump($fp): '; var_dump($fp);
echo '(bool)$fp: '; var_dump((bool)$fp);
echo 'is_resource($fp): '; var_dump(is_resource($fp));
fclose($fp);
echo "\n";
echo "【After fclose():】\n";
echo 'var_dump($fp): '; var_dump($fp);
echo '(bool)$fp: '; var_dump((bool)$fp);
echo 'is_resource($fp): '; var_dump(is_resource($fp));
```

この実行結果は下記のようになる。

```text
【Before fclose():】
var_dump($fp): resource(1) of type (stream)
(bool)$fp: bool(true)
is_resource($fp): bool(true)

【After fclose():】
var_dump($fp): resource(1) of type (Unknown)
(bool)$fp: bool(true)
is_resource($fp): bool(false)
```

`is_resource()` は解放したリソースに関しては `FALSE` を返すが、ブール判定はそうではないので間違えないように。

# `__destruct()` と `serialize()`

こちらも同様の結果となった。

```php
class Test implements Serializable {
    
    private $data;
    
    public function serialize() {
        echo "serialize() called\n";
        return serialize($this->data);
    }
    
    public function unserialize($data) {
        $this->data = unserialize($data);
    }
    
    public function __destruct() {
        echo "__destruct() called\n";
    }
    
}
```

# 【追記】 解決法

```php:PHP5.4以降専用
session_register_shutdown();
```

```php:PHP5.3以前向け
register_shutdown_function('session_write_close');
```

でセッションが保存される時の挙動を `serialize()` するときの挙動に近づけられるようだ。詳しくはコメント欄を参照。
Laravelイメージキャラクター書いたよ

![IMG.png](https://qiita-image-store.s3.amazonaws.com/0/31626/bb1d07cf-485a-3541-792c-8c09e1d7a8b4.png)

ららべる作った人の眼鏡をみつつここは眼鏡っこか？！とかvelにベルは関係あるのかとか思ったから描いてみたよ。

あ、同居人が主催なので・・・。

ぴ、ぴーえいちぴーはすこしかけるよ！
これを機会にららべる勉強しようかな、と思ったkorotoroでした。


画像、左したにサインは入れてるけど、まったくのフリー素材なので煮るなり焼くなり加工するなりしてください！
使ってくれるとむしろちょううれしい！たのむ！

つぎはytakeさんだよー！
Godep は依存パッケージごとレポジトリにチェックインする設計らしい


Ruby の Bundler のようなものではない模様。

## 普通に考えると・・・

Godeps/Godeps.json だけレポジトリに入れればいいはず・・・。

## Heroku Buildpack Go

同じ作者が作っている [heroku-buildpack-go](https://github.com/kr/heroku-buildpack-go) を試してみた時のこと。

```
Counting objects: 80, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (75/75), done.
Writing objects: 100% (80/80), 11.93 KiB, done.
Total 80 (delta 40), reused 0 (delta 0)

-----> Fetching custom git buildpack... done
-----> Go app detected
-----> Installing go1.2... done
-----> Running: godep go install -tags heroku ./...
server.go:20:3: cannot find package "github.com/gorilla/context" in any of:
    /app/tmp/cache/go1.2/go/src/pkg/github.com/gorilla/context (from $GOROOT)
（以下略）
```

よく調べると `godep get` せずに `godep go install` している。これって、レポジトリに依存パッケージ全部チェックインしろってことでしょうか？

## Godep の設計

Godep そのものが[そういう設計らしい](https://twitter.com/krarick/status/407706196775149568)。

たしかに同じ作者の Heroku クライアントもそうしてる。
https://github.com/kr/hk

## なぜ？

明らかに DRY でないですよね。こうしなければいけない理由あってのことだと思うんだけど、なんででしょう？
sshでのプロセス継続をnohupで行う際のメモ

大改訂すべきだけど、ちょっと面倒なので
==================================

まず先にこっちも読んでおいてください。
http://www.glamenv-septzen.net/view/854

以降は通常はそうしておくというもの
==================================

sshした中で、プロセス切り離しやbgでのバックグラウンド動作へ変更などすることがある。が、それはsshの特性から、なにもしないでやっちゃってssh抜けるとプロセスが死ぬ。
これはnohupで実行する必要がある。[^1]

あと、リモートコマンドは標準入出力のリダイレクトも必要となる。[^2]

で、これやるときに、標準出力とエラーをまとめたいんだが、記述をよくわすれるのでメモ[^3]

```bash:command.sh
# bash
nohup [command] < /dev/null 2>&1 /dev/null &
```


```tcsh:command.sh
# tcsh
nohup [command] < /dev/null >& /dev/null &
```

でいいはず。

ただ、最近のnohupだとnohup [command] > /dev/null &でよさげ
stdinを/dev/nullからの入力、stderrをstdoutにリダイレクトする、らしいので(確認はあんまりしていない)

[^1]: http://www.codereading.com/notebook/moin.cgi/IgnoreTheHangupSignal
[^2]: http://d.hatena.ne.jp/takihiro/20081002/1222947161
[^3]: http://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8
時代が変わると理想の手法が変わるのだという事を改めて実感したロートルの話。

※ 私のエントリだけだと偏り過ぎているので、是非このエントリへの@wtnabe@githubさんのフォローも含めてご覧下さい。素晴らしいフォローに多謝。

http://qiita.com/joker1007/items/2a03500017766bdb0234
http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/

この二本読んでいて、昔なら前者を「わかってないなぁ」とか思う所なのだけれど、ひょっとしてひょっとすると自分が設計のレベルでも完全なオールドタイプになってしまったのでは無いかと不安になったんだ。

そもそも、自分はコントローラーがモデルを直接弄る設計をせずに、所謂サービスの層を作成していたんだ。だけれども、時代とともにフレームワークが多くの機能を持つようになってきて、Controllerとサービスの差、サービスとModelの差が凄い勢いで狭まってきている気がする。昔はサービスにはロジックがガッツリ乗ってくる。当時ならDAOを操作してデータを構築するロジックだの、外部システムへの働きかけだの、とにかくごちゃごちゃしそうなものは全部この中に押し込めた。WEB層とロジック層の境界線がサービスの表面だった（はず）。ロジックのテストはこのサービスの層を叩いた。DAOも分離して、DBに繋がなくてもテストが出来るような世界を構築したりするのが普通だった。
だって、DBって内部ネットの共有オラクルとかだもん。自分のPCになんて入れないもん。fixturesなんか使ったらみんなが同時にテストできないもん。
WEB含んだ総合的な自動テストをするよりも、ロジックだけのポータブルなテストが重要視されていた。アウトプットはJSONではなくHTMLだったため、URLを叩けばデータが返ってくるという時代ではなかった事も理由だろう。そして「その為の設計」をしていた。


最近RoR4であるサービスのプロトタイプを作成した時にラピッドにサービスを作らない縛りでやっていたら、以前だったらサービスの層でやっていたはずのコードが、モデルへのプロパティ一発で出来ていたりする事に助けられた。
例えば、親子関係を持ったPOSTデータを受信する際に「とりあえずコントローラーが汚れてもいいや」と一瞬コードを書き始めるのだけど「ひょっとして？」と思って調べてみたら、
accepts_nested_attributes_for
なんてものがあるんだとわかった。これ、モデルのプロパティ一つで上記の複雑なデータ構造を保存できてしまう。あれ？それなりに書くだろうと思っていた所が一行で終わった…。


そんな話を一昨日、僕の事を師匠（嬉しい）とかオカン（嬉しくない）とか呼んでくれる若いイケテル技術者（あるとこのCTOだよ！若いのにすげぇよこいつ）と話していたんだけど、サービスなんて作らない。シンプルなMVCが一番わかりやすいでしょってことだった。

時代は変わった。DBはMacBookAirの中に一緒にインストールされて、フレームワークのサポートが遥かに増した。作られるWEBサービスの規模自体も小さくなった。JSONのin-outでテストできる。だから以前当然必要としていた考え方は不要になってしまったのだろうと感じた。

それはちょうど僕が若い頃「どうしてインターフェース使ってポリモーフィズムしないの？何無駄にifで分けて関数ダラダラ量産するの？あのC上がりのロートル達は」って（口には出さずとも）思っていた事が、僕に襲いかかってきたのだ。それはとても恐ろしくて悲しい事だ。

さて、それを知った僕はもう少し頭の中を切り替えてみたいと思っている。今の人達の大勢が許容するような設計や、フレームワークの作り方を考える必要があるかもしれない。そうしないと、僕が基礎を作ったシステムは今の若い人達にとって単純に使いづらく、醜いゴテゴテしたものになるから。

そうやって自分の知識が古いものになったと改めて実感する。それでいいじゃないか。と老いた自分を慰めた。
Facebook iOS SDK3.5で投稿処理を行う際の流れ

[Facebook iOS SDK3.5で投稿処理を行う際の流れ(その1)](http://assaulter.hatenablog.com/entry/2013/05/16/092753)
[Facebook iOS SDK3.5で投稿処理を行う際の流れ(その2)](http://assaulter.hatenablog.com/entry/2013/05/16/131121)
Go言語でCSVを書き出す!エクセル用のSJIS版も!


デフォルトで用意されている[encoding/csv](http://golang.org/pkg/encoding/csv/)を使うのが楽みたい。日本語も出力できる。

```go:main.go
package main

import (
	"encoding/csv"
	"log"
	"os"
)

func failOnError(err error) {
	if err != nil {
		log.Fatal("Error:", err)
	}
}

func main() {
	// O_WRONLY:書き込みモード開く, O_CREATE:無かったらファイルを作成
	file, err := os.OpenFile("/tmp/people.csv", os.O_WRONLY|os.O_CREATE, 0600)
	failOnError(err)
	defer file.Close()

	err = file.Truncate(0) // ファイルを空っぽにする(実行2回目以降用)
	failOnError(err)

	writer := csv.NewWriter(file)
	writer.Write([]string{"Alice", "20"})
	writer.Write([]string{"Bob", "21"})
	writer.Write([]string{"Carol", "22"})
	writer.Flush()
}

```

`writer.Write`でバッファにためて、`writer.Flush`で一気に書き込むようだ。

実行してみる

```
go run main.go && cat /tmp/people.csv
```

実行結果

```csv
Alice,20
Bob,21
Carol,22
```


# CSVをSJISで出したい

CSVを出す目的はだいたいがエクセルで開くため。
日本語のエクセルは文字コードがSJISなので、SJISでCSVを出力してみる。

UTF-8からSJISへの変換は、[github.com/djimenez/iconv-go](https://github.com/djimenez/iconv-go) を使う。`io.Writer`のインターフェイスにそって作ってある。

```go:main.go
package main

import (
	"encoding/csv"
	iconv "github.com/djimenez/iconv-go"
	"log"
	"os"
)

func failOnError(err error) {
	if err != nil {
		log.Fatal("Error:", err)
	}
}

func main() {
	// O_WRONLY:書き込みモード開く, O_CREATE:無かったらファイルを作成
	file, err := os.OpenFile("/tmp/people.csv", os.O_WRONLY|os.O_CREATE, 0600)
	failOnError(err)
	defer file.Close()

	err = file.Truncate(0) // ファイルを空っぽにする(2回目以降用)
	failOnError(err)

	converter, err := iconv.NewWriter(file, "utf-8", "sjis")
	failOnError(err)

	writer := csv.NewWriter(converter)
	writer.Write([]string{"山田", "20"})
	writer.Write([]string{"田中", "21"})
	writer.Write([]string{"佐藤", "22"})
	writer.Flush()
}
```

実行してみる

```
go run csv.go && open /tmp/people.csv
```

実行結果

![Screen Shot 2013-12-12 at 22.00.59.png](https://qiita-image-store.s3.amazonaws.com/0/889/7e9222b7-1324-027f-0169-abba46f4c5fe.png "Screen Shot 2013-12-12 at 22.00.59.png")
Ceylonでの基本的な関数

よく使う系のヤツの紹介をしてみます。


#システムでよく使う系の関数
## print
コンソールに内容を出力します。
ログ系のライブラリを使うほどじゃないときにはよく使うかも？

##system
system.milliseconds;とかで現在ミリ秒が取得出来ます。
実行時間とかはかるときによく使いますよね。

##apply
フレームワークとか作るときはもしかしたら使う？
関数系の言語だとあまり使わないのかな。

#最近の言語ではよくあるlistやset系の関数

Javaではあまり標準では用意されてない系ですね。

##zip
複数の配列を１つの配列にまとめて返します。
結構使うよね。
JavaだとaddAllで集める感じだけど。。

##flatten
配列の配列を１つの配列にして返します。
よく使う？

##shuffle
配列やリストをランダムに並べ替えて返します。
うーん使うかなぁ。
キーをばらしたいケースとかあるときは使うけど・・・。
Ceylonでそのパターンがあるのか・・・。

##sort
これはJavaでもありますね。
ソートします。

#公式doc
他の関数や詳しい感じの説明は公式で・・・（英文）
http://modules.ceylon-lang.org/repo/1/ceylon/language/1.0.0/module-doc/index.html


アドベントカレンダーあと半分あるのに
マイナー過ぎて流行のライブラリとかフレームワークとかもないので
本気でネタ切れた。。
PostgreSQLの演算子一覧


そのデータベースで使える演算子の確認方法
psqlにて以下を実行

```
    \do [ pattern ]

    Lists available operators with their operand and return types. If pattern is specified, only operators whose names match the pattern are listed.
```

これで必要な演算子がインストールされているかどうかの確認が可能。

# 参考
[postgresql - List all the operator families associated with a schema and all the operators within an operator family? - Stack Overflow](http://stackoverflow.com/questions/5373656/list-all-the-operator-families-associated-with-a-schema-and-all-the-operators-wi)
herokuでwebsocketsが使えるようになったらしいから試してみた

herokuでwebsocketsが使えるようになったらしい。



```
$ git init
$ git add .
$ git commit -m "Ready to deploy"

heroku create
```

普通にコミットして、

```

heroku labs:enable websockets

```

これで、websocketsが使えるようになる。

元々ソースコードに書いていた

```
io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
}); 

```

これは削除しないといけない。

ひとまず自分のアプリで試したら普通にこれで動作した。だけど、元々pollingでも問題ないようなアプリだったので、実感はない。
iPhone4 用のプロジェクトを iPhone5 で動かした時のメモ


とりとめのない内容です。

iPhone4 は armv7、「iPhone5 は armv7s アーキテクチャが必要なので、Build Settings - Architectures - Valid Architectures に armv7s を追加せよ」、という情報を鵜呑みにして追加。

すると、使用しているライブラリのリンクで、

```
file is universal but dose not contain an armv7s slice
```

というエラーが。

そもそも、 armv7s を追加すると、使用しているライブラリも armv7s 対応のものを用意しないといけない（そしてそんなものは無い）ので、armv7s を追加したのが間違いだった。

おまけに、恐らくこの時に、Build Active Archtectures Only が ``true`` になってしまったようで、Valid Architectures から armv7s を削除して、iPhone5 で動かしてみようとしたところ、

```
No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7s, VALID_ARCHS=armv7).
```

ってなエラーが出るようになってしまった。

Build Active Archtectures Only が ``false`` に戻す事で解決したが、ここにたどり着くのに１時間くらいかかってしまった。

無知は罪なり─
tc2.3.1 で Windows でネットワークなしだったりpackage.el通らないproxyがはだかる環境でのTCインストール成功篇

[2013 漢直 Advent Calendar](http://connpass.com/event/4074/) 12日目のエントリーです。

[tc2.3.1 で Windows でネットワークなしだったりpackage.el通らないproxyがはだかる環境でのTCインストール失敗篇](http://qiita.com/naghbIQtIqHom/items/9556cf0e199a97d4cd0c) のその後です。

Windows で tc をインストールするバッチを作り動いた。
前回動かなかったのは、.tc を作ってその中で tcode-data-directory を適切に設定してなかったのが原因だった。
これで部首合成変換も混ぜ書き変換もうまく行った。
少なくとも .tc には `(setq tcode-data-directory "C:/foo/bar/tc/tcode")` のような記述を最低しておく。

使い方:
1. https://github.com/kanchoku/tc からzipでダウンロードする。
2. 対象PCへUSBでコピーする。
3. tc-master.zip を展開
4. https://gist.github.com/naghbIQtIqHom/7911699 の中の3ファイルをtc-masterのフォルダトップに作る。
5. 次を実行する。

gnupack を C:\gnupack_basic-11.00 に入れて使う場合。
 何も設定しないとC:\Users\youraccount\tc に作っちゃう。

```DOS
cd tc-master
set EMACS=C:\gnupack_basic-11.00\emacs.exe
set LISPDIR=C:\gnupack_devel-11.00\app\emacs\site-lisp\tc\lisp
set DATADIR=C:\gnupack_devel-11.00\app\emacs\site-lisp\tc\tcode
install.bat
```
.tc はキーボードレイアウトコメントアウトした状態で書き込んであるので、レイアウトを適当に変更して有効にしてください。

そして init.el に lisp のパスを追加して `(require 'tc-setup)`を追加して下さい。加えるべきパスはバッチファイルに表示されます。

--------
## はまり所
### .tc
- `~/.tc` の存在必須。
- `(setq tcode-data-directory "〜")` を記述しておく。

### emacs.exe のバイナリ
gnupack の emacs は次のどちらかを呼ぶかで `~/` と `princ` が変化するのではまった。
<インストールフォルダ>\emacs.exe
<インストールフォルダ>\app\emacs\emacs\bin\emacs.exe

gnupackでこのスクリプトを使う場合は上の方を使用する。 Emacs for Windows の場合は一つしかないはずなので気にしない。

### gnupack_devel
gnupack_basic ではなく gnupack_devel を使い `configure && make install` しても思った場所見てくれてない。
.tc と init.el ファイル2つ作って同じ記述すればいいけど今一だ。
もしくは tc-pre.el の tcode-init-file-name 書き換えてしまうと .tc を一つにできる。

init.el に記述すべきこと `@echo` 使ってemacs 2種類にいつて書いてしかもフルパス示せないのかっこ悪いけど、自分が使うだけならいいや。
スタンドアロンのvmに入れる場合必ずC:\gnupack_basicだしね。

## 疑問
tc-pre.el の tcode-site-data-directory のパス Windowsの場合どこがいいんだろうか。 /usr/local/share/tc/ ないしな…。

## 勘違い
ずっと tcode-site-data-directory を tcode-data-directory だと思って考えてたら site の違いがあった...。
UICollectionView のマージンを詰める

デフォルトだとちょっと空くけど、それを隙間なく埋める方法。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/2082/dbf77151-9ad9-ab2b-c52d-0ec8a1e06132.png) → ![02.png](https://qiita-image-store.s3.amazonaws.com/0/2082/5668b815-68f0-4ab0-ae88-d2259775bb3f.png)




```objc
- (CGSize)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(160.0f, 160.0f);
}

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
    return UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f);
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
    return 0.0f;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
    return 0.0f;
}
```

### 参考
* [ios - Cell spacing in UICollectionView - Stack Overflow](http://stackoverflow.com/questions/17229350/cell-spacing-in-uicollectionview)
Titaniumを触り始めて

Titanium初学者のメモです。

Titanium Mobileを触り始めました。Titanium歴3日です。
存在を知ってから数年経ちましたが、その間にいろいろ変化があったらしく。
今はAlloyというMVCフレームワークを使用するのが好いということでした。

キホンのキもない状態でいきなりAlloyから始めるのもどうかと思ったりもしましたが。
プロジェクトの新規作成をして生成されるファイル群の中で、なんだか一番わかりやすい気がしたのでした。
（もとはHTML5+CSS+JavaScriptでやろうと思っていましたが、いまいちシックり来ず。）



## ハマった点

`Label`を勘違いしていました。
HTMLでいう`p`みたいなものかと思って。ちゃんとドキュメントを読めばわかるのに。
なので、`Label`の中に`ImageView`を入れちゃって、画像が表示されずにハマりました。もー。



## 一番ハマった点

`require`されたJS（モジュール？）側から、`require`した側のViewの操作ができなかった。
すごく悩んだ末、できないということが分かりました。

`Namespace`をいじれば何とかなるのでしょうが、あまりそれはしたくなかったのです。というか、それならincludeしたほうがいいような気がします。非推奨ですが。

HTTP通信をして、そのコールバックでDOM操作したい、みたいな場合はどうするんでしょう？
そういう処理が複数ある場合、全部元のControllerに書いたら、1枚のJSが異常に長くなるような気がするんですが。。。

というわけで、ひとまず1枚のJSに、1つのController分の処理はすべて書いてやり過ごしています。



## おもったこと
`Titanium.Network.createHTTPClient`を使う際に、`onload`の設定を流れの中でやると非常に見通しが悪くなるので、functionを外に出しました。
最初は全部外に出して、`send`だけ流れの中に置きましたが、そうすると何回も同じ処理を繰り返すごとに`POST`するデータが文字列連結されていく、、、おかしい。
なので、`onload`で使用するfunctionのみを外に出して、他は（`var xhr = Titanium.Network.createHTTPClient();`も）流れの中に置きました。xhrが初期化されるからか、解決しました。
でも、`onload`も流れの中に置いて、

```js
	xhr.onload = function(){
		//処理
	};
```
のほうが取り回しは良いのかな、と思ったりもしました。引数とか関係で。




## わかったこと

DOMに仕込んだイベントが発火した場合、関数に渡される引数に、そのDOMの情報が入っているっぽい。

```xml:index.xml
<Alloy>
	<Window class="container">
		<View id="nantara">
			<ImageView id="eventbtn" image="/images/nantoka.gif" onClick="btnclick" value="1">
		</View>
	</Window>
</Alloy>
```

```js:index.js
dunction btnclick (e){
	alert( e.source );			//ImageViewオブジェクト
	alert( e.source.value );	//1が表示される
}

```

`$.eventbtn`みたいに指定する場合と違って、こちらの方法の場合は`require`された側のモジュールでも扱えました。
このこともあって、前項で書いたように、`xhr.onload`の中身の`function`も流れの中に書いたほうがいいのかな、と思いました。試していませんが。



## 明日以降の課題

* アプリ内で、SQLiteにデータを格納したり取り出したりしてみる
* アプリの操作でJSファイルの内容を書き換えられるのか調べる（ID・パスワード等はSQLiteに保存しないほうがいいというのをどこかで読んだので）


まだまだ勘違いもありそうですし、知らないことだらけなので、ガツガツ勉強します。
Perlのリファレンスみたいに、オブジェクトを参照渡しできればいいのに、と思いました。
でも、それできちゃうと混沌として、「設定より規定」が崩れるからダメなのでしょうか。
Visual Studio で作られたテストプロジェクトを Express 版でビルドできるようにする

Visual C# 2008 Express での話ですが、きっと他のバージョンでも動くはず。なぜ Express かは聞かないでください。

まず、テストプロジェクトでは MbUnit + Gallio などを利用していて、Visual Studio Unit Testing Framework は使用していないことが前提です。

## Project Type Guid の変更

Express 版ではテストプロジェクトを開くことができません。まず `.csproj` をいじってテストプロジェクトでなくします。

```csproj
    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
```

という行があるはず。guid が 2 つありますが、前者が Test で後者が Windows (C#) です。
参考: [.net - What is the significance of ProjectTypeGuids tag in the visual studio project file | Stackoverflow](http://stackoverflow.com/questions/2911565/what-is-the-significance-of-projecttypeguids-tag-in-the-visual-studio-project-fi)

Visual Studio からテストを実行しないので、Test プロジェクトである必要はありません。以下のように Test の guid を削除します。

```csproj
    <ProjectTypeGuids>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
```

これで Express でも開けるようになるはず。

## Visual Studio Unit Testing Framework の参照の削除

Visual Studio Unit Testing Framework の DLL は、Express 版だとインストールされません。ですので、参照しているとプロジェクトがビルドできません。どうせ使わないので以下の参照を削除します。

```csproj
    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
```

これで Express 版でもビルドできるようになるはず。

## Icarus Test Runner

Visual Studio でビルドした DLL を Project に追加します。これで実行可能。

ビルドし直しても DLL を読み込み直してくれるので安心です。
Mysql5.6のクライアントで<C-w>すると、行頭まで削除されてしまうのを、単語削除するように設定する

Mysql5.6から、クライアントはreadlineではなく、libeditを使うようになりました。
その影響で、デフォルトのキーバインドが、以前のバージョンから変更されてます。
そのため、<C-w>すると行頭まで削除されしまうようになりました。

libeditのキーバインドを設定するには、~/.inputrcでなく、~/.editrc に設定します。

```~/.editrc
mysql:bind '^U' vi-kill-line-prev
mysql:bind '^W' ed-delete-prev-word
```

これで以前のバージョンと同じキーバインドになります。

### 参考

http://bugs.mysql.com/bug.php?id=68449

man 5 editrc