OmniAICreator/Qiita-1.07M huggingface dataset:
CloudFrontのLogとレスポンスヘッダー(X-Amz-Cf-Id)の関係

CloudFrontのログにはデバッグ用に、 **x-edge-request-id** という値が記録されている。
この値は、クライアントへのレスポンスヘッダ **X-Amz-Cf-Id** に含まれている

Cache-Controlの効果を確認したい場合等に、この値を用いることができる。

##例1.200のレスポンスがかえってきた

###ブラウザでの表示
![](http://cdn-ak.f.st-hatena.com/images/fotolife/i/iRSS/20140115/20140115173615_original.png?1389774988)


###Cloud Front Log

```
2014-01-14      09:22:12        NRT53   47712   221.241.204.19  GET     xxxxx.cloudfront.net   /xxxxx/xxxxx/34.js   200     -       Mozilla/5.0%2520(Windows%2520NT%25206.1)%2520AppleWebKit/537.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome/31.0.1650.63%2520Safari/537.36       -       -       Miss    qG6fVTZ0kN1tB20j6Deifl7_2HmcuVIgoivx3KcPkH15gVRQS0cA7A==        xxxxx.cloudfront.net
   http    420
```
| 項目名|データ |
|:-----------|:-----------|
| date(UTC)  |2014-01-14|
| time(UTC) |      09:22:12|
| edge location|NRT53|
|Server to client bytes, including headers|47712|
|Client IP,|221.241.204.19|
|HTTP access method|GET|     
|CloudFront distribution name specified in the request|xxxxx.cloudfront.net|
|URI stem|   /xxxxx/xxxxx/34.js|
|status code|   200|
|referrer.|     - |
| user agent|  Mozilla/5.0% ... xx ..31.0.1650.63%2520Safari/537.36|
| query string|       -|
| Cookie |       -|
|x-edge-result-type|       Miss|
| **x-edge-request-id** | **qG6fVTZ0kN1tB20j6Deifl7_2HmcuVIgoivx3KcPkH15gVRQS0cA7A==** |
|x-host-header|xxxxx.cloudfront.net|
| protocol |http|
|client to server bytes), including headers.|420|


##例2.304のレスポンスがかえってきた

###ブラウザでの表示
![](http://cdn-ak.f.st-hatena.com/images/fotolife/i/iRSS/20140115/20140115175623_original.png?1389776196)

###Cloud Front Log

```
2014-01-14      09:17:17        NRT53   386     221.241.204.19  GET     xxxx.cloudfront.net   /xxx/xxx/34.js   304     -       Mozilla/5.0%2520(Windows%2520NT%25206.1)%2520AppleWebKit/53
7.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome/31.0.1650.63%2520Safari/537.36       -       -       Hit     2hpuoFYsVsbvQLu7Zhekhea_S3izst-B3ourZF2l5b4L8eaWNppYHw==        xxx.cloudfront.net
   http    503
```


Logフォーマット詳細:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html


##おまけ：CloudFrontのLogの書き出しタイミング
1時間ごとに、バッチで書き出される模様。１ファイルにまとまる訳ではなくて、細切れにgzがたくさん生成される。たぶん、エッジサーバーごとにファイルが異なると予想。

###ファイル名のフォーマット

```
{bucket-name}.s3.amazonaws.com/{optional-prefix/}{distribution-ID}.{YYYY}-{MM}-{DD}-{HH}.{unique-ID}.gz
```

例

```
mylogs.s3.amazonaws.com/myprefix/EMLARXS9EXAMPLE.2012-07-01-20.RT4KCN4SGK9.gz
```
![](http://cdn-ak.f.st-hatena.com/images/fotolife/i/iRSS/20140115/20140115182105_original.png?1389777679)
こんな感じで1/14の8時(UTC)台 = 17時(JST)台のログが 19時(JST)台に細切れで生成される。

このログが１時間ごとのバッチで書き出される。```tail -f```したいと思うところですが、ちょっと無理ですね。
Test::Unitのassert一覧

Test::Unitを使っているんだけど`assert`のタイプ何があったっけなと毎回調べてるのでまとめておく

参照 : <http://ruby-doc.org/stdlib-2.1.0/libdoc/test/unit/rdoc/Test/Unit/Assertions.html>

大体こんだけ

    assert
    assert_block
    assert_equal
    assert_no_match
    assert_not_equal
    assert_not_nil
    assert_not_same
    assert_not_send
    assert_nothing_raised
    assert_nothing_thrown
    assert_raise
    assert_raise_with_message
    assert_respond_to
    assert_send
    assert_throw


使い方は下記

    assert(test, [failure_message])
    assert_block( failure_message = nil )
    assert_equal( expected, actual, failure_message = nil )
    assert_no_match( regexp, string, failure_message = nil )
    assert_not_equal( expected, actual, failure_message = nil )
    assert_not_nil( expression, failure_message = nil )
    assert_not_same( expected, actual, failure_message = nil )
    assert_not_send( +send_array+, failure_message = nil )
    assert_nothing_raised( *args, &block )
    assert_nothing_thrown( failure_message = nil, &block )
    assert_raise( *args, &block )
    assert_raise_with_message(exception, expected, msg = nil, &block)
    assert_respond_to( object, method, failure_message = nil )
    assert_send( +send_array+, failure_message = nil )
    assert_throw( tag, failure_message = nil, &block )
Mongooseでsaveがうまく行かなかったら


# markModified してみよう
findOneで取り出してきたドキュメントを編集してsaveした後確認してみると、ドキュメントが書き換わっていなくてしばらく頭を悩ませたあと、markModifiedしてみるとうまくいった。

```javascript
var mongoose = require( 'mongoose' );

var Document = new mongoose.Schema( {
	hoge: [ { type: Number } ]
} );

```

Document はこんな感じだとして、

```javascript
Document.findOne( query, function( error, doc ) {
	doc.hoge[ index ] = huga;
	doc.markModified( 'hoge' );
	doc.save();
} );
```

こんな感じ。本来markModifiedするべきなのはプロパティが Schema.Types.Mixed のときのようだが、今回は [ Number ] だったわけで、他にも同様にsaveしている所では問題になっておらず、詳しくは現在調査中といったところ。
Phalcon PHP インストール (CentOS 6.5)


## OSバージョン確認 

```bash
$ cat /etc/redhat-release 
CentOS release 6.5 (Final)
```


## gcc, php, php-devel のインストール

epelレポジトリ、remi レポジトリのインストール

```bash
$ sudo rpm -Uvh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/i386/epel-release-6-8.noarch.rpm
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
```

gcc, php, php-devel のインストール

```bash
$ sudo yum -y install gcc make
$ sudo yum -y install php --enablerepo=remi
$ sudo yum -y install php-devel --enablerepo=remi
```

確認

```bash
$ php -v
PHP 5.4.24 (cli) (built: Jan  9 2014 07:32:12) 
```


## Phalconソースの取得とインストール

git からソースをダウンロードするので、事前にgitのインストールが必要

```bash
$ git clone git://github.com/phalcon/cphalcon.git
$ cd cphalcon/build
$ sudo ./install
```

## php.iniの設定

/etc/php.d/phalcon.ini を作成し下記を記述

```bash
extension=phalcon.so

```

## インストールの確認

下記のように出力されればOK

```bash
$ php -i |grep Phalcon
Phalcon Framework => enabled
Phalcon Version => 1.2.5
```

### プロジェクトの作成

Phalcon DevToolsを使って作ります。
※ DevTools は別途インストールが必要
参考: http://qiita.com/inouet/items/9a3ed3f028916f89053c


```bash
$ cd /vagrant/
$ phalcon project phalcon-sample

Phalcon DevTools (1.2.5)

                                                         
  Success: Controller "index" was successfully created.  
                                                         
                                                               
  Success: Project "phalcon-sample" was successfully created.  
                                                               
```


下記のような構造になります。


```bash
$ tree phalcon-sample/
phalcon-sample/
├── app
│   ├── config
│   │   └── config.php
│   ├── controllers
│   │   ├── ControllerBase.php
│   │   └── IndexController.php
│   ├── logs
│   ├── models
│   └── views
│       ├── index
│       │   └── index.phtml
│       ├── index.phtml
│       └── layouts
├── index.html
└── public
    ├── css
    ├── files
    ├── img
    ├── index.php
    ├── js
    └── temp
```

## apache Vhostの設定

/etc/httpd/conf.d/vhost.conf に 設定
vagrant1 というホストでアクセスできるように設定します。

```httpd.conf
<VirtualHost *:80>

    ServerAdmin admin@example.host
    DocumentRoot "/vagrant/phalcon-sample/public"
    DirectoryIndex index.php
    ServerName vagrant1
    ServerAlias vagrant1


    <Directory "/vagrant/phalcon-sample/public">
        Options All
        AllowOverride All
        Allow from all

        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
    </Directory>

</VirtualHost>

```


http://vagrant1/ にアクセス

```
Congratulations!

You're now flying with Phalcon.
```
Jenkins で ActiveRecord / mongoid を用いた Rails プロジェクトのテストを複数同時に実行できるようにする


ActiveRecord や mongoid を用いたプロジェクトを Jenkins で実行する際、同じプロジェクトの spec テストを複数同時に走らせるとテストに失敗することがある。

これは、同じデータベースを複数のテストスクリプトが見てしまうのが原因なので、テストごとに異なるデータベースを見るようにする。

## DB 設定ファイルの書き替え

### ActiveRecord の場合

```yaml:config/database.yml
test:
  database: your_awesome_app_test<%= ENV['BUILD_TAG'] %>
```

### Mongoid の場合

```yaml:config/mongoid.yml
test:
  sessions:
    default:
      hosts:
        - localhost
      database: your_awesome_app_test<%= ENV['BUILD_TAG'] %>
```

## Jenkins が実行するシェルコマンドの書き替え

筆者は Jenkins に実行させたい処理をプロジェクトディレクトリ内にスクリプトファイルとして記述し、Jenkins のシェルスクリプト欄にはそのスクリプトの呼び出しのみを記述している。

```bash:script/jenkins-test.sh
bundle install --without production development
bundle exec rake all

# ActiveRecord の場合
RAILS_ENV=test bundle exec rake db:drop

# Mongoid の場合
RAILS_ENV=test bundle exec rake db:mongoid:drop
```

以上の設定を実施することで、テストの際にはビルドタグのついたデータベースが自動的に作成されるので、複数のビルドタスクが同一のデータベースを見てしまうことを防げる。
%記法


よく使う順

| 記法 | 例|結果 | 説明 |
|------+---+-----+------|
| %  | %{foo  #{Date.new}}  |"foo  #<Date:0x007fb7f225fd30>"  | ダブルクォート文字列                                               |
| %w | %w{foo #{"b" * 3}}   |["foo", "\#{\"b\"", "*", "3}"]   | 要素が文字列の配列(空白区切り) 式展開無効。                        |
| %W | %W{foo #{"b" * 3}}   |["foo", "bbb"]                   | 要素が文字列の配列(空白区切り)。式展開、バックスラッシュ記法が有効 |
| %r | %r{f.*}              |/f.*/                            | 正規表現                                                           |
| %q | %q{foo #{Date.new}}  |"foo \#{Date.new}"               | シングルクォート文字列                                             |
| %x | %x{pwd}              |"/tmp\n"                         | コマンド出力                                                       |
| %s | %s{foo #{"b" * 3}}   |:"foo \#{\"b\" * 3}"             | シンボル。式展開、バックスラッシュ記法は無効                       |
IFPHの12章のプログラムの動かし方

[IFPHのサポートページ](http://www.cs.ox.ac.uk/publications/books/functional/)に公開されている、12章のプログラムをHaskell Platform (ghc 7.6.3 , OS: Windows)でそのままでは動かなかったので、修正したところを公開します。

# 動かし方

テキスト中の例は、`Example.lhs`に記述されているので、それをロードして実行するのが手っ取り早いと思います。自分で、独自の計算をしたいときも、`Example.lhs`に習って書けば良いと思います。

```shell-session
ghci> :l Examples
ghci> ex6
```

# 修正箇所

MonadZeroが記述されていますが、すでに廃止されているようで、うまく動きません。MonadZeroの`zero`と`plus`を合わせたのが、`Control.Monad`で定義されている`MonadPlus`に当てはめれそうなので、そのように変更します。

```lhs:MyParseLib.lhs
> {- plusをmplusに変更
> module MyParseLib
>    (Parser, plus, orelse, item, many, some, manywith, somewith,
>     sat, char, string, digit, lower, upper, letter, alphanum,
>     ident, space, token, symbol, applyParser) where
> -}
> module MyParseLib
>    (Parser, mplus, orelse, item, many, some, manywith, somewith,
>     sat, char, string, digit, lower, upper, letter, alphanum,
>     ident, space, token, symbol, applyParser) where
> import Control.Monad

> {-
> instance MonadZero Parser where
>   zero = MkP f
>          where f s = []
>  -}
> {-
> plus :: Parser a -> Parser a -> Parser a
> p `plus` q = MkP f
>              where f s = papply p s ++ papply q s
> -}

> instance MonadPlus Parser where
>    mzero                      =  MkP (\inp -> [])
>    p `mplus` q = MkP f
>              where f s = papply p s ++ papply q s
>
```

後は、Functorのメソッドが`map`になっているのを`fmap`に、`isAlphanum`を`isAlphaNum`にします。それから、`isAlphaNum`は`Data.Char`に定義されているので、それもインポートすれば、`MyParseLib.lhs`のコンパイルは通るようになります。

```lhs:MyParseLib.lhs
> import Data.Char

> instance Functor Parser where
>   -- map f p = MkP g
>   fmap f p = MkP g
>             where g s = [(f x, s') | (x,s') <- papply p s]

> alphanum :: Parser Char
> -- alphanum = sat isAlphaum
> alphanum = sat isAlphaNum
```

後、コンパイルが通らなかったところは`Utilities.lhs`の`partitions`です。以下のように変更すると、コンパイルが通るようになります。

```lhs:Utilities.lhs
> partitions :: Int -> [a] -> [[[a]]]
> partitions 0 []     = [[]]
> partitions n []     = []
> partitions 0 _      = []
> partitions n (x:xs) = [[x]:yss | yss <- partitions (n-1) xs] ++
>      [(x:ys):yss | ys:yss <- partitions n xs]
```
修正したファイルは[ここ](https://gist.github.com/nnabeyang/8432074)に置いておきます。
無限に最下部までスクロールし続ける開発用コード

コンソールで実行するか、一時的にコードに追加する。

無限スクロールの試験等に。要jQuery or Zepto。

* http://jsfiddle.net/ginpei/xk2Nv/

```js
$('<div>')
.text('↓')
.css({ backgroundColor:'red', color:'white', padding:20, position:'fixed', left:0, top:0 })
.on('click', function(event) {
  var $el = $(event.currentTarget);
  var tm = $el.data('tm');
  if (tm) {
    clearInterval(tm);
    tm = null;
  }
  else {
    tm = setInterval(function(){ document.body.scrollTop = document.body.scrollHeight; }, 1000);
  }
  $el.data('tm', tm);
})
.appendTo('body');
```
How to Specify the Number of Columns to be used to Display Pages in Rubymine

Rubymine で一行の文字数を指定するには、[Preferences]...[Code Style]...[General]...[Right margin (columns)] のテキストボックスで指定します。
![名称未設定.png](https://qiita-image-store.s3.amazonaws.com/0/28376/1386382f-0eaf-6399-b898-05e14cd310b5.png)
参考 http://www.jetbrains.com/ruby/webhelp/general.html
Vim が 3回 inotify イベントを飛ばすので Guard がうるさい問題


## 背景

Guard を利用してファイル変更時のテスト実行を自動化しようとしたのだけれども、vim がファイル変更の際にイベントを3回も飛ばすものだから、`hoge.rb` をちょいと更新するとこんな感じに 3回テストが走る。

```
14:29:42 - DEBUG - Trying to run Guard::Rake#run_on_modifications with [“hoge.rb"]
14:29:43 - DEBUG - Trying to run Guard::Rake#run_on_additions with ["hoge.rb"]
14:29:45 - DEBUG - Trying to run Guard::Rake#run_on_removals with ["hoge.rb"]
```

このあたりを参考に。

- http://stackoverflow.com/questions/10300835/too-many-inotify-events-while-editing-in-vim
- https://github.com/guard/guard/commit/d78ecb45fb784b08c3823984eb04f5448c5ffc1e

トラッカーでは「対応したぜ」って雰囲気になっているのだが、残念ながら現在の Guard の公式実装ではこのあたりのコードがごっそり手が入っており有効ではない。というか実際の listnerr が Guard 本体から外に出てる気がするし。

## そんなわけで、アドホックに対応

3年前に Guard に一度導入された方式で考えます。つまり、inotify の反応するイベントを絞る方式です。

- http://rubygems.org/gems/listen

Linux上で使ってる Guard はこいつを参照しているようなので、直接 gem のコードを書き換えてしまうことにします。

`:close_wait` で grep してファイルを特定して、linux.rb を開きます。

```
vi ./vendor/bundle/ruby/1.9.1/gems/listen-2.4.0/lib/listen/adapter/linux.rb
```

12行目あたりの箇所を、以下のような状態から

```
      EVENTS = [:recursive, :attrib, :create, :delete, :move, :close_write]
```

このように変更してしまいましょう

```
      EVENTS = [:recursive, :move_self, :close_write]
```

男らしく属性変更も移動削除も追跡しない仕様に変更だ！

これで、vim でファイル変更しても 3回テストが走ることはなくなった。よかった！

`:create` とか `:move` を取ってないとファイルの追加削除に弱くなってしまうのでちょっとデリケートだけど、まあ、そのあたりは `guard-shell` 上で `r` とか打って貰うとして。

筋としては、同じファイルから短時間に連続してイベントが発生した場合とか、バッファリングした上で同じ内容のタスク実行はまとめてしまうような修正を Guard 側に行うのがよいんだろうな。Guard が思ったよりもでかいライブラリだったので日和ってしまいました。すみません。
Jsersyで文字化け

開発環境がWindowsでJerseyからJSPを表示させるとき、文字化ける。

## 前提条件

- Java, JSPのファイルエンコードはEclipseでUTF-8に指定
- JSPのメタタグは以下の用に指定
- eclipse.iniでファイルエンコードを指定し、コンパイル時に引き渡している

```jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>

</body>
</html>

```

```eclipse.ini

-Dfile.encoding=utf-8

```


### 原因

- Tomcatの実行時オプションを指定していなかったので、環境固有（MS932）になっていた

### 解決

- Tomcatの実行時オプションを指定(CATALINA_OPTS)

```

set CATALINA_OPTS=-Dfile.encoding=utf-8

```
Qiita でストックした投稿を Pocket に加える via IFTTT


自分のストックした投稿を、IFTTT を使って pocket に自動保存しましょう。
<!--more-->

Qiita のストックを「あとでよむ」的に使っていたのですが、Author さんの Contribution が消えてしまうことに気がつきました。
いろいろ申し訳ないので、Pocket と連携させます。


## ストック一覧を RSS 化する

IFTTT で扱える RSS 形式のデータを、[RSS Creater](http://rssc.dokoda.jp/) を利用して用意します。

> [Qiitaのストック一覧をRSS化する方法 - Qiita [キータ]](http://qiita.com/typista/items/35ddedc4c8cdec989857)


* [RSS Creater](http://rssc.dokoda.jp/)


### URL からコンバートする

お使いのアカウントのストック一覧 URL を入力します。

私の場合は、このような形式です。

`http://qiita.com/DriftwoodJP/stock`


![kobito.1389761311.432551.png](https://qiita-image-store.s3.amazonaws.com/0/19223/826c2994-6605-01ef-3b6b-fd1aadebbd89.png "kobito.1389761311.432551.png")


### RSS 化する範囲を指定する

編集画面に Qiita のストック一覧が現れます。

画面右の入力フォームに、下記の `XPath` を入力・リターンし、範囲を指定します。

```XPath
//div[@class='body']/h1/a
```

選択状況がプレビューされます。
「フィードを作成」をクリックします。

![kobito.1389762422.602793.png](https://qiita-image-store.s3.amazonaws.com/0/19223/4e23ef04-72ba-3d5c-d1cd-16d235e57895.png "kobito.1389762422.602793.png")

下記のようなフィードが得られます。

```
http://rssc.dokoda.jp/r/e1a7f5adf2086aba49ce00705fe6d90c/http/qiita.com/DriftwoodJP/stock
```


## IFTTT の設定をする

### Pocket を有効化する

Channels から、Pocket を選択し、有効化しておきます。


### レシピを追加する

「Popular Pocket Recipes」に表示される `Add new items from an RSS Feed to Pocket` というPocket謹製レシピを使います。

![kobito.1389763073.609356.png](https://qiita-image-store.s3.amazonaws.com/0/19223/dcca1dd0-7d70-6722-5509-fc0186690da6.png "kobito.1389763073.609356.png")


### レシピを設定する

先ほど取得した Feed URL とタグの設定などを行って、`Use Recipe` で完了です。

![kobito.1389763215.783803.png](https://qiita-image-store.s3.amazonaws.com/0/19223/473f394f-72b3-0b3b-15a4-0d819656b6eb.png "kobito.1389763215.783803.png")


## 補足

なお、Pocket に追加されるまでには、しばらく時間がかかります。
`IFTTT - MyRecipes - Activity` で、ログを確認できます。
Heroku Postgres Upgrade

# Heroku Postgresアップグレード

* [Using PG Backups to Upgrade Heroku Postgres Databases | Heroku Dev Center](https://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups)
* [HerokuのDBプランをあげる流れ - Qiita [キータ]](http://qiita.com/awakia/items/923f93d0610f2bb8086a)

### DB情報確認

```
heroku pg:info
```

### アップグレード

* 新プランDB作成

```
heroku addons:add heroku-postgresql:standard-yanari
```

* 新しいDBができるまで待つ

```
heroku pg:wait
----------
Waiting for database HEROKU_POSTGRESQL_COPPER_URL... available
----------
```

* メンテナンスON

※サイト停止

```
heroku maintenance:on
```

※workerがある場合のみ

```
heroku ps:scale worker=0
```

* 最新のDBの状態をバックアップとして取得

```
heroku pgbackups:capture --expire
```

* バックアップからDB状態をコピー

```
heroku pgbackups:restore HEROKU_POSTGRESQL_COPPER_URL
```

* 新しいDBに繋ぎ変え

```
heroku pg:promote HEROKU_POSTGRESQL_COPPER_URL
```

* メンテナンスOFF

```
heroku maintenance:off
```

※workerがある場合のみ

```
heroku ps:scale worker=1
```

* DB情報確認

```
heroku pg:info
----------
=== HEROKU_POSTGRESQL_COPPER_URL (DATABASE_URL)
Plan:        Standard Yanari
Status:      Available
Data Size:   6.4 MB
Tables:      0
PG Version:  9.3.2
Connections: 3
Fork/Follow: Temporarily Unavailable
Rollback:    Temporarily Unavailable
Created:     2014-01-15 05:40 UTC
Maintenance: not required

=== HEROKU_POSTGRESQL_CRIMSON_URL
Plan:        Hobby-dev
Status:      available
Connections: 2
PG Version:  9.3.2
Created:     2014-01-08 05:26 UTC
Data Size:   6.7 MB
Tables:      5
Rows:        0/10000 (In compliance)
Fork/Follow: Unsupported
Rollback:    Unsupported
----------
```

----

### 旧DB削除

```
heroku addons:remove HEROKU_POSTGRESQL_CRIMSON_URL
```
setup maven-android


####環境変数
export ANDROID_HOME=/opt/android_sdk_linux

####Maven Android SDK Deployer のインストール
git clone https://github.com/mosabua/maven-android-sdk-deployer.git
cd maven-android-sdk-deployer

####SDKをMavenリポジトリへインストール
mvn install -P 4.4

`mvn install`  では全てをインストールするので存在しないターゲットで失敗する。

####ExtraをMavenリポジトリへのインストール
cd extras

######必要なモジュールのみインストールする為にpom.xmlを編集
vi pom.xml

```
<modules>
  <module>compatibility-v4</module>
  <!--<module>compatibility-v7-gridlayout</module>-->
  <module>compatibility-v7-appcompat</module>
  <module>compatibility-v7-mediarouter</module>
  <module>compatibility-v13</module>
  <!--<module>analytics-v1</module>-->
  <!--<module>analytics-v2</module>-->
  <!--<module>admob</module>-->
  <module>gcm</module>
  <!--<module>google-play-services</module>-->
  <!--<module>google-play-services-for-froyo</module>-->
  <!--<module>play-licensing</module>-->
  <!--<module>play-apk-expansion</module>-->
</modules>
```
mvn install
playでtupleを使ったフォームの送信受信


playフレームワークでtupleで定義したフォームの項目を送信、受信する方法。
言語はscalaを使用。

##フォームの送信

###ビューの修正
フォームの作成

```.scala.html
<form action="/create/preview" method="get" >
<input type="text" name="id" />
<input type="text" name="val1" />
<input type="text" name="val2" />
<input type="text" name="val3" />
<input type="submit" value="送信">
</form>

```

項目として表示させない場合はhiddenで持つこと。
項目不足だとエラーになるので注意。


###コントローラの修正
フォームのインポート

```.scala
import play.api.data.Form
import play.api.data.Forms._

```

フォームを定義

```.scala
val form = Form( 
  tuple(
    "id" -> number,
    "val1" -> text,
    "val2" -> text,
    "val3" -> text
  )
)

```

フォームからの値受け取り

```.scala
val (id, val1, val2, val3) = form.bindFromRequest.get

```

##フォームの受信
###コントローラの修正

```.scala
Ok(views.html.index((1,"あああ","いいい","ううう")))

```

###ビューの修正

引数の設定

```.scala.html
@(form : (Int, String, String, String))

```

値の参照

```.scala.html
form._1
form._2
form._3
form._4

```
SublimeTextでPackage ControlのInstall Packageが使えない時の対処法

MacのSublimeText3でパッケージ管理してる時に、突然Install Packageが使えなくなった。

## 現象
![Package_Control_sublime-settings-8.png](https://qiita-image-store.s3.amazonaws.com/0/25574/7a321663-eef6-436d-0882-aa34b10cbb28.png "Package_Control_sublime-settings-8.png")
`KeyError`と出てInstall Packageが開かない。

## 原因
上記画像の通り、スペルミス。すっごい初歩的。
`add repository`でリポジトリを追加する際、間違ったURLで登録してしまった。
### 誤
github.cim
### 正
github.com

## 対処法
1.Finderを開き、下記の場所まで移動
`/Users/ユーザ名/Library/Application Support/Sublime Text 3/Packages/User`
※SublimeText2の場合は場所や名前が違うかも

2.`Package Control.sublime-settings`というJSONファイルがあるので、SublimeTextとかエディタで開く

3.以下のrepositoriesの中を修正
![Package_Control_sublime-settings-6.png](https://qiita-image-store.s3.amazonaws.com/0/25574/9bcb7809-1e97-1cec-7d34-650a67e634b6.png "Package_Control_sublime-settings-6.png")
今回はgithubのURLが間違っていたので、そこを修正し、上書き保存。

## おわりに
最初どうやって修正するかわからなかったが、なんとか自力で解決できた。
普段パッケージ管理はInstallPackageに依存しているので、たまにリポジトリの追加しようとするとこれだよ。やんなっちゃうね。
PS3のコントローラをUSB接続でubuntuで読む

xboxdrvをインストールする

```sh 
sudo apt-get install xboxdrv
```

PS3コントトーラををPCに挿して、PSボタンをおして有効にする

以下を実行

```sh
sudo xboxdrv --detach-kernel-driver
```

コンソールに出力が出てきたら成功(-sオプションで出力をなくせる)

`/dev/input/js0`とかにジョイスティックとして見えるので、あとは他のプログラムで読む
AWS-SDK for Node.jsでs3内のオブジェクトリストを取得する。


以下のような実装をしてみたら1000件までしか取得できない。
公式のドキュメントにも書かれており、Markerを使わないといけないようだ。

<pre>
params = Bucket: _bucket
s3.listObjects params, (err, data) ->
  return if err
  console.log data
</pre>

どーやって使えばいいんだ！？と調べていた所
data内のisTruncatedがtrueにも関わらずMarker及びNextMarkerがnullとなっていた。
バグなのかどうかは分からないが、返却されたobjectのmarkerをみてごにょごにょするといった形には使えないみたい。

とりあえず以下の書き方で1000以降のobjectも取得する事ができた。

<pre>
s3.listObjects(params).eachPage (err, data) ->
　return if err
　console.log data
</pre>
emacsでnode.jsのフレームワーク「express」を編集するためのjadeファイルのインデントの設定方法


１．% git clone https://github.com/brianc/jade-mode.git        をクローンしてくる。（ホームディレクトリでOK。）

２．	jade-mode/内にある。*.elとついたファイル全てをsite-lispにコピー。

※site-lispは/usr/local/share/emacs/site-lisp内にある。

３．.emacsに以下をコピー
(require 'sws-mode)
(require 'jade-mode)    
(add-to-list 'auto-mode-alist '("\\.jade$" . jade-mode))    


参考：http://www.goodpic.com/mt/archives2/2012/01/emacs_js2-mode_jade-mode.html
emacsでjavascriptのインデントを設定するjs2-modeの設定の仕方。


１．% git clone git://github.com/mooz/js2-mode.git
からデータをクローン。

２．% emacs --batch -f batch-byte-compile js2-mode.el
データをコンパイルする。

３．コンパイルされた、js2-mode.elc を emacsのsite-lispにコピー。emacs.el に以下を追記。

ーー
(autoload 'js2-mode "js2-mode" nil t)
(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))
http://d.hatena.ne.jp/hrendoh/20110907/1315410253
NiftyCloudのコンソールで「1つのサーバーに対して、複数のコンソールを起動することはできません。」

30秒、もしくは5分まてば接続できるようになるみたいです。

公式サイト：コンソールエラー内容
http://cloud.nifty.com/help/login/console_error.htm
NiftyCloudのコンソールで"startup failed:"とエラーが出て操作できない場合の対処法

公式サイトに解決方法が書いてありました。

「コンソールを起動すると「startup failed:」と表示され操作出来ない。」
http://cloud.nifty.com/cs/catalog/cloud_faq/catalog_130624001334_1.htm
How to make Rubymine working without minitest framework

Rubymine で Unit::Test とかを使わないようにするには、
[Preference]...[Inspections]...[Gems]...[Minitest support] のチェックを外せばオッケーです。多分。
![名称未設定.png](https://qiita-image-store.s3.amazonaws.com/0/28376/f734f2e0-048b-f651-57d8-bbcb951eff01.png)
Git系サービスまとめ？

とある案件で「Gitを使わないか？」という話になってきたのでとりあえず自分の知ってるGit系サービスのまとめ。ほかにもあるかも。あれば追記予定。

# GitHub
![github.png](https://qiita-image-store.s3.amazonaws.com/0/14499/2e12f1d2-b624-7749-14c1-47889f933e1d.png)

* [Github.com](https://github.com)
* [Wikipedia記事](http://ja.wikipedia.org/wiki/GitHub)
* [有料プランの説明ページ](https://github.com/pricing)

チケット管理システムも併設されており、リポジトリごとにチケットによる進捗管理、マイルストーンごとのチケット達成状況の確認などが出来る。

公開されたプロジェクトのフォーク(他人のプロジェクトを自分のリポジトリに登録し、派生開発を行う)が出来る。フォーク下プロジェクトの修正を元のプロジェクトに反映提案(プルリクエスト)が可能(プルリクエストはチケットと同じ画面で確認できる)。

プライベートなリポジトリの作成には有料プラン加入が必要。最低7ドル/月

有名なためかGitExtensionsなどのGitツールから直接参照できるプラグインもある。

# Bitbucket
![bitbucket.png](https://qiita-image-store.s3.amazonaws.com/0/14499/e1917e83-e2ca-4d36-0e84-b1e83cecf6fd.png)

* [Bitbucket](https://bitbucket.org/)
* [Wikipedia](http://ja.wikipedia.org/wiki/Bitbucket)
* [有料プランの説明ページ](https://confluence.atlassian.com/display/BITBUCKET/Plans+and+billing)

プライベートリポジトリを無料でいくらでも作成出来る。ただし、6人以上での共同開発をする場合は有料プラン加入が必要。最低10ドル/月

ページの日本語化が進んでいる。たまに翻訳が違うこともあるので注意が必要。

Githubと同様のチケット管理システムは搭載されているが、マイルストーンごとのチケット数集計機能などはない模様。

# codebreak;
![gitbreak.png](https://qiita-image-store.s3.amazonaws.com/0/14499/dd66013b-6459-a406-b276-53a51891362a.png)

* [codebreak;)](https://codebreak.com/mypage/)

和製サービス。gitBreakという名前だったと思いますがサービス体制の変更など色々あったようでわからなくなってしまいました。

実は使ったことがほとんどない(アカウントだけ持ってる)のだけど、基本的に無料(らしい)。プライベートリポジトリをいくら作るのも共同開発者を呼ぶのも無料。 ~~ただし、チケット管理システムのようなものは提供されていない(？)~~ リポジトリ内に一回でもコミットをすると、タスク管理やWikiなどが利用可能になります。他のサービスと違ってタスクに「開始予定日」と「期限日」が設定できるため、なあなあになってしまうことが少なくなるかも(ただしちゃんとタスク管理を読んでくれる人に限る)

和製サービスなので当然設定で日本語にすれば完全な日本語表示が可能

# 雑感

「パッと見てこの人はどれだけの活動をしている」というのは、Githubが一番分かりやすいな という感じ。コミットの状況がグラフで表示されるのでとてもわかりやすい。チケット管理もしっかりしているので、共同開発もかなりしやすいのかな と(まあ、チケット管理はよそでやるよ といってしまえばそれまでですが)。

Gitリポジトリ管理という面だけで言えば、GithubとBitbucketに大差はなさそう。気軽にプライベートリポジトリを使ってみたいのであればBitbucket、OSSをいじるのが主である場合や、開発情報のやりとりをしたい場合、パブリックなリポジトリだけで良い場合などはGithubという感じでしょうか。codebreakならではの長所は・・・ 今のところ思いつかなかった。ただ、逆に短所もあまり見当たりません(PCサイトの要求画面幅が一番大きくすぐ横スクロールバーが出るのが短所？)でした。

git自体は自分のサーバにセットアップすることも出来ますが、公開鍵の登録処理などリポジトリ管理以外の作業が多いため、直接使うのはちょっと難しい(Git-Labという管理システム付きのGit環境もあるそうですが)。よほど本格的に使うとか、コンプライアンス的な問題があるのでなければ上記サービスのようなものを使うのがよさそう。
[iOS]viewDidLayoutSubviewsの最後にはlayoutSubviewsを呼び出そう


# 症状

iOSアプリを開発していて、iPhoneシミュレータだとエラーもなく動くのに、実機で動かすとエラーがでた。
エラーの内容は、

```text:
Assertion failure in -[UIView layoutSublayersOfLayer:], …
```

を含むのは共通しているが、その後に続くエラーは様々のようだ。



# 解決策

これらのエラーは下記コードのように、ViewControllerのviewDidLayoutSubviewsメソッドの最後に、[self.view layoutSubviews]を呼び出すと実機でエラーなく実行できるようになる。
[self.view layoutSubivews]は必ず最後でなければならない。途中で呼び出してもエラーのままである（実体験）。

>追記：
>[self.view layoutSubview]よりも[self.view layoutIfNeeded]のほうが良さそうなので修正しました。
>情報をいただいたtomohisaotaさん、pebble8888@githubさん、usatieさん、ありがとうございました。

```objc:
-(void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    // レイアウトなどをいろいろいじる
    // …

    [self.view layoutIfNeeded]; // <- これが重要！
}
```

>参考： http://stackoverflow.com/questions/18429728/autolayout-and-subviews
RubyMine を Java 7 で動かす


RubyMine を Mac OS X にインストールし動かすと、Mac 標準の Java 6 が使われます。

`RubyMine.app/Contents/Info.plist` を Xcode で開いて `JVMVersion` を `1.6*` から `1.7*` に変更すると Java 7 が使われるようになりました。

![140115-0001.png](https://qiita-image-store.s3.amazonaws.com/0/2075/fecc5166-d84f-ef2b-9e4b-bac931924879.png "140115-0001.png")

オラクルのサイトからダウンロード & インストールした Java 7 が報われそうです。

方法は http://devnet.jetbrains.com/thread/437410 に書いてありました。
CIQ48のフィギュアを10体売る

問題： https://codeiq.jp/ace/joboffer_apli/q677

クエリ式とメソッド形式を混ぜるのは、邪道なんだろうな。

```csharp:Program.cs
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        var priceList = new[] { 0, 1, 6, 8, 10, 17, 18, 20, 24, 26, 30 };
        var all = Partition(10, 10, List.Empty).Select(x => x.AsEnumerable());
        var descending =
            from l in all
            orderby l.Select(x => priceList[x]).Sum() descending
            select l;
        Console.WriteLine(string.Join(",", descending.First()));
    }

    static IEnumerable<List> Partition(int number, int max, List list)
    {
        if (number == 0)
        {
            return Enumerable.Repeat<List>(list, 1);
        }
        return
            from i in Enumerable.Range(1, Math.Min(max, number))
            from c in Partition(number - i, i, list.Add(i))
            select c;
    }
}

class List
{
    public readonly int? Head;
    public readonly List Tail;
    private List(int? head, List tail)
    {
        this.Head = head;
        this.Tail = tail;
    }
    public static readonly List Empty = new List(null, null);
    public List Add(int head)
    {
        return new List(head, this);
    }
    public IEnumerable<int> AsEnumerable()
    {
        for (var i = this; i != List.Empty; i = i.Tail)
        {
            yield return i.Head.Value;
        }
    }
}
```
Ext.AjaxでRefererの書き換え(Phonegap + Sencha Touch 2)

## 目的

PhonegapからAjaxリクエスト時にRefererが変更できるかよくわからなかったので、実際に確認する。

通常は`setRequestHeader`を使用してヘッダを設定するのだが、

```js
xhr.setRequestHeader('Referer', 'Sample URL');
```

Sencha Touch 2 の`Ext.Ajax`の場合は、headersに指定すれば良い。

```js
var request = {
    url: 'http://ruquestUrl.dot',
    method: 'POST',
    headers: {
        Referer: 'http://refererUrl.dot/'
    }
};
Ext.Ajax.request(request);
```

## 結果

PhoneGapの場合、バージョンによってはRefererを変更できなかった。

実施環境 | 結果
--------| ---------
PhoneGap(iPad 5.1 Simulator) | 不可
PhoneGap(iPad 6.1 Simulator) | 可
Chrome(Win) | 不可
Safari(Mac) | 可
Railsのレスポンスをjsonに固定しながら、スタックトレースもログに残す

railsでAPIを作る時など、サーバエラーが起こっても、レスポンスが常に同じフォーマットのjsonなどであってほしかったりします。

例えば、成功時は以下のようなレスポンスになり、

```json
{
  "status": "ok",
  "code": 200,
  "content": {
    "id": 1
  }
}
```

失敗時は以下のようなレスポンスになるパターンの場合。

```json
{
  "status": "ng",
  "code": 500,
  "content": {
    "message": "エラーだよ"
  }
}
```

デフォルトだとサーバエラーが起こるとhtmlで出力されてしまいます。
こういう時も常にjsonで出力するためには、ApplicationControllerに以下の記述をします。

```ruby:app/controllers/application_controller.rb
rescue_from StandardError, :with => :error_500

def error_500
   render json: {status: "ng", code: 500, content: {message: "エラーだよ"}}
end
```

(特定のエラーのみに対処する場合は、StandardErrorではなく個別のエラーを指定することも可能です。)

こうすると500エラー時のレスポンスもコントロールできます。
しかし、このやり方には問題点があって、エラーを吸収してしまうのでなぜエラーを吐いたかがわからなくなること。

レスポンスのjsonはフォーマットに従いつつ、ログにはエラーとそのスタックトレースを残したいです。
例外をキャッチし、エラーメッセージをログに表示するようにerror_500を書き換えます。

```ruby:app/controllers/application_controller.rb

def error_500 e=nil
    logger.error e.message
    e.backtrace.each { |line| logger.error line }
   render json: {status: "ng", code: 500, content: {message: "エラーだよ"}}
end
```

例外クラスのmessageとbacktraceの中身を表示することで、ログにのみエラーの詳細を記述することができます。
.travis.yml には language が必要

いままでは .travis.yml に

```yaml
perl:
  - "5.18"
  - "5.8"
```

のように書いておけば Perl 5.8 と 5.18 で実行してくれていましたが、いつからか

```yaml
language: perl
perl:
  - "5.18"
  - "5.8"
```

のように `language` を指定しないと `perl` が無視されるようになっていました。 (ドキュメントにはちゃんと `language` を指定するようにと書いてありました。昔からそう書いてあったのかは知りません。)
【gnavi】位置情報をブラウザから取得し初期位置に反映するPart2

澤田さんのご協力により位置情報を反映出来ました！

```js:
<script type="text/javascript">
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
function (pos) {
document.getElementById('lat').value = pos.coords.latitude;
document.getElementById('lng').value = pos.coords.longitude;
ShowGMap();
},
function (error) {
var message = "";
switch (error.code) {
case error.POSITION_UNAVAILABLE:
message = "位置情報の取得ができませんでした。";
break;
case error.PERMISSION_DENIED:
message = "位置情報取得の使用許可がされませんでした。";
break;
case error.PERMISSION_DENIED_TIMEOUT:
message = "位置情報取得中にタイムアウトしました。";
break;
}
window.alert(message);
}
);
} else {
window.alert("本ブラウザではGeolocationが使えません");
}
</script>
```

次は初期位置にマーカーを配置する！のだがうーむ


```js:
<script type="text/javascript">
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
function (pos) {
document.getElementById('lat').value = pos.coords.latitude;
document.getElementById('lng').value = pos.coords.longitude;
var startLatlng = new google.maps.LatLng(pos.coords.latitude,pos.coords.longitude);
ShowGMap();
// ユーザのマーカーアイコンを変更
var markerImage = new google.maps.MarkerImage(
	// 画像の場所
	"../../../../images/startposition.png",
	// マーカーのサイズ
	new google.maps.Size(20, 24),
	// 画像の基準位置
	new google.maps.Point(0, 0),
	// Anchorポイント
	new google.maps.Point(10, 24)
);
// 現在地のマーカー表示
var marker = new google.maps.Marker({
	map:map,
	draggable:false,
	animation: google.maps.Animation.DROP,
	position: startLatlng,
	title: "現在地",
	icon: markerImage
});
},
function (error) {
var message = "";
switch (error.code) {
case error.POSITION_UNAVAILABLE:
message = "位置情報の取得ができませんでした。";
break;
case error.PERMISSION_DENIED:
message = "位置情報取得の使用許可がされませんでした。";
break;
case error.PERMISSION_DENIED_TIMEOUT:
message = "位置情報取得中にタイムアウトしました。";
break;
}
window.alert(message);
}
);
} else {
window.alert("本ブラウザではGeolocationが使えません");
}
</script>
```

これに変更してみたができず。。。うーん
zawでzshを便利に使う

zawを使うとファイルオープン、ディレクトリ移動などがかなり簡単になる。

# 前提
* perl インストール済み
* zsh インストール済み
* OSX 環境

# 準備
perlを入れておく。

zawを公式から clone してくる。

```
$ mkdir ~/zsh_plugins
$ cd zsh_plugins
$ git clone git://github.com/zsh-users/zaw.git
```

```zsh:.zshrc
source ~/zsh_plugins/zaw/zaw.zsh
bindkey '^[d' zaw-cdr
bindkey '^[g' zaw-git-branches
bindkey '^[@' zaw-gitdir

function zaw-src-gitdir () {
  _dir=$(git rev-parse --show-cdup 2>/dev/null)
  if [ $? -eq 0 ]
  then
    candidates=( $(git ls-files ${_dir} | perl -MFile::Basename -nle \
                                               '$a{dirname $_}++; END{delete $a{"."}; print for sort keys %a}') )
  fi
  actions=("zaw-src-gitdir-cd")
  act_descriptions=("change directory in git repos")
}

function zaw-src-gitdir-cd () {
  BUFFER="cd $1"
  zle accept-line
}
zaw-register-src -n gitdir zaw-src-gitdir

```

zsh-gitdir については、
http://d.hatena.ne.jp/syohex/20120624/1340550154
の syohex さんのコードを使わせていただきました。ありがとうございます。

bindkey はご自由に。
Emacser 的に Ctrl+hoge は避けたいので、ここでは `^[` とすることで、Meta+hoge としている。

Meta は、 `Ctrl+[` か Esc に該当。
iTerm2 ユーザなら、[Preferences]->[Profiles]->[Keys]->(Left|Right) options... を +Esc にすれば、optinon キーが Meta キーとなる。
(この設定は、 Emacs を emacs -nw で起動した場合にも有効なので Emacser は是非覚えておこう)

# 使い方
任意のディレクトリで、

* Meta+d で cdr で履歴管理されているディレクトリ一覧が表示され、選択すると移動。

git 管理下のディレクトリで、

* Meta+g で git のブランチ一覧表示、選択すると checkout
* Meta+@ で カレントディレクトリが含まれる git 管理下(カレントより親も含む)のディレクトリ一覧表示、
選択すると移動

# 補足
cdr の設定はこんな感じにしている

```zsh
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
add-zsh-hook chpwd chpwd_recent_dirs
zstyle ':chpwd:*' recent-dirs-max 5000
zstyle ':chpwd:*' recent-dirs-default yes
zstyle ':completion:*' recent-dirs-insert both
```

zaw はまだまた使いこなせてないので、便利な機能、設定があれば、是非コメントぶら下げてください。
S2JDBCの外部SQLファイルのIF文にELSEを書く方法


ELSEコメントは、IFコメントとENDコメントの間に行コメントとして埋め込みます。

```
/*IF jobType != null*/
jobType = /*jobType*/'CLERK'
-- ELSE jobType is null
/*END*/
```

## 参考

[Seasar2 - S2JDBC - JdbcManager - SQLファイルによる操作](http://s2container.seasar.org/2.4/ja/s2jdbc_manager_sqlfile.html)
Vimのbad-whitespaceプラグインで特定拡張子に警告を無視したい


末尾のホワイトスペースを赤字で警告してくれるVimのプラグイン
[bad-whitespace](http://www.vim.org/scripts/script.php?script_id=3735)
で特定の拡張子に対し警告を無効にしたい場合の対処方法

例：拡張子emlの場合

```
autocmd FileType mail exe ':HideBadWhitespace'
```

でOK。


### FileTypeの調べ方
適当に
`vim hoge.eml`
でVimを開き、
`set filetype `
とやると
`filetype=mail`
などと出ます。

## 参考
[Call a function in Vim’s `autocmd` command - Stack Overflow](http://stackoverflow.com/questions/1766336/call-a-function-in-vims-autocmd-command)
ngCheckedの変更がngModelにバインドされない

ngCheckedを使ってチェックボックスの連動をさせると、表示上はチェックが入るがngModelにはtrue/falseが反映されない。
反映元のngChangeを拾ってJavaScript側で書けば回避できるが、なんか釈然としない。(そもそもngCheckedはそういう風に使うもんではないのかもちれんが)

```html:親しか変更が反映されない
<!DOCTYPE html>
<html lang="ja" ng-app="testApp">

<head>
<meta charset="utf-8">
<title>ngModelとngCheckedの動作チェック</title>
</head>

<body>
<div ng-controller="testCtrl">
	<form novalidate>
		<input type="checkbox" ng-model="checkbox.parent">親<br>
		<input type="checkbox" ng-model="checkbox.child" ng-checked="checkbox.parent">子<br>
		{{checkbox|json}}<br>
	</form>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.min.js"></script>
<script>
var testApp = angular.module('testApp', []);
testApp.controller('testCtrl', function ($scope) {
	return false;
});
</script>
</body>

</html>
```

```js:scriptを追記すれば反映される
var testApp = angular.module('testApp', []);
testApp.controller('testCtrl', function ($scope) {
	$scope.setChildCheckbox = function(){
		$scope.checkbox.child = $scope.checkbox.parent;
		return false;
	};
	return false;
});
```
Vimでカーソル配下の文字コードを取得


ノーマルモードで`ga`または
コマンドモードの`:as`で取得可能


```
:as[cii]                                                ga :as :ascii
ga                      カーソル位置の文字の文字コードを、10/16/8 進数で表示し
                        ます。カーソルが 'R' の上にあるときは次のように表示さ
                        れます:
                                <R>  82,  Hex 52,  Octal 122
                        ASCII 以外の文字がオプション 'isprint' に設定されてい
                        て、表示可能になっている場合には、特殊な表示形式もいっ
                        しょに表示されます。文字コードが 127 より大きいときに
                        は <M-x> という形式も表示されます。例:
                                <~A>  <M-^A>  129,  Hex 81,  Octal 201
                                <p>  <|~>  <M-~>  254,  Hex fe,  Octal 376
                        (<p> には実際の特殊文字が表示されます。)
                        ファイル中の <Nul> 文字は内部的には <NL> として保存さ
                        れていますが、次のように表示されます:
                                <^@>  0,  Hex 00,  Octal 000
                        合成文字も表示されます。'maxcombine' の設定は影響しま
                        せん。
                        覚え方: Get Ascii value (ASCIIコードを取得)
```

## 覚え方
Get Ascii value


## 参考
`:help ga`

## その他
ファイル全体で調査したい場合はVim付属の`xxd`コマンドでも調査可能。
PHPで全角スペースのtrimがうまくできない時に試すこと

##忘備録メモ

PHPでは通常スペースを取るときtrimを使いますが、それでは半角スペースしかtrimできません。
そこで全角スペースをtrimしたいときは変則的に全角スペースを半角スペースに変換してからtrimしたりします。

その有名な方法の一つとして、mb_convert_kana を使う方法があります。

```php
trim(mb_convert_kana($text, "s"));
```

その際にハマったのが、場合によって文字コードまで指定しないとうまく動作しない時があること。
上記でうまく動かない場合は文字コードを直接指定してみましょう。

```php
trim(mb_convert_kana($text, "s", 'UTF-8'));
```
SQL Server 8115: 「expression をデータ型 int に変換中に、算術オーバーフロー エラーが発生しました。」の傾向と対策

この記事は昔書いた記事をブログから移行したものです。

表題のエラーで悩んだので悩んだ過程をメモしておきます。

この問題の原因は、

* SQL Server（だけに限らず他のRDBMSでも）では、暗黙の型変換が行われる
* 演算を行う場合、最大精度の型に合わせて演算が行われる

という特徴です。つまり、このエラーが発生する最も簡単なSQLは以下のようになります。

```sql
SELECT 46340 * 46340; -- OK!
SELECT 46341 * 46341; -- Error
```

これは、46341がintと解釈され、intとintの演算結果がintの範囲（-2,147,483,648～2,147,483,647）に収まりきらないためエラーになります。SQL Serverには明示的な型変換のためのCAST関数が用意されていて、

```sql
SELECT CAST(46341 AS BIGINT) * 46341; -- OK!
```

とすることで、bigintとintの演算となり、結果は最大精度のbigintになるためエラーになりません。また、

```sql
SELECT CAST(46341 * 46341 AS BIGINT); -- Error
```

のような書き方もエラーです。これも最初の特徴にあてはめて考えると、intとintの演算を先にしてしまうのでエラーになるのは自明ですね。。
文字区切りテキストを org-mode の表に変換

昔は自前でAWKスクリプトを買いていたのですが、少し前に変換機能あるんじゃないかとか思ったらやっぱりありました。
毎回忘れるのでメモとして残しておきます。

```
x y z
1 3 5
2 5 1
3 10 3
```

リージョンを選択して、 `C-c |` ショートカットで、

```
| x |  y | z |
| 1 |  3 | 5 |
| 2 |  5 | 1 |
| 3 | 10 | 3 |
```

と表形式になりました。


参考というかそのもの: http://stackoverflow.com/questions/1241581/emacs-import-a-csv-into-org-mode
スコープでリソースを破棄するいろいろなやりかた


#RAII(C++)

wikipediaから参照。デストラクタが自動変数の破棄によってよびだされて、そのときにリソースのcloseを行う。closeのAPIが例外を出さないことが前提。perlのguard系モジュールとかもそう。

```c++
void functionA()
{
    LogFile log("Output log of functionA");
 
    log.write("fun Step succeeded");
 
    // ... logを使い続ける ...
    // 例外が送出されようと、関数からreturnが行われようと確実にlogのファイルハンドルは閉じられる。
}
```
#with句(python)
昔は無かったけど、増えた。

```python
with open("hello.txt") as f:
    for line in f:
        print line
```

#proc受け取り(ruby)

closureを受け取り、その関数の実行前後でリソースの確保と破棄を行う。

```ruby
open("foo.csv") {|file|
  while l = file.gets
    lines += 1
    fields += l.split(',').size
  end
}

```

#using句(C#)
c#はwith見たいのがあるよ。

```
// Disposeメソッドを実装しておけば、using抜けた後に使える

using (StreamWriter writer = 
                new StreamWriter("memo.txt", false, Encoding.UTF8))
{
    writer.Write("テキスト");
}
```

#scope(D-lang)

scopeのあとの関数が、脱出時に評価される。

```d
void abc()
{
    Mutex m = new Mutex;

    lock(m);	// mutexをロック
    scope(exit) unlock(m);	// スコープ終了時にアンロック

    foo();	// 処理を行う
}
```

#defer(go-lang)

scopeと似てる

```go
    f, err := os.Open(filename)
    if err != nil {
        return "", err
    }
    defer f.Close()  // f.Closeは、完了時に実行される
```

#try-with-resources構文(java)

AutoCloseableのInterfaceを実装しているものを閉じてくれる。
(tsuyoshi_choさんありがとうございました)

```java
    public static void main(String[] args) {
        try (AutoCloseable imp = new AutoCloseableImpl()) { // New!
            System.out.println("hoge");
        } catch(Exception e) {
            System.out.println("catch:" + e);
        } finally {
            System.out.println("finally");
        }
    }
```
#synchronized(Java)
オブジェクトのロックの獲得管理が、構文でできる。

```java
class MyObject {
  int val;

  MyObject(int val) {
    this.val = val;
  }

  synchronized void setVal(int val) {
    this.val = val;
  }

  synchronized int getVal() {
    return val;
  }
}
```

とりあえず、なんか思い出したら追記します。
アコーディオンパネル（その１）


$(function() {
  // ここに入れる
//最初以外を隠す
$(‘答えクラス’).hide();
//クリックイベント
$(‘質問クラス’).click(function() {
     //スライドの処理
    if($(this).next(‘答えクラス’).is(':visible')) {
        $(this).next(‘答えクラス’).slideUp(300);
    } else {
        $(this).next(‘答えクラス’).slideDown(300).siblings(‘答えクラス’).slideUp(300);
    }
});​

});


$(function() { });
を入れて、ページを全て読み込んでからと宣言しないと、実行が早すぎてブラウザ上で反応しない。
cf.window.onload = function{}
S2JDBC SQLファイル使用時のLike検索時のエスケープ


SQLファイルを使用しLIKE検索を行う場合、パラメータに「%」や「_」が含まれていると、エスケープしないと正しく検索ができない。

### エスケープ方法

SQLファイルへ渡すパラメータを、LikeUtil#escapeWildcardescapceを使用してエスケープする。
このメソッドを使用すると、「%」 が 「$%」へエスケープされる。

```java
String param = LikeUtil.escapeWildcard(param);

// “ abc%def “ という文字列の場合は、 “ abc$%def “に変換される。
```

SQLでは下記のように、LIKE構文に続いて「ESCAPE ‘$’」を記載しておくことで、パラメータが正しく解釈され正しい検索が行える。

```SQL
CUSTOMER_NAME LIKE /*param*/ ESCAPE '$'
```

ちなみに、SQL自動生成の場合はS2JDBCがエスケープしてくれるので、何もしなくてもよい。
sshkitを単体で使ってみる



[capistrano3](http://capistranorb.com/)でよく使うrun_locallyやon hostsなどのDSLは、capistranoが内部で使っている[sshkit](https://github.com/capistrano/sshkit)が提供しています。

capistranoのようにデプロイに特化しているわけでもないけど、localとremoteを簡単に区別し、さらに複数台相手に同じ処理をさせたい場合などに、sshkitは使えると思います。。

githubにgetting started的なものがないので、コードを見ながらサンプルを書いてみました。

```ruby:Gemfile
source 'https://rubygems.org'
gem 'sshkit'
```

```ruby:sshkit_sample.rb
require 'sshkit'
require 'sshkit/dsl'

SSHKit.config.output_verbosity = Logger::DEBUG

remote_host = SSHKit::Host.new('192.168.20.10')
remote_host.user = "vagrant"
remote_host.ssh_options = {
  keys: %w(./id_rsa),
  auth_methods: %w(publickey)
}

on remote_host do
  execute :ls
end

run_locally do
  execute :whoami
end
```

実行結果
> $ ruby sshkit_sample.rb
 INFO [21c7bce1] Running /usr/bin/env ls on 192.168.20.10
DEBUG [21c7bce1] Command: /usr/bin/env ls
 INFO [21c7bce1] Finished in 0.182 seconds with exit status 0 (successful).
DEBUG [21c7bce1]        apt.sh
DEBUG [21c7bce1]        build_time.sh
DEBUG [21c7bce1]        cleanup.sh
DEBUG [21c7bce1]        sudo.sh
DEBUG [21c7bce1]        vagrant.sh
DEBUG [21c7bce1]        vbox.sh
 INFO [21c7bce1] Finished in 0.182 seconds with exit status 0 (successful).
 INFO [69ec5244] Running /usr/bin/env whoami on
DEBUG [69ec5244] Command: /usr/bin/env whoami
DEBUG [69ec5244]        cazador
 INFO [69ec5244] Finished in 0.006 seconds with exit status 0 (successful).


ちなみにon hogehogeやrun_locallyの実装は[sshkit/dsl.rb](https://github.com/capistrano/sshkit/blob/master/lib/sshkit/dsl.rb)にあります。

公式に[サンプル](https://github.com/capistrano/sshkit/blob/master/EXAMPLES.md) があるので、参考になると思います。
SAStrutsでAjax使用時に、アノテーションの入力チェックエラーメッセージをJSONで返す


SAStrutsでは、Formのプロパティにアノテーションを付与することで入力チェックが行えるが、Ajaxを使用する場合としない場合で実装方法を変える必要がある。

# Ajaxを使用しない場合

Actionのメソッドに、入力チェックエラー時に遷移するJSPを指定する。

```java
@Execute(validator = true, input = "index.jsp")
public String add() {
//処理
}
```
JSPでhtmlタグを使用することで、エラーメッセージを表示できる。

```jsp
<html:erros/>
```

# Ajaxを使用する場合

Ajaxを使用する場合は、JSPへの遷移が発生しないため、JSONでエラーメッセージを返す。

Actionのメソッドには、入力チェックエラー時に呼び出す「Actionのメソッド名」を指定する。
アノテーションによる入力チェックエラーが発生した場合は、ここで指定したメソッドが呼ばれるようになる。

```java
@Execute(validator = true, input = "handlingError")
public String add() {
//処理
}
```

エラー時に呼び出し先として指定したエラーハンドリング用のメソッドを追加する。
ここでは、入力チェックエラー発生時にフレームワークによって格納されたエラーメッセージを取得し、JSON形式で返している。

```java
@Execute(validator = false)
public String handlingError() {

	// Requestからエラーメッセージを取得する
	HttpServletRequest request = RequestUtil.getRequest();
	ActionMessages errors = (ActionMessages) request.getAttribute(Globals.ERROR_KEY);

	List<String> messageList = new ArrayList<String>();

	//エラーメッセージを取り出して、Listに設定
	Iterator iterator = errors.get();
	while (iterator.hasNext()) {
		ActionMessage message = (ActionMessage)iterator.next();
		String msg = MessageResourcesUtil.getMessage(message.getKey(),message.getValues());
		messageList.add(msg);
	}
	
	//リストをJSON形式に変換して、クライアントに返す。
	//JSON変換には、JSONICを使用している。
	ResponseUtil.write(JSON.encode(messageList));
	return null;
}
```

このように記載することで、クライアントにはエラーメッセージがJSON形式で返されるので、JavaScriptで適切にエラー表示を行う。
StuffItExpanderでもTheUnarchiverでも解凍できないzipはunzipコマンドで解凍しよう。


Winを使っている時にZipパスワードに対して個人的に最も有効だと思っていたStuffItExpanderで解凍できないzipファイルと出会ったのでメモ
※ 結果的にパスワードはかかってませんでした。

デフォルト解凍 → 解凍アプリ終了（エラーも出ない）

StuffItExpander → 破損ファイル扱い

TheUnarchiver → 解凍アプリ終了（エラーも出ない）

unzip → なんのことはなく解凍できた！

```shellscript:bash
$> unzip myzip.zip
```
coffeescript/ harmonyのdestrucutring assignmentをperlでやる。


cpanizeはしてないけど、とりあえずgithubにはあげた。
https://github.com/hirokidaichi/p5-Data-Destructuring-Assignment

分割代入ってなにかというと"分割"して "代入"できるという機能です。

```coffeescript
futurists =
  sculptor: "Umberto Boccioni"
  painter:  "Vladimir Burliuk"
  poet:
    name:   "F.T. Marinetti"
    address: [
      "Via Roma 42R"
      "Bellagio, Italy 22021"
    ]
// １行で変数に構造を写像できる
{poet: {name, address: [street, city]}} = futurists

```

詳しくは
http://coffeescript.org/#destructuring
ここを参照

これが慣れてくると以外と便利なんだけど、
perlの黒魔術で実現したいなと言うことで、皆さん大好きlvalueとtieを使って、次のようなことができるモジュールを作ってみた。




```perl

destruct([\my $hoge,\my $fuga]) = [10,20];
print "hoge is $hoge";# hoge is 10
print "fuga is $fuga";# fuga is 20
```

こんな風に左辺に構造をもって、右辺の構造とマッチングして、代入することができます。

```perl
destruct( \my $hoge ) = 10;
```

変数はリファレンスで渡してください。

```perl
destruct( [\ $a ,\ $b] ) = [$b,$a];
```

swapもこんなに簡単。

```perl

destruct( { hash => \my $hash } ) = { hash => [1,2,3]};

```

hashrefもできます。

```perl
my @array =  map{ +{ hoge => "$_",fuga => $_ * 2}} (1..10);

while(destruct({ hoge => \my $hoge } ) = shift @array) {
    # $hoge..;
}
```

while句の中で。

```perl
my @array =  map{ +{ hoge => "$_",fuga => $_ * 2}} (1..10);
for my $elem (@array){
    destruct({ hoge => \my $hoge, fuga => \my $fuga}) = $elem;
}
```

for文とともに

```perl
my $template = { hoge => 1,fuga => 2};
if( destruct({ hoge => \my $hoge ,piyo => \my $fuga }) = $template ){
    ::pass 'matched any';
}else {
    # not come here
}
```
if文の中ではこう。一個でもmatchするとtrueです。
メルマガを全部オフにしたいとき


設定画面に飛んだら信じられない数のチェックボックス、、、心が折れそうになる。
ふつうの`checkbox`だったら下記をぺっとブラウザのConsoleに貼れば良いでしょう。
なんか表側は`checkbox`じゃないやつとかありますが、値保持しているのは`checkbox`だったりするので、いけたりするかも？

jQueryはいまどき入ってサービスの方が多いと思いますので。

```
$("input[type=checkbox]").attr('checked', false)
```

とはいえ、他の`checkbox`への副作用あると思うので、自己責任でやりましょう！

全部オフをおいてくれヾ(*｀Д´*)ﾉ”
じゃないと退会するぞ。
めんどくさいExcel週報をRubyスクリプトでサクッとメール送信する

#動機
いまだにExcelで作成した週報を毎週メールで提出していて、めんどくさい。

#やること

1. Excelで作成した週報のファイル名末尾に日付を付加する
1. サブジェクトにも日付を付けExcelファイルを添付する
1. 定型文を書いて特定の宛先にメール送信する

これを、
`ruby send_weekly_report.rb yyyymmdd`
こんな感じで実行したい。

#メール送信の方法
[Mail](https://github.com/mikel/mail/)というgemがあり、[ここ](http://qiita.com/KitaitiMakoto/items/688d383dc831c8b9a7f9)とか[ここ](http://www.school.ctc-g.co.jp/columns/masuidrive/masuidrive07.html)の説明がわかりやすかった。
UTF-8でなくISO-2022-JPで送信したい場合は、[mail-iso-2022-jp](https://github.com/kuroda/mail-iso-2022-jp)というgemを使う。

#コード

```send_weekly_report.rb
# encoding: utf-8

require 'mail-iso-2022-jp'
require 'fileutils'

if ARGV.length != 1 then
  abort "引数の数が正しくありません。\nruby send_weekly_report.rb yyyymmdd"
end

yyyymmdd = ARGV[0]

title = '週報'

# 週報ファイル名に日付を付加してコピーする
attachment_file = "#{title}_#{yyyymmdd}.xlsx"
FileUtils.cp("#{title}.xlsx", attachment_file)

@mail = Mail.new(:charset => 'ISO-2022-JP') do
  to 'manager@example.com'
  cc 'ceo@example.com'
  from 'your_name@example.com'
  add_file attachment_file
  subject "#{title}#{yyyymmdd}"
  body <<-EOS
○○様

お疲れ様です。××です。

週報を添付ファイルにて送付いたします。
ご確認のほどよろしくお願いいたします。
  
  EOS
end

@mail.delivery_method :smtp, {
  address:   'smtp.gmail.com',
  port:      587,
  domain:    'example.com',
  authentication: :plain,
  enable_starttls_auto: true,
  user_name: 'your_name@example.com',
  password:  'p455w0rd'
}

@mail.deliver!

```

#補足
* パスワードをハードコードしたくない場合は、[ここ](http://qiita.com/mirakui/items/88194612bb0fa705e39d)を参考にして、標準入力から取得する。
* 提出日が金曜日固定ならコマンドライン引数に渡さずコード上で取得してもいいけど、だいたい金曜当日は忘れてたりするので、月曜にも送信できるように、、、。
powがrbenvを使ってくれない件について

環境を整理したついでにまっさらな状態からrbenvを入れ直したんだけど、[pow](http://pow.cx/)がシステムのrubyを使ってしまうようになって困った。
.ruby-versionを書けばいいんだけど、これはあくまでpowが既にrbenvを見ている状態での話。
rbenv global 2.1.0とかしているのにシステムのrubyを見に行っているとしたら.ruby-versionは関係ない。
~/.bash_profileに

```sh:.bash_profile
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
```

と書いてあってもダメ。
結論としては、~/.powconfigでrbenvのパスを通す。

```sh:.powconfig
export HOME=/Users/hoge
export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:/usr/local/bin:$PATH"
```

他のアプリの動作とか見ても、どうも$HOMEが入ってない気がする。mavericksだから？
MacでPleiadesを使ってeclipseを日本語化する

※ブログに詳しく書いてます。  
http://www.utano.jp/entry/2014/01/eclipse_japanese_localization_for_mac

## 1. eclipseをダウンロード
http://www.eclipse.org/downloads/



## 2. Pleiades（JREなし）をダウンロード
http://mergedoc.sourceforge.jp/

eclipseのバージョンにあったものを。今回はKepler(4.3)で。



## 3. Pleiadesのフォルダをeclipse本体に上書き

Pleiadesのdropinsフォルダを、eclipse本体の同フォルダに上書きする。


## 4. eclipse.iniを編集

Eclipse.app/Contents/MacOS/eclipse.iniに、下記の２つの起動オプションを追加。

```
-Dfile.encoding=UTF-8
-javaagent:../../../dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
```



## 5. eclipseをターミナルから起動

（/Applications/配下にeclipseフォルダがあるとして）
ターミナルにて、/Applications/eclipse/eclipse -cleanを実行して起動。（初回のみ。2回目以降は通常どおり起動でOK）

- - -
> Blog URL : http://www.utano.jp/ (Syntax Error.)