OmniAICreator/Qiita-1.07M huggingface dataset:
_CVDisplayLink関連のエラーが出た時の対処方法


新しいMac(10.9,Xcode6)に移行してofxOpenNIを使ってたら以下のエラーが出たので、その対処方法。

##Apple Mach-O Linker (Id) Error
>Undefined symbols for architecture i386:
  "_CVDisplayLinkGetNominalOutputVideoRefreshPeriod", referenced from:
      _vidmodeFromCGDisplayMode in libglfw3.a(cocoa_monitor.m.o)
  "_CVDisplayLinkCreateWithCGDisplay", referenced from:
      __glfwSetVideoMode in libglfw3.a(cocoa_monitor.m.o)
      __glfwPlatformGetVideoMode in libglfw3.a(cocoa_monitor.m.o)
      __glfwPlatformGetVideoModes in libglfw3.a(cocoa_monitor.m.o)
  "_CVDisplayLinkRelease", referenced from:
      __glfwSetVideoMode in libglfw3.a(cocoa_monitor.m.o)
      __glfwPlatformGetVideoMode in libglfw3.a(cocoa_monitor.m.o)
      __glfwPlatformGetVideoModes in libglfw3.a(cocoa_monitor.m.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)


##CoreVideo.frameworkを追加する
1. プロジェクトナビゲータでプロジェクトを選択
2. 左のプルダウンからTargets以下を選択
3. Generalタブを選択
4. Linked Frameworks and Librariesの下にある”+”を選択して、CoreVideo.frameworkを追加する

参照元によると、古いoFだとoF自身のプロジェクトがCoreVideo.frameworkを持ってるのに対し、新しいoF(0.8.4とか？)だと個々のプロジェクト側でCoreVideo.frameworkを持つように変更されているため、とのこと。
多分OSのバージョンとか、Xcode6は関係ない模様。
[参照元：Fix for _CVDisplayLinkRelease etc errors](http://forum.openframeworks.cc/t/fix-for--cvdisplaylinkrelease-etc-errors/16423)

以上、Mach-O Linker Errorの倒し方の一つ。
スマホサイトのキャプチャをPCで撮る

#まずやること

1. Chromeを開く
2. [Awesome Screenshot](https://chrome.google.com/webstore/detail/awesome-screenshot-captur/alelhddbbhepgpmgidjdcjakblofbmce?hl=ja)をダウンロードして有効化しておく
3. ChromeでDeveloperツール（MacだとAlt + Command + I）を開いて、EmulationからiPhone5あたりを選んでおく

#キャプチャを撮る
1. キャプチャを撮りたいページを開く
2. 表示領域の下にスペースが空いていたらぴったりの画像が撮れないので、Developerツールを移動させるかなんかして下を詰める
3. Chromeで![a.png](https://qiita-image-store.s3.amazonaws.com/0/13242/26aca2c2-0cae-adf9-d30c-caca26aee4f7.png)マークをクリック。一度目は説明ページに飛ばされるが、二度目を押すと詳細が表示される
4. ページ全体を撮りたいときは「Capture entire page」をクリックする
5. 撮れたら保存画面に移動するので、「完了」をクリックして保存。

それ以外は[スクリーンショットはこれで決まり！クローム拡張【Awesome Screenshot】](http://www.doghands.com/web-service/awesome-screenshot/)を参照
YouTube Data API V3で動画をアップする時にエラー

OAuth認証はクリアしたけど、いざ動画のファイルをアップしようとすると、アップできない！
`HTTP Error: Unable to connect・・・`
的なエラーがでてたけど、fopenで外部接続もできるし、なにーなにーと思っていたら、curlが有効になっていないのが原因でした。
debianだったので、
`apt-get install php5-curl`
でインストールして、apache2再起動でいけてましたね。

解決すれば大したことないんだけど、調べても同じ事象が日本語で無かったので書いときます。
さまざまな種類の平均

記述統計の中でも最も基礎的かつ重要な情報縮約の、その代表とも言える平均についてまとめます。

基本的な内容ですが、統計を現実の問題に応用しようとしたときに、まず最初の一歩で誤りやすい落とし穴かと思います。

## いろいろな平均

平均値、中央値、最頻値については[前](http://qiita.com/ynakayama/items/ba3b45b376397955c3da)に書きましたが、平均と言ってもよく知られる算術平均以外に実に様々なものがあります。算術平均を使うべきでない場面で算術平均を使うと、結果がおかしなことになってしまいますから注意が必要です。

### 算術平均

すべての値を加算して値の個数で割ることで求めた値。

X と Y の算術平均は次のようになります。

```math
\frac {X+Y} N
```

### 幾何平均

10000 円の株価が 40% 低下し、翌年には 50% 上昇した。

これをうっかり算術平均で計算してしまいますと (-40 + 50) / 2 = 5% 上昇したことになってしまいますが…。
実際には 10000 → 6000 → 9000 円と変動するので 10 % 低下します。

そこで幾何平均を利用します。
X と Y の幾何平均は次のようになります。

```math
\sqrt{XY}
```

したがって

```math
10000 × \sqrt{(0.6 × 1.5)} × \sqrt{(0.6 × 1.5)} \approx 9000
```

となるわけです。これが幾何平均です。

### 調和平均

60km 先の目的地まで、行きは時速 30km 、帰りは時速 60km で移動した。

この例を算術平均で計算してしまいますと時速が (30+60) / 2 = 45km となってしまいますがこれは正しいでしょうか。

行き帰りで 2 + 1 = 3 時間かかっていますが、 3 時間で時速 45km だとすると 135km も移動したことになりますから誤りです。

この場合はデータ数をデータの逆数の加算結果で除算する調和平均で求めるのが正解です。

```math
\frac {N} {\frac {1} {X} + \frac {1} {Y}}
```

となるので

```math
2 / (1/30 + 1/60) = 40
```

となります。これが調和平均です。

### トリム平均 (調整平均)

上位下位 5 パーセントを除いて残りの 90% の平均を求める、といった方法です。

スケートの審査で最高点と最低点を出した審判を無視して判定するといったのも一種のトリム平均になります。

トリム平均は外れ値の影響を回避したいときに有益です。

ただし、外れ値の程度がどれくらいだから取り除くのかといった根拠に論理的な説明ができない、あるいは外れ値自体に意味があるといったケースでは実態にあわない、といった欠点もあります。
Vagrantで手っ取り早く仮想マシンを作成する

# 概要
vagrantはVirtualBoxまたはVMwareを使って、仮想マシンを構築するツールです。

公式HP
http://www.vagrantup.com/

# 今回やること
- VirtualBoxインストール
- Vagrantインストール
- Vagrantfile作成
- 仮想マシン起動
- 仮想マシンにSSHログイン

※今回作成する仮想マシンは、
Ubuntu 12.04.5 LTS (Precise Pangolin)

# VirtualBoxをインストール
以下のサイトからダウンロードしてインストール。
https://www.virtualbox.org/wiki/Downloads

# Vagrantをインストール
以下のサイトからダウンロードしてインストール。
https://www.vagrantup.com/downloads.html

# Vagrantfileを作成
仮想マシン用にディレクトリ作成しておきます。

```bash
$ mkdir vagrant_test
cd vagrant_test
```

以下の内容を`Vagrantfile`というファイル名でカレントディレクトリに保存。

```ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"
end
```
デフォルトのVagrantfileはコメントがずらずら書いてありますが、
今回は不要な箇所を省きました。
ちなみに、上記のファイル内容は、以下を実行したのと同じです。

```bash
$ vagrant box add precise64 http://files.vagrantup.com/precise64.box
$ vagrant init precise64
```
今回はubuntuの仮想マシンを作成しますが、様々なOSのインストールが可能です。
以下サイトでBoxのイメージリストが閲覧できます。
http://www.vagrantbox.es/

# 仮想マシンを起動
以下を実行。

```bash
$ vagrant up
```

以下ログ

```bash
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'precise64'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: vagrant_test_default_1411977416152_90752
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default: 
    default: Guest Additions Version: 4.2.0
    default: VirtualBox Version: 4.3
==> default: Mounting shared folders...
    default: /vagrant => /Users/[User]/vagrant_test
```

# 仮想マシンにsshログイン

```bash
vagrant_test$ vagrant ssh

Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
New release '14.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Welcome to your Vagrant-built virtual machine.
Last login: Fri Sep 14 06:23:18 2012 from 10.0.2.2
vagrant@precise64:~$ 
```

# 完了
以上で仮想マシンの作成ができました。
今回は手っ取り早く仮想マシンを作成する手順でした。
別の機会にVagrantfileの事を詳しく解説します。
Uriのパス(file:/~)からFileを作成する

よく忘れるのでメモ。
file:/data/image/image.jpgのように、schemeが付いたUriからFileを生成する。

### コード
```
String uri = "file:/data/image/image.jpg"
File file = new File(Uri.parse(uri).getPath());
```

### ポイント
Ur.parse(uri).getString()ではない。こうするとfile:/~が返ってきてしまってFileNotFoundExceptionが発生してしまう。
[css] 文字列の折り返し表示

長い一つの文字列を要素の範囲内で折り返し表示させたい。
要するに
![長い文字列を折り返す](http://www.webdesignerwall.com/wp-content/uploads/2010/03/break-word.gif "折り返す")

↑こういうことをしたい。

# 対応

```css:そのままでいい時
word-wrap: normal;
```

```css:折り返す時
word-wrap: break-word;
```

## 例

```html
<style>
p.hoge { word-wrap: normal; }
</style>

<p class="hoge">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</p>
```
[Xcode 6] クライアントのプロビジョニングファイルでipaファイルをエクスポート

クライアントからもらったプロビジョニングファイル(Provisioining Profile)でコンパイルしたアプリをエクスポートして、ipaファイルとして納品する... 

受注の仕事をしてるとこういう場面ってよくありますよね. プロビジョニングファイルと証明書(p12ファイル)さえあれば、前はOrganizerから簡単にできたこの手順. Xcode 6ではできなくなってしまいました. Preferencesで登録したDeveloperアカウントに紐づいたプロビジョニングファイルでしかエクスポートできない仕様のようです. 

![Screen Shot 2014-09-29 at 5.05.01 PM.png](https://qiita-image-store.s3.amazonaws.com/0/29698/6fa698b7-436d-7bd7-9e3d-189ec051eb57.png)

そこで回避策をご紹介. Terminalでコマンドラインツール `xcodebuild`を使います. 

Archiveでコンパイルしたら、Organizerで"Show in Finder"で、アーカイブ(xcarchiveファイル)のファイルパスを確認します. その上で、`xcodebuild`をつかって、

```
$ xcodebuild -exportArchive -archivePath <アーカイブ(xcarchiveファイル)のファイルパス> 
  -exportProvisioningProfile <プロビジョニング名> -exportPath <書き出し先のファイルパス>
```

とやればエクスポートできるはずです! 

`-exportProvisioningProfile`に渡す、**プロビジョニングの名前はファイル名ではなく、Developerポータルで登録されている名前、言い換えれば、Build SettingのProvisioing Profileの欄に表示される名前**なので注意が必要です. (下記の場合だと "Generic Development")

![Screen Shot 2014-09-29 at 5.40.22 PM.png](https://qiita-image-store.s3.amazonaws.com/0/29698/339064a7-5402-b8a2-2d2b-f827a6ea45ae.png)
声に出して読みたい Android のライブラリ - その3

[声に出して読みたいObjective-Cのライブラリ8種(2014.7)](http://qiita.com/hayashi311/items/85f62d98f05bee23a312) に触発されて書いてみます。

---

第一回は[こちら](http://qiita.com/KeithYokoma/items/68c076ebe7fc6829e88e)
前回は[こちら](http://qiita.com/KeithYokoma/items/80a56ce66595d0d9ae2f)

---

今回は、アノテーションを用いた、アスペクト指向っぽいものを中心に紹介します。

# [hugo](https://github.com/JakeWharton/hugo)

https://github.com/JakeWharton/hugo

安心と信頼の JakeWharton 先生のライブラリでございます。

デバッグ時にメソッドコールをロギングしてくれるライブラリで、ログ出力をしたいメソッドに対して`@DebugLog`アノテーションをつけることで、そのメソッドの呼び出しと終了がロギングされます。呼び出されたスレッドと、終わるまでに要した時間も出力されます。

アノテーションの実体は`hugo-annotations`にありますが、ログ出力処理そのものは`hugo-runtime`にあります。hugo 自体は、AspectJ をベースに、`@DebugLog`アノテーションのついたメソッドが呼ばれたのを検知して処理を実行しています。このあたりの処理の実体は、`hugo-runtime`の中の`Hugo`クラスが担当しています。

AspectJ がベースになるため、別途`hugo-plugin`で提供される Gradle Plugin を使用する必要があります。

# [paraphrase](https://github.com/JakeWharton/paraphrase)

https://github.com/JakeWharton/paraphrase

安心と信頼の JakeWharton 先生のライブラリでございます。

文字列のフォーマットを安全に取り扱い、コンパイル時に間違いに気付くことができるような仕組みを提供してくれます。

通常、文字列フォーマットでは、`%1$s`などの特殊なプレースホルダを用い、データ型ごとにフォーマットが異なったり、複数ある場合は順番を考慮したフォーマットにする必要があったりなど、何かと気を付けるポイントが多いです。また、取り扱いを間違えても、コンパイル時には何のエラーも出ないため、実行時に初めて間違いに気づきます。

paraphrase では、文字列フォーマットを型を用いてビルドできるようにすることで、間違いがあった場合にはコンパイルエラーで検知できるようになり、かつ型があるので、順番を気にすること無く、命名されたプレースホルダに流し込みたい文字列を入力するだけでフォーマットが完了します。これによって安全に文字列フォーマットが取り扱えるというわけです。

似たようなものに [square/phrase](https://github.com/square/phrase)がありますが、paraphrase はより厳密に型を用いたフォーマットをする事ができます。

リソースを型に組み上げるため、Gradle のプラグインを導入する必要があります。

# [scapel](https://github.com/JakeWharton/scalpel)

https://github.com/JakeWharton/scalpel

安心と信頼の JakeWharton 先生のライブラリでございます。

View のデバッグ用途として、画面をグリグリすると 3DCG みたいに View のヒエラルキーを見ることができるようになるツールです。

root となる View を`ScalpelFrameLayout`にして、必要な設定をすれば、指の動きに合わせて View の構造が見えるようになります。

# [LogHouse](https://github.com/rejasupotaro/LogHouse)

https://github.com/rejasupotaro/LogHouse

アプリの開発・運用において、ログの収集は非常に重要な役割を担います。特にネイティブアプリでは、ログは端末からサーバへ送信しなければ解析をすることができません。
この LogHouse は、ログの蓄積と非同期処理による送信・リトライなどのボイラプレートな部分の面倒を見てくれるので、自分たちがほしいログの定義と、実際に送信する先をどうするかにフォーカスすれば、あとはよしなにしてくれるすぐれものです。

# [icepick](https://github.com/frankiesardo/icepick)

https://github.com/frankiesardo/icepick

アノテーションによって、ライフサイクルを超えて保存しておきたいデータを宣言的に記述するためのライブラリです。`Activity#onSaveInstanceState`や`Activity#onRestoreInstanceState`で行う各種の保存・復元処理をアノテーションによって置き換えることが可能です。

# [saripaar](https://github.com/ragunathjawahar/android-saripaar)

https://github.com/ragunathjawahar/android-saripaar

入力のバリデーションをアノテーションによって行うためのライブラリです。

入力された文字列のパターンや文字数、チェックされているかどうかなどの各種の状態をアノテーションで宣言すると、バリデーションのロジックがそれに応じて差し込まれ、リスナ経由でその結果を得ることができます。
milkcocoaのサンプルコードをまとめました

[milkcocoa](https://mlkcca.com/)でチュートリアルを終えた方、あるいはチュートリアルを無視して何か作ってみるかという方を対象とした記事になります。サンプルはレベル別に分けてます。

# 基礎編

## チャット
![spl-chat.png](https://qiita-image-store.s3.amazonaws.com/0/26475/c61dbb5a-33dd-6e85-5840-1e90a981e473.png)
トップページにあるチャットのサンプルです。**チュートリアルのものよりもデザインが良い**ので、ステップアップをお考えならオススメです。
http://chat.mlkcca-app.com/
https://github.com/milk-cocoa/chat

## 付箋
![spl-fusen.png](https://qiita-image-store.s3.amazonaws.com/0/26475/8250406a-3296-4ee8-34f8-99a8db8e9404.png)

JavaScriptでの描画やリアルタイムイベントをどのように同期させるかを学ぶのに最適です。これを改造して、**普通にチームで使用するのもオススメ**です。
http://fusen.mlkcca-app.com/
https://github.com/milk-cocoa/fusen/tree/v0.0.1

## 埋め込みチャットプラグイン
![spl-chat-plugin.png](https://qiita-image-store.s3.amazonaws.com/0/26475/17e2f78a-08a9-7c68-968a-f1cf44947ee9.png)

**好きなサイトにチャットを埋め込めます**。milkcocoaのさらなる可能性の一端が伺えるので一見の価値ありです。
http://chat-parts.mlkcca-app.com/
https://github.com/milk-cocoa/chat-parts

## クリックポイントを共有するライブラリ
![spl-shareclick.png](https://qiita-image-store.s3.amazonaws.com/0/26475/d54aaf15-2114-c6c1-fdf3-67c65072732e.png)
**他のユーザーのクリック位置が可視化されます**。mousemoveイベントをとってヒートマップを作るなどの**マーケティング的利用のアイデアが膨らむ**サンプルとなっています。
http://shareclick.mlkcca-app.com/
https://github.com/milk-cocoa/shareclick

# 応用編

## ログイン機能付きメモサンプル with vue.js
![spl-todomemo.png](https://qiita-image-store.s3.amazonaws.com/0/26475/264e6ea4-41cd-2579-a063-73f768188c68.png)
ログイン機能を学ぶのに良いです。**vue.jsを利用してデータバインディングなども実装している**ので、少しレベルの高いアプリケーションに挑戦したいならおすすめです。
http://login.mlkcca-app.com/
https://github.com/milk-cocoa/login

## ラミエルシューティング
![fps.png](https://qiita-image-store.s3.amazonaws.com/0/26475/c6310e28-b467-be00-8a33-e32d0c62e99c.png)![spl-ramiel.png](https://qiita-image-store.s3.amazonaws.com/0/26475/c84267d9-229c-7f5f-7e1e-51c6a2fc4fb4.png)
世界で最も簡単なWebGLライブラリ[jthree](http://jthree.jp/)と[milkcocoa](https://mlkcca.com/)で作った**ブラウザオンラインFPS**（シューティングゲーム）です。ステージとか武器変更とかチャットとかあります。OSSとして公開しているので興味があれば参加してみてください。
http://jthreefps.mlkcca-app.com/
https://github.com/milk-cocoa/ramiel-shooting

## オセロ
![spl-reverse.png](https://qiita-image-store.s3.amazonaws.com/0/26475/a5579f6d-fd87-12a4-cdbf-50353bff1799.png)
オセロゲームのサンプルです。JSでの少し複雑なロジックの書き方や、先攻後攻を決定するロジックなど見物です。
http://reverse.mlkcca-app.com/
https://github.com/syuhei176/reverse

## ダイアグラムエディタ
![spl-diagram.png](https://qiita-image-store.s3.amazonaws.com/0/26475/ee6c654f-2022-2072-c193-b2d7160e97dc.png)
こちらは**CaccoのようなリアルタイムSVG描画サンプル**です。チャットとはひと味違うリアルタイムアプリを作りたいならこちらに挑戦してみましょう。
http://drawing.mlkcca-app.com/
https://github.com/syuhei176/diagram

## マインドマップチャット
![spl-mikumap.png](https://qiita-image-store.s3.amazonaws.com/0/26475/25cb4f56-ed02-fc45-90c8-cebeda16a015.png)
マインドマップのように発言がつながるリアルタイム掲示板アプリです。**URLのハッシュ値による部屋の作成ロジック**や、ノード描画ロジックなど応用的な内容を学ぶのに丁度良いサンプルです。
http://mikumap.mlkcca-app.com/
https://github.com/shogochiai/mikumap

# まとめ
シングルページアプリケーションからゲーム、さらにはスクレイピングのバックエンドやロギングや画面同期など、様々なユースケースが日々増えています。週末や仕事終わり、あるいは大学の夏休みなど、**テンションが上がっているうちに高速でプロトタイピング**して、やりたかったことを**誰よりも早く形に**してみてはいかがでしょうか。
cssプロパティの初期値一覧


mozillaの[cssリファレンス](https://developer.mozilla.org/ja/docs/Web/CSS/Reference)を参考にしました。

---
(10/1追記)
表に「説明」を追加しました。この初期値のままで、どう振る舞うかの説明です。
実際にブラウザで見た場合、ブラウザによってhtml要素ごとにプロパティの初期値が上書きされます。


| プロパティ   | 初期値   | 説明    |
|:-----------|:-------|:---------|
| appearance* | none | 要素にボタンやチェックボックスなど特別なスタイル付けを行わない |
| background | 各background系プロパティの初期値 |  |
| background-attachment | scroll | 画面スクロールに従って背景も移動 |
| background-clip | border-box | 背景をborderやpadding含めた範囲まで適用 |
| background-color | transparent | 背景色を透明色にする |
| background-image | none | 背景に画像を使用しない |
| background-poasition | 0% 0% | 背景画像の表示起点を左上にする |
| background-repeat | repeat | 背景画像を繰り返す |
| background-size | auto auto | 背景画像を元の画像の大きさのままで使用する |
| border | 各border系プロパティの初期値 |
| border-color | 要素のcolorプロパティ | 線の色がcolorプロパティになる |
| border-radius | 0 | 角丸にしない |
| border-style | none | borderを境界無し、線幅を0にする |
| border-width | medium | 線幅を(UAに依存するが一般的に)3pxにする |
| box-shadow | none | ドロップシャドウをつけない |
| box-sizing | content-box | 要素の幅算出にborder、padding、marginを含めない |
| clear | none | 選考する要素のfloatを解消しない |
| color | Varies from one browser to another | |
| cursor | auto | コンテクストに基づき表示するカーソルをブラウザが決定 |
| content | normal | 疑似要素を生成しない |
| display | HTML仕様による(XMLではinline) | |
| float | none | 要素の流し込み処理を通常に行う |
| font | 各font系プロパティの初期値 | |
| font-family | ユーザエージェントに依存 | 文字のフォントはユーザ環境による |
| font-size | medium | 文字の大きさをユーザーの既定のフォントサイズにする |
| font-style | normal | 文字をイタリック体・斜体にしない |
| font-size-adjust* | none | 異なるフォント間などでのサイズ調整をブラウザで行わない |
| font-variant | normal | 標準の（スモールキャップでない）フォントフェイスを指定 |
| font-weight | normal | 文字を太くしない |
| height | auto | コンテンツの高さをブラウザが計算する |
| line-height | normal | 1行の高さをおよそ1文字の1.2倍にする |
| list-style | 各list-style系プロパティの初期値 |
| list-style-image | none | リスト項目のマーカー画像を指定しない |
| list-style-position | outside | マーカーを要素の外側に描写する |
| list-style-type | disc | マーカーの形を円形にする |
| margin | 0 | 要素の四方の余白を0にする |
| max-height | none| 要素の高さの上限を指定しない |
| max-width | none| 要素の幅の上限を指定しない |
| min-height | 0 | 要素の高さの最小を指定しない |
| min-width | 0 | 要素の幅の最小を指定しない |
| opacity | 1 | 要素を透明にしない |
| overflow | visible | 要素からはみ出たコンテンツをそのまま表示させる |
| padding | 0 | 要素の枠内の余白を0にする |
| pointer-events | auto | 要素のマウスイベントを制限しない |
| position | static | 要素の位置指定を行わない |
| text-align | start(startが未対応のブラウザの場合、文章の方向によってleftかright) | (日本語の場合)テキストの方向を左から右にする |
| text-decoration | 各text-decoration系プロパティの初期値 |
| text-decoration-color* | currentColor |線による装飾を親要素の文字色と同じ色で使う |
| text-decoration-line* | none | 要素に線による装飾を行わない |
| text-decoration-style* | solid | 線による装飾を一重の線で描画する |
| text-indent	| 0 | 文章の一文字目の前に、水平スペースを挿入しない |
| vertical-align | baseline | テキストやテーブルセル要素の縦方向の整列を、親要素のフォントのベースラインに合わせる |
| visibility | visible | 要素を可視にする |
| width | auto | コンテンツの幅をブラウザが計算する |
| white-space | normal | 連続する空白は詰めて1つになる。折り返しも行われる |
*は一部モダンブラウザでも未実装

不備や「これもよく初期化する」というプロパティがあったら教えてください〜

---
(10/1 プロパティの追加) 
appearance, cursor, max-width, min-width, max-height, min-height
各言語でランダムなパスワード文字列を生成する方法


* [PHPでランダムなパスワードを1行で生成する](http://qiita.com/suin/items/c958bcca90262467f2c0)
* [JavaScriptでランダムなパスワード文字列を生成したい](http://qiita.com/suin/items/23ba4a487425bbad90c8)
* [Go言語でランダムな文字列を生成する](http://qiita.com/suin/items/062dab1e6dc82c81c320)
* [Scalaでランダムなパスワード文字列を生成したい](http://qiita.com/suin/items/bfff121c8481990e1507)
* [コマンドラインでランダムなパスワードに使えそうな文字列をさくっと作る](https://qiita.com/reoring/items/b739208a36f7e560c0f3)
AndroidでPageViewを使うとなんか背景が緑になる

Androidの実機でui::PageViewを使うと背景が緑色になってしまうことがあります。

![Screenshot_2014-08-03-17-54-48.png](https://qiita-image-store.s3.amazonaws.com/0/2490/a9dfe5e4-f517-a8ec-2a3c-ac4f162543b3.png)

公式で同じ問題が議論されていました。
[ui::PageView bug with v3 rc1 : Green background on Android](http://discuss.cocos2d-x.org/t/ui-pageview-bug-with-v3-rc1-green-background-on-android/12897)

AppActivityでglSurfaceViewの設定を変更すると正常に表示されます。

```java:AppActivity.java
import org.cocos2dx.lib.Cocos2dxGLSurfaceView;

public class AppActivity extends Cocos2dxActivity{

    public Cocos2dxGLSurfaceView onCreateView() {
        Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
        glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
        return glSurfaceView;
    }

}
```

![Screenshot_2014-08-03-17-57-48.png](https://qiita-image-store.s3.amazonaws.com/0/2490/441f9470-3eb9-41e9-241c-9e5ae62d791f.png)
Ansibleで環境毎の変数を定義する


こういう系のツールではお馴染みの _dev_, _prod_, _stage_などの環境を分けるような機能はAnsibleにはないが、実現は簡単にできる。


## Group Variablesを利用する

一番スマートなのがGroup Variablesで定義する方法。
ツリーはこんな感じ。

```
.
├── dbservers.yml
├── development.ini
├── group_vars
│   ├── all.yml
│   ├── dbservers.yml
│   ├── development.yml
│   ├── production.yml
│   └── webservers.yml
├── production.ini
├── site.yml
└── webservers.yml
```

group_varsにproduction.iniとdevelopment.iniに対応したようなファイルが設置されていて、一見すると読み込んだInventoryファイル名がそのまま使われているように思えるが、実際はそうではない。

各Inventoryファイルで架空のグループ(development, production)を定義し、このような動作を実現している。

```ini:development.ini
[webservers]
192.168.1.10

[dbservers]
192.168.1.20

[development:children]
webservers
dbservers
```

```ini:production.ini
[webservers]
172.16.1.10
172.16.1.11

[dbservers]
172.16.1.20
172.16.1.21

[production:children]
webservers
dbservers
```


## Inventoryで変数を定義する。

Inventory内で直接_webservers:vars_などとやるほうがお手軽感がある。
しかし、[Inventory - Ansible Documentasion](http://docs.ansible.com/intro_inventory.html#splitting-out-host-and-group-specific-data)では次のように書かれている。

```
The preferred practice in Ansible is actually not to store variables in the main inventory file.
```

Dynamic Inventoryは別として、たしかにInventoryファイルではdictの扱いもできないため、YAMLでの定義ができたほうが望ましいと思う。
Acknowledgements.plist の消失

cocoapods 0.34 にするといなくなるらしい。

https://github.com/CocoaPods/CocoaPods/issues/2465

それはいいとして

https://github.com/CocoaPods/CocoaPods/wiki/Acknowledgements#ios-setting-bundle からコピペした

```
post_install do | installer |
  require 'fileutils'
  FileUtils.cp_r('Pods/Pods-Acknowledgements.plist', 'Resources/Settings.bundle/Acknowledgements.plist', :remove_destination => true)
end
```

でエラーになる。

```
post_install do | installer |
  require 'fileutils'
  FileUtils.cp_r('Pods/Target Support Files/Pods/Pods-acknowledgements.plist', 'Resources/Settings.bundle/Acknowledgements.plist', :remove_destination => true)
end
```

に置き換えるとエラーは防げる。
qmail-qstatの情報をMackerelで

とりあえずPerlで。

```perl:mackerel-plugin-qmail
#!/usr/bin/perl

use strict;
use 5.10.0;
use JSON::XS qw(encode_json);

($ENV{MACKEREL_AGENT_PLUGIN_META})? meta() : scan();

sub meta {
    say "# mackerel-agent-plugin";
    say encode_json {
        graphs => {
            'qmail.qstat' => {
                label    => 'qmail-qstat',
                unit     => 'integer',
                metrics  => [
                    {
                        name  => 'queue_preprocessed',
                        label => 'messages in queue but not yet preprocessed',
                    },
                    {
                        name  => 'queue',
                        label => 'messages in queue',
                    },
                    {
                        name  => 'queue_total',
                        label => 'total messages in queue',
                    },
                ]
            }
        }
    };
}

sub scan {

    my $time = time();
    my $stat = `qmail-qstat`;

    my %qstat = map {split /:\s/}  split "\n", $stat;

    my $queue              = $qstat{'messages in queue'};
    my $queue_preprocessed = $qstat{'messages in queue but not yet preprocessed'};
    my $queue_total        = $queue + $queue_preprocessed;

    say join "\t", 'qmail.qstat.queue_total',        $queue_total,        $time;
    say join "\t", 'qmail.qstat.queue',              $queue,              $time;
    say join "\t", 'qmail.qstat.queue_preprocessed', $queue_preprocessed, $time;
}
```
画像置換

# 画像置換のやり方

## ファーク式
	text-indent: -9999px;
よく見かける（-10000pxとか）
だが、その分領域を確保しちゃうので、パフォーマンス面では問題があります。
IE6～大丈夫

## ケラム式

	text-indent: 100%;
	white-space: nowrap;
	overflow: hidden;
ケラムさんが提案したものだからケラム式。
ファーク式よりパフォーマンスが上がるとか。
IE6～大丈夫

# 画像置換する際に起こりうるエラー

## 画像置換したはずの文字が右から少し見えてしまっている

### 【見るところ】
その横幅、それか、それを囲う横幅が小さくなっていると、
見える領域に入ってきて表示されてしまう。ので、横幅チェックをしてみる。
WKWebView で Basic 認証がかかったページへアクセスする方法

`WKWebView` では `WKNavigationDelegate` の `
webView:didReceiveAuthenticationChallenge:completionHandler:
` を実装することになります。

認証が必要なサイトにアクセスした場合、ユーザー名、パスワードの入力を求めるアラートを表示するようにしてみました。

<img src="https://qiita-image-store.s3.amazonaws.com/0/36383/0d6576bd-e72d-4d38-d9f0-954cbfa1aa12.png" alt="webkitdemo-authentication_required.png" title="webkitdemo-authentication_required.png" width="320" height="480" />

```swift:
    func webView(webView: WKWebView!, didReceiveAuthenticationChallenge challenge: NSURLAuthenticationChallenge!, completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential!) -> Void)!) {
        let alertController = UIAlertController(title: "Authentication Required", message: webView.URL.host, preferredStyle: .Alert)
        weak var usernameTextField: UITextField!
        alertController.addTextFieldWithConfigurationHandler { textField in
            textField.placeholder = "Username"
            usernameTextField = textField
        }
        weak var passwordTextField: UITextField!
        alertController.addTextFieldWithConfigurationHandler { textField in
            textField.placeholder = "Password"
            textField.secureTextEntry = true
            passwordTextField = textField
        }
        alertController.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: { action in
            completionHandler(.CancelAuthenticationChallenge, nil)
        }))
        alertController.addAction(UIAlertAction(title: "Log In", style: .Default, handler: { action in
            let credential = NSURLCredential(user: usernameTextField.text, password: passwordTextField.text, persistence: NSURLCredentialPersistence.ForSession)
            completionHandler(.UseCredential, credential)
        }))
        self.presentViewController(alertController, animated: true, completion: nil)
    }
```

何か見覚えがあるメソッドですね。
`NSURLSessionDelegate` の `URLSession:didReceiveChallenge:completionHandler:` とほとんど同じですね。
認証に必要な情報を `NSURLCredential` にセットして `completionHandler` を呼び出します。

注意点として、`completionHandler` は必ず呼び出す必要があります。
試しに Log In ボタン、あるいはキャンセルボタンがタップされたときの処理にある `completionHandler` の呼び出しをコメントアウトして実行してみると以下のエラーが発生しました。

```
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Completion handler passed to -[WebKitDemo.WebViewController webView:didReceiveAuthenticationChallenge:completionHandler:] was not called'
```

ソースコードは GitHub で `WKWebView` を使ったサンプルアプリとして公開しています。
https://github.com/qmihara/WebKitDemo

## 参考

- [WKNavigationDelegate Protocol Reference](https://developer.apple.com/library/ios/documentation/WebKit/Reference/WKNavigationDelegate_Ref/index.html)
AutoLayoutでアニメーションを設定する方法(Objective-C版)

最近までxibのAutoLayoutの設定をしておらず、アニメーションを座標指定で動かしていました。
iPhone6/Plusが出てAutoLayoutの設定をするためようやく　Use AutoLayoutにチェックを入れたのですが、座標指定のアニメーションがうまく動かなくなりました。

そこでAutoLayoutの制約を付けたり外したりする方法でアニメーションを設定しました。


##以前のアニメーション
例えばsampleViewという名前のビューを(endX,endY)の位置にアニメーションで動かしたい場合

```objc

    CGRect rect = CGRectMake(endX,
                             endY,
                             sampleView.frame.size.width,
                             sampleView.frame.size.height);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [UIView beginAnimations:nil context:context];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDelay:0.2];
    [UIView setAnimationDuration:0.5];
    sampleView.frame = rect;
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];
```

このアニメーションではxibにAutoLayoutを施すと、移動したあとにsampleViewにAutoLayoutが働いて
元に戻ったりします。原因は、AutoLayoutがxib上に設定されるタイミングが、viewWillAppearであるためで、この後にアニメーションを設定するという方法もあるのですが、今回はAutoLayoutの作用のみでアニメーションを設定します。


##AutoLayoutを用いたアニメーション
AutoLayoutの制約を外し、別の制約を付ける、という手段で位置を変更することにします。
まずはsampleViewに制約をInterfaceBuilderで追加します。ここでは直上のsampleLabelというビューに隙間0の制約を定義しました。
この制約をソースファイルに接続して定義しておきます。また追加する制約をコードで宣言しておきます。

```objc

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *sampleViewTopZeroConstraint;
@property (nonatomic) NSLayoutConstraint *sampleViewTopConstraint;
```

新たに宣言した制約をセットします

```objc

    //ビューを列挙型に格納
    NSDictionary* views = [NSDictionary dictionaryWithObjectsAndKeys:
                           self.sampleView, @"sampleView",
                           self.sampleLabel, @"sampleLabel",
                           nil];
    //制約の数値をセット
    NSNumber *padding = sampleView.frame.size.height / 2;
    NSDictionary *metricsDictionary = NSDictionaryOfVariableBindings(padding);

    //sampleLabelの下部とsampleViewの上部の間をsampleViewの高さの1/2に設定
    self.sampleViewTopConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[sampleLabel]-padding-[sampleView]" 
                                                                         options:0
                                                                         metrics:metricsDictionary
                                                                           views:views];
```

あとは元々の制約を外し、新たにセットした制約に置き換えるだけです。

```objc

    //ネームラベルとの隙間ゼロの制約を外す
    [self.view removeConstraint:self.sampleViewTopZeroConstraint];
    //新しい制約を追加
    [self.view addConstraint:self.sampleViewTopConstraint];

    //アニメーション開始
    [UIView animateWithDuration:0.5
                          delay:0.2
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         [self.view layoutIfNeeded]; } 
                     completion:nil];
```
     
ここで`layoutIfNeeded` を入れないと、アニメーションで位置が変更されません。
これでsampleLabelと接していたsampleViewが下に動きます。

もとに戻すときは、`removeConstraint:`と`addConstraint:`を入れ替えれば大丈夫です。
Control-D でログアウトしたくない

bash 限定というわけでもないのですが。

OS X ではカーソル操作に Emacs 風のものが利用出来ますが、Terminal で delete 操作(C-d)をしていると、不意に exit が入力されてログアウトしてしまう事がよくあります。（私の場合、キーリピート速度を標準以上に高速にしているので尚更……）
これを防止するには .bash_profile 等シェルの設定ファイルに `IGNOREEOF` を書いてあげると良いみたいです。

```shell-session
# C-d によるログアウト入力を防止（百回までは無視する）
IGNOREEOF=100
```

するとこんな表示が出るようになります。

```
$ Use "logout" to leave the shell.
```

本当はこれも非表示に（C-d 入力を完全に無視）してほしいところですが。
Docker Registryをさくっと立てる

ローカル環境にDocker Registryをさくっと立てる方法
詳しくはこちら→https://github.com/dotcloud/docker-registry

# 立てる

```bash
$ docker pull stackbrew/registry
```
Docker Registryはオフィシャルのイメージを使用する。
https://registry.hub.docker.com/_/registry/Docker

```bash
$ docker run -d -p 5000:5000 -v /opt/docker_data/registry:/tmp/registry stackbrew/registry
```
データを永続化するためにホストのディレクトリをマウントする。
レジストリのデータは`/tmp/registry`にデータが保存されているので、適宜マウントする。
https://github.com/docker/docker-registry#persistent-storage



# 試す

``` Dockerfile:Dockerfile
from centos:centos7

run yum install -y httpd
expose 80
cmd["/usr/sbin/httpd", "-D", "FOREGROUND"]
```

```bash
$ docker build --rm -t demo/httpd .
```
ひとまず、適当なイメージをビルドする。

```bash
$ docker tag demo/httpd localhost:5000/httpd
$ docker push localhost:5000/httpd
```
Docker Registryへpushを行うにはタグを設定する必要があるため、
先ほど作成した`demo/httpd`に`localhost:5000/httpd`を設定する
※_タグにはDocker Registryのホスト名とポートを指定する。_

```bash
$ docker rmi localhost:5000/httpd
$ docker pull localhost:5000/httpd
```
一旦イメージを削除して、Docker Registryからpullする

```bash
$ docker run -d -p 80:80 -P localhost:5000/httpd
```
起動確認をして終了
SendGrid+PHPでメールを配信したい


[SendGrid]はメール配信のウェブサービス。自前でメールサーバを運用するのと比べて、SendGridはスパムメールになりにくいメール配信ができるのが特徴。SMTPだけでなくRESTful APIなどでも送信が可能。無料アカウントでも1日200通まで送信できる。

ここではPHPを使ってSendGridからメールを配信する方法を解説する。PHPからは次のような数行のコードでメール送信ができる。

```php
$sendgrid = new SendGrid('username', 'password');
$email    = new SendGrid\Email();
$email->addTo('foo@bar.com')->
       setFrom('me@bar.com')->
       setSubject('Subject goes here')->
       setText('Hello World!')->
       setHtml('<strong>Hello World!</strong>');
$sendgrid->send($email);
```


## インストール

[SendGridのPHPクライアント]をComposerでインストールする。

```json:composer.json
{  
  "require": {
    "sendgrid/sendgrid": "2.1.1"
  }
}
```

```console
$ composer install
```

## メールを送信する


```php:sendgrid-test.php
$sendgrid = new SendGrid($username, $password);
$email    = new SendGrid\Email();
$email->addTo('suin@suin.asia')->
    setFrom('admin@suin.asia')->
    setFromName('サイト管理者')->
    setSubject('パスワード再設定')->
    addCategory('Password reset')->
    setText("パスワード再設定はこちらのリンクをクリックしてください。\nhttp://suin.asia/reset_password?token=123456")->
    setHtml('パスワード再設定はこちらの<a href="http://suin.asia/reset_password?token=123456">リンク<a/>をクリックしてください。');
$result = $sendgrid->send($email);
var_dump($result);
```

`$username`と`$password`はSendGridに登録したときのものを使う。

このコードを実行すると、こんな形でメールが届く。

![Screenshot_2014_09_29_14_36.png](https://qiita-image-store.s3.amazonaws.com/0/889/92092c92-46f5-e154-f3f4-8ebb6df5a86e.png "Screenshot_2014_09_29_14_36.png")



## メール送信のエラーハンドリング

`$result`の`message`が`success`であれば送信成功。`error`であれば送信失敗。この仕様を使ってエラーハンドリングが可能。エラーの時は、`errors`というキーにエラーの原因が配列で入っている。

### 成功時

```
object(stdClass)#6 (1) { ["message"]=> string(7) "success" }
```

### 失敗時

```
object(stdClass)#84 (2) { ["message"]=> string(5) "error" ["errors"]=> array(1) { [0]=> string(23) "Bad username / password" } }
```

## 本文にフッターを付けたい

SendGridにはAppsというモジュールみたいな仕組みがあり、これを使うとメールにフッターを追加したり、Gravatarを表示ししたり、開封したかをトラッキングできたりできる。

SendGridにはメールに自動的にフッターをつけるには、Footerアプリを有効にする。SendGrid管理画面の[Apps](https://sendgrid.com/app)に行って、「Show Disabled Apps」の中から「Footer」を選んで「Enable」する。

![We_Make_Email_Delivery_Easy___SendGrid.png](https://qiita-image-store.s3.amazonaws.com/0/889/8b4aeace-d22e-4110-ccaa-899296b7f5b3.png "We_Make_Email_Delivery_Easy___SendGrid.png")

次に、「Show Enablied Apps」に行き、「Footer」の「Setting」でフッターに表示したい文言を書いて保存する。

そうしたら、先ほどの`sendgrid-test.php`を実行すると、次のメールのように自動的にフッターが入るようになる。

![Screenshot_2014_09_29_14_47.png](https://qiita-image-store.s3.amazonaws.com/0/889/ac4efb65-fbbb-efa7-8b37-74db640cd79a.png "Screenshot_2014_09_29_14_47.png")


## 開封状況をトラックしたい

これもAppsで「Open Tracking」アプリを有効にする。


## ダッシュボード

[ダッシュボード](https://sendgrid.com/statistics)を開くと、送信数や開封率などメールの送信状況をひと目で確認できる。

![Stats_Dashboard.png](https://qiita-image-store.s3.amazonaws.com/0/889/5bbf9a76-4e57-53f0-72ba-84d53aaa0bb2.png "Stats_Dashboard.png")

PHP側でカテゴリを設定しておくと、カテゴリごとの送信状況の統計も取ることができる。

```php
    addCategory('Password reset')->
```





[SendGrid]: https://sendgrid.com/
[SendGridのPHPクライアント]: https://github.com/sendgrid/sendgrid-php
PHP 月末月初の計算

メモ


```php
<?php
        public function startEnd($y=null,$m=null) {
            $y=$y?:date("Y");
            $m=$m?:date("m");
            return array(
                date("Y/m/d",mktime(0,0,0,$m+0,1,$y)),
                date("Y/m/d",mktime(0,0,0,$m+1,0,$y))
            );

        }
```
WiMAXの工事情報をメールで通知するスクリプト

WiMAX(UQ)はしばしば工事等で利用できないことがあるわけですが、当日に現地で通信できないと工事情報がホームページに掲載されていても確認のしようがありません。

また、ホームページの工事情報一覧はたくさんの地域が掲載されているので、自分の地域をその中から検索するのも一苦労です。

そこで、事前に工事情報を通知できないかということで、以下のようなスクリプトを作ってレンタルサーバのcronで動作させています。

ご利用の際は地名とメールアドレスの変更が必要です。

```perl:check_wimax.pl
#!/usr/bin/perl -w

my @data = `wget -O - http://www.uqwimax.jp/service/information/kouji/data_maintenance.json`;
my $send = 0;

$ENV{'LC_CTYPE'} = "ja_JP.UTF-8";

my @msg = ();

while(my $line = shift @data){
    if($line =~ /(新木場)/){
       $send = $1;
       while($line =~ s/<\w+.*?>// || $line =~ s/<\/\w+>//){
       }
       push(@msg, $line);
    }
}

if($send){
    open(MAIL, '|mail -s "WiMAX stops" abc@def.xyz.ne.jp');
    print MAIL "WiMAX stop at ", $send, "\n";
    print MAIL "see detail at : \n\t\thttp://www.uqwimax.jp/service/information/kouji/  \n";
    print MAIL "-----\n";
    foreach my $msg (@msg){
        print MAIL $msg, "\n";
    }
    print MAIL ".";
    close(MAIL);
}
```
【TravisCI高速化】make時にオプションを付けたら超絶高速になった

# はじめに
* 以前、以下のような高速化をはかり改善した
 * [【TravisCI高速化】bundle installを毎回走らせないようにキャッシュする](http://qiita.com/oh_rusty_nail/items/374c30ecc5aa9997d1f3)
 * [【TravisCI高速化】並列実行で実行時間を短縮する](http://qiita.com/oh_rusty_nail/items/d345e9612a9dc12d0382)
 * [【TravisCI高速化】aptのキャッシュを利用する](http://qiita.com/oh_rusty_nail/items/ffffeef8fb92b458a2b6)

# 背景
* TravisCIで以下のようなことを実行してみた
 * openCVのインストール
 * railsアプリの起動
 * 単体/受け入れテスト
* ところが、openCVのインストールを当然ながら毎回するので、30分程度環境構築にかかってしまう
* それでは使い物にならないため、改善できるところがないか考えてみた

# 改善
* makeやmake installのオプションで高速化できるという記事があった
 * http://d.hatena.ne.jp/rx7/20070927/p1
* やってみると超絶高速化することができた

### オプションの指定
* make,make installに付けるオプションは-j2,-j4, -j8のようにすればジョブ数の指定ができる
* 目安として```$ make -j ${コア数 x 2}```と上の記事で書いてあったのでコア数を確認

### Travisのインスタンスのコア数
* 以下の記事によればTravisで使用するインスタンスのコア数は2ということ
 * http://nanapi.co.jp/blog/2014/04/16/travis-ci-vs-circleci/

### TravisCIに適したオプション
* 他のサービスの.travis.ymlをいくつか覗いてみると、-j4や-j8と書かれていたものがちょこちょこ見られた
* -j(ジョブ数制限なし＝無制限)は**システムに影響を与える可能性がある**と書いてあったが、-j4, -j8, -jオプション付きでそれぞれ試してみた
 * 結果、-j4, -j8, -jに大差はなかった
* 結論として、TravisCIではmakeのオプションは-j4,-j8を使うのがアンパイなのかもしれない
 * というかオプションなしでは遅すぎてCIどころじゃない

### 効果確認
* openCVのインストールを含めた環境構築に30分程度かかっていたものが8〜10分でできるようになった

```
curl -sL https://github.com/Itseez/opencv/archive/2.4.5.zip > opencv.zip
unzip opencv.zip > $HOME/opencv.log
cd opencv-2.4.5
mkdir build
cd build/
cmake -D BUILD_EXAMPLES=ON -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D WITH_1394=OFF -D ENABLE_OPENMP=ON ../ 
make -j4  #<= オプション追加
sudo make -j4 install  #<= オプション追加
sudo ldconfig
```

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
Apache 2.2 の Digest 認証で verification of user id '<null>' not configured がエラーログに記録される


Digest 認証が通らないので、エラーログを見てみると、以下のメッセージが。

```
[Mon Sep 29 11:18:24 2014] [error] [client xxx.xxx.xxx.xxx] access to /path/ failed, reason: verification of user id '<null>' not configured
```

auth_digest_module が有効になっていない場合にこのエラーメッセージが出るらしい。`httpd -M`で確認するとたしかに auth_digest_module が無かった。

```
$ httpd -M | grep auth_
auth_basic_module (static)
```

ちなみに、Digest 認証が使えるサーバでは以下のようになる。

```
$ httpd -M | grep auth_
 auth_basic_module (shared)
 auth_digest_module (shared)
```

### 参考

http://helpful.knobs-dials.com/index.php/Apache_config_and_.htaccess_-_security
【備忘録】コンパイル時の「android library projects cannot be launched」エラー

##android library projects cannot be launched

Eclipseの環境がおかしくなり、
Google Mapを利用したパッケージでコンパイル時に上記のメッセージが出て、うまくコンパイルできなくなったので、そのためのメモ。

「android library projects cannot be launched」の警告メッセージが出たので、Googleで検索したら出てきたのでメモ

###原因 
project.properties ファイルで
android.library=true になっている。

###解決方法
android.library=false にする
ArchLinuxでもlogwatchを使う方法

# logwatch設定

* 一般ユーザでもlogwatchが使えるようにTmpDirは/tmpを指定する。

```diff:/etc/logwatch/conf/logwatch.conf
+ TmpDir = /tmp
  Output = mail
  Format = text
  MailTo = my@mailaddr.co.jp
  MailFrom = Logwatch
  Range = Yesterday
  Detail = High
  Service = All
  mailer = "/usr/sbin/sendmail -t"
```

# fcronで実行するスクリプト作成

## ArchLinux用

* journalctlでログを出力し、logwatchで解析
* mkdir -p ~/cron/logs/

```bash:$HOME/cron/logwatch.sh
#!/bin/sh
set -eu

YESTERDAY=`date -I --date=yesterday`
LANG=C journalctl --since="$YESTERDAY" --until="$YESTERDAY 23:59:59" \
  > ~/cron/logs/messages.$YESTERDAY

/usr/sbin/logwatch --logdir ~/cron/logs/ \
  --logfile messages \
  --range Yesterday

gzip -f ~/cron/logs/messages.$YESTERDAY
```

## CentOS7用

```bash:$HOME/cron/logwatch.sh
#!/bin/sh
set -eu

/usr/sbin/logwatch --range Yesterday
```

# fcronに登録

```bash:
chmod +x ~/cron/logwatch.sh
fcrontab -e
# 0 9 * * * $HOME/cron/logwatch.sh
```
【Facebook】ファンゲート禁止

#Facebook の「ファンゲート機能*」が禁止になった件について
※Facebookページで「いいね！」を押すと別ページに遷移する機能
 
 
##問題
PHPエラーのため、ファンゲートが動作しない。
 
 

##原因と対処方法
**【原因】**
**●8/7 に Facebook のプラットフォームポリシー変更**
ファンゲートが禁止になった！
※「いいね！してね」という注意喚起もアウト。
 
**●5月ぐらいにあった API のバージョンアップの影響**
大幅に制限され、現在「アプリから取得できる情報」は以下の3つのみ。
（1）「公開プロフィール情報（public_profile）」
（2）「メールアドレス（email）」
（3）「友達リスト（user_friends）」←対象のアプリを使用している友達のみ
 
※以前はこの中に「いいねリスト（user_likes）」も含まれていた。
※「アプリから取得できる情報」以外の情報をアプリから取得したい場合は
Facebook に申請が必要。
その審査に通れば、申請した権限が使用可能になるようです。
 
●8/8 に公式ブログでも発表あり
要約すると、『11/5 からは常に「いいね後」のページを表示するよ』
（参考）
・Graph API v2.1 and updated iOS and Android SDKs
https://developers.facebook.com/blog/post/2014/08/07/Graph-API-v2.1/
> ページタブアプリの signed_request オブジェクトの page プロパティには
> 「liked」領域は返されません。 11/5以降は、いいねを押したかどうかに関わらず
> 「liked」プロパティは常に「true」を返します。
 
↓↓↓
ファンゲートが使えないように、技術的にも潰された状態。
 
 
**【対処方法】**
Facebookページから、ファンゲート機能を削除。
直接、「いいね後」のページを表示させる形式に変更。
 
 
 
##■既存ページの対応について
ファンゲートの新規作成は既にできなくなりましたが、
設定済みのページは
11/5 までは今まで通り表示されます。
 
それ以降は、
いいね！を押したかどうかに関わらず
常に「いいね後」のページが表示されるようになります。
 
※『「いいね！」をクリックすることの見返りに、何かを与える』
という流れそのものが禁止になったので、
ページ内の文言をざっと見直してみてください。
（罰則があるわけではないですが、念のため…）
 
 
 
###■参照サイト
**●ファンゲート終了**
・Facebookページの「ファンゲート」 終 了 のお知らせ（2014/11/5まで） | Sunday In The Park
http://snowadays.jp/2014/08/3001
・[M] プラットフォームポリシー変更! Facebookページのファンゲート機能が禁止へ | mbdb (モバデビ)
http://mbdb.jp/it-news/facebook-change-platform-policy.html
 
**●APIについて**
・Facebookログイン Version2.0（アプリのパーミッション仕様変更） | Sunday In The Park
http://snowadays.jp/2014/05/2762
・Facebookの全体公開投稿は2015年に検索できなくなるかも - ku:neko
ismhttp://kuneko.hatenadiary.com/entry/facebook_search_public_post
 
 
**●ファンゲート禁止の影響で関連サービスも終了**
・「いいね！」インセンティブ禁止で影響　「Crocosマーケティング」Facebook関連サービス終了 - ITmedia ニュースhttp://www.itmedia.co.jp/news/articles/1408/22/news114.html
【Facebook】広告のサイズ

（2014.11.05.追記）

##広告のバナーサイズが大幅に変更。##

1200 × 450
 1200 × 444 で作成。
※設定した時は問題なかったのですが、
　先程アクセスした際、「サイズが違う」とエラーが出ていました。
　（2014.11.05.追記）

>【公式で紹介されているサイズ】
最小サイズ：254 × 94、推奨サイズ：1200 × 444
タイムライン、スマホ用、右枠内共通。
（各表示エリアごとにFacebook側で最適化）

※公式情報でも別の資料ではサイズが違うので、
(1200x628、1200×624、1200×627だったり…)
色んな情報からサイズを決定。
・Facebookのクリエイティブ仕様書（2014年6月3日時点）
http://fbrep.com/SMB/Facebook_Creative_Specs_One-Sheeter.pdf
>［画像］
・旧 表示サイズ： 110 × 80
・新 推奨サイズ： 1200 × 900　（4：3）
 
>［動画］
・推奨サイズ： 1200 × 675　（16：9）
・容量： 1GBまで
・動画再生時間： 20分まで
 
>［テキスト］
・90文字まで
 
>※推奨サイズを下回る場合
古い/小さい形式でレンダリングされます。（100 × 100 程度）


##登録したバナーが承認されない。##
> あなたの広告は、画像内で過剰なテキストが使用され、Facebook広告ガイドラインに違反するため、承認されませんでした。
> ニュースフィードで表示する広告には、20%を超えるテキストを含めることはできません。
> ただし、非承認になる前の広告で得られたインプレッション数やクリック数に対しては請求されます。
> 広告の何%がテキストかを調べるには、ヘルプセンターのこちらを参照するか、または広告の画像をアップロードしてください。
> 広告がFacebookのポリシーに沿ったものであるとお考えの場合、またはこの件に関するサポートが必要な場合はご連絡ください。


#20％ルール
広告に含まれるテキストの量が20％を超えていると、広告として承認されない。

**・Facebook グリッドツール**
https://www.facebook.com/ads/tools/text_overlay
>アップロードした画像に 5×5のグリッドが表示され、
テキストの量が20％超えていないかをチェックできるツール

 
**【参照】**
・広告の画像にはどのくらいのテキストを含めることができますか。 | Facebookヘルプセンター
https://www.facebook.com/help/468870969814641/
・画像 | Facebookヘルプセンター
https://www.facebook.com/help/250509391644213
gdbでjsonパースする


gdbではpythonが使えるので、単にpython側から対象の文字列をロードしてパースすればよい



```
(gdb) python import json
(gdb) python print json.loads(gdb.selected_frame().read_var("s").string())
```

read_var(変数名) で gdb.Value というオブジェクトがとれる。このオブジェクトをpythonのstringに変換してjson.loadsする。
JavaFXのLineChartでクリックしたところのx座標を取ってくる


## 環境
- Java SE 8u20

## コード一部抜粋
~~~
...
TakeXYAction action = new TakeXYAction(chart);
chart.lookup(".chart-plot-background").setOnMouseClicked(action);
...
~~~

~~~TakeXYAction.java
final class TakeXYAction implements EventHandler<MouseEvent> {
	private final LineChart<Number, Number> chart;
	public TakeXYAction(LineChart<Number, Number> _chart) {
		this.chart = _chart;
	}

	@Override
	public void handle(MouseEvent event) {
		Axis<Number> xAxis  = this.chart.getXAxis();
		double       x      = xAxis.getValueForDisplay(event.getX()).doubleValue();
...
	}
}
~~~


## 要点

- Chartに対して`setOnMouseClicked(action)`をしない
- lookup(".chart-plot-bakground")でとってこれるNode(Region)に対して`setOnMouseClicked(action)`をする
- event.getX()をAxis#getValueForDisplayに突っ込んでとる
Autolayoutで画面中央にビューを配置する方法

## 概要
画面中央にピッカービュー、その説明文をその上に表示したい時などに便利なレシピです。

## こんな状態にしたい
縦向きのときに中心になっている
![kansei_tate.png](https://qiita-image-store.s3.amazonaws.com/0/42197/b9ab7299-378d-4a43-d636-c99acc2b30e9.png)

横向きのときも中心となっている
![kansei_yoko.png](https://qiita-image-store.s3.amazonaws.com/0/42197/90ae0fa1-b3d3-3aa0-b982-d6505d1f14c7.png)

## レシピ
Use Auto layout にチェック
![01.png](https://qiita-image-store.s3.amazonaws.com/0/42197/c12c4658-dec3-ee55-078d-b5d5b50c65bb.png)

利用するラベル
![02.png](https://qiita-image-store.s3.amazonaws.com/0/42197/7bb347ce-081e-9f64-351a-2fd606516bde.png)
![03.png](https://qiita-image-store.s3.amazonaws.com/0/42197/4e020303-7826-a73b-5749-b7421617c388.png)

かきくけこラベルは縦は固定、横は可変にしたいので、
・終端までの余白10pt
・ラベル自体の縦135pt
としてAddします
![04.png](https://qiita-image-store.s3.amazonaws.com/0/42197/a0e07622-6073-e2aa-ec47-31304fb3cae9.png)

ここではVertical Center in Containerを選択することで
画面上下における中央に配置させることができます
![05.png](https://qiita-image-store.s3.amazonaws.com/0/42197/10a8fc4d-8c1e-28ba-d8d6-b3d4e493629c.png)

以下を設定
・終端までの余白10pt
・かきくけこラベルまでの距離10pt
・ラベル自体の縦20pt
![06.png](https://qiita-image-store.s3.amazonaws.com/0/42197/587f36fd-9ec8-a2b6-1664-a9343d42bdab.png)

Warning対応
Actualを正としたいので、Update Constraintsを選択
![07.png](https://qiita-image-store.s3.amazonaws.com/0/42197/f7f3a598-5e7c-ae08-8f8d-6547989601d1.png)
![08.png](https://qiita-image-store.s3.amazonaws.com/0/42197/3ac131c9-10e1-bde5-a4ff-06d54dd56c22.png)
ActiveAdminを入れたら一緒にinherited resourcesも入ってscaffoldテンプレートが上書きされてしまう


参考
https://github.com/josevalim/inherited_resources/issues/195

こんなんなった

```rb
class UsersController < InheritedResources::Base
end
```

`def index`どこー?
`InheritedResources`ってなにー？

てなったけど

application.rb

```rb
config.app_generators.scaffold_controller = :scaffold_controller
```

を記述すると普通になった
RPG風に文字を1文字ずつ表示 cocos2dx ver3.2



http://anz-note.tumblr.com/post/78738162338/cocos2d-x-v3
3.0 rc0からできなくなったとあるのでなんとかしてできないかと
いろいろ試したところ、LabelにはgetLetterという便利なメソッドが追加されていた。
ttfでもRPG風文字ができたのでそのメモ。
cocos2dxのテストコードから拝借して検証開始。


```
    auto label1 = Label::createWithTTF("あいうえおかきくけこ", "fonts/ipag.ttf", 24); // createWithBMFont("fonts/bitmapFontTest2.fnt", "Test");
    label1->setTextColor(Color4B::BLACK);                            
    label1->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
    popup->addChild(label1);
              
    {
        auto AChar = label1->getLetter(0);
        auto rotate = RotateBy::create(2, 360);
        auto rot_4ever = RepeatForever::create(rotate);
        AChar->runAction(rot_4ever);
    }

    {
        auto AChar = label1->getLetter(2);
        auto fade_out = FadeOut::create(1);
        auto fade_in = FadeIn::create(1);
        auto seq = Sequence::create(fade_out, fade_in, nullptr);
        auto fade_4ever = RepeatForever::create(seq);
        AChar->runAction(fade_4ever);
    }

    {
        auto AChar = label1->getLetter(1);
        AChar->setVisible(false);
    }
```


ここで、大事だったこととしてはsetColorだとgetLetterで取得した文字の色がデフォルトの白固定になった点。setTextColorがただしいのかな。でもsetColorでもgetLetterで動かさなければ色の変更はできたので何が正しいのかよくわからない。。
うごけばいいということで。
あと、{}しているのは変数名を同じにするためにスコープ与えているだけです。手抜きです。
一文字一文字にアニメーションがつけられて便利そう。



```
    auto label1 = Label::createWithTTF(FileUtils::getInstance()->getStringFromFile(FileUtils::getInstance()->fullPathForFilename("data/label.txt")), "fonts/ipag.ttf", 24);
    label1->setDimensions(520, 300);
    label1->setTextColor(Color4B::BLACK);                                                                                             
    label1->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));                                                             
    popup->addChild(label1);                                                                                                          
                                                                              
                                                                                                                                      
    for(int i = 0; i < label1->getStringLength(); i++) {                                                                              
        auto AChar = label1->getLetter(i);                                                                                            
        if(nullptr != AChar) {                                                                                                        
            AChar->setVisible(false);                                                                                                 
            AChar->runAction(                                                                                                         
                    Sequence::createWithTwoActions(
                    DelayTime::create(0.2f*i),
                    Show::create()
                    ));
        }
    }
```


ACharでnullptrちぇっくしているのは、改行コードの文字位置だとnullptrかえしてくるから。
やりたかったことはできた気がする。


結論、cocos2dxで困ったらtestsの中身をgrepするとだいたいやりたいことのサンプルコードはある。
rails_adminを使っていて、undefined method `per' for #<ActiveRecord::...>とエラーが出たら

kaminariとwill_paginateが競合している可能性がある。

config/initializers下にkaminari.rbを作成して

```
Kaminari.configure do |config|
config.page_method_name = :per_page_kaminari
end
```

以上のコードを追加して、アプリを起動しなおせばよい

参照元
https://github.com/sferik/rails_admin/wiki/Troubleshoot
Ubuntu Server 14.04 LTS に Haskell Platform 2014.2.0.0 をインストールする


# 概要
* UbuntuにHaskell Platformの最新版(2014.9.29現在)をインストール
* Amazonのami(ami-0185ac00)を利用したがそれ以外の環境でも可能
* Generic Linux Binariesとしてビルドされたものを使用
* /usr/local/haskell以下にインストールされる

# ポイント
* gccとlibgmpが無いと動かない
* cabal-installはzlib.h (zlib1g-dev)が無いと動かない
* **libgmp.so.10からlibgmp.soへシンボリックリンクを張っておく**

# 手順

## Haskell Platform のインストール
https://www.haskell.org/platform/linux.html を見ながら行う。

```
ubuntu$ sudo su -
root# cd /
root# wget https://www.haskell.org/platform/download/2014.2.0.0/haskell-platform-2014.2.0.0-unknown-linux-x86_64.tar.gz
root# tar xvf haskell-platform-2014.2.0.0-unknown-linux-x86_64.tar.gz
root# rm haskell-platform-2014.2.0.0-unknown-linux-x86_64.tar.gz
root# /usr/local/haskell/ghc-7.8.3-x86_64/bin/activate-hs
root# apt-get install gcc
root# apt-get install libgmp10
root# apt-get install zlib1g-dev
root# ln -s /usr/lib/x86_64-linux-gnu/libgmp.so.10 /usr/lib/x86_64-linux-gnu/libgmp.so
root# exit
ubuntu$ ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> 

```