OmniAICreator/Qiita-1.07M huggingface dataset:
連番ファイル名の編集


WindowsはExplorerで複数ファイルを選んでからF2キーでファイル名の一括変更が出来て便利なのですが、スペースとカッコが付いて`file　(1).jpg`, `file (2).jpg` とかになります。
これを`file1.jpg`, `file2.jpg`という感じにしたいので調べました。

## カッコとスペースの削除
PowerShellで連番ファイルのあるディレクトリに行って、

	ls | ren -newname {$_ -replace '[ ()]'}
とすると、一括してファイル名からスペースとカッコが取り除ける。


## ファイル名を正規表現で一括編集
	ls | ren -newname {$_ -replace '検索', '置換'}
### 置換演算子
```
<string> -replace '検索', '置換'
```
一括削除の場合は置換文字列を省略できる。

コマンドレットのエイリアスを使わない書き方は

	Get-ChildItem | Rename-Item -NewName { [Text.RegularExpressions.Regex]::Replace( $_.Name, '検索', '置換'}
って感じ？


## 0詰め
`file001.jpg`という感じの0詰めにするには

	ls *.png | ren -newname {'file{0:000}.png' -f [int]($_ -replace '\D*(\d+).*', '$1')}

### 書式設定演算子
```
<format string> -f arg0, arg1,…
```
`'file{0:000}.jpg' -f $x` が `printf 'file%03d.jpg',x` みたいな感じ？
`{0:000}`の部分は`{0:d3}`でもいいみたいです。
`[int]`で文字列から整数にキャストしてます。
シングルクォートじゃなくてダブルクォートだと、```"`$1"```で後方参照するのですが、バックティックで$をエスケープするのが不思議な感じ。

## cmd.exeでは？
ファイル名の加工方法が分からなかったので、
`(1).jpg`から`(20).jpg`という連番で決め打ち。

	FOR /L %i IN (1, 1, 20) DO REN (%i).jpg %i.jpg
※大文字部分は、小文字でもいけます。

## OS X では？
Finderで直に連番には出来ませんがAutomatorを使えば出来ます。
"Automator 連番"でググってください。

## ターミナル.appでは? というかUnix系では?
連番にしたいファイルが有るディレクトリに行って
### やっつけ版
```
ls *.png | awk '{printf "mv -i %s file%03d.png\n", $0, NR}' | sh
```
とすればファイル名が0詰めの連番になります。`file%03d.png`の部分が新しいファイル名です。0詰めが不要なら`file%d.png`に置き換えます。(`printf`を調べてください。)
所詮やっつけなのでシェルに流し込んでる末尾の`| sh`を外し、スクリプトを確認しながら臨機応変にカスタマイズしてください。

### 例：スペースを含むファイル名対応版
```
ls *.jpg | awk '{printf "mv -i \"%s\" file%03d.jpg\n", $0, NR}' | sh
```
ls -l をサイズ順にソート。超一瞬版

環境は Debian wheezy 7.5 ですがLinuxなら大抵問題ないかと。

追記: 最後におまけつきます。「超一瞬版」は「超一瞬で不要ということが分かった版」に変わりました。

```
(勝手に改行入れてます)
$ uname -a

Linux hostname 3.2.0-4-amd64 #1 SMP Debian 3.2.57-3 x86_64 GNU/Linux

$ lsb_release -a

No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

ls -l をawkしてsortするのめんどいなぁとか思ってたらすごぃ雑魚い方法がありましたsort -kオプションです

```
$ ls -l | sort -k 5

...(省略しまして)...

-rwxr-xr-x  1 dmiyakawa dmiyakawa  185386101 Jul 16  2013 VMware-Player-5.0.2-1031769.x86_64.sh
-rw-r--r--  1 dmiyakawa dmiyakawa  210829312 May  9 17:53 Fedora-x86_64-20-20140407-sda.qcow2
-rw-r--r--  1 dmiyakawa dmiyakawa  440275051 Jun 24  2013 adt-bundle-linux-x86_64-20130522.zip
-rw-r--r--  1 dmiyakawa dmiyakawa  497171697 Feb  5 18:59 adt-bundle-linux-x86_64-20131030.zip
-rw-r--r--  1 dmiyakawa dmiyakawa  591396864 Apr 21 09:45 ubuntu-14.04-server-amd64.iso
-rw-r--r--  1 dmiyakawa dmiyakawa 1010827264 Apr 25 18:42 ubuntu-14.04-desktop-amd64.iso
```

ここでいう5はawkでいう$5の要素です。サイズの部分です。

追記: ```sort -k5n```ではないとだめなのでは、というコメントがありました。そりゃぁそんな気がする。

これだとちょっと読みづらいときの```-h```オプションです。弊環境ではlsにもsortにもありました。

```
$ ls -lh | sort -k 5 -h

...(省略しまして)...

-rwxr-xr-x  1 dmiyakawa dmiyakawa 177M Jul 16  2013 VMware-Player-5.0.2-1031769.x86_64.sh
-rw-r--r--  1 dmiyakawa dmiyakawa 202M May  9 17:53 Fedora-x86_64-20-20140407-sda.qcow2
-rw-r--r--  1 dmiyakawa dmiyakawa 420M Jun 24  2013 adt-bundle-linux-x86_64-20130522.zip
-rw-r--r--  1 dmiyakawa dmiyakawa 475M Feb  5 18:59 adt-bundle-linux-x86_64-20131030.zip
-rw-r--r--  1 dmiyakawa dmiyakawa 564M Apr 21 09:45 ubuntu-14.04-server-amd64.iso
-rw-r--r--  1 dmiyakawa dmiyakawa 964M Apr 25 18:42 ubuntu-14.04-desktop-amd64.iso
```

古いADT Bundleとかマジ勘弁だなぁ

追記: そもそも lsに-Sがありました。コメント感謝。

```
(-l: 詳細, -h: 人が読めるフォーマット, -S: ソート (降順), -r: 逆順 (よって今回欲しい昇順ソート))
$ ls -lhSr

... (省略しまして) ...

-rw-r--r--  1 dmiyakawa dmiyakawa 202M  5月  9 17:53 Fedora-x86_64-20-20140407-sda.qcow2
-rw-r--r--  1 dmiyakawa dmiyakawa 564M  4月 21 09:45 ubuntu-14.04-server-amd64.iso
```

(手元で消したあとなので結果が異なります)

＃ 脱線しますが環境晒すときに```lsb_release -a```より筋の良い方法を募集中です。少なくとも CentOS 6.5 だと追加インストール必要なんですよねこれ。
Rubymotionでカルーセルを実装

作っているアプリで写真を表示する部分があり、カルーセルを実装したいと思ったのでその時のメモ。

####1.iCarouselのインストール

cocoapods( http://cocoapods.org/ )で調べた限りiCarouselが一番良さそう。

```Rakefile
Motion::Project::App.setup do |app|
  app.pods do
    pod 'iCarousel'
  end
end
```

```
rake pod:install
```

####2.iCarouselの実装

※iCarouselは色々なプロパティやメソッドを持っているので詳しくはgithubを確認してください。
https://github.com/nicklockwood/iCarousel


```app/controllers/hoge_controller.rb

def viewDidLoad
...

@items=[]
#photo1,photo2,photo3はUIImageViewにUIImageをセットしたもの。
@items << photo1
@items << photo2
@items << photo3

#ICarouselのサイズを設定
carousel= ICarousel.alloc.initWithFrame(CGRectMake( 0, 120, self.view.frame.size.width, 100 ))
#ICarouselのオプションを設定
carousel.setBackgroundColor(UIColor.clearColor)
carousel.dataSource = self
carousel.delegate = self
carousel.decelerationRate = 0.6
#iCarouselは色々な種類のカルーセルを実装できる。
carousel.type = ICarouselTypeLinear

self.view.addSubview(carousel)

end
```

```app/controllers/hoge_controller.rb

def carousel(carousel, viewForItemAtIndex: index, reusingView: view)
  #画像の下に表示するlabelの設定
  label = nil (※特に表示していないのでnilにしてます)
  view = @items[index] unless view
  return view
end

def carousel(carousel, valueForOption: option, withDefault: value)
  #carousel間のスペースを設定
  return value * 1.00 if option == ICarouselOptionSpacing
  return value
end

```

少してこずりましたが、簡単に実装できました。
Permission denied (publickey) が heroku で発生したとき

開発マシンのコマンドプロンプトから下記コマンドを実行して、以下のエラーが発生した場合の対処

開発マシン
　OS: Windows 7 Home Premium SP1 x64
　git: git Extensions
　ssh生成: gitbash


C:\\\> git push heroku master
>
Permission denied (publickey).
fatal: Could not read from remote repository.
>
Please make sure you have the correct access rights
and the repository exists.

gitbash で生成したssh鍵を heroku keys:add で追加した後、
ssh鍵が格納されているディレクトリ `C:\Users\%USERNAME%\.ssh` へ、以下の内容でconfigファイルを作成する。

```:config
Host heroku.com
 User git
 port 22
 Hostname heroku.com
 IdentityFile ~/.ssh/heroku_rsa
 TCPKeepAlive yes
 IdentitiesOnly yes
```

※ファイル名はheroku_rsa として作成している。

この状態でローカルマシンのレポジトリの場所まで移動し、`git push heroku master`コマンドを実行すると、デプロイに成功した。
rspecで日付のstub使うときの注意点

rspecで日付などについてstubを使うときの注意点です。

日付をstubで設定する場合はrspecにて

```rb
Date.stub(:today).and_return(Date.new(1994, 1, 25))
```

と書くと、

```rb
puts Date.today
#=>"Tue, 25 Jan 1994"
```
となりますが、このままだとプログラムの中でDate.todayを呼び出している場合、"Tue, 25 Jan 1994"が返ってしまい、エラーが発生します。

###解決策

```rb
Date.stub(:today_test).and_return(Date.new(1994, 1, 25))
```

と設定し、stubを呼び出す際は

```rb
Date.today_test  #=>"Tue, 25 Jan 1994"
```

とすればOKです。
Yoctoベース ビルド

#0. Freescale Yocto Project
Freescaleのimx6向けにyoctoベースビルド方法が一般公開されたので、試してみます。
ドキュメント
Freescale_Yocto_Project_User's_Guide.pdf
に沿って進めていきます。
fsl-yocto-3.10.17_1.0.0.tar.gzに含まれています。
このファイル自体は、Freescaleのサイトからダウンロード出来ます。登録(無料)は必要です。

推奨環境：Ubuntu 12.04以降ということでUbuntu 12.04 LTSを使います。
プロキシ等ネットワーク準備
gitの環境変数(user.name, user.email)
等は事前に済ませてあることが前提です。

#1. HOSTの準備(必要パッケージのインストール)
ビルドに必要なHOSTの準備をします。
`$ sudo apt-get install sed wget cvs subversion git-core coreutils unzip texi2html texinfo libsdl1.2-dev docbook-utils gawk python-pysqlite2 diffstat help2man make gcc build-essential g++ desktop-file-utils chrpath libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff curl`
`$ sudo apt-get install lzop`
`$ sudo apt-get install asciidoc`

#2. Repo Utilitiesのセットアップ
Repo Utilities環境をセットアップします
`$ mkdir -p ~/work/bin`
`$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/work/work/bin/repo`
`$ chmod a+x ~/work/bin/repo`
`$ cd`
~/work/binをPATHに追加します。

私の環境では~/.bashrcの最後に以下を追加しました。
export PATH=$PATH:~/work/bin

`$ vi ~/.bashrc`
export PATH=$PATH:~/work/bin
を最終行に追加し、設定を反映
`$ source ~/.bashrc`

#3. Yocto BSP Layersの取得

`$ mkdir ~/work/fsl-release-bsp`
`$ cd ~/work/fsl-release-bsp/`
`$ repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-3.10.17-1.0.0_ga`
`$ repo sync`

完了するとsources以下にBSP Layersの情報がdownloadされています。
`$ ls sources/`
base  meta-fsl-arm  meta-fsl-arm-extra  meta-fsl-demos  meta-openembedded  poky

meta-fsl-arm/conf/machineを見ると、Board毎のconfファイルが置いてあります。
`$ ls sources/meta-fsl-arm/conf/machine/`
imx23evk.conf  imx31pdk.conf  imx51evk.conf  imx53qsb.conf         imx6dlsabresd.conf   imx6qsabresd.conf  imx6solosabreauto.conf  include
imx28evk.conf  imx35pdk.conf  imx53ard.conf  imx6dlsabreauto.conf  imx6qsabreauto.conf  imx6slevk.conf     imx6solosabresd.conf    twr-vf65gs10.conf

適切なmachine名を設定して以下を実行(ここではimx6qsabresd, Graphics Back-end Serverをfsl-image-westonとしてあります)
`$ MACHINE=imx6qsabresd source fsl-setup-release.sh -b build -e wayland`

Do you accept the EULA you just read? (y/n) 
と出るので、問題なければ「y」を選択して終了。

設定の変更は、
build/conf/local.conf
を修正することで出来るようです。

#4. imageのビルド
bitbake <image名>でビルドが出来ます。
ここではwestonを選択しました。他には、
fsl-image-fb, fsl-image-dfbなど各種Platformのimageが選択可能です。
$ bitbake fsl-image-weston
ネットワーク越しにビルドするので、LTIBよりはるかに時間がかかります。

半日放置して・・・エラーが出てました。
WARNING: Failed to fetch URL http://www.nano-editor.org/dist/v2.2/nano-2.2.5.tar.gz, attempting MIRRORS if available
~~wget http://www.nano-editor.org/dist/v2.2/nano-2.2.5.tar.gz~~
~~を試すと、取得出来ました。リンク先は存在する様です。~~

~~この後のTRYはまた後ほど。~~

エラーの回避策
downloadsフォルダへエラーの発生するファイルをwgetすると回避可能なことが判明。
参考URL：https://community.freescale.com/thread/315619
`$ cd ~/work/fsl-release-bsp/downloads/`
`$ wget http://www.nano-editor.org/dist/v2.2/nano-2.2.5.tar.gz`
`$ cd -`

ビルド再開
`$ bitbake fsl-image-weston`

また、しばらく待って、無事終了しました。
build/tmp/deploy/images/以下に出来ている様です。

#環境
VirtualBox 4.3.10
Ubuntu 12.04 LTS 64bit

イメージの展開、動作結果などは今後投稿予定です。
Tastypie: POST でデータを返す



'application/x-www-form-urlencoded'でResourceにPOSTすると、dispathから、post_detail が呼ばれます。

```py

    def post_detail(self, request, **kwargs):
        return http.HttpNotImplemented()

```


ので、これを実装します。 dispatchは最終的にHttpResponseをかえすのですが、

```py

    def dispatch(self, request_type, request, **kwargs):

        #.....

        response = method(request, **kwargs)        # method = post_detail
        #....
        if not isinstance(response, HttpResponse):
            return http.HttpNoContent()

        return response

```

なので、post_detail からHttpResponseを返さないと、 HttpNoContent(204) を返してしまいます。
locationを渡して、 getしてもらうのが基本的な考え方です。

しかしPOSTですぐ返したいので、それにはget_detail()でやっているようにbundleを作ってcreate_response()を呼んでやればいいようです。


```py

    class TokenResource(Resource):
    
        class Meta:
            allowed_methods = ['post',]
            resource_name = 'token'
            object_class = TokenRes
            authentication = ClientFormAuth()
            serializer = ObjectSerializer(formats=['json'])
    
        def post_detail(self, request, **kwargs):
        
            obj = TokenRes(access_token="__here_is_a_new_token_")
            
            bundle = self.build_bundle(obj=obj, request=request)
            bundle = self.full_dehydrate(bundle)
            bundle = self.alter_detail_data_to_serialize(request, bundle)
            return self.create_response(request, bundle)
        
```
        
always_return_data = True はResource#post_detail では全く関係ないです。
boot2docker にホストオンリーアダプターを追加する 

## 2014.09.15 追記

最新のバージョンでは、デフォルトでホストオンリーアダプターが追加になったようです。このため、本記事のような作業は不要となりました。
ホストオンリーアダプターの IPアドレスは、以下のコマンドで確認できます。

```
boot2docker ip
```

ref:  https://github.com/boot2docker/boot2docker#container-port-redirection
> Container Port redirection

> The latest version of boot2docker sets up two network adaptors, one using NAT to allow the VM to download images and files from the internet, and a host only network that Docker container's ports will be exposed on.


---
boot2docker で作成される VM は、NAT アダプタしか追加されないため、MAC 上からは、直接アクセスできない。

このため、VM <-> MAC 間の通信が可能な ホストオンリーアダプターを追加してみる。

# 追加

1. VM(boot2docker) が起動していれば、停止。いなければ作成

    ```
    boot2docker stop
    or
    boot2docker init
    ```

1. ホストオンリーネットワーク(10.10.10.0/24)を新規に追加する。

    ```
    hostonlyif="vboxnet$(VBoxManage list hostonlyifs|grep -c ^Name)"
    VBoxManage hostonlyif create
    VBoxManage hostonlyif ipconfig $hostonlyif --ip 10.10.10.1 --netmask 255.255.255.0
    ```
    - 上記を実行すると MAC 上に 10.10.10.1 の IP が振られる

1. 作成したホストオンリーネットワークに DHCP を追加

    ```
    VBoxManage dhcpserver add --ifname $hostonlyif --ip 10.10.10.2 --netmask 255.255.255.0 --lowerip 10.10.10.10 --upperip 10.10.10.10 --enable
    ```
    - lowerip と upperip を同じにしているので、VM(boot2docker) に振られる IPアドレスは`10.10.10.10`となる
    - `VBoxManage: error: DHCP server already exists` となった場合は、すでに DHCPサーバが存在しているので、上記コマンドの `add` を `modify` に変更して実行する。

1. VM に上記ネットワークに属する NIC を追加

    ```
    VBoxManage modifyvm boot2docker-vm --nic2 hostonly --nictype2 virtio --hostonlyadapter2 $hostonlyif
    ```

# 削除

1. 作成状況の確認

    ```
    VBoxManage list hostonlyifs
    VBoxManage list dhcpservers
    ```

1. VM からホストオンリーアダプターを削除

    ```
    VBoxManage modifyvm boot2docker-vm --nic2 none
    ```

1. DHCP と ホストオンリーネットワークの削除

    ```
    VBoxManage dhcpserver remove --netname HostInterfaceNetworking-$hostonlyif
    VBoxManage hostonlyif remove $hostonlyif
    ```
FMDBを使ってデータを取り出すときのメモ

随時追記していきたい、アプリ開発初心者の自分用メモ

```
//現在のレコード数を確認する

-(int)RecordCount{
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectry = paths[0];
    NSString *databaseFilePath = [documentDirectry stringByAppendingPathComponent:@"MYDataBaseFile.db"];    
    FMDatabase *database = [FMDatabase databaseWithPath:databaseFilePath];
    
    [database open];
    
    NSString *sql = @"SELECT COUNT(*) AS COUNT FROM MyTable;";
    //COUNT(*)で取り出した結果をCOUNTに入れる

    FMResultSet *results = [database executeQuery:sql];

    while([results next]){//必ず回す、そうしないと結果は0になる

        _dataCount = [results intForColumn:@"COUNT"];
    }
 
    [database close];

    return _dataCount;

}
```
scikit-learnでDBSCAN


[scikit-learn](http://scikit-learn.org/stable/)に実装されてる[DBSCAN](http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html)を使ってみた

```python
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import numpy as np
from sklearn import cluster

""" パラメータを指定 """
dbscan = cluster.DBSCAN(eps=float(sys.argv[1]), min_samples=int(sys.argv[2]))

""" データを読み込む """
data_list = []
for line in open(sys.argv[3]):
    x = map(float, line.rstrip().split(' '))
    data_list.append(x)
data = np.array(data_list)

""" クラスタリング """
dbscan.fit(data)

""" 結果を表示 """
labels = dbscan.labels_
for i in range(len(labels)):
    if labels[i] != -1:
        print labels[i], data[i]

```

##使い方

データは行にサンプル、列に書く属性の値を記述した以下のようなファイルを準備

```
0 1
8.5 6
2 0
1.5 0
1 1.5
10 5
9 6
8 5.5
9.5 5.6
100 100
-100 -50
1 0
```

引数にeps, min_samples, data_fileの順で渡して実行

```
>> python dbscan.py 1.5 3 data
0.0 [ 0.  1.]
1.0 [ 8.5  6. ]
0.0 [ 2.  0.]
0.0 [ 1.5  0. ]
0.0 [ 1.   1.5]
1.0 [ 10.   5.]
1.0 [ 9.  6.]
1.0 [ 8.   5.5]
1.0 [ 9.5  5.6]
0.0 [ 1.  0.]
```

`dbscan.labels_`は、各サンプルがどのクラスタに割り当てられたかを表している。
`-1`の時はどのクラスタにも割り当てられないノイズになったという意味
karma+mocha+chaiでnode上テスト開発最初の一歩



http://niwaringo.tumblr.com/post/76965802435/karma-mocha

参考になったのでリプ

達成すること：
1. 設定を用意
2. （テストしたいクラスとかメソッドがあるファイルを用意）
3. テスト書く
4. テスト実行 karma start
5. ブラウザで結果が返ってくる！

--------

~~~bash
npm install -g karma-cli
~~~

karmaコマンドが使えるようになった。npm install -g karmaだとエラーがよくおきるらしいので注意。
karma init でkarma.conf.jsっていう設定を作る。




~~~bash
$ karma init
「フレームワーク何？」> mocha + chai
「Require.js使わん？」 > no
「ブラウザ実行はどれでするん？」 > Chrome
「どこにソースとテストソースあるん？」 > *.js
「除外ファイルがあるならいってみ？（無言でスルー）」 >
「自動更新したい？」 > yes
~~~

フレームワークもってないから用意しなきゃいけない＞＜（後述）
chromeはインストール済。
\*.jsは**/*.jsとかも使える。

ソース場所をpackage.json やら node_modules のあるカレントディレクトリと指定してみた。指定されたjsが容赦なく読み込まれると考えていいので、名前空間にあるクラスとか、require.jsでまとまった名前空間とかを持ってきてテストする感じ。browserifyもある。

とりあえず今回は

~~~hello.coffee
hello = () -> return "hello"
~~~

次にテスト用のjsを作る。
hello.jsのほかにも名前空間を汚染した分だけテスト用のjsで使える。

~~~hello.test.coffee
describe "最初のテスト", () ->
  it "return hello してほしい！", () ->
    expect(hello()).to.equal("hello")
~~~

hello.coffee はbareコンパイルだから呼べる。
describe ~ とか it ~ とかがmocha の表現。
>
describe: 「このテストのテーマはこれです！！」
it: 「まず、〜〜が返ってきますよ、次に〜〜が返ってきますよ。」
テスト宣言系、年収高い系

expect ~ とか to.equal ~ が chai の表現。
>
expect(@@@): 主語
.to.equal(@@@): 述語系

mocha は 主語・述語系の機能を各自追加しないといけないってことです。
mocha chaiインストールしよう。

~~~bash
npm install -D karma-mocha
npm install -D karma-chai
~~~

ここでkarma.conf.js の中身を見ます。
frameworks: ['mocha', 'chai']
ってなってればおkです。

フォルダには
karma.conf.js
hello.js
hello.test.js
node_modules
があって、名前空間はhello.js テストはhello.test.jsにしか書かれてない状況なわけです。

~~~
karma start
~~~

サーバーが立ち上がって、指定のソースをすべて読むので、１つ成功と出ます。
自動更新onなので、変更を加えると更新してくれます。
SSHでMovableTypeをインストールしてみた

# SSHでMovableTypeをインストールしてみた

さくらのレンタルサーバにSSHでアクセスして、MovableTypeをインストールしてみました。
今後のための覚書になります。

## データベースを新規作成

購入した新規ドメインのコントロールパネルに入ります。
左カラムのデータベースの設定をクリックします。

![datebase.png](https://qiita-image-store.s3.amazonaws.com/0/34020/e217b473-5fba-8556-48b1-299dabc13f63.png)

さくらのサーバコントロールからデータベースを新規作成します。
新規作成画面で、データベースに必要な情報を入力しデータベースを作成します。

* データベースバージョン MySQLのバージョン
* データベース名を任意の名前で入力
* データベース ユーザ名(初期アカウント名)
* 接続用パスワード(任意で設定)
* データベース文字コード(デフォルトはEUCのため、UTF8に変更)

## MovableTypeのzipファイルをSSHでサーバに転送する

MovableTypeが入ったzipファイルをサーバに転送します。
下記のコマンドで転送します。

```
scp /ファイル格納先パス/MT-6_0_3.zip ルーザ名@ドメイン名.sakura.ne.jp:転送先パス
```

転送するときにパスワードを求められるので、サーバのパスワードを入力します。

![up-command.png](https://qiita-image-store.s3.amazonaws.com/0/34020/62e9ca7b-a1b5-9ea8-a51b-f333eaab6831.png)

## SSHでサーバにログインし、転送したzipファイルを解凍する

転送が終わったら、SSHでサーバにログインしzipを解凍します。

```
ssh ルーザ名@ドメイン名.sakura.ne.jp
ssh ルーザ名@ドメイン名.sakura.ne.jp's password: 接続パスワード入力
```

接続が確認したら、/home/ユーザ名/されます。
さくらのレンタルサーバの公開ディレクトリは、
/home/ユーザ名/www/
になります。コマンドで移動します。

```
cd www
```

/home/ユーザ名/www/の中に、先ほど転送したzipを解凍します。
下記コマンドで解凍できます。（FTPソフトでアップするより断然早いです。）

```
unzip MT-6_0_3.zip
```

解凍が終わったら、MT-6_0_3というディレクトリが生成されます。
MT-6_0_3という名前は長いので、アクセスしやすいようにディレクトリ名に変更しました。

```
mv MT-6_0_3 mt
```

## MovableTypeの初期設定を行う

ブラウザでドメイン名/mtでアクセスし、下記の画面が表示されます。
サインインし初期設定を行っていきます。

![mt01.png](https://qiita-image-store.s3.amazonaws.com/0/34020/9254fe1d-11bd-7b65-bbea-3d8122675f4b.png)

使用言語は、日本語で設定し開始ボタンをクリックします。

![mt02.png](https://qiita-image-store.s3.amazonaws.com/0/34020/8531ee44-81f4-7028-95a6-1490c0ceaf09.png)

システムチェックが終わったら、次へをクリックします。

![mt03.png](https://qiita-image-store.s3.amazonaws.com/0/34020/7321d25d-d452-f178-1f9f-bb0defb7525e.png)

次にデータベースの設定を行います。
先ほど、コントロールパネルで設定したものを入力していきます。

* データベースの種類 MySQLデータベース(推奨)
* データベースサーバ (先ほどのコントールパネルで作成した mysql◯◯.db.sakura.ne.jpを入力)
* データベース名 (同じくコントールパネルで決めたデータベース名を入力)
* ユーザ名設定 
* パスワード設定

すべて入力が終わったら、接続テストを行う

![mt04.png](https://qiita-image-store.s3.amazonaws.com/0/34020/5932a8dd-667b-090f-3647-00bf290a2f65.png)

MovableTypeからのシステムメッセージを送信するため、メールサーバの設定を行います。

* システムメールアドレス 自分のメールアドレスを設定
* メール送信プログラム sendmailを選択

※さくらのレンタルサーバのSendmailパスは「/usr/sbin/sendmail」

![mt05.png](https://qiita-image-store.s3.amazonaws.com/0/34020/4184d774-bf4e-5f42-5967-09285e27875a.png)

MovableTypeで利用するシステム管理者アカウントを作成していきます。

* ユーザ名 (サインインするためのユーザアカウント)
* 表示名 (記事を書いた時に使われる表示名)
* 電子メール (ユーザアカウントごとにメールアドレスを設定します)
* 使用言語 (アカウントごとに管理画面の言語設定を変更することができる)
* パスワード (アカウントでログインするためのパスワードを設定)

すべて入力し終わったら、次へをクリックします。

最初のウェブサイトを作成していきます。

* ウェブサイト名 (WEBサイト名を設定)
* ウェブサイトURL (WEBサイトのURLを設定)
* ウェブサイトパス (WEBサイトが格納されているパスを設定)

テーマとタイムゾーンはお好みで設定します。

![mt06.png](https://qiita-image-store.s3.amazonaws.com/0/34020/ef4d8ef1-890b-284d-020e-5dbc62b87877.png)

インストールをクリックし、「インストールを完了しました！」というメッセージが出たらインストール完了になります。

## 参考サイト

* [Movable Type をさくらのレンタルサーバにインストールしてみよう](http://knowledge.sakura.ad.jp/beginner/1988/)
* [Movable Type(オープンソース版)をインストールする](http://server-domain.info/cms_install/install-movable-type.html)
VagrantでゲストOSに直接コマンドを送る

たとえば、Vagrantを使ってゲストOSでifconfigしたいとき。`-c`オプションを使えば、いちいち中に入らなくてOK。

```bash
$ vagrant ssh -c ifconfig
```

1ワードじゃないコマンドの時は、コーテーションで囲むこと。

```bash
$ vagrant ssh -c "sudo service httpd start"
```
MongoDBをLinuxにインストール

要はここに書いてあることをします。
RedHat系ではない場合は左のメニューから選んでください。
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/

## リポジトリの追加
yumでインストールできるようにするために、リポジトリを追加します。

```bash
$ sudo vi /etc/yum.repos.d/mongodb.repo
```

64bitの場合

```lang:mongodb.repo
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
```

32bitの場合

```lang:mongodb.repo
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686/
gpgcheck=0
enabled=1
```
name: コメント
baseurl: どこからDLするか
gpgcheck: GPG署名を確認するか。パッケージの改ざんとかを検知できるようになります。パッケージが未署名の場合は0にする
enable: 0=無効、1=有効

## インストール
最新版をインストールします

```bash
$ sudo yum install mongodb-org
```

バージョンを指定する場合は

```bash
$ sudo yum install mongodb-org-2.6.1 mongodb-org-server-2.6.1 mongodb-org-shell-2.6.1 mongodb-org-mongos-2.6.1 mongodb-org-tools-2.6.1
```

**バージョン確認**

```bash
$ mongo -version
```

**サービス起動**

```bash
$ sudo service mongod start
```

**サービス停止**

```bash
$ sudo service mongod stop
```
npmの-gインストールしたのにパスが通ってない遍


~~~
npm install -g karma
~~~

おこられる。

ぐぐると、いろいろでてくるが

~~~
npm install -g ws
~~~

なぜかこれでエラーが減って、sudo npmにするとエラーがなくなる。（ws: web socket）
よしよし・・・

~~~
$ karma
 command not found
~~~

えー＞＜

~~~
npm bin -g # /usr/local/bin
npm bin -g karma # /usr/local/bin
ls /usr/local/bin/karma # ねーよ
ls /usr/local/lib/node_modules/ # karmaあるやん
~~~

なるほほ
karmaに限らず、実行本体は
> node_modules > MODULENAME > bin > MODULENAME  

みたいな構成なので
npm bin -g のパスをlib > に通します。

~~~
$ karma --version
-bash: karma: command not found
$ ln -s /usr/local/lib/node_modules/karma/bin/karma /usr/local/bin/karma
$ karma --version
version: 0.12.16
~~~


.bash_profileにPATH追加とかするのが、賢い方法らしいけど。libってローカルインストールだし追加していいのかわかりませんでした。
Github 上のライブラリや sbt plugin を使う (sbt 0.13 以降用)


Scala のライブラリや sbt plugin のうち、maven central などのレポジトリに登録されていないものを使うのも sbt なら簡単です。
自分で fork してちょっと書き換えたバージョンを使いたい場合なんかにも使えます。

## Github 上のライブラリを使う

`user/repo-name` を使いたいと仮定して `build.sbt` に次のように書きます。

````:build.sbt
lazy val root = project.in(file(".")).dependsOn(githubRepo)

lazy val githubRepo = uri("git://github.com/user/repo-name.git#commit")
````

いくつか注意点があります。

* 1行目と3行目の間に空行（改行だけの行）が必要です。
* `uri()` 引き数のフォーマットに注意します。Github の SSH clone URL では通りません。たとえば [nscala-time](https://github.com/nscala-time/nscala-time) の場合、SSH clone URL は `git@github.com:nscala-time/nscala-time.git` ですが、`git://github.com/nscala-time/nscala-time.git` を指定します（`@`→`://` と `:`→`/` の二箇所、よく見てください）。
* uri には `#commit` で branch 名や commit id を指定できます。特定の commit を使い続けたい場合に指定します。

なお、「Github上」と書きましたが、公開 Git レポジトリであれば Github である必要はありません。Bitbucket でも Gitlab でも Gitbucket でもいいです。

## Github 上の sbt plugin を使う

sbt plugin の場合も書き込むファイルが違うだけで、あとは同じです。
`user/repo-name` が sbt plugin だとして、`project/plugins.sbt` に次のように書きます。

````:project/plugins.sbt
lazy val root = project.in(file(".")).dependsOn(githubRepo)

lazy val githubRepo = uri("git://github.com/user/repo-name.git#commit")
````

注意点はライブラリの場合と同じです。
PHPでエラーが出ない

環境構築するたびに凡ミスするので書いておきます。

# 原因
## 1．error_repotingの設定がされていない

php.iniの`error_repoting`の値を`E_ALL | E_STRICT`に変更する。

## 2．html_errorsの設定がされていない

php.iniの`html_errors`の値を`On`に変更する。

## 3．display_errorsの設定がされていない

いつもこれを忘れる（）

php.iniの`display_errors`の値を`On`にする。
jadでそれぞれのclassと同じサブディレクトリへデコンパイルする

jad で以下のように -r を指定すれば階層を保持したままデコンパイルできます。

`jad -8 -s java -d src -r class\**\*.class`


この場合、javaファイルに記述されたpackageに従って出力先のフォルダが決まります。

１つのプロジェクトだけデコンパイルを行うのであればそれで問題ありませんが、
調べ事をするために色々な所から無造作にクラスファイルを寄せ集めた場合は
出力先が重なったり、どのjavaファイルがどのクラスファイルの物か分かりづらくなることがあります。

そうした場合は以下のようなバッチ、またはシェルを作ってクラスファイルを寄せ集めたパスを引数に渡すと、
クラスファイルと同じ場所にjavaファイルが作られるため、少しは調査がしやすくなるかもしれません。

#### Windowsの場合
```bat:jad.bat
for /f %%I in ('dir /s /b %1\*.class') DO @jad -8 -s .java -d %%~dpI %%I
```

#### Linuxの場合
```bat:jad.sh
for classfile in `find "$1" -name "*.class"`
  do
    ./jad -8 -s .java -d `dirname $classfile`/ $classfile
  done
```
できればクラスファイルをためこんだclassフォルダと同じ場所に
class_srcのような名前のフォルダを作って、その中にclassフォルダ内と同じ
ディレクトリ構造でjavaファイルが出力されるようにしたかったのですが
Windowsの場合の出力先をうまく編集できなかったので分かり次第追記します。
[wip]ec2上のdockerで、pathの場所を、/var/libから/mntnに変更したいが、失敗する。

# ec2上で手軽にdockerが試せるようになった。

ec2上での、試す場合には、このサイトhttp://docs.docker.io/installation/amazon/にもあるが、ec2-ubuntu14.04の起動画面で、UserDataの項目に、

```
#include https://get.docker.io
```

を書けば良い。これだけで、dockerが利用可能になる。awsは内部でレポジトリでも持っているのかdocker pullも高速に動作する。手軽にdockerを試すことができる。

# 容量が足りない

ただ一点不満がある。EC2はデフォルトで/に8GBしか割り当てない。そのため、dockerのイメージを/var/lib/dockerに作った時に、あまり容量が容量がなく、いろいろなイメージを作ると、すぐに容量がいっぱいになっています。そのため、/mntにdockerのフォルダを移す方法を紹介する。

#/var/lib/dockerを/mntに移す。が失敗する。

このページ

https://github.com/dotcloud/docker/issues/3127

を参考に使用。

```bash
$sudo docker stop `sudo docker ps -a -q` #動いているdockerの停止
$sudo docker rm `sudo docker ps -a -q` #動いているdockerの削除
$ sudo service docker stop
>> docker stop/waiting #dockerサービスの停止
udo mv /var/lib/docker /mnt
```

とここで障害が発生する。


```bash
mv: cannot remove ‘/var/lib/docker’: Device or resource busy
```
とデバイスかリソースが何かを握っており、移動できないエラーが発生する。

mountやlsofで何かデバイスを握っていないか、調べたが、特に何もない。

上の参考ページで、

```bash
cd /var/lib/docker/devicemapper/mnt
umount ./*
```

というコマンドがあったが、実際調べると、devicemapperのディレクトリはなくなっていた。

どなたか知っている人がいたら教えてほしい。
Objective-Cで開発したアプリをAndroidでリリースした


Apportableを使って
cocos2d-iphoneで作ったアプリを
Androidに変換してリリースしました。

使用ツール
・cocos2d-iphone v3.0
・Apportable 1.1.06.1
・SpriteBuilder1.0.6

そもそもApportableってなによ！って人は
[Apportable公式](https://www.apportable.com/)
または私が昔書いた記事でも一部触れています。

過去関連記事:
・[SpriteBuilderを使ってみる](http://qiita.com/masanorythm/items/2aac844786255c1bf5c6)
・[ApportableでJavaの機能を使う](http://qiita.com/masanorythm/items/defbbb8dd0f7899a6338)

---

![promotion.png](https://qiita-image-store.s3.amazonaws.com/0/31990/3a8c4f81-5d2a-cff9-8805-f974b571b7f1.png "promotion.png")
・[iOS](https://itunes.apple.com/jp/app/bokobokokuesuto/id828219836?mt=8)
・[Android](https://play.google.com/store/apps/details?id=com.masanorythm.BokoBokoQuest)

最近はcocos2d-iphone+Apportableを推しているのですが
**「本当にまともに動くの？」**って疑問をよく聞きます。
いや、まぁObjective-Cを変換って・・・自分も初めは懐疑的でした。

ってことで個人開発したアプリをリリースしてみました。
どんな感じで動くのか参考になれば嬉しい。そして興味を持ってください。
また、私でわかる事であればなんでもお答えします！



cocos2dxが比較対象になりますがこんな人にオススメします。
・C++よりObjective-Cで書きたい

はい、こんだけです。
色々他にも比較する要素はあると思いますが、根本はコレです。

それぞれの開発

cocos2dx
・C++で書いて、OS依存部分かきわける。

cocos2d-iphone + Apportable
・Objective-Cで書いて、OS依存部分かきわける。
・お金を払うとかきわける必要がなく変換できる。

こんな感じです。


他におすすめな所は、Apportableは
新しいMacにXcodeとApportableを入れてしまうだけで
iOS/Androidアプリの開発環境ができてしまう所です。
Apportable自体にAndroidSDKやNDKも内包されているので
SDKやNDKを個別にセットアップしてもらう必要がなく、導入が簡単になっています。
PCを新調する時にクリーンな環境からやり直すのが好きな自分には嬉しい！


過去にcocos2d-iphoneで作ったアプリも
Apportableで変換できる可能性もあるので
興味がある方はお試しあれ！
TableViewやCollectionViewを使ったときに考えそうな機能２つ[初心者向け]

リスト系のビューを使うときに、おもにナビゲーションバーあたりのボタンに実装したくなりそうな機能を２つ用意したのでメモ。なお、今回はCollectionViewを利用している。

##選択中のアイテムを一括で解除する
コレクションビュー内のアイテム（セル）の数だけ、`deselectItemAtIndexPath:`を呼び出す。

```objectivec
- (void)clearCellSelections {
    for (NSIndexPath *indexPath in self.collectionView.indexPathsForSelectedItems) {
        [self.collectionView deselectItemAtIndexPath:indexPath animated:NO];
    }
}
```


[参考サイト](http://stackoverflow.com/questions/14442096/how-are-cells-deselected-programmatically-in-uicollectionview-when-allowmultiple)

##普段はタブバーを表示するが、特定の条件下ではツールバーを表示する
特定の条件が成立したら
1.タブバーの座標をスクリーン外に設定する

```objc
    //TabBarのサイズを取得
    float t_height = self.tabBarController.tabBar.frame.size.height; //t_height = 49とする
    
    //TabBarを画面外に移動
    self.tabBarController.tabBar.frame = CGRectMake(0.0f, 568.0f, 320.0f, t_hight);

```
2.ツールバーをタブバーがあった場所に表示する

```objectivec
    self.toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0f, 519.0f, 320.0f, 49.0f)];     

    
    [self.view.superview addSubview:self.toolBar]; //ツールバーは上位ビューに配置しないとタップを認識してくれない(*)
    NSLog(@"self.view.superview is %@", self.view.superview);
    NSLog(@"self.view is %@", self.view);
 
```

(*)について確認すると、コレクションビューにツールバーを追加する場合、親ビュー外に子ビューをレイアウトしてしまうことがわかる。


```log
2014-05-18 22:30:25.056 XXX[1397:60b] self.view.superview is <UIViewControllerWrapperView: 0x14d72660; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x14d726d0>>
2014-05-18 22:30:25.057 XXX[1397:60b] self.view is <UICollectionViewControllerWrapperView: 0x14d5c360; frame = (0 0; 320 519); autoresize = W+H; layer = <CALayer: 0x14d60970>> //縦の長さが519まで！
```

3.状況が変わったら元に戻す

```objectivec
    //TabBarのサイズを取得
    float t_hight = self.tabBarController.tabBar.frame.size.height;
    
    //TabBarを画面内に移動
    self.tabBarController.tabBar.frame = CGRectMake(0.0f, 519.0f, 320.0f, t_hight);
```

[参考サイト](http://cafe-system.com/system1345.html)
Wine "without X11" on Macで動かすWindowsアプリは違和感無くて最高

## 概要
まとめると、最近のWineはMac上だとX11に依存せずに動作させることが出来、Windowsアプリケーションを違和感少なく動かせて最高！という記事です。それだけです。（これだけでモチベーションが沸かない人は、下に実際の動作画像があるので見てみるのも一興かもです）

## インストール方法
おなじみHomebrewで一発。

ただデフォルトだとX11 (XQuartz)入れろやと警告が出るので、X11サポートを切るオプションを付加します。（XQuartz入れるのを面倒くさがっているだけなので、別に入れても良いと思います）

あとは地味にバージョンアップで違和感が無くなってきて嬉しい感じなので、develオプションを付けておく。（自己責任で）

```zsh
$ brew install wine --without-x11 --devel
```

インストールには結構時間かかります。

## 実行
ここでは例に[JaneXeno](http://www3.ocn.ne.jp/~korwatch/janexeno.htm)という2chブラウザを使います。

ファイルをダウンロード（通常版で大丈夫です）して、適当なディレクトリに解凍。そしてターミナルでwineに実行ファイルのパスを与えて実行するだけ。ね、簡単でしょう？

```zsh
$ wine Jane2ch.exe
```

![JaneXeno on native](https://qiita-image-store.s3.amazonaws.com/0/18606/a4835a16-47c6-0927-3cf5-ed22d80d3e07.png)

IMEもMacにインストールしているものをそのまま使えます！最高！！（ちなみにフォントはデフォルトではこうなっておらず、おいらは自分で弄ったのでなんとかしたい人はなんとかしましょう）

## おまけ
個人的に一番嬉しかったのが伺か（a.k.a. あれ以外の何か）というデスクトップエージェントが[SSP](http://ssp.shillest.net/)を使って違和感なく楽しめることです。

ウチの[妹](http://cardghost.web.fc2.com/SSC.html)です。

![Sister's Complex](https://qiita-image-store.s3.amazonaws.com/0/18606/ae4e2295-c88e-9e5d-9af7-69bdebc14b1d.png)

## 今後の課題
Retinaだとフォントが解像度低く嫌な感じになってしまったので、誰か解決策ください ( _ _)

あと課題とは違いますが、もちろん動かないアプリケーションもあると思うので、そういうのに当たっても石を投げないで下さい・・・。昔に比べて凄い！嬉しい！ということを伝えたかった・・・！
[MacOSX 10.9.2]Ruby on Rails開発環境構築


なんか急に `Rails` やるはめになったので入れてみます。
`Ruby` も `Rails` もド素人です。

##前提
`Xcode` を入れておいてください。

##Xcode Command Line Tools をインストール
Xcode のメニュー -> Open Developer Tool -> More Developer Tools
Apple のデベロッパーサイトに飛ばされます。

Command Line Tools (OS X Mavericks) - リリース月
の名前で置いてあるので、ダウンロードしてインストールしましょう。

Marvericks より前の OS だとちょっとインストール方法が違うようです。
環境が無いので分からないのですが...。

##Homebrew をインストール
```bash
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
```

##rbenv をインストール
複数 Ruby のバージョンを簡単に切り替えられるツールのようです。
以前は RVM というものがあったらしいですが、rbenv のほうが軽量とのこと。

```bash
brew update
brew install rbenv ruby-build
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
rbenv -v
```
rbenv 0.4.0 が入りました。

##Ruby をインストール
最初から入っていますが、新しいバージョンにしときましょう。

```bash
rbenv install -l
```
バージョンの一覧が表示されます。2系の最新入れておきましょうか。
(2014/05/18 時点では `2.1.2` が最新のようです。)

```bash
rbenv install 2.1.2
```
結構時間がかかるので、缶ビールでも飲みましょう。

##Ruby バージョンの切り替え
```bash
rbenv rehash
rbenv global 2.1.2
ruby -v
```
インストールしたバージョンに切り替われば完了です。

##Rails をインストール
```bash
gem install bundler
gem install rails
```
これまた結構時間がかかりますので、先ほど空けた缶ビールを飲みましょう。

```bash
rbenv rehash
rails -v
```
Rails 4.1.1 が入りました。

##動作確認
任意のディレクトリで。

```bash
rails new railstest
```
スケルトンができたっぽいです。

```bash
cd railstest/
rails server
```

`WEBrick` という Web サーバーがローカルで起動します。

##ブラウザで開く
http://localhost:3000/

![kobito.1400419646.354471.png](https://qiita-image-store.s3.amazonaws.com/0/25416/7857a7b7-8672-951a-1162-85b2c649e047.png "kobito.1400419646.354471.png")

さて、学習していきましょうか。
XPについて勉強しました。

http://www.amazon.co.jp/図解入門-よくわかる最新XPエクストリームプログラミングの基本と仕組み―多様化する開発条件に対応するソフトウェア開発手法-How‐nual-Visual-Guide/dp/4798003743

# XPが目指すソフトウェア開発
* 人の満足

ユーザだけでなく開発者も幸せになりたい。

* 変化に適応

すべてが予想できないことを予想しておく。

* 実績重視

未知の実装を既知の実績ベースで予測する。

# XPが重視する開発姿勢
* コミュニケーション

目的のソフトウェアに向けて、ユーザも含め緊密に連携して開発を行う。

* シンプル

基本的にシンプルに。要求仕様を最もシンプルな形で実装する。
あれこれ可能性を考慮しない。

* フィードバック

開発の状況を常に把握し、よりよいソフトウェアに向けて、改善点をフィードバックする。

* 勇気

必要であれば大きな方向転換も辞さない。

# プラクティス

XPの目指すソフトウェア開発を実現するための具体的な手法。
開発するソフトウェア、メンバ構成によって取捨選択を行う。
コーディングに例えると、デザインパターンに相当する。

## Sit Together
プロジェクトに関わる全員が同じ場所で仕事をする。
コミュニケーションに起因する問題を解決することを目的とする。
(コミュニケーション)

## Planning Game
ユーザサイドと開発者サイドでそれぞれことなった目線でプロジェクト計画を立てる。ユーザサイドは、期間、必要な機能、優先度など。
開発者サイドは、詳細なスケジュールや実現方法など。
お互いに計画に必要な情報交換は行うが、お互いの領域に踏み込まないようにする。
お互いの担当領域での計画を立てることで、名実共に担当範囲に責任を持つことができる。また目的に向けて不要な折衝、調整を減らし変更に迅速に対応することも可能になる。
(シンプル、コミュニケーション)

## Customer Tests
ユーザが欲しい機能を提示し、それを満たすかどうかをユーザ自身がテストする。ユーザと開発者の間のギャップをなくすことができる。
(コミュニケーション、フィードバック)

## Small Release
短期で何度もリリースすることで完成品と、やりたいことのギャップを埋めていく。
(フィードバック)


## Simple Design

You aren't going to need it.(今必要なことをやれ)
必要な機能だけを実装する。設計を複雑にしない。
(シンプル)

## Pair Programming

ペアで1台のマシンを使ってコーディングを行う。
(コミュニケーション、フィードバック)

## Test-Driven Development
テストをコーディング前に書く。
必要な機能を把握できる。
後になってコードを変更したときに回帰テストの役割を果たせる。
(フィードバック)

## Design Improvement:Refactoring
コードをシンプルに保つために、何か機能を追加するたびにリファクタリングを行う。
(シンプル、勇気)

## Continuous Integration
常に結合テストを行うことで、いつでも動作するソフトウェアを得ることが可能。
(フィードバック)

## Collective Code Ownership
誰でも、いつでも、どのコードでも変更できるようにしておく。
(コミュニケーション、シンプル)

## Coding Standard
コーディング規約。少なくとも見た目を統一することで、コードをチームで共有しやすくなる。
(コミュニケーション）

## Metaphor
誰も見たことがないソフトウェアを実現するために、説明しやすい他のものに例えて、チーム内のイメージを統一する。
(コミュニケーション)

## Substainable Pace
無理のない開発ペースを維持する。
計画の段階で、無理がないペースになるように見積もりを行う。
何度もリリースを繰り返しながら、無理がないペースを徐々に見定めていく。
(フィードバック)

# まとめ

XPはどんな仕組みがより効率的か、ではなく、どのようにすればより人間が力を発揮できるか、に焦点を当てた手法。

ソフトウェアの中に存在するあやふやさを認め、いかにそのあやふやさに対応するか、を問題解決の中心に据えている。

従来手法がなし得なかった作業効率を実現できる可能性がある反面、人間に頼る部分が多いため、プロジェクトに関わるすべての人間に対し、より高いレベルを求める傾向があると思われる。
JAXBで日本語タグも使えました

JAXB（Java Architecture for XML Binding）で、日本語のタグも使えることを動作確認してみました。フツーに使えますね。

ポイントは、変換元/先オブジェクトのクラス定義で、@XmlRootElement、@XmlElementアノテーションを付けることですね。

文字コードも指定できました。

# オブジェクト→XML変換

```java:変換元クラス
@XmlRootElement(name = "人データ")
public class PersonJp {
    // Getter/Setterを省略して、publicにしてあります。

    @XmlElement(name = "名前")
    public String name;

    @XmlElement(name = "年齢")
    public int age;
}
```

```java:変換処理
// 入力オブジェクト
PersonJp person = new PersonJp();
person.name = "山田 太郎";
person.age = 20;

// 出力先
StringWriter actual = new StringWriter();

// 実行
JAXB.marshal(person, actual);

// 期待値
String expected = "" //
        + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" //
        + "<人データ>\n" //
        + "    <名前>山田 太郎</名前>\n" //
        + "    <年齢>20</年齢>\n" //
        + "</人データ>\n" //
;

// 検証
assertThat(actual.toString(), is(expected));
```

# XML→オブジェクト変換

```java:変換処理
// 入力XML
String input = "" //
        + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" //
        + "<人データ>\n" //
        + "    <名前>山田 太郎</名前>\n" //
        + "    <年齢>20</年齢>\n" //
        + "</人データ>\n" //
;
StringReader sr = new StringReader(input);

// 実行
PersonJp actual = JAXB.unmarshal(sr, PersonJp.class);

// 検証
assertThat(actual.name, is("山田 太郎"));
assertThat(actual.age, is(20));
```

# 文字コードを指定して変換
XMLファイルをシフトJISで作成したい場合は、次のように文字コードを指定することで、作成できました。

```java:オブジェクト→XML変換処理
// 入力オブジェクト
PersonJp person = new PersonJp();
person.name = "山田 太郎";
person.age = 20;

// 出力先
StringWriter actual = new StringWriter();

// Marshallerインスタンス作成
// 文字コードにシフトJISを指定。
// XMLを人が読みやすいようにフォーマットする。
// ※改行コードはLF（0x0A）のみの模様。
JAXBContext context = JAXBContext
        .newInstance(person.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "Shift_JIS");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

// 実行
marshaller.marshal(person, actual);

// 期待値
URL url = getClass().getResource(
        "/jp/co/tryjava/jaxb/person_sjis.xml");
File file = FileUtils.toFile(url);
String expected = FileUtils.readFileToString(file, "Shift_JIS");

// 検証
assertThat(actual.toString(), is(expected));
```

```java:XML→オブジェクト変換処理
// 入力XML
URL url = getClass().getResource(
        "/jp/co/tryjava/jaxb/person_sjis.xml");
File file = FileUtils.toFile(url);
String input = FileUtils.readFileToString(file, "Shift_JIS");
StringReader sr = new StringReader(input);

// 実行
PersonJp actual = JAXB.unmarshal(sr, PersonJp.class);

// 検証
assertThat(actual.name, is("山田 太郎"));
assertThat(actual.age, is(20));
```

# 参考ページ
・[Java - JAXB使い方メモ - Qiita](http://qiita.com/opengl-8080/items/f7112240c72d61d4cdf4)
　※非常に分かりやすくまとまっていました！
Hubot デフォルトのスクリプトで遊べそうなのもの

ブログより転載<http://konyu.hatenablog.com/entry/2014/05/13/214812>

Hubotをインストールしたものの、とりあえず何しようとか思っている人にため
デフォルトで入っているスクリプトの中から遊べそうなものをピックアップした。

これさえ他のメンバに教えて遊んでもらえば、
本筋のスクリプトを書き終わるまで、スクリプトの開発で進捗で詰められることはないはず。


## はじめに

HubotにはHipchatからアクセスしている。HichatとHubotの連携方法はこちら<http://konyu.hatenablog.com/entry/2014/05/13/214812>

パラメタ内で xxx は検索したい文字列
@hubotはhipchat上で指定しているhubotアカウント名
コンソール上で実行する場合は hubot youtube me test という感じで使う


### youtubeの動画を表示してくれる

```
@hubot youtube me xxx
```

<img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20140518/20140518214927.png">



### ランダムで画像検索でヒットしたものを表示してくれる

```
@hubot img me xxx
```

<img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20140518/20140518214930.png">


### 画像検索で動くGif画像をくれる

```
@hubot animate me xxx
```

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20140518/20140518214932.png" alt="f:id:kon_yu:20140518214932p:plain" title="f:id:kon_yu:20140518214932p:plain" class="hatena-fotolife" itemprop="image"></span></p>


### 髭をはやしてくれる

```
@hubot mustache me xxx/URL
```

<img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20140518/20140518214934.png">

指定した場所のgoogle mapを表示してくれる。日本語は不可っぽい

```
@hubot map me tokyo station
```

<img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20140518/20140518215120.png">


### パグの画像を表示する
```
@hubot pug me
```

<img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20140518/20140518214937.png" >

### 翻訳してくれる例だと日本語(ja)から英語(en)に「こんにちは」を訳してくれる

```
@hubot translate me from ja to en こんにちは
```

<img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20140518/20140518223025.png" >

以上！
Marvericksにmecabをインストールする


# 検証環境
OSX 10.9.2
Python 2.7.5

# インストール
mecab 0.996
ipadic 2.7.0

meacbのインストール

```
$ cd ~/Downloads
$ curl -O https://mecab.googlecode.com/files/mecab-0.996.tar.gz
$ tar zxfv mecab-0.996.tar.gz
$ cd mecab-0.996
$ ./configure
$ make
$ sudo make install
```

ipadicのインストール

```
$ cd ~/Downloads/
$ curl -O https://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
$ tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure --with-charset=utf8
$ make
$ sudo make install
```

mecab-pythonのインストール

```
$ cd ~/Downloads/
$ curl -O https://mecab.googlecode.com/files/mecab-python-0.996.tar.gz
$ tar zxfv mecab-python-0.996.tar.gz
$ cd mecab-python-0.996
$ export CFLAGS=-Qunused-arguments
$ export CPPFLAGS=-Qunused-arguments
$ python setup.py build
$ python setup.py install
```

### テスト

```
$ cd ~/Downloads/mecab-python-0.996
$ python test.py 
```

実行結果

```
0.996
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
二	名詞,数,*,*,*,*,二,ニ,ニ
郎	名詞,一般,*,*,*,*,郎,ロウ,ロー
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見	動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
女性	名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

 	BOS/EOS,*,*,*,*,*,*,*,*
太郎 	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は 	助詞,係助詞,*,*,*,*,は,ハ,ワ
この 	連体詞,*,*,*,*,*,この,コノ,コノ
本 	名詞,一般,*,*,*,*,本,ホン,ホン
を 	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
二 	名詞,数,*,*,*,*,二,ニ,ニ
郎 	名詞,一般,*,*,*,*,郎,ロウ,ロー
を 	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見 	動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た 	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
女性 	名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
に 	助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し 	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た 	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 	記号,句点,*,*,*,*,。,。,。
 	BOS/EOS,*,*,*,*,*,*,*,*
EOS
EOS
filename: /usr/local/lib/mecab/dic/ipadic/sys.dic
charset: utf8
size: 392126
type: 0
lsize: 1316
rsize: 1316
version: 102
```
coffeescript でgrunt使わない時はこれ意外ありえない


~~~bash
coffee -o specjs/ -wbc coffee/*.coffee
~~~

> 新規追加ファイルも見張ってくれるよ！

######若干-oオプションがわからん、WBCはわっかりやすい

#### 追記：やっぱうまくいかんときあります。。。
Macでの画像圧縮と設定


site: http://develo.org/2014/05/16/0237.html
GitHub: https://github.com/kamem/workflow.png-jpeg-mini

jpeg圧縮
----
* [JPEGmini][jpegmini]

[jpegmini]: http://www.jpegmini.com/


pngの色圧縮
----
* [ImageAlpha][pngmini]

[pngmini]: http://pngmini.com/


gif,jpeg,pngの圧縮
----
* [ImageOptim][imageoptim]

[imageoptim]: http://imageoptim.com/


流れとしては下記のような感じ
* jpeg: JPEGmini → ImageOptim
* png: ImageAlpha → ImageOptim
* gif: ImageOptim


ショートカットでファイルを圧縮
----
* jpeg: jpegoptim → ImageOptim
* png: ImageAlpha → ImageOptim


* [JPGファイルをコマンドラインで圧縮するツールが便利！][jpegoptim]
[jpegoptim]: http://www.yoheim.net/blog.php?q=20130802

1. png-jpeg-mini.workflowファイルを「/（ユーザー名）/ライブラリ/Services/ 」ここに格納
2. システム環境設定 → キーボード → キーボードショーットカットタブ
3. 左側のメニューから「アプリケーション」を選択
4. ちょっと下にある「+」ボタンを押下
5. アプリケーション：Finder<br>
メニュータイトル：png-jpeg-mini<br>
キーボードショーットカット：（任意）
HerokuでPHP+MySQL


**同内容の記事を[Tumblr](http://yutaono.tumblr.com/post/86098410303/heroku-php-mysql)で、コードは[github](https://github.com/yutaono/heroku_php_mysql)で公開しています。**


HerokuでMySQLを使用するためにはClearDBアドオンを導入する必要があります。
[ClearDB](https://www.cleardb.com/)は、MySQLで動くアプリケーションのためのサービスで、Herokuではアドオンから簡単に利用できます。

## 手順

### composer.jsonを作成
Herokuのアプリを作成するために、作業ディレクトリでcomposer.jsonを作成します。

```composer.json
{
	"require": {
        "php": "~5.5.0"
    }
}
```

gitを初期化して、composer.jsonをコミットします。

```
$ git init
$ git add composer.json
$ git commit -m 'initial commit'
```


### ClearDBアドオンを導入
Herokuのアプリを作成して、composer.jsonをデプロイします。

```
$ heroku create
$ git push heroku master
```

ClaerDBのアドオンをインストールします。

```
$ heroku addons:add cleardb:ignite
```

これで作成したアプリ用のClearDBデータベースの作成と、その情報がHerokuに設定されています。

### ClearDBの設定

設定されたClearDBのURLをHerokuから取得します。

```
$ heroku config | grep CLEARDB_DATABASE_URL
```

実行結果は以下のようになります。

```
2:CLEARDB_DATABASE_URL: mysql://(--username--):(--password--)@(--hostname--)/(--dbname--)?reconnect=true
```

取得したusername, password, hostname, dbnameを使用して、ClearDBに接続します。

```
$ mysql --host=(--hostname--) --user=(--username--) --password=(--password--) (--dbname--)
```

例としてuserテーブルを作成し、レコードを3つ登録します。

```
mysql> create table user (
	id int primary key auto_increment,
	name varchar(64),
	data_created DATETIME
);
mysql> insert into user values (1, 'user1', now());
mysql> insert into user values (2, 'user2', now());
mysql> insert into user values (3, 'user3', now());
mysql> select * from user;
+----+-------+---------------------+
| id | name  | data_created        |
+----+-------+---------------------+
|  1 | user1 | 2014-01-01 00:00:00 |
|  2 | user2 | 2014-01-01 00:00:00 |
|  3 | user3 | 2014-01-01 00:00:00 |
+----+-------+---------------------+
```

### index.phpを作成

作成したClearDBに接続するためのindex.phpを以下のように作成します。

```index.php
<?php
    $url = parse_url(getenv("CLEARDB_DATABASE_URL"));

    $server = $url["host"];
    $username = $url["user"];
    $password = $url["pass"];
    $db = substr($url["path"], 1);

    $link = mysqli_connect($server, $username, $password, $db);
    $result = mysqli_query($link, "select * from user");

    while($user = mysqli_fetch_array($result)) {
      echo $user['id'], " : ", $user['name'], "<br>";
    }
?>
```

index.phpをHerokuにデプロイします。

```
$ git add index.php
$ git commit -m 'add index.php'
$ git push heroku master
```

ブラウザでデプロイ先にアクセスし、以下のように表示されていれば成功です。

```
1 : user1
2 : user2
3 : user3
```

## 関連リンク
- [ClearDB MySQL Database | Heroku Dev Center](https://devcenter.heroku.com/articles/cleardb)
- [Herokuで<?php phpinfo(); - Qiita](http://qiita.com/yutaono/items/a356ff172f13d6a505d1)
MultipeerConnectivityの最大接続数

iOSで端末同士の通信を実現するためにMultipeerConnectivityがありますね。最大で何台接続可能か気になったので調べてみました。
最大接続数はMCSettion.hにkMCSessionMaximumNumberOfPeersとして定義されています。ちなみに、最小接続数はkMCSessionMinimumNumberOfPeersとして定義されています。

```objc
 NSLog(@"min=%lu,max=%lu",(unsigned long)kMCSessionMinimumNumberOfPeers, (unsigned long)kMCSessionMaximumNumberOfPeers);
```

出力はmin=2,max=8となります。
最大8台の端末同士を接続できるようです。
django テンプレートで markdown から html へ変換する

#始まり
Djangoで、Qiitaの記事を表示するWebアプリケーションを作っていた。

QiitaのAPIでは、jsonで記事を取得すると、
HTMLかMarkdownかどちらかで文章をとってこれる。

それをDjangoでのテンプレートで表示したかった。

しかし、Djangoのセキュリティがきつく、htmlを埋め込めない。


そこで、markupをhtmlに変換して埋め込む作戦に出た。

調べると、
INSTALL_APPにdjango.contrib.markupを追加して、
```{% contents | markdown %}```
のように、markdown文字列に、markdownフィルタをかけることで、htmlに変換してくれることが分かった。

が、実行してみると、
django.contrib.markup
がモジュールに存在しないというエラー

バージョン1.6のDjangoには、markupが入っていないみたいだった。

ということで、別の方法をしらべると、django-markdown-deuxというモジュールで、同じことができることが分かった。
セキュリティ上、どうなのかわからないが、とりあえず、動かしたいので、やってみることにした。

以下手順

##django-markdown-deuxのインストール
pipを使ってインストールした

```pip install django-markdown-deux```

##INSTALL_APPにdjango-markdown-deuxを設定

```py:settings.py
   INSTALL_APP = (
   ...
   'markdown_deux',
   ...
   )

```

##テンプレートファイルで、フィルタをかける

```html+django:
   {% load markdown_deux_tags %}
   ...
   {{ contents | markdown }}
   ...
```

これで、変換することができた。

以上
phpspecのコラボレータとエクスペクテーションのパターン

Loggerクラスのlog()メソッドを呼び出すと、IOクラスのwriteln()が呼ばれる、というスペックを想定する。

```php
<?php
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;

class LoggerSpec extends ObjectBehavior {
    function it_can_log_message() {
        $this->log("Hello");
    }
}
```

# 引数で渡す

普通ないだろうけど単純な例として、IOオブジェクトを引数で渡すとする。

```php
class LoggerSpec extends ObjectBehavior {
    function it_can_log_message(IO $io) {
        $io->writeln("LOG: Hello")->shouldBeCalled();
        $this->log("Hello", $io);
    }
}
```

スペックに仮引数を書くとphpspecが自動的にモックを作って渡してくれる。

# コンストラクタで渡す

let()はxUnit系でいうところのsetUp()

```php
class LoggerSpec extends ObjectBehavior {
    function let(IO $io) {
        $this->beConstructedWith($io);
    }

    function it_can_log_message(IO $io) {
        $io->writeln("LOG: Hello")->shouldBeCalled();
        $this->log("Hello");
    }
}
```

letにも同様に`IO $io`を渡す。phpspecは仮引数名でモックオブジェクトをキャッシュしているので、letとスペックの仮引数名が一致していれば同じものを渡してくれる。

# メソッド内でnewされたオブジェクトがコラボレータに渡された場合

IO#writeln()に文字列ではなく、Logger#log()メソッドが生成するMessageオブジェクトを渡すとしよう。この場合、単純にはMessageが一致しているかを調べることができない。

1つの解決策はFactoryクラスを導入することだろう。

```php
class LoggerSpec extends ObjectBehavior {
    function let(IO $io, MessageFactory $factory) {
        $this->beConstructedWith($io, $factory);
    }

    function it_can_log_message(IO $io, MessageFactory $factory, Message $message) {
        $factory->createMessage("Hello")->shouldBeCalled()->willReturn($message);
        $io->writeln($message)->shouldBeCalled();
        $this->log("Hello");
    }
}
```

IO#writeln()に渡されるのはMessageFactory#createMessage()で作られたMessageオブジェクトである。中身は気にしない。というスペックになっている。実際このテストでは"Hello"という文字列がMessageオブジェクトに含まれているかどうかは気にしていない。モッキストらしいアプローチだ。

別の方法としては、Messageオブジェクトが何かと一致しているというエクスペクテーションを諦めて、オブジェクトの型や状態を調べる。

```php
class LoggerSpec extends ObjectBehavior {
    function let(IO $io) {
        $this->beConstructedWith($io);
    }

    function it_can_log_message(IO $io) {
        $io->writeln(Argument::type('Message'))->shouldBeCalled();
        $this->log("Hello");
    }
}
```

`Prophecy\\Argument::type()`を使って、引数の型を調べている。さらにMessage#getMessage()が"Hello"を返すことも追加してみる。

```php
    function it_can_log_message(IO $io) {
        $io->writeln(Argument::allOf(
            Argument::type('Message'),
            Argument::which('getMessage', 'Hello')
        ))->shouldBeCalled();
        $this->log("Hello");
    }
```

又は、`Prophecy\\Argument::that()`にコールバック関数を渡す。

```php
    function it_can_log_message(IO $io)
    {
        $io->writeln(Argument::that(function ($v) {
            return ($v instanceof Message) && $v->getMessage() === "Hello";
        }))->shouldBeCalled();
        $this->log("Hello");
    }
```

基本的にphpspec自体は前者の使われ方を想定して設計されたのではないかと思う。一方ProphecyをモックフレームワークとしてPHPUnitと組み合わせて使う、といった場合には後者のような使い方も覚えておいた方が良い。
PDFのキャプチャを撮る

昔、別のブログに書いた記事を転載。

PDFのツールバーにキャプチャを撮る機能があった！

多分、通常は表示されていないので、
まず、バーの｢ツール｣をクリック。
｢カスタマイズ｣をクリック。
スクロールで下に行くと、｢スナップショットツール｣
というのがあるので、チェックを入れて｢OK｣をクリック。

キャプチャを撮りたいPDFを開いて、
ツールバーに表示されているカメラマークをクリック。


1ページ撮りたい時は、1ページ表示にしておいて、
そのページをダブルクリックするだけ。

1部分だけを撮りたい時は
ドラッグ＆ドロップで範囲指定する。

そして、ペイントか何かにペーストすれば完了！

![20090821153611.jpg](https://qiita-image-store.s3.amazonaws.com/0/42969/28496210-d5ee-dd7f-fdc8-08e031642310.jpeg)

![20090821153612.jpg](https://qiita-image-store.s3.amazonaws.com/0/42969/f9c93cd5-3eb5-d14b-a47a-ca791e0f1b8c.jpeg)