OmniAICreator/Qiita-1.07M huggingface dataset:
キャレット位置をバインド&キャレット位置に文字列を挿入「caret binding」

TinyMCE ほど高機能な WYSIWYG エディタでなくても、カーソル位置に文字列を挿入する機能くらいつけたいなぁなんてことありませんか :question: 
そこで今回ご紹介するのが「caret binding」です :snowman: 

## caret binding

[DEMO:JSFIDDLE](http://jsfiddle.net/sukobuto/xrd2w22m/)

```js:caret-binding

ko.bindingHandlers.caret = {
	init: function(element, valueAccessor, allBindings) {
		var $elm = $(element),
			suspend = true,
			value_writer = allBindings()._ko_property_writers.value;

		function updateModel() {
			var pos = $elm.caret();
			var modelValue = valueAccessor();
			suspend = true;
			if (ko.isObservable(modelValue)) modelValue(pos);
			else valueAccessor(pos);
		}

		$elm.bind('keydown click focus', updateModel);

		ko.computed(function() {
			var modelValue = ko.unwrap(valueAccessor());
			if (suspend) {
				suspend = false;
				if (typeof modelValue == 'number') return;
			}
			var st = element.scrollTop;
			$elm.caret(modelValue);
			element.scrollTop = st;
			if (typeof modelValue == 'string') {
				updateModel();
				if (value_writer) {
					value_writer($elm.val());
				}
			}
		});
	}
};
```

依存: [jQuery](http://jquery.com/), [jquery.caret](https://github.com/acdvorak/jquery.caret)

## 使い方

`<input type="text">` や `<textarea>` にバインドして使います。

```html
<textarea data-bind="value: body, caret: bodyCaret"></textarea>
```

```js
function ViewModel() {
	var self = this;
	self.body = ko.observable("");
	self.bodyCaret = ko.observable();
	
	self.insertFoo = function() {
		self.bodyCaret('Foo');
	};
}
```

バインドした `bodyCaret` には常に文字のキャレット位置が格納されますが、ViewModel 側から文字列を書きこむことでキャレット位置に挿入することができます。

またそのままだとなぜかスクロール位置が末尾に飛んでしまうため、その補正もかけています。

## 謝罪

元々は別のタイトルを考えていましたが、どうにも考えがまとまらずに諦めてかなりミニマムな記事になってしましました。
申し訳ございません。

ですが、個人的にはこういった「こんなカスタムバインディング書いたよ！」というミニマムな記事が増えてほしいと思っています。リユーザブルな知見を共有しましょう！
Windowsマシンからheroku上のredmineをunicornで起動するようにするお話

4回目の投稿です。前回は [heroku上のruby2.0、redmine2.5.3環境にredmine_backlogsプラグインを導入するお話](http://qiita.com/ex_SOUL/items/5dd52579db165f2d2c3b) でした。

今回は、heroku上で動くredmine(≒Railsアプリ)をunicornで起動するようにするお話です。

## 前置き
* 既にheroku上にredmine環境が構築済みであるとして書いています
* ローカルにheroku上に構築したredmineのリポジトリがあるとしています
* **Windowsマシンで操作しています**
* コンソールはGiｔ Bushを使用しています。

## 手順

### unicorn.rbとProcfileの作成

Procfileとは、heroku上にデプロイしたWebサービスの実行に任意のコマンドを指定できるファイルです。
公式はヘルプは[こちら]
(https://devcenter.heroku.com/articles/procfile#process-types-as-templates)
Procfileを使っている仕組みについてはこちらのQiita記事が参考になるかと思います。
http://qiita.com/7kaji/items/6a59977d2ad85604e7fd

`config\`に`unicorn.rb`というファイルを作成し、以下の内容を記載します。

```
# config/unicorn.rb
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end
```

redmineルートディレクトリに`Procfile`という名前のファイルを作成し、以下を記載します。

```
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
```

### Gemfileの編集

`Gemfile`に以下の行を追加します。

```
gem unicorn
```

ただし、当方、Windows環境なのでunicornのインストールは茨の道です。
ローカルでは使用しないので、非推奨な強行手段ですが、`Gemfile.lock`ファイルを編集してしまいます。

`Gemfile.lock`ファイルに以下の行を追記します。

```
    unicorn
```

### herokuへPuch

以下のコマンドを実行してherokuへPushします。

```
git add .
```
```
git commit -m "deploy unicorn"
```
```
git push heroku master
```

## 確認

以下のコマンドを実行
`heroku ps`
そして返ってきた文字列に以下が含まれているなら成功。
`bundle exec unicorn -p $PORT -c ./config/unicorn.rb`

以上でherokuのredmineのunicornで起動するようになりました。


## 参考

https://devcenter.heroku.com/articles/rails-unicorn
SeleniumIDE Tips

おはようございます。ここ数日めっきり底冷えする天気になり「そういえば去年の冬は都心でも雪が積もって大変だったな〜」と　~~去年~~ 今年を振り返る日々になってきました。Selenium/Appium Advent Calendar 2014の18番目、12月18日の記事です。

# SeleniumIDE
世間の話題はもっぱらSelenium2 なのですが、私は相変わらずSeleniumIDEを使っています。そこから、ネタを並べてみようと思います

なお、SeleniumIDE 2.8.0 を使って書いています。

## ロケーター設定
レコード＆リプレイがとてもわかりやすい　SeleniumIDE。
コマンドも見ればなんとなくわかるものばかりなのですが、難解なのがロケーター指定
まあ、これはSeleniumIDEが悪いわけではないですが。

自動記録では適用できる指定方法の順番が定義されておりこれに沿って設定されますが、時には何のことやらわからない場合などもあります。

この時　変更したい行を選択すると　対象　となったテキストボックスがプルダウンメニューが表示可能になる場合があります。
これは、他の指定方法が可能な場合に選択できるようになります。

![スクリーンショット 2014-12-16 21.32.32.png](https://qiita-image-store.s3.amazonaws.com/0/51335/4da564e2-8c99-3fa8-2f1c-35febdb9cb83.png)

-追記-
対象欄に記述している式がどこを指定しているかは、この右横にある「検索」ボタンを押せば、エレメントがハイライトされるので確認することができます。
式が間違っている場合、下のログ欄にエラーが出力されます。

## 再選択

ロケーションを修正したい場合などは、対象テキストボックス右の　「Select」ボタンが便利です。


![スクリーンショット 2014-12-16 21.33.15.png](https://qiita-image-store.s3.amazonaws.com/0/51335/61a2007d-8fd8-5324-0f16-582ebdd28602.png)

ボタンを押したのちブラウザー上の項目にマウスカーソルを持っていくと薄い黄色で項目が選択されるようになります。

![スクリーンショット 2014-12-16 21.34.42.png](https://qiita-image-store.s3.amazonaws.com/0/51335/82206858-cc24-4aca-03b0-a2a92d6573f3.png)

目的の項目が選べたらそのままクリックで修正することができます。

![スクリーンショット 2014-12-16 21.35.02.png](https://qiita-image-store.s3.amazonaws.com/0/51335/7c4b1f06-72c1-f0f8-8833-f0b7d8e52111.png)


## オプション設定

オプション設定パネルを見ると日本語化されている項目とされていない項目があります。（この違いはなんだろう？？？）

そのひとつがこれ。

![スクリーンショット 2014-12-16 21.35.42.png](https://qiita-image-store.s3.amazonaws.com/0/51335/1dd62295-e183-a871-fbcc-f4e5daaff60d.png)

見るとSeleniumIDEを立ち上げ直せと書いてあります。これはいったい？？？

とりあえず立ち上げ直してスクリプトを実行

![スクリーンショット 2014-12-16 21.37.01.png](https://qiita-image-store.s3.amazonaws.com/0/51335/60df5c15-a981-c6f7-2b6d-7741270cd735.png)

いつもと色が違う！！！
この機能についてはこちらに記述があります
http://blog.reallysimplethoughts.com/2011/09/16/testing-evidence-with-selenium-ide/

## 優先順位

先ほどの記事で　ロケーターの指定方法は優先順位に従って　と書きましたが、この優先順位は変更することが可能です


![スクリーンショット 2014-12-16 21.37.54.png](https://qiita-image-store.s3.amazonaws.com/0/51335/b6147343-9f82-e029-72e7-2210c626b996.png)

ドラックアンドドロップで順番を変えると、適用されます。
フォームなどの　name属性を　適用したい場合などはここを変更すると便利です。

##クロスブラウザ
SeleniumIDEは　FireFoxのプラグインなのでテストスクリプトの実行はもちろんFireFoxになるわけですが、こちらを使えば　IEなどでも実行できます

![スクリーンショット 2014-12-16 21.41.44.png](https://qiita-image-store.s3.amazonaws.com/0/51335/bae89a04-8ec8-79b2-b076-0a39a5fd8ab3.png)

こちらに詳しく載っていますね。
http://blog.trident-qa.com/2013/05/selenium-ide-on-chrome-ie-etc/


# 最後に
普段から使っている人からするとどれも知っている内容だと思いますが、非プログラマーの人が「試してみよう」と思った時に、新旧入り乱れての情報は混乱の元なので、新しい日付で残しておくのも良いかなと思って書きました。
『徹底攻略Rails4技術者認定シルバー試験問題集』第1章の勉強メモ

『[徹底攻略Rails4技術者認定シルバー試験問題集](http://www.amazon.co.jp/dp/4844337238/chintara-22)』第1章「Rails概要」の勉強メモです。

# 第1章 Rails概要

## 問1

* Action Pack は Action Dispatcher と Action Controller で構成されている
* Action Mailer ではメールの送信だけでなく受信も可能
* Railtie は Rails のプラグイン機構。Active Record、Action View なども、この機構を利用している

## 問3

* app/controllers/concerns/、app/models/concerns/ に共通コードが置ける
* フィクスチャは test/fixtures/ に置く

## 問4

* rails new コマンドに省略形はない
* rails generate view コマンドは存在しない（view というジェネレータは存在しない）
 * rails generate コマンドの省略形は rails g
* rails destroy AAA BBB コマンドを実行すると、rails generate AAA BBB コマンドで作られたファイルが削除できる
 * rails destroy コマンドの省略形は rails d
* rails dbconsole コマンドの省略形は rails db
* rails console --sandbox コマンドでコンソールを起動すると、終了時にデータベースのトランザクションがロールバックされる

## 問6

* rake -D コマンドで、タスクの説明文を途切れさせずに表示できる

## 問7

* rake stats で、コードの統計が表示できる
* rake notes で、TODO、FIXME、OPTIMIZEコメント行が表示できる

## 問8

* String#html_safe で、「安全である」とマークされた文字列（ActiveSupport::SafeBuffer のインスタンス）が得られる

## 問9

* Object#presence は、レシーバの present? メソッドが true を返す場合はレシーバ自身を、それ以外の場合は nil を返す

## 問11

* Object#in?(val) は、val.include?(self) の結果を返す。ただし、val が include? メソッドを持たない場合は例外が発生する
 * Hash#include?(key) は、ハッシュのキーに key が存在する場合に true を返す

## 問12

* Module.delegate で、別のオブジェクトにメソッドを委譲できる。1つ以上のメソッド名と、:to オプションで委譲先を指定するのが基本形

## 問13

* Module.cattr_accessor は Module.mattr_accessor のエイリアスであり、クラス変数のアクセサが定義できる
 * Module.cattr_accessor にブロックを渡すことで、クラス変数の初期値が設定できる
 * Module.cattr_accessor のデフォルトでは、インスタンス用のアクセサも定義される（:instance_accessor オプションを false にすることで回避できる）

# リンク

* [第2章の勉強メモ](http://qiita.com/iwamot/items/9a3227ac165dc3d16528)
AngularJSのDeveloper GuideのConceptual Overviewのエラー解決


Angular 1.3を使うと現時点でDeveloper Guideをそのまま写経すると次のようなエラーが出ます。

AngularJSのDeveloper GuideのConceptual OverviewのAdding UI logic: Controllersをそのまま写経したら

```Uncaught SyntaxError: Unexpected token .```
と
```Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.3.7/$injector/modulerr?p0=invoice1&p1=Error%3…Flocalhost%3A8000%2Fbower_components%2Fangular%2Fangular.min.js%3A17%3A350)```
のエラーが出てはまってたんですが、調べてみると解決しました。

# AngularJS 1.3からはグローバルなコントローラーは認めない

```javascript:もともとのinvoice1.js
angular.module('invoice1', [])
.controller('InvoiceController', function() {
  this.qty = 1;
  this.cost = 2;
  this.inCurr = 'EUR';
  this.currencies = ['USD', 'EUR', 'CNY'];
  this.usdToForeignRates = {
    USD: 1,
    EUR: 0.74,
    CNY: 6.09
  };

  this.total = function total(outCurr) {
    return this.convertCurrency(this.qty * this.cost, this.inCurr, outCurr);
  };
  this.convertCurrency = function convertCurrency(amount, inCurr, outCurr) {
    return amount * this.usdToForeignRates[outCurr] / this.usdToForeignRates[inCurr];
  };
  this.pay = function pay() {
    window.alert("Thanks!");
  };
});
```

これを下記のように書き換えてあげるとちゃんと動きます。（最初の2行）


```javascript:ちゃんと動くinvoice1.js
var app=angular.module('invoice1', [])
app.controller('InvoiceController', function() {
  this.qty = 1;
  this.cost = 2;
  this.inCurr = 'EUR';
  this.currencies = ['USD', 'EUR', 'CNY'];
  this.usdToForeignRates = {
    USD: 1,
    EUR: 0.74,
    CNY: 6.09
  };

  this.total = function total(outCurr) {
    return this.convertCurrency(this.qty * this.cost, this.inCurr, outCurr);
  };
  this.convertCurrency = function convertCurrency(amount, inCurr, outCurr) {
    return amount * this.usdToForeignRates[outCurr] / this.usdToForeignRates[inCurr];
  };
  this.pay = function pay() {
    window.alert("Thanks!");
  };
});
```

Developer Guideでちゃんと1.3.8の分を見てるのにこれなので初心者にはいきなりの障壁でしたorz
Gitべからず集

## 導入

Gitはとても便利なツールです。ですが、「これをやったら無意味だろ」「せっかくのGitが台無し」「むしろ開発の妨げ」的なこともいくつか存在します。ここではそんな「べからず」集の一部をご紹介します。

## ケース１：ブランチを使わない

- 深刻度：論外
- 修正難易度：とても易しい
- それ、SVNでやりなよ度：最大
- コメント：トップバッターがいきなりアレですが、要はブランチを使いましょうということです。Gitの特徴としてマージが比較的容易であるという点が挙げられます。じゃんじゃんブランチを作り、マージしましょう。

## ケース２：ブランチ名が`hoge`や`Bug fix`だらけ

- 深刻度：中
- 修正難易度：易しい
- 身にしみる度：中
- コメント：ブランチを作るのはいいのですが、ブランチ名にも変数名と同じく気を遣いましょう（変数名、気をつけてますよね？）。当たり前ですが、同じ名前のブランチを複数作ることはできません。まあ、`hoge`なんていうブランチを作る人はさすがにいないと思いますが（いないよね？）、`Bug fix`や`Fix bug`、`Fix`あたりをブランチ名にしてる人は気をつけてください。他の人も同じようにした場合、中央レポジトリ上で問題が発生する可能性が高いです。ブランチの内容をより詳細に説明するようなブランチ名にしましょう（例：`fix_user_migration`）。

## ケース３：プッシュ済みコミットを`rebase`する

- 深刻度：高
- 修正難易度：高（`reflog`を使うと`rebase`をやり直せるが面倒）
- みんなに嫌われる度：高
- コメント：これはやりがちです。Gitにおける`rebase`は、`merge`と違ってコミットのハッシュ値を変更してしまいます。そのため、全く同じ内容のコミットが、プッシュ先とローカルで異なるものとみなされてしまうのです。その結果、一度プルしたにもかかわらず新規コミットが大量にあると思ったらハッシュ値が変わっただけだった、という事態が発生します。他の開発者は余計なマージを行わなくてはなりません。

## ケース４：`master`ブランチにフォースプッシュ

- 深刻度：最大
- 修正難易度：最大
- 二日酔いもぶっ飛ぶ度：最大
- コメント：`git push --force`コマンドを使うと、リモートのコミットを上書きできます。トピックブランチの場合はそれでもいいのですが、前述の例のようにした場合、設定によっては全ブランチがフォースプッシュされます。たまたまその時、`master`ブランチを手元で`git commit --amend`していたら…さらに自動デプロイがされていたら…恐ろしいですね。Git2.0からはデフォルト設定が変更され、上記のようなことは起こりにくくなっていますが、それでも十分に気をつけましょう。

## ケース５：多すぎるマージコミット

- 深刻度：低
- 修正難易度：中
- 綺麗好きにはつらい度：高
- コメント：トピックブランチをつくったあと、本流のブランチとコンフリクトが発生してしまうことがあります。そうなると`rebase`か`merge`をするのですが、すでに共有済みのブランチでは`rebase`はできないので（ケース３参照）、`merge`をすることになります。マージコミットは通常のコミットと同様に`log`に現れるので（一応`git log --no-merge`で回避可能だが、GitHub等では回避不能）、あまりたくさんやると肝心のブランチの内容が見えづらくなることがあります。本流にマージする前に、トピックブランチのマージコミットを`rebase`で削除してから（どうせマージしてから削除するので問題ない）最後に一つだけマージコミットを作成すると上手に決まります。そのための`rerere`というツールもあります（詳しくは`git rerere`で検索）。

## まとめ

ここに挙げたのはべからず集のほんの一部に過ぎません。現場でここに書かれていないとんでもないGitの使い方に出会った人がいましたら、コメントで教えてください。
IPython Notebook で Bokeh を使う


[Bokeh](http://bokeh.pydata.org/) を使うとインタラクティブなグラフを作成できます。HTML での出力、IPython Notebook との統合など、Python だけでデータをグラフィカルに表現できるようになります。

使い方は公式サイトのギャラリーや下記のノートブックが参考になります。

- [Gallery — Bokeh 0.7.0 documentation](http://bokeh.pydata.org/docs/gallery.html)
- [Bokeh 5-minute Overview](http://nbviewer.ipython.org/github/damianavila/bokeh_overview/blob/master/Bokeh%20Overview.ipynb)
- [Creating Interactive Visualizations with Bokeh](http://nbviewer.ipython.org/gist/fonnesbeck/ad091b81bffda28fd657)

Bokeh の主な開発者は Anaconda などを提供している [Continuum Analytics](http://www.continuum.io/) の人たちで、YouTube で作者のプレゼンテーションも見られます。５０分近く長いですが、BokehJS を始めとしたアーキテクチャーの話題もありますので参考になります。

- [Bokeh: Interactive Web Plots & Dashboards - YouTube](https://www.youtube.com/watch?v=GkysOB8_xsE&list=WL&index=11)

バージョンとしては、先週、最新版が公開されました。リリース記事 - [Bokeh 0.7 Released!](http://continuum.io/blog/bokeh-0.7) - に内容が記載されています。新機能の追加や API の変更など、まだまだ安定はしていませんが、探索的にデータを追いかけたい場合にはとても便利だと思います。
最近は Scala と Julia の実装も追加され、Python 以外の処理系でも利用できるようです。

Python の場合は `pip` で簡単にインストールできます。とはいえ NumPy や Pandas と組み合わせて使うことが多いと思いますので、Docker イメージに追加しました。[skitazaki/python34-ipython](https://registry.hub.docker.com/u/skitazaki/python34-ipython/) を使うと Bokeh と一緒にいくつかの科学計算ライブラリを IPython Notebook で利用できます。
グラフ部分ではズームなどの機能が有効なので、ざっくりとプロットしてから調整できるのは静的なグラフに対する利点と言えます。ズームなどで丁度良い表示になったら画像としてダウンロードすることも可能です。
手頃なデータセットを視覚的に確認するときには便利なツールになるでしょう。

[Notebook利用例](http://nbviewer.ipython.org/github/skitazaki/docker-python34-ipython/blob/master/examples/bokeh.ipynb)のイメージは以下のようになります。ソースコードと実行結果、説明文をまとめて保管できますので、メモの保存などから導入してみると良さそうです。

![スクリーンショット 2014-12-16 23.49.24.png](https://qiita-image-store.s3.amazonaws.com/0/37996/751ba21f-7381-44d2-9575-b51e95474437.png "スクリーンショット 2014-12-16 23.49.24.png")
初心者向けGithubへのPullRequest方法

Github上にローカル環境からTerminalなどのコマンドラインを使ってPush,PullRequestを作成する流れをまとめてみました。

#大まかな流れ
①Github上からローカルにファイルをclone(保存)する
②GithubへPullRequest用のBranchをローカルで作成する
③データを更新編集し、ローカルに add, commitする
④Githubにpushする
⑤GithubにPullRequestする
※⑥PullRequestをMergeする

#用語の整理
①Github…オンライン上にレポジトリーを保管し、複数人で共有・編集できる

②ローカル…自分のPC

③clone...Githubなどオンライン上のリポジトリーをローカルにコピー保存すること

④Branch...１つのレポジトリに複数のBranchを作ることで同時に複数のバージョンでレポジトリを管理することができるようになる。Branchの更新規則を決めておくべきだが、主にmasterが本番用で常に動く状態で保管、developが開発用で頻繁に編集、・・などといったように複数Branchが存在することがほとんど。参考　http://www.backlog.jp/git-guide/stepup/stepup1_1.html

⑤add, commit...ひとつのブランチには、編集エリア>ステージングエリア>本番エリアの３つにわかれており、addは編集エリアからステージングに以降するためのもの。commitはステージングエリアから、本番エリアに移行するためのもの。

⑥Push...ローカル上からオンライン上に編集したレポジトリを受け渡すこと

⑦PullRequest...オンライン上のレポジトリを更新した際に、他にもレポジトリ編集者がいる場合に、その編集内容を受け取って(pull)くださいというリクエストを出すこと

⑧Merge...オンライン上のレポジトリにPullRequestを受けたレポジトリを合体させること

![スクリーンショット 2014-12-19 6.37.13.png](https://qiita-image-store.s3.amazonaws.com/0/48577/62716b77-07cd-0532-5e95-5b98a1051837.png)



#Github上のレポジトリからローカルにclone(保存)する。
① GithubのPullRequestをしたいページに移動する。
今回は、こちらで実験します。
https://github.com/samurairunner/pullreq

② 右下のclone URLをコピーする
![スクリーンショット 2014-12-17 22.53.57.png](https://qiita-image-store.s3.amazonaws.com/0/48577/ba56967e-12e7-a59f-e449-c2bcf4a7d926.png)

③ ターミナルからcloneを実行する
`$ git clone https://github.com/samurairunner/pullreq.git`

#Pull Request用のBranchを作成する
①cloneしたディレクトリに移動する
`$ cd pullreq`

②developという名前のBranchを作成する
`$ git checkout -b develop `

#Cloneしたディレクトリを編集する
① 現在のフォルダをFinderで表示
`$ open .`

②ファイルの編集
略

#ローカルでadd⇒commit、Githubへpushする
①編集ファイルをステージングに移す
`$ git add .`

②編集ファイルをcommitする
`$git commit -m "update README"`

③developブランチからGithub上のoriginブランチにpushする
`$git push origin develop`

#Github上でPullRequestする
①右上の緑色のCompare & pull requestボタンをクリック
![スクリーンショット 2014-12-17 22.39.52.png](https://qiita-image-store.s3.amazonaws.com/0/48577/42075c0e-deed-f616-031d-4735705d6b86.png)

②どういった変更を加えたのかを説明する内容を記入
![スクリーンショット 2014-12-17 22.41.03.png](https://qiita-image-store.s3.amazonaws.com/0/48577/965614a9-4b74-89c7-d471-61b36ecfaf3c.png)

③どのブランチからどのブランチにpull requestするかを確認する
※developブランチからmasterブランチへのpull request
![スクリーンショット 2014-12-17 23.26.19.png](https://qiita-image-store.s3.amazonaws.com/0/48577/a472871c-88b0-7f91-ffdf-c34f42f55dba.png)

④「Create pull request」ボタンを押して、Pull Requestを作成

#Github上でMergeする
※この作業は、本来、自分以外のレポジトリ管理者がコードを確認して実行される

①左下の緑色の[Merge pull request]ボタンを押して、Mergeを実行する
![スクリーンショット 2014-12-17 23.21.10.png](https://qiita-image-store.s3.amazonaws.com/0/48577/055d9cb4-4e20-997f-4e8d-187c2e715655.png)

#確認
※変更前
![スクリーンショット 2014-12-17 23.23.20.png](https://qiita-image-store.s3.amazonaws.com/0/48577/7bb235e2-0078-9143-2d88-d756b86bba02.png)

※変更後
![スクリーンショット 2014-12-17 23.22.29.png](https://qiita-image-store.s3.amazonaws.com/0/48577/bd1aa113-db02-6a18-9180-cfc80efb3d4c.png)
WindowsのRでツイートを検索する

##背景
twitteRを用いればR言語でツイートを検索できますが、以下のページに記述した通り、現行リリースされているバージョンではくっそ面倒です。

http://needtec.exblog.jp/20588155/

また、現在、パッケージとしてリリースされている1.1.7バージョンではいくつかのバグがあります。
https://github.com/geoffjentry/twitteR/blob/master/NEWS

・UTF8が文字化けする
・ユーザIDが64ビット対応していない

ここではGitHub中の最新コードを使用して日本語の文字を検索してみます。
https://github.com/geoffjentry/twitteR/

 **注意** 
2015-02-11に1.1.8がリリースされたので、Githubからでなくても大丈夫になっているはずです。
http://cran.r-project.org/web/packages/twitteR/index.html

##環境
Windows7
R3.1.2　RGuiで行う
ライブラリは下記のフォルダに格納するものとする。
C:\R31_Package

##手順
1.依存するパッケージと、Githubからインストールするツールをインストールします。

```
install.packages(c("devtools", "rjson", "bit64", "httr"),"C:\\R31_Package")
```

2.GithubからTwitteRをインストールします

```
.libPaths("C:\\R31_Package") #ライブラリのパスを指定
library(devtools) #警告でますが無視してインストールできました。
install_github("twitteR", username="geoffjentry")
```

3.ツイートを検索します

```
library(twitteR)
setup_twitter_oauth("Consumer Key","Consumer Secret ","Access Token","Access Token Secret") # ローカルファイルにキャッシュするか聞かれます。どっちえらんでも動きます。
searchTwitter(iconv("おっぱい","CP932","UTF-8")) #日本語の場合はUTF8に変換する

```

![oppai.png](https://qiita-image-store.s3.amazonaws.com/0/47856/657e17a1-4fcc-e54a-e7ce-fed716a34aaf.png)

コードを見る限り、since、untilもサポートしているので、昔にさかのぼって取得することもできるかと思います（未検証）

https://github.com/geoffjentry/twitteR/blob/29f574b0ab6f8760b1471d12a4e70245731c4848/R/search.R

##絵文字が入っている場合の対応
Twitterの公式クライアントでは機種依存の絵文字が入っている場合、サーバー側で画像に変換して表示して返しています。
対して、TwitterAPIでは、絵文字が入っている場合、その文字コードをそのまま返します。おそらく、これはUnicodeの外字領域を使っており、環境によっては文字として表示できません。

さいわい、iconvではsub引数を用いて、この変換できない文字を置き換えることができます。
以下がUTF8に変換できない文字を削除する例になります。

```
# 絵文字が入るように検索
ret=searchTwitter("needtec.sakura.ne.jp");
for(r in ret) {
  print(iconv(r$text, "UTF-8", "UTF-8", ""))
}
```
[blackbird-aws-service-limits] Monitoring AWS Service Limits


[blackbird AWS Service Limits plugin](https://github.com/Vagrants/blackbird-aws-service-limits)です。このプラグインではAWSの各種Service Limitsを取得し、zabbixに登録します。defaultでは(Macroで上書きします。)サービス上限の8割(たとえばEIP使いすぎとか、もうすぐEC2が上限にあたるとか)に達したらアラート通知を行います。


現在の使用量を取得できる一覧
------------------------

下記のサービスの上限と現在の使用量を監視しています。

* AutoScale Launch Configurations
* AutoScale Groups
* EC2 Elastic IPs
* EC2 Running Instances
* Number of ELBs
* RDS Instances
* RDS Total Storages
* Number of RDS Read Replicas per Master
* DynamoDB Read Capacity Units for Individual Table
* DynamoDB Write Capacity Units for Individual Table
* DynamoDB Read Capacity Units per Account
* DynamoDB Write Capacity Units per Account

### 補足DynamoDBのRead/Write Capacity Unitsについて

DynamoDBのCapacity UnitsのService Limitsには2種類があって、

* 各テーブルごとの上限
* アカウント全体での上限

ってのがあります。っで、各テーブルごとの上限は、アカウント内で最も高いCapacity Unitが適用され、アカウント全体での上限ってのは(日本語がややこしくてｽｲﾏｾﾝ)**すべてのテーブルのCapacity Unitの合計**が適用されます。っで、Kinesis使ってる人はKinesis ClientがどこまでGetRecordsしたかとかをDynamoDBに書き込みます。なのでKinesis Streamにたくさん書いたり読んだりしてる人は要注意ですね。


APIがあるもの一覧
---------------

実は現在の上限設定を取得できるAPIはあったりなかったりします(ってかほとんどないですねｗ)

* AutoScale Launch Configurations
* AutoScale Groups
* EC2 Elastic IPs
* EC2 Running Instances

こいつらをマトリックスにしたのが[こちら](https://github.com/Vagrants/blackbird-aws-service-limits#blackbird-aws-service-limits)です。


Zabbix Template
---------------

### Items

値としては_現在の使用量を取得できる一覧_に記載したとおりで、おんなじアイテムが取得できます。

#### Macros

現在の上限取得APIがないものは残念ながらMacroで指定です...(ただしMacroには初期値を埋め込んでありますので、そちらを参照していただければわかりやすいかと)

上限緩和申請を行ったらMacroを更新ってことで！

##### about `{$TRG_AWS_SVC_THR_XXXXXX_AVG}`

通常、上限の80%にあたったらアラート通知をAverageのSeverityで行うんですが、いやいやEC2 Running Interfacesだけは60%で通知が欲しいとか、逆にPublic IP使うからEIPの通知は90%でいいですみたいなときはこのMacroを上書きしてください。たとえば、`{$TRG_AWS_SVC_THR_EC2_INS_AVG}=60`や`{$TRG_AWS_SVC_THR_EC2_EIP_AVG}=90`みたいな感じで上書きしちゃってください。ちなみに僕が所属しているチームではDynamoDB(Kinesisを使ってる関係で)のRead/Write Capacity Unitの通知だけ60%で受け取ってます。

#### Graphs

各上限値をグラフのY軸の頂点として、実際の値を表示します。ぼくは普段これをScreenにして監視してたりします。

![スクリーンショット 2014-12-17 23.05.33.png](https://qiita-image-store.s3.amazonaws.com/0/26256/e4b55afc-6276-01d8-0043-2039e34e55fb.png)


Notes
-----

AutoScalingしてるのにScaleしないんだが！とかはだいたい上限にあたったりしてる気がします。あとEIPは意識せずに急に上限にあたったりしちゃいますよねー。。。

ELBがあたったときとかはもう目も当てられないでしょう...
fortran2003で，オブジェクト指向使ってスタックを作ってみた


例として，integer型のスタックを作ってみた

## 宣言部
フィールドやら，手続きの宣言やら
（2015/1/3修正　以下のprocedureの行）

```fortran:こんな感じ
module mod_stack
  implicit none
  public
  
  type :: stack
     private  ! フィールドはprivateに
     integer :: size ! スタックのサイズ
     integer, allocatable :: stack(:)
     integer :: point=0 ! スタックポインタ（そんな名前でしたっけ？）
     
   contains ! 中に含む手続き，デストラクタを書く
     procedure :: push
     procedure :: pop
     procedure :: get_point
     final :: dest
  end type stack
  
   interface stack ! コンストラクタらしく呼び出したいので
      module procedure const
   end interface stack
  
contains
	! ここから手続き，コンストラクタ，デストラクタの中身を記述
	...
end module mod_stack
```

## 副プログラム部
ここから個別に見ていく．こいつらは上の contains 以下に書けばいい
### コンストラクタ

```fortran:定義
   type(stack) function const(num) result(this)
     implicit none
     integer,intent(in) :: num
     this%size=num
     allocate(this%stack(num))
   end function const
```

ここは単純に，領域を確保して，できたstackを返すだけ

```fortran:使い方
  type(stack), pointer :: stack1, stack2
  allocate(stack1, stack2)
  stack1 = stack(10)
  stack2 = stack(2)
```

コンストラクタについてはこんな感じ　　

### デストラクタ

```fortran:定義
   subroutine dest(this)
     implicit none
     type(stack),intent(inout) :: this
     print *, "dest"
     deallocate(this%stack)
   end subroutine dest
```

```fortran:使い方
	deallocate(stack1, stack2)
```

デストラクタは不十分（-Wallつけると警告が出る）だが，スタックは途中で領域解放することも少なそうなので一旦放置．

### その他手続き   

```fortran:スタックおなじみのメソッドとか
   subroutine push(s, c)
     implicit none
     class(stack),intent(inout) :: s
     integer,intent(in) :: c
     s%point = s%point + 1
     s%stack(s%point) = c
   end subroutine push
   
   integer function pop(s)
     implicit none
     class(stack),intent(inout) :: s
     pop = s%stack(s%point)
     s%point = s%point - 1
   end function pop
   
   integer function get_point(s)
     implicit none
     class(stack),intent(inout) :: s
     get_point = s%point
   end function get_point
```

`class(stack),intent(inout) :: s` はダミー変数なようで…

```fortran:使い方
  call stack1%push(5)  
  stack1%get_point()
  stack1%pop()
```

引数に実際に記述する必要はなく，%の前の部分を参照するようだ．



## 使用例と結果

```fortran:main
program main
  use mod_stack
  implicit none
  type(stack), pointer :: stack1, stack2

  allocate(stack1, stack2)
  stack1 = stack(10)
  stack2 = stack(2)

  call stack1%push(5)
  call stack2%push(1)
  call stack2%push(2)
  
  print *, stack1%get_point()
  print *, stack2%get_point()

  print *, stack2%pop()
  print *, stack1%pop()
  print *, stack2%pop()

  deallocate(stack1, stack2)
end program main
```

```結果
           1
           2
           2
           5
           1
 dest
 dest
```


##クラス配列を作る（2015/1/3追記）
```fortran:配列の宣言
  type(stack),allocatable :: stacks(:)  
  allocate(stacks(5))
```
rails s したら Address already in use と言われてしまった件について

`rails s` したら3000番ポートがすでに使用済みといわれました。

# 3000番ポートが使用できない
`rails s` をしたらエラーがでました。

```bash:railsの起動でエラー
bundle exec rails s

/opt/rbenv/versions/2.1.2/lib/ruby/2.1.0/socket.rb:206:in `bind': Address already in use - bind(2) for 0.0.0.0:3000 (Errno::EADDRINUSE)
```
portが使用済みとあります。

# プロセスを確認する
こういうときは、psコマンドでphpやrubyの使用状況を調べるといいです。

```"bash:PhpとRubyのプロセスを確認
ps -ax | grep php5
ps -ax | grep ruby
```
コマンドを実行したものの、3000番を使っているプロセスが見つかりませんでした(;´༎ຶω༎ຶ`)

# Apacheのports.confを確認
ports.confでApacheの設定を変更したことを思い出しました。

```bash:ports.confを確認
sudo vi /etc/apache2/ports.conf 

#Listen 3000
Listen 80
```
3000番になっていたので、80番をListenするようにしました。

```bash:apacheの再起動
sudo /etc/init.d/apache2 restart
```

# 再びRailsを起動
rails sで起動します。

```bash:railsの起動でエラー
bundle exec rails s
```
今度は成功しました。
EspruinoをWiFiに繋ぐ - POSTリクエストを送る

[以前の記事](http://qiita.com/rockymanobi/items/d50fcaf26cb59afb586b)で CC3000 wifiモジュールでgetリクエストを投げることに成功したので、今度はPOSTリクエストを投げてみます。GETリクエストの場合は`Http#get`というラッパーメソッドが用意されていたので楽でしたが、POSTリクエストを投げるには`Http#request`メソッドを直接たたく必要があります。
イメージは`node.js`的な感じなので、触った事ある方には馴染みある書き方かもしれません。

## 目標

Espruino&CC3000にてPOSTリクエストを投げる！

## 結線

[以前の記事](http://qiita.com/rockymanobi/items/1dd62833b4c055a71460)と全く同じです。

## プログラム

POSTリクエストを試せるサーバを立てたので、そこにリクエストを投げます。POSTリクエストをなげると、レスポンスとして送ったデータをエコーしてくれるので、今回はそれをコンソールに出せれば成功とします。

```js

// wifi接続情報
var accessPointName = "######"; //SSID
var WPA2Key = "#######"; //PASSWORD

function postSample(){

  // オプションを設定
  var payload = {
    sample_arg: "1",
    sample_arg2: "2"
  };
  var queryString = 
      "sample_arg=" + payload.sample_arg +
      "&sample_arg2=" + payload.sample_arg2;

  var host = "node-test-rocky.herokuapp.com";
  var port = 80;
  var path = "/post_sample";
  var options = {
    host: host,
    port: port,
    path: path,
    method: "POST",
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Content-Length': queryString.length
    }
  };

  var http = require("http");
  var dataAsString = "";
  var req = http.request( options, function(res) {
    res.on('data', function(data){ 
        // data chunkを繋ぎ込む
        dataAsString += data;
    });
    res.on('close', function(){ 
      console.log( 'from server' ); 
      console.log( dataAsString ); 
    });
  });  
  req.write( queryString );
  req.end();
}

// wifi繋ぎます
LED3.write(true);
var wlan = require("CC3000").connect();
LED2.write(true);
wlan.connect( accessPointName , WPA2Key , function (s) { 
  LED1.write(true);
  console.log('connected');
  if (s=="dhcp") {
    postSample();
  }
});
```

# 実行

GETリクエスト同様、完了まで時間がかかります。おまけにサーバも[heroku](https://www.heroku.com/)を使っているので、30秒くらいかかるかもしれません。(こいつ、アクセスが一定時間無いとサーバが寝てしまうので立ち上がるのに時間がかかるんです）

下のように送ったデータがコンソールに出力されれば成功です。

![image](https://qiita-image-store.s3.amazonaws.com/0/51384/cbd8bcc8-ea19-e18b-b261-7624b81f003a.png)

# まとめ

これでEspruino、wifi経由でセンサーの情報をWEBにPOSTすることができるようになりました。ちなみに毎回これ書くのは大変なので、ちょっとしたラッパーメソッドを作り、[Gist](https://gist.github.com/rockymanobi/41df2cda5c5034f69c1d#file-espruino_post-js)に上げてあります。
`sample_usage.js`にあるような使い方でPOSTリクエストを投げられます。
pm2でnodeの引数を渡して起動する


##通常起動

```console
$ node app.js hikisu
```

###引数の取り方

```js
console.log(process.arg[2]);

/*->hikisu*/
```

##PM2でデーモン起動する場合

```console
$ pm2 start app.js --node-args="引数"
```

となるので

```console
$ pm2 start app.js --node-args="app.js hikisu"
```

とすればOKです。
ARGBのカラーコード透明度まとめ

いつも忘れてしまうのでメモ。

| 透明度 | 最初の2桁 |
|:-----:|:--------:|
| 100% | FF
| 95%  | F2
| 90%  | E6
| 85%  | D9
| 80%  | CC
| 75%  | BF
| 70%  | B3
| 65%  | A6
| 60%  | 99
| 55%  | 8C
| 50%  | 80
| 45%  | 73
| 40%  | 66
| 35%  | 59
| 30%  | 4D
| 25%  | 40
| 20%  | 33
| 15%  | 26
| 10%  | 1A
| 5%   | 0D
| 0%   | 00

MaterialDesignガイドラインの[color](http://www.google.com/design/spec/style/color.html#color-ui-color-application)の項目の中に、透明度が細かく明記されているので追記。

| 透明度 | 最初の2桁 |
|:-----:|:--------:|
| 100%  | FF
| 87%   | DE
| 70%   | B3
| 54%   | 8A
| 30%   | 4D
| 26%   | 42
| 12%   | 1F
PHPで競技プログラミングのデバッグテンプレート

```php:q1.php
<?php
// {{{ get input module
// debug input file name
define('DEBUG_FILENAME', 'input.txt');
/* first module start (setup $input) */
if(file_exists(DEBUG_FILENAME)) 
{
    $inputs = explode("\n---\n", file_get_contents(DEBUG_FILENAME));
    define('DEBUG', TRUE);
} else 
{
    $inputs = array(file_get_contents('php://stdin'));
    define('DEBUG', FALSE);
}
foreach ($inputs as $i => $input) {
    if (DEBUG) {
        echo "\n----- {$i} -----\n";
        $time_start = microtime(true);
    }
    solve($input);
    if (DEBUG) {
        $time_end = microtime(true);
        $time = $time_end - $time_start;
        echo sprintf("\n[%.5fms]", $time * 1000);
    }
}
// }}} -end

function solve($input) {
    list($a, $b) = explode("\n", trim($input));
    echo $a * $b . PHP_EOL;
}
```

solve関数の中に実行コードを書く
$inputが入力値テキスト
input.txtにテストケースを"---"区切りで入力しておく

```text:input.txt
10
4
---
200
3
---
3
20
```

上記コードでの実行結果

```shell-session

----- 0 -----
40

[0.01884ms]
----- 1 -----
600

[0.00381ms]
----- 2 -----
60

[0.00310ms]
```

AtCoder,AOJ では確認済みだが phpコードはそのまま提出して問題ない
背景色が変わらない

はじめに
-
TableViewRowに突っ込んだViewの背景色が変わらなかったお話．
ちなみに，Androidではちゃんと背景色が変わってました．なぜかiOSで背景色が変わりませんでした．

試したけどダメだった一覧
-
* xmlでタグに直接`backgroundColor="#808080"`と記述
* tssに`backgroundColor: "#808080"`と記述
* controllerで`$.id.setBackgroundColor('#808080');`と記述
* `ti clean`様

試してみていけたやつ
-
* tssに`backgroundImage: "/background.png"`と記述

![background.png](https://qiita-image-store.s3.amazonaws.com/0/52665/03f823e6-8e99-fb35-e77e-25335f98bdea.png)

background.pngはこんな感じの画像です．

これで今回はなんとか切り抜けられました．しかし，根本的な解決にはなっておらず，なぜ背景色が変わらなかったのかも謎のままです．`ti clean`様でも解決できなかった手強い相手です...

これが原因なのでは？というのがあったらコメントしてもらえると嬉しいです．よろしくお願いします．
Matplotlibのプロット上でのGUIによるボックス領域選択

## はじめに
`matplotlib`のプロット上でマウスによるボックス領域選択を行い、その結果(座標)を求めるコードを書きました。これの実現のためには`matplotlib.widgets`というモジュールを使用します。もちろん[matplotlib.org](http://matplotlib.org)に載っている[サンプルコード][samplecode]でも良いのですが、こちらはそのままでは座標を格納できないので以下のクラスのように実装する必要があると思います。また、領域の確定後に色付きボックスが残るようにアレンジしてみました([サンプルコード][samplecode]では確定後にボックスが消えてしまいます)。

[samplecode]: http://matplotlib.org/api/widgets_api.html#matplotlib.widgets.RectangleSelector

## rectselect.py
以下の`rectselect.py`をモジュールとしてインポートして使用します。色付きボックスのアレンジに関わるのが`release`関数なので、確定後にボックスを消したい場合には`release`に関わる行をコメントアウトすればOKです。

```py:rectselect.py
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from matplotlib.widgets import RectangleSelector

class RectSelect(object):
    def __init__(self, ax=None):
        self.ax = ax or plt.gca()
        self.rect = Rectangle((0,0), 0, 0, color='orange', alpha=0.5)
        self.ax.add_patch(self.rect)
        self.blc = np.zeros(2)
        self.trc = np.zeros(2)

        def selector(event):
            if event.key in ['Q', 'q'] and selector.RS.active:
                print ('RectSelect deactivated.')
                selector.RS.set_active(False)
            if event.key in ['A', 'a'] and not selector.RS.active:
                print ('RectSelect activated.')
                selector.RS.set_active(True)

        selector.RS = RectangleSelector(self.ax, self.callback)
        self.ax.figure.canvas.mpl_connect('key_press_event', selector)
        self.ax.figure.canvas.mpl_connect('button_release_event', self.release)

    def callback(self, eclick, erelease):
        x0, x1 = eclick.xdata, erelease.xdata
        y0, y1 = eclick.ydata, erelease.ydata
        self.blc = min(x0, x1), min(y0, y1)
        self.trc = max(x0, x1), max(y0, y1)
        blc_print = '({:0.4},{:0.4})'.format(*self.blc)
        trc_print = '({:0.4},{:0.4})'.format(*self.trc)
        print('blc={}, trc={}'.format(blc_print, trc_print))

    def release(self, event):
        self.rect.set_width(self.trc[0] - self.blc[0])
        self.rect.set_height(self.trc[1] - self.blc[1])
        self.rect.set_xy(self.blc)
        self.ax.figure.canvas.draw()
```

## サンプルコード
実際の使用の際には`plt.show()`の直前に`RectSelect`インスタンスを置けば動作します。対象とする`axes`を明示的に指定することもできます。以下、実際の動作の様子です。

```py:
import numpy as np
import matplotlib.pyplot as plt
from rectselect import RectSelect
# 何かプロット
x = np.random.random(20) * 10
y = np.random.random(20) * 10
plt.plot(x,y,'.')
# ボックス選択
region = RectSelect()
plt.show()
# ボックスの左下(blc)と右上(trc)の座標を表示
print(region.blc) # --> (2.338709677419355, 3.7239583333333335)
print(region.trc) # --> (8.4879032258064502, 8.671875)
```
### ボックス選択中
選択領域が線で囲まれて表示される。
![select.png](https://qiita-image-store.s3.amazonaws.com/0/44000/a176f28b-060a-d61f-9b26-c2bdb908f48d.png)

### ボックス選択確定後
選択領域が塗りつぶされて表示される。
![release.png](https://qiita-image-store.s3.amazonaws.com/0/44000/fc9336bc-e9a2-fcc4-040c-dca26ea8de8d.png)
AnsibleのDynamic InventoryでConoHa VPSを管理する


「MacのAnsibleからWindowsサーバーを構築するなど」と言ったな？あれは嘘だ。

元々HomebrewのAnsibleではWindowsサーバーの管理に必要なモジュールがインストールされないのをbrew installのオプションでインストールするようにしてプルリクしたらマージされたので、その宣伝を兼ねて記事にしようとしていたところ、最新のフォーミュラではデフォルトでインストールするように変わっていたので書くことがなくなったという話。

というわけでネタを変えて、最近使っているConoHaのVPSをAnsibleのDynamic Inventory機能を使ってhostsファイルを書かずに管理するということをしてみます。

なお、AnsibleでWindowsを管理したい人はこちらの記事が詳しいです。素晴らしい。

http://qiita.com/yunano/items/f9d5652a296931a09a70

# 環境

* Mac OS X 10.10.1
* Pythonのmechanizeモジュール

# ConoHa連携

実はConoHaにはVPS一覧を取得するなどできるAPIがありません。
そのため、Pythonのmechanizeモジュールを使ってブラウザーのふりをし、コンパネにログインしてVPSの一覧と各VPSのIPアドレスを取得するプログラムを作りました。

https://gist.github.com/tnayuki/3b7dce4ce62ac92df142/raw/cbc328d1dc94b48faaa60d689a65f1da7afe4831/conoha.py

上記のファイルをダウンロードし、ファイル中のConoHaアカウント・パスワードを書き換え、実行属性をつけてから以下のコマンドを実行します。

```
ansible -i ./conoha.py all -m setup
```

プログラム作る方で力尽きたので記事はここまでで…。
KDG体験学習用cpp その7


KDG体験学習用cpp
17.12.2014 T.Nonka Written.

質問があればお受けいたします。多分ないと思います。（笑）
九州、博多の専門学校の体験学習用のノートです。
ggggnonaka@gmail.com

前提　Mac、Linuxの場合、gccがインストール済み。
学習用作業ディレクトリに移動済み。
確認コマンドは、pwd
必要であれば、学習用作業ディレクトリをカレントにすること.
Winの場合、ｂcc32がインストール済み。
学習用作業ディレクトリに移動済み。
確認コマンドは、dir
必要であれば、学習用作業ディレクトリをカレントにすること.

```cpp:Mysort.cpp
#include <algorithm>
#include <iostream>
using namespace std;

int main() {
    int MyTable[5] = { 103, -56, 6, -2, 2 };    // int配列
    sort(MyTable, MyTable + 5);             	// Sort
    for (int i = 0; i < 5; i++) {
        cout << MyTable[i] << ", ";    			// cout 
    }
    return 0;
}
```

コード説明
配列要素は５個
ソートを使うためには、algorithmのインクルード
sort実行


コンパイル
g++ -o Mysort Mysort.cpp

実行
./Mysort

実行結果
![kobito.1418817536.127193.png](https://qiita-image-store.s3.amazonaws.com/0/33317/8a485af9-a16b-6848-dc9b-875b3ac7efa2.png "kobito.1418817536.127193.png")
Yii2のauthclientでTwitterのPOST系 APIがエラーになる問題を回避する

Yii2のauthclientでTwitterクライアントを使ってみたところ、**OAuth認証が成功した後、GET系のTwitter REST APIsは普通に動くが、POST系が全て401エラーを返す** という問題に遭遇しました。

例えば

```php:
$client->api('friendships/lookup.json', 'GET', ['screen_name' => 'kamicup']);
```

はふつーに動くけど、

```php:
$client->api('friendships/create.json', 'POST', ['screen_name' => 'kamicup']);
```

などは

```json:
{"errors":[{"message":"Could not authenticate you","code":32}]}
```

というエラーレスポンスが返ってきます。

で、authclientのソースを追って調べましたが、

結論から言うと、

**yii\authclient\clients\Twitter は（今のところ）POST系のTwitter REST APIsが動くようにはなっていません。POST系を使うには下記の回避策が必要になります。**

#回避策

親クラスである yii\authclient\OAuth1 の処理を一部書き換えてやる必要があります。

具体的には、ここです。

```php:.../vendor/yiisoft/yii2-authclient/clients/Twitter.php
protected function composeRequestCurlOptions($method, $url, array $params) {
    ...
    $curlOptions[CURLOPT_POSTFIELDS] = $params;
    ...
    $curlOptions[CURLOPT_HTTPHEADER] = ['Content-Type: application/atom+xml', $authorizationHeader];
```

OAuth認証処理はこれでいいのですが、Twitter REST APIsのPOSTメソッドを呼ぶ時には **Content-Typeをapplication/x-www-form-urlencodedにしてやる必要があります。**
また、**curl_setopt()関数はCURLOPT_POSTFIELDSオプションに配列を渡すと強制的にmultipart/form-dataになる仕様なので、配列ではなく文字列を渡してやる必要があります。**


これを踏まえて、使えるようにしたものを↓に置いておくので、yii\authclient\clients\Twitter の代わりにどうぞ。


```php:Twitter.php
<?php
use yii\authclient\OAuth1;

class Twitter extends OAuth1
{
    public $authUrl = 'https://api.twitter.com/oauth/authorize';
    public $requestTokenUrl = 'https://api.twitter.com/oauth/request_token';
    public $requestTokenMethod = 'POST';
    public $accessTokenUrl = 'https://api.twitter.com/oauth/access_token';
    public $accessTokenMethod = 'POST';
    public $apiBaseUrl = 'https://api.twitter.com/1.1';

    protected function initUserAttributes() {
        return $this->api('account/verify_credentials.json', 'GET');
    }
    protected function defaultName() {
        return 'twitter';
    }
    protected function defaultTitle() {
        return 'Twitter';
    }    
    
    protected function composeRequestCurlOptions($method, $url, array $params) {
        if ( $method === 'POST' && strpos($url, $this->apiBaseUrl) === 0 ) {
            $curlOptions = [];
            $curlOptions[CURLOPT_POST] = true;
            if (!empty($params)) {
                $curlOptions[CURLOPT_POSTFIELDS] = http_build_query($params);
            }
            $authorizationHeader = $this->composeAuthorizationHeader($params);
            if (!empty($authorizationHeader)) {
                $curlOptions[CURLOPT_HTTPHEADER] = ['Content-Type: application/x-www-form-urlencoded', $authorizationHeader];
            }
            return $curlOptions;
        } else {
            return parent::composeRequestCurlOptions($method, $url, $params);
        }
    }
}
```
Lightningコンポーネント内にscriptタグを記述する方法

Lightningアプリケーション内にはscriptタグを記述できますが、Lightningコンポーネント内に記述しようとすると、`script tags only allowed in templates`などと言われて保存できません。

controllerとかに書けば良いのですが、ダメよと言われるとどうしても書きたくなりますよね。そこで、`aura:html`タグを使うと実は書けます。

```xml:component.cmp
<aura:html tag="script">alert("Hello");</aura:html>
```

src属性も使えるので静的リソースのファイルも読めます。

```xml:component.cmp
<aura:html tag="script" src="/resource/tiwasakidemo__jqueryjs">
</aura:html>
```

じゃ、本題の(!)、RequireJS使わなくて良いの、というところについてですが、残念ながらそうはなりません。上記のjQuery読み込みのすぐ後にjQueryオブジェクトを参照しても参照できないことが多々あります。

ソースを追ってみると、どうやらscriptタグの挿入時のみ特殊扱いをしていて、非同期読み込みになってしまうからのようです。

```js:aura_proddebug.js
if(element["tagName"] && element["tagName"] == "SCRIPT") {
	aura["util"].style.$getHead$().appendChild(element)
}else {
	toInsert.push(element)
}
```

という訳で、今回は我々（？）の惨敗という結果になりました。createElementした方がましです。またがんばりましょう。

あ、ちなみに[`aura:unescapedHtml`タグも試した](http://qiita.com/twk/items/5398e0db68f8d4240868)のですがこちらの場合、scriptを表示させることはできないという結果でした。
Elementとコンポーネントと属性の取得

Elementとコンポーネントと属性の取得方法をまとめてみる。

###コンポーネントを取得する(1)

```
var globalId = '74:2.a';
var cmp = $A.getCmp(globalId);
var globalId = cmp.getGlobalId();
```
つまりは、グローバルIDがわからないとコンポーネントが取得できないし、コンポーネントがわからないとグローバルIDが取得できない仕組みになってます。
なので、コンポーネント自分自身の中か、コンポーネントがコンポーネントをコンポジションしている場合に親のコンポーネントが子のコンポーネントを取得する出来ないです。
(globalIdがふられるタイミングも気になります・・・要検証)

###コンポーネントを取得する(2)

``` hoge.cmp
<div aura:id="hoge">hogehoge</div>
```

```
var foo = cmp.get('hoge');
```
これで、divのコンポーネントが取得できます。
どうも各コンポーネントに記述した各Elementがそれぞれコンポーネントでラッピングされています。

###Elementを取得する。

```
var foo = cmp.get('hoge');
foo.getElement();
```

<出力>
![Aura.jpg](https://qiita-image-store.s3.amazonaws.com/0/6648/302f83a7-9ef5-748a-87e3-9e8be87df7ef.jpeg)

これでも結果は同じ

```
foo.getElements()[0];
```

###属性を取得する。

```hoge.cmp
<aura:attribute name="foo" type="String" default="bar"/>
<ui:button aura:id="foobar" label="submit me!" press="{!c.dosomething}" />

```

コンポーネントの属性を取得できます。

```
//どっちも同じ結果
cmp.get('v.foo')
cmp.get('v').get('foo')
```

こうやって、Elementの属性も取得できます。

```
//どっちも同じ結果
cmp.get('foobar').get('v.label');
cmp.get('foobar').get('v').get('label');
```
![Aura.jpg](https://qiita-image-store.s3.amazonaws.com/0/6648/610e45e6-08aa-aebd-562b-9c785e9f3aa0.jpeg)
SwiftからiOSアプリ開発を始めた人に読んでほしいテスト系リスト



本格的なテストを行うまえに
情報収集したものを備忘録として残しておきます。

# 外部サービス

## appium
名前から分かるとおりseleniumのようなテスト自動をアプリで行うことが可能。必要条件は「Mac OSX 10.7以上、XCode 4.5以上 」となっているがSwiftも対応しているかは実際にコードを書かないとわからない。


http://appium.io/


![スクリーンショット 2014-12-16 10.14.35.png](https://s3-ap-northeast-1.amazonaws.com/rendezvous-uploads/1/43/376ed36f3d95e0c3ecc3c6f9239ffd35.png)

## saucelabs

https://saucelabs.com/  

seleniumやappiumのテストを高速実行。実行時のビデオも残してくれる。

![スクリーンショット 2014-12-16 10.30.02.png](https://s3-ap-northeast-1.amazonaws.com/rendezvous-uploads/1/72/5dc27a311a9490db9f9de69d1500fbc7.png)

## Remote Test Kit

http://appkitbox.com/testkit/

リモートによる実機テストができる。
機種依存ポイントとなるセンサ周りのテストがしづらいのは残念。

![スクリーンショット 2014-12-16 10.15.39.png](https://s3-ap-northeast-1.amazonaws.com/rendezvous-uploads/1/43/672a1a33c0cbbea34c05dec9e6c31100.png)



# OSS

## Quick
https://github.com/Quick/Quick


Swiftが発表された２日後にGithubにコミットされた、世界で一番最初のSwiftのテストフレームワーク。RSpec, Specta, Ginkgoの影響を受けているそうで、記述がしやすく可読性の高いケースを表現できるのが特徴。



![スクリーンショット 2014-12-16 10.17.32.png](https://s3-ap-northeast-1.amazonaws.com/rendezvous-uploads/1/43/66c6c8046a68305606aa419ab72fd194.png)

## Sleipnir
https://github.com/railsware/Sleipnir


タブブラウザで有名な「[Sleipnir](http://www.fenrir-inc.com/jp/iphone/apps/sleipnir-mobile.html)」と間違えそうですが、Quickに似ているBDDのテストフレームワーク。
SleipnirのDSLはQuickに似ているが、主な違いとしてはSleipnirはXcodeと連携して「いない」、Quickは連携して「いる」。
コマンドラインでテストは実行可能。
Xcodeで⌘+Uを押してテストの実行は不可。


![スクリーンショット 2014-12-16 10.18.27.png](https://s3-ap-northeast-1.amazonaws.com/rendezvous-uploads/1/43/0c3b5c4481d1bb31542ea24e9c7af780.png)

## Nimble
テストケース内の値を比較するマッチャー。assertを書きやすく出来るライブラリ。
XCTestCase/Nimble、またはQuick/XCTAssertでも使える。


https://github.com/Quick/Nimble


![スクリーンショット 2014-12-16 10.19.24.png](https://s3-ap-northeast-1.amazonaws.com/rendezvous-uploads/1/43/c9670d4060ca36873bff33a406278f81.png)
Antigenのantigen useは何をやっているのか

[Antigen](https://github.com/zsh-users/antigen)というzshのプラグインマネージャーがある。これはzshのプラグインを管理してくれるツールで、zshプラグインのインストール、更新が簡単になる。RubyのbundlerとかVimのNeoBundleにあたるやつ。

それで、ドキュメントとかブログの記事とかを見てると、次のように`antigen use oh-my-zsh`を呼び出せって書いてある。

```zsh
antigen use oh-my-zsh
```

適当にコピペしてこれを書いてる人もいると思うけど、この`antigen use`が何をやっているのかを解説する。

ソースコードを追いかけてみると、これは結局、次のコードと同じになる。

```zsh
antigen bundle https://github.com/robbyrussell/oh-my-zsh.git lib
```

つまり、GitHubにある[oh-my-zshのlibディレクトリ](https://github.com/robbyrussell/oh-my-zsh/tree/master/lib)以下を取得して、その下にあるファイルをぜんぶ読み込む(sourceする)、ということをやってる。

なんでこんなことをやってるかというと、oh-my-zshの[plugins](https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins)や[themes](https://github.com/robbyrussell/oh-my-zsh/tree/master/themes)の中にはこのlib以下にあるスクリプトに依存しているやつがあるから。そういうのは単独では動作しないので、こうやってlib以下を読み込む必要がある。なのでoh-my-zshのpluginsやthemesを使ってない人には必要ない。

まあ、oh-my-zshのpluginsやthemesもlibに依存していないやつもあるし、依存していたとしてもlib以下全部が必要ではないので、こんなふうにまとめて読み込むっていうのはあんまりきれいなやり方ではないと思う。

だいたい、[lib/aliases.zsh](https://github.com/robbyrussell/oh-my-zsh/blob/master/lib/aliases.zsh)を見てみると`alias ll='ls -lh'`とやってたりとか、とてもライブラリとは言えない感じなので、これをlibっていうディレクトリに全部入れてるのはどうなのっていう疑問はある。

まあ、そのへんはoh-my-zsh本体のお話なので、ここでは深入りしない。

## 推奨されない書き方
だいぶ前からAntigenを使ってる人はこんな書き方してるかもしれない。

```zsh
# 悪い例
antigen-lib
```

これは古い書き方で、`antigen use oh-my-zsh`と同じ処理が行われるけど、こんなふうに警告メッセージが表示される。

> \`antigen-lib\` is deprecated and will soon be removed.
> Use \`antigen-use oh-my-zsh\` instead.

「`antigen-lib`は古い書き方でそのうちなくなるので、`antigen use oh-my-zsh`と書け」ということらしい。古い書き方をしてる人は直しておこう。
ビッグデータ OSS


元記事
http://www.itmedia.co.jp/enterprise/articles/1410/23/news002.html

20tb/h✕2✕3h=120tb
120tb✕25000 > 3exabyte

![kobito.1418812929.485140.png](https://qiita-image-store.s3.amazonaws.com/0/33317/95b61856-3226-6a05-bd65-b424489fe89c.png "kobito.1418812929.485140.png")

hadoop
![kobito.1418813291.873236.png](https://qiita-image-store.s3.amazonaws.com/0/33317/3707f613-714b-ccc6-0a9a-9139cc225258.png "kobito.1418813291.873236.png")

MESOS,YARN
![kobito.1418813473.957996.png](https://qiita-image-store.s3.amazonaws.com/0/33317/96b0e122-8a07-7130-02e1-c1b9df0622f8.png "kobito.1418813473.957996.png")

インストール
http://qiita.com/ysk_1031/items/26752b5da1629c9db8f7

一応は動いたけど、こりゃ説明できん…
Sass、Compassのバージョンアップに伴い（sass 3.4, compass 1.0）


Sassのmixinなど色々作っていたのですが。
しばらくバージョンアップなどしていなかったうちに
色々と仕様が変わっていたので、
自作mixinの作り直し + 仕様が変わった点などをまとめたいと思います。

※ 自作mixinも最新のsass,compassに合わせて修正済みです。（2014-12-17 現在）

* [Sass,Compassのデフォルトmixinとカスタム関数](http://qiita.com/kamem/items/07d7500a046dfc96e742)


## Sass - グローバル変数が変更できない

ローカルからグローバルの変数が通常の書き方では変更できなくなりました。
変更する際には、!globalを使います。

### 3.2
	$color: white;

	.test{
		$color: black;

		color: $color;
	}

### 3.4
	$color: white;

	.test{
		$color: black !global;

		color: $color;
	}

* [参考] [Sassの変数スコープと!global](http://hail2u.net/blog/coding/sass-variable-scope-and-bang-global.html)


## Compass - border-radiusの仕様変更
角丸の一括指定ができなくなったようです。

http://compass-style.org/examples/compass/css3/border_radius/

### 3.2
	@include border-radius(0 2px 0 0);

### 3.3
	@include border-top-right-radius(2px);



## Compass - ブラウザサポートの変数記述の仕様変更
下記のような古いブラウザの対応を指定しておく変数が軒並み変わっています。

### 0系
	$legacy-support-for-ie6
	$experimental-support-for-webkit

### 1系
	$supported-browsers: ("chrome", "firefox", "ie", "safari", "opera", "ios-safari", "android");
	$browser-minimum-versions: ("opera": "11", "ie": "6");


* `$supported-browsers`には配列で対応するブラウザを指定します。
* `$browser-minimum-versions`にはブラウザが対応するバージョンを指定します。

### バージョンの確認
compassで対応しているブラウザとバージョンは、下記を実行することで確認できます。

	@debug browsers();
	@debug browser-versions(ios-safari);

* `browser-versions`にはバージョンを確認したいブラウザ名（`browsers`で確認した文字列）を指定します。

### バージョンごとの条件分岐方法
例: IE7以下のみの場合 ↓
#### 0系
	@if $legacy-support-for-ie6 or $legacy-support-for-ie7 {
	}

#### 1系
	@if support-legacy-browser("ie", "7") {
	}

### webkitの古いバージョンでのlinear-gradient先行実装の記述
iPhoneの古いバージョンなどで`-webkit-gradient()`の記述を出力するには、
`$supported-browsers`にandroidを追加すると出力されます。

	$supported-browsers: ("android");


## Compass - sprite-pathの仕様変更（？）
調べ切れていないのですが、システムからの絶対パスでファイルが指定されるようになっていました。

下記のように`image-url`を使っていたのですが、
パスが変わったしまったため、おかしくなっていたのでsprite-urlに変更しました。
### 0系
	image-url(sprite-path($map))

### 1系
	sprite-url($map)

## Sass3.4 変更点・追加点

### &について
BEMを採用して作るときには&の書き方などを工夫することで便利に作れるようになっているようです。
* [参考] [BEMという命名規則とSass 3.3の新しい記法](http://blog.ruedap.com/2013/10/29/block-element-modifier)
* [参考] [Sass3.3.0の「&」の扱い](http://geckotang.tumblr.com/post/79158530266/sass3-3-0)

### 追加された関数
* [参考] [Sass3.4 変更点・追加点を眺めた](http://geckotang.tumblr.com/post/79158530266/sass3-3-0)
	* 追加されたselector function
		* [selector-nest](http://qiita.com/kazu69/items/45b707d5e05c6b6bd259#selector-nestselectors)
		* [selector-append](http://qiita.com/kazu69/items/45b707d5e05c6b6bd259#selector-appendselectors)
		* [selector-extend](http://qiita.com/kazu69/items/45b707d5e05c6b6bd259#selector-extendselectors-extendee-extender)
		* [selector-replace](http://qiita.com/kazu69/items/45b707d5e05c6b6bd259#selector-replaceselector-original-replacement)
		* [selector-unify](http://qiita.com/kazu69/items/45b707d5e05c6b6bd259#selector-unifyselector1-selector2)
		* [is-superselector](http://qiita.com/kazu69/items/45b707d5e05c6b6bd259#is-superselectorsuper-sub)
		* [selector-parse](http://qiita.com/kazu69/items/45b707d5e05c6b6bd259#selector-parse)



また、気になった点があれば追記していきます。
auraのデフォルトEventまとめ

イベントを自分で作って発生させることができるのですが、フレームワーク側でも幾つかイベントを発生させてくれます。ちょっとこんがらがってきたの整理をしました。


| # | イベント | 書き方 | タイミング|
|:-----------|------------|:------------|:------------|
| 1 | init | \<aura:handler name="init" value="{!this}" action="{!c.doInit}" /> |画面の初期化時に発生する。|
| 2 | waiting | \<aura:handler event="aura:waiting" value="{!this}" action="{!c.waiting}" />    |サーバへの問い合わせ開始時|
| 3 | doneWaiting | \<aura:handler event="aura:doneWaiting" value="{!this}" action="{!c.doneWaiting}" />     |サーバからのレスポンスを受け取った時|

render関数と組み合わせると
InitEvent　→　render →　afterRender →　doneWaiting

```render.js
    render:function(cmp,helper){
        var d = this.superRender();
        console.log('render');
		return d;
    },

    afterRender:function(cmp,helper){
        var d = this.superAfterRender();
		console.log('afterRender');
        return d;
    },

    rerender:function(cmp,helper){
        var s = this.superRerender();        
		console.log('rerender');
        return s;
    }
```


```component.cmp
        <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
		<aura:handler event="aura:waiting" value="{!this}" action="{!c.waiting}" />
       	<aura:handler event="aura:doneWaiting" value="{!this}" action="{!c.doneWaiting}" />

```

ログの出力結果
![Aura.jpg](https://qiita-image-store.s3.amazonaws.com/0/6648/ef3333c1-a72e-20a9-1cc3-8c7588d159a9.jpeg)
Vue.jsとbrowserify使うときは、Vueify.jsが便利っぽい

# Vueify.js

Broserify ＋ Vue.jsのコンポーネント管理システムが便利

まず、WebComponentっぽく書ける.vueファイルを作ります
`stylus`と`coffee-script`と`jade`に依存すると`lang="*"`と書けて更に便利

```
npm install --save-dev stylus coffee-script jade
```
こうしておきます。


```component.vue

<style lang="stylus">
.red
  color #f00
</style>

<template lang="jade">
div.template(v-repeat='messages')
	h1(class="red") {{h1}}
	p we are template of vue
</template>

<script lang="coffee">
module.exports =
  data: ->
    messages:[ {h1: 'Hello world!'} , {h1:'yohawing'}]
</script>

```

メインのスクリプトでは、もろもろこうやって requireすれば

```main.coffee

Vue = require "vue"
$ = require "jquery"
component = require "../component.vue"

vue = new Vue component
    .$mount '#targetElement'
```

VueのComponentを外部に記述できて管理が幾分楽になります。
DataBindingメッチャ早い。

他のComponentエンジンと比較すると、StyleとかScriptもComponent内に記述できるので
WebComponent的な使いまわせる部品を作れるので便利かもしれない。

この辺は、もうちょいカッコイイ書き方を模索したいです。