OmniAICreator/Qiita-1.07M huggingface dataset:
【html5】ファイルのダウンロード


aタグにdownload属性をつけるとファイルをダウンロードさせることができる。
属性の値はダウンロードしたファイル名になる。値を設定しなければそのままファイル名でダウンロードされる。

```html
<a href="download.txt" download="file_name.txt">ダウンロード</a>
```

保存先ダイアログを出す方法を誰が知っていたら教えてほしい。
第7回 HTML5minutes！ 〜triton-js〜 のレポート。

第7回 HTML5minutes！ 〜triton-js〜（https://atnd.org/events/62168 ）のレポートです。
![IMG_9307.JPG](https://qiita-image-store.s3.amazonaws.com/0/25176/4f36437a-e902-d367-0e52-3ff658923ec0.jpeg)


# 基調講演 「ライブコーディングのすゝめ」
* ハッカーズバーでライブコーディングするバイトが有るよ！
* ライブコーディングとはコーディング作業を人前で披露することですよ。
* ハッカーズバーだと、5時間ぐらいライブコーディングしてる。
* WebRTCを使ってライブコーディングするぞ！
* ライブコーディング中は無口になるぞ！
* ・・・・（ひたすらライブコーディング。響き渡るBGM。）
* PCブラウザを使ったライブ配信システム完成！
* 引き続き、装飾開始。。。
* コメントのやり取りを追加してく。
* [object-fit](http://htmlcss.jp/css/object-fit.html) = 画像の拡大方法指定、便利。
* ニコニコ動画風字幕を表示できて、拍手（requested by 壇上の氏）
* ライブコーディング終わり。
* ライブコーディングの問題と対策
    * 沈黙
        * 対応策　音楽を流す
        * 対応策　観客が割り込めるようにする。
        * 対応策　観客を取り込む
    * 漏洩
        * 対応策　クリーンデスクトップ
        * 対応策　クリーンブラウザ
    * 動かない
        * 対応策　地力をつけておく
        * 対応策　最低レベルでたどり着ける落とし所を用意しておく
* カッコイイライブコーディングをするために
    * コーディング力を磨く
    * キーリピート感覚を短縮する
    * エディタをカスタマイズする
* まとめ
    * ライブコーディングとは
        * プログラム力を高めるためのもの
        * エンターテイメント性を出すもの
        * コーディングを好きになるためのもの

# coffeescriptとwebpackとgulpと
webpackを導入してloaderがとても良かった話。

* [webpack](https://github.com/webpack/webpack)とはjsの依存関係を解決して一つにするツール。
* loaderという機能が良い。
* 学習コストが高く、日本語の情報が少ない。
* いいloaderランキング
    * 3位 coffee-Loader
    * 2位 url-loader
    * 1位 underscore-template-loader
* まずは、npm install webpackしちゃいなよ！

# 超音波
超音波で通信する話。

* Mac+Chromeで超音波出せるし、受け取れる。
* 音波なので、１対多通信が出来る。
* Mac miniのスピーカーだと19.2Mhzくらいしかでない。Mac Book Proだと19.5Mhzくらい出せる。
* 超音波通信、英語だと Ultra Sonic Networking 超かっこいい。

# 魅惑のデバッグモード
デバッグモードがかっこいい話。

* ゴジラ60thの記念サイト(http://godzilla.jp/special/)のデバッグモードの話。
* デバッグモードはカッコイイぞ！

# ワニと学ぶUXデザイン入門
「UXデザインとは」をワニをメタファとして説明する。

* ワニと暮らすという状況を想像する。
* ワニの気持ちが大事。
    * ワニのニーズを満たし、楽しさ、心地よさを考える。
* 売り手よし、買い手よし、世間よし＝ヒトし、ワニ良し、世間よし
* ワニと暮らすためにやるべきことは
    * ワニを知る。
    * ワニとの関わり方を考える。
* ワニと200時間暮らしてわかったこと。
    * 160時間くらい動かない。
    * ワニもあそぶことがある。
* デザインプロセスを最適化すること＝UXデザイン

# 初めてのお仕事で考えたキーボード操作アクセシビリティのこと
Web業界半年で感じた・考えたこと

* Webアプリをキーボードで操作できるようにする。
    * 忘れがちだよね。
* アクセシビリティーとは＝だれでも、どんなデバイスからでもコンテンツにある情報にアクセスできること
    * マウス使えない状況もあるよね。
* WCAG や、JISX 8341-3にも乗っている。
* WAI-ARIA1.0に沿うことでスクリーンリーダーにモニターの状況を伝えられる。
* ちゃんとマークアップすれば、なんとかなる。
    * セマンティックを大事にしよう
* より多くの人がより多くの場面でより多くのデバイスからアクセスできるようにしよう。
    * セマンティックを大事にすることでまだ見ぬデバイスからもアクセスできる（かも）
* より多くの人にWebの情報を伝えられるようにしましょう。

# 素人が30分でWeb3Dコンテンツを公開できた話

* [jthird](http://jthird.net/) 良いぜ！
【CakePHP】クライアントへJsonを出力する処理

クライアント側にjsonを出力する処理。主にajaxを想定。
対象はcake2.1以上。

```php:処理
$data = array(
  'status'=>1,
  'item'=>array(
    array('id'=>1,'name'=>'suzuki'),
    array('id'=>1,'name'=>'satou'),
  )
);

$this->viewClass = 'Json';
$this->set(compact('data'));

$this->set('_serialize','data');
```

```js:出力されるデータ
{status: 1, item:[{id:1,name:"suzuki"},{id:1,name:"satou"}]}
```


クライアント側の処理：[【jQuery】$.getJSON()](http://qiita.com/kazu56/items/523f9922c904375092fd)
omnibus-softwareでversionとチェックサムをoverrideしてRuby2.2.0を入れる



[chef/omnibus](https://github.com/chef/omnibus)で依存ソフトをビルドする際に、ソースアーカイブのチェックサムを要求するものがある。例えば[Ruby](https://github.com/chef/omnibus-software/blob/master/config/software/ruby.rb)。

バージョン番号だけなら簡単に指定できるけど、チェックサムが必要な場合の書式がなかなか分からなかったので調べた。

[project overrides of software definitions #94](https://github.com/chef/omnibus/pull/94)

上記のIssueで様々な議論がなされたあと、次のような書式にひとまず落ち着いたようだ。


```projects/mysoftware.rb
override :ruby,
version: "2.2.0",
source: {
md5: "cd03b28fd0b555970f5c4fd481700852"
}
dependency "ruby"

override :rubygems, version: "2.4.5"
dependency "rubygems"
override :bundler, version: '1.8.2'
dependency "bundler"
```

変更時の差分を見るとブロックでもいけそうな気がする。
できる逆引きThor事典

久しぶりに Thor をちゃんと使って、それで結構調べたので未来の自分のためにメモしておきます。バージョンは `0.19.1` です。

### すべての基本形

```ruby:lib/foo.rb
require 'thor'
class Foo < Thor
  desc 'say', 'say hello'
  method_option :dry_run, type: :boolean, default: false
  def say
    puts "Say hello!" unless options[:dry_run]
  end
end
```

```ruby:bin/foo
#!/usr/bin/env ruby
require 'foo'

Foo.start
```

### コマンドのエイリアスを登録したい

* `map` つかう
* なお、Thorの機能で下記のような場合 `foo s` で `foo say` のエイリアスに自動でなる

```ruby
class Foo < Thor
  desc 'say', 'say hello'
  def say
    puts "Say hello!" unless options[:dry_run]
  end

  map 'talk' => 'say'
end
```

### サブコマンドを登録したい

* ところでサブコマンドが出てきたら、モジュールを作ってくくっておくと分かりやすくなると思った

```ruby
module BarCLI
  class Sub < Thor
    desc 'say', 'Say sub'
    def say; ...; end
  end

  class Cli < Thor
    subcommand 'sub', Sub
  end
end
# barcli sub say => ...
```

### デフォルトで呼ばれるコマンドを指定したい

* `default_task` 使う

```ruby
module BarCli
  class Build < Thor
    desc 'all', 'Build all app'
    def all
      #....
    end
    default_task :all
  end
end
```

### あるコマンドから別のコマンド呼ぶ

* 色々省略できるがややこしいので、以下の公式を覚える：

```ruby
# 第一引数： Thor クラスのサブクラスで、サブコマンドを定義したやつ
# 第二引数： 配列で、コマンドに実際渡す引数。オプション系除く
# 第三引数： オプションをHashで。親のオプションを丸っと引き継ぐなら省略可能。それ以外微妙に加工するのなら適宜 `Hash#merge` とか使う
invoke SomeSub, [:do_hoge], options.merge(:bar => foobar)
```

### 全サブコマンドでの共通オプションの指定＋共通処理の書き方

* ややHackyだけど以下の要領で `invoke_command` を上書けば行ける
* コマンドでないパブリックメソッドの再定義なので、 `no_commands` で囲まないと警告が出る

```ruby
module BarCLI
  class Cli < Thor
    # verboseを共通に
    class_option :verbose, type: :boolean, aliases: "-V", default: false

    subcommand('hoge', Hoge)
    subcommand('fuga', Fuga)
    #....

    no_commands do
      def invoke_command(command, *args)
        # モジュールメソッドになっているロガーのレベルをoptionで設定
        BarCLI.logger.level = options[:verbose] ? Logger::DEBUG : Logger::INFO
        super # 必ず呼ぶんだよ
      end
    end
  end
end
# あとはサブコマンドを定義する
```
Paper Plane xUI でアプリを起動して選択したフォルダ、ファイルをドロップする #PPx

アプリを起動した後にドロップしていたけど、短縮できそうだったのでスクリプトにした。

実行例: `*script launchdrop.js,cmd,caption`
cmd はエイリアスで登録しておく。
caption はキャプション。

```js:launchdrop.js
//!*script
// アプリを起動してドロップ
// PPx 1.41+2 x64 + Script Module R14

if (PPx.Arguments.length < 2) PPx.Quit(-1);
var cmd = PPx.Arguments.Item(0);
var caption = PPx.Arguments.Item(1);
// cmd はエイリアスに登録する
PPx.Execute("%Obi %'" + cmd + "' %: *autodragdrop " + caption );
```
Rails+Herokuで5分でWebアプリ作るおっ（ ＾ω＾）

Ruby on RailsとはRubyのWebアプリケーションフレームワーク。
Web界ではもっとも有名なフレームワークと言っても過言ではないのではないでしょうか。

HerokuはPaaSの一つで、当初はRailsのために作られたものなのでRailsとの相性は抜群です。

今日はこれを使って5分で、Memberを登録しておくだけの簡単なWebアプリを作りますよ。環境はMacです。

個々の詳細については特に説明しておりません。最短の手順を記述するのみです。

## インストールしてあるもの

* gitをインストール済み
* rubyをインストール済み
* Postgresインストール済み
* gem install rails済み
* heroku toolbeltインストール済み


## タイムアタック前の確認事項

### heroku login

すぐログイン切れちゃうので`heroku apps`なんかを打って確認しておくしておく。
パスワード入力と2way authentication codeが必要。

###  PostgreSQL

別タブでpostgresを起動しておく。
Macでやっているのでdaemon化はしていないのです。

```
$ postgres -D /usr/local/var/postgres
```

## 準備ができたらタイムアタック開始！
### Railsアプリを作る

Memberを登録するだけのアプリを作ります。

```
$ rails new memberlist -d postgresql
``` 

時間がかかります。

```
$ cd memberlist
$ rails s 
```

http://localhost:3000/ をブラウザで叩いて表示されることを確認。まだDBの設定をしていないのでエラーになります。

次にScaffoldで/membersページをつくり、MigrationでDBを作ります。

```
$ createdb memberlist_development
$ rails g scaffold Member name:string comment:text
$ rake db:migrate
$ rails s
```

再びブラウザから確認。これでアプリが完成しました。

### Gitリポジトリ作る

```
$ git init
$ git add .
$ git commit -m'initial commit'
```

### Herokuへデプロイ

GemfileとProcfileというファイルが必要です。

Gemfileは既にできています。
Heroku対応させるために以下を末尾に追加。

```ruby:Gemfile
gem 'rails_12factor', group: :production
```

反映。

```
$ bundle install
```

Procfileを作ります。

```
$ vim Procfile
# 中身は以下のようにする。
web: bundle exec rails server -p $PORT
```

ここいらでcommitしましょう。

```
$ git commit -a -m'Create procfile'
```

```
$ heroku create
```

Heroku上で設定がされ、またリポジトリにherokuというリモートリポジトリが作成されます。

```
$ git remote -v
heroku	https://git.heroku.com/nantoka-kantoka-4491.git (fetch)
heroku	https://git.heroku.com/nantoka-kantoka-4491.git (push)
```

デプロイ。

```
$ git push heroku master
```

少し時間かかる。
これでブラウザで動作ができるはず

### Heroku上のDB設定

HerokuでのPostgreSQLの設定。アドオンを追加して、migrationします。

```
$ heroku addons:add heroku-postgresql
$ heroku run rake db:migrate
```

これで出力されたURLで見られる。

アプリについての情報は以下で見られる。

```
$ heroku apps:info
```


## 参考資料

ドットインストールをかなり参考にさせていただきました。

* ドットインストール Heroku入門 http://dotinstall.com/lessons/basic_heroku
【jQuery】$.getJSON()

##概要
```js:
jQuery.getJSON(url, [data], [handler])
```

Getメソッドで値を取得する。取得した値はオブジェクトとして扱われる。（ように見える。。）

$.get()をラップしたもので、以下と同等。

```js
$.get(url, data, callback, "json");
```

JSONPまわりの話はのちほど。

##パラメータ
* $.getJSONのパラメータ

url：url
data:サーバへ送信するデータ。オブジェクトで設定。
callback:成功時のコールバック。$.ajax()のsuccessと同じ。

* callbackの引数

data：サーバから返るJSONオブジェクト
status：リクエスト結果を表す文字列

##例
```js
$.getJSON(
  "test.php", //リクエストURL
  null,       //送信データ
  function(data, status) {
    // 通信成功時の処理
  }
);
```

参考：[$.getJSON](http://stacktrace.jp/jquery/api/ajax/jquery.getjson.html)

サーバ側の処理：[【Cake】Jsonを出力する処理](http://qiita.com/kazu56/items/a52adb68f3bdb3313c63)
ruby2.2.0 + chef-zero で../fbuffer/fbuffer.h:175:47: error: マクロ "rb_str_new" は引数を 2 要求しますが、1 個しか与えられていません

ruby2.2.0を入れて、chefzeroを入れようとしたら表題のエラー

```rb:Gemfile
gem "chef"
gem "chef-zero"

```

エラー内容

```
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /home/rails/.rbenv/versions/2.2.0/bin/ruby -r ./siteconf20150218-11650-18cozd7.rb extconf.rb
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling generator.c
generator.c:1 から include されたファイル中:
../fbuffer/fbuffer.h:175:47: error: マクロ "rb_str_new" は引数を 2 要求しますが、1 個しか与えられていません
In file included from generator.c:1:
../fbuffer/fbuffer.h: In function ‘fbuffer_to_s’:
../fbuffer/fbuffer.h:175: 警告: initialization makes integer from pointer without a cast
make: *** [generator.o] エラー 1

make failed, exit code 2

Gem files will remain installed in /home/rails/chef-zero/vendor/ruby/2.2.0/gems/json-1.7.7 for inspection.
Results logged to /home/rails/chef-zero/vendor/ruby/2.2.0/extensions/x86_64-linux/2.2.0-static/json-1.7.7/gem_make.out
An error occurred while installing json (1.7.7), and Bundler cannot continue.
Make sure that `gem install json -v '1.7.7'` succeeds before bundling.


```

json gemのコンパイルがうまくいかないもよう

デフォルトでjson 1.7.2が入るみたいなのだけど、
その中で呼ばれるfbuffer_to_sでおこられている。


対象行を見ると

```
static VALUE fbuffer_to_s(FBuffer *fb){
VALUE result = rb_str_new(FBUFFER_PAIR(fb)); #ここ
...

```

ってなってて,どうやらこの引数が足りていないの？？

マクロは

```
#define FBUFFER_PAIR(fb) FBUFFER_PTR(fb), FBUFFER_LEN(fb)
```
になっているんだけど、

そしたら同じ人達がここにいて
https://github.com/flori/json/issues/229

ここでもうすでに修正されていた（1.8.2)
cのマクロのとこでつまずいているみたいだけど、cはもう覚えていないので適当にふーん

https://github.com/flori/json/commit/18b3000090d1044425d369a58ebe52f5342b9699


解決策は、gemfileで1.8.2を指定する


```rb:Gemfile
gem "json" ,'1.8.2'
gem "chef"
gem "chef-zero"
```

これでいいのかな？
とりあえずbundle installはうまくいきました ;)
[CakaPHP 2.3.9]inList validationで型チェックを行わないようにする

## 経緯

* CakaPHP 2.3.9においてinListはデフォルトで型チェックを行う。  
そのためformから送信したデータとvalidateで用意した型の食い違いにより思うような結果にならなかった事から型のチェックを行わないようにしたいと思った。

## 思うような結果にならなかった時のコード

* Modelで次のようなvalidateを用意。

```php
$this->validate = array(
    'list' => array(
        'rule' => array('inList', array(1, 2, 3)),
        'required' => true,
        'allowEmpty' => false,
        'message' => 'invalid',
    ),
);
```

* Viewで次のようなradioがある。

```php
<?php echo $this->Form->radio(
    'list',
    array(1, 2, 3)
); ?>
```

* formで送信されると値はstringになるが、validateでの定義はintにより、型が異なることでバリデーションでひっかかる。

## inListで行われる処理を確認

* `lib/Cake/Utility/Validation.php`を確認したところ...

```php
public static function inList($check, $list, $strict = true) {
    return in_array($check, $list, $strict);
}
```

* in_array()の第三引数にtrueを渡している。  
http://php.net/manual/ja/function.in-array.php

## inListで型のチェックを行わないように設定変更

* Modelのvalidateで型のチェックまで行いたくないのでinListにfalseを渡すよう変更。

```php
$this->validate = array(
    'list' => array(
        'rule' => array('inList', array(1, 2, 3), false),
        'required' => true,
        'allowEmpty' => false,
        'message' => 'invalid',
    ),
);
```

* 型のチェックを行わないことでバリデーションを通るようになった。
【Backlog】 Git リモートリポジトリの作成

#手順

対象のプロジェクトに移動して

![スクリーンショット 2015-02-18 17.11.57.png](https://qiita-image-store.s3.amazonaws.com/0/67591/866ff074-3f59-2ac5-c008-1938fa88fa70.png)


プロジェクト設定をクリック


![スクリーンショット 2015-02-18 17.13.18.png](https://qiita-image-store.s3.amazonaws.com/0/67591/f2f26c5b-ad78-2137-8ee8-caafb7b449d8.png)

サイドメニューの「Git」をクリック

「このプロジェクトでGitを使う」をクリック

![スクリーンショット 2015-02-18 17.13.33.png](https://qiita-image-store.s3.amazonaws.com/0/67591/7bd9da0e-ef02-5d4d-9a62-6edd837096bd.png)

ナビゲーションバーに「Git」の項目が追加される

「＋リポジトリを追加する」をクリック


![スクリーンショット 2015-02-18 17.14.17.png](https://qiita-image-store.s3.amazonaws.com/0/67591/63ed3c97-46c9-7d01-aaae-4b7a8ca42a8e.png)

「リポジトリ名」（必須）と「説明」（任意）を入力

「Webフック」は空けたままでいいです

入力したら「リポジトリを作成する」をクリック

![スクリーンショット 2015-02-18 17.14.41.png](https://qiita-image-store.s3.amazonaws.com/0/67591/aaf9262f-f117-8166-ff66-354c89c83f78.png)

リポジトリが作成されました。

では、あとはお決まりのローカルにcloneしてからpushまでをやってみましょう

リモートリポジトリのurlは上のHTTPの方を使うのでコピーしておきます

コマンドラインから

>$ cd  作業ディレクトリ
$ git clone さっきコピーしたurl

![スクリーンショット 2015-02-18 17.32.28.png](https://qiita-image-store.s3.amazonaws.com/0/67591/5277f5b8-ce95-7878-7e02-9e1de26a266f.png)

cloneが成功するとフォルダが追加されます


>$ cd doburoku
>$ touch index.html
>$ git add —all
>$ git commit -m 'first commit’
>$ git push origin master

このフォルダに移動してファイルを作成してmasterブランチにpushまで


![スクリーンショット 2015-02-18 17.36.47.png](https://qiita-image-store.s3.amazonaws.com/0/67591/7e643aea-a800-e75c-c872-9b8fcc499c93.png)

成功するとブランチ　masterが作成され、詳細を確認することができます


##sshで接続する場合

例えば案件にアサインされて、初回のclone時は高速なHTTPの方が良いですが、
以降、pushの度にBacklogのIDとパスワードを聞かれるので、
SSHを使いたいというシーンがでてくると思います。

>$ git remote set-url origin XXXX

等でリモート先を変えて、

![スクリーンショット 2015-03-04 10.13.43.png](https://qiita-image-store.s3.amazonaws.com/0/67591/c756ebb0-8c14-35b1-9baf-173dc0c36c9d.png)

個人設定　< SSH公開鍵　から貼付けて登録すればSSHで接続できます。

とってもシンプルで簡単ですね
PowerShellからOffice365のExchange Web Services Managed APIを使用してメールを送る

Exchange Web Services Managed APIの練習です。
Office365のExchange Web Services Managed APIをたたいてメールを送信します。

PowerShellからメールを送信するだけならもっと簡単な方法がありますので、この内容を使うことはないかな。

# 準備 #

[Microsoft Exchange Web Services Managed API 2.2 ](http://www.microsoft.com/en-us/download/details.aspx?id=42951)をダウンロードしてインストールします。

# ソース #

someone@example.comあてに「Hello world」というサブジェクトのメールを送信します。

```ps1:sendmail.ps1
Import-Module "$env:ProgramFiles\\Microsoft\\Exchange\\Web Services\\2.2\\Microsoft.Exchange.WebServices.dll"

# Office365に接続するログインIDとパスワードです
$user = "myname@myorg.apac.microsoftonline.com"
$pass = "mysecret"

# AutoDiscoveryURLのコールバックです。これがないとAutoDiscoveryURLで失敗します
# 引数として渡すために変数に保存しておきます
function RedirectionUrlValidationCallback($redirectionUrl) {
    return $true
}

$redirectionUrlValidationCallback = Get-Content Function:\RedirectionUrlValidationCallback

$cred = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials($user, $pass)

$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService
# トレースログを有効にします。
$service.TraceEnabled = $true
$service.TraceEnablePrettyPrinting = $true
$service.TraceFlags = [Microsoft.Exchange.WebServices.Data.TraceFlags]::All
$service.Credentials = $cred
# 接続するURLは必ずAutodiscoverする必要があります
$service.AutodiscoverUrl($user, $redirectionUrlValidationCallback)

$email = New-Object Microsoft.Exchange.WebServices.Data.EmailMessage($service)
$email.ToRecipients.Add("someonea@example.com") # メール宛先
$email.Subject="Hello world" # メールサブジェクト
$email.Body = New-Object Microsoft.Exchange.WebServices.Data.MessageBody("Hello EWS API") # メール本文
$email.Send()

```

# はまったこと #

EWS APIのURLは、auto discoveryしないとダメです。
Yahoo WEB APIをバッチ処理から実行したい

Yahoo!デベロッパーネットワーク ご担当者様

お世話になります。

御社ショッピングモールへ出店するための準備をしております。
既に他ショッピングモールに出店しており、御社ショッピングモールとの自動在庫連動を考えております。
想定している処理は、在庫連動用スクリプト(php)をLinux上からcronで定期的に稼働させるバッチ処理です。
御社在庫更新用APIを確認したところ、YahooID連携用のAPIとなっておりました。当店では自社の在庫連動のみを想定しており、WEBサービスとして公開する予定は御座いません。そのため、自ユーザーのみのアクセスになります。
API実行時、アクセストークンが必要になるようなので、クライアントアプリとしてアプリケーション登録致しました。

御社ドキュメントを確認したところ、バッチ処理として実行する場合はimplicitとして実行するようなので、Authorizationエンドポイントの以下仕様を元に簡単なスクリプトを作り、接続テストを行ってみました。
http://developer.yahoo.co.jp/yconnect/client_app/implicit/authorization.html

スクリプトは以下の通りです。

```
<?php
/**
 *アクセストークン取得テスト用（GET）
 *
 */
$api = 'https://auth.login.yahoo.co.jp/yconnect/v1/authorization';
$appid = 'アプリケーションID';
$params = array(
   'response_type' => 'token',
   'client_id' => $appid,
   'redirect_uri' => 'カスタムURIスキーム',
);
$header = array(
   'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
);
$ch = curl_init($api.'?'.http_build_query($params));
curl_setopt_array($ch, array(
    CURLOPT_RETURNTRANSFER => 'true',
    CURLOPT_HTTPHEADER => $header,
    CURLOPT_HEADER => 'true'
));
$result = curl_exec($ch);
curl_close($ch);
print $result;
?>
```

実行したところ、スクリプトに誤りがあるのか$resultには"1"とのみ格納されておりました。こちらエラーコード、もしくはstate値でしょうか？
アプリケーションIDやredirect_uriの値が違う場合は「redirect_uri is invalid.」等のエラー画面が出力されますので、接続はできていると思われます。

引っ掛かっているのは、「ユーザーが同意完了後の挙動」としてレスポンスパラメーターが返る仕様のようですので、redirect_uriで指定されたURIで認証を行わないとアクセストークンが戻らないではないかという点です。

クライアントアプリとして登録した際、カスタムURIスキームに値が入っており、そちらの値をredirect_uriに指定致しましたが、仕様書を見た限りではカスタムURIスキームを指定した場合、どのように認証処理を行えば良いか記載がなく、ご相談させて頂きました。

以上よろしくお願い申し上げます。
DapperでSQLServerのTime型フィールドを取得する方法

http://stackoverflow.com/questions/20688723/using-dapper-dot-net-how-do-i-map-sql-time-column-to-a-net-type

こんなテーブルからデータ取得したい場合、

```sql
--始業と終業時刻マスタ
CREATE TABLE [work_time_range](
	[id] [nvarchar](50) NOT NULL,
	[start_time] [time](7) NULL,
	[end_time] [time](7) NULL
)

--従業員マスタ
CREATE TABLE [employee](
	[id] [nvarchar](50) NOT NULL,
	[name] [nvarchar](50) NOT NULL
)
```

time型フィールドはCONVERT関数つかってDateTime型に変換してやる必要がある。

```csharp
public class WorkTimeRange
{
    public string Id { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }
}

public class Employee
{
    public string Id { get; set; }
    public string Name { get; set; }
    public WorkTimeRange TimeRange { get; set; }
}

public interface IEmployeeService
{
    IList<Employee> GetAll();
}

public class EmployeeService : IEmployeeService
{
    private ConnectionStringSettings _conStr;

    public EmployeeService()
    {
        this._conStr = WebConfigurationManager.ConnectionStrings["DefaultConnection"];
    }

    public IList<Employee> GetAll()
    {
        using (var con = new SqlConnection(_conStr.ConnectionString))
        {
            con.Open();
            
            var sql = @"
select 
t1.*, 
CONVERT(DATETIME, t2.start_time) AS start_time,
CONVERT(DATETIME, t2.end_time) AS end_time
from 
employee t1 
left outer join 
work_time_range t2 
on 
t1.id = t2.id 
order by 
t1.id";
            var employees = con.Query<Employee, WorkTimeRange, Employee>(
                sql
                , (e, w) => {
                    e.TimeRange = w;
                    return e; 
                }
                , splitOn: "id,start_time");
            return employees.ToArray();
        }
    }
}
```

※DBはSQLServer2012を使用。試してないけどデータベース毎に個別対応が必要と思われます。
みんなの為のMySQLまとめ（１３）

参考
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_16.htm

###■システム日付、システム時間

  ・current_timestamp() 関数は、システム日付(サーバ日付) を返す。

>```
select current_date;
```
![kobito.1424248440.715413.png](https://qiita-image-store.s3.amazonaws.com/0/59354/3bf8f8b5-4bb3-55d7-cc7c-855d619158b5.png "kobito.1424248440.715413.png")
　


>```
select current_time;
```
![kobito.1424248595.710490.png](https://qiita-image-store.s3.amazonaws.com/0/59354/b1ab404c-3c92-ef15-2446-c17814b3d6ee.png "kobito.1424248595.710490.png")
　

>```
select current_timestamp;
```
![kobito.1424248629.370256.png](https://qiita-image-store.s3.amazonaws.com/0/59354/b33aa82c-8ab0-efa2-f666-7646a2292e61.png "kobito.1424248629.370256.png")
　

>```
select now();
```
![kobito.1424248812.643063.png](https://qiita-image-store.s3.amazonaws.com/0/59354/ec1df61a-a341-7ef2-6887-d23cff4de93c.png "kobito.1424248812.643063.png")
　

>```
select date_format(now(), '%y.%m.%d');
```
![kobito.1424248950.166245.png](https://qiita-image-store.s3.amazonaws.com/0/59354/18c75a29-1071-0597-13a7-43c29e1f5fb1.png "kobito.1424248950.166245.png")
　

###■日付切り捨て

>```
select cast(substring(now(), 1, 10) as date);
```
![kobito.1424249113.349813.png](https://qiita-image-store.s3.amazonaws.com/0/59354/5c8c5c88-b8b4-c2e4-5c90-21131d5c75cb.png "kobito.1424249113.349813.png")
　

###■日付の差 (日付間隔、日付範囲)

  ・to_days() をうまく利用する。
    (日付計算、日数計算、カレンダー計算)

>```
select to_days(now()) - to_days('2015-02-10 00:00:00');
```
![kobito.1424249903.793171.png](https://qiita-image-store.s3.amazonaws.com/0/59354/c8514fd3-f7b4-a13e-ffc6-7c3ea9a7474f.png "kobito.1424249903.793171.png")
　

###■日付の加算

  ・date_add を使用する。
    (日付計算、日数計算、カレンダー計算)

>```
select date_add(now(), interval 3 day);
```
![kobito.1424250156.940519.png](https://qiita-image-store.s3.amazonaws.com/0/59354/e8f67326-4597-9e24-c3c6-ae92faf42fa7.png "kobito.1424250156.940519.png")
[Objective-C] ナビゲーションバーを透過にする


iOSのTwitterアプリのアカウントビューを見ると、下図のようにナビバーが透過されています。
なんか色々ごにょごにょしてやっと透過できたのでメモ。

![Twitterスクリーンショット](https://qiita-image-store.s3.amazonaws.com/0/5616/b3c3a0c4-7ede-e370-6635-69c799b4ae69.png "Twitterスクリーンショット")


## コード

```objc:transparent-navbar
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init]
                                              forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
```

`navigationBar`の`setBackgroundImage:forBarMetrics:`と`setShadowImage:`に`[[UIImage alloc] init]`で空のイメージを渡すことで実現できました。


ちなみにハマったメモとして、最初は↑のように空のUIImageではなく、navigationBarのサイズを取り出してそのサイズ分の透明の画像を動的に生成して適用、とやっていました。

が、なぜかそれだとRootViewのinsetがstatus bar分ずれる、という現象になりました。
未だに不明ですが、空のUIImageを設定することで回避できたのでメモ。
簡単にReact.js書き始められるスケルトン（browserify with gulp）つくってみた

## [react-skeleton](https://github.com/varmil/react-skeleton)

### 使い方
* リポジトリのREADMEを読んで下さい。

### 特徴
* ファイル変更を監視して差分ビルド（watchify）
* dev環境下ではソースマップを出力

### Motivation
* React（に限らないけど）開発環境を毎回一から整えるの辛すぎ
* スケルトンっぽいものを作るタイミングがなかったので満を持して。

### Note
* 既存の運用アプリからぶっこ抜く形で無理やり作った。
* memoは @mizchi さんの影響を受けて今日追記した。備忘録。

### 感想
* 結構雑なところがありますがご愛嬌。
* gulpfileが一番の肝だと思いました。ビルド大切
bundle install しようとすると Too many gems と言われる

## 問題

先日開発している Ruby on Rails のアプリケーションで下のようなエラーが突然出るようになりました。

```bash
$ bundle     # bundle install の省略形
Fetching gem metadata from https://rubygems.org/...Retrying dependency api due to error (2/3): Bundler::HTTPError Net::HTTPUnprocessableEntity: Too many gems (use --full-index instead)
Retrying dependency api due to error (3/3): Bundler::HTTPError Net::HTTPUnprocessableEntity: Too many gems (use --full-index instead)
```

`Too many gems` … 確かに Gem は結構使ってますが、「絶対にこのシステムよりも多く使っているものがあるはず。他のところにエラーが有るに違いない」と思い、調べてみたところ、`Bundler` のエラーということが分かりました。

[GitHub イシュー](https://github.com/bundler/bundler/issues/3367) にも書いてありますが、**1.7.13** 以降では直っているようです。

## 直し方

まずは今使っている `bundler` のバージョンを調べてみましょう。

```bash
$ gem search -l bundler

*** LOCAL GEMS ***

bundler (1.7.11)
```

古いですね。`gem install` で最新のをインストールしてみましょう。

```bash
$ gem install bundler
Fetching: bundler-1.8.2.gem (100%)
Successfully installed bundler-1.8.2
Parsing documentation for bundler-1.8.2
Installing ri documentation for bundler-1.8.2
Done installing documentation for bundler after 3 seconds
1 gem installed
```

僕が実行したタイミングでは `1.8.2` が入りました。
これで `bundle install` が通るようになります。

## 詳しく調べてみました

せっかくなので、どんな感じのバグだったのか調べてみました。

探しまわったら、[このコミット](https://github.com/bundler/bundler/commit/a35a5bdfce632b38e123bc6626692b91cdbcbf0a) で直ってるとのことなので、中身を見てみましょう。

```diff
@@ -301,10 +301,14 @@ def dependency_api_uri(gem_names = [])
# fetch from Gemcutter Dependency Endpoint API
def fetch_dependency_remote_specs(gem_names)
Bundler.ui.debug "Query Gemcutter Dependency Endpoint API: #{gem_names.join(',')}"
- marshalled_deps = fetch dependency_api_uri(gem_names)
- gem_list = Bundler.load_marshal(marshalled_deps)
+ gem_list = []
deps_list = []
+ gem_names.each_slice(Source::Rubygems::API_REQUEST_LIMIT) do |names|
+ marshalled_deps = fetch dependency_api_uri(names)
+ gem_list += Bundler.load_marshal(marshalled_deps)
+ end
+
spec_list = gem_list.map do |s|
dependencies = s[:dependencies].map do |name, requirement|
dep = well_formed_dependency(name, requirement.split(", "))
```

`Source::Rubygems::API_REQUEST_LIMIT = 500` ずつで [`each_slice`](http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-each_slice) してるのが分かりますね。
どうやら、Ruby Gems のサイトが 1 クエリー当たり 500 個の Gem までしかリクエストをかけてはいけないようです。
Laravel3 Viewを上書きする

**Laravel3の情報です**

View:make()で作成しているビューを書き換えたい

# 結論
composer内でpathを書き換える
つまりビューのイベントを利用する。

```php:routes.phpとか 
View::composer('呼び出しているビュー', function ($view) {
    $View=>path = View::make('書き換えたいビュー')->path

    // どう作用するか不明だけどviewの名前も上書きした方がいいとは思う
    // $View=>view = View::make('書き換えたいビュー')->view
    });
```

(`$View = View::make('書き換えたいビュー')`じゃ)いかんのか？
いかんらしい。

```php
$View = null
```

とかも効かない。強い。よくわからない。

本当にこれで大丈夫かはわからないけど、4とかではこーやってできすますよーとかあれば3用に改変できるかも…

でも一番良さそうなのはやっぱり`View::name()` `View::of()` でIoCっぽくすることかな？

###viewの中身

```php:$viewの中身
Laravel\View Object ( 
    [view] => ～
    [data] => Array ( 
        [errors] => Laravel\Messages Object (
            [messages] => Array ( ) 
            [format] => :message 
        ) 
    ) 
    [path] => /framework/application/view/～.blade.php ) 

```

$view->new = 'new'
とか設定すると$view->date['new']に入る模様
マジックメソッドとかの実装なのかな？

# 経緯(余談)
少しだけ通常版とは異なるカスタマイズをする必要が出たので今まで通り

* 上書き用バンドル作成
* バンドル内のRoute.phpでカスタマイズ箇所のルーティングを上書き
* カスタマイズ元を継承したモデル、コントローラーをカスタマイズ
* ビュー作成

としようとしたが、どうやらカスタマイズ箇所はモデルとビューのみで済みそう。
モデルはたまたまIoCを使っていたので`IoC::register()`で上書きできそう。
じゃあビューも上書きできたらコントローラー作る必要ないのでは？
通常版コントローラー更新→カスタマイズに変更箇所反映の作業がなくなるかも…
と淡い希望を抱く。
jQueryでイベントデリゲート記述のメモ

イベントを複数もつ要素に対して、イベントデリゲートを記述するときに書き方忘れがちなのでメモ。

```lang:html
<ul>
<li>TEST1<li>
<li>TEST2<li>
<li>TEST3<li>
</ul>
```
### イベント単体バージョン

```lang:javascript
$('ul').on('click', 'li', function() {
  // click時のイベントを記述
  console.log($(this).text());  // li実体
});
```

### イベント複数バージョン

```lang:javascript
$('ul').on({
  'mouseenter': function() {
    // mouseenter時のイベントを記述
  },
  'mouseleave': function() {
    // mouseleave時のイベントを記述
  }
}, 'li');
```

jQuery1.7以上であれば上記記述で良いけど、それ以下のバージョンでは直接イベント定義の時には、bind()で、デリゲートしたければdelegate()で定義。
ちょっと記述方法が違う。

### delegate()での実装（一応）

```lang:javascript
$('ul').delegate('li', 'click', function(){
  // click時のイベントを記述
});
```
git commandのaliasを作ってる時でも補完して欲しい時


これ何とかなんないのかなと思ってたら素晴らしいtipsが見つかったが、そのまま使えなかったのでちょっと変えた

[bashでgitをgなどでaliasを設定しているときでも git-completion で補完できるようにする](https://github.com/shikakun/tips/issues/55 "Github")


#git-completion.bash

多分`bashrc`かなんかで`git-completion.bash`呼び出してると思うので探す
自分の場合はこんなかんじになってる

`.bashrc`

~~~bash
alias g="git"
source /usr/local/etc/bash_completion.d/git-completion.bash
~~~

参考にしたtipsと`__git_complete`の内容が若干変わっているので`__git_complete`呼び出しを増やす形で対応する。
一行追加するだけで快適な補完ライフ

`git-completion.bash`

~~~bash

# Setup completion for certain functions defined above by setting common
# variables and workarounds.
# This is NOT a public function; use at your own risk.
__git_complete ()
{
	local wrapper="__git_wrap${2}"
	eval "$wrapper () { __git_func_wrap $2 ; }"
	complete -o bashdefault -o default -o nospace -F $wrapper $1 2>/dev/null \
		|| complete -o default -o nospace -F $wrapper $1
}

__git_complete git __git_main
__git_complete gitk __gitk_main
__git_complete g __git_main #追加

~~~
AzureWebsites でログ出力しながらデバッグする

ローカルデバッグで変数の中身を確認しながらデバッグする、ということはよくあると思います。
ローカルでは問題ないのに AzureWebsites でのみ問題が起こるケースでは、ローカルと同じようにデバッグしたいものです。
このやり方をまとめます。

# 準備
## ソースコードの修正

Trace を使ってログ出力します。

```csharp
public void SampleMethod()
{
    System.Diagnostics.Trace.WriteLine(targetObject);
}
```

## Websites の設定変更

作業は[新しいポータル](https://portal.azure.com/)から行います。

[診断ログ]から[アプリケーションログ(ファイルシステム)]をオンにします。
[レベル]はよくわからなければ[詳細]にしておくのがいいでしょう。

![azure-config-log.png](https://qiita-image-store.s3.amazonaws.com/0/22059/629ae427-003b-699c-672c-41529a3b634c.png)


# デバッグ
## 新ポータルを開く
[ストリーミングログ]を開きます。

![azure-streaminglog.png](https://qiita-image-store.s3.amazonaws.com/0/22059/f450ab70-2862-8ebd-335f-2102ad2cb3c6.png)

![azure-applicationlog-null.png](https://qiita-image-store.s3.amazonaws.com/0/22059/dc25eac7-f457-2e0f-cfd9-9de5542b2406.png)


これで準備完了です。

## デバッグしたい動作を行う

リクエストを送って、Websites にさせたい動作をさせましょう。

すると、[ストリーミングログ]にリアルタイムにログが出力されます。

![azure-applicationlog.png](https://qiita-image-store.s3.amazonaws.com/0/22059/7eede374-51fc-1e0c-00ce-7ba87f55a960.png)

これでログ出力しながらデバッグできますね！

お疲れさまでした。
WordPressテーマ自作時の記事内画像位置のCSS設定

## 画像挿入時に自動付与される画像配置のスタイル

WordPressで記事に画像を挿入する際には、「添付ファイルの表示設定」欄で画像の配置を選択できます。

選んだ配置により、画像には以下のclassが自動的に付与されます。

配置 左：alignleft
配置 中央：aligncenter
配置 右：alignright
配置 なし：alignnone


## テーマ作成時の注意点

WordPress標準のテーマを使用している場合は問題ありませんが、WordPressのテーマを自作している場合は、これらのclassをCSS内に定義していないと画像配置が正しく記事に反映されません。

エディタ上では「左寄せ」「中央寄せ」「右寄せ」が正しく表示されていても、公開した記事では「画像がセンタリングされない」などの状態が発生します。

記事内の画像位置を正しく反映させるためには、以下のclassをCSSに定義するようにしてください。

```CSS

/* 画像配置 左 */
img.alignleft {
		text-align: left;
}

/* 画像配置 中央 */
img.aligncenter {
		display: block;
		margin: 1px auto;
}

/* 画像配置 右 */
img.alignright {
		display: block;
		margin: 1px 1px 1px auto;
}
```

これで、画像位置が記事に正しく配置されます。
【sublimetext】自動保存

【追記（2015年2月19日）】（Sawadays0118さんありがとうございます。）
大量ファイルを置換した際は、File > Save All で保存した方が早いし楽でした。
とりあえず、`true`にしておくと保存し忘れがなくなるかもです。

-----------------------------------------------------------------------

大量にファイルを置換した時に、一々`ctrl + s`押すの疲れました・・・。

Preferences ≫　Settings - Userで以下を追加してください。

```
 "save_on_focus_lost": true,
```

（Settings - Defaultの182行目くらいに`"save_on_focus_lost": false`がいるので、コピペしてfalseをtrueにすればよいです。）

trueにすると、別ファイルに移る瞬間に自動的に保存されるようになるので、
ひたすら`ctrl + tab`で一通り置換していったファイルを見返すだけで保存されていきます。
（見返す必要ないならば`ctrl + tab`長押しで瞬殺ですね。）
URL を自動リンクさせない

Qiita や大体の Markdown プロセッサに URL を書くとリンクされてしまう。

> http://qiita.com/k_ui

これを切る。


対処方法
--------------

`:`（コロン）前にバックスラッシュをつけると:

~~~~~~~~~~~~md
http\://qiita.com/k_ui
~~~~~~~~~~~~

こんな感じでリンクされない:

> http\://qiita.com/k_ui

### 別の対処方法

これでもリンクされないが、つらい:

~~~~~~~~~~~~md
<span>http</span>://qiita.com/k_ui
~~~~~~~~~~~~

これはこうなる:

> <span>http</span>://qiita.com/k_ui

参考
---------

* [CommonMark Spec の Autolinks の項](http://spec.commonmark.org/0.16/#autolinks)
  * あんまり参考にしてないけど、`:` がキーになっているのが分かったので試しにエスケープしてみたら上手くいった。
  * ただ、`:` をエスケープするとリンクされなくなるのがこの仕様に則った挙動なのかよくわからない。
  * Qiita の Markdown だけの挙動かも。
xamarin iOS/AndroidでGoogle Analyticsを使うには

xamarinアプリでGoogle Analyticsを使ってアクセス解析をするには？

#iOSの場合
こちらのライブラリをダウンロードしてリンクする。
https://components.xamarin.com/view/googleanalytics

Unified API利用の場合は、xamarin iOSのバージョンが8.6以降でないと、実行時に例外が発生してしまうので注意が必要。

```lang:HogeViewController.cs
using GoogleAnalytics.iOS;

// トラッカー初期化
var tracker = GAI.SharedInstance.GetTracker( "tracking-ID" );

// ビューをトラッキング
tracker.Set( GAIConstants.ScreenName, "view-name" );
tracker.Send( GAIDictionaryBuilder.CreateAppView().Build() );

// イベントをトラッキング
tracker.Send( GAIDictionaryBuilder.CreateEvent(
    "category",
    "action",
    "label",
    new NSNumber( number ) ).Build() );
```

#Androidの場合
NuGetから「Xamarin Google Play Services Binding」ライブラリを追加する。
https://www.nuget.org/packages/Xamarin.GooglePlayServices/

同時にv7系のサポートライブラリ(Xamarin.Android.v7.AppCompatとv7.MediaRouter)もリンクされ、それが原因でコンパイルエラーが発生するが、参照を削除すれば大丈夫な模様。

```lang:HogeActivity.cs
using Android.Gms.Analytics;

// トラッカー初期化
var analytics = GoogleAnalytics.GetInstance( this );
var tracker = analytics.NewTracker( "tracking-ID" );

// ビューをトラッキング
tracker.SetScreenNamet( "view-name" );
tracker.Send( new HitBuilders.ScreenViewBuilder().Build() );

// イベントをトラッキング
tracker.Send( new HitBuilders.EventBuilder(
    "category",
    "action").Build() );
```
Gitで削除した行から探す

# 概要
削除したけれど、なんとなくでしか覚えていないので一覧を出したい

# 方法
`git log -p {filename} > a.txt`

長いので`a.txt`ファイルで出力して、確認します。

# メモ
`git blame`で削除した行をだすのがベストだけれど、やり方を調査中
Excelショートカットメモ：行や列の挿入と削除

## ショートカット1
### 挿入
行の挿入 Alt + H + I + C
列の挿入 Alt + H + I + R
シートの挿入 Alt + H + I + S
セルの挿入 Alt + H + I + I

### 削除
行の削除 Alt + H + D + C
列の削除 Alt + H + D + R
シートの削除 Alt + H + D + S
セルの削除 Alt + H + D + D

## ショートカット2（コンテキストメニューを使用する）
[アプリケーションキー](http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%AD%E3%83%BC)がある場合、削除に関してはそっちのほうが早いし使いやすい。
アプリケーションキーは、右CtrlキーとWindowsキーの間あたりにある。（Dell日本語キーボードの場合）
ここでは「App」と表記します。
### 削除
行の削除 App + D + C
列の削除 App + D + R
セルの削除(左にシフト) App + D + L
セルの削除(上にシフト) App + D + U

## ショートカット3
以前のバージョンの挿入ショートカットが使えるので、挿入に関してはこちらのほうが楽。
### 挿入
行の挿入 Alt + I + C
列の挿入 Alt + I + R

* * * 
### バージョン
Excel 2013
Builder パターンで Toast の生成を行う


## はじめに
Toast 関連のコードを見栄えよく書きたいなということで、Builder パターンを使った Util クラスを作ってみました。AlertDailog のような感覚で使えます。


## 使い方
こんな感じで使えます。

```java
new ToastUtil.Builder(getActivity())
        .text("メッセージ")
        .show();

new ToastUtil.Builder(getActivity())
        .resId(R.string.message_hogehoge)
        .duration(Toast.LENGTH_LONG)
        .gravity(ToastUtil.CENTER)
        .show();
```

メッセージは、テキスト指定でも id 指定でも OK です。
duration は任意指定ですが、Toast.LENGTH_SHORT をデフォルトで指定しているため、Toast.LENGTH_LONG にしたいときに指定します。
gravity も任意指定です。中央表示したいとき用に、ToastUtil.CENTER という定数を用意しています。

## コード

こちらの記事を参考に作りました。
http://qiita.com/disc99/items/840cf9936687f97a482b

```java
public class ToastUtil {

    public static final int CENTER = Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL;

    private Context context;
    private CharSequence text;
    private int length;
    private Integer gravity;

    public static class Builder {
        private Context context;
        private CharSequence text;
        private int duration;
        private Integer gravity;

        public Builder(Context context) {
            this.context = context;

            // Default Value
            this.text = "No messages";
            this.duration = Toast.LENGTH_SHORT;
        }

        public Builder text(CharSequence message) {
            this.text = message;
            return this;
        }

        public Builder resId(int resId) {
            this.text = context.getText(resId);
            return this;
        }

        public Builder duration(int duration) {
            this.duration = duration;
            return this;
        }

        public Builder gravity(int gravity) {
            this.gravity = gravity;
            return this;
        }

        public ToastUtil create() {
            return new ToastUtil(this);
        }

        public void show() {
            new ToastUtil(this).show();
        }
    }

    private ToastUtil(Builder builder) {
        this.context = builder.context;
        this.text = builder.text;
        this.length = builder.duration;
        this.gravity = builder.gravity;
    }

    public void show() {
        Toast toast = Toast.makeText(context, text, length);
        if (gravity != null) {
            toast.setGravity(gravity, 0, 0);
        }
        toast.show();
    }
}

```
Objective-C：同期通信でNSDataを取得する方法

同期通信でNSDataを取得する方法で苦戦したのでメモ

```objc:getimage.m
    NSURL *url = [NSURL URLWithString:@"http://localhost/hoge.jpg"];

    NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:url];

    [urlRequest setAllowsCellularAccess:YES];
    [urlRequest setHTTPMethod:@"POST"];
    [urlRequest addValue:@"hogehoge" forHTTPHeaderField:@"HEADER-HOGE-KEY"];

    NSURLResponse *response;
    NSError *error;
    NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];

    NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *) response;
    NSInteger statusCode = [HTTPResponse statusCode];

     if(statusCode != 200 || !data || error) {
         NSLog(@"error");
     }

    [self.uiimageview setImage:[UIImage imageWithData:data]];
```
Laravel用語メモ

## サービスプロバイダ（Service Providers）
- 初期起動処理

## サービスコンテナ（Service Container）
- クラス間の依存を管理するツール
- アプリケーションの柔軟性とテスタビリティーを上げることができる
	
## 契約（Contracts）
- インターフェイスで、フレームワークにより提供されているコアサービスを定義したもの
- インターフェイスを利用する理由
	- 緩い結合、単純さのため
	- 契約はフレームワークの機能の簡単なドキュメントとして使える

## ファサード（Facades）
- アプリケーションのIoCコンテナに用意したクラスに「静的」なインターフェイスを提供する
- アプリケーションやパッケージをシンプルにすることができる
- ファサードが存在している一番大きな理由はテストの行いやすさ
AWS IP制限（Security Group）

# Security Group によるIP制限
AWSのSecurity Groupを利用して、特定のIPアドレスからのアクセスのみを許可する方法
EC2のインスタンス立ち上げの時などに指定するSecurity Groupで行う

下記のように、Security GroupのInboundの所に、
**アクセスを許可するIP/32**と記入して、複数ある場合は**カンマで区切る**だけ

    AA.BB.CC.DD/32,AA.BB.CC.DD/32


保存すると、勝手に分割してそれぞれのIP単位で設定してくれるので便利！



# IAMアカウント別にIP制限
記事の本題とは外れるが、IAMアカウント別にアクセス制限する場合は↓を参考
http://docs.aws.amazon.com/ja_jp/ElasticMapReduce/latest/DeveloperGuide/iprestricted-policy.html
Laravelのstr_plural/str_singularが何気に凄い

Laravelのヘルパーであるstr_plural(単語を複数形に変換)とstr_singular(単語を単数形に変換)ですが、
かなり凄いです。

bookとかは、まー当然ですよね。

```php:
echo str_plural('book');
>books
echo str_singular('books');
>book
```

では、historyは？

```php:
echo str_plural('history');
>histories
echo str_singular('histories');
>history
```

ここまでは想定の範囲内。

では、childは？

```php:
echo str_plural('child');
>children
echo str_singular('children');
>child
```

おぉ！ではmanは？

```php:
echo str_plural('man');
>men
echo str_singular('men');
>man
```

続いて、mouse

```php:
echo str_plural('mouse');
>mice
echo str_singular('mice');
>mouse
```

これでどうだ！phenomenon

```php:
echo str_plural('phenomenon');
>phenomena
echo str_singular('phenomena');
>phenomenon
```

### 素晴らしい！！


...が、しかし

```php:
echo str_plural('carp');
>carps
echo str_singular('carps');
>carp
```

むぅ・・・まぁこれは仕方ないですかね。
[Android] リスナーに値を保持させる


イベントリスナーの登録方法、いろいろあると思います。

> 参考：
> [イベントリスナー実装のベストプラクティスはなんだろう](http://yyyank.blogspot.jp/2013/01/android.html)
> [美しいOnClickListenerの実装方法(を教えてください)](http://qiita.com/t2low/items/8ac683c7ebf4b6dd1b41)

この中で、クラスを定義する(匿名クラスでなく)方法だと、リスナー内に何かしらの値を保持させることが出来ます。

> 匿名クラスだとコンストラクタが定義できないし、後から値をセットとかが出来ないため。

リスナーは"インタフェース"なので、クラスを定義する場合は次のように `implements` し、オーバーライドで "実装" を行います。下記は View の `OnClickListener` の例です。

```java:
class HogeClickListener implements View.OnClickListener {
    private int mIntHoge;

    // コンストラクタ
    public HogeClickListener(int intHoge) {
        this.mIntHoge = intHoge;
    }

    @Override
    public void onClick(View v) {
		// ...
    }
}
```

> この例だとコンストラクタで値を渡していますが、 "Setter" を通して渡しても良いかと思います。

上記のようにリスナーの"インタフェース"の"実装"を持つクラスは、次のように普通にリスナーとして利用できます。`new` する際に引数を渡してみます。

```java:
hogeView.setOnClickListener(new HogeClickListener(intHoge));
```
ps | grep hoge で grep 自身も grep されるのを防ぐ

一見何を言ってるのか分からないタイトルだが、分かる人には分かると思いますｗ

```
$ ps aux | grep redis
quanon          48559   0.1  0.0  2469924   1600   ??  Ss    2:09PM   0:00.21 redis-server 127.0.0.1:6379
quanon          49197   0.0  0.0  2423356     24 s002  R+    2:12PM   0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=.cvs --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn redis
```

<i class="fa fa-thumbs-o-down fa-fw"></i>うざい。

```
$ ps aux | grep -v grep | grep redis
quanon          48559   0.1  0.0  2469924   1608   ??  Ss    2:09PM   0:00.30 redis-server 127.0.0.1:6379
```

<i class="fa fa-thumbs-o-down fa-fw"></i>`-v` オプションで grep を grep しないようにしたけど、長くなってしまった。

```
$ alias ps\?="ps aux | grep -v grep | grep"
$ ps? redis
quanon          48559   0.1  0.0  2469924   1608   ??  Ss    2:09PM   0:00.34 redis-server 127.0.0.1:6379
```

<i class="fa fa-thumbs-o-up fa-fw"></i>これでよしとする。
gets,readlineは行の途中まででもも読んじゃう

tailっぽく1行づつ読みたい

```gets.rb
output = open("file.txt","w")
output.sync = true

Thread.new do
  open("file.txt") do |f|
    loop do
      if f.eof?
        sleep 0.01
      else
        s = f.gets #readline
        puts "gets: #{s.inspect}"
      end
    end
  end
end

output.puts("line01")
sleep(0.1)

output.write("line02\nline03\nline04\n")
sleep(0.1)

output.write("lin")
sleep(0.1)
output.write("e05\n")
sleep(0.1)

output.flush
sleep(1)

=begin
gets: "line01\n"
gets: "line02\n"
gets: "line03\n"
gets: "line04\n"
gets: "lin"
gets: "e05\n"
=end
```

# tailer
```ruby
def tailer(input)
  Enumerator.new do |y|
    buf = ""
    loop do
      if input.eof?
        sleep 0.1
      else
        buf << input.read(4*1024)
        while buf =~ /(.*?\n)(.*)/m
          y << $1
          buf = $2
        end
      end
    end
  end
end

open(ARGV[0]) do |f|
  tailer(f).each do |line|
    puts line
  end
end
```
wordpressで多言語サイトを作る

#wordpressで多言語サイトを作成できるプラグイン「bogo」の使い方

最近wordpressで日本語と英語のサイトを作る機会があり、bogoというプラグインを使用しました。
管理画面の使い方や投稿方法については既にまとめられているページがあったので自分で詰まった点などを書きます。
[Bogo で WordPress を多言語化 | プログラミング生放送](http://pronama.azurewebsites.net/2014/07/17/wordpress-bogo/)
  


##詰まった点

###英語版のページに英語版の投稿のみを表示する

　日本語版は普通に書けばロケールが日本の投稿のみが表示されます。

　英語版ページはいろいろ試したのですが日本語の投稿が表示されてしまうという現象が、、、
　```query_posts```を使うとうまくいったのでその方法について記しておきます。（```get_posts```など他の方法だとうまくいきませんでした、、、）

　簡単なことでしたが、
　query_postsの引数に ```'lang=en' ``` を追加すると英語の投稿のみが表示されるようになります。



###英語版と日本語版の判定の仕方  
主にheader.phpやpage.phpなど同じphpファイル内で日本語版と英語版で表示させるものを変えたいときに使いました。

```html+php
<?php $locale = get_locale(); /* 現在のロケールを取得 */ ?>
<?php if ('en_US' == $locale  ) : /* 英語版 */?>

	<!-- 英語版の内容 -->

<?php else:  /* 日本語版 */ ?>

	<!-- 日本語の内容 -->

<?php endif; ?>
```
何かしらの不具合が生じたときに最低でも日本語版を表示したいため、日本語版の条件分岐にはelseifではなくelseを使用しました。

ちなみに条件分岐で日本語版を指定したい場合には
```<?php if ('ja' == $locale  ) :  /* 日本語版 */ ?>```
と記述すればオッケーです。


このプラグインですがカスタム投稿でも動作しました。
方法は日本語版の投稿ページと同じ様にロケールを英語版にして投稿してくださいー
AppDelegateでAlertDialogを出したい場合(rootViewControllerの取得)

#rootViewControllerの取得

AppDelegateでAlertDialogを出すのには、rootViewControllerを取得しないとそもそも表示できないので

```swift:AppDelegate
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
```
とやっといて

```swift:AppDelegate
self.window?.rootViewController?
```
で取得する。

#debugとかでalertdialogを出したい場合

debugモードを使う方法は、[Swift での #ifdef DEBUG のやり方](http://qiita.com/qmihara/items/a6b88b74fe64e1e05ca4, "Swift での #ifdef DEBUG のやり方")を参考にしてください。

```swift:AppDelegate
#if DEBUG
    var body:NSString = "えらーめっせーじ" + "\(error)"
    var alertController:UIAlertController = UIAlertController(title: "通知", message: body, preferredStyle: UIAlertControllerStyle.Alert)
    alertController.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
    self.window?.rootViewController?.presentViewController(alertController, animated: true, completion: nil)
#endif
```
Grails 3.0.0.M1 でサーバーポートを変更する

Grails 2.Xだと、起動時に -Dserver.port=9090と指定していましたが、
Grails 3.0.0.M1だと、設定ファイルになったようです。

以下の2行を追加

```yaml:xxx/grails-app/conf/application.yml
---
server:
  port: 9090
```
Pythonで開発するときに使うツール群


## パッケージ作成/インストール

### setuptools

- Pythonプロジェクトのパッケージ化を行うライブラリ
- https://setuptools.readthedocs.io/en/latest/index.html

### pip

- パッケージ管理システム
- https://pip.pypa.io/en/stable/

## ライブラリ

### requests 

- HTTPライブラリ
- https://requests-docs-ja.readthedocs.io/en/latest/


## ドキュメント

### sphinx

- reStructuredTextを使ったドキュメント生成ツール
- https://www.sphinx-doc.org/ja/master/

### sphinx.ext.autodoc

- docstringから、ドキュメントを取り込む
- Google Sytpe
	- https://github.com/google/styleguide/blob/gh-pages/pyguide.md#38-comments-and-docstrings
- sphinx.ext.napoleon
	- NumPy および Google スタイルの docstring をドキュメントに取り込む

## テスト

### tox

- https://tox.readthedocs.io/en/latest/

- テストのための、複数の仮想環境を用意してくる


### pytest : ユニットテストフレームワーク

- https://docs.pytest.org/en/latest/


### pytest-cov : カバレッジ

- https://github.com/pytest-dev/pytest-cov

- pytestのカバレッジレポートプラグイン

### unittest.mock

- https://docs.python.org/ja/3/library/unittest.mock.html

- モックオブジェクトライブラリ

### pytest-freezegun

- https://github.com/ktosiek/pytest-freezegun

- 日時のモックツール

##  チェッカー

### pep8 : コーディング規約チェッカー

- http://pep8.readthedocs.org/en/latest/

### pyflakes : 文法エラーチェック

- https://launchpad.net/pyflakes

### pylint : 文法エラーチェック

- http://www.astroid.org/

### hacking

### flake8

### flake8-import-order

### flake8-pep257

### pyformat

- https://pypi.python.org/pypi/pyformat

### isort

- https://qiita.com/hfunai/items/12a9a24e640187895d5b

### Locust : Python製負荷試験ツールLocust

- http://locust.io/


### Paramiko : SSH接続ライブラリ

- http://www.paramiko.org/
Xcodeビルド高速化


他にもあれば教えて下さい。

## 並列ビルド

``` cmd
$ defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 7 
```

##インデキシングを解除

``` sh
$ defaults write com.apple.dt.Xcode IDEIndexDisable 1
```

元に戻す

```
$ rm -rf ~/Library/Caches/com.apple.dt.Xcode
$ defaults delete com.apple.dt.Xcode IDEIndexDisable  
$ defaults write com.apple.dt.Xcode IDEIndexEnable 1
```

## 依存関連のビルドを解除
Edit Schema > Build OptionsのFind Implicit Dependenciesのチェックをはずす
[Go] Read from stdin

## fmt

When read from stdin or write to stdout, the easiest way is to use the `fmt` package method. Just like c.

```go
import "fmt"

var t int

//Read
fmt.Scanf("%d", &t)

//Write
fmt.Println(t)
```

**Limitation**
But fmt is very slow if you want to read a lot of data from the stdin or write to stdout. In this situation, we can use the `bufio` instead. 

## Bufio

### Scanner

For the bufio, one way is to use the Scanner.

```go

import (
    "fmt"
    "os"
    "bufio"
    "strconv"
)

var sc = bufio.NewScanner(os.Stdin)

func main() {
    sc.Split(bufio.ScanWords)
    sc.Scan()
    t := strconv.ParseInt(sc.Text(), 10, 64)
    for t > 0 {
        t--
        sc.Scan()
        v, _ := strconv.ParseInt(sc.Text(), 10, 64)
        fmt.Println(n - i + 1)
    }
}
```

**Limitation**

The buffer size is not very large. Just `64 * 1024` according to the [go lang doc](http://golang.org/pkg/bufio/#pkg-examples).

If you read a word that is very long such as 10000000, it will return a empty string.

To solve this, we can use the `Reader` to custom the buffer size or read more times from the buffer to get a very long string.

## Reader

```go
package main

import (
    "bufio"
    "os"
    "strconv"
    "strings"
)

const N int = 1000005

var lbr = bufio.NewReaderSize(os.Stdin, N)
var lbw = bufio.NewWriterSize(os.Stdout, N)

//If the line is less then the buffer
func readline() string {
    buf, _, _ := lbr.ReadLine()
    return string(buf)
}

//If the line over the buffer
func read_buf_over_line() string {
    var buf []byte
    for {
        bytes, more, _ := lbr.ReadLine()
        buf = append(buf, bytes...)
        if !more { break }
    }
    return string(buf)
}


func main() {
    str := readline()
    m, _ := strconv.Atoi(readline())
    for q := 0; q < m; q++ {
        qs := strings.Split(readline(), " ")
        lbw.WriteString("Something...\n")
    }
    lbw.Flush()
}
```
kindle > Code Completeについて

Code Completeというcodingについていろいろ勉強になる本がある。ただし、この本はそれなりに厚いので、持ち運びを考えると電子書籍版が望ましい。

kindle版が販売されているので洋書版を半年ほど前に買って読んでみているが、色々と問題がある。

僕が使っている端末としては
- 2012年版 kindle paperwhite
- PC (Kindle for PC)
- Kindle Cloud Reader
- Kindle on iPad mini

kindle paperwhiteで見ていると、結構な確率で「アプリケーションのエラーがでました」とか言われて本を開けないことがある。どうもデータサイズが大きいために起きているようだ。それでも、何回かトライして本が開いたら、その後は問題なく閲覧したりハイライトやブックマークをつけたりできる。我慢が必要。

Kindle for PCはpaperwhiteと比べてCPU性能はもちろん良いのだが、一番の問題はブックマークやハイライトの情報が一切同期されないこと。
paperwhiteでたくさんのハイライトをつけたCode CompleteをKindle for PCで開くと、「このタイトルにはハイライトはありません」と出る。困ったことだ。ソフトの今後のアップデートに期待する。

Kindle Cloud Readerではハイライトもブックマークもきちんと見ることができる。

Kindle on iPad miniはPC版のような不具合があまり見られない。動作も軽快だし、paperwhiteで重そうと思う場合は、iPad miniでみるのが便利。


こういうページ数の多い本はどんどん電子書籍化して欲しいものだ。ロベールさんのC++の本であったり、平山尚さんの「ゲームプログラマになる前に覚えておきたい技術」など電子書籍化して欲しいものです。
iOS8からUITouchにタッチ半径を測定するプロパティがある


UITouchクラスのヘッダーを見てたらiOS8からmajorRadiusというプロパティが増えていた。

```objc
// majorRadius and majorRadiusTolerance are in points
// The majorRadius will be accurate +/- the majorRadiusTolerance
@property(nonatomic,readonly) CGFloat majorRadius NS_AVAILABLE_IOS(8_0);
@property(nonatomic,readonly) CGFloat majorRadiusTolerance NS_AVAILABLE_IOS(8_0);
```

雑に説明すると、タッチしたときの指の半径を返してくれる。


実際にiPad mini Ratina 2013で試した感じでは下記のような測定値になる

- 人差し指の指先でちょんと触って12から25.75000
- 人差し指をベタっと付けたら51から64.390625程度
- ペンを握るような感じで手を付けると115から270程度

単位はcmとか物理スケールではない気がするが、何かに使えそう。

なんと@shu223 の[iOS8Sampler](http://d.hatena.ne.jp/shu223/20140918/1410979802)にこのmajorRadiusを含むサンプルコードを追加してもらったので、GitHubにあるアニメーションGIFで雰囲気が伝わる。

![](https://github.com/shu223/iOS8-Sampler/blob/master/ResourcesForREADME/touch_radius.gif?raw=true)

デモを見るとわかるが、majorRadiusは実際はデバイスと指の接地面積なんだけど指に力を入れるとだいたい接地面積が増えるので結果的に圧力っぽい錯覚を受けてそれっぽいので何かに使えそう。

# majorRadiusToleranceについて

AppleのリファレンスによるとmajorRadiusToleranceは誤差らしく先述の条件で測定したところ6.437500から変わらなかった。

端末をiPhone5sにすると6.378906となり違う値となったため、おそらくデバイス毎に許容誤差として固定値が割り当てられているか工場出荷状態に戻すなど何らかのキャリブレーションによってこの値が変わるのかもしれない、とにかく利用する際にはデバイスごとに違う固定値なのは間違いない。

# 参考URL


iOS 8 の新機能のサンプルコード集『iOS8-Sampler』を公開しました
http://d.hatena.ne.jp/shu223/20140918/1410979802


UITouch Class Reference
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITouch_Class/index.html#//apple_ref/occ/instp/UITouch/majorRadius
【Photoshop】これからスライス不要？アセット機能

### アセットはPhotoshop CC（バージョン14.1以降）の機能です。


まず画像アセットの機能をオンにする必要があります。
Photoshopの画面左上のツールバーの
【ファイル】　＞　【生成】　＞　【画像アセット】をクリックします。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/44278/9b713141-e078-f6ff-eaaa-51ed1f596447.png)


右にあるレイヤー構造から書き出しを行いたい要素に対して「画像名.拡張子」という形式で名前を付けます。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/44278/cb5a2a21-eca4-c396-a5fe-daae83d949e5.png)


上記の操作を行うとPSDのディレクトリと同階層に「（PSD名）-assets」というディレクトリが自動的に作られます。

![3.PNG](https://qiita-image-store.s3.amazonaws.com/0/44278/b63dbaab-2c42-e494-6014-10799b96cc25.png)
増えてる！スライスできている！