OmniAICreator/Qiita-1.07M huggingface dataset:
ベータ分布をPythonで書く


DBDAの波に乗り遅れてしまった感あるので最近一人でちまちまと読んでいる。DBDAはRを例にして進めているけどPythonで書いた。式の気持ちの説明などは教科書やWeb上に情報があると思うので割愛。

## β分布
![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/1538/15ed3f93-d9e7-290e-d77b-0bde4a9a894a.png "figure_1.png")

## コード
```python:beta.py
#!/usr/bin/python
#-*- coding:utf8 -*-
"""
DBDA FIGURE 5.1
"""
import math
import numpy as np
from pylab import *

def beta(theta, a, b):
    """
    beta distribution

    theta^{alpha-1} * (1-theta)^{beta-1}
    ------------------------------------
               B(alpha, beta)

    B(alpha, beta)
      gamma(a) * gamma(b)
    = -------------------
        gamma(a + b)
    """
    B = math.gamma(a) * math.gamma(b) / math.gamma(a + b)
    return (theta ** (a - 1)) * ((1 - theta) ** (b - 1)) / B

if __name__ == '__main__':
    thetas = np.arange(0, 1, 0.01)
    params = [(0.5, 0.5), (1., 0.5), (2., 0.5), (3., 0.5), (4., 0.5),
              (0.5, 1.), (1., 1.), (2., 1.), (3., 1.), (4., 1.),
              (0.5, 2.), (1., 2.), (2., 2.), (3., 2.), (4., 2.),
              (0.5, 3.), (1., 3.), (2., 3.), (3., 3.), (4., 3.),
              (0.5, 4.), (1., 4.), (3., 4.), (3., 4.), (4., 4.)
             ]

    axisnum = 0
    for (a, b) in params:
        axisnum += 1
        subplot(5, 5, axisnum)
        betas = [beta(theta, a, b) for theta in thetas]
        plot(thetas, betas)
        xlim(0, 1.)
        ylim(0, 3.)
        text(0.5, 2.7, 'a=%.1f b=%.1f' % (a, b),
                horizontalalignment='center', verticalalignment='center')
        xlabel('theta')
        ylabel('p(theta)')
    show()
```
chatwork から特定の人への発言と返信を抜き出す。


現在開いているチャットの内、画面に描画されている範囲のみ。
developer toolsなどで以下を実行。

```js:
(function(user_name){
var class_name=""; $.each(AC.account_dat,function(i,x){if ( x.nm == user_name) class_name= "._avatarAid"+i; });
var timeline =  $('#_timeLine').find('.chatTimeLineMessageArea');
var array = timeline.map( function(i,x){ var c= $(x).find('._speakerName span')[0]; return c ? c.innerText : "" } );
$.each( array, function(i,x){if(x == ""){array[i] = array[i-1];}} )
timeline.map(function(i,el){ var $el = $(el).find('.chatTimeLineTo,.chatTimeLineReply').parent().find(class_name);if( $el.length < 1) return;
console.log(  array[i] +"\n" +new Date($(el).closest('.chatTimeLineMessageInner').find('._timeStamp').data('tm')*1000 ).toLocaleString()+'\n'+ $(el).find('pre').text()  );})})("抜き出す人の氏名");
```

結果

```
ヤマダ　タロウ
2013/8/26 10:00:00
RE ○○さん
　こんにちは

ヤマダ　タロウ
2013/8/28 19:00:00
TO ○○さん
こんばんは

ヤマダ　ジロウ
2013/8/29 16:00:00
TO ○○さん
　こんにちは　こんにちは
```

http://qiita.com/ooooooo_q/items/e759312c3df99916e82c から改造
SDカードのファイルI/Oパフォーマンス計測


端末とか SDカード の種類とかで大きく違うんでしょうけど、自分の端末で調べたのでメモ。

* 機種: au HTC J(ISW13HT)
* SDカード: 最初から付いてたやつ

## 計測項目

* Create - テキストファイルの生成
* List - ディレクトリ内の全ファイルの列挙
* Rename - ファイル名の変更
* Delete - ファイルを1つずつ削除
* DelDir - 親ディレクトリを削除

## 計測方法

* ディレクトリ内にファイルを 100個、1000個、10000個作成した時のそれぞれで計測。
* それぞれの計測は5回行った平均値。
* 計測に使ったコードは[こちら](https://gist.github.com/amay077/6374470)

## 計測結果

ファイル数|Create|List|Rename|Delete|DelDir
--:|--:|--:|--:|--:|--:
100|1,606ms|939ms|1,664ms|2,792ms|1ms未満
1,000|15,527ms|950ms|17,359ms|27,057ms|6ms
10,000|227,236ms|1,003ms|254,338ms|191,631ms|69ms

## まとめ

* Create と Rename はファイル100個で約1.5秒、Delete は約×2 の時間がかかる。
* List はファイル数にあまり影響されない。
* DelDir は超早い。
* CPU 使用率は 40〜60% だった。
Heroku で assets:precompile 時に環境変数を参照できるようにする方法

Heroku で Rails アプリを push すると、assets:precompile が自動的に実行されるが、この時に読み込まれるソース中で環境変数が参照できない。

これだと「production 環境の場合には〜」みたいな処理ができないが、これを実現するための機能が Heroku Labs の user-env-compile として公開されている。

https://devcenter.heroku.com/articles/labs-user-env-compile

使い方はこう

```sh
$ heroku labs:enable user-env-compile -a myapp
````
PHPで復号化可能な暗号化を簡単に行えるクラス

**【2021/10/15 追記】**
**この記事は更新が停止されています。実装の公開は GitHub のみにしました。**

- **[mpyw/EasyCrypt: A class that provides simple interface for decryptable encryption.](https://github.com/mpyw/EasyCrypt)**
インスタンスのポインタの受け渡し


Use Core Dataにチェック入れて新規Projectを作ると、

```objc:AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
    controller.managedObjectContext = self.managedObjectContext;
    return YES;
}
```

このような記述があって、managedObjectContextへのポインタをrootViewControllerへ受渡してます。
AppDelegateで作ったmanagedObjectContextをいろんなインスタンスで利用するためには、下へ〜下へ〜って感じで受け渡していくのが正解なんでしょうか。。

CoreDataじゃなくてもこんな感じでやっていくんでしょうかね、、

```objc:test
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    tabbarViewController *controller = (tabbarViewController *)self.window.rootViewController;
    controller.managedObjectContext = self.managedObjectContext;

    up *up1 =[[up alloc] init];
    controller.upp=up1;
    return YES;
}
```

なんかもっと良い方法があるような気がするんですが、、
ううむ
sshのログインを簡単に

知ってる人には常識なんだろうけど、ずっと知らずにめんどくさい方法でVPSにSSHでログインしてたので

`$ ssh -p 10022 username@servername`でログインしてる人は

```~/.ssh/config
Host sakura
  HostName servername
  User username
  Port 10022
```

って書くと `$ ssh sakura` でログインできるようになる。便利！
servernameの代わりにIPアドレス直接でも試してないけど多分できる。

複数書く時はそのまま何個も`Host`からずらずら書いていくだけ。
foreigner 使い方


外部キー制約を付けるためにforeignerを使う。

##インストール
Gemfileに下記の記述を追加した後にbundle installを行う。

```Gemfile
gem 'foreigner'
```

```
bundle install
```

##外部キー制約を持ったテーブルを作成

参照元と参照先になるテーブルを作成する。

```
rails g scaffold cat name:string
rails g scaffold nikukyu name:string cat:references
```

外部キー制約の設定をマイグレートファイルに記述する

```20130829073752_create_nikukyu.rb
t.foreign_key :cat, dependent: :delete
```
※catの外部制約を設定する＋nullを許可しない

マイグレート実施。

```
rake db:migrate
```

これでcat_idに外部キー制約が設定される。

##おまけ

スカフォードの入力項目に外部キーを抽出したプルダウンを設定する。

外部参照項目をattr_accessibleに追加。

```nikukyu.rb
class Nikukyu < ActiveRecord::Base
  belongs_to :cat
  attr_accessible :name, :cat_id
end
```

登録用のビューにプルダウンを記述する。

```_form.html.erb
<%= f.collection_select(:teacher_id, Teacher.find(:all), :id, :name) %> 
```

これで外部キーを設定した項目をプルダウンで選択できるようになる。
Node.jsによる必要最小限のhttpサーバとhttpsサーバとhttp proxyサーバ

![Node.js](http://nodejs.org/images/logos/nodejs.png "Node.js")

勉強のためにNode.jsで必要最小限の **httpサーバ** と **httpsサーバ** と **http proxyサーバ** を書いてみた。

# httpサーバ

これは最初に目にすることになると思う。
初めに開く [Node.jsとは? - nodejs.org/ja](https://nodejs.org/ja/about/) [(以前はnodejs.jp)](https://nodejs.jp/) に書いてあるので。

```js:http-server-simple.js
const http = require('http');
http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(3000, () => console.log('Server http://localhost:3000'));
```

テキストの `Hello World` しか返せないので役に立つわけではない。
あくまでHello Worldである。
5行で書けるんですよね。Webサーバが。

# httpsサーバ

上記の **httpサーバ** を、そのまま **httpsサーバ** にしてみた。

```js:https-server-simple.js
const https = require('https'), fs = require('fs');
const options = {pfx: fs.readFileSync('secure.pfx'),
               passphrase: 'passphrase'};
https.createServer(options, (req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(3000, () => console.log('Server https://localhost:3000'));
```

**pfxファイル** `secure.pfx` は なんとか自分で用意してください。
私は無料の Visual Studio 2012 Express for Windows Desktop
を使って、Project の「プロパティ」、「署名」の「テスト証明書の作成」で
いわゆるオレオレ証明書を作成しました。

# http proxy サーバ

一番簡単な **http proxyサーバ** を無理やり10行で書いてみた。(笑

```js:http-proxy-server-in-10-lines.js
const http = require('http'), url = require('url');
http.createServer((cliReq, cliRes) => {
  const x = url.parse(cliReq.url);
  const opt = {host: x.hostname, port: x.port || 80, path: x.path,
             method: cliReq.method, headers: cliReq.headers};
  const svrReq = http.request(opt, svrRes => {
    cliRes.writeHead(svrRes.statusCode, svrRes.headers);
    svrRes.pipe(cliRes); });
  cliReq.pipe(svrReq);
}).listen(8080);
```

なぜ10行で書いたかというと、20行で書いたという
こういう[記事 (A HTTP Proxy Server in 20 Lines of node.js Code)](https://catonmat.net/http-proxy-in-nodejs) を見つけてしまったからだ。
でも、後で探したら [stackoverflow (simple proxy server that works on a node.js host like appfog)](https://stackoverflow.com/questions/16655567/simple-proxy-server-that-works-on-a-node-js-host-like-appfog) にも、ほぼ同じようなコードが出てたんですよね。
まぁ、誰にでも到達できるコードだという事ですね。
でも、http, stream, など基本的な事がわかっていないと書けないですよね。

一応書いてみたものの https は通せないし、WebSocket なども通らないんですよ。
簡単じゃない事がわかった。
もちろん自分で書かずに [http-proxy - npm](https://www.npmjs.com/package/http-proxy), [node-http-proxy - http-party - GitHub](https://github.com/http-party/node-http-proxy#readme) などを使うのもいいよね。

勉強してみると、CONNECTメソッドやらUpgradeやら、
いろいろと対応しないとダメらしい。
今度はそれを書くぞ。
それではまた。

※[Gist](https://gist.github.com/LightSpeedC/6376018) にも一緒に投稿してみた。

# https もサポートする http proxy サーバ

[追記] こちらに続きの記事を書きました。

## [Node.js で https をサポートする http proxy サーバを 80行で書いた](https://qiita.com/LightSpeedC/items/5c1edc2c974206c743f4)
テキスト中のシェル変数を展開する

テキスト中のシェル変数を展開したいときにどうするか？

例えば次のような test.txt があって、このなかの NAME と HOGE を展開したい。

```
% cat test.txt

hello world
${NAME}
${HOGE}
```

この場合は次のように eval を使えばいい

```
% export NAME=hoge
% export HOGE=huge
% cat test.txt | while read line; do eval "echo `echo $line`"; done
hello world
hoge
huge
```

もっと他にいい手段はあるかもしれない。というより、あったらぜひ教えて欲しいです。
自分のいるブランチが他の人によってforce-pushされたとき，カレントブランチを削除せずに変更を取り込む

例えばレビュー中に小さなバグを見付けたので，レビュイーにpush -fしてもらった後にその変更を手元に持ってくるにはどうすればよいか．歴史が変わっているので`git pull`はできない．
今までは以下のように別ブランチに移動&削除&再度ブランチ作成していた．

```sh
# someone force-pushed to `topic` branch
git co master
git branch -D topic
git fetch
git co topic # creates `topic` branch from `origin/topic`
```

しかし，わざわざ移動&削除しなくとも以下のように`reset --hard`すればよい

```sh
git fetch
git reset --hard origin/topic
```

thanks to @uasi!
CoreData : エンティティ内に重複があるか判別するメソッド

CoreDataで、値を追加したいけど、重複する内容があったらやだなあ。というときに使えそうなメソッドです。
重複している値があったら重複しているオブジェクト(NSManagedObject)を返します。
重複していないときはNULLを返します。
今回は値はNSStringとしました。

```objc:
- (NSManagedObject *)checkDupulicationInEntity:(NSString *) entityName withKey:(NSString *)keyString withValue:(NSString *)valueString{
	NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:entityName];
	NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K = %@", keyString, valueString];
	[fetchRequest setPredicate:predicate];
	
	NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
	
	if (results.count > 0) {
		return [results objectAtIndex:0];
	}
	
	return NULL;
}
```

実行するときはこんなかんじで使う

```objc:
// keyがhogeで、値がhogehogeのものに対して、重複があるかないか見る。
// エンティティはHogeという名前のNSManagedObjectのサブクラスを想定。
NSManagedObject * checkForDuplicate = [self checkDupulicationInEntity:NSStringFromClass([Hoge class])  withKey:@"hoge" withValue:@"hogehoge"];
if (regionCheckForDuplicate == NULL) {
	// 重複がない場合はここに処理を書く
}else{
	// 重複があった場合はここに処理を書く
	NSLog(@"重複 : %@", [checkForDuplicate description]);
}
```
NSString に他の変数の内容も使いたい [NSString stringWithFormat:@"%@",hoge]

```
NSString* hoge = @"hogehoge";
NSString* str1 = [NSString stringWithFormat:@"%@",hoge];
NSString* str2 = [NSString stringWithFormat:@"%@%@",hoge,hoge];

NSLog (str1); // タブンhogehoge
NSLog (str2); // タブンhogehogehogehoge

```


stringWithFormat で解決
UnityにNSStringをUnitySendMessageで送りたいネー

```

// 送りたい文字列
NSString* str = @"kongou";

// HogeObjectはUnityのシーン内のオブジェクト名
UnitySendMessage("HogeObject", "_Callback", (char *)[str UTF8String]);

```

こうしないと何故かUnity側のLogで表示されなかった…間違いとかあれば指摘お願いします。
Rails4でActiveAdminを使うサンプル

ActiveAdminのRails4はまだ正式対応ではないですが、とりあえず試してみます。

サンプルコードは
https://github.com/hnakamur/active_admin_rails4_example
に置きました。

## active_adminはrails4ブランチを使う

http://stackoverflow.com/questions/16426398/active-admin-install-with-rails-4#answer-16805376
を参考にGemfileに以下の1行を追加します。

```
gem 'activeadmin', github: 'gregbell/active_admin', branch: 'rails4'
```

## strong parameters対応

http://stackoverflow.com/questions/13091011/how-to-get-activeadmin-to-work-with-strong-parameters#answer-15653583
を参考にstrong parameters対応をフロントのコントローラとActiveAdminのコントローラで行います。

フロントのコントローラ
https://github.com/hnakamur/active_admin_rails4_example/blob/bf4c66470c07a7234bc853817f802f74a50e4368/app/controllers/books_controller.rb

```rb:
class BooksController < InheritedResources::Base
  private
    def permitted_params
      params.permit(:book => [:title, :author, :released_on])
    end
end
```

ActiveAdminのコントローラ
https://github.com/hnakamur/active_admin_rails4_example/blob/bf4c66470c07a7234bc853817f802f74a50e4368/app/admin/book.rb

```rb:
ActiveAdmin.register Book do

  controller do
    private
    def permitted_params
      params.permit(:book => [:title, :author, :released_on])
    end
  end
end
```
Enumerize 使い方


railsでenumのような列挙型を使うためのgem。

[前提条件]
enumを使うモデルをスカフォードで作っていること。
enumを使うカラムはstringで定義していること。(重要)


##インストール
Gemfileに下記の記述を追加した後にbundle installを行う。

```Gemfile
gem 'enumerize'
```

```
bundle install
```

これだけで使用可能。

##enumの設定方法
モデルクラスに下記のように記述。

```model.rb
  include Enumerize  enumerize :color, :in => [:黒, :白, :赤]```
##enumの使用方法
入力フォームにプルダウンで設定するには下記のように記述。

```_form.html.erb
<%= f.select :color, Model.color.options %>
```
詳細ページに表示するには下記のように記述。

```
<%= @model.color_text %>
```
BeanstalkでAutoScalingとLoadBalancerを使用しているときに、EC2インスタンスがOutOfServiceになったら自動terminate/launchする方法

BeanstalkでAutoScalingとLoadBalancerを使用してEC2インスタンスを稼働する場合の話です。
例えばEC2でApache/Tomcatが動作させ、Tomcatが死んでELBのヘルスチェックで500番台のエラーが返るようになった時、LoadBalancerから異常インスタンスが外れ(OutOfService判定され、通信が届かなくなる)、そのインスタンスがterminateされ、新しいインスタンスが起動し、LoadBalancerに登録されるという動作になって欲しいです。しかし、通常の設定ではLoadBalancerから異常インスタンスが外れるのみで、いつまでたっても異常インスタンスは起動したままになります。
※当然ですがインスタンスを手動でterminateさせれば新しいインスタンスは自動起動します。

AWSのDiscussion Folumでも以前話題になっており、
https://forums.aws.amazon.com/thread.jspa?messageID=413103
これによるとAutoScalingの設定でヘルスチェックタイプがEC2かELBかによって動作が違うとのこと。
タイプがEC2ならばEC2インスタンスがrunningかそれ以外かを監視し、ELBならELBの生死確認に準拠するようです。
Beanstalkを使うとヘルスチェックタイプがEC2になってしまうため、前述のような動作になります。
Beanstalkの管理画面ではその設定を変更できないため、コマンドラインツールを使用して設定を変更する必要があります。

AWSの中の人の回答を参考に、この設定変更の手順をまとめました。
AWS Command Line InterfaceがプリインストールされているAmazonLinuxのインスタンス内での作業を想定しています。

credential.txt を用意する(ファイル名はなんでもいい)

```
AWSAccessKeyId=AKIAXXXXXXXXXX
AWSSecretKey=xxxxxxxxx
```

環境変数AWS_CREDENTIAL_FILEにそのファイルパスをセット

```bash:
$ export AWS_CREDENTIAL_FILE=./credential.txt
```

Beanstalk管理画面のConfiguration>InstancesからSecurityGroup名を確認する

```
EC2 security groups: awseb-e-abcdefghi-stack-AWSEBSecurityGroup-ABCDEFGHIJKLM
```

これの前半部分の-AWSEBまでを使ってAutoScalingGroupを探す。

```bash:
$ as-describe-auto-scaling-groups --region ap-northeast-1|grep awseb-e-abcdefghi-stack-AWSEB|head -1
```

```
AUTO-SCALING-GROUP  awseb-e-abcdefghi-stack-AWSEBAutoScalingGroup-XXXXXXXXXXX   awseb-e-abcdefghi-stack-AWSEBAutoScalingLaunchConfiguration-YYYYYYYYYY  ap-northeast-1c,ap-northeast-1a  awseb-e-g-AWSEBLoa-ZZZZZZZZZZ   2  4  2  Default
```

⇒AutoScalingGroupはawseb-e-abcdefghi-stack-AWSEBAutoScalingGroup-XXXXXXXXXXXであることがわかります。
_**追記： EC2管理画面で該当LoadBalancerに登録されているインスタンスのTagにAutoScalingGroupの名前が載っているので、それを利用した方がたぶん早いです。お好みで。**_

ヘルスチェックタイプの変更

```bash:
$ as-update-auto-scaling-group awseb-e-abcdefghi-stack-AWSEBAutoScalingGroup-XXXXXXXXXXX --region ap-northeast-1 --health-check-type ELB --grace-period 600
```

```
OK-Updated AutoScalingGroup
```

--grace-period 600はAutoScalingのヘルスチェック開始までの秒数。

これでAutoScaling側のヘルスチェックがELBと連動するようになりました。

---- 修正 ----
ロードバランサーに追加中(OutOfService)にAutoScalingのヘルスチェックが行われてしまうとまずいので、AutoScalingの<del>ヘルスチェック周期</del>ヘルスチェック開始までの秒数である --grace-period 60 を --grace-period 600 に変更。ELBのヘルスチェック方法に応じて調整してください。
－－－－
なんか見づらかったのでコマンドと実行結果の枠を分ける。
Mac Terminal のカラー設定をSolarized にする



# 目的
Mac Terminal.app のカラー設定をSolarized にする。
vim とls コマンド結果を、Solarized カラーにする。

私は、TotalTerminal を利用しているが、本手順を行えばTotalTerminal 上でもSolarized カラースキーマが適用できる。
TotalTerminal の設定は、Terminal.app に依存しているため。


## Solarized とは？
* 目に優しく疲れにくい、けど見やすいカラースキーマ
* Ethan Schoonover という人が考案
* カッコヨス

## で、どんな感じになる？
[Solarized - Ethan Schoonover](http://ethanschoonover.com/solarized) を参照。

![Solarized   Ethan Schoonover.jpeg](https://qiita-image-store.s3.amazonaws.com/0/26565/d91b2a3a-ec80-bc50-d00b-a51505aa8453.jpeg)

***
# 前提条件
## 環境
### 作業前
* OS: Mac OSX 10.8.4

### 作業後（※差異部のみ記載）
* coreutils（glsが必要） インストール

## 条件
* Homebrew がインストールされていること


***
# 参考情報
* [Solarized - Ethan Schoonover](http://ethanschoonover.com/solarized)
* [Issues with solarized and Terminal.app](http://stackoverflow.com/questions/11822081/issues-with-solarized-and-terminal-app)
* [LS_COLORSを設定しよう](http://qiita.com/yuyuchu3333/items/84fa4e051c3325098be3)


***
# 作業手順：概要
1. Solarized をダウンロード
1. Terminal のテーマに設定
1. vim カラーを設定
1. ls カラーを設定


***
# 作業手順：詳細
## Solarized をダウンロード
OSX 10.8用を以下より任意の場所へダウンロードする。
`$ git clone https://github.com/tomislav/osx-terminal.app-colors-solarized solarized.git`

初め[SolarizedのHP](http://ethanschoonover.com/solarized) から直接DLして設定したんだが、思った感じの色になってなかった。
どうすんのか、探してみたら[同じ悩みの人がいて、それ見たら解決した](http://stackoverflow.com/questions/11822081/issues-with-solarized-and-terminal-app)。


## Terminal の設定でSolarized プロファイルを読み込む
1. メニューバー ＞ ターミナル ＞ 環境設定
1. タブ ＞ 設定
1. プロファイル下部 ＞ 歯車ボタン ＞ 読み込む
1. ダウンロードしたSolarized（e.g. Solarized Dark.terminal）を選択してプロファイルにロードする（Dark, Light はお好みで）
1. ついでに、そのプロファイルをデフォルトに設定しておくといい


ここまでで、基本設定は出来た。
ただ、vim と、ls 結果が、まだ設定出来てないので続けて設定する。

## vim カラー設定
※ Solarized Dark.terminal を設定する場合。
Light の場合は、以下設定を`set background=light` にすればいい。

`$ vi ~/.vimrc`

```vim:vimrc
syntax enable
set background=dark
colorscheme solarized
let g:solarized_termcolors=256
```

## ls カラー設定
Mac デフォだと、BSD のls コマンドを使用しており、ls カラー設定するための`gdircolors` コマンドが使えないので、GNU版のls を入れることにする。

### GNU 版ls（gls）とかが入ってるcoreutils をインストール
`$ brew install coreutils`

### Solarized のディレクトリカラー設定ファイルを任意の場所へダウンロード
この例だと、ユーザのホームディレクトリ直下にダウンロード
`$ git clone https://github.com/seebi/dircolors-solarized.git ~/dircolors-solarized`

### ls コマンドをgls コマンドに置換え（※任意）
本作業以降、ls コマンドは、ずっとgls コマンドを使いたいならalias 設定しておく。
そうしないなら、この手順は不要。

`$ vi ~/.bash_profile`

```.bash_profile
alias ls='gls --color=auto'
```

### シンボリックリンクの付替えでSolarized の各テーマを変更できるようにする（※任意）
Dark、Light を設定ファイルの修正なく変更したいということであれば、予めテーマ自体をシンボリックリンクとし、そのシンボリックリンク自体を設定ファイルに記載しておけば便利。
だが、ずっとかえねぇよ。ということであれば、この手順は不要。

`$ ln -fs ~/dircolors.ansi-universal .dircolors-solarized`


### .bash_profile を編集して`gdircolors` コマンドで、dircolors-solarized を読み込む設定にする
`$ vi ~/.bash_profile`

```bash:.bash_profile
eval $(gdircolors ~/.dircolors-solarized)
```


以上で、Terminal が美しい色になる。
エラーページが表示されることの Feature spec


今までこんな感じに書いてました。

```ruby
scenario '存在しないユーザーはエラー' do
  expect {
    visit '/users/99999'
  }.to raise_error(ActiveRecord::RecordNotFound)
end
```

Controller specなら`raise_error`でいいのですが、Feature specなのでこう書きたい。

```ruby
scenario '存在しないユーザーはエラー' do
  visit '/users/99999'
  expect(page.status_code).to eq 404
  expect(page).to have_content('ページがありません。')
end
```

実はこう設定変更するだけでOKでした。

```config/environments/test.rb
config.action_dispatch.show_exceptions = true
```
AIRでFaceBookに画像投稿するサンプル

Facebookを利用する際は
https://code.google.com/p/facebook-actionscript-api/downloads/detail?name=GraphAPI_Mobile_1_8_1.swc&can=2&q=
上のライブラリを使うと便利です。


```as3:
import com.facebook.graph.FacebookMobile;

//OAuth用のStageWebview作成してログイン
var webView:StageWebView = new StageWebView();
webView.stage = this.stage;
webView.viewPort = new Rectangle(0,0,stage.stageWidth,stage.stageHeight );
FacebookMobile.login(handleLogin, this.stage, ['user_photos', 'publish_stream'], webView);


//ログイン完了時のイベントハンドラ
private function handleLogin(response:Object, fail:Object):void {
        if (response){
		//ログイン完了時処理
                postImage();
        }
}

//投稿処理
private function postImage():void{
        var values:Object = { message:"messeage","imagename", image:new BitmapData()};
	FacebookMobile.api("/me/photos", handleUploadComplete, values, "POST");
}

//投稿完了時のイベントハンドラ
private function handleUploadComplete(response:Object, fail:Object):void{
      //投稿完了時処理
}
```
carrierwave 使い方


carrierwaveは画像アップロード機能を簡単に実装できるgem。

[前提]スカフォードで画面を作っていること。

##インストール
Gemfileに下記の記述を追加した後にbundle installを行う。

```Gemfile
gem 'carrierwave'
```

```
bundle install
```

##アップロード実装

下記のコマンドで実行する。
※imageはファイルパスとして使うカラムの名称に合わせること。

```
rails g uploader image
```

uploaders/image_uploader.rbというファイルが作成される。

ファイルパスをテーブルに追加してマイグレートを行う。
例：catというテーブルにimageというカラムを追加している

```
rails g migration add_image_to_cat image:string
rake db:migrate
```

モデルクラスの変更を行う。
mount_uploader行の追加とattr_accessibleにimageを追加する。

```cat.rb
class Cat < ActiveRecord::Base  mount_uploader :image, ImageUploader  attr_accessible :name, :imageend
```
アップロード画面作成のためビューの変更を行う。

```_form.html.erb
<%= f.label :image %><%= f.file_field :image %>
```

画像表示のため詳細のビューについて変更を行う。

```show.html.erb
<p>  <b>Image:</b>  <%= image_tag @cat.image.to_s %></p>
```

これでアップロードして確認が行える。
ant の必要最低バージョンを調べるタスク

```xml:
  <property name="ant.version.required" value="1.9.2" />
  <target name="ant.version.validate">
    <fail message="ERROR: The running Ant version is too old. Use ${ant.version.required} .">
      <condition>
        <not>
          <antversion property="version.running" atleast="${ant.version.required}" />
        </not>
      </condition>
    </fail>
  </target>
```

```bash:
$ ant ant.version.validate
```
すると、ant のバージョンが 1.9.2 より低かったらエラーになる。

次のようにタスクに ant.version.validate を依存させると、タスクの実行時に必要最低バージョンのチェックを行ってくれる。

```xml:
<target name="foo" depends="ant.version.validate">
  <foo bar="bar" />
</target>
```
java.sql.*をorg.joda.time.*に変換

`java.sql`の時間を表すクラスの使えなさにイラッと来たので、[joda-time](http://www.joda.org/joda-time/)に変換して使うことにした。

## 注意点

これらの単純な方式では出力される際に変換が実施されるだけです。
そのため、比較演算でのフィルタ `query.filter(_.dateTime <= targetDateTime)` などが使えないのが欠点です。
より丁寧に実装する場合は[tototoshi/slick-joda-mapper](https://github.com/tototoshi/slick-joda-mapper)をオススメします。

## 実装

以下はScalaでの記述例。Javaの場合は、まぁ何となくわかると思うんで読み替えてください。

```scala:
import java.sql.{Timestamp,Date,Time}
import org.joda.time.{DateTime,LocalDate,LocalTime,DateTimeZone}
```

### `java.sql.Timestamp` <-> `org.joda.time.DateTime`

```scala:
def dateTimeToSqlTimestamp: DateTime => Timestamp = { dt => new Timestamp(dt.getMillis) }
def sqlTimestampToDateTime: Timestamp => DateTime = { ts => new DateTime(ts.getTime) }
```

### `java.sql.Date` <-> `org.joda.time.LocalDate`

```scala:
def localDateToSqlDate: LocalDate => Date = { ld => new Date(ld.toDateTimeAtStartOfDay(DateTimeZone.UTC).getMillis) }
def sqlDateToLocalDate: Date => LocalDate = { d  => new LocalDate(d.getTime) }
```

### `java.sql.Time` <-> `org.joda.time.LocalTime`

```scala:
def localTimeToSqlTime: LocalTime => Time = { lt => new Time(lt.toDateTimeToday.getMillis) }
def sqlTimeToLocalTime: Time => LocalTime = { t  => new LocalTime(t, DateTimeZone.UTC) }
```

### 使用例

Scalaの場合、例えばSlickを使うとORMでの自動変換が可能。

#### Slick 1.0.x

```scala:
implicit def timestampMapper =
  MappedTypeMapper.base[DateTime,Timestamp](dateTimeToSqlTimestamp, sqlTimestampToDateTime)
```

#### Slick 2.0.x

```scala:
implicit def timestampMapper =
  MappedColumnType.base[DateTime,Timestamp](dateTimeToSqlTimestamp, sqlTimestampToDateTime)
```
Rails3_acts_as_paranoid 使い方

ails3_acts_as_paranoidはデータの削除を論理削除にするgem。

##インストール
Gemfileに下記の記述を追加した後にbundle installを行う。

```Gemfile
gem 'rails3_acts_as_paranoid'
```

```
bundle install
```

これだけで使用可能。

##テーブルに論理削除を設定する
テーブルのカラムに論理削除フラグを追加する。

```
rails g migration add_deleted_at_to_test deleted_at:timestamp
```
```
rake db:migrate
```
例：testというテーブルに論理削除フラグのdeleted_atを追加している。

モデルクラスに下記の記述を追加する。

```test.rb
acts_as_paranoid
```

これで削除(destory)を行うと物理削除ではなく論理削除が行われるようになる。

##おまけ
論理削除

```
test.destroy
```

物理削除

```
test.destroy!
```
定時リブートを仕込む

```bash:
$ sudo vim /etc/cron.monthly/scheduled_reboot.sh
#!/bin/sh
reboot
```

```bash:権限修正
$ sudo chmod +x /etc/cron.monthly/scheduled_reboot.sh
$ sudo chown root:root /etc/cron.monthly/scheduled_reboot.sh
```

実行タイミングは`/etc/crontab`を見るとわかります。
kaoriyaさんのvimにpluginを追加するスマートな方法

`vim74-kaoriya-win32\plugins\`にプラグインをディレクトリごと入れるだけで、認識されます。
昔気づかなくて`vim74-kaoriya-win32\vim74\` に展開して入れてました・・。

```bash:
plugins
plugins/autofmt
plugins/autofmt/autoload
plugins/autofmt/autoload/autofmt
plugins/autofmt/doc
plugins/autofmt/test
plugins/autofmt/tools
plugins/golang
plugins/golang/autoload
plugins/golang/autoload/go
plugins/golang/ftdetect
plugins/golang/ftplugin
plugins/golang/ftplugin/go
plugins/golang/indent
plugins/golang/plugin
plugins/golang/syntax
plugins/kaoriya
plugins/kaoriya/autoload
plugins/kaoriya/autoload/kaoriya
plugins/kaoriya/keymap
plugins/kaoriya/plugin
plugins/kaoriya/syntax
plugins/unite.vim-master
plugins/unite.vim-master/autoload
plugins/unite.vim-master/autoload/unite
plugins/unite.vim-master/autoload/unite/filters
plugins/unite.vim-master/autoload/unite/kinds
plugins/unite.vim-master/autoload/unite/sources
plugins/unite.vim-master/autoload/vital
plugins/unite.vim-master/autoload/vital/_b268d8d
plugins/unite.vim-master/autoload/vital/_b268d8d/Data
plugins/unite.vim-master/autoload/vital/_b268d8d/System
plugins/unite.vim-master/doc
plugins/unite.vim-master/plugin
plugins/unite.vim-master/plugin/unite
plugins/unite.vim-master/syntax
plugins/unite.vim-master/vest
plugins/vimdoc-ja
plugins/vimdoc-ja/doc
plugins/vimdoc-ja/syntax
plugins/vimfiler.vim-master
plugins/vimfiler.vim-master/autoload
plugins/vimfiler.vim-master/autoload/unite
plugins/vimfiler.vim-master/autoload/unite/filters
plugins/vimfiler.vim-master/autoload/unite/sources
plugins/vimfiler.vim-master/autoload/vimfiler
plugins/vimfiler.vim-master/autoload/vimfiler/columns
plugins/vimfiler.vim-master/autoload/vital
plugins/vimfiler.vim-master/autoload/vital/_13055f8
plugins/vimfiler.vim-master/autoload/vital/_13055f8/Data
plugins/vimfiler.vim-master/autoload/vital/_13055f8/System
plugins/vimfiler.vim-master/autoload/vital/_13055f8/Vim
plugins/vimfiler.vim-master/doc
plugins/vimfiler.vim-master/plugin
plugins/vimfiler.vim-master/syntax
plugins/vimfiler.vim-master/vest
plugins/vimproc
plugins/vimproc/autoload
plugins/vimproc/autoload/vimproc
plugins/vimproc/doc
plugins/vimproc/plugin
```
iOSでデバッグビルドとリリース版を共存させる


iOS上でアプリのデバッグビルドとリリース版と共存させたかったので [Post-Release Development Bundle Identifiers and Display Names](http://jaysonlane.net/tech-blog/2012/04/post-release-development-bundle-identifiers-and-display-names/) を参考にして、ビルドの構成でアプリのIDや名前を変えるようにしてみた。

これは  ``Build identifier`` や ``Bundle display name`` がビルドの構成で設定を分けらないので、別のビルド構成で分けられる変数に依存させるという手法。

例えば ``Bundle identifier`` の ``example.com.${PRODUCT_NAME:rfc1034identifier}`` を

```
example.com.${PRODUCT_NAME:rfc1034identifier}${BUNDLE_IDENTIFIER_SUFFIX}
```

``Bundle display name`` の ``${PRODUCT_NAME}`` を

```
${PRODUCT_NAME}${BUNDLE_DISPLAY_NAME_SUFFIX}
```

のようにそれぞれ ``${BUNDLE_IDENTIFIER_SUFFIX}`` と ``${BUNDLE_DISPLAY_NAME_SUFFIX}`` を追加する。

次にTARGETのBuild Settingsで ``Add Build Setting`` を押して、``User-Defined Settings`` として ``BUNDLE_IDENTIFIER_SUFFIX``と ``BUNDLE_DISPLAY_NAME_SUFFIX`` を追加する。

![xcode_2013-08-22_1445.png](https://qiita-image-store.s3.amazonaws.com/0/2435/5e2729e8-acbc-adae-41f1-d8f06f9da790.png "xcode_2013-08-22_1445.png")

あとはRelease構成の設定は空にして、Debug構成で好きな値を入れればいい。上記の例ではBundle identifierは ``.debug`` 、Bundle display nameには ``D`` を追加している。

Display Nameがギリギリの長さの場合は、語尾につけるSuffixが入らないこともあるので ``BUNDLE_DISPLAY_NAME_PREFIX`` にして先頭につけてみたり、そもそも ``BUNDLE_DISPLAY_NAME`` にしてそれぞれ名前をつけるという方法も有効となる。

ただしDisplay NameについてはInfoPlist.stringsで ``CFBundleDisplayName`` をローカライズするとそちらが優先されてしまうため注意。
Centos5.9でbond0とbond1がランダムに入れ替わる件対応

[このバグ](https://bugzilla.redhat.com/show_bug.cgi?id=491432)に引っかかった。
[参考](http://benzaiten.dyndns.org/roller/ugya/entry/eth0%E3%81%A8%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%81%AE%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0)
[HPのサイト](http://h50146.www5.hp.com/products/software/oe/linux/mainstream/support/doc/option/nic/multi_bond.html)

チーミングを有効にするには
====

bond0
----

* eth0とeth1をbond0として扱う

```bash:/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
```

```bash:/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
```

```bash:/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
IPADDR=192.168.11.14
NETMASK=255.255.255.0
ONBOOT=yes
```

bond1
----

* eth2とeth3をbond1として扱う

```bash:/etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
MASTER=bond1
SLAVE=yes
BOOTPROTO=none
```

```bash:/etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
MASTER=bond1
SLAVE=yes
BOOTPROTO=none
```

```bash:/etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE=bond1
BOOTPROTO=static
IPADDR=192.168.12.14
NETMASK=255.255.255.0
ONBOOT=yes
```

bondingモジュールを使用
---

```bash:/etc/modprobe.conf
alias eth0 tg3
alias eth1 tg3
alias eth2 e1000e
alias eth3 e1000e
alias scsi_hostadapter ahci
alias scsi_hostadapter1 usb-storage

alias bond0 bonding
options bond0 mode=active-backup miimon=100 max_bonds=2
```

bond0とbond1が入れ替わる件対応
====

```bash:MACアドレス確認
$ dmesg | grep eth | grep PCI
e1000e 0000:08:00.0: eth0: (PCI Express:2.5GT/s:Width x4) 00:17:08:7b:11:93
e1000e 0000:08:00.1: eth1: (PCI Express:2.5GT/s:Width x4) 00:17:08:7b:11:94
tg3 0000:03:00.0: eth2: eth2: Tigon3 [partno(BCM95717) rev 5717100 PHY(5718C)] (PCI Express) 10/100/1000Base-T Ethernet 6c:3b:e5:52:bf:21
tg3 0000:03:00.1: eth3: eth3: Tigon3 [partno(BCM95717) rev 5717100 PHY(5718C)] (PCI Express) 10/100/1000Base-T Ethernet 6c:3b:e5:52:bf:22
```

```bash:/etc/udev/rules.d/60-net.rules
# デフォルトの設定をコメントアウト
# ACTION=="add", SUBSYSTEM=="net", IMPORT{program}="/lib/udev/rename_device"
# SUBSYSTEM=="net", RUN+="/etc/sysconfig/network-scripts/net.hotplug"
SUBSYSTEM=="net",ACTION=="add",BUS=="pci",KERNEL=="eth*",SYSFS{address}=="6c:3b:e5:52:bf:21",NAME="eth0"
SUBSYSTEM=="net",ACTION=="add",BUS=="pci",KERNEL=="eth*",SYSFS{address}=="6c:3b:e5:52:bf:22",NAME="eth1"
SUBSYSTEM=="net",ACTION=="add",BUS=="pci",KERNEL=="eth*",SYSFS{address}=="00:17:08:7b:11:93",NAME="eth2"
SUBSYSTEM=="net",ACTION=="add",BUS=="pci",KERNEL=="eth*",SYSFS{address}=="00:17:08:7b:11:94",NAME="eth3"
```

何度か再起動して入れ替わらないことを確認。
vimの新しく覚えたコマンド

いつもQiitaを自分用メモとして使ってますが、今日も自分用メモとして。

#####vimの最近覚えた小技

・カーソルのある単語を後方検索
*

・カーソルのある単語を前方検索
\#

・カーソルのある単語を削除して挿入モードに以降
cw
・カーソルのあるところから単語数を指定し削除して挿入モードに以降
c(単語数)w 


そろそろneocomplcacheを入れようかしら。
.rvmrc を .ruby-version に移行する

rvm をアップデートしてから、rvm 使っている Rails Project に cd したら、以下のメッセージが表示された。

```shell
$ cd hoge-rails-project
You are using .rvmrc, it requires trusting, it is slower and it is not compatible with other ruby managers, you can switch to .ruby-version using rvm rvmrc to [.]ruby-version or ignore this warnings with rvm rvmrc warning ignore /Users/hoge/hoge-rails-project/.rvmrc, .rvmrc will continue to be the default project file in RVM 1 and RVM 2, to ignore the warning for all files run rvm rvmrc warning ignore all.rvmrcs.
```

[rbenv](https://github.com/sstephenson/rbenv) とかに移行するときに楽そうなので、.ruby-version に変更してみる。

.rvmrc 内の rvm use しているところを抜き出し、.ruby-version にバージョンのみ記載すれば移行としては完了する。

```.rvmrc
rvm use 2.0.0
```

を

```.ruby-version
2.0.0
```

にするだけである。他に記述がなければ、.rvmrc は削除してしまって構わない。

Pow を併用している場合は、以下のようになっているはずなので、

```.powrc
if [ -f "$rvm_path/scripts/rvm" ] && [ -f ".rvmrc" ]; then
  source "$rvm_path/scripts/rvm"
  source ".rvmrc"
fi
```

ここも合わせて変更する。

```.powrc
if [ -f "$rvm_path/scripts/rvm" ] && [ -f ".ruby-version" ]; then
  source "$rvm_path/scripts/rvm"
  rvm use `cat .ruby-version`
fi
```

追記) デプロイ先が rbenv を使っているようなめんどくさい環境だった場合、この変更の影響を受けてしまう。上記の例のように 2.0.0 と短縮形のままだと弊害が発生するので、rbenv のプラグインである rbenv-aliases で手を打っておく。

https://github.com/tpope/rbenv-aliases

私の環境では、/usr/local/rbenv にインストールしていたので、plugin も /usr/local/rbenv/plugins 以下にインストールする必要があった。

```shell
$ git clone git://github.com/tpope/rbenv-aliases.git /usr/local/rbenv/plugins/rbenv-aliases
$ rbenv alias --auto

$ rbenv versions
  system
  2.0.0
* 2.0.0-p247 (set by /usr/local/rbenv/version)
```
linux(CentOS)のコマンドに色付け

夢をみる時にカラーで見る人と白黒で見る人がいるそうですが、
実際は全員がカラーで見てるけど白黒でしか覚えてないそうです。

夢についての話は色々ありますが、思考の発生原因さえわかってないのに
何で夢についての事なら根拠がないことでも簡単に信じてしまう人が多いんでしょうか、それが自分にはよくわかりません。

さて、話が飛びましたがLinuxコマンドの色付けです。色がある生活は素晴らしい。
なので何でもかんでもコマンドに色をつけてしまいましょう。

## manコマンドに色をつける

```bash:~/.bashrc
export MANPAGER='less -R'
man() {
	env \
		LESS_TERMCAP_mb=$(printf "\e[1;31m") \
		LESS_TERMCAP_md=$(printf "\e[1;31m") \
		LESS_TERMCAP_me=$(printf "\e[0m") \
		LESS_TERMCAP_se=$(printf "\e[0m") \
		LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
		LESS_TERMCAP_ue=$(printf "\e[0m") \
		LESS_TERMCAP_us=$(printf "\e[1;32m") \
		man "$@"
}
```

## ls コマンドに色を付ける
さくらのVPSのCentOS上だとデフォルトで色がついていたんですが、一応

```bash:~/.bashrc
alias ls='ls -G'
```

## grep コマンドに色をつける

```bash:~/.bashrc
alias grep='grep --color'
```

## diff コマンドに色をつける
colordiff が入ってないなら `$ sudo yum install colordiff` してから

```bash:~/.bashrc
alias diff='colordiff'
```

## git コマンドに色を付ける
git は設定コマンドがあるのでそれを使う

```
$ git config --global color.ui auto
```

## tail -f コマンドに色をつける
常に追加され続けるログファイルの末尾の監視に使う `tail -f` に色づけは
`# sudo yum install multitail` で multitail を代わりに使うと良いらしい。
もしくは下記の grc を使う

## netstat, ping, ps, tail などのコマンドに色をつける
grc (generic colouriser) を使う

```
$ wget http://korpus.juls.savba.sk/~garabik/software/grc/grc_1.5.tar.gz
$ tar xzf grc_1.5.tar.gz
$ cd grc_1.5
$ sudo ./install.sh
```
でインストールして

```bash:~/.bashrc
alias mount='grc mount'
alias ifconfig='grc ifconfig'
alias dig='grc dig'
alias ldap='grc ldap'
alias netstat='grc netstat'
alias ping='grc ping'
alias ps='grc ps'
alias traceroute='grc traceroute'
alias gcc='grc gcc'
```
しとくと良さげ。

他にも正規表現とか使ってで自分で色付けできるらしいけど、詳しくは読んでない。
知りたい人はこちらのREADMEを見てください。
http://korpus.juls.savba.sk/~garabik/software/grc/README.txt

## 参考サイト
Unix csh/zsh/bashでManページをlessコマンドでカラー表示する
http://kaworu.jpn.org/kaworu/2012-05-02-1.php#2012-05-02-1-Y3NoIC8gdGNzaA==

colordiffで、diffコマンドの出力に色を付ける - 試験運用中なLinux備忘録
http://d.hatena.ne.jp/kakurasan/20070703/p2

gitコマンド結果に色を付ける : 週末プログラマの開発日記
http://cafe-system.com/system1063.html

command line - How to have tail -f show colored output - Unix & Linux Stack Exchange http://unix.stackexchange.com/questions/8414/how-to-have-tail-f-show-colored-output
メニュー使っていますか？


この記事は[Vim Advent Calendar 2012][0] : ATND272日目の記事になります。


突然ですが、皆さんはVimのメニュー使っていますか？

![][2]

私が思うにVimmerの方々でメニューを表示し使っている方はすごく少数派な気がします。

まぁたぶん、メニューを使わない理由は __「キーボードからマウスに手を動かすのがメンドイ」__ からでしょう。
私もそんな理由でメニューを以下のような設定で非表示にしていたのですが...。(正確にはメニュー項目を１つも設定しないですが (== 非表示)。)

```vim:
set winaltkeys=yes
set guioptions=mM
```

`set winaltkeys=yes`と`guioptions=m`にしておかないとAlt+Spaceでシステムメニューが開けなくなっちゃうんですよねぇー。

![][3]


でもここ最近、私は __「マウスからキーボードに手を動かすのがメンドイ」という理由__ でVimのメニューを使ったりしています。

ということで今回は、Vimのメニューについて簡単にまとめたいと思います。詳しいことはVimにヘルプしてください(`:h menus`参照)。

## メニューの表示/非表示

* メニューを表示する。

```vim:
set guioptions+=m
```

* メニューを非表示する。

```vim:
set guioptions-=m
```

## メニューのデフォルト項目を設定しない。

メニューのデフォルト項目とは、上の図でいう「File Edit Tools Syntax Buffers Window Help」らのことです。
これらは"$VIMRUNTIME/menu.vim"を読み込むことで設定されます。


* "$VIMRUNTIME/menu.vim"を読み込まない。

```vim:
set guioptions+=M
```

* "$VIMRUNTIME/menu.vim"を読み込む。

```vim:
set guioptions-=M
```

## メニューに項目を追加する。

メニューに新しい項目を追加するには以下のような構文になります。

> menu [項目名]   [コマンド]

[項目名]は項目の階層を`.`で区切って表します。
[コマンド]はその項目を選択した時に実行したいVimコマンドを指定します。


__例:__

![][4]

```vim:
menu Commnads.Edit\ \.vimrc                  :e $MYVIMRC<cr>
menu Commnads.-sep-                          :
menu Commnads.\.vimrcを再読み込みする。      :so $MYVIMRC<cr>
```

__説明:__

[項目名]はマルチバイト文字でも基本的にOKです。
エスケープしなければならない文字は半角スペース(0x20)とカンマ(0x2E)です。
`-sep-`はセパレーターを表します。ハイフン(0x2D)で括られた項目であればsepでなくても大丈夫です。
例えば、`Commnads.-これはセパレータです-`もセパレーターになります。
ただし、[項目名]の先頭にセパレーターを持ってくることはできません(`-seq-.force\ quit`とか)。



## メニューから項目を削除する。

メニューから項目を削除するには以下のような構文になります。

> unmenu [項目名]

[項目名]は`:menu`コマンドで指定したものです。


* `Commnads.Edit\ \.vimrc`の項目を削除する。

```vim:
unmenu Commnads.Edit\ \.vimrc
```

* すべての項目を削除する。

```vim:
unmenu *
```

## メニューの項目をコマンドラインから実行する。

メニューの項目はコマンドラインからも実行することができます。
構文は項目を削除するするときと同じです。

* .vimrcを編集する。

```vim:
emenu Commnads.Edit\ \.vimrc
```


# 終わり

以上、「メニュー使っていますか？」でした。
今回紹介したメニュ－コマンドのほんの一部です。メニュ－コマンドは他にもまだまだいっぱいあります。
まぁそんなわけで、Vimのメニューを使ってみることを検討してみてはどうでしょうか？

<h3><b>たまにはマウスからキーボードに手を動かすこともめんどくさがりましょう</b></h3>

明日の記事は[@manga_osyo][1]さんです。


[0]: http://atnd.org/events/33746
[1]: http://d.hatena.ne.jp/osyo-manga/
[2]: https://qiita-image-store.s3.amazonaws.com/0/8325/eb202d9b-5014-1c47-d96a-3bc15b2b1799.png
[3]: https://qiita-image-store.s3.amazonaws.com/0/8325/6fe1fb04-d20e-a66a-5c3c-63c97f307af4.png
[4]: https://qiita-image-store.s3.amazonaws.com/0/8325/2bb619fe-cbaf-641b-24fd-c3ef2cccb15c.png
rsyncを使ってffmpegのソースをVPSに移動する

NHK側の変更によりラジオ語学講座の自動ダウンロード動かなくなったので、
CaptureStreamの代わりになるスクリプトを探してたら作ってくれてる方がおりました。

NHK語学講座のラジオ番組ストリーミングを取得するRubyスクリプトgogakuondemand.rb（v3.4 Windows対応） - 別館 子子子子子子（ねこのここねこ）
http://d.hatena.ne.jp/riocampos+tech/20130731/p1

ffmpegのOpenSSLまたはGnuTLS対応が必要とのことなのでさくらのVPSに入ってるffmpegを調べてみたら入ってない。
なので、この前ローカルのVirtualbox上のUbuntuにいれたffmpegのソースコードをrsyncでVPSに移して--enable-openssl にしてからコンパイルすればOKかと思いはじめてrsyncを試してみる。

`rsync -a ffmpeg_sources username@example.com:~`

とホームディレクトリで入力すればVPS側のホームディレクトリに移動される。
`~`が使えるかどうか不安だったけど問題ないらしい。

あとは
https://trac.ffmpeg.org/wiki/CentosCompilationGuide
を参考にインストールしながら

ffmpegの本体のコンパイルオプションに`--enable-openssl`を指定すればOK。
それにしてもffmpegのコンパイルオプションが多すぎてこんなのみんなホントに理解してるのかな…。
リポジトリごとに user.name や user.email の設定を強制する

社内やオープンソースのプロジェクトに並行して参加していると、gitconfig の `user.name` や `user.email` をリポジトリごとに切り替えたくなることがある。リポジトリを作るたびに `git config user.name "My Name"` すればいいのだが、 `user.name` が存在しないか空文字列だと環境変数 `NAME` の値を暗黙的に使う仕様になっているため、設定をうっかり忘れてしまうとなかなか気づけない。名前やメールアドレスを間違えたまま何度もコミットしてしまうと修正が厄介である。

## Git 2.8以上

最近の Git で設定忘れを未然に防ぐには `git config --global user.useConfigOnly true` を実行する。これを設定するとユーザー情報について環境変数を暗黙に参照することがなくなる。グローバルな gitconfig で `user.name` と `user.email` を設定してあるなら削除しておく。こうすることで、各リポジトリ単位で `user.name` と `user.email` を設定することを強制できる。

```
$ git config --global user.useConfigOnly true
$ git config --global --unset user.name
$ git config --global --unset user.email

$ cd /path/to/my_repo
$ git config user.name "My Name"
$ git config user.email "me@example.com"
```

## Git 2.7以下

以前の Git では `pre-commit` フックで設定の値を検証することになる。 `pre-commit` フックは `git commit` の直前に実行され、終了ステータスが非ゼロであれば `git commit` は中止される。

```bash:pre-commit
#!/bin/sh

if [ -z "`git config --local user.name`" ]; then
    echo "fatal: user.name is not set locally"
    exit 1
fi
if [ -z "`git config --local user.email`" ]; then
    echo "fatal: user.email is not set locally"
    exit 1
fi

```

フックスクリプトを実行可能にし、 $my_repo/.git/hooks ディレクトリに配置する。

```
$ chmod a+x pre-commit
$ mv pre-commit $my_repo/.git/hooks
```

これで、 $my_repo リポジトリにおいて `user.name` と `user.email` が設定されていなければ `git commit` が失敗するようになった。

```
$ git commit -m "Add some files"
fatal: user.name is not set locally

$ git config user.name  "My Name"
$ git config user.email me@example.com

$ git commit  -m "Add some files"
[master deadbeef] Add some files
...
```

`pre-commit` フックスクリプトをテンプレートに入れれば、新たに `git init` か `git clone` したリポジトリにはフックスクリプトがコピーされるようになる（参考：[gitのhooksを管理する(自分用テンプレートを使う)](http://qiita.com/quattro_4/items/59fdf8b9aa9ef48ecbdf)）。
gitのブランチ名にタイムスタンプをつけるエイリアス

昨日の [gitのブランチリストを鮮度順に表示する](http://qiita.com/yocifico/items/6e58480baa2bf696148d) で、タイムスタンプつけたブランチなんか厄介な事になりそうだからやめておいた方がいい、などと書きましたが、残念ながら重度の進行性中二病に罹患しているのでやってみます。

例えばhogeというブランチ名の頭に年月日時分秒までのタイムスタンプをつけるなら

```
git branch `date +'%Y%m%d%H%M%S'`hoge
```

とするわけですが、これを毎回書くのは大変なわけです。
そこでエイリアス（別名）のコマンドを作ってあげます。 ./git/configに以下を追加します。

```:.git/config
[alias]
branch-now = "!sh -c 'git branch `date +'%Y%m%d%H%M%S'`$1' -"
checkout-now = "!sh -c 'git checkout -b `date +'%Y%m%d%H%M%S'`$1' -"
```

`branch-now`とか`checkout-now`のところは好きな名前をつけてください。簡単でわかりやすいものがよいです。
gitはエイリアスコマンドもタブ補完してくれるので、よく使うものでなければ、上のように元のコマンドを踏襲しておくと忘れにくいです。逆によく使うものであれば、短いに越したことないです。

`git branch-now hoge`とすれば
`20130829012345hoge`みたいなブランチが作成されます。hogeを省略すると`20130829012345`というブランチが作成されます。

ついでに`git checkout`のエイリアスも書いてありますが、
`git checkout-now hoge`とすれば`20130829012345hoge`ブランチを作ってスイッチしてくれます。

ブランチ名は作成する機能とかチケット番号とかの方がよさそうな気がするのだけれど、名前を考えるのが面倒なことはあるのでそういうときには使えるのかもしれないですね。

そんなことより言いたかったことは、エイリアスにはシェルコマンドやシェル関数なんかも書けて`$1`みたく引数も渡せるということでした。本当に開発すべきコードのことを放り出して、俺の考えたカッコイイalias作成に没頭するとよいでしょう。いろんなことが捗った気がして迫り来る納期のこととか忘れられます。「進捗どうですか？」と聞かれたら「環境構築でいろいろと捗りました」などと答えましょう。その後、現実に直面することで、さらによいエンジニアとして成長すること間違いなしです。

エイリアスのさらに詳しい書き方は
[Aliases](https://git.wiki.kernel.org/index.php/Aliases)
を見てください。非常に詳しく書かれていて、最初からこのリンク先だけ見ればいいと思います（最後に言うな）。
bloggerでGoogle web fontsを使う方法

テンプレート -> htmlを編集 の画面から、headの中に次にように書く

```html:
<link href='http://fonts.googleapis.com/css?family=Roboto' rel='stylesheet' type='text/css'/>
```

カスタムcssに @import ... って書いてもダメ。少しハマった

```css:
@import url(http://fonts.googleapis.com/css?family=Roboto);
```

参考
http://www.slideshare.net/Bloggerial/how-to-add-custom-title-fonts-to-blogger-blog-15829414
iframe内のDOMを操作する方法


※IE8+,FF,Chrome,Safari で動作確認済み


```javascript
var $iframe = $('#some_iframe');

// iframe内のコンテンツのdocumentオブジェクト
var ifrmDoc = $iframe[0].contentWindow.document;

// あとはいつも通りでおｋ
var $body = $('body', ifrmDoc);
var $ele  = $('#some_element', ifrmDoc);
```

　

onloadイベントは

```javascript
$(function() {

	$('#some_iframe').on('load', function(e) {
		var $body = $('body', this.contentWindow.document);
			:
			:
	});

});
```
SublimeText2　自分用設定メモ

最近見つけたSulimeTextというエディタに惚れてしまったので、使用する際の防忘録。
ただし、Winだと日本語がインライン変換されないので、Macのみで使用。

使い始めたばかりなので、把握しきれていない。
便利な使い方見つけ次第随時、追加修正。
HTML,CSS,PHP,JavaScript(JQuery)。あとはシェルなんかを組んでいきたいので、
便利なの知ってる方、教えていただけると助かります。

デザインもいいし、使っていて楽しいエディタだと思います。

---

###  日本語化
Finderから` Command` +` shift`+` G` (フォルダの移動場所入力）にて
~/Library　を入力
（ホームディレクトリ配下にLibraryフォルダが有るが、
なぜかOptionキーを押し続けないと表示されない）

Library/Application Support/Sublime Text 2/Packages/Default/
配下の
>
>Main.sublime-menu
>Context.sublime-menu
上記2点のファイルを置き換える（上記2点の日本語化用ファイルがネットにあるので取ってくる）
置き換える前にバックアップ用意しておいた方が良さそう。



---
###  Package Controlのインストール
プラグインをインストールするためのプラグイン

![スクリーンショット 2013-08-28 23.00.51.png](https://qiita-image-store.s3.amazonaws.com/0/27781/7255c48e-d239-e1b3-f19e-19a7ab7fdeb6.png)

![スクリーンショット 2013-08-28 23.05.44.png](https://qiita-image-store.s3.amazonaws.com/0/27781/981d6a35-5900-044e-38cb-1bcf64eea551.png)
下にコンソールが開くので、そこに以下のテキストをべたっと貼って、エンターを押す。

```
import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation'
```

インストール終わり次第、Sublime再起動

---

###  ZenCoding（Emmet）導入
` Ctrl` +` shift`+` P`(Install Package )を選択 
→Emmet を選択 


---

### Vim互換
調べてみると、完璧ではないらしい

![スクリーンショット 2013-08-28 23.36.33.png](https://qiita-image-store.s3.amazonaws.com/0/27781/af3a98c7-3c9e-bf77-54de-4d61219131c8.png)

//以下を追加（もともとあったのは一応コメントアウトしてある）
"ignored_packages": []

```
    // List any packages to ignore here. When removing entries from this list,
    // a restart may be required if the package contains plugins.
    //20130823コメントアウト
    //"ignored_packages": ["Vintage"]
    "ignored_packages": []
```

---

### PHP関数ジャンプ

` Ctrl` +` shift`+` P`(Install Package )を選択 
→"SublimeCodeIntel" を選択 

` Ctrl` +` shift`+` P`(Install Package )を選択 
→"CTags for PHP" を選択 

` Control`  押しながら関数クリックで定義元に飛べる



---
### 導入したパッケージの確認

sublimeText2→preference→package-setteings
package-control →settings-user

---
### 導入したパッケージの削除

` Ctrl` +` shift`+` P`(Install Package )を選択 
以下を入力

```
Package Control: Remove Package
```
導入したプラグインの一覧が出るので、削除したいものを選択する。

---

###  バックアップ
Library/Application Support/Sublime Text 2配下の
Packagesフォルダが、sublimeTextの挙動を保持している。

別のPCなどで新たにSublimeTextを導入する際、こいつを置き換えてやれば、
環境を統一できる（Dropboxとかに保持しておくとよい）
Sublimeの動作がおかしくなったときなどのバックアップとしても有用そう
*この項目に関しては2013/08/30の現時点で、動作未確認
PostgreSQL チートシート


MacのローカルでPostgreSQLを開発用に使うときの覚書

# 環境

- Mac OSX El Capitan


# インストール

```
$ brew install postgresql
$ mkdir -p ~/Library/LaunchAgents
$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
```


# 起動/終了

## psqlを再起動する

brew upgradeしたあとなどに

```bash
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
```

## PostgreSQLのバージョンを確認する

```bash
psql template1
```
```sql
SELECT version();
```

## psqlを終了する

```SQL
\q
```


# ユーザ（role）

## ユーザ（role）を追加する

### 対話的にユーザを追加する

```bash
$ createuser --interactive
Enter name of role to add: yourusername
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
```

### パスワード付きでsuperuser権限のあるユーザを追加する

```bash
$ createuser --superuser --pwprompt USERNAME
```

## ユーザのパスワードを設定する

```bash
psql -c "alter role USERNAME with password 'PASSWORD';" template1
```


## ユーザにsuperuser権限を付与する

```bash
psql -c 'alter role USERNAME with superuser;' template1
```


## ユーザの一覧を表示する

```bash
psql template1
```
```sql
select usename from pg_user;
```

あるいは

```bash
psql -c'select usename from pg_user;' template1
```


# データベース

## データベースの一覧を表示する

```bash
psql -l
```

## データベースを作成する

```bash
createdb --owner=ユーザ名 データベース名
```


## データベースに接続する

```bash
psql -d データベース名
```


## テーブルの一覧を表示する

```SQL
\d
```


## データベースを削除する

```bash
dropdb データベース名
```

## データベースをバックアップする（テキストダンプ）

```bash
pg_dump データベース名 > バックアップファイル名
```


## バックアップしたファイルからリストアする（テキストダンプ）

```bash
createdb --owner=ロール名 リストア先のデータベース名
psql リストア先のデータベース名 < バックアップファイル名
```


## データベースをバックアップする（custom）

* backup_2013-09-10_0.custom のようなファイル名にしておくとあとでわかりやすい

```bash
pg_dump --format=custom データベース名 > バックアップファイル名
```


## バックアップしたファイルからリストアする（custom）

* -d で指定するDB名は必ず postgres にする

```bash
pg_restore -C -d postgres < バックアップファイル名
```


## バックアップしたファイルからリストアする（customでリストア先のDBが異なる場合）

```bash
pg_restore -d リストア先のデータベース名 < バックアップファイル名
```


参考

* http://lets.postgresql.jp/documents/technical/backup/2
JSXのthisの覚え方

ルールはたったひとつだけ

* staticでないメンバー関数（コンストラクタ含む）のなかで `this` はそのメンバー関数を呼び出した時のレシーバとなる

関数内関数定義のなかだろうとイベントハンドラの中だろうと常にメンバー関数の `this` は一定です。static member functionのなかではthisは使えません。JS的にいうと、メソッドの先頭で `var that = this;` としてその後すべての `this` ではなく `that` を使うイメージ、といえばわかりやすいでしょうか。bind/apply/callといったものもないので `this` がそれ以外の何かになることはありません。

簡単でしょ？
Android Studioでライブラリ依存関係を設定する方法

* プロジェクトルート直下にライブラリプロジェクト(SomeLibraryとする)用のフォルダ構造を作成

```


　./
 　 App/
                src/


    SomeLibrary/

                src/

                      main/

                             java/

                                    com/...

                             AndroidManifest.xml

               build.gradle

```


* build.gradleの内容は例えばこんな感じ

```
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android-library'

dependencies {
    compile 'com.android.support:support-v4:13.0.+'
}

android {
    compileSdkVersion 18
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 18
    }
}
```


* 依存側のAppのbuild.gradleのdependenciesに以下のように記述

```


dependencies {
    ...
    compile project(':SomeLibrary')
    ...
}

```


* プロジェクトルートのsettings.gradleにもincludeを追加

```
include ':App', ':SomeLibrary'

```

* File->Project Structure->LibraryでSomeLibraryを追加

Android Studioが認識するライブラリ名にルートフォルダの名前が反映されないので手動で変更が必要。