OmniAICreator/Qiita-1.07M huggingface dataset:
Mavericksにhomebrewでrbenv + Rails環境を構築


OSX 10.9でRails環境を構築したのでメモ

## 事前準備

```bash:~/.zshrc
# for rbenv
if [ -d $HOME/.rbenv ]; then
	eval "$(rbenv init -)"
fi

# for homebrew
export PATH=/usr/local/bin:$PATH
```

## homebrewでツールをインストール

```
brew update
brew upgrade
brew install openssl
brew install readline
brew install rbenv
brew install ruby-build
# お好みで
brew install postgresql
brew cleanup
```

### opensslのpathを追加
`brew install openssl`だけだと

```
which openssl
# /usr/bin/openssl
```

になってるので,

```
brew link openssl --force
source ~/.zshrc
```
```
which openssl
# /usr/local/bin/openssl
```

とする.

## rbenvでruby2.1.1をインストール

`rbenv install 2.1.1` だとインストールできないので, [readline 6.3環境でRuby 2.1.1をインストールするpatch](http://qiita.com/riocampos@github/items/7ca8fa8e4448cd598ae0)を利用させていただく.

```bash:
curl -sSL https://gist.github.com/mislav/a18b9d7f0dc5b9efc162.txt | env CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install --patch 2.1.1
rbenv global 2.1.1
```
```
rbenv version
# 2.1.1 (set by $HOME/.rbenv/version)
which ruby
# $HOME/.rbenv/versions/2.1.1/bin/ruby
```

## bundlerをインストール


```bash:
gem install bundler --no-ri --no-rdoc
```
```
which bundle
# Users/yyama/.rbenv/shims/bundle
```
あとは適当なRailsプロジェクトで`bundle install`する.
sshdのportを変更しsandbox環境からlocalhost接続を可能にする

iOS7から、sandbox環境からlocalhost:22に接続できなくなった様子。

`$ ssh -NR 10022:localhost:22 localhost`で
localhost:10022へsandbox環境から接続できることを発見したのでそもそものportを変更していけた。

```bash:portを22から10022に変更
$ su
# sed -ie "s/   22/10022/" /etc/services
# reboot
```

* /etc/ssh/sshd_configのPort設定は変更しても使われません。
* sandbox環境からlocalhost port:10022で接続できるようになります。
zsh で補完関数を作るときに便利な再読み込みするプラグインを作った

## これは何?

zsh で自分で補完関数を作るとき、作った関数を直してもう一回読み込んで確認して、っていう手順がけっこうめんどくさい。それを簡単にしたくて、前にさっと再読み込みできるようにする関数を作った。

[zsh で自分で作っている補完関数を簡単に再読み込みする - Qiita](http://qiita.com/mollifier/items/b72a108daab16a18d34a)

でも呼び出し方が微妙に分かりにくかったり、使ってるうちに細かく不満が出てきて、独立したプラグインとして書き直したので紹介する。自作の補完関数をデバッグするときに役にたつので、そういうのを書く人は使ってみるといいと思う。

zload という名前にした。コードは GitHub に置いてある。

[https://github.com/mollifier/zload](https://github.com/mollifier/zload)


## インストール

まず GitHub の [zload のページ](https://github.com/mollifier/zload)から zload, \_zload と2つファイルを取ってきて $fpath の通ったところに配置する。その後に .zshrc で autoload すれば OK。

例えば $HOME/zsh/functions/zload の下に配置したい場合はこんな感じ。

```
% cd $HOME/zsh/functions
% git clone https://github.com/mollifier/zload.git zload

# 手動でやる場合は $HOME/zsh/functions/zload ディレクトリを作成して、
# その下に zload, _zload を置く
```

その後 ~/.zshrc にこんな感じで書く。

```zsh:.zshrc
# fpath の設定は autoload -Uz compinit; compinit とする前に書くこと
fpath=($HOME/zsh/functions/zload(N-/) $fpath)

autoload -Uz zload
```

## 使い方

### 基本的な使い方

`zload` 関数に読み込みたいファイルを引数で指定して使う。

```zsh
% zload ~/work/function/_f
```

引数で指定するファイルの形式は zsh の補完ファイル、autoload して使うプラグインのどちらでもOK。

実際に使っている様子はこんな感じ。

```zsh
% my-command
zsh: command not found: my-command
# 最初は当然呼び出せない

# zload を使うと...
% zload my-command _my-command
% my-command
...
# autoload したので my-command が呼び出せる

% my-command [TAB]
...
# 補完ファイルも読み込めてる
```

編集したときはもう一度 zload し直せば反映される。

```zsh
% vim my-command _my-command
# 何か編集

# 再読み込み
% zload my-command _my-command
```

### 自動リロードを使う

`-a` オプションを付けると自動リロードの機能が有効になる。こうしておくと編集した後に明示的に再読み込みしなくても勝手に反映されるようになって便利。

```zsh
# 最初の zload は手動で呼び出す
# -a オプションを付けると自動リロードが有効になる
% zload -a my-command _my-command

# これ以降 my-command, _my-command の変更が勝手に反映されるようになる

% vim _my-command
# ... 編集する
# ... 勝手にリロードされる

# -d オプションで自動リロードが無効になる
% zload -d

# もう一回 -a オプションを付けて起動するとまた有効になる
% zload -a
```

仕組みとしては zsh の preexec フックを使って、コマンドを実行する直前に zload で読み込み直してる。編集してない時でも毎回読み込み直してるので、でっかい関数を作ってる時は重くなるかもしれない(なのでデフォルトで無効にしている)。普通はそんなに重くならないと思うのでこの機能は使ったほうがいいと思う。

## 最後に

[元の記事](http://qiita.com/mollifier/items/b72a108daab16a18d34a)では zshrc に直接関数を書いてたので、修正するときに手でコピペして直す必要があった。それに呼び出す関数が3つもあって分かりにくかった。そのへんを直して1つのプラグインにしたので、きれいになって使いやすくなったと思う。

補完関数を自分で書くときはいろいろと直しながら試すことになると思うけど、これを使うと修正の確認が楽になるので、ぜひ試してみてください。
screenに名前を自動的につけてhardstatusに表示する


`screen`を便利に使うため、ちょちょっと工夫。
まず`.zshrc`に`s`メソッドを作成。ディレクトリ名をセッション名にして、既にあればアタッチするようにしておく。

~~~.zshrc
export SCREENDIR=/usr/local/screens
s () {
    if [ -n "$1" ]; then
      name="$1"
    else
      pwd=`pwd`
      name=":`basename $pwd`:"
    fi
    screen -x $name || screen -r $name || screen -S $name
}
~~~

名前の前後に":"を付けているのは、ちょっとした理由から。アタッチする際に`screen`が部分一致で探してしまうため、番兵を置いておくようにしました。これで例えば`foo`ってディレクトリと`foobar`ってディレクトリ両方でデタッチしてあっても`screen`コマンドがエラーにならない。

で、複数の`screen`をタブで切り替えて使ってるわけですが、ひと目で見分けられるように`hardstatus`に表示しておきたい。しかし`.screenrc`に`$STY`が渡ってこないので、もう一工夫。

~~~.screenrc
hardstatus alwayslastline '%m/%d %02c:%s %{= .g}%H:%`%{-} %L=%-w%45L>%{=u g.}%n %t%{-}%+w %-17<%=%{= .y}(%l)'
backtick 0 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'
~~~

加えたのは1行目の"%`"と2行目。
これで

1. 任意のディレクトリで`s`を叩き`screen`を起動
1. 他のディレクトリでも`s`で作業
1. 各`screen`を切り替えてもセッション名が表示されているので混乱しない
1. 作業が一段落したらデタッチ
1. 次回作業時、また該当ディレクトリで`s`

のように作業できるようになりました。

前々から手を入れようと思っていた箇所でしたが、GWの最後にちょっと幸せに。
mysql バックアップと復元


データベースのバージョン管理ェ…

## SQLベースでのバックアップ

~~~~ bash:
# 全てのデータベースをバックアップ
$ mysqldump -u root -x --all-databases > dump.sql
# 特定のデータベースのみバックアップ
$ mysqldump -u root <database_name> > dump.sql
# 複数のデータベースをバックアップする場合はdatabasesオプションを
$ mysqldump -u root --databases DB1 DB2 DB3

~~~~

`mysqldump [OPTIONS] database [tables]`とかいう書式でテーブル名も指定できるみたいだ。

## SQLベースで復元

普通にmysqlコマンドに渡せばOK

~~~~
$ mysql -u root -p < dump.sql 
$ mysql -u root database < dump.sql 
~~~~

## メモ

`u` : user name
`p` : password
`P` : port
`h` : host

`d` : DDLだけ
iOSでSocial.frameworkを使ってFacebookのイイね！をする

最初に`Native/Desktop`アプリとしてFBアプリ登録をしておく。

ライブラリを読み込んで、

```objc

#import <Social/Social.h>
#import <Accounts/Accounts.h>

```

以下が実際に送信する箇所。

```objc
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    
NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:
                             @"APP_ID", ACFacebookAppIdKey,
                             [NSArray arrayWithObject:@"email"], ACFacebookPermissionsKey, nil];
[accountStore requestAccessToAccountsWithType:accountType options:options completion:^(BOOL granted, NSError *error) {
    if (granted) {
            
        NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:
                                     @"APP_ID", ACFacebookAppIdKey,
                                     [NSArray arrayWithObject:@"publish_actions"], ACFacebookPermissionsKey,
                                     ACFacebookAudienceEveryone, ACFacebookAudienceKey,
                                     nil];
            
        [accountStore requestAccessToAccountsWithType:accountType options:options completion:^(BOOL granted, NSError *error) {
            if(granted){

                NSArray *accounts = [accountStore accountsWithAccountType:accountType];
                if ([accounts count] > 0) {
                    ACAccount *account = [accounts objectAtIndex:0];
                        
                        ACAccountCredential *fbCredential = [account credential];
                        NSString *accessToken = [fbCredential oauthToken];
                        
                        NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                                                accessToken, @"access_token",
                                                @"イイねするURLなど", @"object",
                                                nil];

                        SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"https://graph.facebook.com/me/og.likes"] parameters:params];
                        [request setAccount:account];
                        [request performRequestWithHandler:^(NSData* responseData, NSHTTPURLResponse* urlResponse, NSError* error) {
                            NSLog(@"%@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
                        }];
                    }
                }
            }];
        }
    }];
```

ポイントとしては、
いきなり`publish_stream`とか投稿する系のpermissionをとろうとすると、`Error Domain=com.apple.accounts..`みたいなエラーがでる。
回避するために一旦ベーシックなpermission(`email`とか)をとっている。

また、`email`などの場合は、`ACFacebookAudienceKey`を指定しなくても取得できるが、投稿系のpermissionは`ACFacebookAudienceKey`を指定しないと、これまたエラーになるので注意。
SpriteKit入門 -14-


今回は、自前の Texture Atlas がすでに用意されている場合に、どのようにテクスチャを使用するかを見ていきます。

例えば、このような画像ファイルがあるとします。

![japanese-chess-02.jpg](https://qiita-image-store.s3.amazonaws.com/0/30731/46dad3b2-974e-195d-086a-ec5d3324e273.jpeg "japanese-chess-02.jpg")

指定した矩形部分だけを使用するにはこのようにします。

```objectivec:HelloScene.m
- (void)createSceneContents
{
	SKTexture *texture = [SKTexture textureWithImageNamed:@"japanese-chess-02.jpg"];
	CGFloat banWidth = 400.0;
	CGFloat banHeight = 320.0;
	CGFloat komaWidth = banWidth / 8.0;
	CGFloat komaHeight = banHeight / 6.0;
	for (int x=0; x < 8; x++) {
		for (int y=0; y < 6; y++) {
			if (((x+y)%3) == 1) {
				continue;
			}
			@autoreleasepool {
				SKTexture *texRect = [SKTexture textureWithRect:CGRectMake(x*komaWidth/banWidth, y*komaHeight/banHeight, komaWidth/banWidth, komaHeight/banHeight) inTexture:texture];
				SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithTexture:texRect];
				sprite.position = CGPointMake((x+1)*60, (y+1)*70);
				[self addChild:sprite];
			}
		}
	}
}
```

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

![spritekit_14_01.png](https://qiita-image-store.s3.amazonaws.com/0/30731/fbe7a143-8455-b208-c5db-9f1001d061be.png "spritekit_14_01.png")

今回はここまで。
mbed LPC1768はRAM64Kだった

知らなかったです。
mbedLPC1768のRAMは32Kだとばかり思ってた。
だってこれ見てよ。３２Kってでっかく書いてあるじゃん。
![2014-05-06_17h06_49.jpg](https://qiita-image-store.s3.amazonaws.com/0/43186/415e5db1-4ca5-e4c0-24e7-97fd784a51ab.jpeg)


でもオンラインでコンパイルすると３２Kを超えてると出てくる。
![2014-05-05_09h34_05.jpg](https://qiita-image-store.s3.amazonaws.com/0/43186/4220ee08-7b13-04c4-5f02-85916c6a0da6.jpeg)


どうみても変なんで調べてたら、こちらの記事を発見。
https://mbed.org/users/futaba/notebook/memory/

は～知らなかった～
こう言う大事な事はどこを見れば良いんだろう。
英語ではきっと書いてあるんだろうけど、日本語で体系的に学習する方法は無いのかな～
herokuでDBマイグレーションにphpmigを使う

[phpmig](https://github.com/davedevelopment/phpmig)はフレームワークに依存しないシンプルなdatabase migrationツールです。

phpmigでは、どのマイグレーションが実行済みかという情報を保存する方法を切り替えることができます。もっとも単純なのは`Phpmig\Adapter\File\Flat`で、これはファイルにバージョン情報を保存します。

以下の例では、`migrations/.migrations.log`というファイルにバージョン情報を保存します。

```php:phpmig.php
$container['phpmig.adapter'] = new Phpmig\Adapter\File\Flat(__DIR__ . DIRECTORY_SEPARATOR . 'migrations/.migrations.log');
```

しかし、herokuなどのPaaSでは、デプロイ時に実行環境がまっさらな状態から作り直されるので、`migrations/.migrations.log`ファイルが消えてしまい、DBの状態と食い違ってしまいます。なので`Phpmig\Adapter\File\Flat`は使えません。

代わりにDBにバージョン情報を保存しましょう。現状、DBにバージョン情報を保存するためのアダプタとして以下のものが用意されています。

* Phpmig\Adapter\Doctrine\DBAL
* Phpmig\Adapter\Illuminate\Database
* Phpmig\Adapter\PDO\Sql
* Phpmig\Adapter\Zend\Db

以下は`Phpmig\Adapter\PDO\Sql`を使う例です。

```php:phpmig.php
$container['phpmig.adapter'] = $container->share(function () use ($container) {
    return new Phpmig\Adapter\PDO\Sql($container['db'], 'migrations');
});
```

但し今のphpmigの最新リリース1.0.0では、`Phpmig\Adapter\PDO\Sql`はPostgreSQLだと動きません。

```
$ vendor/bin/phpmig migrate


  [PDOException]                                                 
  SQLSTATE[42704]: Undefined object: 7 ERROR:  設定パラメータ"tables"?  
  ??不明です                                                 


migrate [-b|--bootstrap="..."] [-t|--target="..."]
```

すでになおっているようなので、新しいリリースを待つか、あるいはphpmigをcomposerで入れるときにdev-masterを入れるようにしましょう。


[Add support for PostgreSQL in Adapter\PDO\Sql by umireon · Pull Request #57 · davedevelopment/phpmig](https://github.com/davedevelopment/phpmig/pull/57)
iPhoneアプリをGradleでビルドしてDeployGateで自動配布する方法の続き

[iPhoneアプリをGradleでビルドしてDeployGateで自動配布する方法](http://qiita.com/bilyakudan/items/b53350a6702f14128ebb)の続きです

先日、[gradle-xcodePlugin](https://github.com/openbakery/gradle-xcodePlugin)が0.9.7にアップデートされて、DeployGateがサポートされました！めでたい！
[最高のプルリク情報](https://github.com/openbakery/gradle-xcodePlugin/pull/63)

これで、iPhoneアプリをGradleでビルドしてDeployGateにアップロードするのに使うプラグインはgradle-xcodePluginだけでよくなりました！

## build.gradleの準備
前回同様にbuild.gradleを編集します

```groovy
buildscript {
    repositories {
        maven {
            url('http://openbakery.org/repository/')
        }
        mavenCentral()
    }
    dependencies {
        classpath group: 'org.openbakery', name: 'xcodePlugin', version: '0.9.+'
    }
}
apply plugin: 'xcode'

xcodebuild {
    sdk = 'iphoneos'
    target = 'Test'
    scheme = 'Test'
    workspace = 'Test.xcworkspace' //cocoapodを使用している時のみ指定
    signing {
        identity = 'iPhone Distribution: NAME (...)' //キーチェーンアクセスの証明書に載っているのを書く
        mobileProvisionURI = 'file://localhost/(.mobileprovisionまでのfile path)' //プロジェクト直下にデベロッパーサイトからダウンロードしたTest.mobileprovisionを置いておくと便利
    }
    deploygate {
        apiToken = 'DeployGateの自分のAPI TOKEN'
        userName = 'DeployGateの自分のアカウント名'
        message  = '(任意)gradleでアップロード！'
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.10'
}
```

変わった所は、DeployGate公式のGradleプラグインは使わずに、gradle-xcodePluginの設定内にDeployGateの設定を書いてる点です
これでDeployGateのタスクが実行出来るようになります！

## 実行

```shell-session
$ ./gradlew deploygate
```
これだけで、ビルドからcodesignからDeployGateへのアップロードまでやってくれます
便利！！！！！！！！！！！

## 参考
* [gradle-xcodePlugin](https://github.com/openbakery/gradle-xcodePlugin)
* [Support for DeployGate](https://github.com/openbakery/gradle-xcodePlugin/pull/63)
* [DeployGate](https://deploygate.com)
webページに仮の画像を表示してくれるAPI（placeholder）まとめ

imgのsrcでurl指定するとダミーの画像を表示してくれるアレです。
みつけ次第随時追加していきます。

#画像サイズ表示系
指定した画像サイズを画像として表示してくれるタイプの奴です。

## [placeholder.com](http://via.placeholder.com/350x150)

老舗。

http://via.placeholder.com/350x150
<img src="http://via.placeholder.com/350x150" alt="placeholder.com">

## [placehold.jp](http://placehold.jp/)
日本の人がつくったぽい。背景色や文字色などが変えられる。

http://placehold.jp/24/cc9999/993333/350x150.png
<img src="http://placehold.jp/24/cc9999/993333/350x150.png" alt="placehold.jp">

## [Fake Images Please?](http://fakeimg.pl/)
結構柔軟に設定できる。凝りたい人にぜひ。

https://fakeimg.pl/350x150/ff0000/000/?text=Fake%20Image%20Please?&font=lobster
<img src="http://fakeimg.pl/350x150/ff0000/000/?text=Fake Image Please?&font=lobster" alt="Fake Images Please?">

## [placeholder.pics](http://placeholder.pics/)

色合いにグラデーションを設定できる
<img src="http://placeholder.pics/svg/350x150/5CFFA0-DCFFFC">


#写真表示系
画像サイズじゃなくて、写真を表示してくれるタイプの奴です。

## [Lorem Picsum](https://picsum.photos/)
なんだかおしゃれな雰囲気の写真を表示してくれる

https://picsum.photos/350/250/?random
<img src="https://picsum.photos/350/250/?random" alt="Lorem Picsum">

## [placeimg.com](http://placeimg.com)
ページがシンプル。

http://placeimg.com/350/250/people
<img src="http://placeimg.com/350/250/people" alt="placeimg.com">

## [placekitten](http://placekitten.com/)
子猫の写真を表示してくれる。かわいい！

http://placekitten.com/350/250/
<img src="http://placekitten.com/350/250" alt="placakitten">

## [placebear](http://placebear.com/)
くまー（・(ｪ)・）

https://placebear.com/350/250
<img src="https://placebear.com/350/250" alt="placebear">


## [baconmockup](http://baconmockup.com)
ベーコンの画像を表示してくれる。なぜベーコン…。

http://baconmockup.com/350/250
<img src="http://baconmockup.com/350/250" alt="Bacon Mockup">
[PHP]unset構文と処理速度

unset関数を使うと処理速度はどうなるのか、という話。
while文の最後にunset関数を使っています。
結論
「while文中では、最後に変数を破棄したほうが処理が早くなるのかも」

2つ目のコードの方が30ms（0.03秒）早いです。

**追記**
ご指摘いただいた風に、コードを修正したところ、実行速度が50ms早くなりました。
unset構文に関しては、スコープを把握しないで乱用すると大変なことになりそうです。複数の引数に対応しているようなので、1行にまとめました。

```php:これでも問題なく動く
<?PHP
$content = fopen($argv[1], "r");

while (($line = fgets($content)) !== false) {
    $ary = preg_split("/[\s]/", $line);
    $str = $ary[1];
    
    $pattern = preg_split("/[\\+\-]/", $ary[1]);
    
    foreach (str_split($pattern[0]) as $val) {
        $left[] = $val;
    }
    foreach (str_split($pattern[1]) as $val) {
        $right[] = $val;
    }
    $leftnumber     = substr($ary[0], 0, count($left));
    $rightnumber    = substr($ary[0], count($left));

    if (strstr($ary[1], "+")) {
        echo $leftnumber + $rightnumber . PHP_EOL;
    } elseif (strstr($ary[1], "-")) {
        echo $leftnumber - $rightnumber . PHP_EOL;
    }

    unset($left, $right);
}

fclose($content);
```

```php:だけどこっちの方が処理は早い
<?PHP
$content = fopen($argv[1], "r");

while (($line = fgets($content)) !== false) {
    $ary = preg_split("/[\s]/", $line);
    $str = $ary[1];
    
    $pattern = preg_split("/[\\+\-]/", $ary[1]);
    
    foreach (str_split($pattern[0]) as $val) {
        $left[] = $val;
    }
    foreach (str_split($pattern[1]) as $val) {
        $right[] = $val;
    }
    $leftnumber     = substr($ary[0], 0, count($left));
    $rightnumber    = substr($ary[0], count($left));

    if (strstr($ary[1], "+")) {
        echo $leftnumber + $rightnumber . PHP_EOL;
    } elseif (strstr($ary[1], "-")) {
        echo $leftnumber - $rightnumber . PHP_EOL;
    }

    unset($left, $right, $rightnumber, $leftnumber);
}

fclose($content);
```

処理速度を気にするならPHPじゃなくて(ry
って話になりそうですね。
nyaosでスペースを含むaliasを設定する

公開されてるUnityのScreenCastをYouTubeから1080pxの高解像度で一括ダウンロードするために`JDownloader2`をインストールして、`nyaos`から簡単に起動するためのメモ。

## `nyaos`から立ち上げる理由

`JDwonleader2`を使って高解像度の動画をYouTubeからダウンロードするには`ffmpeg`がパスに通ってる必要がある。

Windowsのインストールのたびにパスを毎回設定するのは面倒だし、何よりあのパス設定画面が使いにくすぎる。`RapidEE`とか使ってた時期もあったけどそれでもめんどうくさい。

なので`~/Dropbox/home/bin`にパスを通すことが必要になりやすい`ffmpeg`とかその他のコマンドをおいてnyaosの設定ファイルでパスを通してる。

つまり`nyaos`から立ち上げないとパスがちゃんと認識されずに困る。

## 設定方法

デフォルトだと`JDownloader2`はこんなディレクトリにダウンロードされる。

`"C:\Users\ironsand\AppData\Local\JDownloader v2.0\JDownloader2.exe"`

もちろんこんなのを毎回打つような修行はしたくないので`nyaos`のalias機能を使うわけです。
でもここで問題になるのはパスにスペースが入ってるので

alias jdownloader ="C:\Users\ironsand\AppData\Local\JDownloader v2.0\JDownloader2.exe"

だと

`C:\Users\ironsand\AppData\Local\JDownloader`なんてフォルダはねーよ。

と怒られるaliasと一緒に`"`を使うには`""`と2回続けて書けばOKなので

`alias jdownloader ="""C:\Users\ironsand\AppData\Local\JDownloader v2.0\JDownloader2.exe"""`

と書きましょう。これで`$ jdownloader`と打てば無事に起動できる、やったー。

## バックグラウンドで走らせよう

`function`を使えばバックグラウンドで動かせることをzetamattaさんに教えていただきました。

```shell-session
jdownloader{
  "C:\Users\ironsand\AppData\Local\JDownloader v2.0\JDownloader2.exe" &
}
```

## 修正前の古いの(無視してOK)

`~~`を使っても複数行の取り消し線は出せないみたいなのでそのまま。

まあ、さっきみたいに設定すると JDownloader が立ち上がってる間はそのコンソールが使えなくなってしまってとても悲しいことになるので

`$ jdownloader &`とバックグラウンドで走らせるようにしましょう。できれば`alias`の設定のほうで常にバックグラウンドで走らせるようにしたかったんですが、


`alias jdownloader ="""C:\Users\ironsand\AppData\Local\JDownloader v2.0\JDownloader2.exe"" &"`

とかしても無駄だったので諦めました。誰か解決策を教えてください。
自作サイトを登録する検索エンジンリスト

自作サイトを登録する検索エンジンリスト
====================

せっかく自作サイトが出来上がっても、訪問者がないと全く意味がいない。
少しでも訪問者数を増やすために検索エンジンへの登録を行い、サイトへの入り口を増やす。

自分が登録した検索サイト、ポータルサイトは以下のとおり。

検索サイト・ポータルサイトリスト
--------------------

| サイト名    | 登録ページ                                           | 
| ---         | ---                                                  | 
| Google      | https://www.google.com/webmasters/tools/home?hl=ja   | 
| Yahoo!Japan | **Google**と同じエンジンが利用されている             | 
| Bing        | http://www.bing.com/webmaster/SubmitSitePage.aspx    |
バッチファイルでスリープ(S3)させる方法

#方法
下記のように書くと良い。
powercfg は休止状態機能の有効無効を切り替えている（要管理者権限）。

```bat
powercfg -h off
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
powercfg -h on
```

#参考
http://wp2.trojanbear.net/727.html
screen に名前をつける

たまに忘れるのでメモっとく。
screen を立ち上げる時に `screen -S hoge` とすると名前が付けられる。

`screen -ls` した時に出る一覧とか `screen -r` で呼び出すときに生柄で呼出せたりとかする。
screen を何枚か立ち上げておきたくなったので、こういう時どうするんだっけ？ と思ったので。
Mac アプリケーションの Window を閉じる前のサイズと位置で開きなおしたい

Mac のアプリケーションを開き直した際に、以前開いていたサイズと位置で開けるようにするには、
`NSWindowController#windowFrameAutosaveName` と `NSWindowController#setWindowFrameAutosaveName` を利用するとよい。

以下コードは、RubyMotion を利用している前提で書く。

まず、保存するには `NSWindowController#windowFrameAutosaveName` を利用する。このメソッドを利用すると、そのときの WindowFrame が保存され、そのキーが返ってくる。

```rb
autosave_name = windowFrameAutosaveName
```

このキーを NSUserDefaults 等に保存し、起動時に `NSWindowController#setWindowFrameAutosaveName` を呼びだす。

```rb
windowFrameAutosaveName(autosave_name)
```
個人的に使っているおまじない一覧

alias を貼るやり方は好きではないので一々打っている

順番は適当で参考程度に

## tcpdump

    tcpdump -s0 -A

この後に port 80 and host www.google.com みたいな感じで続ける

ホスト名を解決したくないなら `-n` オプションを付ける


## dstat

    dstat -tlamp

これに cpu の状況を確認したいなら `--top-cpu-adv`，IO を確認したいなら `--top-io-adv` でブロッキング IO を確認したいなら `--top-bio-adv` を付ける


## rsync

    rsync -vau -e 'ssh -c arcfour256' /hoge/fuga/ catatsuy.org:/hoge/fuga/

ディレクトリの最後には必ず `/` を付ける


## netstat

    netstat -tlnp

tcp の通信だけ見れる


## 参考 URL

詳しい解説は以下や man で確認して下さい

 * [にひりずむ::しんぷる - ngrep 便利！](http://blog.livedoor.jp/xaicron/archives/54419469.html)
 * [dstatの便利なオプションまとめ - Qiita](http://qiita.com/harukasan/items/b18e484662943d834901)
 * [Linux - rsync したいときの秘伝のタレ - Qiita](http://qiita.com/catatsuy/items/66aa402cbb4c9cffe66b)

他にもあれば追記予定
[!] The `master` repo requires CocoaPods 0.32.1 と出たら 

```
$ pod update
Setting up CocoaPods master repo
Already up-to-date.
[!] The `master` repo requires CocoaPods 0.32.1 - 
Update CocoaPods, or checkout the appropriate tag in the repo.
/Users/xxx/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/claide-0.5.0/lib/claide/command.rb:281:in `rescue in run': undefined method `verbose?' for nil:NilClass (NoMethodError)
	from /Users/xxx/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/claide-0.5.0/lib/claide/command.rb:274:in `run'
	from /Users/xxx/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cocoapods-0.31.1/lib/cocoapods/command.rb:51:in `run'
	from /Users/xxx/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cocoapods-0.31.1/bin/pod:33:in `<top (required)>'
	from /Users/xxx/.rbenv/versions/2.0.0-p247/bin/pod:23:in `load'
	from /Users/xxx/.rbenv/versions/2.0.0-p247/bin/pod:23:in `<main>'
```

http://stackoverflow.com/questions/23165446/when-running-pod-install-i-get-the-master-repo-requires-cocoapods-0-32-1-try
によると

```
sudo gem install cocoapods
```

らしいのでする。そうすると通った。めでたしめでたし。
ファイルのSHA-1ハッシュ値を計算する

ファイルとデータ ストリームの読み取りと暗号サービスのクラスを使用します。

```lang:vbnet
Imports System.IO
Imports System.Security.Cryptography
```

SHA1.ComputeHashメソッドにファイルの内容を入力し、結果を整形します。

```lang:vbnet
Dim sha1HashAlgorithm As SHA1 = SHA1.Create()
Dim path As String = "filename.ext"
Using stream As Stream = File.OpenRead(path)
    Console.WriteLine(String.Concat(sha1HashAlgorithm.ComputeHash(stream).Select(Function(x) String.Format("{0:X2}", x))))
End Using
```

結果は次のようになります。

```
1FA8AA8D779F4D707FBD01968595ED37E3A66E44
```
ファイルのMD5ハッシュ値を計算する

ファイルとデータ ストリームの読み取りと暗号サービスのクラスを使用します。

```lang:vbnet
Imports System.IO
Imports System.Security.Cryptography
```

MD5.ComputeHashメソッドにファイルの内容を入力し、結果を整形します。

```lang:vbnet
Dim md5HashAlgorithm As MD5 = MD5.Create()
Dim path As String = "filename.ext"
Using stream As Stream = File.OpenRead(path)
    Console.WriteLine(String.Concat(md5HashAlgorithm.ComputeHash(stream).Select(Function(x) String.Format("{0:X2}", x))))
End Using
```

結果は次のようになります。

```
823CC703C3D49CF68F7D3C3FE7E32FBF
```
multiprocess.Processの引数による結果の違い


```python:Test.py
from multiprocessing import Process
from random import random
class Test:
    def __init__(self):
        self.val= 0.0

    def func(self):
        self.val=random()
        print self.val

if __name__ == '__main__':

    tests=[]
    prcs= []
    for i in range(2):
        tests.append(Test())
        prcs.append( Process(target=tests[i].func) )
    for p in prcs:
        p.start()
    for p in prcs:
        p.join()
    for t in tests:
        print t.val
```

このようなプログラムを実行すると，

```bash
$ python Test.py
0.577127051322
0.331891187398
0.0
0.0
```

という結果になる．つまり，関数`func()`内部で`self.val`に格納した値が，その後無効になっている．
一方で，`Process`に渡す関数に`()`を付ける，つまり，

```python
        prcs.append( Process(target=tests[i].func()) )
```
のように変更すると，

```bash
$ python Test.py
0.872880584458
0.255770370005
0.872880584458
0.255770370005
```

のように関数`func`内で代入した`self.val`値がしっかりと保存されている．

これがどういうことなのか僕には理解できていないわけです．．．
bundle exec rails new が失敗する

```
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin13.0]
rbenv 0.4.0
Rails 4.1.0
gem 2.2.2 

gem list
sprockets (2.12.1, 2.11.0)
sprockets-rails (2.1.3)
```

`bundle init`してGemfileのrailsのコメントを外して`bundle exec rails new`すると`bundle install`まで来て失敗します。

```shell-session:shell
Resolving dependencies...
Bundler could not find compatible versions for gem "sprockets":
  In snapshot (Gemfile.lock):
    sprockets (2.12.1)

  In Gemfile:
    sass-rails (~> 4.0.3) ruby depends on
      sprockets (<= 2.11.0, ~> 2.8) ruby

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
         run  bundle exec spring binstub --all
/Users/yom/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/bundler-1.6.2/lib/bundler/resolver.rb:228:in `resolve_for_conflict': Bundler could not find compatible versions for gem "sprockets": (Bundler::VersionConflict)
  In snapshot (Gemfile.lock):
    sprockets (2.12.1)

  In Gemfile:
    sass-rails (~> 4.0.3) ruby depends on
      sprockets (<= 2.11.0, ~> 2.8) ruby

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
```
Gemfile.lockに`sprockets (2.12.1)`を書き込んでるのは誰なんだろう？

深追いしてないけどとりあえずnewする際に`bundle install`をスキップしてlockを消してから手動で`bundle install`すれば通ります。

```shell-session:shell
$ bundle exec rails new . --skip-bundle
$ rm Gemfile.lock
$ bundle install
```

```:Gemfile.lock
    sass-rails (4.0.3)
      railties (>= 4.0.0, < 5.0)
      sass (~> 3.2.0)
      sprockets (~> 2.8, <= 2.11.0)
      sprockets-rails (~> 2.0)
    sprockets (2.11.0)
      hike (~> 1.2)
      multi_json (~> 1.0)
      rack (~> 1.0)
      tilt (~> 1.1, != 1.3.0)
```
[FireFox] 表示しているサイトのタイトルとURLをコピーできるようにしてみた [KeySnail]

どうもこんにちわ。イロイロたくさんのことを、サボっていたつけを回収する日々です。ツライです。

さて、最近、我が家の iMacで Google Chrome を使い続けていると、ほんの数日で異様に重くなります。はて。32GBもメモリ積んでるのに。
メモリが 8GBしか搭載されていない、残念な Macbook Airですら重くなることないのに。というか、メモリをたくさん積んでいる iMacは他にも異常事態が多く、一番困っているのはTextExpanderがまともに動かないことです。なんだコレわ。さて、TextExpander のことは忘れて、Google Chrome です。似たような人が居ないかぐぐって、対策を考えてみようと探してみたところ、「FireFox か Opera使え」とか後ろ向きな解決方法しか見あたらなかったので、FireFox を使ってみることにしてみました。社用のPCが FireFox限定なので、まぁ、それでもいいかという安直な流れです。

昨晩から一所懸命設定していますが、未だに tumblrを快適に使うことはできていないのですが、それは Google Chrome でも残念な状態だったので、ひとまず諦めておいて、もう一つの重要な機能である、「サイトのタイトルとURLのコピペ」をがんばってみました。

# KeySnail

ということで、私の知らないうちに KeyConfig はなりをひそめてしまい、[keysnail japanese · mooz/keysnail Wiki](https://github.com/mooz/keysnail/wiki/keysnail-japanese) というものがキーカスタマイズの王者として君臨してました。設定がめんどくさそうでしたけれども、初期設定で「Macの設定をほとんど損なわない Emacs設定」みたいなものがあったので、これにしておいて、必要な機能だけ追加するようにしましょうという結論に至りました。

## キーバインドの機能を追加する

`KeySnail` の設定で「キーバインド」に、メインの機能であるキーカスタマイズがずらっと並んでます。これまで Google Chrome で設定していた `Ctrl+T` と `Ctrl+L` にキーバインドがないのを確認した後、それらのキーに機能を割り当てます。

### モード

ところで、この `KeySnail` のキーバインドには `モード` という便利なものがあります。ブラウザを使っている状態にあわせて、その時々でキーバインドを割り当てたり、割り当てなかったりできるわけです。便利。

|モード|状態|
|:---:|:---:|
|Global|状態にとらわれず、いついかなる時でも|
|View|通常のブラウジングだけしているとき|
|Edit|テキストやインプットエリアで、入力可能な状態|
|Caret|F7 キーで入り込める異次元モード|

詳しくは [Keysnail how to japanese · mooz/keysnail Wiki](https://github.com/mooz/keysnail/wiki/keysnail-how-to-japanese#mode)

### `Ctrl+T` で "「サイトタイトル」+改行+ URL" をコピーする

と言うことでキーに機能をアサインしましょう。

`追加` ボタンを押してみると、次の 3つのモードが表示されますので、「オリジナルのコマンド」で行きましょう。残念ながら組込コマンドには似たようなものはありますが、完全に同じものはありませんでした。ので、それをぱくりつつ、少し手直ししました。

- 組み込みコマンド
- オリジナルのコマンド
- エクステ (プラグインの提供するコマンド等)

コマンドを入力するところで、次のものを入れて `変更の反映` して `キーバインド一覧表示へ戻る` して `Ctrl+T` へどうぞキーを割り当ててください。

```javascript:Ctrl+T
function (ev, arg) {
    command.setClipboardText("「" + content.document.title + "」\n" + content.location.href);
    display.echoStatusBar("Copy document title and URL for SNS");
}
```

実際にコピーしているのは `command.setClipboardText` のとこですが、押したかどうか謎なので、次の行の `display.echoStatusBar` で、ステータスバーへちょろっと表示するようにしてます。

### `Ctrl+L` で "[サイトタイトル]（URL）" をコピーする

Markdown用に、サイトタイトルと URLをコピーする場合です。やり方は同じで、フォーマットがちがうだけですね、簡単です。良かった。

```javascript:Ctrl+L
function (ev, arg) {
    command.setClipboardText("[" + content.document.title + "](" + content.location.href + ")");
    display.echoStatusBar("Copy document title and URL for Markdown");
}
```

おめでとうございますヽ(´ー｀)ノ
Phalconでvoltを使ってメールを送る

PHPフレームワークのPhalconにおいて、標準テンプレートエンジンのvoltを使ってメールを送る方法


## 準備

メールのテンプレートファイルは `app/views/emails/example.volt` のように格納する。

## Controllerの拡張

`app/controllers/ControllerBase.php` を次の通り編集する。

```php
<?php
use Phalcon\Mvc\Controller;

class ControllerBase extends Controller
{
    /**
     * テンプレートを使ってメールを送る
     * 
     * @param string $to 送信先メールアドレス
     * @param string $subject メールのタイトル
     * @param string $template テンプレートの名称
     * @param string $headers 追加ヘッダ(mb_send_mail互換)
     * @param string $params 追加パラメータ(mb_send_mail互換)
     * @return boolean 成否
     */
    protected function mail($to, $subject, $template, $headers = null, $params = null)
    {
        if (empty($template)) {
            return false;
        }

        $view = clone $this->view;
        $view->start();
        $view->setRenderLevel(View::LEVEL_ACTION_VIEW);
        $view->render('emails', $template);
        $view->finish();
        $body = $view->getContent();

        return mb_send_mail($to, $subject, $body, $headers, $params);
    }
}
```

## 利用方法

各コントローラからは基底クラスに `ControllerBase` を指定した上で `$this->mail()` を呼べばOK。
Macキーボード配列の改造計劃


「キーボードのQWERTY配列は、タイプライター時代に、打鍵速度を落としてアームの衝突を防ぐために考案されたものである。高速タイピングには適さない」という逸話がある。

この話の真偽はさておき、キーボード配列のかなり多くの部分が「人類にとっての利便性」よりも「歴史的理由」が優先されている事は否定できないだろう。「自分にとっての利便性」ならば尚更だ。

僕は4年ほどMacを使っているが、その間にキーボードレイアウトに関してはかなりの変更が施されている。もはや常人が触ることは困難となっているため、セキュリティ面の向上も期待できる[要出典]。

というわけで以下、僕のMacのキーボード設定について幾つかのポイントを述べる。

前提
----
* キーボードは MacBook Air の本体、JIS配列
* OS は 10.9 Mavericks だが 10.7 Lion 時代から同じ設定で使ってる

Ctrl と Command を入れ替える
----
断言しよう。Command キーは「A」の左隣に置くべきである。人類が5本指の生物として生まれた瞬間からそう決まっている。この位置はキーボードにおける特等席、グリーン車である。従ってめったに使わない Ctrl キー (US配列ならば Caps Lock) が偉そうに鎮座するべきではない。

[システム環境設定] → [キーボード] → [修飾キー] で入れ替えを行う。

![スクリーンショット 2014-05-06 11.59.24.png](https://qiita-image-store.s3.amazonaws.com/0/40166/685ecf45-7c77-3f3f-b93b-4b0126072d54.png "スクリーンショット 2014-05-06 11.59.24.png")


これで大分使いやすくなる。

ターミナルのみ Ctrl と Command を再度入れ替える
----
上では「頻繁に使う Command キーを A キーｎ左側に置くべきだ」と述べたが、ターミナル操作においては Ctrl のほうが出番が多い。そこでターミナルアプリのみ Ctrl キーを A キーの左側に置く。

残念ながらMac標準の「ターミナル.app」はキー配列の切替に対応していないため、 **iTerm2** というターミナルアプリを使う。ダウンロードはこちらから。
http://www.iterm2.com/#/section/home

[Preference] → [Keys] で以下のように Command と Ctrl を入れ替える。OSで入れ替えたものを iTerm2 でさらに入れ替えるため、結果として元に戻る。
![スクリーンショット 2014-05-06 12.14.14.png](https://qiita-image-store.s3.amazonaws.com/0/40166/65706bc7-af17-6160-9d29-9d295d58e77e.png "スクリーンショット 2014-05-06 12.14.14.png")

なお余談であるが僕はVim派である。「Ctrlキーを多用するという事はこいつはEmacs派か」と思った諸君はまだまだVimの熟練が足りないと言わざるをえない。


JIS配列をソフトウェア的にUS配列に切り替える
----

JIS配列とUS配列は趣味の問題が大きいが、それぞれの長所として

* JIS配列: 「かな」「英数」キーが存在する
* US配列: 配列が合理的でプログラミングに適する (シングルクォートとダブルクォートが同じ位置にある点など）

という点が挙げられる。そこで僕は **JIS配列を、ソフトウェア的にUS配列にする** というアクロバティックな方法で両方の長所を取り入れている。この方法は印字と実際のキーが一致しないという問題があるが、熟練したタイピストなら何の問題もあるまい。

キーの配列切替として KeyRemap4MacBook というソフトをインストールする。
https://pqrs.org/macosx/keyremap4macbook/index.html.ja

設定で Use Japanese Keyboard as US Keyboard にチェックを入れる。

![スクリーンショット 2014-05-06 11.36.36.png](https://qiita-image-store.s3.amazonaws.com/0/40166/3174a74c-ee77-442a-d5f2-704e367add6d.png "スクリーンショット 2014-05-06 11.36.36.png")

個別のキーの入れ替え
----

さらに細かいカスタマイズを行いたい場合は、KeyRemap4MacBook の private.xml とかいうファイルを編集する必要がある。

たとえば上述の "Use Japanese Keyboard as US Keyboard" をチェックした状態では、バックスラッシュ \ がカナ入力の「む」の位置になるが、バックスラッシュはやはりJISの円マークの位置（F12の下）にあって欲しい。デフォルトではこの位置にはバッククォート ` が割り当てられるため、この2つを入れ替える。

こういう場合、先の KeyRemap4MacBook の設定画面で Misc & Uninstall を選択し "Open private.xml" のボタンを押し、内容を以下のようにする。

    <?xml version="1.0"?>
    <root>
        <item>
            <name>Swap BackQuote and BackSlash</name>
            <identifier>private.swap_backquote_to_backslash</identifier>
            <autogen>--KeyToKey-- KeyCode::BACKSLASH, KeyCode::BACKQUOTE</autogen>        <autogen>--KeyToKey-- KeyCode::JIS_YEN, KeyCode::BACKSLASH</autogen>
        </item>
    </root>

これを適用すると、先の Change Key の画面に新たに *Swap BackQuote and BackSlash* という項目が出現する。これをチェックしてやればよい。
![スクリーンショット 2014-05-06 12.38.00.png](https://qiita-image-store.s3.amazonaws.com/0/40166/736bbcbb-5fff-11bc-39b7-9cabd75ebc0c.png "スクリーンショット 2014-05-06 12.38.00.png")
Facebook APIで最大サイズのプロフィール画像を取得する

表題の通り,Facebook APIでプロフィール画像で最大サイズを取得する方法です。

通常
```
https://graph.facebook.com/v2.0/me/friends?fields=picture
```

と書くと、50px * 50 px の画像が取得されます。  
pictureにwidth(横幅).height(高さ)を書き換えることで、pixelを変更することができます。  

```
https://graph.facebook.com/v2.0/me/friends?fields=picture.width(200).height(200)
```

プロフィール画像の場合、このwidth,height以下の場合は元のサイズ(アップロードした時の画像サイズ)になります。  
なので横幅を9999,高さを9999としてやると、各画像の最大サイズが取得できます。
Objective-C property, synthesize Accessor Method の復習


理解に間違いがないか再度復習をしてみた

## @property と @synthesize Accessor Method について

```objective-c:example.h
@interface Example : NSObject

/*
Interface に @property を追加することで、implementation section に instance variable を宣言する必要がなくなる
また、コンパイラーが自動で、implementation section に *x*, *y*, *setX*, *setY* をジェネレートしてくれる
*/

@property int x, y;

- (void)print;

@end
``` 


```objective-c:example.m
#import "example.h"

@implementation Example

/*
implementation に　以下のように @sythesize を追加すると instance variable x と y と統合してくれる
@synthesize を指定しないで @property のみを interface に追加すると
_x と _y の instance value を生成をする
*/

@sythesize x, y;

- (void)print {
	// @synthesize がない場合、以下のようになる
	// NSLog(@"_x==%i, _y==%i", _x, _y);
	// self.x = 1; と x = 1; 違いは、self.x と時、Accessor method が動くので、thread safe になる
	NSLog(@"x==%i, y==%i", x, y);
}

@end

```

## Dot Operator を使って Property にアクセスする

Dot Operator は property にアクセスするときのみ利用する。methond の実行などには当然使わない
@synthesize を使って、accessor method と統合する時、"new, alloc, copy, init" で始まる名前を property に指定してはいけない
@synthesize は省くと、(_) アンダースコアーで始まる insatance variable をコンパイラーが自動で名付けする

```objective-c
...
Example *instance = [[Examaple alloc] init];

// 以下、二行は同等
instance.property = 1; 
[instance setProperty:1];

```

>　余談 (id) variable には dot operator は使えない。
xvim xvimrcの設定例

vimmerやxvimmerの方には当たり前の事なのかもしれませんが...
ヘッダー/ソース間をgpなどのキーを割り当てると、移動がかなり楽になります。

~/.xvimrcを作成すると、xvimをカスタマイズできます。

# 例
```vim
"~/.xvimrc

" ヘッダー・ソースの切り替え
nmap gp :pc<cr>
nmap gn :nc<cr>
" Issueへのジャンプ
nmap gi :ni<cr>
nmap gI :pi<cr>
" 定義先へジャンプ
nmap gr :xccmd jumpToDefinition<cr>
```

ただしgp以外でジャンプすると、しょっちゅうキーフォーカスがエディタ以外にいって困る...

#参考
[xvim のドキュメント](https://github.com/JugglerShu/XVim/blob/master/Documents/Users/FeatureList.md)
[XVimの色々メモ](http://qiita.com/edo_m18/items/7531e7980de1e1ea2b64)
AWS + Nginx + WordPressのAMIMOTO開発時キャッシュが消えない時の対処法

[AMIMOTO](http://ja.megumi-cloud.com/)を利用していて、キャッシュがなかなか消えなくて苦労していたので、まとめてみた。

# 基本
## キャッシュ削除

```
$ sudo rm -rf /var/cache/nginx
```
キャッシュフォルダごと削除

## nginxフォルダを作成してあげる
```
$ mkdir  /var/cache/nginx
```
## nginx構文が正しいかを確認
```
nginx -t
```
下記のように出ればOK!

```vim
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

## nginxの再起動
```
$ sudo /etc/init.d/nginx restart
```
本当は上記方法はあまり利用しない方が良いらしい・・・

```
$ sudo /etc/init.d/nginx stop
$ sudo /etc/init.d/nginx start
```

# それでもダメな場合
## nginxの設定を見直す
```
$ vi /etc/nginx/nginx.conf
```
inactiveが1000hとかになってると、
キャッシュが1000時間、つまり約16日間もの間キャッシュが残り続ける形となる。
1mとか5mとかの分単位にしてあげると開発環境としては楽。

```vim:nginx.conf
# proxy cache
proxy_cache_path  /var/cache/nginx/proxy_cache levels=1:2
                  keys_zone=czone:32m max_size=256m inactive=1m;
```

# エラーが出る場合
`nginx -t`で下記エラーが出る場合がある。

```vim
Starting nginx: nginx: [warn] 2048 worker_connections exceed open file resource limit: 1024
```

利用可能なメモリー量やCPU時間などが足りない場合上記エラーが出る。
その為、足りなくなっている容量を確認し割り当てる必要がある。

```
$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 4469
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4469
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
```

上記でエラーとなっている項目を確認し容量を増やしてやる。


```
$ ulimit -u 2048
```
brew で class-dump をインストールする

##はじめに
最近になって木下誠さんのDynamic Objective-Cを読み始めたのですが、冒頭で紹介されている class-dump について調べていたとき、[公式ページ](http://stevenygard.com/projects/class-dump/)では dmg ファイルなどが配布されていましたが、brew でも普通にインストールできたのでメモ

##インストール
brewでインストールコマンドを叩くだけの簡単なお仕事です
（下記のログはうっかりログが流れてしまったので再インストールしたときのログです）

```bash
$ brew install class-dump
==> Downloading https://github.com/nygard/class-dump/archive/3.5.tar.gz
Already downloaded: /Library/Caches/Homebrew/class-dump-3.5.tar.gz
==> xcodebuild -configuration Release SYMROOT=build PREFIX=/usr/local/Cellar/class-dump/3.5 ONLY_ACTI
?  /usr/local/Cellar/class-dump/3.5: 4 files, 668K, built in 3 seconds
```

さっそく [github ページ](https://github.com/nygard/class-dump)の README にあるように AppKit.framework について覗いてみる

```bash
$ class-dump /System/Library/Frameworks/AppKit.framework

//
//     Generated by class-dump 3.5 (64 bit).
//
//     class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2013 by Steve Nygard.
//

#pragma mark Function Pointers and Blocks

typedef void (*CDUnknownFunctionPointerType)(void); // return type and parameters are unknown

typedef void (^CDUnknownBlockType)(void); // return type and parameters are unknown

（中略）

@interface CALayer (_NSTiledLayer)
+ (id)keyPathsForValuesAffectingNS_tiledLayerVisibleRect;
@end
```

##おわりに
やっぱり brew は便利ですね
もう手放せないｗ
Imagine. Implement. Iterate. Improve.


[Hack Design](https://hackdesign.org/) の最後のレッスンで紹介されている[記事](http://tuhin.co/great-designers.html)にある言葉です。

ゴールデンウィークが暇だったので、この文字列を表示するためのいろいろ無駄があるコードを書いてみました。

https://gist.github.com/emsk/e46e5862d6f3853c6aa8

また、ゴールデンウィークが暇だったので、プログラマ用 Instagram である Instacode で無駄に画像も作ってみました。

<img src="http://instacod.es/file/89732" />
http://instacod.es/89732


ゴールデンウィークはもう終わってしまいますが、コードを書くことで暇をつぶせることがわかりました。

暇な方はぜひお試しください。
EA4088QSBでTCP Echo

EA4088QSBでTCP Echoを試してみました。
使ったプロジェクトはLPC1768と同じもの。
http://qiita.com/Moo_tarojiro/items/606a5fab05867f3f9a51

4088QSBとはULINK2で接続してSWDにてフラッシュ焼きとデバッグ。
なんら問題無く動作しました･･･順調だとうれしいっす(^^;

http://nora66.com/mbed/lan.html#2014/05/06
GitHubの初期設定（SSH接続からリポジトリへのpushまで）

ローカル環境や用意したサーバーにて秘密鍵を作成し、公開鍵ファイルをGitHubに登録し接続する方法のまとめ。

# 【ステップ0】GitHub に新プロジェクトを登録
## 準備段階として新規のプロジェクトを作成する
### ①Create a new repo
![997x561xa47d5f11d1a54bebcba5bbf5.jpg](https://qiita-image-store.s3.amazonaws.com/0/26931/2951e20a-9c44-b4aa-f306-4e7b10715697.jpeg)

右上の書籍に「＋」ボタンがくっついたようなマークをクリック

### ②Repository name
![1002x570x5ab81a6a9348945d25db53b.jpg](https://qiita-image-store.s3.amazonaws.com/0/26931/5b59c680-6163-e6ee-7bfc-b062d4a4fc30.jpeg)
「Repository name」には任意の名称（英字のみ）を記載。
今後、プロジェクト名としてこちらを利用する。
「Public」か「Private」の選択が出来るが、「Private」は有料となる。
最後に「Create repository」を押して終了

# 【ステップ１】サーバーとGitHubをssh接続
## SSH公開鍵を作成
`$ ssh-keygen`で公開鍵を作成

![スクリーンショット 2014-05-06 9.12.17.png](https://qiita-image-store.s3.amazonaws.com/0/26931/069be7f0-14a3-c28b-cab1-d5264862b88a.png)
### Enter passphrase
`Enter passphrase`と表示され、パスフレーズの入力を2回求められるので同じパスフレーズを入力する。

## 公開鍵を確認
`$ cat ~/.ssh/id_rsa.pub`で公開鍵を確認

![スクリーンショット-2014-05-06-9.11.58.jpg](https://qiita-image-store.s3.amazonaws.com/0/26931/a2e92a93-588e-2e21-1df7-80196004ff0a.jpeg)
`ssh-rsa`から始まるデタラメな文字列が公開鍵そのものである。
こちらを丸ごとコピーする。

## GitHubサイトに公開鍵を登録
### ①Account Setting
右上の工具のマークをクリック
![998x467xc4f4eb34148402861af2c373.jpg](https://qiita-image-store.s3.amazonaws.com/0/26931/8dd207b6-9658-1df4-4488-a91acf2ce159.jpeg)

### ②SSH Keys
左メニューの「SSH Keys」に現在接続されているサーバーのSSHが登録されている。
![1028x600x18a154ea6d66e8ae1deda28.jpg](https://qiita-image-store.s3.amazonaws.com/0/26931/8c33e540-0375-3963-ed5b-f840c1f6e266.jpeg)

### ③Add SSH Key
[Add SSH Key]を押すと入力欄が現れる。
![1043x582x2cf78951bbc203cfe5a9a3b.jpg](https://qiita-image-store.s3.amazonaws.com/0/26931/5b6f7e62-2504-5c81-6c64-4bdb3727d971.jpeg)

### ④Add Key
先ほどコピーしておいた公開鍵を貼り付ける。
タイトルは任意の分かりやすい名称で問題なし。
![1048x458xca6453a3eb9e665e6e681ae.jpg](https://qiita-image-store.s3.amazonaws.com/0/26931/0e779e22-436b-409a-09dd-36c86080b630.jpeg)

# 【ステップ2】サーバー等のソースコードをGitHubに公開
## ルートディレクトリまで移動

`$ cd`を使ってルートディレクトリまで移動
## git configでユーザー名を登録
```text
$ git config --global user.name [GitHubに登録したユーザー名]
$ git config --global user.email [GitHubに登録したメールアドレス]
````
ちなみに現在の登録を確認する場合は
`$ git config --global --list`

## サーバーのリポジトリを作成
公開するルートディレクトリで
`$ git init`

## GitHubのremote先を設定
`$ git remote add origin git@github.com:foo/bar.git`
foo を github のユーザ名、bar をプロジェクト名で、それぞれ置き換える。

## 管理対象外ファイルを指定
管理対象外ファイルがあれば`$ vi .gitignore`で管理対象ファイルを指定

## ファイルをaddする
`$ git add -A`

## 共有するファイル&メッセージを決定
`$ git commit -m "メッセージ #イシュー番号"`
"メッセージ #イシュー番号"の箇所には開発記録としてのコメントを残しておく。
イシュー番号はそれぞれイシューで決めた番号を。
addされたデータすべてを最終的に決定し、commitするという流れである。

## GitHubに共有
「origin」というサーバー名で「master」ブランチプッシュする場合
`$ git push origin master`

### それぞれの意味は下記の通り
| コマンド | 意味 |
|--------|-----|
| push|アップロード|
| origin|リモートのサーバ名|
| master|デフォルトのブランチ名|
自動化テストメリットの一つ

より安心して、プログラムをリファクタリングできること。
イテレーション開発手法は普通になっているシステム開発業界で、ソフトウェアのロジックはどんどん複雑化し、
最初の全体デザインもう相応しくなくなって、リファクタリングしようとしても、膨大なリグレッションテストをしないといけない。

もし自動化テストが事前にあれば、リファクタリングはやりやすくなる。

なお、ミドルウェアおよびライブラリなどのバージョンアップも同じ。
Windows&nyaosでRubyの環境を切り替える

WindowsでRubyを使ってるとRubyの環境を切り替えたくなる時がよくあります。例えば

・`chef`は専用の`ruby`ごと入ってるパッケージじゃないとまともに使えない
・Ruby2.0を使いたいけど、RailsinstallerはまだBeta版なので問題があったら`1.9.3`で動作確認したい

などがあるため、はっきり言ってMacやLinuxで使う時よりも切り替えを頻繁に行う必要があります。ですがWindowsでは`rbenv`や`rvm`なんて便利なものは使えません。もしかしたら使えるのかもしれませんが、恐らくとんでもなくめんどくさいことになるでしょう。

## Ruby切り替え方

`nyaos`は`lua`を用いて簡単にスクリプトを書けるのでこういう時にとても便利です。

もっとも「簡単」といっても自分ではどう書けば良いかわからなかったので結局QA@ITで教えていただきました。みんなは一体どうやって覚えるんでしょうかこういうの？

まずスクリプトを書きます。

```lua:~\Dropbox\bin\nyaos\_nya.d\rk.lua
-- rek.lua
-- 使うRubyを変える Ruby Kaeru

function nyaos.command.rk(arg)
  if arg == "chef" then
    print [[C:\opscode\chef\bin;C:\opscode\chef\embedded\bin]]
    nyaos.putenv('PATH', 'C:\\opscode\\chef\\bin;C:\\opscode\\chef\\embedded\\bin;' .. os.getenv('PATH'))
  elseif arg == "rails20" then
    print [[C:\RailsInstaller\Ruby2.0.0\bin]]
    nyaos.putenv('PATH', 'C:\\RailsInstaller\\Ruby2.0.0\\bin;' .. os.getenv('PATH'))
  elseif arg == "rails19" then
    print [[C:\RailsInstaller\Ruby1.9.3\bin]]
    nyaos.putenv('PATH', 'C:\\RailsInstaller\\Ruby1.9.3\\bin;' .. os.getenv('PATH'))
  elseif arg == "ruby20" then
    print [[C:\Ruby200\bin]]
    nyaos.putenv('PATH', 'C:\\Ruby200\\bin;' .. os.getenv('PATH'))
  end
end
```

パスは適宜変えてください。Dropboxの中にnyaosを入れてる以外は標準的なインストール方法をとってるはずです。

後は`nyaos`を再起動すると自動的に`rk`コマンドが使えるようになってるので`rk chef`などの用にに使ってるRubyを変更することが出来ます。

## 注意点
`ConEmu`などで新しいタブを開いた時にそのまま変更を保存しといて欲しかったんですが、残念ながら新しく開くと標準の起動ファイルに書かれてる物が読み直されるので設定が戻ってしまうようです。

何か解決策があったら誰か教えてください。
SpriteKit入門 -13-


Texture Atlas について見ていきます。

Xcodeでは、テクスチャが複数に分かれている場合でも、自動的に1枚のテクスチャとして扱えるようにしてくれます。
Texture Atlas を使うことでパフォーマンスも向上するようです。

まず、複数のテクスチャを同じフォルダに入れ、フォルダ名を xxx.atlas のように変更します。

![spritekit_13_01.png](https://qiita-image-store.s3.amazonaws.com/0/30731/81f1da13-a40f-518e-5e8b-cbaa311c5636.png "spritekit_13_01.png")

フォルダをプロジェクトに追加します。

![spritekit_13_02.png](https://qiita-image-store.s3.amazonaws.com/0/30731/f86bfa39-04c3-e6d1-3f07-7c5346e991fc.png "spritekit_13_02.png")

PROJECT の Build Settings に SpriteKit Deployment Options が現れるので、
Enable Texture Atlas Generation を Yes にします。

![spritekit_13_03.png](https://qiita-image-store.s3.amazonaws.com/0/30731/32907259-8770-27c8-f005-9e10bb971c08.png "spritekit_13_03.png")

TARGETS の Build Phases で Copy Bundle Resources を見ると、koma.atlas が追加されているのが分かります。

![spritekit_13_04.png](https://qiita-image-store.s3.amazonaws.com/0/30731/e5be8c74-4561-cd31-3ffd-5647854511df.png "spritekit_13_04.png")

SKTextureAtlas を使ってテクスチャを読み込んでいきます。

```objectivec:HelloScene.m
- (void)createSceneContents
{
	SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"koma"];
	for (int i=0; i < 8; i++) {
		@autoreleasepool {
			SKTexture *texture = [atlas textureNamed:[NSString stringWithFormat:@"sgl%02d.png", i+1]];
			SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithTexture:texture];
			sprite.position = CGPointMake(300, 70*(i+1));
			[self addChild:sprite];
		}
	}
}
```

実行すると、テクスチャが使用できていることが分かります。

![spritekit_13_05.png](https://qiita-image-store.s3.amazonaws.com/0/30731/f6c202f8-ec54-a1da-2a0f-3f04814d0c34.png "spritekit_13_05.png")


今回はここまで。
Ubuntu環境へCaboChaをインストールし、Pythonで呼び出す。

#概要
日本語係り受け解析器CaboChaをLinuxMint13(Ubuntu12.04)へインストールし、
Pythonで呼び出せるようにする。

#事前作業
##MeCab・MeCab辞書のインストール

###makeでインストール

下記サイトを参考にさせて貰った。

[ -> MeCab・MeCab辞書のダウンロードページ](http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html#download)
[ -> MeCab・MeCab辞書のインストール手順ページ](http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html#install)

###apt-getでインストール
```
sudo apt-get install mecab libmecab-dev mecab-utils mecab-ipadic-utf8
```

#作業
##CaboChaのインストール

###makeでインストール

下記サイトを参考にさせて貰った。

[ -> 忘れがちな記憶へ Ubuntuへyamcha & Cabochaをインストール](http://kumagonjp2.blog.fc2.com/blog-entry-82.html)

###apt-getでインストール

下記サイトを参考にさせて貰った。

[ -> UbuntuにUTF-8版のcabochaを簡単にインストールする方法 - Syo-Takasakiの日記](http://d.hatena.ne.jp/Syo-Takasaki/20090528/1243484754)

※注意
・「/etc/apt/source.list」の箇所は「/etc/apt/sources.list」である可能性がある。
・上記サイトの作業完了後、下記コマンドを発行。

```
sudo apt-get install libcabocha-dev
```

##CaboChaのPythonバインディングのインストール
###インストール先フォルダへの移動

CaboChaのインストール先フォルダを探す。
ドライブ内を"CaboCha.py"で検索し、そのファイルがあるフォルダへ移動する。

```
find / -name CaboCha.py
```

※注意
・makeでインストールした場合はインストール元フォルダも検索でヒットする。


###setup.pyの実行
下記コマンドを発行し、setup.pyを実行する。

```
sudo python setup.py install
```

##PythonからCaboChaを呼び出す
```py:Cabochaを呼び出す.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import CaboCha
c = CaboCha.Parser()
sent = '国境の長いトンネルを抜けると雪国であった。夜の底が白くなった。信号所に汽車が止まった。'
print c.parseToString(sent)
```

```
        国境の---D                
            長い-D                
        トンネルを-D              
            抜けると-D            
        雪国であった。-----D      
                    夜の-D |      
                      底が-D      
                白くなった。-----D
                      信号所に---D
                          汽車が-D
                        止まった。
EOS
```

#参考にさせて頂いたWebサイト
[ -> MeCab: Yet Another Part-of-Speech and Morphological Analyzer](http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html)
[ -> cabocha - Yet Another Japanese Dependency Structure Analyzer - Google Project Hosting](https://code.google.com/p/cabocha/)
[ -> 忘れがちな記憶へ Ubuntuへyamcha & Cabochaをインストール](http://kumagonjp2.blog.fc2.com/blog-entry-82.html)
[ -> UbuntuにUTF-8版のcabochaを簡単にインストールする方法 - Syo-Takasakiの日記](http://d.hatena.ne.jp/Syo-Takasaki/20090528/1243484754)
BSD版sedのナゾな挙動

# 手持ちのsedで次のコードを実行されたし

これは、以前FreeBSDのforumにも投稿したネタなのだけど、しっくりした解答が得られなかったのでここでもネタにしてみたい。

というわけで次のコードを実行してみてもらいた。特に、GNU版とBSD版のsedを両方試せる方は両方試してもらいたい。

```sh:
# *BSDやMacOS XでGNU版sedを使う時は、gsedと書く
$ seq 1 10 | sed '3,4N; s/\n/-/g'
```

最初のseqに特別な意図はない。ただ単に、1～10を10行表示させているだけだ。

問題はsedである。これは、3行目と4行目では出力する前に次の行も読みつつ（この時読み込まれた各行の間には改行コードが入っている）、読み込んだ文字列中に存在する改行コードを`-`に置き変えろ、という意味なのであるが……

```text:GNU版sedの結果
1
2
3-4
5
6
7
8
9
10
```

GNU版はまぁ納得がいく。でも

```text:BSD版sedの結果
1
2
3-4
5-6
7-8
9
10
```

これは理由がわからない。なぜ3行目から8行目もの間で隣り合う行が結合されてしまうのか?

フォーラムで聞いたところによると、「BSD版の挙動はバグではなく解釈の仕方が違うのでは」ということなのだけど……。

理由を説明できる方がいたら解説が欲しい!
grepに対するfgrepのような素直なsed

# HTML中に書いたマクロ文字列を任意の文字列で置き換えたい

というのがそもそもの要望だった。

例えば

```html:マクロ文字入りのhtml
<input type="text" name="string" value="###STR###" />
```

の`###STR###`の部分に、外部から受け取って今`$str`というシェル変数に入っている任意の文字列を書きたいと思った時、

`sed "s/###STR###/$str/g"`

と書けないのだ。なぜか？

「わかった。`"`をエスケープしないとHTMLが不正になるからでしょ」

いやそれもそうなんだけど、 **むしろそのエスケープが原因でsedが誤動作** してしまう。ダブルクォーテーションをHTML的にエスケープすると`&quot;`だが、ここに含まれている`&`が問題になるのだ。

`$str`の部分に、`\\`や`&`や、そして`/`が入っていると、sedは誤動作する（各々特別な意味を持つ文字なので）。ついでに言うと、`s/～/～/`の前半の文字列にも`/`や正規表現のメタキャラとして反応してしまうものが含まれているとやっぱりダメ。

これらはsedに与える前にエスケープしなければならないのだ。

# そこで、エスケープするためのコードをまとめた

文字列A(`$a`)を文字列B(`$b`)に単純置換したいと思って、`sed "s/$a/$b/g"`と書きたい時、`$a`、`$b`はそれぞれ次のような前処理をしておけば大丈夫。

```sh:sedで単純置換させるための前処理
# sedで単純置換させるための前処理
a=$(printf '%s' "$a"            |
    sed 's/\([].\*/[]\)/\\\\\1/g' | # ・正規表現メタキャラ"[","]",".","*","\\"と"/"をエスケープ
    sed 's/^\^/\\\\^/'            | # ・先頭を表すメタキャラ"^"は先頭にあるものだけエスケープ
    sed 's/\$$/\\\\$/'            ) # ・末尾を表すメタキャラ"$"は末尾にあるものだけエスケープ
b=$(printf '%s' "$b"            |
    sed 's/\([\\&/]\)/\\\\\1/g' | # ・置換文字として特殊な意味を持つ"\\","&"と"/"をエスケープ
    sed 's/$/\\/'               | # ・置換文字として改行コードが含まれている場合に
    sed '$s/\\$//'              ) #   "\"をつけてエスケープする

# これをやっておけば安心してsedに渡せる
cat template.html | sed "s/$a/$b/g"
```

「あれ、"(",")","{","}","+"とか、他にもメタキャラあるんじゃないの？」と思うかもしれないけど、sedはこれで大丈夫。詳しくは[正規表現メモ@kbkさんsedに関する記述](http://www.kt.rim.or.jp/~kbk/regex/regex.html#SED)を見てもらいたい。

## 例によってGitHubに上げたよ

「grepに対するfgrep」の向こうを張って、[fsedという名でリリース](https://gist.github.com/richmikan/6746236)してみた。

これを使えば、

```sh:
$ echo "私の好きな本は[NAME]です。" | fsed '[NAME]' 'K&R'
私の好きな本はK&Rです。
$ 
```

なんてことができる。sedだったら`sed 's/\[NAME\]/K\\&R/'`と書かなきゃいけないのでスッキリするよね。

まぁ、grepに対するfgrepが軽いのと違って、 **このfsedはsedより軽いということは無い** んだけど……。