OmniAICreator/Qiita-1.07M huggingface dataset:
Laravel5 を Heroku にデプロイ


## Laravel5 で新しいアプリケーションを作成

composerでインストールしたlaravelで ```blog```という名前のアプリケーションを作る。

```
laravel new blog
```

## 早速Herokuにデプロイ！・・しようとしてこんなエラーで半日以上苦しんだ

```
heroku create
git push heroku master
heroku oepn
```

Herokuでもアプリを作って、push & openすると、素っ気ないエラーメッセージ・・

唯一の頼り、Herokuのログを見る

```heroku-logs
app[web.1]: bash: vendor/bin/heroku-php-apache2: No such file or directory
```

何故！！？

## Procfileを追加してみる

apacheで動くように。。

```Procfile
web: vendor/bin/heroku-php-apache2 public/
```

エラー変わらず・・くそ〜〜

## Heroku PHP getting startedをやる

諦めて公式の[Getting Started with PHP on Heroku | Heroku Dev Center](https://devcenter.heroku.com/articles/getting-started-with-php#introduction)をやる。

無事デプロイできる・・
違いを目視diffで頑張って探す。。

## composer.jsonに追記

``` "heroku/heroku-buildpack-php" ```が足りないことに気づく。
追加。

```composer.json
"require-dev": {
    "phpunit/phpunit": "~4.0",
    "phpspec/phpspec": "~2.1",
    "heroku/heroku-buildpack-php": "*"
},
```

まだだめ。。

## Herokuのデプロイ時のログを見てみようと気づく

実行時ログだけじゃなくて、デプロイ時のログを見てみた。

```
remote: Compressing source files... done.        
remote: Building source:        
remote: 
remote: -----> Node.js app detected        
remote: -----> Resetting git environment 
```

*__Node.js??__*

なぜかNode.jsのアプリ認識されているらしい・・
そしてcomposerの追加ライブラリのロードとかもされず、heroku-buildpack-phpで入ってくる、```heroku-php-apache2```とかがインストールされていない状態だったらしい。

### 解決

[Heroku doesn't recognize my Laravel app as PHP app, and does not do composer install - Stack Overflow](http://stackoverflow.com/questions/27741478/heroku-doesnt-recognize-my-laravel-app-as-php-app-and-does-not-do-composer-ins)

↑の通り。

```
heroku config:add BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-php
```

環境変数を設定せよ。とのことでした。
こうするとNode.jsじゃなくてPHPだと気づいてもらえるらしい・・・

## 番外

### HerokuでPHPだと認識してもらうには・・

Heroku上でPHPである、と認識されるためには、アプリケーションルートに ```composer.json```が必要らしい。
そのためcomposet使わないPHPアプリでも、空のcomposer.json置いとけ、と公式に書いてある。

参考：[Deploying PHP Apps on Heroku | Heroku Dev Center](https://devcenter.heroku.com/articles/deploying-php#overview)

> Heroku PHP Support will be applied to applications only when the application has a file named composer.json in the root directory. Even if an application has no Composer dependencies, it must include an empty composer.json in order to be recognized as a PHP application.

普通はこれだけで大丈夫らしい。

・・が、Laravel5のアプリケーションルートに```package.json```もあるので、Node.jsかPHPか判定に迷い、（なぜか）Node.jsが勝つらしい・・
Herokuめ・・・

### HerokuでNode.jsだと認識してもらうには・・

参考：[Deploying Node.js Apps on Heroku | Heroku Dev Center](https://devcenter.heroku.com/articles/deploying-nodejs)

> Heroku Node.js support will only be applied when the application has a package.json file in the root directory.

両方ある場合はなぜかNode.jsになってしまう・・・ひどい・・

この場合は環境変数で指定すれば大丈夫らしい。 ```BUILDPACK_URL```めっちゃ重要やん・・
Mac OSX automatorでIPアドレスを表示するショートカットを作成


## 前書き
 この頃vagrantで仮想サーバーを起動するためにいちいちterminalを開くのも面倒なので、automatorでコマンドラインをショートカットするものを作ってから、暇があればautomatorで何かできないかを考えるようになった。
 そこで、簡単なショートカットを紹介
 
## IPアドレスを通知ウィンドウに表示
　OSX 10.9あたりから追加された（っけ？）右からヒョイと表示される通知ペインにIPアドレスを表示するショートカットをautomatorで簡単にできたので紹介します。
　
　まずはautomatorを起動。右上虫眼鏡（spotlightという）からautomatorを起動が手っ取り早いです。
　![Kobito.sMm1P0.png](https://qiita-image-store.s3.amazonaws.com/0/64861/19ec23f5-489e-3b0f-eacb-52d0a89a657c.png "Kobito.sMm1P0.png")

起動したら、アプリケーションを選んで「選択」です。

![Kobito.r031MM.png](https://qiita-image-store.s3.amazonaws.com/0/64861/3e3f61e7-bf54-d854-047d-5ef748c03f1a.png "Kobito.r031MM.png")

左メニュー「ユーティリティー」ー「通知を表示」を選んで、右側にドラッグ＆ドロップ！！

![Kobito.OwgXHq.png](https://qiita-image-store.s3.amazonaws.com/0/64861/33d17538-7f62-5630-95ef-c30dbe0c334e.png "Kobito.OwgXHq.png")

タイトルに「IPアドレスを通知します」を入力
左メニューの「変数」をクリックし、「システム」ー「IPアドレス」を右側にドラッグ＆ドロップ！！

![Kobito.rclJqO.png](https://qiita-image-store.s3.amazonaws.com/0/64861/4e595b9a-3298-64bb-3831-a95df4f5a630.png "Kobito.rclJqO.png")

ここまでできたら、右上にある「実行」ボタンでテスト。右からヒョイとIPアドレスが表示されることを確認。

![Kobito.DVCOWd.png](https://qiita-image-store.s3.amazonaws.com/0/64861/236acb4f-d127-53bc-d947-f8616f0b3b86.png "Kobito.DVCOWd.png")

あとは、「ファイル」ー「保存」でお好きなところにお好きな名前でショートカット保存。　ロボットアイコンをダブルクリックでいつでもIPアドレスが表示される。いいね。いちいち環境設定で確認する必要なし。

## アイデア次第でいろいろできそう
　今後も簡単かつ便利そうなものができれば紹介します。（きっと。たぶん。）
同値再帰型で相互再帰する

同値再帰型(*Equirecursive types*)とは，再帰型の一種で，再帰的なデータの型である．
同値再帰型を用いて型付けできる構造には，たとえば，

* Yコンビネータ
* リストなどの再帰的構造

などがある．

## 事例1: Yコンビネータ

OCaml トップレベルでは， *-rectypes* オプションを用いることで有効にできる．
utop でも *-rectypes* オプションを使うと有効にできる．

```
$ utop -rectypes
utop # let y f = (fun x -> f (x x)) (fun x -> f (x x));;
val y : ('a -> 'a) -> 'a = <fun>
```

(正格評価なので) この y は実行しても無限ループするだけなのでなんの意味もないが，型をつけることはできる．

## 事例2: リスト

多相バリアントと組み合わせると，なんと型宣言なしでリストを始めとした様々な構造を使うことができる．

```
utop # let rec map f = function
    `Nil -> `Nil
  | `Cons(x,xs) -> `Cons(f x, map f xs);;
val map : ('a -> 'b) -> ([< `Cons of 'a * 'c | `Nil ] as 'c) -> ([> `Cons of 'b * 'd | `Nil ] as 'd) = <fun>
```

## Isorecursive types について

同値再帰型(*Equirecursive types*)と似たものに， *Isorecursive types* というものがある．
*Equirecursive types* は暗黙のうちに roll/unroll する． *Isorecursive types* は roll/unroll を明示する． (ちなみに，roll/unroll は fold/unfold と呼ばれることもある)

## 本題

さて，このように同値再帰型はすごいものであって，これでさまざまな構造が表すことができるので，いろいろ表してみたくなる．ところが，ここでひとつ問題が生じる．相互再帰的な構造をどう表すのかということだ．

具体例．たとえば， JavaScript の AST を表す型をつくるとする．
JavaScript の次のようなコードについて考える:

```
(function (x) { return x; })
```

これは，素直に考えるとこうなるはずだ:

```ocaml
type ident = string
type expr = Ident of ident | FuncLit of ident list * stmt list
 and stmt = Return of expr
let ast = FuncLit(["x"], [Return (Ident "x")])
```

expr の定義に stmt が現れ，かつ stmt の定義に expr が現れている．このような定義を相互再帰という．

再帰型でこのような構造を表すのはちょっと難しい．

しかし，これをうまく表す方法がある．相互再帰する型を，型変数として受け取るのである．つまり:

```ocaml
type ident = string
type ('expr,'stmt) expr1 = Ident of ident | FuncLit of ident list * 'stmt list
type ('expr,'stmt) stmt1 = Return of 'expr
type expr = ('expr, ('expr,'stmt) stmt1 as 'stmt) expr1 as 'expr
type stmt = (('expr,'stmt) expr1 as 'expr, 'stmt) stmt1 as 'stmt
let ast : expr = FuncLit(["x"], [Return (Ident "x")])
```

これでよし．

## 参考文献

* Stone Christopher A. (2005) "[Equational Theories with Recursive Types](www.cs.hmc.edu/~stone/papers/stone-schoonmaker.pdf)", p17 2015年2月25日アクセス．
ASP.NET MVC5（C#） グラフ作成

今後グラフを利用することはありそう。

使えそうなURLをメモしておく。

https://social.msdn.microsoft.com/Forums/ja-JP/8862c12d-039d-4f5c-b8cf-7dcd7f4773eb/charts-tools-for-aspnet-mvc-5?forum=MSWinWebChart

http://vs.smartnet.expressweb.jp/razorで簡単グラフ表示/
ASP.NET MVC5（C#） コード・ファーストとデータベース・ファースト

ASP MVC5ではコードファーストもデータベースファーストもできる。

詳しい手順は後日記載する予定だが、公式サイトのリンクをとりあえずメモしておく。

[公式サイト: コード・ファーストの方法](http://www.asp.net/mvc/overview/getting-started/introduction/getting-started)

[公式サイト: データベース・ファーストの方法](http://www.asp.net/mvc/overview/getting-started/database-first-development/setting-up-database)
OSX からサーバ上の GUI を叩く。


またの名を、「 Linux にてコマンドラインから GUI を開く」。
今迄、自身としては、あんまり必要無かったのだけど、

* 他人様にタブ区切りテキスト説明すんのに、CLI からだと説明聞いてくんない。
* ここんとこ readme が .md しちゃってねえ、、、

つう事で、メモってたのを精査せず投げる。
必要最小限の所と、 Markdown 対応のみ。

### 前提
* OSX 側では XQuartz とかインストール済み
* `ssh -Y`, or `-X` でサーバにログイン

CentOS （つか GNOME ？）のコマンドについて書くから、他の奴だとどーだか、、、



## gedit
テキストエディタ

```shell-session:
$ gedit SOMETHING.txt &
```
`vi` じゃない気分の日もあるんです。

## postscript

```shell-session:
$ gs SOMETHING.ps &
```

`evince` でも出来るがワーニングが出るのはね、、、

## pdf

```shell-session:
$ evince SOMETHING.pdf &
```

`gs` でも出来るが、`Unrecoverable error, exit code 1` してくれたりするんで、使わず。

## 画像

```shell-session:
$ eog SOMTIONG.jpg &
```
正直、このコマンドはあんまり使わないかな、、、

## タブ区切りテキストなんか

```shell-session:
$ libreoffice --calc SOMETHING.txt &
```

指示に従って、区切り指定などする
俺的には、今後は頻繁に使う予定だから、 `alias calc='libreoffice --calc'` しとこう

## html

```shell-session:
$ firefox SOMETHING.html
```
ご存知、炎のキツネ。
バイオのコマンドは、`jQuery` てんこ盛りの html 作るのあるんで、お世話になります。

## ファイラー
20150312 追加

忘れてた。
ファイラーを開くには、

```shell-session:
$ gnome-open /PATH/TO/DIR
```

`gnome-open` は `nautilus` のラッパっぽいけど、 `ssh` 越しで使う分には一番。
`xdg-open` は、当方の環境では、mac 側の画面サイズを計算しようとするだかで、デスクトップがグレーになってしまったりする。環境変数などを適切に飛ばせば、どうにかなるかも知れない。


## Markdown

普通にインストールされてるコマンドには、対応出来るものが無かった。
でも、わざわざユーザーディレクトリに pandoc インストールすんのもなー。
ってんで、試した最初で最後の方法。

### Markdown.pl

```shell-session:
$ cd cmd/src
$ wget -q http://daringfireball.net/projects/downloads/Markdown_1.0.1.zip
$ unzip Markdown_1.0.1.zip
$ mv Markdown_1.0.1/Markdown.pl ../bin
```

### 閲覧テスト
```shell-session:
$ firefox "data:text/html;base64,$(base64 -w 0 <( Markdown.pl Markdown_1.0.1/License.text) )"
```

これで普通に見える

### んで

`.bashrc` or `.zshrc` に

```shell-session:
function md(){
   firefox "data:text/html;base64,$(base64 -w 0 <( Markdown.pl $@ ) )"
}
```
突っ込んで、`source`。

```shell-session:
$ md readme.md
```

とかする。

#### ちなみに、
```shell-session:
$ Markdown.pl Markdown_1.0.1/License.text | firefox "data:text/html;base64,$(base64 -w 0 <&0)"
```
こんな書き方もメモってたが、なんかでトラブったんだよな。

`<&0` はファイル・ディスクリプターの複製
`man 2 dup` と一応メモっとく。
Safariでtransitionをかけると、文字が一瞬細くなるバグの解決法



自分向けの備忘録です


CSSでtransitionをかけて、背景を変えると、
safariだけ文字が一瞬細くなるバグ

```css

body {
	-webkit-font-smoothing: antialiased;
}
 
```

とすることで解決しました。
bash標準出力をpygmentizeでシンタックスハイライトする


## 動機
* xmlが出力されるときにシンタックスハイライトしたい
* Vimで読めというのは無しで
* sedスクリプトを書けというのも無しで

## Pygments、Pygmentsを使う
* Python製のシンタックスハイライトライブラリ
* 非常に多くの言語に対応している
* 静的サイトジェネレータでシンタックスハイライトを実現するのに使われているのをよく見る
* ターミナル用のシンタックスハイライトコマンド`pygmentize`が含まれている

## Pygmentsをインストール
* anyenv、anyenvを使う
* バージョンをいくつにしたらいいかわからなかったので、HomebrewのPythonパッケージのバージョンに合わせた

```bash
$ anyenv install pyenv
$ exec $SHELL -l # シェルを再起動してpyenvを有効化
$ pyenv install 2.7.9
$ pyenv global 2.7.9 # インストールしたバージョンを優先使用
$ pip install Pygments

$ type pygmentize
pygmentize is /Users/catfist/.anyenv/envs/pyenv/shims/pygmentize
```

## パイプで渡してシンタックスハイライト
* こんな感じで使える。

```bash
$ cat sample.xml | pygmentize
```

* きれい
* みやすい
* らくちん
Mac、HomebrewでNimをはじめる


結論から言うとこれで入った。

```
brew install nim
```

以下捕捉

2015年2月現在 google で brew nim で一番に出てくるやつ

https://github.com/arialdomartini/homebrew-nim

これの通りに鼻くそ（主に右）をほじりながら

```
brew tap arialdomartini/nim
brew install nim
```

したら

```
Error: SHA1 mismatch
Expected: 0a54d6d7f257cdade5bf950d318066959c48a6dc
Actual: 2fdd486704931807d03d25d6846c5faee880d69e
Archive: /Library/Caches/Homebrew/nim-0.10.2.zip
To retry an incomplete download, remove the file above.
```

こんなことになって、同じ症状の人が居たのですが、

https://github.com/arialdomartini/homebrew-nim/issues/1

tapせずとも普通に入るそうなので、tapしちゃった人はuntapして普通に入れよう。

おしまう。
Rspec+SeleniumでChromeを動かしてテストを行う方法(Chromeはcaskでインストール)

備忘録として。
Rspec + SeleniumでChromeのWebDriverを用いてテストする。
Chromeは例外的にHomebrew caskでインストールしたものを使っている。

```rb
require "selenium-webdriver"

describe "TestSpec" do
	before do
		#chromeのパスを設定
		chrome_path = '/Users/自分のホーム/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome'
		#Selenium::WebDriver::Chrome::Binary.path = chrome_path
    	@webdriver = Selenium::WebDriver.for :chrome
  	end

  	it "GoogleのタイトルがGoogleであること" do
    	@webdriver.navigate.to "http://www.google.co.jp"
    	@webdriver.title.should == "Google"
  	end

  	after do
    	@webdriver.quit
  	end
end
```

上記のソースだけではWebDriverがないのでエラーになる。WebDriverは以下のページからダウンロードし、Pathを通すことでテスト可能になる。
https://sites.google.com/a/chromium.org/chromedriver/

caskでインストールしたfirefoxでもおそらく同じことができるはず（試していない）。safariは手続きが面倒そうなので試していない。
HVMでもpanicしたらrebootするAmazonLinux

##HVMでもpanicしたらrebootするAmazonLinux
kernel.panic=0のままにしておいたが普通にrebootする。下記の情報だと値の指定が必要そうなのだが。。。

http://aws.amazon.com/jp/amazon-linux-ami/2014.09-release-notes/

わりと新しいカーネルかつPVHVMが有効なのでxen_panic_handler_init()が動作していそうだ。
MacのJenkinsでiOSアプリをビルドするときにKeychain周りで失敗する時の対処


### 想定するケース
GUIのない環境下でiOSアプリをコマンドラインでビルドするケースを想定しています。例えばJenkinsとか。
キーチェーンに証明書の鍵をimportしたのに動かない！というケースへの対応です。

xcodebuildでビルドしているときに

```bash
/usr/bin/codesign --force --sign <キーチェーンのUUID> --resource-rules= …中略… 
User interaction is not allowed.

The following build commands failed:
	CodeSign <アプリ名>
```
というエラーが出るときの対応です。

### 原因
キーチェーンに含まれている秘密鍵を利用しようとするとキーチェーンがポップアップを表示して秘密鍵を利用してもいいかを尋ねます。
GUI環境のある場合は、

> codesignはキーチェーンに含まれるキー "your-key-name"を使用して
> 署名しようとしています。
> この項目へのアクセスを許可しますか？

というダイアログが出るのですが、Jenkinsのようなコマンドライン環境ではポップアップが出せないため "User interaction is not allowed."というエラーが出て失敗します。

### どうすればよいか

* 署名用秘密鍵をimportするときに /usr/bin/codesign にアクセス権限を与える
* ビルドする際にkeychainのパスフレーズを入力するポップアップが出ないようにする

##### 署名用秘密のimport
GUIからでもimportはできますが、その場合特定のプログラムに対してアクセスを与えるのが面倒です。
以下のようにコマンドで実行します。

```bash
$ security unlock-keychain -p <キーチェーンのパスフレーズ>
$ security import <秘密鍵のパス> -k ~/Library/Keychains/login.keychain -P <キーチェーンパスワード> -T /usr/bin/codesign
```

まず、`unlock-keychain` でキーチェーンをunlockします。これをしないと次のコマンド実行時に"User interaction is not allowed."というエラーが出て失敗します。
次に `security import...` で秘密鍵をキーチェーンにimportします。ただしその時、`-T /usr/bin/codesign`で秘密鍵にアクセスできるプログラムを渡します。
xcodebuildでビルドするとき、内部では`/usr/bin/codesign`を利用しているようなのでこのプログラムにアクセス権限を与えます。


##### ビルドスクリプト
初めの方に

```bash
$ security unlock-keychain -p <キーチェーンのパスフレーズ>
```
としてキーチェーンをアンロックしてください。そうしないとビルドするときにキーチェーンパスワードを求めるポップアップが出現します。


### 合わせて読みたい
[iOSアプリのプロビジョニング周りを図にしてみる](http://qiita.com/fujisan3/items/d037e3c40a0acc46f618)
[ssh - "User interaction is not allowed" trying to sign an OSX app using codesign - Stack Overflow](http://stackoverflow.com/questions/20205162/user-interaction-is-not-allowed-trying-to-sign-an-osx-app-using-codesign)
仮想マシン(rails-dev-box)によるRuby on Rails開発環境の構築方法 MacOSX版


# 概要
Ruby on Railsアプリはインターネットに常時繋がったサーバーで動作させます。Ruby on Railsアプリの開発も、このサーバー上で開発することが可能です。しかし開発作業を簡便に行うために、このサーバーがあたかも手元のPCの中に存在するように見せかける技術を仮想マシン(Virtual Machine:VM)と呼びます。

# 必須マシン環境
- CPU: Dual Core以上 
- メモリー: 2GB以上 (4GB以上推奨)
- ディスクサイズ: 3GB程度

# インストール手順

## Oracle VirtualBox

Oracle VirtualBoxは仮想マシンを動作させるための仮想化ソフトウェアの一つです。無料で利用することができます。

次のURLから最新のVirtualBoxをダウンロードしてください。

https://www.virtualbox.org


VirtualBox-4.3.xx-xxxxx-OSX.dmg をダブルクリックすると次のような画面が開きます。

![VitualBox_Installer.png](https://qiita-image-store.s3.amazonaws.com/0/34816/76f5bb2f-f866-e89a-25dd-62db630abb76.png)

VirtualBox.pkgをダブルクリックしてインストールを許可してください。

## Vagrant

Vegrantは仮想マシンを作成するソフトウェアです。無料で利用することができます。仮想マシンの作成方法を自分で記述することもできます。しかし誰かが書いた仮想マシン作成方法をコピーすれば、仮想マシンの構築方法を一から覚えなくても、プロフェッショナルが準備した仮想マシンと全く同じものが自分のPCの中に作成できます。

次のURLから最新のVagrantをダウンロードしてください。

https://www.vagrantup.com

vagrand_1.7.x.dmgをダブルクリックすると次のような画面が開きます。

![vagrant_installer.png](https://qiita-image-store.s3.amazonaws.com/0/34816/884b42f3-a4ad-3c5d-519b-51720b78d0cc.png)

Vagrant.pkgをダブルクリックしてインストールを許可してください。


## rails-dev-box

rails-dev-boxはRuby on Rails開発チームが公開している仮想マシン作成方法の手順です。この手順をvagrantで実行すれば、あなたのPCの中にRuby on Rails開発チームが提供する仮想マシンと全く同じものが出来上がります。

ターミナルを開いて次のコマンドを実行してください。

### vagrantファイル保存場所の作成

```host: $ mkdir ~/boxes
```

### vagrantファイルのダウンロード

Ruby on Rails開発チームが公開している仮想マシン作成手順をgitと呼ばれるコマンドでダウンロードします。

```host: $ cd ~/boxes
```

```host: $ git clone https://github.com/rails/rails-dev-box.git
```

### 仮想マシンの構築

vagrantを使って仮想マシンを作成します。仮想マシンの作成に必要な複数のファイルをインターネットからダウンロードするため、十数分かかります。珈琲でも飲みながらお待ちください。

```host: $ cd rails-dev-box
```

```host: $ vagrant up
```

仮想マシン構築が終了すると次のような表示になります。

![vagrant_up_end2.png](https://qiita-image-store.s3.amazonaws.com/0/34816/b7cb86c5-e6aa-c9b5-adfd-74f51908397a.png)

### 仮想マシンへの接続

vagrant sshコマンドを実行すると、あなたのPCの中に出来上がった仮想マシンに接続（ログイン）することができます。一般的なサーバーに接続する場合はログイン名やパスワードが必要ですが、あなたのPCの中にだけ存在する仮想マシンへの接続なので、ログイン名やパスワードは必要ありません。

```host: $ vagrant ssh
```

![vagrant_ssh.png](https://qiita-image-store.s3.amazonaws.com/0/34816/3f78a217-f1d8-f1c9-a1b6-ed1a523ab7d7.png)

### 仮想マシンへのRuby on Railsのインストール

```vagrant@rails-dev-box: ~$ sudo gem install rails --no-rdoc --no-ri
```

### 仮想マシンからの切断

仮想マシンの中での作業が終わったら切断（ログウト）してください。

```vagrant@rails-dev-box: ~$ exit
```

### 仮想マシンの終了

Macの電源を切るためにシャットダウンするように、仮想マシンを終了させるときは次の終了(Halt)を実行してください。

```host: $ vagrant halt
```
Firefox OS (FxOS) のアプリ開発関連リンク集 （WIP）

Firefox OS (FxOS) のアプリ開発関連リンク集 （WIP）

Firefox OSアプリを作ってみたいので、まずは参考になりそうなサイトをまとめてみることに。

## 基本

### [Firefox OSコミュニティ](http://fxos.org/)

コードリーディングや、アプリ作成ハンズオンなどのイベント情報が掲載されています。

また、ドキュメントも、

- ユーザー向け
- アプリ開発者向け
- OS開発者向け

といったカテゴリ別で公開されており、基本は、こちらにまとめてある情報を参照していけば良さそうです。

アプリ開発を目指す私は、[アプリ開発者向け ドキュメント](http://fxos.org/apps/)は見ておかねば！

### [MDN>アプリセンター>クイックスタート](https://developer.mozilla.org/ja/Apps/Quickstart)

アプリ開発、ひととおりの流れが書いてありそうです。
チュートリアルになっているので、一度流してみると良さそう。

### [Firefox Marketplace](https://marketplace.firefox.com/developers/)

APIリファレンスをはじめ、アプリ開発者にとってのポータルのような感じですね。
ちょくちょくお世話になりそうな。

### [MDN（Mozilla Developer Network）](https://developer.mozilla.org/ja/docs/Apps)

こちらにもチュートリアルがあって、クイックスタートの後に見たら良さそう。

あと、[アプリテンプレートの使用](https://developer.mozilla.org/ja/Apps/App_templates)を利用すると開発楽そう。

### [Firefox OS (Boot to Gecko)](https://groups.google.com/forum/#!forum/firefoxos)

Firefox OSコミュニティの情報発信・交換は、Google Groupでも実施されているようですね。
要チェックです。
というわけで、早速参加させていただきました！

### [Mozilla Japan ブログ](http://www.mozilla.jp/blog/category/firefox-os/)

イベント情報は、こちらでも発信されているので要チェックですね。

### [GCG研究所（株式会社グローバルサイバーグループの技術ブログ）](http://www.gcg.bz/labo_blog/?cat=6)

イベント情報から、APIの使い方まで、Firefox OSに関するさまざまな情報が綴られています。

> というか、ほとんど薮下さん一人で更新されてる？何者！？


## 参考になる記事など

これからちゃんと探しますw

### [QiitaのFirefox OSタグ](http://qiita.com/tags/firefoxos)

今日現在、29件の記事がUpされています。
後でチェックしてみます！

(これが30件目になってしまうのか！w
 ちゃんと充実させたい！)

#### [Fx0 (Firefox OS)で実機デバッグする方法](http://qiita.com/yuyaohshimo/items/b71f55e28bbe906a2612)

うぉーナイス記事！早速やってみよ！（しかしFx0が無い！！！！flameがあるから、それでやってみよ。）


### [T.B.D.](http://sss)

どんどん追加します。

**ここ読め的なのあったら、どんどん教えてください！**

[T.B.D.]
Hashへのドットアクセス



## hashへドットアクセスするには

```ruby

dot_hash = ActiveSupport::OrderedOptions.new

p dot_hash
# {}
dot_hash.hoge = 10
dot_hash.huga = 20
p dot_hash
# {:hoge=>10, :huga=>20}

dot_hash.each {|k,v| p "#{k} -> #{v}" }
# "hoge -> 10"
# "huga -> 20"

```

カッコもコロンもいらなかったんや
捗りすぎる。

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/ordered_options.rb#L17
swiftでUITabBarの特定のタブをタップした時にモーダル

shouldSelectViewControllerで押せれたタブに紐付くViewControllerが特定のViewControllerであった場合に、タブの切り替えを行わずにモーダルを出す。

StoryBoardを使っている前提です。
SampleTabBarControllerをStoryBoard上のTabBarControllerに紐付けます。

```lang:SampleTabBarController.swift
class SampleTabBarController: UITabBarController, UITabBarControllerDelegate {
    
    func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {

        if viewController is DummyViewController {
            // DummyViewControllerはモーダルを出したい特定のタブに紐付けたViewController
            if let currentVC = self.selectedViewController{
                //表示させるモーダル
                let modalViewController: UIViewController = UIViewController()
                //わかりやすく背景を赤色に
                modalViewController.view.backgroundColor = UIColor.redColor()
                currentVC.presentViewController(modalViewController, animated: true, completion: nil)
            }
            return false
        }
        return true
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

```
モーダルを出したいタブに紐付けられたViewController（DummyViewController）はダミー。
もっとスマートな方法は無いのかしら？

参考URL
http://blog.ryotarai.info/blog/2011/08/17/uitabbar-modal-view/
JBossで最大ポスト数（max-post-size）を設定する方法

JBossで最大ポスト数を設定するには、standalone.xmlのsubsystem「urn:jboss:domain:web:1.1」のconnectorに「max-post-size="XXXXX"」と指定する。

```lang:xml
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
	<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" max-post-size="500000"/>
	<virtual-server name="default-host" enable-welcome-root="true">
		<alias name="localhost"/>
		<alias name="example.com"/>
	</virtual-server>
</subsystem>
```
YahooショッピングAPIのPOSTヘッダーの書き方を教えてください。

Yahooショッピングの商品登録APIを使い、商品を追加仕様としています。
POSTヘッダーの書き方がわからず、どうしても「failed to open stream: HTTP request failed! HTTP/1.0 401 Authorization Required」となり、認証してくれません。
PHPのfile_get_contents関数を用いてPOST送信しています。
ご教授お願い致します。

現在の手順は以下の通りです。
1. 事前に手に入れたリフレッシュトークンから、アクセストークンを更新して取得。
2. 更新したアクセストークンを用いてPOSTヘッダーを生成。
<pre>
$headers = array(
    'Content-Type: application/x-www-form-urlencoded',
    'User-Agent: Yahoo AppID: ' . $client_id,
    'Authorization: Bearer ' . $access_token,
);
※ $client_idはアプリケーションID、$access_tokenはアクセストークン
</pre>
これを https://test.circus.shopping.yahooapis.jp/ShoppingWebService/V1/editItem に送っています。
どこが間違っているのかわかりません。

リフレッシュトークンからアクセストークンは生成されているのですが...
よろしくお願い致します。
CORS時代のウェブAPIの行儀のよいCache-Controlとは

# 結論

 - <del>まだ良くわからないがクライアント側でキャッシュできるようにしてほしい</del>

**追記ここから**

 - `public` なデータには `public` の指定を
 - `max-age` はそこそこな値を `60` とか？
 - 304の場合はRate Limitをいじらない感じ（できれば）

**追記ここまで**

# 経緯

CORSでブラウザのjavascriptから違うoriginのウェブAPIも叩けたりします。たとえば、

```example.com/hoge.html
<script>
// http://example.com からでも qiita.com のAPI呼べるよ
$.getJSON("https://qiita.com/api/v2/tags/grunt/items", function(data){
  // 何かする
});
</script>
```

こんな感じで。CORSでどこからでも叩けるようになっているAPIというと

 - github API
 - qiita API

が有名 :smile: です。なんですが、`https://qiita.com/api/v2/tags/grunt/items`のレスポンスヘッダーをみると

```
Cache-Control: max-age=0, private, must-revalidate
```

になってて、<del>キャッシュが効きません</del> **E-Tagベースでキャッシュが効くのですが、リクエストは飛びます**。githubの場合は `https://api.github.com/users/qiita` に対して

```
Cache-Control:public, max-age=60, s-maxage=60
```

となっていて、ある程度キャッシュがききます。qiita.com のAPIはRate Limitが厳密に指定され（例：非認証時は同一IPで60回/時）ているのでキャッシュしやすくしてほしいかなと思います。

**追記ここから**

どちらも二回目以降のリクエストは304 Not Modifiedを戻していて、キャッシュは効いてました。曖昧な内容でごめんなさい。ただ、qiita.comの場合は304が戻る場合でもRate Limitが減らされるので、クライアントでキャッシュコントロールしやすいようにした方がいいのではと思いました。

github.com では以下にある通り、304戻す場合はRate Limitは減らしません。

> Events are optimized for polling with the “ETag” header. If no new events have been triggered, you will see a “304 Not Modified” response, and your current rate limit will be untouched. There is also an “X-Poll-Interval” header that specifies how often (in seconds) you are allowed to poll. In times of high server load, the time may increase. Please obey the header.

https://developer.github.com/v3/activity/events/ より抜粋

**追記ここまで**
Project Euler 2 高速化 2.21マイクロ秒を節約する。

フィボナッチ数列の項は前の2つの項の和である. 最初の2項を 1, 2 とすれば, 最初の10項は以下の通りである.

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
数列の項の値が400万以下の, 偶数値の項の総和を求めよ.
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%202

最初は思いつくままコードを書いてみた。

```
def cof():
  (v1, v2) = (1, 2)
  max = 4 * (10**6)
  s = 0
  while v2<=max:
    if not v2 % 2: s += v2
    (v1, v2) = (v2, v1+v2)
  print s
```

なんか高速化できるところないかなと問題を眺めていたところ、偶数は3項おきに出現することに気が付いた。
![pe02.png](https://qiita-image-store.s3.amazonaws.com/0/70480/7b62ed4e-6d55-0ee4-87e5-16655f7e5041.png)

n1を偶数の前の項、n2を偶数項とした時、それらに続く項n3,n4,n5は次の式で表せる。
![pe02_2.png](https://qiita-image-store.s3.amazonaws.com/0/70480/9d010db6-2352-4e1e-3c77-7c075e44466b.png)

n4はその次の項を導出するのに必要だけど、n3はおそらく省略できるはず！しかも偶数項に決め打てば偶数かどうかの判定をするif文も省略できるはず!

ということで次のコードを書いてみた。

```
def cof2():
  (v1, v2) = (1, 2)
  max = 4 * (10**6)
  s = 0
  while v2 <= max:
    s += v2
    (v1, v2) = (v1+2*v2, 2*v1+3*v2)
  print s
```

print をコメントアウトし、次のコードで時間を測定してみた。

```
def get_time(func,name,num):
  import time
  print "%s start." % name
  total = 0
  for i in range(0,num):
    start = time.time()
    func()
    end = time.time()
    total += end - start 
  print "%s finished." % name
  print total

if __name__ == '__main__':
  num = 10 ** 6
  #num = 1
  get_time(cof,"cof",num)
  get_time(cof2,"cof2",num)
```

結果、100万回実行で2.21秒(1回あたり2.21マイクロ秒)節約できた。
![pe02_3.png](https://qiita-image-store.s3.amazonaws.com/0/70480/7113105a-0cab-b81d-64d6-f73ead6064a0.png)

1億回実行すれば221秒(約3分40秒)の節約！すごい節約！

人生で1回しか実行しないコードなうえ、新たなコードを作るにバグに悩まされて15分くらいかかったけど。
FactoryGril の after_create で has_many 関連のデータを作るときの冴えたやり方

http://www.rubydoc.info/gems/factory_girl/file/GETTING_STARTED.md#Associations を見ると、
`belongs_to` は `association` メソッドでデータを作っているけど、 `has_many` は `after_create` で
データを作っている。

`association` メソッドの場合 `FactoryGirl.create(:post, author: author)` とすれば別のものを
指定することも出来るが、 `has_many` なデータについては必ず `after_create` で作られてしまっていて変更する手段がない。

これがテスト書くときに割とうざいことが多い。

で、色々試した結果、次のやり方でうまくいった。

```ruby
FactoryGirl.define do
  factory :post do
    title "Through the Looking Glass"
    user
  end

  factory :user do
    name "John Doe"

    factory :user_with_posts do
      transient do
        # build(:post) だと余分な user が作られてしまうため user: nil を指定する
        posts { [build(:post, user: nil)] }
      end

      after(:create) do |user, evaluator|
        user.posts = evaluator.posts
      end
    end
  end
end

# rspec
FactoryGirl.create(:user_with_posts, posts: [FactoryGirl.create(:post), FactoryGirl.create(:post)])
```

### 追記

同僚からの指摘によりすっきりした書き方が出来るようになりました。
お手軽debugprint


デバッグ時によく使う、変数名とその中身を同時に表示するPRINTの紹介です。
これは#defineを使うことで実現できます。

```cpp
#include <string>
#include <iostream>

#define PRINT(A) std::cout << (#A) << ":" << (A) << std::endl;

int main(){
	int n = 42;
	std::string  str = "test";
	char c = n;
	
	PRINT(n);
	PRINT(str);
	PRINT(c);
}
```

出力結果
>n:42
>str:test
>c:*

charは文字として表示されていますね。
これのほうが便利な場合もありますが、1バイトの変数として使っていると不便です。
特に、0とか1とか入っていると見えない文字になりますし。

そこで、charだったときだけintにするようにします。

```cpp
template<typename T>
const T &stream_cast(const T&n){return n;}

int stream_cast(char n){return n;}

#define PRINT(A) std::cout << (#A) << ":" << stream_cast(A) << std::endl;
```

出力結果
>n:42
>str:test
>c:42

うまくいったのですが、これをヘッダに書いて複数のファイルでincludeすると
stream_castがすでに定義されているというエラーが出ます。

stream_cast(char)の方もテンプレートで定義できればいいんですが…。
ということで苦肉の策がこれ。

```cpp
template<typename T> 
struct stream_cast{
    const T&operator() (const T& n){ return n; } 
};

template<>
struct stream_cast<char>{
    int operator() (char n){ return n; } 
};

#define PRINT(A) std::cout << (#A) << ":" << stream_cast<decltype(A)>()(A) << std::endl;
```

decltypeが入ってC++11になってしまった…。
C++03でも書ける方法をだれかボスケテ。
[小ネタ]consoleオブジェクトをもっと便利に使う方法


すごく便利なconsoleオブジェクトですが、ブラウザによってサポートされているメソッドが
なかったり、そもそもconsoleオブジェクトが使えなかったりと、たまに不便だったりします。

そんなときによく使う便利なコード。


```js:javascript
var logger = {};
var isDebug = true;
var loggerInit = function(){
	var emptyFunc = function(){};
	var Err = "undefined";
	var e = "assert,cd,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,log,markTimeline,memory,memoryProfile,profile,profileEnd,table,time,timeEnd,timeStamp,timeline,timelineEnd,trace,warn".split(",");
	if (typeof console !== Err && isDebug ){
		logger = console;
		for(var i = 0; i < e.length; i++) {
			var method = e[i];
			if (typeof logger[method] === Err ) {
				if (typeof logger.log === Err ){
					logger[method] = emptyFunc;
				} else{
					logger[method] = logger.log;
				}
			}
		}
		
		
	} else{
		for(var i = 0; i < e.length; i++) {
			logger[e[i]] = emptyFunc;
		}
	}
};
loggerInit();
```

なにをやってるかっていうのと（簡単な処理ですが）、consoleオブジェクトがない場合に空のfunctionに置き換えて
consoleオブジェクトが存在する場合でも特定のメソッドがない場合に空のfunctionに置き換えてます。

ちなみに「isDebug」をfalseにすると、すべて空functionになるので、console自体が動きません。
MetaioとCardboardをUnityで一緒に使うとAndroidでなんか変になる件

プレビュー上では特におかしくないのに、アプリに書きだした時になぜかカメラが一個になってたりで変だなーと思ったら、packageでインポートした時にandroid用のmanifestが上書きされてたのが原因だった。

なので、まずmetaioをimportし、その後mafifest以外のcardboard packageをimport。
Assets/Plugins/Android/AndroidManifest.xmlのapplication内に

```xml
<activity android:name="com.google.vrtoolkit.cardboard.plugins.unity.UnityCardboardActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="landscape"
                  android:configChanges="orientation|keyboardHidden|screenSize"
                  android:launchMode="singleTask">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    <category android:name="com.google.intent.category.CARDBOARD" />
  </intent-filter>
</activity>
```
を追加。

manifest部分に

```xml
<uses-permission android:name="android.permission.NFC"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
```
を追加してやれば同時に使えるようになった。
Androidで使うpackageをインポートする時は次から気をつけよう。
Cコンパイラによる最適化とコンパイル時計算

C++ templateメタプログラミングとconstexpr関数だけがC/C++系のコンパイル時計算じゃないよという話。
※ ただしCコンパイラの最適化器／[定数畳み込み](http://ja.wikipedia.org/wiki/%E5%AE%9A%E6%95%B0%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF)処理が高性能な場合に限る。

```c
/* C言語で階乗を計算するプログラム */
#include <stdio.h>

static int fact(int n)
{
  return (1 < n) ? n * fact(n - 1) : 1;
}

int main()
{
  int r = fact(10);
  printf("%d\n", r);
}
```

Powered by http://gcc.godbolt.org/

# clang 3.5.1/-O2オプション

```
main:
	pushq	%rax
	movl	$.L.str, %edi    # "%d\n"
	movl	$3628800, %esi
	xorl	%eax, %eax
	callq	printf
	xorl	%eax, %eax
	popq	%rdx
	retq
```

# gcc 4.9.2/-O3オプション

```
main:
	subq	$8, %rsp
	movl	$3628800, %edx
	movl	$.LC0, %esi     # %d\n"
	movl	$1, %edi
	xorl	%eax, %eax
	call	__printf_chk
	xorl	%eax, %eax
	addq	$8, %rsp
	ret
```

# ほか
コンパイル時には計算できなかったコンパイラ

- icc 13.0.1/-O3オプション
- Visual C++ 2012 /Ox,/Ob2オプション

ちなみに、`fib(3)`だとgccもclangも無理だった。ただ末尾再帰呼出は頑張って展開したコードにみえる。

```c
static int fib(int n)
{
  return (2 >= n) ? 1 : fib(n-1) + fib(n-2);
}
```

※`static`は単に`fact`や`fib`をinternal linkageとし、関数定義部のアセンブリ出力を簡略するため。
関数unitを見つけることができませんでした



gglot2を使っている時に、themeを設定しようとするとエラーを吐きます。今回はtheme関数のplot.marginを利用して、グラフ外の余白を設定しているときに起こりました。ggplot2のバージョンは1.0.0。

```lang:test.r
##テストデータの用意
test<- data.frame("Day"=c(1,3,5),"Score"=c(10,20,30))

##折れ線グラフを描く

library(ggplot2)
ggplot() + 
geom_line(data=test,aes(x=Day,y=Score),size=0.4,alpha=0.4) + geom_point(data=test,aes(x=Day,y=Score),alpha=0.7)


```
このままですと、余白をほとんど明けずにplotが生成されます。
![スクリーンショット 2015-02-25 18.23.12.png](https://qiita-image-store.s3.amazonaws.com/0/57282/d9f9742f-398c-241c-1dbd-c37398afa975.png "スクリーンショット 2015-02-25 18.23.12.png")



これを解決するために、theme関数を用いて余白のサイズを指定します。

```lang:plus.theme.r
library(ggplot2)
ggplot() + 
geom_line(data=test,aes(x=Day,y=Score),size=0.4,alpha=0.4) + geom_point(data=test,aes(x=Day,y=Score),alpha=0.7)+
theme(plot.margin = unit(c(5, 5, 5, 5), "cm")) 

```

すると、エラーになります。

> ggplot() + 
+ geom_line(data=test,aes(x=Day,y=Score),size=0.4,alpha=0.4) + geom_point(data=test,aes(x=Day,y=Score),alpha=0.7)+
+ theme(plot.margin = unit(c(5, 5, 5, 5), "cm")) 
 以下にエラー theme(plot.margin = unit(c(5, 5, 5, 5), "cm")) : 
   関数 "unit" を見つけることができませんでした 



ggplot2のバージョンは、毎度メソッドの変更がとても多く、webの情報が古くてあてにならないことがよく起こります。今回もその手のエラーかと思って色々調べましたが解決できずにいました。
ふと、エラーを英語のクエリーにして検索したところ（Error: could not find function "unit"）[こちら](http://stackoverflow.com/questions/14885150/error-could-not-find-function-unit)がみつかりました。library(grid)が必要なようです。

> library(grid)
> ggplot() + 
+ geom_line(data=test,aes(x=Day,y=Score),size=0.4,alpha=0.4) + geom_point(data=test,aes(x=Day,y=Score),alpha=0.7)+
+ theme(plot.margin = unit(c(5, 5, 5, 5), "cm")) 

![スクリーンショット 2015-02-25 18.20.35.png](https://qiita-image-store.s3.amazonaws.com/0/57282/5b682b8e-e449-f82b-0516-6730ab406122.png "スクリーンショット 2015-02-25 18.20.35.png")

正しい余白はもっと大きい（画像は周りをカットしているの）ですが、plotの周りの余白をちゃんと5cm開けてplotできました。
なんといいますか、、、関数の中にrequire(grid)入れてくれよ。。頼むぜggplot!
Fabricでrsyncでroot権限で送る（だけに限らないオプションの設定方法）

tomotaka_ito さんの [Python - fabricで高速なファイル転送 - Qiita](http://qiita.com/tomotaka_ito/items/5c9a6ec395d7e45aa452) でもいいのだけど、`extra_opts`で設定した方が見通しがいいと思うのです。

Fabricの`rsync_project`の`extra_opts`では、メソッドの引数で指定できないrsyncコマンドの引数を指定することができます。

`--rsync-path`は転送先で利用するrsyncコマンドを指定することが可能で、たとえば、複数バージョンのrsyncを利用するなどの場合に指定することができます（そんなことってあるのかな？？？）。また、ここで、当該ユーザでのsudoの権限をつけた状態で`sudo rsync`を指定すれば、転送先ではsudo経由のroot権限で送ることが可能になるわけです。

これはなかなか、Fabric でやる場合に限らず、便利です。

```py
from fabric.contrib.project import rsync_project

@task
def rsync_test():
    rsync_project(
        local_dir='./mydir',
        remote_dir='/usr/local/destination/mydir',
        exclude=['.DS_Store', '*.tmp'],
        extra_opts="--rsync-path='sudo rsync'"
    )
```
もちろんあらかじめ、sudoの設定はしておきましょうね。

## 追記
もちろん、こういうのも出来ますよ。
差分で更新されたものだけアップロードとか。

```py
from fabric.contrib.project import rsync_project

@task
def rsync_test():
    rsync_project(
        local_dir='./mydir',
        remote_dir='/usr/local/destination/mydir',
        exclude=['.DS_Store', '*.tmp', '.git/', '.gitignore'],
        extra_opts="--link-dest ../old/ --rsync-path='sudo rsync'"
    )
```
Google Apps Scriptを使って一度に大量のメールを送信

Googleフォームで飲み会やレセプションの出欠を取った際、入力してくれた全ての人に返信メールを送りたいと思う人は多いはず。
本記事ではそんなGoogleフォームにおいて、GoogleAppsScriptを使ってSpreadSheetに記載されている全てのアドレス宛にメールを送る方法をご紹介します。

# 前提とするSpreadSheetのフォーマット
今回は以下のようなSpreadSheetから名前とメールアドレスを取得してメールを送信していきます。

| 名前 | アドレス |
|:-----------|:------------|
| 山田太郎 | yamada_taro@gmail.com |
| 鈴木一郎 | suzuki_ichiro@gmail.com |

# スクリプト
```js
// トリガーに登録させる関数
function myFunction() {
	var mailAddressList = getMailAdressList();

	mailAddressList.forEach(function(addr, cnt) {
		sendMail(addr.addr, addr.name);
	});
}

/**
 * 送り先のリストを取得
 * @returns {Array}
 */
function getMailAdressList() {
	// SpreadSheetオブジェクトを取得
	var ss = SpreadsheetApp.getActiveSpreadsheet();
	var rg   = ss.getDataRange();
	var addrList = [];

	// 取り出した名前とアドレスをaddrListに入れる
	var maxRow = ss.getLastRow();
	for (var i=0; i < maxRow; i++) {
		var name = rg.getCell(i+1, 1).getValue();
		var addr = rg.getCell(i+1, 2).getValue();
		addrList.push({
			name: name,
			addr: addr
		});
	}

	return addrList;
}

/**
 * メールの送信
 * @param address
 * @param username
 */
function sendMail(address, username) {
	var title = '飲み会幹事よりお知らせ';
	var content = [
		username + ' さん',
		'',
		'飲み会への出欠回答ありがとうございました。',
		'現在 出席 ということで受け賜わっております。',
		'',
		'もし出欠に関し変更が発生した場合、飲み会の１週間前までに連絡を下さるようお願いします。',
		'',
		'以上、よろしくお願いいたします。'
	].join('\n');
	
	// メール送信
	GmailApp.sendEmail(address, title, content);
}

```

# 備考
* 一度に大量にメールを送信すると送信時に遅延が発生します。
* 送り主メールアドレスは自動でそのSpreadSheetを管理しているアカウントのメールアドレスになります。  
  詳しい仕様は[公式ドキュメント](https://developers.google.com/apps-script/reference/mail/mail-app)参照で。
Rubyの文字列を正規表現化する際の罠

みなさんはRubyで正規表現を生成するときに、どうやりますか？

```ruby:hoge.rb
if /hoge/ =~ "hoge"
```


これを、複数個やりたい場合、

``` ruby:hoge.rb
["hoge", "huga"].select{|i| /#{i}/ =~ "hoge" }
```

とかやりますよね？
ここでの `i` をそのまま使うと、罠を踏みます。

```
[1] pry(main)> hoge = "http://google.com"; /#{hoge}/
=> /http:\/\/google.com/
[2] pry(main)> /#{hoge}/ =~ "http://google.com"
=> 0
```

そう、 `.` がエスケープされないのです。
URLを簡易的にパースしようとすると、 http://google1com などがマッチしてしまって、意図しない動作になることがあります。

解決策としては
http://docs.ruby-lang.org/ja/2.2.0/method/Regexp/s/escape.html を使うことです

```
[2] pry(main)> /#{Regexp.escape hoge}/ =~ "http://google1com"
=> nil
```

これで正しく弾くことが出来ます。
ASP.NET MVC5（C#） データベースの変更をモデルに反映する

# 利用シーン

データベース・ファーストの開発

# 手順

データベース本体が修正された場合、下記手順でモデルに反映する。

1. ModelsディレクトリにあるXxxModel.edmxというような名称のファイルを開く
1. 右クリックしてUpdate Model from databaseを選択
1. Update Wizardが立ち上がるのでAddやRefreshを行い、テーブルを追加更新する。
【メモ】Dropwizardアプリケーションをeclipseでデバッグ用に起動する

# 概要
eclipseでデバッグする

# 手順
ありがとうございます、助かりました
[Dropwizardのサンプルbucharest-jug / dropwizard-todoをEclipseで動かしてみる](http://www.takaiwa.net/2014/01/dropwizardbucharest-jug-dropwizard.html)
60,000枚オーバーの写真、ビデオをiCloudにあげる

Photos for OSXを使って60,000オーバーの写真、ビデオをがっつり上げてみたら、同期止まっちゃったｗ
新しく写真撮るとアップロードされるみたいだけど、ほかのデバイスでモーメントみるとダウンロードのまま、項目の数字が変化しない！

自分のフォトストリーム」と iCloud の写真共有の制限
http://support.apple.com/ja-jp/HT202299

アップロードトラフィックの制限？

Photos OSXとiCloudの同期は末尾は合ってるっぽいけど（総数は合ってない）、iOSデバイスは2/20以降が同期されてない
試しにminiのiCloud Photo Libraryをオフってみたらゴースト化ww

こんなかんじ↓
![x.png](https://qiita-image-store.s3.amazonaws.com/0/5222/78e06b01-7fdb-c8ed-4433-5e018a97783f.png "x.png")



3/3/2015追記
http://www.imore.com/what-you-need-know-about-photos-os-x

wwww

3/11/2015追記
iPhone充電し始めたら熱くなってるので調べてみたらassetsdががんばっとるw
NSPersistentStoreCoordinatorで落ちとるみたいだからCore Dataでメモリが足りないみたいなので、iCloudに大量画像ある場合iOS側処理のメモリの最適化がまだなのかも。。

![x-2.png](https://qiita-image-store.s3.amazonaws.com/0/5222/4400a885-9cda-f464-91f9-3fcf31058525.png "x-2.png")

![xxxxx-2.png](https://qiita-image-store.s3.amazonaws.com/0/5222/36417ecd-c1fb-16b6-18f4-189e8748ffd3.png "xxxxx-2.png")

3/16/2015追記
Bug Reporterに書いたら8.3使えといわれたので使ってみたらいい感じw
![Kobito.t5MvMA.png](https://qiita-image-store.s3.amazonaws.com/0/5222/54e1972c-6c32-c604-3af3-31f05b9277b6.png "Kobito.t5MvMA.png")

3/19/2015追記
iOS8.3にして
1. AirDrop転送時の写真選択が高速になった
2. かなり飛びにくくなった（特にカメラ）
3. 写真のコレクション表示も高速になった
4. サムネイル表示だけでもストレージの消費は激しい
5. サムネイルが全て同期されるわけではない
6. 同期に歯抜けがある

↓歯抜け例
![xxxxx.jpg](https://qiita-image-store.s3.amazonaws.com/0/5222/4f4e19fa-0d41-4a2e-d738-d61015040470.jpeg "xxxxx.jpg")

3/24/2015追記
なぜかYosemite14D113cにしてからiOSの写真のレスポンスが格段に良くなった。
ほぼ歯抜けサムネイルじゃなくなったしね。（3/19の歯抜けは健在。もしかしたら先日のiPhotoのアップデートでなおってるかも）
AppleWatchもあるし頑張って最適化してるもよお

3/30/2015追記
デバッグしてるらしい
![Kobito.2cAvda.png](https://qiita-image-store.s3.amazonaws.com/0/5222/47b7df03-b468-3418-f204-f986cfc0647f.png "Kobito.2cAvda.png")
Cocos2d-x+GenymotionでFatal signal 11 (SIGSEGV)が出た


hiroyasuさんの[Gemymotionをcocos2dx3.0rc0で試す](http://qiita.com/hiroyasu/items/fb1f9eed648ab2f51cea)の派生記事になります。
(Qiita的には派生記事を書く良い方法があるのかもしれないけど、とりあえずメモレベルで）


ここまでは元記事と同じです。

>新規プロジェクトを作成して、Gemymotionを起動し、何も考えずにcocosコマンドでビルドすると

>```Bash
> cocos run -p android
>```
>
>次のようなエラーがでます。
>
>*INSTALL_FAILED_CPU_ABI_INCOMPATIBLE*
>
>Genymotionはx86で動作するので、x86でビルドする必要があります。
>変更するファイルは次の通りです。

＊
＊
＊

で、Application.mkなんですけど、元記事から、

1. armeabiを削除（x86だけでＯＫ　コンパイル不要だと思われる）
1. APP_CPPFLAGSに'-U\_\_SSE\_\_'を追加　

'-U\_\_SSE\_\_'の方ですが、これがないと

*Fatal signal 11 (SIGSEGV) at 0x00000000 (code=128) ( on Android x86)* 

みたいなエラーが出た。「[SSE issue on x86](https://github.com/cocos2d/cocos2d-x/issues/8964)」にそれっぽいことが書いてある。U\_\_SSE\_\_が何を意味するのかはよく分かっていないです。'_'が入ってるからか、U\_\_SSE\_\_でぐぐってもほぼヒットせず。

最終的なApplication.mkはこうなった。

```jni/Application.mk
APP_STL := gnustl_static
APP_ABI := x86
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1 -std=c++11 -fsigned-char -U__SSE__
```

あと、これもどう作動するかは分からないがネットに情報があったので適用させてある。

```Cocos2dxActivity.javaのisAndroidEmulatorメソッド
isEmulator = product.equals(“sdk”) || product.contains(“sdk”) || product.contains(“sdk“) || product.contains(“vbox”);
```

これで自分のところはCocos2d-xのサンプルが動きました。

実行環境
Cocos2d-x v3.4
Android SDK 5.0.1(API 21)
Android NDK r9d
Genymotion 2.3.1
Bootstrap3を利用した際、Chromeのデバッグトレースで、拡張子woff2のフォントを読み込もうとしてResource interpreted as Font but transferred with MIME type text/plainがスローされるときの対処

タイトルが長いですが… 拡張子 woff2 の…コンテンツが読めなかったのでテキストで読みました、とトレースログが出ます。

これの解決法は、Webサーバないしばアプリケーションサーバにてmimeマッピングを追加するだけです。

Apache Tomcatであれば、サーバのweb.xmlを開き、&lt;mime-mapping&gt;あたりですね。woffでファイル内を検索するとすぐに見つかります。

```xml:web.xml
    <mime-mapping>
        <extension>wmz</extension>
        <mime-type>application/x-msmetafile</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>woff</extension>
        <mime-type>application/x-font-woff</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>wpd</extension>
        <mime-type>application/vnd.wordperfect</mime-type>
    </mime-mapping>
```

こうなっていますので、次のようにwoff2を追記します。

```xml:web.xml
    <mime-mapping>
        <extension>wmz</extension>
        <mime-type>application/x-msmetafile</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>woff</extension>
        <mime-type>application/x-font-woff</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>woff2</extension>
        <mime-type>application/x-font-woff</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>wpd</extension>
        <mime-type>application/vnd.wordperfect</mime-type>
    </mime-mapping>
```
Bootstrap 3でDatetimePickerを使いたい

Bootstrap2だったら動いてたDatetimePickerが、Bootstrap3で動かなくなって困ってませんか？
Bootstrap3で動くDatetimePickerが出てましたので、ご紹介します。
日付の部分がmoment.jsを使うようになったことで、Bootstrap2のオプションとは結構違いますので、ご注意ください。(例えばformatの形式とか)

■Bootstrap3 DatetimePickerドキュメント
http://eonasdan.github.io/bootstrap-datetimepicker/

■localeファイルの場所
http://eonasdan.github.io/bootstrap-datetimepicker/Options/#locale

```html:html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">

<link rel="stylesheet" type="text/css" media="screen" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="http://cdn.rawgit.com/Eonasdan/bootstrap-datetimepicker/v4.0.0/build/css/bootstrap-datetimepicker.css">

<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment-with-locales.js"></script>
<script src="moment-ja.js"></script>
<script src="http://cdn.rawgit.com/Eonasdan/bootstrap-datetimepicker/v4.0.0/src/js/bootstrap-datetimepicker.js"></script>

<script type="text/javascript">
$(function () {
  $('.date').datetimepicker({
    locale: 'ja',
    format : 'YYYY-MM-DD HH:mm:ss'
  });
});
</script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class='col-sm-3'>
            <div class="form-group">
                <div class="input-group">
                    <input type="text" class="form-control date" />
                    <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>
```
![2015-02-25_16h57_22.png](https://qiita-image-store.s3.amazonaws.com/0/68254/5e4150ec-ac10-4612-6070-e354a9c61e8c.png)
![2015-02-25_16h57_34.png](https://qiita-image-store.s3.amazonaws.com/0/68254/c4ae6801-890e-6f40-5359-9def2962890e.png)
CreateJS - 画像を読み込んでStage上に描画する

PreloadJSを使用して、画像を読み込んだところで、直接Stage上に追加することはできない。
Bitmapクラスのオブジェクトに包み、Stageに追加し、Stageを更新する。

```js
var canvas = document.getElementById('canvas');
var stage = new createjs.Stage(canvas);
var preload = new createjs.LoadQueue();
var bitmap;
var result;

preload.addEventListener('fileload', handleFileComplete);
preload.loadFile('circle01.png');

function handleFileComplete(event){
  result = event.result;

  // Bitmapオブジェクトを生成する
  bitmap = new createjs.Bitmap(result);

  // StageにBitmapオブジェクトを追加する
  stage.addChild(bitmap);

  // Stageの状態を更新する
  stage.update();
}
```
ASP.NET MVC5（C#） PDF出力

メモ

# RazorPDF

iTextSharpを利用しているらしい。
HTMLとは別に、どのように出力するか書く必要がある。

[公式サイト](https://www.nuget.org/packages/RazorPDF)

ブログ
https://84zume.wordpress.com/2012/10/17/asp-net-mvc-razorpdf/

# TuesPechkin

該当のURLを指定することで、該当のURLと同様の見た目のPDFを出力できる。

[公式サイト](https://github.com/tuespetre/TuesPechkin)

ブログ
http://tnakamura.hatenablog.com/entry/2015/02/18/tuespechkin
http://tnakamura.hatenablog.com/entry/2015/03/02/convert_view_using_javascript_to_pdf


後日実践してみる予定。
[swift] SwiftyJSONをつかって、JSONの値をUITableViewに表示


今日1日JSONの読み込みに手こずってしまった。
まだまだ、Swiftに慣れななぁ〜

こんなにかかってしまったのは、「楽しいプログラミング」に書かれているJSONの読み込みのコードが、あまりにも不安定で原因がわからない状態だった。
その後、SwiftyJSONを試してみたが、TableViewに表示するのがわからなかった。
しかし、こちらのサイトを見つけて参考になりました。
["[Swift]APIで取得したJSONをswiftyJSONでパースして、天気情報をUITableViewで表示。お天気アプリを作ってみる。"](http://qiita.com/yonell/items/c5432207868fa2d5cfc9)


````swift:ViewController.swift
import UIKit

class ViewController: UITableViewController {
    // セクションの数
    let sectionNum = 1
    // 1セクションあたりのセルの行数
    let cellNum = 5
    let urlString = "～" //適当なjsonファイルへのパス
    // セルの中身
    var cellItems = NSMutableArray()
    // ロード中かどうか
    var isInLoad = false
    // 選択されたセルの列番号
    var selectedRow: Int?
    
    // ビューのロード完了時に呼ばれる
    override func viewDidLoad() {
        super.viewDidLoad()
        // json取得->tableに突っ込む
        makeTableData()
    }
    
    // json取得->tableに突っ込む
    func makeTableData() {
        self.isInLoad = true
        var url = NSURL(string: self.urlString)!
        var task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {data, response, error in
            // リソースの取得が終わると、ここに書いた処理が実行される
            var json = JSON(data: data)
            
            println(json["list"])
            // 各セルに情報を突っ込む
            //適当なJSONファイルが持っている値
            for var i = 0; i < self.cellNum; i++ {
                var hId = json["list"][i]["humanId"]  
                var aoutName = json["list"][i]["aouther"]
                var tId = json["list"][i]["titleId"]
                var titleName = json["list"][i]["title"]
                var info = "\(hId), \(aoutName), \(tId), \(titleName)"
                self.cellItems[i] = info
                println(hId)
            }
            // ロードが完了したので、falseに
            self.isInLoad = false
        })
        task.resume()
        
        while isInLoad {
            usleep(10)
        }
    }
    
    
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return self.sectionNum
    }
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        //return titleName.count
        return self.cellNum
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("list", forIndexPath: indexPath) as UITableViewCell
        
        cell.textLabel?.text = self.cellItems[indexPath.row] as? String
        return cell
    }
    override func tableView(tableView: UITableView?, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        performSegueWithIdentifier("detail", sender: nil)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
   
}
````

JSON自体にも慣れておらず、うーん、、、、
SwiftyJSON自体もよくわからなかった。今更で、当たり前のことなんだけど、JSONの各値をイニシャライズしないとうまく動かない。
いろいろと大変だ。
SVGのevent bubblingについて調べてみた

HTMLは子から親にイベントが連鎖したり、重なりがあった場合、下の要素にもイベントが連鎖したりする。
w3cとかみてもそれらしい記述がないのでSVGのイベント連鎖はどうなるのかしらべてみた。

結論を書くとこんな感じ。

* イベントが発火した要素がgroup要素にはいっていた場合、その要素とgroup要素が発火します。※groupにはいっている他の要素は影響うけけない。
* 要素が２つ重なっていた場合は上にある要素だけが発火する。下側の要素には伝わらない。
* svg要素内で発火したイベントはDOM上の親要素へと伝搬していく。

実験したコード

```html
<header>
　　<h1>バブリング調査</h1>
</header>

<body onclick="alert('bodyでーす');">
    <div id='svg-container' onclick="alert('divでーす。');" height="100%">
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
            <g onclick="alert('赤青グループです。')">
                <rect x="50" y="20" width="150" height="50" style="fill:blue;" onclick="alert('青です。');"/>
                <rect x="70" y="40" width="150" height="50" style="fill:red;" onclick="alert('赤です。');"/>
            </g>
            <g onclick="alert('黄緑グループです。')">
                <rect x="40" y="80" width="150" height="50" style="fill:yellow;" onclick="alert('黄です。');"/>
                <rect x="60" y="110" width="150" height="50" style="fill:green;" onclick="alert('緑です');"/>
            </g>            
        </svg>
    </div>
</body>

```

demo

http://jsfiddle.net/jLrrxy7e/8/

ほとんどイベント伝搬という考え方はなさうです。

HighChartをさわっているとイベント伝搬しているかのような挙動をするので
気になって中みてみたらJavaScriptで別要素に伝搬させていました。
Struts2のConventionによる恩恵と、(できれば)やらないほうがいい書き方

# Struts2のConventionプラグインの恩恵

Conventionプラグインは、設定ファイルに記載することをアノテーションで代替できます。

特にActionクラスの設定に関してはActionクラスへ直接記載できるため設定ファイルが肥大化せず、 **アプリケーション全体の設定とActionクラス独自の設定を分離** できます。

他にも、HTMLやJSPそれ以外の画面出力ファイルの配置場所をルール化、Actionクラス実行時に拡張子 .action が不要になる、他にもコーディングや設定をきれいにできる仕組みを提供します。

しかしそんな中でもいくつか標準の規約だけでは守りきれない部分もあります。そんなアンチパターンを紹介します。

## 絶対にやめましょう一覧

次の内容は、1つのアプリケーション内でやってはいけません。実行時エラーも出ないケースです。

1. 複数のActionクラスやActionメソッドで、@Namespace と @Action の組み合わせが完全に重複する
 * 実行時エラーにならず、どちらか一方のみ有効になります。
 * @Namespaceと@Actionの組み合わせでURLが決定しますので、マッピングは正しく設計しましょう

1. Actionクラスのexecute()メソッドに実装した上で、他にもActionメソッドを用意してしまう
 * execute()メソッドは、同じActionクラスに属する@Actionがついたメソッドを実行するときには、必ず実行されます。
 * execute()メソッドを実装しないか、またはexecute()を必ず使うようにするか、を決めましょう。

1. prepare() と execute() メソッドの実装方針を決めないまま実装してしまう。
 * execute()メソッドの利用と同様、設計/実装ポリシーを定めておきましょう。prepareはPreparableインタフェースを実装すると利用できます。
 * prepare()はexecute()の前に実行されます。
 * prepareXyzabc()はxyzabc()の前に実行されます。

## できたらやめましょう一覧

以下の内容は、実際に可能ですが複雑になるので避けた方がよい方法です。

* Namespacesを使って1つのActionに複数のNamespaceを定義する
* InterceptorRefsを定義するだけの空Actionクラスをつくる
* ExceptionMappingsを定義するたけの空Actionクラスをつくる
* ActionSupportの定義済みResult以外をreturnする
* 正常系のResultで、複数種類のresultTypeを用意する

## 悩ましいところ

* Actionクラス1つに対し、複数の@Actionアノテーションを用意する

これは製造/設計ポリシー次第です。

Actionクラスが増えてしまうのが嫌な場合は、1つのActionクラスに複数用意します。
このとき以下の制約が当然つきます。

* Actionクラスが受け取るリクエストパラメータのフィールドが同じになる
* Validation定義が共有化されるので、個別設定が必要な場合はかなり複雑になる場合がある
Vue.js バージョンによる違いで親dataのscopeができなかったのでメモ。

# componentの基本的な使い方。

```html:index.html
<div id="parent">
    <p>メッセージ確認用{{parentMsg}}</p>
    <p v-component="child" v-with="childMsg : parentMsg"></p>
</div>
```

```js:app.js
new Vue({
	el: '#parent',
	data: {
		parentMsg: 'message'
	},
	components: {
		child: {
			template: 'メッセージ入力用<input v-model="childMsg">'
		}
	}
});
```

ブラウザで確認すると、
メッセージ確認用エリアと、
メッセージ入力用エリアが表示されて、
inputの内容を書き換えたら確認用のほうでも表示が変わるだけ。

## ハマった原因
0.11.4で上記アプリを動かそうとすると動かない。
0.11.5では動く。
ついでに、0.10系でも動く。

## どうするのがベストか。
inherit: true
というオプションもあるみたいだけど、
公式サイトでは、$addChildと一緒に使っているし、
今回の内容とは関係なさそう。

とりあえず、0.11.5使えば動くので、よしとしよう。
canvasのサイズ指定

canvasのデフォルトサイズは、幅300px、高さ150px。

canvasのサイズを変更したい場合は、canvasタグのwidth属性、height属性を変更しなければならない。cssでスタイリングすると、canvasのデフォルトサイズからの相対サイズになってしまうため、canvas内に描画した画像が引き伸ばされることになる。

## canvasをフルスクリーンで表示したいとき

```html
<div class="wrapper">
<canvas id="canvas"></canvas>
<!-- .wrapper // --></div>
```

canvasタグのラッパー要素に対して、CSSで幅と高さを100%にしておく。

```css
.wrapper{
  width: 100%;
  height: 100%;
}
```

canvas要素のwidth、height属性を、jsで.wrapperに合わせる。

```js
var w = $('.wrapper').width();
var h = $('.wrapper').height();
$('#canvas').attr('width', w);
$('#canvas').attr('height', h);
```