OmniAICreator/Qiita-1.07M huggingface dataset:
vagrantでnginxでのlamp環境作ってみた

# 取得の方法
https://github.com/MiyaseTakurou/vagrant-nginx-lamp

##　Githubページ

git clone
`git clone https://github.com/MiyaseTakurou/vagrant-nginx-lamp.git`


# 立ち上げ方

`vagrant up` 後にsynced_folderを反映させるため `vagrant reload`

# 構成

php5
mysql
nginx
phpmyadmin

# データベース
ユーザー:root
パスワード:root

# アクセス方法

基本URL
URL:http://local.dev
パス：/vagrant/www/public

phpmyadminURL
URL:http://local.dev/phpmyadmin
パス：/usr/sher/phpmyadmin

cakephpURL
URL:http://local.dev:8080
パス:/vagrant/www/cake-app
Rubyで短縮URLを展開する


HTTPレスポンスがリダイレクトであればLocationヘッダを読んでいます。
短縮URLがネストしている場合にも対応すべく、再帰的に処理しています。

```ruby:
require 'net/http'
require 'uri'

def expand_url(url)
  begin
    response = Net::HTTP.get_response(URI.parse(url))
  rescue
    return url
  end
  case response
  when Net::HTTPRedirection
    expand_url(response['location'])
  else
    url
  end
end

puts expand_url("http://bit.ly/ICFCzV")
```
メモ：Androidのgradleのビルド時に処理を割り込ませたいとき

例えばassembleReleaseの実行の前にhogeHogeTaskを実行したときは
doFirstじゃなくてgradle.projectsEvaluatedを使うと良いらしい。

```groovy

gradle.projectsEvaluated {
    assembleRelease.dependsOn(hogeHogeTask)
}

```

↓参考にしたもの
http://stackoverflow.com/questions/20841598/gradle-custom-task-order-on-android
Android上でのOpenCLの現状

Android上でOpenCLは使えるのか使えないのか調べてみました。

## まとめ

* Googleとしては今後OpenCLをサポートする気はない
 * OpenCLの代わりに[RenderScript](http://developer.android.com/guide/topics/renderscript/compute.html)使えという方針
* Google以外の端末はOpenCLサポートしているものが多い
 * 参照：http://arrayfire.com/opencl-on-mobile-devices/
 * NexusシリーズでもlibOpenCL.soを自力で持ってくれば使えるらしい

## 実機で調査

libOpenCL.soが存在するか実際に調べてみました。

* Nexus5+Android4.4 なし
* Nexus7(2012)+Android5.0 なし

気が向いたら他も調査しますが、http://arrayfire.com/opencl-on-mobile-devices/ の追試でしかないので、意味ないかな…

## 参考URL

* [Google blocked OpenCL on Nexus with Android 4.3 - Blog - StreamComputing](http://streamcomputing.eu/blog/2013-08-01/google-blocked-opencl-on-android-4-3/)
* [RenderScript | Android Developers](http://developer.android.com/guide/topics/renderscript/compute.html)
* [Issue 36361 - android - Support for OpenCL - Android Open Source Project - Issue Tracker - Google Project Hosting](https://code.google.com/p/android/issues/detail?id=36361)
* [OpenCL on Mobile Devices | ArrayFire](http://arrayfire.com/opencl-on-mobile-devices/) 
* [How to enable OpenCL on Nexus 5](https://maxlv.net/how-to-enable-opencl-on-nexus-5/)
FuelPHPの技術メモ

FuelPHPで嵌った内容をメモ書き程度に記録

## Controller
###遷移元のアクションの取得方法

[FuelPHPで気になるあの情報の取り出し方](http://d.hatena.ne.jp/nohohon_x/20111216/1324015922)


###リクエストパラメータの取得

```fuel/app/class/controller/sample.php
// POST/GETされたパラメータの場合
$value = Input::param("name");

// JSONの場合
$value = Input::json("param");
```


## Model/DB
### DB::Select時のカラムのエイリアス
```fuel/app/class/controller/sample.php
$sql = \DB::select(array('users.name', 'user_name'), array('contents.name','content_name'));
```

### DB::Select時の取得内容を連想配列に変換する 

```fuel/app/class/controller/sample.php
$sql = \DB::select()
    ->from('users')
    ->execute()
    ->as_array('id');
```

### DB::whereでselect文の検索条件を「IS NOT NULL」を指定する
```fuel/app/class/controller/sample.php
$sql = \DB::select()
    ->from('users')
    ->where("name" "!=", null);
```

### DBからランダムにデータを取得する
DB::exprでRAND関数を実行することで取得できる

```fuel/app/class/controller/sample.php
DB::select()
    ->from('users')
    ->limit(5)
    ->order_by(DB::expr('RAND()'))
    ->execute();
```

## その他
### ページング設定
Paginationクラスを使い、ページングの設定を行い、設定内容をDBクラスにも設定する。

```fuel/app/class/controller/sample.php
         // ページング設定
         $config = array(
             'pagination_url' => Uri::base(),
             'total_items'    => $data["count"],
             'per_page'       => 10,
             'num_links'      => 3,
             'uri_segment'    => 'page',
             'show_first'     => true,
             'show_last'      => true,
         );
         $pagination = Pagination::forge('pagination', $config);

 
         // データ取得
         $list = $sql
             ->limit($pagination->per_page)
             ->offset($pagination->offset)
             ->execute()
             ->as_array();
```

### 独自のConfigファイルを定義

####1.独自のConfigファイルを追加

```fuel/app/config/myaccount.php
<?php
return [
    'user_name' => 'SRAUFactory',
    'password'  => '*******************',
];
```

####2.config.phpに定義を追加

```fuel/app/config/config.php
 // 'config' = array(),
```

↓↓↓

```fuel/app/config/config.php
 'config' = array(
     'myaccount' => 'myaccount',
 )
```

####3.参照したい箇所で以下のようにコールする

```fuel/app/class/controller/sample.php
$userName = Config.get('myaccount.user_name');
$password = Config.get('myaccount.password');
```




## 参考
* [FuelPHPのクエリビルダを表にまとめた](http://btt.hatenablog.com/entry/2012/08/20/190737)
* [[FuelPHP] クエリビルダを使ってランダム（RAND()）に取得する](https://b.0218.jp/20150207162423.html)
* [Pagination クラス(FuelPHP公式ドキュメント)](http://fuelphp.jp/docs/1.7/classes/pagination.html)
* [FuelPHPでページャー(Pagination)](http://btt.hatenablog.com/entry/2012/06/19/175351)
* [fuelphpでのpagination](http://isopan.hatenablog.jp/entry/2014/01/09/120022)
* [FuelPHP1.7のページネーション[FuelPHP入門]](https://runble1.com/fuelphp-pagination/)
* [FuelPHPに独自の設定ファイルを追加する](http://ackintosh.github.io/blog/2013/04/29/custom-configuration-file-for-fuelphp/)
Amazon EC2でYeomanのAngular-fullstackアプリケーションを立ち上げる


初期設定は、[Amazon EC2でnode.js,Expressアプリケーションを立ち上げる](http://qiita.com/Sugima/items/670924901e38cf9eb84a)の **インスタンスにnode.jsをセットアップ** までを参考にしてください。
Angular-fullstackはポート8080番を使用するので、Security Group設定でポート8080番を開けておいてください。

![スクリーンショット 2015-03-10 12.25.39.png](https://qiita-image-store.s3.amazonaws.com/0/42958/56def7b4-8be2-bb25-6e39-0478ce688f4d.png "スクリーンショット 2015-03-10 12.25.39.png")



### インスタンスにAngular-fullstackをセットアップ

sshで対象のインスタンスにログインし、下記コマンドを順番に実行していきます。

yeomanのインストール
`$ sudo npm install -g yo`

bowerのインストール
'$ sudo npm install -g bower'

gruntのインストール
`$ sudo npm install -g grunt-cli`

angular-fullstackのジェネレーターをインストール
`$ sudo npm install -g generator-angular-fullstack`

### アプリケーションを作成

アプリケーションのフォルダを作成してフォルダに移動
`$ mkdir myAngularApp && cd $_`

yeomanを利用してアプリケーションを生成
`$ yo angular-fullstack myAngularApp`

何点か選択肢が表示されるので、選択してください。
今回はDBの設定をしていないのでMondoDBの利用はしないようにしてください。
それ以外の選択肢はお好みで。

sassを使用したい場合は下記コマンドを追加で実行してください。
`$ sudo gem install sass`

### アプリケーションをビルド
gruntのbuildコマンドを実行して、アプリケーションをビルドします。
`$ grunt build`

ビルドが完了しdistフォルダが作成されるので対象フォルダに移動します。
'$ cd dist/server`

### サーバーを起動
環境変数オプションを付けて起動します。
`$ NODE_ENV=production node app.js`

### ブラウザから確認
http:[インスタンスのIPアドレス]:8080
上記webページにアクセスすると、アプリケーションのページが表示されます。

![スクリーンショット 2015-03-10 13.41.43.png](https://qiita-image-store.s3.amazonaws.com/0/42958/c7f9ec10-3444-ccf7-aa09-b9e20caeef32.png "スクリーンショット 2015-03-10 13.41.43.png")
xamppで実行された時間を日本に設定する

日付を取得するとなぜか時間が違う
実際は「2015/03/10 12:02:10」に走行

```
print date('Y/m/d H:i:s');

>2015/03/10 04:02:10

```

原因はxamppのタイムゾーン設定がドイツになっているから
（８時間差）

php.iniのタイムゾーンを修正

```ini:/php/php.ini
;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[CLI Server]
; Whether the CLI web server uses ANSI color coding in its terminal output.
cli_server.color=On

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;タイムゾーン変更！！
;date.timezone=Europe/Berlin
date.timezone = Asia/Tokyo


```
rubyでwebsocketを試してみる

何かと耳にするwebsocketを簡易チャットアプリとして触ってみたときのメモ

#### 環境
---
 * VirtualBox 4.3
 * ubuntu 14.04
 * ruby 2.2.0
 * em-websocket 0.5.1

#### websocketサーバをインストールする
---

```bash
$ gem install em-websocket
```

#### websoketサーバを起動する
---

```rb:websocket.rb
require 'em-websocket'
require 'pp'

connnections = []

EM::WebSocket.start({:host => "0.0.0.0", :port => 8888}) do |ws_conn|
  ws_conn.onopen do
    connnections << ws_conn
  end

  ws_conn.onmessage do |message|
    pp message
    connnections.each{|conn| conn.send(message) }
  end
end
```
※ポートを8888で起動します
※pp messageでサーバに送られてきたメッセージを標準出力します
※connnectionsに接続を格納し、connnections.eachで接続されたクライアント全てに
　メッセージを返すようにしています

```bash
$ ruby websocket.rb
```

#### クライアント(HTML)
---

```html:websocket.html
<html>
<head><meta charset="UTF-8" />
<title>websocket ruby test</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.3.min.js"></script> 
<script type="text/javascript">
$(function(){
    var ws = new WebSocket('ws://localhost:8888/');                                                                                                
    $("#send").on('click', function(){
        ws.send($('#message').val());
    });

    ws.onmessage = function(event){
        var message_li = $('<li>').text(event.data);
        $("#msg-area").append(message_li);
    };
});
</script>
</head>
<body>
<input type="text" id="message" />
<input type="button" id="send" value="send"/>
<ul id="msg-area" />
</body>
</html>
```
※HTMLが読み込まれると同時に、new WebSocket('ws://localhost:8888/')で
　websocket接続を確立します

異なる複数のブラウザを立ち上げ、片方でメッセージを入力し、ボタンをクリックすると
もう片方のブラウザ側にメッセージが表示されると思います。
linux起動を妨げる不要なデバイスの削除

## 環境
* CentOS 6.0

前提：OSインストール時に誤って/homeにディスクの大半を割り当ててしまい、以下の記事を参考に/rootに再配置したが、最後にfstabの修正を忘れていた。
http://ma2k8.hateblo.jp/entry/2012/12/26/202545

## 事象
/etc/fstabに、存在しないデバイスの記述を残したまま再起動してしまい
rootでログインしたもののfstabがread-onlyで編集不可。

## 対処
http://stackoverflow.com/questions/383595/repairing-fstab-read-only
を参考にして対処。
> $ mount / -o remount,rw

このコマンドで/以下に編集権限をつけた後、fstabの不要なデバイス記述をコメントアウト（または削除）した後、サーバ再起動して完了。

Thanks MarkR, you just saved my ass too.
Javascriptのswitch文で正規表現を使う

メモ

```js
var string = 'abcd';
switch( true ){
case /abcd/.test(string):
    break;
case /defg/.test(string):
    break;
}
```

## 参考ページ
http://d.hatena.ne.jp/hasegawayosuke/20091002/p2
Google App Engineに元からはいっていないライブラリを使う方法


libs/ ディレクトリを作り、
```pip install -t libs ライブラリ名```
のようにして、libs以下にライブラリをインストールします。

pip install [-t, --target \<dir\>](https://pip.pypa.io/en/latest/reference/pip_install.html#cmdoption-t)


> Install packages into \<dir\>. By default this will not replace existing files/folders in \<dir\>. Use –upgrade to replace existing packages in \<dir=> with new versions.


mainのページ以下を追加して、libsへのパスをアプリケーションに追加すると、GAEでライブラリが使えます。

```
import sys
sys.path.insert(0, 'libs')
```


FlaskをGAEで使うサンプル：[cocodrips/GAE-flask-application](https://github.com/cocodrips/GAE-flask-application)
RailsのForm内のbuttonでsubmit以外のことをさせたい（link_to的なこと）


##やりたいこと
RailsのForm内にbuttonを置いて、csv fileをdownloadさせたい（例です）

##はまったこと
- link_toだと見た目をボタンに変更するCSSを書く必要がある（Bootstrapとか使えない環境なので手軽でなさそうだった）
- Form内にbutton_toを配置すると、そのFormのsubmitになってしまう

##解決法
Form内にbutton_tag（typeはbutton）を配置し、onclickでurlを変更する
（もっと良い方法があれば教えてください）

試行3を参照ください。

##試行1（link_toを使って、見た目だけボタンにする）

リンクの形であれば次の感じで実現できるので、後は見た目をbuttonに変更すれば良さそうです。

```erb:view
<%= link_to 'download', books_path(format: :csv) %>
```

Bootstrapを使えばclass指定で簡単にできるのですが、
Bootstrapを使えない状況なので自分でCSSをゴリゴリ書くしかなさそうです。

もっと簡単に実現できないか、まず他を調べてみようと考えました。

##試行2（button_toを使う）

次の感じで実現できると考えたのですが、Formの中で書くと、そのFormのsubmitになってしまいました。
（Formの外に出してあげれば期待通りの動きはします）

```erb:view
<%= button_to 'download', books_path(format: :csv), method: :get %>
```

今回はFormの中に置きたかったので、別の方法を探してみます。

##試行3（button_tagとonclickを使う）

submitでないbuttonを配置し、onclickでurlを書き換える方法です。

```erb:view
<%= button_tag type: 'button', onclick: "link_to('#{books_path(format: :csv)}')" do %>
  <%= 'download' %>
<% end %>
```
```javascript:js
function link_to(link) {
  location.href = link;
}
```

期待通りの動作をするようになったので、この方法を採用しました。
systemd - Unitファイル（サービス起動ファイル）をカスタマイズする

```console
# ここにファイルを作る
$ vim /etc/systemd/system/nrpe.service

# 例えばこう
[Unit]
Description=NRPE(custom)
After=network.target
Requires=network.target

[Service]
Type=forking
User=nagios
Group=nagios
EnvironmentFile=/etc/sysconfig/nrpe
ExecStart=/usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d $NRPE_SSL_OPT

[Install]
WantedBy=multi-user.target


$ systemctl reenable nrpe.service
rm '/etc/systemd/system/multi-user.target.wants/nrpe.service'
ln -s '/etc/systemd/system/nrpe.service' '/etc/systemd/system/multi-user.target.wants/nrpe.service'

$ systemctl restart nrpe.service # 要るかな？
```

### 大事なこと

`/usr/lib` 配下はさすがに編集NGだから！！！１

### 参考

- http://d.hatena.ne.jp/enakai00/20130917/1379374797
秀丸を10年使い続けた私が、MacVimでgrepしてみた… 徒然備忘録

#前置き
[前回](http://qiita.com/shingargle/items/48b0699e5a1111044451 "秀丸を10年使い続けた私が、MacVimと出会って困って訊いて調べて… 徒然備忘録")、「これから調べること」として**grep**を挙げていました。
でも秀丸のgrepにどっぷりだった私は、なんだかとっつきにくくて「食わず嫌い」な状態でした。

実は、そんな人多いんじゃない？

#とにかく使ってみた
過去ログなんかを漁るのには、grep一択。
「今までなんとなく避けてたけど、使ってみるか…。」
という感じで、まずは基本的なコマンド

> `:vimgrep {pattern} {file}`

:vimgrep shingargle kakoLog*.log
という感じですな。

で、検索結果がでるのですが、
`(1 of 55): shingargle って素敵な名前`
とかなるわけです。

え?え?一行だけ?
ヒット件数はわかるものの、全体が見渡せない…。
これが、とっつきにくい理由でした。

#次の(前の)検索位置へ
ため息混じりにひとつひとつ確認です。

> `:cn`:次の検索結果へ移動する 
> `:cN`:前の検索結果へ移動する`:cp`でもOK

もう面倒極まりない。

#検索結果一覧表示
世界を席巻するVimmer達が、こんな作業をするはずがない。
と、ちょっと調べる。

> `:copen`

grep直後にこのコマンドですよ。
すると、

```
:
kakoLog_2015-02-18.log|314 col 28| ....
kakoLog_2015-03-09.log|4 col 28| ....
:
```

ずらっと検索結果の一覧が別窓で表示されました。
当然、タグジャンプも可能。Vimでも「タグジャンプ」って言うのかは不明だけど。

で、検索し終わって別窓を閉じるときは
> `:cclose`
です。

#ワイルドカード
次に悩んだのが、ディレクトリを再帰的に検索する方法。
ワイルドカードを使用します。

```
" カレントディレクトリ以下のあらゆるファイルを対象にする
:vimgrep {pattern} **
" Documents/Logs以下のあらゆるファイルを対象にする（ディレクトリを再帰的に検索）
:vimgrep {pattern} Documents/Logs/**
" Documents/Logs/users内のファイルを対象にする
:vimgrep {patter} Documents/Logs/users/*
" Documents/Logs以下のlogファイルを対象にする
:vimgrep {pattern} Documents/Logs/**/*.log
" app/views以下でkakoで始まるlogファイルを対象にする
:vimgrep {pattern} Documents/Logs/**/kako*.log
```

知ってしまえば、なんてことない。チョロい。

#QuickFixCmdPost というドーピング
使ってると「`:copen`を打つのも面倒だ。」となるわけです。慣れって怖いですね。
そんなあなたは(私は).vimrcに以下の一文を追記しましょう。

```:.vimrc
autocmd QuickfixCmdPost * copen
```

「QuickFix とは、エラー結果や grep の結果が表示される専用のウインドウ領域のこと」
参考:http://www.soum.co.jp/misc/v/vim-no-susume/7.html#id5

ワイルドカードを指定することで「QuickFixが使われたらcopenで自動的に開いてしまえ。」と。
きっとgrepの結果だけじゃなく、色々な場面で活躍してくれることでしょう。

#まとめ
.vimrcに以下の一文を追記

```:.vimrc
autocmd QuickfixCmdPost * copen
```
基本コマンドは↓
> `:vimgrep {pattern} {file}`

ワイルドカード

```
" カレントディレクトリ以下のあらゆるファイルを対象にする
:vim {pattern} **
" Documents/Logs以下のあらゆるファイルを対象にする（ディレクトリを再帰的に検索）
:vim {pattern} Documents/Logs/**
" Documents/Logs/users内のファイルを対象にする
:vim {patter} Documents/Logs/users/*
" Documents/Logs以下のlogファイルを対象にする
:vim {pattern} Documents/Logs/**/*.log
" app/views以下でkakoで始まるlogファイルを対象にする
:vim {pattern} Documents/Logs/**/kako*.log
```

ここで一句
「技術者は楽するために苦労する」
オソマツ
【Jenkins】s3cmdでJenkinsからAmazon S3にコンテンツを転送する

#概要

成果物をAmazon S3にバックアップとっておきたい時や、静的リソースをs3から配信したいといった場合に外部からs3を操作するといった状況が出てくると思います。
そんな時に使える「s3cmd」でjenkinsでビルドを設定してAmazon S3にコンテンツを転送してみました。

#準備・必要なもの

・Jenkins
・Amazon S3バケット（バケット名）
・Amazon S3を操作できる権限を持ったIAMアカウント
（IAMアカウントのAccess KeyとSecret Key）

※バケットとIAMアカウントのつくり方はすっとばします。

#s3cmdのインストール

yumからs3を操作するためのコマンド「s3cmd」をインストールします。

```ruby:

sudo yum --enablerepo epel install s3cmd

```

次に設定ファイルを作成します。

```ruby:

s3cmd --configure

```
Access KeyとSecret Keyの入力を迫られるので、
用意したものを入力する。
リージョンも聞かれるので、バケットで設定したリージョンを入力します。
あとは、全て飛ばしでEnter&yesで大丈夫だと思います。

終了するとホームに「.s3cfg」ファイルが作成されます。

>Test access with supplied credentials? [Y/n]

最後の方で接続テストするか聞かれます。
yesとして「success」と表示されれば問題ないでしょう。


#s3cmdのコマンド

では早速、いくつかコマンドを試していきます。

###バケット参照

```ruby:

s3cmd ls

```
```

s3cmd ls s3://<バケット名>

```
バケットを参照できます
名前を指定すればバケット内を参照できます。

###バケット作成

```

s3cmd mb s3://<バケット名>

```

バケットを作成できます。

###容量計算

```ruby:

s3cmd du

```
```

s3cmd du s3://<バケット名>

```
バケットの容量を参照できます
名前を指定すればバケット内を容量を参照できます。


###オブジェクトの転送

```
s3cmd put <オブジェクト名> s3://<バケット名>

```

指定したオブジェクトを指定したバケットに転送します。



#Jenkinsからパブリッシュしてみる

コマンドを使えることがわかったので、今度はjenkinsから実行してみます。

いきなりジョブからビルド手順を作成してもいいのですが、
その前にjenkinsユーザーで一度コマンドをテストしときます。

###jenkinsユーザーでs3cmdを実行

jenkinsのホームディレクトリに移動して、

```
cd /var/lib/jenkins
sudo su jenkins

```
からの

```
s3cmd ls

```

![スクリーンショット 2015-03-10 11.16.47.png](https://qiita-image-store.s3.amazonaws.com/0/67591/36adb663-e130-888c-063b-17bb1a764988.png)

エラーがでたよ(´･ω･`)

よく見てみると
>/var/lib/jenkins/.s3cfg: None

なんで、jenkinsのホームディレクトリに「.s3cfg」を移動させます。
所有者も変更。

```
sudo mv /home/ec2-user/.s3cfg /var/lib/jenkins
chown jenkins:jrnkins /var/lib/jenkins/.s3cfg

```

再度、やってみます。

![スクリーンショット 2015-03-10 11.36.56.png](https://qiita-image-store.s3.amazonaws.com/0/67591/7821e4d7-53b3-6bf0-4284-3eb41b7b6976.png)

成功した（ ＾ω＾）

あとはjenkinsでシェルスクリプトを書くだけですね。

#Jenkinsでジョブを設定する

新規にジョブを作成して、設定画面で「ビルド手順の追加」でビルドを追加します。
今回はワークスペースにあるリソースをs3に転送していきたいと思います。

![スクリーンショット 2015-03-10 11.45.59.png](https://qiita-image-store.s3.amazonaws.com/0/67591/cdd976cf-40d0-fbe4-47be-2bcf31f05c0f.png)

シェルスクリプトの欄にs3cmdを登録


```
s3cmd sync --delete-removed --acl-public $WORKSPACE/* s3://<バケット名>

```
-「sync」はs3と同期させる処理です。
-「--delete-removed」をつけるとミラーリングできます。

-「--acl-public」をつけると「Make Public」を行ってくれます。
-「$WORKSPACE」はJenkinsの環境変数で値は「/var/lib/jenkins/jobs/ジョブ名/workspace/」となります。

###その他
-「--add-header」をつけることでアップロードしたファイルにヘッダを付与できます。
例えば「Cache-Control:max-age=3600」でCloudFront側でキャッシュする時間を3600秒(1時間)に指定できます。

#Jenkinsでビルドを実行

コンソール出力でうまくいけば　Done.!
s3に指定したオブジェクトが転送されてます。

確認してみましょう。

#まとめ

とっても便利。Gitや他のサービスとガンガン連携させていきたいですね。
gitで過去の特定のファイルを持ってくる

gitの仕様が変わったためか、ぐぐって出てくる情報だとたまに古いのか新しいのか分からないのでgit 1.7.2.5で動いた情報を共有。
新しくコミットしたものの、あるファイルだけ特定の古いコミットの物で上書きしたくなるときがあります。

### 動かなかったやり方

```
$ git checkout HEAD^:hoge.py
```

で、1個前のコミットのhoge.pyを持ってきて現在の作業ディレクトリに上書きできる、と書いている事もあります。

```
fatal: reference is not a tree: HEAD^:hoge.py
```

と出て動かないという状況になることもあります。

### 動いたやり方

こうしたら動きました。

```
$ git checkout HEAD^ -- hoge.py
```

古いドキュメントのものとは記法が違うみたいです。成功したら`git status`で状況を見てみましょう。
`git diff`の時も同様のようです。

```
$ git diff HEAD^:hoge.py  # NG
$ git diff HEAD^ -- hoge.py  # OK(HEAD^から現在の最新の状態になるまでのdiffが表示される)
```

ですが`git show`は動く様子。

```
$ git show HEAD^:hoge.py  # OK(ファイルの内容が表示される)
$ git show HEAD^ -- hoge.py  # OK(最新の状態からHEAD^に変更するためのdiffが表示される)
```

### 以下gitがわかってる人には不要な情報

`HEAD^`は一個前のコミットという意味であり`HEAD^^`は二個前のコミットを意味します。
必要に応じて`^`を付けましょう。

`HEAD^^^^^`などと付けていくとどれを指してるか分からなくなって事故の元なので`git log`コマンドでコミット一覧を見て、`commit eda012e1...`などと書いてある行から

```
$ git checkout eda012 -- hoge.py
```

などとコミットログのIDの先頭6文字位を指し示せばよしなに動いてくれます。
既にブランチ名やタグが振ってあるコミットの場合にはその名前を使っても行けるはず。
ggplot2で論文用の図を作るときに使いたいオプション（点のshape、色、軸の文字の大きさ、色、エラーバー、背景）

## この記事の目的
さっき論文用の図を作っていて、「これどうやるんだっけ？」となったオプションのメモです。
順次追記する予定です。
間違いなどありましたら、コメント欄でご指摘ください。

## 背景を消す

```r
g + theme(panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          panel.background = element_blank()
    )
```

## 軸の色を変える

```r
g + theme(axis.line=element_line(colour = "black"),
          axis.ticks=element_line(colour = "black")
    )
```

## 軸のタイトルとラベルの文字サイズを変える

出典: [r - Change size of axes title and labels in ggplot2 - Stack Overflow](http://stackoverflow.com/questions/14942681/change-size-of-axes-title-and-labels-in-ggplot2)

```r
g+theme(axis.text=element_text(size=12),
        axis.title=element_text(size=14,face="bold"))
```

## エラーバーつきのプロットの作成

出典: [Cookbook for R » Plotting means and error bars (ggplot2)](http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/)

（`dfc`であらかじめseの値を持っておいた上で）

```r
ggplot(dfc, aes(x=dose, y=len, colour=supp)) + 
    geom_errorbar(aes(ymin=len-se, ymax=len+se), width=.1) +
    geom_line() +
    geom_point()
```

エラーバーのtick（？）の幅は`width`で設定できる。

## 点の形（shape）を手動で設定する

```r
ggplot(dat, aes(x=xvar, y=yvar, shape=cond)) + geom_point() +
    scale_shape_manual(values=c(1,2)) 
```
出典: [Cookbook for R » Scatterplots (ggplot2)](http://www.cookbook-r.com/Graphs/Scatterplots_(ggplot2)/#set-colorshape-by-another-variable)

## 点の色を設定する

```r
g + geom_point(colour="white")
g + geom_point(fill="white")
```

ただし、`colour`と`fill`で色を設定できるshapeが違う。fillで色を設定しようと思ったら、21, 22, 23, 24, 25だけ。
出典: [geom_point - 浅井拓也　研究室用ページ](http://qh73xe.jimdo.com/プロット/パッケージggplot/geom-point/)

## y軸の範囲

```r
scale_y_continuous(expand = c(0,0), limits=c(0,1.1* max(dt2[,sec] + dt2[,sd]) ))
```
HipChat便利コマンド

# メッセージ系

* コードシンタックスハイライト
messageをコードシンタックスハイライトで出力
[コマンド]
/code 
message
![1.jpeg](https://qiita-image-store.s3.amazonaws.com/0/57634/4a17b96b-7e1c-2285-60a3-cdeb97d0ab6e.jpeg)

* 置換
直前のメッセージで最初にマッチしたものを置換する。ただし、1分以内。
[コマンド]
s/置換対象の言葉/置換後の言葉


* 16進のWebカラー表記
[コマンド]
\#FFFFFFF
![2.jpeg](https://qiita-image-store.s3.amazonaws.com/0/57634/7ad7feba-a9c4-d8f4-b25c-ad342e26d7f8.jpeg)

# 自分の状態
google chatのカスタムメッセージに似ているような物。

* 緑色のステータスメッセージ変更
連絡可(緑色)ステータスにする。 message指定した場合そのmessageにした上で連絡可ステータスにする。
[コマンド]
/available \<message\>
![3.jpeg](https://qiita-image-store.s3.amazonaws.com/0/57634/562c0736-4b56-0463-4736-e2929273293f.jpeg)

* 黄色のステータスメッセージ変更
離席中(黄色)ステータスにする。message指定した場合そのmessageにした上で連絡可ステータスにする。
[コマンド]
/away \<message\> 
![4.jpeg](https://qiita-image-store.s3.amazonaws.com/0/57634/bf36c3ee-6051-19a6-012e-150ea1c3a9dc.jpeg)

* 赤のステータスメッセージ変更
応答不可(赤色)ステータスにする。message指定した場合そのmessageにした上で連絡可ステータスにする。
[コマンド]
/dnd \<message\>
![5.jpeg](https://qiita-image-store.s3.amazonaws.com/0/57634/f72b36e0-56cf-b7aa-4db5-d1b5d93e8267.jpeg)

# 参考
http://nyumi.hatenablog.com/entry/2014/05/09/013339
チャットルームに対する操作とかもあるみたいですが、あまり使わなそうですね。
EC2を作成したら、設定しておくこと


他のブログ等でも似たようなタイトルで投稿されていますが、自分用にメモです。
基本的には、Tokyoリージョンでインスタンスを作成する場合です。

* Timezoneの変更
* localeの変更
* jqのインストール
* awslogsのインストール
* swapの作成・設定
* tag名操作用initスクリプト
* r53へレコード追加/削除するinitスクリプト
* EBSをマウントする処理(オプション)


以上
DVTPlugInCompatibilityUUID


2016/08 追記
来たる Xcode8 に向け Xcode Plugins もそろそろ寿命を迎えることとなりました。この記事の更新も終了します。

```7.3(7D175),7.3.1(7D1014)
ACA8656B-FEA8-4B6D-8E4A-93F4C95C362C
```
```7.2(7C68),7.2.1(7C1002)
F41BD31E-2683-44B8-AE7F-5F09E919790E
```
```7.1(7B91b),7.1.1(7B1005)
7265231C-39B4-402C-89E1-16167C4CC990
```
```7.0(7A218),7.0.1(7A1001)
0420B86A-AA43-4792-9ED0-6FE0F2B16A13
```
```6.4(6E35b)
7FDF5C7A-131F-4ABB-9EDC-8C5F8F0B8A90
```
```6.3.2(6D2105)
E969541F-E6F9-4D25-8158-72DC3545A6C6
```
```6.3.1(6D1002)
9F75337B-21B4-4ADC-B558-F9CADF7073A7
```
```6.3(6D570)
9F75337B-21B4-4ADC-B558-F9CADF7073A7
```
```6.2(6C131e)
A16FF353-8441-459E-A50C-B071F53F51B7
```
```6.1.1(6A2008a)
C4A681B0-4A26-480E-93EC-1218098B9AA0
```
```6.1(6A1052d)
C4A681B0-4A26-480E-93EC-1218098B9AA0
```
```5.1.1(5B1008)
A2E4D43F-41F4-4FB9-BB94-7177011C9AED
```
```5.1(5B130a)
A2E4D43F-41F4-4FB9-BB94-7177011C9AED
```

---

以下はβ版です。これより前は破棄してしまったため不明。

```8.0β(8S128d),β2(8S162m),β3(8S174q),β4(8S188o)
1637F4D5-0B27-416B-A78D-498965D64877
```
```7.3β5(7D162j)
E71C2CFE-BFD8-4044-8F06-00AE685A406C
```
```7.1β(7B60),7.1β2(7B75),7.1β3(7B85)
CC0D0F4F-05B3-431A-8F33-F84AFCB2C651
```
```7.0GMseed(7A218)
0420B86A-AA43-4792-9ED0-6FE0F2B16A13
```
```7.0β(7A120f),β2(7A121l),β3(7A152u),β4(7A165t),β5(7A176x),β6(7A192o)
AABB7188-E14E-4433-AD3B-5CD791EAD9A3
```
```6.4β4(6E31c)
5EDAC44F-8E0B-42C9-9BEF-E9C12EEC4949
```
```6.4β3(6E23)
8DC44374-2B35-4C57-A6FE-2AD66A36AAD9
```
```6.4β(6E7),β2(6E14)
992275C1-432A-4CF7-B659-D84ED6D42D3F
```
```6.3β3(6D543q),β4(6D554n)
992275C1-432A-4CF7-B659-D84ED6D42D3F
```
Instrumentsをコマンドラインから起動してテストしたときのメモ

■SDK一覧
xcodebuild -showsdks

■Scheme一覧
xcodebuild -workspace xxxxx.xcworkspace -list

■テスト用ビルド
xcodebuild -workspace xxxxx.xcworkspace -scheme xxxxx -configuration Debug -sdk iphonesimulator8.1 clean build install DSTROOT=.

■Instrumentsで指定できるデバイスの一覧
instruments -s

■Instrumentsテスト
instruments -t /Applications/Xcode-beta.app/Contents/Applications/Instruments.app/
Contents/PlugIns/AutomationInstrument.xrplugin/
Contents/Resources/Automation.tracetemplate 
  -w 'iPhone 5 (8.1 Simulator)'   
  xxxxx.app
  -e UIASCRIPT uitest.js
いまさらJAX-RPCで外部APIに接続する

# 経緯
* 仕事で、JAX-RPCを使って、外部APIへ接続する必要が出たため
* 技術的にかなり古いため、使えそうな資料が少なかった　のでメモ用として残す

# 調べたこと
以下の資料がいい感じ
http://www.wakhok.ac.jp/~sakamoto/webservice/web_service_c6.html#doc7_1148

初めは、apache soap を使おうとしていたが、
パラメータを[Vectorで指定しないといけない](http://d.hatena.ne.jp/Nagise/20120920/1348135526)ので、axisを使うことにした。

# 補足
axisを使うために、以下のjarを用意する必要がある
* axis
* wsdl4j
* commons-logging(これがないとエラーになる)
* commons-discovery(これがないエラーになる)
* mail(参考：http://cyubachi.hatenablog.com/entry/2014/03/08/134922)
* activation
* jaxrpc(これは、jaxrpc用)
間違えてmasterやdevelopにpushしてしまうあなたは今すぐこれを.git/hooks/pre-commitにコピペしなさい

```bash
#!/bin/bash
 
current_branch=$(git rev-parse --abbrev-ref HEAD)
 
warn_branch() {
  echo "You can't commit on '$current_branch'!"
}
 
case $current_branch in
  master)   warn_branch; exit 1 ;; # Of cource you can add any other important branches as you need.
  develop)  warn_branch; exit 1 ;; # Of cource you can add any other important branches as you need.
  *)        exit 0;; 
esac
```

補足: 実行権限をつけるのをお忘れなく。

```bash
$ chmod +x .git/hooks/pre-commit
```
XAMPPでのセキュリテイ画面の文字化けをなおす



セキュリテイの画面を表示すると
思いっきり文字化けしてしまう…
![WS_2015-03-10_016.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/2933853f-be69-f591-76fc-d4713def6fcd.jpeg)


navi.phpに１行追加
**注意！！保存はUTF-8で保存！！**

```html:security\htdocs\navi.php
<a target=_parent class=n href="lang.php?de"><?php print $TEXT['navi-german']; ?></a><br>
<a target=_parent class=n href="lang.php?en"><?php print $TEXT['navi-english']; ?></a><br>
<a target=_parent class=n href="lang.php?es"><?php print $TEXT['navi-spanish']; ?></a><br>
<a target=_parent class=n href="lang.php?fr"><?php print $TEXT['navi-french']; ?></a><br>
<a target=_parent class=n href="lang.php?it"><?php print $TEXT['navi-italian']; ?></a><br>
<a target=_parent class=n href="lang.php?nl"><?php print $TEXT['navi-dutch']; ?></a><br>
<a target=_parent class=n href="lang.php?no"><?php print $TEXT['navi-norwegian']; ?></a><br>
<a target=_parent class=n href="lang.php?pl"><?php print $TEXT['navi-polish']; ?></a><br>
<a target=_parent class=n href="lang.php?pt"><?php print $TEXT['navi-portuguese']; ?></a><br>
<a target=_parent class=n href="lang.php?sl"><?php print $TEXT['navi-slovenian']; ?></a><br>
<a target=_parent class=n href="lang.php?zh"><?php print $TEXT['navi-chinese']; ?></a><br>
<!-- この下の行を追加    -->
<a target=_parent class=n href="lang.php?jp"><?php print $TEXT['navi-japanese']; ?></a><p>
```


jp.phpにも「//=====」の間を追加
**注意！！保存はUTF-8で保存！！**

```html:security\htdocs\lang\jp.php
    $TEXT['navi-languages'] = "各国語";
 
// ================================
$TEXT['navi-english'] = "English";
$TEXT['navi-german'] = "Deutsch";
$TEXT['navi-spanish'] = "Espanol";
$TEXT['navi-french'] = "Francais";
$TEXT['navi-italian'] = "Italiano";
$TEXT['navi-dutch'] = "Nederlands";
$TEXT['navi-norwegian'] = "Norsk";
$TEXT['navi-polish'] = "Polski";
$TEXT['navi-portuguese'] = "Portugues";
$TEXT['navi-slovenian'] = "Slovenian";
$TEXT['navi-chinese'] = "中文";
$TEXT['navi-japanese'] = "日本語";
// ================================
 
// ---------------------------------------------------------------------
// STATUS
// ---------------------------------------------------------------------

```
これで文字化けしないで表示された
ちゃんと表示されない場合は保存するときの文字コードがおかしい場合が多い
![WS_2015-03-10_020.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/c303ffb3-31dc-aa87-9c85-0b4039d8de4c.jpeg)
OSX の pkgutil コマンド

OSX で **.pkg** 型式のインストーラを実行する時に

        このパッケージは、ソフトウェアをインストールできるかどうかを判断するプログラムを実行します。

というメッセージが表示されてインストール可能かをチェックされる場合があります。
多くの場合は問題なくインストールできますが、稀に

        より新しいバージョンのソフトウェアがインストールされているのでインストールできません

的なメッセージでインストーラが終了してしまう場合があります。
この様な場合、大抵は */Applications* フォルダ等に存在する該当のアプリケーションを削除するだけで、新しいアプリケーションのインストールが可能となりますが、ごくごく稀に削除しただけではインストーラが同じメッセージを表示してしまいインストール出来ない場合があります。

OSX の場合、アンインストーラが附属する一部のアプリケーション以外はファインダなどで */Applications* フォルダのアプリケーションアイコンをゴミ箱にドラッグするなどして削除すればアンインストールできるのですが、それだけだと設定情報やインストール情報などがシステムに残ってしまう場合があります。

あまり知られていないと思いますが、実は OSX にも標準のパッケージ管理コマンドが存在している様です。
その標準型式に準拠したインストーラからインストールされたソフトウェアは *pkgutil* (1) コマンドを利用する事でアプリケーションや設定情報などを完全に消去でき、殆どの場合は上記インストーラによるチェックも問題なく通過できる様になります。

## pkgutil (1) コマンドの基本的な利用方法 ##

* 現在インストールされているパッケージ名の一覧を表示する

```
$ pkgutil --pkgs
```

* 指定したパッケージに含まれているファイルの一覧を表示する。

```
$ pkgutil --files パッケージ名
```

* 指定したパッケージに含まれているファイルを全て削除する。

実行する場合は管理者権限が必要なので *sudo* (8) などで 管理者権限を取得する必要がある。

```
$ sudo pkgutil --unlink パッケージ名
```

* 指定したパッケージのインストール情報を削除する。

実行する場合は管理者権限が必要なので *sudo* (8) などで 管理者権限を取得する必要がある。

```
$ sudo pkgutil --forget パッケージ名
```

詳しい使い方は ``$ man pkgutil`` をご参照下さい。

*pkgutil* を利用する事でシステム標準に準拠したパッケージの操作ができるので覚えておくと役に立つ事がありかも知れません。
Amazon EC2でnode.js,Expressアプリケーションを立ち上げる

### 下準備(AWSコントロールパネル)

Amazon LinuxでEC2インスタンスを作成。
対象インスタンスのSecurity Group設定でポート3000番を開けておいてください。

![スクリーンショット 2015-03-09 22.11.35.png](https://qiita-image-store.s3.amazonaws.com/0/42958/d5719544-2855-3c58-1b66-a5a5a20f7050.png "スクリーンショット 2015-03-09 22.11.35.png")

### インスタンスにnode.jsをセットアップ
sshで対象のインスタンスにログインし、下記コマンドを順番に実行していきます。

yumのアップデート
`$ sudo yum update`

必要なパッケージをyumからインストール
`$ sudo yum install git gcc-c++ make openssl-devel`

nvmをgitリポジトリからclone
`$ git clone git://github.com/creationix/nvm.git .nvm`

~/.bash_profileに設定を追加

```
$ vi ~/.bash_profile
$ source ~/.nvm/nvm.sh
// sudoで実行した際、nodeのバージョンを合わせる
$ alias sudo='sudo env PATH=$PATH:$NVM_BIN'
```

インストール可能なnode.jsのバージョンの一覧を確認
(今回はnode.js v0.12.0のインストールを例にします。)
`$ nvm ls-remote`

nvmからnode.jsをインストール
`$ nvm install v0.12.0`

念のためバージョンが正しいか確認
`$ node -v`

nvmのデフォルトバージョンを定義
`$ nvm alias default v0.12.0`


### expessアプリケーションを作成

express generatorをインストール
`$ sudo npm install express-generator -g`

expressアプリケーションを作成(myappは任意の名称)
`$ express myapp`

アプリケーションフォルダに移動してnpmパッケージをインストール
`$ cd myapp && sudo npm install`

expressを起動
`$ node ./bin/www`

### ブラウザから確認
http:[インスタンスのIPアドレス]:3000
上記webページにアクセスすると、expressアプリケーションのページが表示されます。

![スクリーンショット 2015-03-10 9.40.29.png](https://qiita-image-store.s3.amazonaws.com/0/42958/f28fc3f1-7ce0-69aa-343d-5f8fcf800427.png "スクリーンショット 2015-03-10 9.40.29.png")

### おまけ:デーモン化
foreverをインストール
`$ sudo npm install forever -g`

expressアプリケーションをデーモン化して起動
`$ cd bin`
`$ sudo forever start www`

以上でデーモン化は完了です。
デーモン化を辞めたい時は、下記コマンドを実行してください。

`$ sudo forever stop www`
nginxでオレオレSSLを設定する

nginxにSSL設定(オレオレ証明書)を行ったときのメモ

#### 環境
---
 * VirtualBox 4.3
 * ubuntu 14.04
 * nginx 1.6.2

#### オレオレ証明書を作成する
---

```bash
$ cd ~/
$ openssl genrsa 2048 > server.key

$ openssl req -new -key server.key > server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
※全てEnterでスキップした

$ openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt
※面倒なので有効期限10年にした

$ sudo mv server.* /etc/nginx/conf.d/
※保存先は任意で。
$ cd /etc/nginx/conf.d/
$ sudo chown root:root server.*
```

#### nginxの設定
---

```bash:default.conf
$ cd /etc/nginx/conf.d
$ vim default.conf
---
server {
    listen       443  default ssl;
    ssl on;
    ssl_certificate     /etc/nginx/conf.d/server.crt;
    ssl_certificate_key /etc/nginx/conf.d/server.key;
    server_name  localhost;
---
$ sudo /etc/init.d/nginx configtest
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

#### 確認
---

```bash
$ sudo /etc/init.d/nginx start
```
ブラウザで「https://localhost～ 」で確認する
※windows+virtualbox+ubuntu環境では443ポートへのポートフォワーディング設定が必要です。
　[virtualbox + ubuntu tips](http://qiita.com/duke-gonorego/items/cf3a5d10d868cb65cc54)を参考にしてください。
Mac に DynamoDB localを入れる


## インストール

```
$ brew install dynamodb-local
```


## 起動

```
$ /usr/local/bin/dynamodb-local
```


ログイン時に自動起動するには、下記のようにすれば良いと言われたけどだめだった。

```
To have launchd start dynamodb-local at login:
    ln -sfv /usr/local/opt/dynamodb-local/*.plist ~/Library/LaunchAgents
```

## 確認

```
$ aws dynamodb list-tables --endpoint-url http://localhost:8000
{
    "TableNames": []
}
```

デフォルトでは、port 8000で起動する


JavaScript Shellも使える
ブラウザで確認。

http://localhost:8000/shell/
AndroidでBLE（Bluetooth Low Energy）

**Android 4.3 以降から使えるようになった Bluetooth LE をテストしてみました。**

## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg) サンプルコード

まず設定ファイルで Bluetooth を許可しておきます。

```xml:AndroidManifest.xml
    <!-- Bluetooth -->
    <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
    <!-- BLE対応端末に限定する場合は以下も追記 -->
    <uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
```

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

```java:TestActivity.java
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;

public class TestActivity extends Activity {
    // BLE用
    private BluetoothManager mBluetoothManager;
    private BluetoothAdapter mBluetoothAdapter;
    private BluetoothAdapter.LeScanCallback mLeScanCallback;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        
        // BLE
        mBluetoothManager = (BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
        mBluetoothAdapter = mBluetoothManager.getAdapter();
        
        // BLEスキャンした際のコールバック
        mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
            @Override
            public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
                String msg = "ADDRESS=" + device.getAddress() + "\nRSSI=" + rssi;
                Log.d("BLE", msg);
            }
        };
    }

    // BLEスキャン開始ボタン
    public void onBtnStartBleScanClicked(View view) {
        mBluetoothAdapter.startLeScan(mLeScanCallback);
    }

    // BLEスキャン停止ボタン
    public void onBtnStopBleScanClicked(View view) {
        mBluetoothAdapter.stopLeScan(mLeScanCallback);
    }
}
```

## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg) 解説

ひとまず、あちこちのサイトを参考に、シンプルなソースにまとめてみました。startLeScan( ) では、同一BLEは１回しか検知しないようです(？)　また色々わかり次第、追記していきます。

## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg) 参考URL

AndroidでBLE端末を見つけるための実装方法
http://qiita.com/miyatay/items/3f43bc8348b0e1914214

ArduinoとAndroid端末をBLE(Bluetooth4.0)でつないでみる｜浅草ギ研
http://www.robotsfx.com/robot/img/radio/BLESerial/BLESerial_how5.html

【連載】Bluetooth LE (5) Android 4.3 で Bluetooth LE 機器を使う
http://blog.fenrir-inc.com/jp/2013/10/bluetooth-le-android.html

あと、GitHubからのプロジェクトソースは以下のが大変参考になりました。Serviceを使ってるため、バックグラウンドでも動作します。

BLEMonitor
https://github.com/SergeiSafrigin/BLEMonitor

(･o･ゞ いじょー。
開発環境XAMPPインストール

PHPの開発環境「XAMPP」のインストー方法


ダウンロード先
https://www.apachefriends.org/jp/index.html

インストーラを動かすとインストールが始まる

「Next>」をそのまま
![WS_2015-03-10_002.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/a0e1ad42-c1b0-05c8-378d-8fdf721d8019.jpeg)

特にオプションの設定はしないで「Next>」を
![WS_2015-03-10_003.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/3868668d-dd6c-0992-7f29-049dc886e28a.jpeg)

インストールも変更しないで「Next>」を
![WS_2015-03-10_004.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/cb2f8a34-c6d4-ad29-3463-4f6d7e21e7e1.jpeg)

このチェックボックスはOFFにして「Next>」を
![WS_2015-03-10_006.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/cce09915-600f-43e3-f99b-655c8a091772.jpeg)

インストール開始！！「Next>」を
![WS_2015-03-10_007.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/96a836aa-0923-42dd-9d46-bd879d25cff2.jpeg)

インストールが始まります
![WS_2015-03-10_009.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/e034d296-e3a2-e0e5-c02f-f33f420e6a42.jpeg)

終わったのでチェックはつけたまま「Finish」へ
![WS_2015-03-10_011.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/d0493838-1cd1-399d-9d14-2f00dfa4bf97.jpeg)

管理コンソール画面が表示されます
とりあえず動作を確認したいので「Apache」のところの「Start」
ボタンを押す
![WS_2015-03-10_012.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/3d2b8e17-ce24-6a54-c51a-54fac2584a63.jpeg)

無事動くとこんな感じになるハズ
一応webの画面を見たいので同列にある「Admin」ボタンを押す
![WS_2015-03-10_013.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/9791d41c-6829-dc42-5de8-eb927b4b38d3.jpeg)

ブラウザが開くはずです、「日本語」のリンクを押す
![WS_2015-03-10_014.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/c8b7a9c8-4540-bb12-83c5-f060e5f8fb3f.jpeg)

この画面も表示されるはずです
![WS_2015-03-10_015.JPG](https://qiita-image-store.s3.amazonaws.com/0/61019/46276e49-b181-d4dd-5d06-f3609b5619ba.jpeg)

これで単純ですが、インストールはできました。
【Android】APN, 優先ネットワークを設定するadbコマンド

APN, 優先ネットワークを設定するadbコマンドのメモ
下記コマンドを実行するには端末をごにょごにょする必要アリ

#APNの追加
APNを追加するには，下記のadbコマンドを叩く．

```
adb shell am start com.android.settings/.CdmaApnSettings
```

するとAPNの設定画面に移動するので，メニューから『新しいAPN』を選択.
例えばmoperaのAPNを設定したい場合，APNを`mopera.net`にする．名前は適当でOK．
moperaの場合は，その他の設定もデフォルトでOK．
ちなみにIIJmioのAPNにしたければ，次のように設定する．

```
APN：iijmio.jp
ユーザ名：mio@iij
パス：iij
認証タイプ：PAPまたはCHAP
```

#優先ネットワークを設定
優先ネットワークを設定を設定したい場合，下記のadbコマンドを叩く．

```
adb shell am start com.android.settings/.TestingSettings
```

すると端末がテストモードという状態になるので，『携帯電話情報』を選択し，『優先ネットワークタイプを設定』から`LTE Only`など，好きなネットワークタイプを選ぶ．
S2AbstractServiceが使えない

プログラマー２年目です。


今Seasar2とJavaを使ってWebアプリケーションを作っています。

結論から言うと、
S2AbstractServiceを使ってdelete()やinsert()の処理に失敗する。
ということです。

AbstractService抽象クラスを作成し、
ServiceクラスにAbstractService抽象クラスを継承し、
ActionクラスにサービスクラスをDIしました。

それで普通動くはずなのにうまくいきません。


これらのjarファイルもありました。
geronimo-annotation_1.0_spec-1.0.jar
geronimo-ejb_3.0_spec-1.0.jar
geronimo-interceptor_3.0_spec-1.0.jar
geronimo-jpa_3.0_spec-1.0.jar

参考
http://d.hatena.ne.jp/starwars2/20081004/1223133834


例外の内容としてはヌルポです。

Serviceクラスに普通にdelete()やinsert()を記述すると処理できます。


もしなにかアドバイスいただければ幸いです。


以下に画像を載せておきます。
![スクリーンショット 2015-03-10 9.56.46.png](https://qiita-image-store.s3.amazonaws.com/0/60528/6209b4cd-dc21-e84a-68af-4be1fdfd3186.png)
![スクリーンショット 2015-03-10 9.57.08.png](https://qiita-image-store.s3.amazonaws.com/0/60528/a90e379a-9d49-6937-d050-73ad03970494.png)
![スクリーンショット 2015-03-10 9.55.49.png](https://qiita-image-store.s3.amazonaws.com/0/60528/caa22de7-6057-6744-44cf-6673be63f0b8.png)
![スクリーンショット 2015-03-10 10.06.59.png](https://qiita-image-store.s3.amazonaws.com/0/60528/69da95d7-d1b7-e035-246a-caed64cc454f.png)
Ubuntu/Debianで現在インストール済みパッケージのバージョンを確認する方法

```
$ apt-cache policy name

（例）
% apt-cache policy libapache2-svn
libapache2-svn:
  Installed: 1.6.17dfsg-3ubuntu3
  Candidate: 1.6.17dfsg-3ubuntu3
  Version table:
 *** 1.6.17dfsg-3ubuntu3 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise/universe i386 Packages
        100 /var/lib/dpkg/status
```
sed (linux) > hogeの前行に文字fugaを入れる > echo "hoge" | sed -e '/hoge/i[改行]fuga'

自分用メモ

Link: [Qiita > sedで置換](http://qiita.com/ishikawa-rs/items/ef272cc89e8e332b282a)

上記のheliac2000さんのコメントのコマンドが今後よく使いそうなので、重複覚悟で投稿します。
    
(編集)[こちら](http://qiita.com/7of9/items/e645bcc916fdccfa52e8#comment-48cb214e8658a3c28784)にてrichmikan@githubさんにいただいたコメントを反映しました

    $ echo "hoge" | sed -e '/hoge/i 
    fuga'
    fuga
    hoge

iはinsertの意味

<hr>
(追記)
以下はGNU版sedの独自拡張で動くもので、他の環境では動かない

    $ echo "hoge" | sed -e '/hoge/i fuga'
    fuga
    hoge
sed (linux) > hogeの次行に文字fugaを入れる > echo "hoge" | sed -e '/hoge/a[改行]fuga'

自分用メモ

Link: [Qiita > sedで置換](http://qiita.com/ishikawa-rs/items/ef272cc89e8e332b282a)

上記のheliac2000さんのコメントのコマンドが今後よく使いそうなので、重複覚悟で投稿します。

(編集)richmikan@githubさんにいただいたコメントを反映しました
 
    $ echo "hoge" | sed -e '/hoge/a
    fuga'
    hoge
    fuga


aはappendの意味。

<hr>
(追記)
以下はGNU版sedの独自拡張で動くもので、他の環境では動かない

    $ echo "hoge" | sed -e '/hoge/a fuga'
    hoge
    fuga
Google Driveで時系列データをインタラクティブに可視化する



適当な時系列データを作る。

![スクリーンショット 2015-03-10 0.58.48.png](https://qiita-image-store.s3.amazonaws.com/0/281/ac0f0f6c-d876-b6f5-5681-70564a1a9b99.png "スクリーンショット 2015-03-10 0.58.48.png")

右上のボタンでChart Editorを開く。

![スクリーンショット 2015-03-10 0.51.54.png](https://qiita-image-store.s3.amazonaws.com/0/281/3d91d972-e88f-c4e3-e91a-dc1f57187860.png "スクリーンショット 2015-03-10 0.51.54.png")

Charts > Trendを選択する。
![png](http://i.gyazo.com/eb3a73c8178accdd64195e59cfb0e44a.gif)


Insertで挿入。

挿入したグラフもspanを変更したりマウスオーバーでデータポイントを強調したりできる。
モバイルでのOpenLayers3で、ピンチインピンチアウト後の強制ズーム固定をなくす方法


OpenLayers3はα版の頃よく触ってて、その頃はモバイルでの動作など非常に残念なところが多かった（もっとも、OL3だけの問題でなく、1世代前だった当時のモバイルデバイスの問題もあると思います）のですが、正式リリース後久しぶりに触ってみたところ、モバイルでも十分に使えるレベルになっていました。
というか、JavaScript地図エンジンなのに、ネイティブのMapKitやGoogle Mapsと比べても遜色ないレベルに感じました（Hello Worldレベルしかやらせてない範囲で、の感想ですが）。

が、一つ残念な点があって、モバイルデバイスでのピンチイン/ピンチアウト操作であるにもかかわらず、操作後自動で整数ズーム値にズームが正規化されてしまう挙動があるのです。
こちらの方が好きだよ、という人もいるかもしれませんが、ネイティブのMapKitやGoogle Mapsは小数点ズーム値を許容するので、それの代わりに使おうと思うと若干ストレスが残ります。

これをオフにする方法ですが、スイッチはないのでソースコードに手を入れるしかありません。

ソースコードをダウンロードしてきて、
https://github.com/openlayers/ol3/blob/master/src/ol/interaction/pinchzoominteraction.js
このファイルの、この記事執筆時点では121行目〜123行目、

```js:pinchzoominteraction.js
    var direction = this.lastScaleDelta_ - 1;
    ol.interaction.Interaction.zoom(map, view, resolution,
        this.anchor_, this.duration_, direction);
```

こう書かれているところをコメントアウトすれば、ピンチイン/ピンチアウト操作後に整数ズーム値に正規化されることはなくなります。

あとは、
https://github.com/openlayers/ol3/blob/master/CONTRIBUTING.md
こちらの手順に従ってビルド環境を整えた後、

```sh:ビルド
$ ./build.py build
```

すれば、圧縮されたjsファイルが取得できるのでそれを使えばOKです。
apacheのアクセスログをidobataのhookに

idobata.io　本当に便利ですよね
作った方々、公開している方々
ありがとうございます。m(_ _)m

で、apache のログをidobataに流そうと思って
少し手こずったので備忘録をば。

ただし大量のログを流すとご迷惑になると思うのでお気をつけください
条件付けをするなどしてログの一部だけを流すようにしましょう。

まず　curl の使い方がよくわかっていなかった

パイプでつないで idobataに流す方法。例えば dateコマンドの出力なら
`date | curl --data-urlencode source@https://idobata.io/hook/...`

`source@-` とするのがミソでした。

次にapacheのログをパイプに流す所がよくわかっていなかった orz
当初、直接 httpd.conf
`CustomLog "| curl ...."`
と書いたら apache にアクセスが無くても
ジャンジャン idobata に流れてきました！orz

よくあるパイプの利用方法として rotatelogs があるわけですが
あれは動きっぱなしのプログラムですよね。
curl だと終了してしまう。
終了してしまうと apacheは何度も立ち上げ直すようで
その度にidobataにポストしてしまようです。

なので実際には無限ループで curl をラップする必要があります。

```pl:pipe2idobata.pl
#!/usr/bin/perl
$|=1;
while(<>){
  open(PIPE, "|/usr/bin/curl --data-urlencode source\@- https://idobata.io/hook/.......") || next;
  print PIPE $_;
  close(PIPE);
}
```

このスクリプトへパイプで渡すように httpd.confに記述すればOK！
`CustomLog "| /usr/local/bin/pipe2idobata.pl > /dev/null 2>&1" combined`
MacOS XでVagrantにCentOS入れ、Railsアプリ制作、Heroku公開 vol.09

# Herokuにアプリ公開まで（完結編）

MacOS X Yosemite で Heroku にアプリを公開するまでの環境構築を何回かに分けて書きます。
今回が最終回です。

vol.01 [VirtualBox インストール編](http://qiita.com/hirolog/items/560ce489dce08f555876) 
vol.02 [Vagrant インストール編](http://qiita.com/hirolog/items/79c294da5225827f3f75)
vol.03 [Vagrant box作成編](http://qiita.com/hirolog/items/a57692eae892e7cdb6a7)
vol.04 [VagrantのCentOS 6.5 仮想マシン(box）起動まで](http://qiita.com/hirolog/items/0603c0b8a8c7b89a0cd4)
vol.05 [Rails 開発環境準備](http://qiita.com/hirolog/items/759f15ce91ce4e783091)
vol.06 [Git 環境を整備](http://qiita.com/hirolog/items/b2a117402c6cc0d02829)
vol.07 [Heroku 公開するまでの事前準備](http://qiita.com/hirolog/items/eefda94756f547ea08f2)
vol.08 [Railsアプリ作成から、Herokuにプッシュまで](http://qiita.com/hirolog/items/6b3ff1a19c3d5471a5b9)

も合わせてお読み下さい。（というか、先にこれらの操作が必要です）

## RailsアプリにModel導入

[vol.08 Railsアプリ作成から、Herokuにプッシュまで](http://qiita.com/hirolog/items/6b3ff1a19c3d5471a5b9) では、空の Rails のまま Heroku にアップしたので、エラー表示となりました。

動作確認のため、最小限の Model と、ルートのドメインパス（/）を指定だけして再度 Heroku にあげます。
説明を簡略化するため scaffold を使ってしまいます。

最初に、Git で branch を分けておきましょう。
（必須ではない、けど、Gitの王道な使い方）

```
git checkout -b add-user
```

scaffoldで user を追加し、名前だけを登録する最小限構成で作成してみます。
（Railsの詳細は、他にいろいろあるのを参考に）

```
rails g scaffold user name:string
```

db:migrateを実行しておきます。なお、後ほど **Heroku環境 でも migrate が必要**になります。

```
rake db:migrate
```

後は、ドメインのルートパス（/）にアクセスした際にどこを表示するのか routes.rb に記載しておきます。

```
vim config/routes.rb
```

今回は、いま作成した users の index を指定しておくので、次の1行を書き加えて上書き保存。

```
root 'users#index'
```

これで Vagrant上 では動作確認できるはずです。
Rails 4.2 であれば、

```
bundle exec rails server -b 0.0.0.0
```

で実行し、ブラウザで http://localhost:3000/ （または、http://192.168.33.10:3000/ ）にアクセスします。
Rails 4.2 以前であれば rails s でサーバが立ち上がると思います。

## Heroku にアップ

この状態で Heroku にアップして動作確認をするのですが、手順は **Git に最新のコードを登録し、push** という流れです。
ですが、前後に操作が必要になることがあります。

### Vagrantでプリコンパイル

まず、Railsの場合は css や Javascript をプリコンパイルしておく必要があります。
Heroku 環境下ではプリコンパイル前の Sass や CoffeeScript をそのままアップロードしても、正常に動作してくれません。Vagrant 環境下でプリコンパイルして、そのファイルをアップするわけです。以下を実行します。

```
rake assets:precompile RAILS_ENV=production
```

### Git に登録、Heroku に push

これで準備できたので Git に登録します。Git の詳細説明は省略します、以下のコマンドは一般的なので、不明箇所はググってみてください。

```
git add .
git commit -m "Add users"
git checkout master
git merge add-user
git push heroku master
```

### Heroku上で、DB の migrate

これで Heroku にアップできました。最後に、もう1つ実行しておく必要があります。
今回、Model を追加したので Heroku でも db:migrate が必要です。これを実行しておかないとエラーになります。
コマンドは以下のとおりです。

```
heroku run rake db:migrate
```

### もし heroku コマンドが実行できなかったら？

次のようなエラーが表示されたら、コマンド箇所にパスが通っていないだけなので、もし .zshrc にパスを記述してるなら次のコマンドを打ってください。

```
herokuコマンドで以下のようなエラーが表示された場合
-bash: heroku: command not found
```

```
以下のコマンドを入力（.zshrcにパスを追加した場合）
source ~/.zshrc 
```
　

これですべて完了です、
Herokuのダッシュボードにアクセスし、該当のアプリを開いて上部の Open Application のリンクを開いてみましょう。
URLを直接入れても良いですが、少なくとも初回だけは打ち間違えなどを考えるとダッシュボード経由が良いです。

いかがでしょうか？
おつかれさまでした。

### キーワード

* MacOS X
* VirtualBox
* Vagrant
* CentOS
* Ruby on Rails
* RVM (Ruby Version Manager)
* Heroku
Typescriptが型チェックしてくれない？

Typescriptで型チェックがうまくいかないことがあったのでメモです。

```ts
class Value<T> {
  v: T;
  constructor(v: T) { this.v = v; }
  value(): T { return this.v; }
}

class Title extends Value<String> {}
class Description extends Value<String> {}

var a: Title = new Description('hoge');// エラーになってほしい..
```
こんな感じのコードを書いたら
当然最後の行でエラーになると思ったら
ビルドが通ってしまった。。

なのでAクラスだけにhogeメソッドを追加したらちゃんとエラーになった。

```ts
class Value<T> {
  v: T;
  constructor(v: T) { this.v = v; }
  value(): T { return this.v; }
}

class Title extends Value<String> {
  hoge() {}// 追加
}
class Description extends Value<String> {}

var a: Title = new Description('hoge');// エラーになる
```

インターフェースレベルでチェックしてるのかなぁ。
gulp-layoutでjekyll風markdownをhtmlにする

ステマです。

[gulp-layout](https://github.com/macoshita/gulp-layout) というプラグインを作ったので、その紹介になります。

## インストール

いつもの

```
npm install gulp-layout
```

## gulpfile.js のサンプル

### シンプルな例

単純なテンプレート機能として使うなら、下記のように書くだけです。

```javascript
var gulp = require('gulp');
var layout = require('gulp-layout');

gulp.task('build', function() {
  return gulp.src('./src/test.html')
    .pipe(layout({
      title: 'Hello World',
      layout: 'post.jade'
    }))
    .pipe(gulp.dest('./dist'));
});
```

src で指定したファイルが post.jade の中に埋め込まれて、いい感じに dist に吐き出されます。上記の例であれば、

(src) test.html:

```html
<p>gulp</p>
```

(layout) post.jade:

```jade
h1= title
|!= contents
```

この２つが組み合わさって

```html
<h1>Hello World</h1><p>gulp</p>
```

こうなります。

### jekyll 風に

[gulp-markdown](https://github.com/sindresorhus/gulp-markdown) や [gulp-fornt-matter](https://github.com/lmtm/gulp-front-matter) を組み合わせれば、markdown で書いて front-matter で使用するテンプレートやその他の情報を渡すことができます。

関数を渡すとfileオブジェクト付きでコールされ、return した値がそのままHTMLのビルド時に利用されます。fileのプロパティを見てテンプレートを変更したり、渡すデータを変えたりできます。

例では、gulp-front-matter が file にくっつけた frontMatter プロパティをそのまま返しています。

```javascript
var gulp = require('gulp');
var frontMatter = require('gulp-front-matter');
var markdown = require('gulp-markdown');
var layout = require('gulp-layout');

gulp.task('build', function() {
  return gulp.src('./src/**/*.md')
    .pipe(frontMatter())
    .pipe(markdown())
    .pipe(layout(function(file) {
      return file.frontMatter;
    }))
    .pipe(gulp.dest('./dist'));
});
```

(src) test.md:

```md
---
title: Hello World
layout: post.jade
---

gulp
```

(layout) post.jade:

```jade
doctype html
html
  head
   title= title
  body
    != contents
```

この２つが組み合わさって、

```html
<!DOCTYPE html>
<html>
  <head>
    <title>Hello World</title>
  </head>
  <body>
    <p>gulp</p>
  </body>
</html>
```

こうなります（結果は pretty にしてます）。処理の流れとしては下記のようになります。

1. gulp-front-matter が test.md の front-matter 部分を解釈した結果を file のプロパティとして付与。front-matter 部分は削除される。
2. gulp-markdown が markdown を html に変換
3. 変換後のデータを gulp-layout を使って jade ファイルに埋め込み

## 補足

jekyll の名前をちょくちょく出してますが、本当は [metalsmith](http://www.metalsmith.io/) 相当のことを gulp で実現しようと思って、このプラグインを作りました。手元では metalsmith の gulp 移植版的なものができているので、いずれ時間をみつけて公開しようと思います。

また、別に gulp-markdown を挟まなくても、下記みたいな html を解釈することも出来ます（これも metalsmith 的な動き）。ただ、これだと jade の extend なりを使うほうが速度面で優れてると思います。

```
---
layout: post.jade
---

<h1>テスト</h1>
```

[Consolidate.js](https://github.com/tj/consolidate.js) を使っているので、jekyll みたいに liquid を使うこともできますし、例の jade や ejs, haml, その他いろんなエンジンを利用できます。

よろしければ使ってやって下さい。