OmniAICreator/Qiita-1.07M huggingface dataset:
ProcessingのsketchをSublime Textでビルドする方法

マニュアルに載っているんですが、自分なりにまとめておきたかったので。
マニュアルはこちら→[https://github.com/b-g/processing-sublime](https://github.com/b-g/processing-sublime)
  
(一応掲載...
Processingはこちらから→[http://processing.org/](http://processing.org/)
Sublime Textはこちらから→[http://www.sublimetext.com/](http://www.sublimetext.com/)
各自ダウンロードお願いします）　　
  
まず、なぜProcessingにはIDEがついているのに、わざわざSublime Textで書こうとするかというと、
- 日本語入力に対応していない
- 補完がない
の2点があるからです。
そこで、恋に落ちるエディタであるSublime Textを使って快適にコーディングしようというわけです。  
  
processingとSublime Textをインストールしてある状況から始めます。
（Sublime Textのバージョンは特に指定ありません）

## Sublime Package Controlを使えるようにする ##
Sublime Textで``Ctrl(Cmd)+` ``をすることでコンソール画面を出します。
そこに、[ここ](https://sublime.wbond.net/installation)からそれぞれバージョンのコードをコピーし、コンソールに貼り付け実行します。
終わったら再起動しましょう。  
  
## "Processing"パッケージをインストールする ##
`Ctrl(cmd)+Shift+p`を押してコマンドパレットを開きます。
検索エリアに"install"と打つと、"Package Control:Install Package"というのが出てくるので、それをクリック。
しばらく待つとまたウインドウが出てくるので、そこで"processing"と打ちます。すると、"Processing"というパッケージが出てくるので、それをクリックし、インストールします。  
  
Sublime側の設定はこれで終わりです。  
  
## Processing側の設定 ##
### windowsの場合 ###
"コンピュータ→システムのプロパティ→システム環境設定"から詳細設定タブの環境変数に、Processingが入っている「フォルダ」までのパスを追加します。
### Mac OS Xの場合 ###
Processingの"Tools→Install Processing-java"をクリック。
### Linuxの場合 ###
これは試してないのでマニュアルに書いてあることを書きますが、
windowsのときと同様で、Processingのあるフォルダのパスを追加します。
（例） `export PATH=$PATH:/opt/processing/processing-2.0b4`
そして、processing-javaのエイリアスを作ります。
（例）`sudo ln -s /opt/processing/processing-java /bin/processing-java`  
  
これで設定は完了です。
Sublime Textで.pdeファイルを作り、実行するときは`Ctrl(cmd)+b`を押してください。きっと実行されるはずです。  
  
これでProcessingでの開発がはかどりますね！
image filter template w/ swift

```swift
//
//  TopViewController.swift
//
//  Created by Yusuke Sugomori on 9/9/14.
//  Copyright (c) 2014 Yusuke Sugomori. All rights reserved.
//

import UIKit

class TopViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        
        let screenSize: CGRect = UIScreen.mainScreen().bounds
        
        let screenWidth = screenSize.width
        let screenHeight = screenSize.height
        
        let image = UIImage(named: "test.jpg")
        
        // Core Image context
        let ciContext = CIContext(options: nil)
        
        // CIImage, think of a CIImage as image data for processing, nothing is displayed or can be displayed at this point
        let coreImage = CIImage(image: image)
        
        // pick the filter
        let filter = CIFilter(name: "CIPhotoEffectTransfer")
        
        // pass image as input
        filter.setValue(coreImage, forKey: kCIInputImageKey)
        
        // retrieve the processed image
        let filteredImageData = filter.valueForKey(kCIOutputImageKey) as CIImage
        
        // returns a Quartz image from the Core Image context
        let filteredImageRef = ciContext.createCGImage(filteredImageData, fromRect: filteredImageData.extent())
        
        // final UIImage ready to be displayed
        let filteredImage = UIImage(CGImage: filteredImageRef)
        
        
        let imageView = UIImageView(image: filteredImage)
        
        imageView.frame = CGRectMake(0, 0, screenWidth, screenHeight)
        imageView.contentMode = UIViewContentMode.ScaleAspectFit
        
        self.view.addSubview(imageView)

    }

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


}
```
iPhoneアプリを再申請するときには"Build"の値を上げること！


アプリを申請したあとで変更したい箇所ができたため自分でリジェクト。
ごく簡単な修正を施して、アプリを申請用にArcive。
Validateも通ったし、Distributeもつつがなく完了し、再申請。

何も問題ないと思われたけど、ステータスが"無効なバイナリ"となってしまった。
なぜだ…。

## メールが送られてきた

```
Your app [アプリ名] has been reviewed,
but we are unable to post this version. 
```
とな。

## しかるべき対応
XcodeのTarget設定画面で、
`General` > `Identity` > `Build`の値を上げないといけないらしい。

![スクリーンショット 2014-09-09 20.27.11.png](https://qiita-image-store.s3.amazonaws.com/0/39565/060703ef-7a1f-e7e1-5596-5f36646b06c9.png "スクリーンショット 2014-09-09 20.27.11.png")

`Version`はAppStoreで表示されるバージョン番号、`Build`はアプリの内部的なバージョン番号。これでアップデートの確認とかをするらしい。
再申請時に、間違って前と同じアプリを上げてないかチェックしてるのかも？

ちなみに`Version`と`Build`のフォーマットは揃えなくても大丈夫みたい。
mac port で mysql5.6


mysql5.6をインストール

```
$ sudo port install mysql56
```

mysql に mysql56を割り当てる。

```
$ sudo port select --set mysql mysql56
```
56-serverをインストール

```
$ sudo port install mysql56-server
```

初期化

```
$ sudo -u _mysql /opt/local/lib/mysql56/bin/mysql_install_db
```

セキュア設定

```
$ /opt/local/lib/mysql56/bin/mysql_secure_installation
```
Java 8のStream APIの性能まとめ

#はじめに

Java 8のStream APIの性能について簡潔にまとめた資料がないので、自前で2種類のベンチマークを作成しました。

|No.|ベンチマークの内容                   |処理の粒度|Stream不使用|Streamシリアル|Streamパラレル|
|--:|:------------------------------------|:---------|:-----------|:-------------|:-------------|
|  1|1～nの総和($\sum_{i=1}^n i$)を求める |小        |○          |○(△)        |×            |
|  2|レーベンシュタイン距離を求める       |大        |×          |×            |○            |

No.1は、IntStream.range(0, n).sum()などを使った小粒度の処理で、
No.2は、大量の単語についてレーベンシュタイン距離を計算する大粒度の処理です。

それぞれのベンチマークについて、Streamを使わない処理、Streamを利用したシリアル処理、Streamを利用したパラレル処理の3種類で速度性能を採取しました。

```java:Streamのシリアル処理の例
Collection.stream().中間操作()...終端操作();
```

```java:Streamのパラレル処理の例
Collection.parallelStream().中間操作()...終端操作();
```

結果、速度性能が良かったものの順に「○→△→×」を上表に記載しました。

# 速度性能結果の考察

##粒度が小さい処理の場合

中間操作～終端操作の一連の処理のコストが小さい場合は、JITによる最適化が効くまでの間は「Streamを使わない処理」が最も速度性能が優れています。

しかし、サーバなど長期運用ではJITによる最適化により「Streamを利用したのシリアル処理」の速度性能は「Streamを使わない処理」と同程度になります。

なお、「Streamを利用したパラレル処理」の場合、パラレル制御のオーバーヘッドが大半を占めるため、JITによって最適化されても速度性能が優れることは望めません。

##粒度が大きい処理の場合

中間操作～終端操作の一連の処理のコストが大きい場合は、「Streamを使用したパラレル処理」を積極的に検討してよい。

ただし、念のためにシリアル処理とパラレル処理の性能比較はしておいた方がよい。

##Streamを利用したパラレル処理を行わない方がよい処理

次のようなケースはパラレル化しない方がよい。

1. ラムダ式から外部変数にアクセスするもの
2. サイズが未定のもの(Stream#iterateで生成した場合など)
3. 順番が必要なもの

##for文の単純なIntStream.forEach()への置換

```java:for文の使用
for(int i=0; i<100; i++) {
    小粒度の処理
}
```

```java:Stream.forEach()の使用
IntStream
    .range(0, 100)
    .forEach(小粒度の処理)
```

後者のIntStream.forEach()にはメリットがなく、多用するとオブジェクトを多く生成するため、ガーベジコレクションが頻発しやすくなります。

また、可読性と性能の両方の観点からしても、前者のfor文の方がよいのではないでしょうか。
littleBitsで使用出来る6P形充電池

littleBitsの電源として、
東芝「充電式IMPULSE」充電池が使用出来たので、
共有します。

[東芝「充電式IMPULSE」ニッケル水素電池6P形](http://www.toshiba.co.jp/living/webcata/lamp/tnh_a.htm)

| 形名 | 6TNH22A |
|:-----------|------------:|
| 公称電圧（V） | 8.4 |
| 定格容量(min.) | 200mAh |
| 外形寸法（mm） | 幅27.0×奥行16.3×高さ48.8 |
| 本体質量 | 約40g |



ちなみに、
当初、[coin battery](http://jp.littlebits.com/bits/coin-battery/)を輸入して試してみたのですが、
サイトの説明にあるように、駆動するものやsynth kitだと、
すぐに消耗してしまい、実用的ではありません。
CSS3でチェックボックスのアニメーションを作る

人のソースを見て勉強しようシリーズ第2弾
[CSS3でチェックボックスのアニメーションを作る - jsdo.it](http://jsdo.it/matsui_a/iwMql)

今回の参考ソースは[ここ](http://codepen.io/Sambego/pen/zDLxe)

![sample2.gif](https://qiita-image-store.s3.amazonaws.com/0/3140/e7ea4639-311f-4f56-4e39-b394fac1413a.gif)


今回の収穫は
CSS3のキーフレームアニメーションと、
チェックボックスのアニメーションの力技の部分。

#ざっくりとしたソースの解読

##上にスライドするアニメーション

```
section {
 animation-duration: 0.4s;  // アニメーション一回分の時間の長さ
 animation-name: slideUp;   //キーフレームアニメーション指定
 animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); //アニメーションのタイミング指定
}

@keyframes slideUp {
  0% {
    transform: translateY(6.25rem);
  }
  100% {
    transform: translateY(0);
  }
}
```

###アニメーションのタイミング指定
タイミングの指定は

* ease（初期値）
* linear（一定）
* ease-in（ゆっくり始まる）
* ease-out（ゆっくり終わる）
* ease-in-out（ゆっくり始まってゆっくり終わる）

とだいたいこのくらいかと思ってたけど
ベジェ曲線での指定もできるっぽい。 

参考サイト

* [animation-timing-function－CSS3リファレンス](http://www.htmq.com/css3/animation-timing-function.shtml)
* [timing-function - CSS | MDN](https://developer.mozilla.org/ja/docs/Web/CSS/timing-function)

数値指定どうすれば…と思ってググってみたら、
手頃に確認できるサイトがあった。

* [Ceaser - CSS Easing Animation Tool - Matthew Lein](http://matthewlein.com/ceaser/)
横移動、縦幅・横幅変更、不透明度の動きをプレビューできる

* [✿cubic-bezier](http://cubic-bezier.com/#.17,.67,.83,.67)
動きの比較ができる。

* [Easing Function 早見表](http://easings.net/ja#)
jQuery Easingと合わせて確認できる



##チェックボックスのアニメーション

ここのチェックボックスとチェックの入れ替えどうやってるんだろうと思ってたら、単にボックスの上と右の線を消して45度回転させてるだけだった。

```
/* チェックボックス */
.checkbox {
  position: relative;
  top: -0.375rem;
  margin: 0 1rem 0 0;
  cursor: pointer;
}
.checkbox:before,.checkbox:after {
  content: "";
  position: absolute;
     left: 0;
}
//チェック前
.checkbox:before {
  transition: all 0.3s ease-in-out;
  z-index: 1;
  width: 1rem;
  height: 1rem;
  border: 2px solid #f2f2f2;
}
//チェック後
.checkbox:checked:before {
  transform: rotate(-45deg);
  border-color: #009688;
  height: .5rem;　　　//↓このあたりで無理矢理チェック実装してる
  border-top-style: none;
  border-right-style: none;
}
.checkbox:after {
  top: -0.125rem;
  width: 1.1rem;
  height: 1.1rem;
  cursor: pointer;
  background: #fff; //デフォルトのチェックボックスを塗りつぶし
}
```


##他、デザイン周りとか...

角丸とシャドウの設定が0.125remとか細かいなーと思った。

```
 border-radius: 0.125rem;
 box-shadow: 0 0.125rem 0.3125rem 0 rgba(0, 0, 0, 0.25);
```

あとmargin/padding含め基本rem指定だったのが印象的。
DrawTextureしたものの上にParticleを表示させる


## 概要
Particle, Texture, その他をLayerに分けて、それぞれのLayerを表示するカメラを作る
OnGUIとGUI.DrawTextureを使わずに、OnRenderObjectとGraphics.DrawTextureを使うのがポイント

## やること

1. Particle, Texture, その他をLayerに分ける
- Textureを表示する際にはOnGUIではなく、OnRenderObjectで
- カメラをParticle, Texture, その他のLayerを映すようにする (depthは Particle > Texture > その他)

## ゲームオブジェクト

### Particle
Textureの上に表示させるParticle
LayerをParticleにしておく。

![SS 2014-09-09 19.41.06.png](https://qiita-image-store.s3.amazonaws.com/0/18573/12092de4-b9be-02f3-e324-0cac82b01276.png "SS 2014-09-09 19.41.06.png")



### Texture
Particleの下にあるTexture
LayerをTextureにしておく。



![SS 2014-09-09 19.41.49.png](https://qiita-image-store.s3.amazonaws.com/0/18573/dc07b17a-0331-71bc-fcf5-06987dcb3a82.png "SS 2014-09-09 19.41.49.png")


#### ポイント

Layerを設定するために、空のゲームオブジェクトを別に作り、そこにTexture生成用のスクリプトを貼り付ける。
OnGUIとGUI.DrawTextureを使わずに、OnRenderObjectとGraphics.DrawTextureを使う！


```cs
void OnRenderObject() {
	Graphics.DrawTexture(new Rect(x, y, width, height), yourTexture);
}
```

### その他
Layerはdefaultのままでよい。
![SS 2014-09-09 19.46.45.png](https://qiita-image-store.s3.amazonaws.com/0/18573/a7917cdd-d03a-f68e-d9e3-bede49d208b1.png "SS 2014-09-09 19.46.45.png")


## カメラ

### Particle用カメラ

| | |
|--------|--------|
| Clear Flags | Depth only |
|  Culling Mask      |    Particle    |
| Depth| 1 |
| AudioListener| チェックを外す |






![SS 2014-09-09 19.48.02.png](https://qiita-image-store.s3.amazonaws.com/0/18573/3a5472af-3c02-2b76-7549-f7364d191c88.png "SS 2014-09-09 19.48.02.png")


### Texture用カメラ
| | |
|--------|--------|
| Clear Flags | Depth only |
|  Culling Mask      |    Texture    |
| Depth| 0 |
| AudioListener| チェックを外す |



![SS 2014-09-09 19.52.05.png](https://qiita-image-store.s3.amazonaws.com/0/18573/c6b63dde-f1cf-f36f-c9ef-3c103c52c8aa.png "SS 2014-09-09 19.52.05.png")



### その他のカメラ

![SS 2014-09-09 19.53.53.png](https://qiita-image-store.s3.amazonaws.com/0/18573/959fe038-f652-ba54-02c6-6c6d56499e49.png "SS 2014-09-09 19.53.53.png")



| | |
|--------|--------|
| Clear Flags | Skybox |
|  Culling Mask      |    Particle、Texture以外    |
| Depth| -1 |
| AudioListener| チェックはつける |


## 参考
https://github.com/keijiro/unity-fxongui
【プログラミング48(/2 -1)手】Template Method


## ポイント
スーパークラスの実装を型とし、
サブクラスの実装をそれにあてはめるパターン。

* 実装のステップをスーパークラスで簡略化しまとめることができる
* サブクラス間での実装の重複を避ける


## サンプルコード
<script src="https://gist.github.com/onody/fda4e8f6a15be8eaa845.js"></script>
https://gist.github.com/onody/fda4e8f6a15be8eaa845

## 所感

* 自分がイメージしているクラス継承とは、まさにこの使い方だなと。  
  なんでこれがデザインパターンか？という印象。
* サブクラスの実装をそろえて綺麗にしておくための、親クラスという感じかな。
* あとは似たようなサブクラスの実装をリピートしないためにも、スーパークラスで共通化しておくといった意味合いもある。

## 参考にしたサイト
http://www.nulab.co.jp/designPatterns/designPatterns3/designPatterns3-1.html
http://www.itsenka.com/contents/development/designpattern/template_method.html
centOSにphp5.5を入れた時のメモ

1. remiのリポジトリを追加

```
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
```

2. remiのリポジトリを使ってPHP5.5をインストール(必要なモジュールも一緒に入れておきます)

```
yum install --enablerepo=remi --enablerepo=remi-php55 php php-devel php-mbstring php-mcrypt php-mysql php-phpunit-PHPUnit php-pecl-xdebug php-cli php-common php-gd php-pecl-apc php-pecl-memcache php-xml php-imap php-pear
```

3. バージョンを確認する

```
php -v

PHP 5.5.16 (cli) (built: Sep  3 2014 20:08:58) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

```

4. apacheの再起動

```
/etc/init.d/httpd restart
```
SPA（シングルページ・アプリケーション）なテキストエディタを書いてみた。

Markdown のリアルタイムプレビューをしてくれるアプリは色々あるんだけれど、たださっと書きたいだけなのに起動が重くてめんどくさかったり。

それじゃ、自分で作ってみようかなと思って1〜2日くらいガリガリっと書いたところでやる事できて絶賛放置プレイしてたのが去年の話。

それからここ2週間は C で aerospike の Lua クライントと書いてて、LDT(Large Data Types) 以外はほぼほぼ実装したんで README.md でも書くかと思ったついでに、去年放置してたやつを昨日と今日で実装してみた。


## Jot Down
![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/26567/cb7a7236-4dad-3d9e-39f2-791db2f10319.png)

http://mah0x211.github.io/jotdown/

数ヶ月くらい C と Lua ばかりやってたので HTML/JS/CSS の感覚を取り戻すためにもちょうど良いかもと思って SPA（シングルページ・アプリケーション）にしてみたけど、サーバ用意してなんだかんだって etc ってやるのも面倒だったので GitHub Pages 上でホストしてます。

機能はすごく単純で、左側に書いたものが右側でプレビューされるってただそれだけ。プレビューは Markdown 以外にもついでに HTML もできるようにしてみた。文書は自動的にローカルストレージ保存されて左側の Storage ってとこで一覧と削除が出来ます。

ガチで書いてる余裕はないので書いた文書の保存はローカルストレージに保存するだけなので＝**ブラウザが変わると見れません**。

途中からめんどくさくなってきてほとんどやっつけ仕事的になってきたけど、出来上がってみるとやっぱり自分のために作ったものだから便利に感じる！

**追記**

書き忘れてた。動作確認済みブラウザは OSX 上の Safari 7.0.6 と Chrome 37.0.2062.94 です。
GitLabのissueをコミットメッセージでクローズする

以下のURLからの引用です。

* [Linking issues from comments and automatically closing them – Feature request forum for GitLab](http://feedback.gitlab.com/forums/176466-general/suggestions/3692754-linking-issues-from-comments-and-automatically-clo)


> issue_closing_pattern: '([Cc]los(e([sd])?|ing)|[Ff]ix((e[sd])?|ing)) +((issue(s)? )?#\d+((,)? (and )?)?)+'

> You can do somthing like : 
fixes #8, #24, and #42 
closing #26, #42 and #99 
Fixing #42 and #24, #28 
fixing issue #43 and issues #42 
closed issues #83, #86 and #42


masterにマージしてプッシュした時にクローズされる模様。
npm install + github でエラー対応の記録


# エラーの始まり

json2cssでimageをescapeされるのが、いやだったのでforkしてunescapeして使おうと思ったのが始まり。

```
$ npm install https://github.com/rozary/json2css.git

npm ERR! not a package /var/.../github.com/rozary/json2css.git
npm ERR! Error: ENOENT, open '/var/.../github.com/rozary/json2css.git-unpack/package.json'
```

｢packageじゃないよ。｣、｢ENOENT?open?できないとか?｣
という2つのエラー表示が出てきた。

# 終わらないエラー

ググってみるも、packageの形式も間違ってなさそうだし、cacheとか消してみたりしたけれどわからず。
よくわからないので、プロトコロルをhttpとかsとかgitとかしてみても上手くいかず。
そもそも本家のjson2cssも、npm install試したらできないし。
tarballいけるぜっていうからtarballにしてみたけれどダメで。
このエラーいつ終わるのかと…。

# 突然の決着

```
npm install rozary/json2css.git#master
```

でやったら行けた。

# バージョン

```
npm 1.4.26
node v0.10.31
```

# 参考

http://stackoverflow.com/questions/8243527/use-git-dependencies-in-with-npm-and-node-on-heroku
piculetで管理するAWSセキュリティグループ

#Piculet

AWSのセキュリティグループの設定をRubyのDSLで管理できるCLIツール。

作成者サイト
http://so-wh.at/entry/20131105/p1

Github
https://github.com/winebarrel/piculet

##インストール

インストール

```bash
gem install piculet --no-ri --no-rdoc
```

確認

```bash
➜  piculet -v 
piculet 0.2.3

➜  piculet
Usage: piculet [options]
    -p, --profile PROFILE_NAME
    -k, --access-key ACCESS_KEY
    -s, --secret-key SECRET_KEY
    -r, --region REGION
    -a, --apply
    -f, --file FILE
    -n, --names SG_LIST
        --ec2s VPC_IDS
        --dry-run
    -e, --export
    -o, --output FILE
        --split
        --no-color
        --debug
```




security credentialsを記載

```
➜  vim ~/.aws/credentials
[default]
aws_access_key_id=AKIxxxxxxxxxxxxxxxx
aws_secret_access_key=xxxxxxxxxxxxxxxxxxxxx
```


##セキュリティグループを取得

```
piculet -e -o Groupfile -r ap-northeast-1
```

```
➜ cat Groupfile
ec2 "vpc-[vpc-id]" do
  security_group "default" do
    description "default VPC security group"

    ingress do
      permission :any do
        groups(
          "default"
        )
      end
    end

    egress do
      permission :any do
        ip_ranges(
          "0.0.0.0/0"
        )
      end
    end
  end
end

```

セキュリティグループが多い場合はsplitオプションを使用すると、
ファイルを分けてくれるため管理がし易い。

```
➜   piculet -e -o Groupfile -r ap-northeast-1 --split
Export SecurityGroup
  write `./vpc-xxxxxxx.group`
  write `./vpc-xxxxxxx.group`
  write `Groupfile`
```

##セキュリティグループの適用

他のVPCへの移行やセキュリティグループの編集を行う場合の手順


移行先のcredentials追加

```
➜  vim ~/.aws/credentials
[hoge]
aws_access_key_id=AKIxxxxxxxxxxxxxxxx
aws_secret_access_key=xxxxxxxxxxxxxxxxxxxxx
```

Groupfile編集

```
require 'vpc-[移行先もしくは編集先のVPC-ID].group'                                                                       
```

テスト

```
piculet -a -r ap-northeast-1  -p hoge --dry-run
```

適用

```
piculet -a -r ap-northeast-1  -p hoge
```


##etc

お手軽なセキュリティグループの管理と移行が可能になった！
CakePHP導入メモ


# CakePHP導入メモ
技術メモ
試験機：WindowsVista、XAMPP

## 導入：XAMPP
インストール後設定ファイルを修正。

php.ini
デフォルトタイムゾーンの設定

![01.png](https://qiita-image-store.s3.amazonaws.com/0/22018/b19d45ee-6a1a-9005-7903-3faa05edf09b.png)

## 導入：CakePHP
ドキュメントルートに解凍、cakephpにリネーム（任意）
1. Security.salt及びSecurity.cipherSeedの変更
(CakePHPをインストールしたディレクトリ)\app\Config\core.php

![02.png](https://qiita-image-store.s3.amazonaws.com/0/22018/871e3fb5-3f95-bf43-6074-521f9797b966.png)

デフォルト値以外の値を設定。末尾の一文字変更など…

2. データベースの連携。データベース指定

(CakePHPをインストールしたディレクトリ)\app\Config\database.php
既存のdatabase.php.defaultというファイルがあるため、それを同フォルダ内にコピーしdatabase.phpにし、修正する。
末尾に、defaultとtestという配列があり、test用は使わなければ削除可。
使用するデータベースについてはMySQLの他にSQLite、PostgreSQL、SQL Serverなど利用できます。使用するデータベース毎に使用する項目が一部異なります。詳しくはdatabase.phpファイルに記載されたコメント部分を読んでみて下さい。今回はMySQLを使用するため次のように変更。

![03.png](https://qiita-image-store.s3.amazonaws.com/0/22018/2ab15fab-3779-4a85-7a74-c35d89257969.png)

MySQLが動いているホスト名とデータベース名の他にCakePHPからデータベースにアクセスする時のユーザー名とパスワードを指定します。persistentは持続的接続を行うかどうかで今回はfalseにしました。

3. MySQL設定、指定データベース作成
設定したデータベースとユーザー、パスワードを作成。

```sql:

create database cake_db;
grant all on cake_db.* to 'cake_user'@'localhost' identified by 'cake_pass';

```

PHPからMySQLへはPDOを使って接続します。その為、php.iniファイルで「extension=php_pdo_mysql.dll」がコメントになっていないことを確認して下さい。(データベースなどの準備が出来ているのに「Database connection "Mysql" is missing, or could not be created.」のような表示されている場合はPDOの設定を確認されてみて下さい)。
http://localhost/cake/
にアクセスし正常に表示されていることを確認。


## 導入：CakePHPパス設定
システム環境変数のPathにPHPとCakeを追加

```bat:
C:\xampp\php
C:\xampp\htdocs\cakephp\lib\Cake\Console
```

## 導入：Linux対応メモ
1. mod_rewriteの設定

mod_rewriteが有効になっていない場合は次のようなメッセージが表示がされています。

```xml:
URL rewriting is not properly configured on your server. 1) Help me configure it 2) I don't / can't use URL rewriting
```

では設定を行います。Apache(今回は2.2系です)をWebサーバとして使用している場合にはhttp.confファイルを編集します。

まずhttp.confファイル内でLoadModule rewrite_module modules/mod_rewrite.soを検索してコメントアウトを外します。

2. .htaccessに関する設定
.htaccessファイルが使用できるように設定します。CakePHPを設定したディレクトリに対してAllowOverrideをAllに設定します。今回は下記のような設定をhttp.confファイルの最後に追加しました。

```xml:
<Directory "CakePHPをインストールしたディレクトリ">
    Options FollowSymLinks
    AllowOverride All
</Directory>
```

設定は以上で終了です。設定が終わりましたらApacheを再起動すると設定が有効となります。
GoogleAppEngineからCloudSQLにつながらなくなったのでメモ

GAEからDBはCloudStrageサイトを作ってたんですが、
一部CloudSQLを使い始めました。

だがある日、deployも何もしていないのに突然以下のエラーが。

```
(2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 38")
```

# 現象
- CloudSQLの接続がすべて失敗。
- APIConsoleからsqlたたくぶんにはかえってくる(mysqlは起きてる)
- CloudSQLをrestartしたが変化なし

# 原因
エラーの原因は多分これ
http://stackoverflow.com/questions/25139344/google-app-engine-and-cloud-sql-lost-connection-to-mysql-server-at-reading-ini

- CloudSQLは接続を許可するGAEのアプリを設定している
- Googleが何らかの理由でGAEアプリの場所を変更した結果、GAEアプリのIPアドレスがかわる
- その連携がうまく行かず、CloudSQLが許可してたはずのGAEアプリをblock

というところなんでしょうか。

# 対策
これが正しいのか分かりませんが、

- GoogleCloudConsoleでAuthorized App Engine Applicationsから一旦gaeのアプリをremove(どうせ繋がらないので)
- 再度追加

これで接続ができるようになりました。

自分へのメモ
[jade]横着メモ

個人用メモとして。

#mixin
```html
<div class="hogeclass">hogeText</div>
<div class="hogeclass">piyoText</div>
```
を書くのに

```jade
 - var strs = ["hogeText","piyoText"]
 - for (var i=0; i < strs.length; i++){
 .hogeclass #{strs[i]}
 - }
```
でもいいけど，

```jade
mixin list(arr)
 each item in arr
  div(class=attributes.class)= item

+list(["hogeText","piyoText"]).hogeClass
```
の方が，jadeっぽい?

- `.(attributes.class)` と書きたかったけど，解釈してくれなかった
- `.attributes.class` は`<div class=”attributes class"></div>`に展開された。そりゃそーか。
- eachの構文は構文で注意。 divの後の=を忘れると，"item"と，そのまま展開される。 (これは別のルールかな)


#Syntax suger
## 暗黙のdiv
```html
<div id='hoge' attr='piyo'></div>
```

を簡単に出力したい

```jade
#hoge(attr='piyo')
```
## mixin

```jade
mixin hoge
+hoge
```

同じ
Yeomanインストール&amp;amp;実行


※node.js、npmがインストール済みのMacを用意してください。
　入っていなければインストールを行ってください。

1.npmインストール確認
---

```
npm -v
```

npmがインストールされていれば、npmのバージョンが表示される
もし、npmがインストールされていなければhttp://nodejs.org/からインストール。

2.LiveReloadインストール
---
以下のサイトからLiveReloadをChromeにインストールする。
https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei

3.compassのインストール
---

```
sudo gem install compass
```

4.yo、grunt-cli、bowerのインストール
---

```
sudo npm install -g yo grunt-cli bower
```

5.generator-webappのインストール
---

```
sudo npm install -g generator-webapp
```

6.作業用ディレクトリに移動
---

```
cd ディレクトリ名
```

7.webappプロジェクトを作る
---

```
yo webapp
```


8.ローカルで実行
---

```
grunt serve
```

ファイルが変更されると、自動でブラウザがリロードされる。
※grunt serveはCtr + cで停止。


開発終了時にはビルドする。

```
grunt build
```

上記コマンドを実行すると、distディレクトリが作成され、コンパイル/minify済みファイルが出力される。

参照
---
Yeomanを使ってSass/LESSをもっと簡単スピーディに 〜導入編〜
http://nantokaworks.com/p879/

フロントエンドのツール Yeoman を勘違いしていた
http://www.slideshare.net/girigiribauer/20130629-yeoman

Yeomanのあれこれ - Qiita
http://qiita.com/sys1yagi/items/4d8c2994580c274fd3fa


Bower入門(基礎編)

http://yosuke-furukawa.hatenablog.com/entry/2013/06/01/173308

Yeoman: フロントエンド開発のワークフローを提供するツール | deadwood
http://www.d-wood.com/blog/2014/02/12_5469.html
第四章 キーレスエントリ（外部キー嫌い）

第四章 キーレスエントリ（外部キー嫌い）

##4.1 目的：データベースのアーキテクチャを単純化する
参照整合性は大事！
でもなんで外部キー使わないの？

・データの更新が、参照整合性制約と衝突してしまう。
・データーベース設計の柔軟性が極めて高いので、参照整合性制約をサポートできない。
・データーベースが外部キーのために作成するインデックスが、パフォーマンスに影響すると考えている。
・外部キーをサポートしないデーターベース製品を使っている。（MyISAMなど）
・外部キーを宣言する構文を調べなければならない。

##4.2 アンチパターン：外部キー制約を使用しない
外部キー制約を省略すれば、データーベース設計がシンプルになり、柔軟性が高まり、実行速度が速くなるかも…。でも代わりに参照整合性を保証するためのコードを書く責任が生じる。


####4.2.1 完璧なコードを前提にしている
・外部キー制約を設定しなかった場合、変更する前にselectクエリを実行し、参照性が壊れないことを確認しなければいけない。

例：行を挿入する前に、親の行の存在確認をしないといけない。

```
# 親行の確認
SELECT account_id FROM Accounts WHERE account_id = 1;

# アカウントを参照するバグレポート（子行）がinsertできる
INSERT INTO Bugs (reported_by) VAlUES (1);
```

例：行を削除する前に、親の行の存在確認をしないといけない。

```
# 親行を参照するバグレポートがあるか確認
SELECT bug_id FROM Bugs WHERE reported_by = 1;

# 子行がなかったらアカウント親を消すことができる
DELETE FROM Accounts WHERE account_id = 1;

```

・もし、account_id=1の利用者が知らないところで作業をしていて、上記の削除作業中に新しいバグレポートを登録していたら…？親のない不正な子レコードがBugsテーブル上にそのまま残ってしまう！

→対処策はBugsテーブルを明示的にロックしながらチェックを行い、アカウント削除後にロックを解除すること。
しかしこの種のロックを必要とするアーキテクチャでは同時接続ユーザーが増え、スケーラビリティ（システムの利用者や負荷の増大に応じて、柔軟に性能や機能を向上させられること）が求められるようになるにつれ、様々な問題に直面してしまう。

####4.2.2 ミスを調べなければならない
・問題1：参照が壊れたデータを探し出せる？

参照が壊れると、壊れた参照をチェックするスクリプトを書かなければいけなくなる…でも、どうやって？（´・ω・｀）孤児を探せない場合がでてくる。

####4.2.3 「私のミスではありません！」
・問題2：参照関係を担保できる？

誰かが作ったスクリプトでDBが変えられてしまうかも。。。
誰かが直接DBを書き換えてしまうかも。。。
→完璧なコードなんてありえない！
→参照がいつも正しく保たれているなんて信用できない！

####4.2.4 「キャッチ=22」なUPDATE
・外部キーがあると、参照関係のせいで挿入、更新、削除がめんどう！だから嫌い！
→めんどうだけど、ちゃんとした手順を踏めば挿入、更新、削除ができるよね。

・キャッチ=22（ジレンマ、パラドキシカルな状況）
親の行を更新するまで、子の行は更新できない←→子の行を更新するまで、親の行は更新できない



##4.3 アンチパターンの見つけ方
「あるテーブルには存在するけど、もう１つのテーブルには存在しない値を調べるクエリは、どう書けばいい？」
→孤児になった子の行を特定しようとしている。

「あるテーブルの値が、別のテーブルへの挿入に使われていることを簡単にチェックする方法はある？」
→親の行が存在しているか確認しようとしている。

「外部キー？データベースの実行速度を遅くするから、使ってはならないと教わったのだけど」
→パフォーマンスを気にして外部キーを省略しようとしている。

##4.4 アンチパターンを用いてもよい場合
MyISAMなど外部キー制約をサポートしていないデータベース製品を使う場合


##4.5 解決策：外部キー制約を宣言する
外部キー制約による参照整性の強制によってデータベースへの登録時点でこれらのミスを阻止できる。

```sql
CREATE TABLE Bugs (
  reported_by  BIGINT UNSIGNED NOT NULL,
  status       VARCHAR(20) NOT NULL DEFAULT 'NEW',
  FOREIGN KEY (reported_by) REFERENCES Accounts(account_id),
  FOREIGN KEY (status) REFERENCES BugStatus(status)
);
```
利点
・外部キーは不要なコードを書く手間を省く
・修正や保守の時間も大幅に削減できる

###4.5.1 複数テーブルの変更をサポートする

「カスケード更新」

```sql
CREATE TABLE Bugs (
  reported_by  BIGINT UNSIGNED NOT NULL,
  status       VARCHAR(20) NOT NULL DEFAULT 'NEW',
  FOREIGN KEY (reported_by) REFERENCES Accounts(account_id)
    ON UPDATE CASCADE
    ON DELETE RESTRICT,
  FOREIGN KEY (status) REFERENCES BugStatus(status)
    ON UPDATE CASCADE
    ON DELETE SET DEFAULT
);

```

カスケード更新を使うと…
・親の行の更新や削除が可能になり、さらにその行を参照しているあらゆる子の行もデータベースが適切に処理してくれるようになります。

####4.5.2 オーバーヘッド、…にはなりません

外部キー制約によって多少のオーバーヘッドがでるのは事実だけど、外部キーを使ったほうがより効率的になる。
・挿入、更新、削除の前に、チェックのためにSELECTクエリを実行する必要がない。
・複数テーブルの変更を防ぐために、テーブルをロックする必要がない。
・他の方法のように孤児が生じてしまうことがないので、データ品質管理用スクリプトを定期的に実行する必要がない。

#####☆外部キーは簡単に使え、パフォーマンスも改善する。あらゆるデータ変更における参照性合成の維持に役立つ！
#####☆データベースでのミスの発生を未然に防ぐために、外部キー制約を用いましょう。
OpsWorksでEC2インスタンスのapaheログを取得

#### OpsWorksでEC2インスタンスのログを取得します

現在、OpsWorksでは常時起動しているEC2インスタンスと、
アクセスが増大した際にのみ起動するEC2インスタンスの2つを利用しています。

今回、スポット起動のインスタンスのapacheログを取得しようと思います。

**考えられる蓄積場所**

* ローカル(/var/log/apache2/)に蓄積
* s3に蓄積
* 外部サービスに転送(fluentdなど)

ローカルを確認しましたが、ログはありませんでした。
スポット起動のインスタンスでは一回落ちると消えてしまうようです。

また、S3と外部サービスの設定は行っていないみたいだったので、
スポット分は蓄積されていないようです。。。。

設定しよう。。

#### 備考
S3に蓄積する場合はELBで出力するのが良い。
http://dev.classmethod.jp/cloud/aws/elb-featured-accesslog/
最近は [fluentd](http://www.fluentd.org/) に飛ばして別途集約しておくというのが定石みたいです。

#### 参考
* [AWSブログを3行でまとめる試み#4 : 新サービス AWS OpsWorks を発表するぞ](http://d.hatena.ne.jp/naoya/20130219)
* [fluentd](http://www.fluentd.org/) 
* [treasuredata](http://www.treasuredata.com/)

* [ELBのアクセスログはこちら](http://dev.classmethod.jp/cloud/aws/elb-featured-accesslog/)
* [CloudWatch Logsのchefによるセットアップ](http://rikuga.me/tag/cloudwatch-logs/)

#### メモ
 ELP ・・・ Elastic IP アドレス（EIP）は、動的なクラウドコンピューティングのために設計された静的 IP アドレスです。 EIP を使用すると、アドレスをアカウント内の別のインスタンスに迅速に再マップして、インスタンスやソフトウェアのエラーを隠すことができます。 EIP は AWS アカウントと関連付けられ（特定のインスタンスとではなく）、アカウントとの関連付けはお客様が明示的に解除するまで続きます。
packerとvirtualboxで仮想環境構築(MacOS)

## 環境

* MacOS X 10.9.4

## 作業

### 事前に入れとくやーつ

* chef
* virtualbox

### homebrew が壊れていたので修復(後の作業で詰まったら見てもらえれば。)

```
$ cd `brew --prefix`
$ git fetch origin
$ git reset --hard origin/master
```

治った。
危うく挫折しそうだった。

### packer-install

```
$ brew tap homebrew/binary
$ brew install packer
$ packer -v
Packer v0.6.1
```

### chefインストール

```
$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
$ sudo gem install chef --no-rdoc --no-ri 
$ sudo gem install knife-solo --no-rdoc --no-ri 
```

### cookbook-nginx

cookbookを別のパスで所有している場合はスルーしてください。


```
$ knife solo init chef-repo
```

```
$ cd chef-repo
$ knife cookbook create test
```

```
$ cat /var/tmp/chef-repo/cookbooks/hoge/recipes/default.rb
yum_package "httpd" do
  action :install
end

service 'httpd' do
  supports :status => true, :restart => true, :reload => true
  action [:start, :enable]
end
```
※ httpdを追加ます。

### packer

依代となるOSたち

```
$ cd /var/tmp
$ git clone https://github.com/takayoshi/packer-vanilla-box.git
$ cd packer-vanilla-box/centos/6

```

### chefの設定

provisionersをchef-soloで実行するように変更します。

```
$ vim centos6.json
[snip]
  "provisioners": [{
    "type": "chef-solo",
    "cookbook_paths": ["/var/tmp/chef-repo/cookbooks/"],
    "run_list": ["recipe[hoge]"],
    "json": {
      "nginx" : {
        "path" : "/usr/local/nginx"
      }
    },
    "prevent_sudo": false,
    "skip_install": false
  }]
[snip]
```

```
$ packer build -force -only=virtualbox-iso centos6.json
```


vagrantのboxファイルが作成されました。

```
==> Builds finished. The artifacts of successful builds are:
--> virtualbox-iso: 'virtualbox' provider box: ./artifacts/centos6-virtualbox.box
```

作成したboxファイルをcentos6という名前でvagrantに追加します。

```
vagrant box add centos6 artifacts/centos6-virtualbox.box
```

Vagrantファイルを作成します。(適度に変更してください。)

```
vagrant init  centos6
```

vagrantを立ち上げます

```
vagrant up
```

ログインしてhttpdがinstallされていることを確認します

```
vagrant ssh
$ /etc/init.d/httpd status
httpd は起動しています
```

===


### 参照元ページ

以下を参照しました。(いつもありがとうございます。)

* http://blog.f13.jp/post/20626146392/brew-brew-update
* http://momijiame.tumblr.com/post/80171332872/packer-vagrant-base-box
* http://dev.classmethod.jp/cloud/use_chef-solo-provisioner_to_make_ami_by_packer/
* https://github.com/miketheman/nginx
Sublime Text 2 で文字コードがGBKになってしまう件

## 事象
Sublime text 2 使っている時に**いきなり文字コードがGBKに**なってしまう件がたまにおこる。

![スクリーンショット 2014-09-09 17.32.54.png](https://qiita-image-store.s3.amazonaws.com/0/49055/106bef63-7288-9e8d-f2d7-732326f67ec3.png)

その都度UTF-8とかに変更する作業してたのだが面倒なので調べてみた。


## 原因
調べてみるとどうやらパッケージの**「[ConvertToUTF8](https://www.google.co.jp/search?q=ConvertToUTF8)」**が悪さしてたよう。
具体的にはConvertToUTF8のショートカットキーとして
**「Shift + Command + C」でGBKにエンコードする**（MacOS）
という意味不明のショートカット・キーがデフォルトで割り当てられている模様・・

    { "keys": ["super+shift+c"], "command": "convert_to_utf8", "args": {"encoding": "GBK", "stamp": "0" } }
/Users/username/Library/Application Support/Sublime Text 2/Packages/ConvertToUTF8/Default (OSX).sublime-keymap



## 解決方法

上記sublime-keymapにて削除してもいいんだけど、なんとなくUserのKey Bindingsにてやってみる。

**Preferences > Key Bindings – User**
にて

    {
		"keys": ["shift+super+c"],
		"command": "null"
	}

を追加

「null」はSublimeが[コマンド](http://www.sublimetext.com/docs/commands)として登録していないものであれば何でもOK！

以上！
Mavenで外部リポジトリを追加する (Hadoopの場合)


リリース判断のvotingをするために、RC(Release Candidate)をビルドしたい。けれども、レポジトリがまだ正式に登録されていないから`mvn`コマンドが実行できない、という場合の対処法

Hadoop 2.5.1(RC0)のときのメールから引用

```
I have put together a release candidate (RC0) for Hadoop 2.5.1.

The RC is available at: http://people.apache.org/~kasha/hadoop-2.5.1-RC0/
The RC git tag is release-2.5.1-RC0
The maven artifacts are staged at:
https://repository.apache.org/content/repositories/orgapachehadoop-1010/

You can find my public key at:
http://svn.apache.org/repos/asf/hadoop/common/dist/KEYS
```

ここで、`https://repository.apache.org/content/repositories/orgapachehadoop-1010/`をコピーして、`pom.xml`に貼り付けてあげるとよい。diffはこんな感じ。

```
diff --git pom.xml pom.xml
index c4abc1b..2145426 100644
--- pom.xml
+++ pom.xml
@@ -64,6 +64,10 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://
         <enabled>false</enabled>
       </snapshots>
     </repository>
+    <repository>
+      <id>org.apache.hadoop</id>
+      <url>https://repository.apache.org/content/repositories/orgapachehadoop-1010/</url>
+    </repository>
   </repositories>
 
   <licenses>
```

これだけではうまくいかなかったので、`hadoop-maven-plugins`をコンパイルしなおしたら、ドキュメントもコンパイルできるようになった。

```
$ cd hadoop-maven-plugins
$ mvn install
```
EC2からNTPが効いていない思ったらNATのSecurityGroupが不適切だった

EC2のNTPが効かなくてかなりはまったので記録しておきます。

# 発生した現象

VPCのPrivate Subnetに配置したEC2(amzn-ami-pv-2014.03.1.x86_64-ebs利用)でインスタンスで以下の現象が起きた

 * 時刻が5分以上ずれているために、aws-cliが以下のように失敗する
  * => ntpdはデフォルトで動いているはずなのに時刻補正がされていない

```bash
Signature not yet current: 20140909T043506Z is still later than 20140909T043505Z (20140909T043005Z + 5 min.)
```

# 結論

* VPCのNATのSecurity GroupでPrivate SubnetからのUDPを許可していなかった(TCPは許可していた)。このため、NTPが利用しているUDP 123番ポートが通信できなくてNTPが失敗していた。
 * UDPを許可すると時刻補正がされるようになった。
 * TCPは許可していたので気付きにくかった。

![ntp失敗.png](https://qiita-image-store.s3.amazonaws.com/0/16768/6f9232ad-2205-27d1-c642-8b6cfbfdc852.png)

# 調査経過

1. cronで行っていたCloudWatchのカスタムメトリックスが登録されなくなる
2. cronのログを見るとSignature not yet currentエラーが発生している
3. 時刻を確認するとずれている
4. ntpdはデフォルトで実行されているのを確認
5. ntpq -pコマンドを確認すると同期中のサーバがない
6. /etc/ntp.confの設定でntpdateしても失敗する
6. VPCのPrivate Subnetからの通信経路がおかしいのではないかと思いつく
7. Private SubnetのNetwork ACLとNATのSecurityGroupの設定を確認
cocos2d-xで子Nodeが一緒にフェードしてくれない件

備忘録

まだ試してないけど、
http://anz-note.tumblr.com/post/89523187901/cocos2d-x
という感じ。

```cpp:子ノードを一緒にフェードする
parent->setCascadeOpacityEnabled(true);
```

杏ｚさんありがとうございます。

<br/>

追記：だがこのsetCascadeOpacityEnabled()自体が、再帰的に子ノードに行き渡る訳ではないらしい。
　ので、こういう関数が必要になる。やっつけ仕事だけど。

```cpp:再帰的にsetCascadeOpacityEnabledを呼ぶ関数
void _setCascadeOpacityEnabled(Node* parent, bool enabled)
{
    parent->setCascadeOpacityEnabled(enabled);
    for (int i=0; i<parent->getChildrenCount(); i++) {
        _setCascadeOpacityEnabled(parent->getChildren().at(i), enabled);
    }
}
```
Salesforce 日付の計算

# 月初


```sql
DATE(
    YEAR(FIELD_DATE),
    MONTH(FIELD_DATE),
    1
)
-- 日付を1日にする
```

# 月末（翌月初日-1）


```sql
DATE(
    YEAR(FIELD_DATE)+IF(MONTH(FIELD_DATE)==12,1,0),
    IF(MONTH(FIELD_DATE)==12,1,MONTH(FIELD_DATE)),
    1
)-1
-- 日付を翌月1日にし前日にする
-- 12月の場合は別計算
```

```sql
IF(
    MONTH(FIELD_DATE)==12,
    DATE(YEAR(FIELD_DATE)+1,1                  ,1),
    DATE(YEAR(FIELD_DATE)  ,MONTH(FIELD_DATE)+1,1),
)-1
-- 日付を翌月1日にする。
-- 12月の場合は別計算
```

# 翌月初


```sql
DATE(
    YEAR(FIELD_DATE)+IF(MONTH(FIELD_DATE)==12,1,0),
    IF(MONTH(FIELD_DATE)==12,1,MONTH(FIELD_DATE)),
    1
)
-- 日付を翌月1日にする。
-- 12月の場合は別計算
```

```sql
IF(
    MONTH(FIELD_DATE)==12,
    DATE(YEAR(FIELD_DATE)+1,1                  ,1),
    DATE(YEAR(FIELD_DATE)  ,MONTH(FIELD_DATE)+1,1),
)
-- 日付を翌月1日にする。
-- 12月の場合は別計算
```
Window上部へドラッグしたときの最大化を防ぐ方法

Window7で、Windowを上部へドラッグしたときに、勝手に最大化してしまう。
とても邪魔な機能である。また、この設定の場所もわかりづらいので覚え書き。


![mouse.PNG](https://qiita-image-store.s3.amazonaws.com/0/3184/548887eb-a855-7e60-6915-46d67738f383.png)


[デスクトップ画面右クリック]-[個人設定]-[コンピュータの簡単操作センター]-[マウスを使いやすくします]-[ウィンドウが画面の端に移動されたとき自動的に整列されないようにします]を選択する。

辿り着くまでのメニューの名前も長い。
AndroidStudio,Eclipse ショートカットキー対応表


##メタキーの見方

アイコン | キー名
---|---
⌃ | control
⌘ | command
⌥ | option/alt
↩ | return/enter
⇧ | shift


## ショートカットキー一覧
やりたいこと | Eclipse | AndroidStudio | 備考
-------|:-------:|:------:|-----
Quick Outline|⌘O|⌘F12|クラスのアウトラインを表示してジャンプするコマンドです。
Quick Type Hierarchy(クラスがコンテキストの場合） | ⌘T | ⌃H | クラスの階層を表示してジャンプするコマンドです。
Quick Type Hierarchy(メソッドがコンテキストの場合） | ⌘T | ⌥⌘B | メソッドの階層を表示してジャンプするコマンドです。
Open Type |⇧⌘T	 | ⌘O | クラスにジャンプするコマンドです。
Next Annotation/Previous Annotation | ⌘. F2| ⇧⌘. ⇧F2| マーカーにジャンプするコマンドです。
References | ⇧⌘G | ⌥F7 | シンボルが参照されている箇所を表示するコマンドです。
Source | ⌥⌘S | ⌃↩ | Sourceメニューを展開するコマンドです。
Format | ⇧⌘F | ⌥⌘L | ソースを整形するコマンドです。
Organize Imports | ⇧⌘O | ⌃⌥O | importを編成するコマンドです。
Toggle Comment | ⌘/ | ⌘/| 選択範囲をコメント・アンコメントするコマンドです。
Assign statement to new local variable | ⌘2 ⌘1 Assign statement to new local variable | ⌥⌘V | ステートメントを、ローカル変数を宣言して代入するコマンドです。
Override/Implement Methods | ⌥⌘S Override/Implement Methods... | ⌃↩ Override Methods...  ⌃O | メソッドのオーバーライド・インプリメンテーションのスタブ実装を生成するコマンドです。
Rename | ⌥⌘R | ⇧F6 ⌃T 1.Rename... | シンボルの名前を変更するコマンドです。

## 参考
Android StudioでEclipseのアレをやるには？ - _development, http://d.hatena.ne.jp/esmasui/20130607/1370621300
MAC版のffmpegを使ってみた

最近MACでffmpegを使う必要があって、
こんなバイナリがあったので、やってみたよ。

http://ffmpegmac.net/

一応、パスが通っているところに配備すればOK。
あとは、普通にffmpegの使い方と同じっぽい。


2014/12/23 追記
上記ではなく、brewからインストールするときの、オプション指定

```
brew install --use-clang --HEAD ffmpeg --with-faac --with-fdk-aac --with-ffplay --with-fontconfig --with-freetype --with-frei0r --with-libass --with-libbluray --with-libcaca --with-libquvi --with-libsoxr --with-libvidstab --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-openssl --with-opus --with-rtmpdump --with-speex --with-theora --with-tools --with-x265 --enable-libx264 --enable-gpl --enable-libxvid --enable-shared
```

shコマンドで、特定のディレクトリのファイルを、一気に変換する。
ここでは、変換元のディレクトリに、mp4ディレクトリを作成して、そこに格納。

```
$ mkdir mp4
$ for x in *.mkv; do ffmpeg -y -i "$x" -acodec libfaac -vcodec libx264 "mp4/${x%%.*}.mp4"; done
```

字幕編集をする場合は、これが便利。
http://www.aegisub.org/

字幕付で変換する場合
assフィルターを利用する。
```
ffmpeg -i xxxx.mkv -filter:v "ass=xxxx.ass" -acodec libfaac -vcodec libx264 -ss 00:04:33 -t 00:05:00 xxxx.mp4
```
Androidアプリでキーボードを非表示にする

Androidアプリでキーボードを非表示にする場合は以下のようにします。

```java
if (getCurrentFocus() != null) {
	InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
	imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
```

`hideSoftInputFromWindow`メソッドの第二引数を`InputMethodManager.HIDE_IMPLICIT_ONLY`にすると、予測変換の部分のみ非表示にすることができます。


※以下のサイトを参考にしました。
・[ソフトキーボードを非表示にする «  Tech Booster](https://techbooster.org/android/ui/7427/)
・[キーボードを非表示にする - Android 1000 tips](https://sites.google.com/a/gclue.jp/android-1000-tips/kibodo-wo-h)
・[Android キーボードを消す方法](http://itclear.nerim.info/android-keyboard.html)
rickshawでmillseconds単位のデータを描画する方法

# 概要
jsでmillseconds単位でグラフを描画したい。

# RickShawの概要
インタラクティブな時系列グラフを作成できるJSライブラリ

# データ構造
以下のようなデータ構造にすれば表示される

```
[
  x: 1410243317
  y: 94.62094310053635
],
  x: 1410243317.01
  y: 94.62094310053635
],
[
  x: 1410243317.02
  y: 89.2620636010335
]

```

# リンク
[RickShaw](http://code.shutterstock.com/rickshaw/)
[github](https://github.com/shutterstock/rickshaw)
table周りのCSSを効率よく設定したい

# やりたかったこと

http://jsdo.it/yd_niku/gbpy

↑こういう偶数行にうすい色をつけるパターンの実装をするときに`table要素`のCSSについてしらべたのでメモです。

まず見出しセル(`th`)が1行(`tr`)にまとまっている場合と、`tr`が各行(`tr`)にまたがっている場合があります。

# 見出しセルが一行の場合

前者はtrでテーブル要素内のツリーとして扱われるので tr要素に .odd/.evenなどをつけてbackground-colorを指定すればよさそうです。

``` css
table tr.even {
    background:#fff0f0;
}
```

※再現できないけど、まれに`tr`に`background`指定してもIE7で反映されないことがあったので、そのときは下記のように列への指定をすれば確実にできます。

``` css
table .even,
table .even td {
    background:#fff0f0;
}
```

# 見出しセルが各列にまたがる場合

次に列ごとの幅を調整するときに、すべての行の`th`, `td`にクラスをつけると死にますのでグルーピングする要素がほしいなーというところに`colgroup`という要素があるようなので調べてみました。

次の記事が詳しいのですが、ブラウザによって反映できるプロパティが違うようです。
http://www.d-spica.com/try/colgroup.html

> ## th，tdはcolgroupの子孫要素ではない
> 
> th，tdはcolgroupの子孫要素ではないので，colgroupに指定したtext-align，font-weight，colorなどの値はth，tdに継承されないはず。
colgroupは内容を持たないただの領域。これが列として並んだ複数のセルと重なっているだけ。
> th，tdを子孫要素のように扱うIE6,7の挙動が正しくない。

とういうことで、結論からいうと、幅と背景なら`colgroup`で一括して管理できそうです。

今回の要件であれば十分そうですが、もしテキストの色や`padding`や整列を変えたい場合は各`th`, `td`にクラスをつけるような泥臭いやり方をするしかないようです。

``` html
<table>
    <tr>
        <th class="first">●●●●</th>
        <th class="second">●●●●</th>
        <th class="thard">●●●●</th>
    </tr>
    <tr>
        <td class="first">◯◯◯◯◯</td>
        <td class="second">◯◯◯◯◯</td>
        <td class="thard">◯◯◯◯◯</td>
    </tr>
</table>
```

# 最終的なHTML/CSS

``` html:index.html
<table>
    <colgroup class="first"></colgroup>
    <colgroup class="second"></colgroup>
    <tr>
        <th>●●●●●●</th>
        <th>●●●●</th>
    </tr>
    <tr class="odd">
        <td>◯◯◯◯◯</td>
        <td>◯◯◯◯◯◯</td>
    </tr>
    <tr class="even">
        <td>◯◯◯◯◯</td>
        <td>◯◯◯◯◯◯</td>
    </tr>
    <tr class="odd">
        <td>◯◯◯◯◯</td>
        <td>◯◯◯◯◯◯</td>
    </tr>
    <tr class="even">
        <td>◯◯◯◯◯</td>
        <td>◯◯◯◯◯◯</td>
    </tr>
</table>

<table>
    <colgroup class="head"></colgroup>
    <colgroup class="first odd"></colgroup>
    <colgroup class="second even"></colgroup>
    <colgroup class="thard odd"></colgroup>
    <tr>
        <th>●●●●●●</th>
        <td>◯◯◯◯◯</td>
        <td>◯◯◯◯◯</td>
        <td>◯◯◯◯◯</td>
    </tr>
    <tr>
        <th>●●●●</th>
        <td>◯◯◯◯◯◯</td>
        <td>◯◯◯◯◯</td>
        <td>◯◯◯◯◯</td>
    </tr>
    <tr>
        <th>●●●●●●</th>
        <td>◯◯◯◯◯</td>
        <td>◯◯◯◯◯</td>
        <td>◯◯◯◯◯</td>
    </tr>
    <tr>
        <th>●●●●</th>
        <td>◯◯◯◯◯◯</td>
        <td>◯◯◯◯◯</td>
        <td>◯◯◯◯◯</td>
    </tr>
</table>
```

``` scss:index.scss
table {
    border:1px solid #666;
    border-collapse: collapse;
    
    th,
    td {
        border:1px solid #666;
        padding: 5px 8px;
    }
   
    th {
        background:#dcdcdc;
    }
    
    .even {
        background:#fff0f0;
    }
    
    .first {
        width:40%;
    }
    
    .head {
        width:20%;
    }
}
```


# 追記

先ほど気づいたのですが、colgroupの幅の指定は`%`じゃないと効かないようです。

```css
    .head {
        width:20%;// OK
    }
```

```css
    .head {
        width:200px;// 効かない
    }
```
コード1行でBotがSlackへ通知してくれるGemを公開しました


（2014/9/10追記）
v0.0.2をリリース、[カスタマイズ](http://qiita.com/kidachi_/items/debfd0474d0888e5b1f1#2-4)時のInterfaceを変更しました。

# 概要

kidach1/slack_bot
https://github.com/kidach1/slack_bot


※ 本投稿は基本的にREADMEの和訳です。

# 何？

コード1行でSlackにエラーやらなにやら（任意）を飛ばしてくれます。
シンプルな分他の用途にも使える、かもしれません。


# 準備

## APIトークンの生成

まずは準備として

https://api.slack.com/#auth

よりAPIトークンの発行を行います。

Slack内にサインインし、かつ何らかのteamに属していれば、以下のように`Create token`を押下するだけで発行可能です。

![Slack_API___Slack.png](https://qiita-image-store.s3.amazonaws.com/0/48274/9dad2e26-2171-3a74-1a02-102ae49d1890.png "Slack_API___Slack.png")



## 設定ファイルを追加

Railsアプリの場合、

`config/initializers/slack_bot.rb`を作成、以下を追加します。

```config/initializers/slack_bot.rb
SlackBot.setup do |config|
  config.token = <YOUR_API_TOKEN>
  config.channel = <YOUR_CHANNEL_OR_GROUPE_NAME>
  config.bot_name = <BOT_NAME>
  config.body = <DEFAULT_MESSAGE>
end
```


# 使う

任意の箇所で以下を呼び出します。

```rb
# Call me anywhere
SlackBot.notify
```

以上です！

## 例

例えばこんな設定だった場合

```config/initializers/slack_bot.rb
SlackBot.setup do |config|
  config.token = xxxxxx
  config.channel = '#sample-channel'
  config.bot_name = 'SlackBot'
  config.body = "[#{Rails.env}] Hello, SlackBot!"
end
```

```rb
# Call me anywhere
SlackBot.notify
```

### 結果

![Slack.png](https://qiita-image-store.s3.amazonaws.com/0/48274/79649019-b72a-7283-4a34-9702aec69d73.png "Slack.png")


こうなります。

## カスタマイズ

文脈によってbotの名前や通知内容を変えたい場合は、呼び出し箇所で

```rb
SlackBot.notify(
  body: 'Custom body!',
  bot_name: 'CustomBot',
  channel: 'custom-channel'
)
```

としてやります。

## カスタマイズ例

例えば

```rb
#Call me anywhere
SlackBot.notify(
  body: "[#{Rails.env}] Custom body!", 
  bot_name: "CustomBot"
)
```

とすると

### 結果


![Slack.png](https://qiita-image-store.s3.amazonaws.com/0/48274/b4dce009-025b-cabc-e801-2a71061be243.png "Slack.png")


となります。

とにかく手軽がいい、という時にどうぞ。
ロングプレスを検出して、プレスされている間に連続してアクションを呼出


ロングプレス検出後、押し続けられている間、特定のアクションを呼び出し続けるコーディングを考えます。

## 環境

OS X: 10.8.5
Xcode: 5.1.1

## ロングプレス・ジェスチャーリコグナイザ

xibまたは、storyboardのConnection inspectorから、ロングプレスイベントのアクションを設定することはできません。

UILongPressGestureRecognizerクラスを使って、ロングプレスされたとき呼出するアクションを設定します。
ここでは、self(ViewController)のlongPressアクションを呼び出しています。

### 初期設定

```objectivec:ViewControllerの初期処理
// プロパティの設定
@property (nonatomic, weak) IBOutlet UIButton *button;

// viewDidLoadなどで
// ジェスチャーリコグナイザの生成
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
// ボタンに設定
[_button addGestureRecognizer:longPress];

```

ロングプレスの検出時間間隔は、minimumPressDurationプロパティで設定できます。デフォルトは0.5秒です。

```objectivec:検出時間間隔の設定
longPress.minimumPressDuration = 0.5;
```
ロングプレスされている間に呼出する処理を記述します。最後にperformSelectorを使って0.5秒に再度自分自身を呼出します。

### リピート処理

```objectivec:リピート処理
- (void)repeat:(id)sender
{
  //  リピート処理を記述

  // 0.5秒後に再度呼出
  [self performSelector:@selector(repeat:) withObject:nil afterDelay:0.5];

}

```

### ロングプレス検出

ロングプレスが検出されたら、stateがUIGestureRecognizerStateBeganが設定されて一度だけ呼出されます。上記のrepeatメソッドを呼び出します。

このままでは、永遠にrepeatメソッドが呼び続けられるので、stateがUIGestureRecognizerStateEndedになったら、cancelPreviousPerformRequestsWithTargetで繰り返す処理をキャンセルします。

ここでは利用していませんが、ロングタップ中にドラッグするとstateがUIGestureRecognizerStateChanged
に設定されて呼出されます。

```objectivec:ロングプレス処理
- (void)longPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
  switch (gestureRecognizer.state) {

    case UIGestureRecognizerStateBegan:
      [self performSelector:@selector(repeat:) withObject:nil afterDelay:0.5];
      break;

    case UIGestureRecognizerStateChanged:
      break;

    case UIGestureRecognizerStateEnded:
      [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(repeat:) object:nil];
      break;

    default:
      break;
  }
}
```

これを利用すれば、ロングプレス時にカウントを連続して増減するような処理が実装できると思います。

もちろん、Touch Up Insideイベントとの併用も可能です。

androidでは、Threadを使ってロングプレス検出とリピート処理を実装していたのですが、iOSでは、ちょっと楽ですね。
CORS Cookie について

----

### 同一ドメインの場合
PHPでhttp onlyの設定を解除すれば、取得可能。

```
$.post(url, params)
	.done(function(res, status, XHR) {
		console.log('url: '+url+' OK');
		var cookie = XHR.getResponseHeader('Set-Cookie');
	})
	.fail(function(XHR, status, res) {
		console.log('url: '+url+' NG');
		console.log(status);
	});
```


### 外部ドメインの場合
サーバー間通信では取得可能だがjavascriptでは、取得はできない。（たぶん）
ajaxでの送信は出来るかも。

```
$.post(url, params)
	.done(function(res, status, XHR) {
		console.log('url: '+url+' OK');
		var cookie = XHR.getResponseHeader('Set-Cookie');
	})
	.fail(function(XHR, status, res) {
		console.log('url: '+url+' NG');
		console.log(status);
	});

$response->set_header('Access-Control-Allow-Origin', 'http://localhost');
        $response->set_header('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With');
        $response->set_header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
        $response->set_header('Access-Control-Max-Age', 0);
        $response->set_header('Content-Language', 'ja');
        $response->set_header('Content-Type', 'application/json; charset=utf-8');

		 // cookieなどの情報を送るかどうか
        $response->set_header('Access-Control-Allow-Credentials', 'true');
		 // 3パーティーからの書き込みを許可するか？（IE対策？）
        $response->set_header("P3P", "CP='CAO PSA OUR'");

```
キャメルケースとスネークケースを相互変換する正規表現

そんなときエディタ上で正規表現を駆使してコードを生成するってことをたまにやります。
そこでよく使うキャメルケースとスネークケースを相互変換するためのチートシートです。

動作確認はSublime Text 3で動作確認。

## スネークケースをキャメルケースにする

先頭またはアンダースコアに続く1文字を、置換対象にします。対象となる文字は$2で参照できるので、これを\uで大文字に変換。

- 検索条件 - "(_|^)(.)"
- 置換 - "\u$2"

## キャメルケースをスネークケースにする
単純に、大文字を「アンダースコア+小文字」に置換。

- 検索条件 - "([A-Z])"
- 置換 - "\_\L$1"


## 使いどころとか

JavaBeanからJavaBeanへ項目を移送するシチュエーションでよくやる。
基本的にはcommonsのBeanUtil使えって思うけど、微妙なメソッドの違いや、型変換などがあるとBeanUtilが使えないってパターンも。

他にもExcelでできた仕様書などからJavaBeanを生成する時なども便利。（白目
画像ファイルからexifメタデータを抜き出す


なんかだか面倒くさいけど、これライブラリないんだろうか。

```objc
static NSDictionary *getExifFromData(NSData * const data)
{
    CFStringRef imageSourceOptionKeys[2];
    CFTypeRef imageSourceOptionValues[2];
    imageSourceOptionKeys[0] = kCGImageSourceShouldCache;
    imageSourceOptionValues[0] = kCFBooleanTrue;
    imageSourceOptionKeys[1] = kCGImageSourceShouldAllowFloat;
    imageSourceOptionValues[1] = kCFBooleanTrue;

    CFDictionaryRef imageSourceOptions = CFDictionaryCreate(
            NULL,
            (const void **)imageSourceOptionKeys,
            (const void**)imageSourceOptionValues,
            sizeof(imageSourceOptionKeys) / sizeof(imageSourceOptionKeys[0]),
            &kCFTypeDictionaryKeyCallBacks,
            &kCFTypeDictionaryValueCallBacks);


    CGImageSourceRef imageSourceRef = CGImageSourceCreateWithData((__bridge CFDataRef) data,  imageSourceOptions);
    CFRelease(imageSourceOptions);

    CFDictionaryRef imagePropertiesDictionary = CGImageSourceCopyPropertiesAtIndex(imageSourceRef, 0, NULL);

    NSDictionary *exif = (__bridge NSDictionary *)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyExifDictionary);

    CFRelease(imageSourceRef);

    return exif;
}
```

うまくいくと以下の様なメタデータがとれる。

```
// NSLog("exif: %@, exif);
exif: {
    ColorSpace = 1;
    ComponentsConfiguration =     (
        1,
        2,
        3,
        0
    );
    DateTimeDigitized = "2012:10:15 20:57:48";
    DateTimeOriginal = "2012:10:15 20:57:48";
    ExifVersion =     (
        2,
        2,
        1
    );
    FlashPixVersion =     (
        1,
        0
    );
    PixelXDimension = 1536;
    PixelYDimension = 1536;
    SceneCaptureType = 0;
}
```

参考文献:

* [Image I/O Programming Guide: Creating and Using Image Sources](https://developer.apple.com/library/mac/documentation/graphicsimaging/conceptual/ImageIOGuide/imageio_source/ikpg_source.html)
* [iphone - Get Exif data from UIImage - UIImagePickerController - Stack Overflow](http://stackoverflow.com/questions/9766394/get-exif-data-from-uiimage-uiimagepickercontroller)
ログ解析のとき便利なコマンドまとめ

**特定のIPアドレスからのアクセスを抽出する**

```
grep "^188.92.76.167" access_log-20140907 
```
or

```
cat access_log-20140907 | grep "^188.92.76.167"
```


**特定のIPアドレスからのアクセスを抽出し CSS やらへのアクセスを除外する**

```
grep "^188.92.76.167" access_log-20140907 | grep -ive "GET /.*\.\(css\|js\|jpg\|gif\|png\|swf\|ico\)\ HTTP"
```

**特定のIPアドレスからのアクセスを抽出し CSS やらへのアクセスを除外し、さらにリアルタイムに監視する**

```
tail -f access_log-20140907 | grep "^188.92.76.167" | grep -ive "GET /.*\.\(css\|js\|jpg\|gif\|png\|swf\|ico\)\ HTTP"
```

**特定ファイルへのアクセス数を抽出する**

```
$ cat /var/log/httpd/access.log | grep favicon.ico | wc -l
```

**特定のIPアドレスからのアクセスを抽出し CSS やらへのアクセスを除外し、さらにはbotも除外する**

```
grep "^188.92.76.167" access_log-20140907 | grep -ive "GET /.*\.\(css\|js\|jpg\|gif\|png\|swf\|ico\|Baiduspider|server-status|Ask Jeeves|Yeti|Yahoo!Slurp|Mediapartners-Google|Googlebot|Plagger|Twiceler|Y!J-BSC|Feedfetcher-Google|AMZNKAssocBot|livedoor HttpClient|Fastladder FeedFetche|FreshReader)\ HTTP"
```


今回はgrep, cut, awk, sort, uniq, wc などを利用した。
各コマンドの詳細については以下を参考にした。

## 参考
* [バシャログ コマンドラインでアクセスログを解析するワンライナー](http://c-brains.jp/blog/wsg/11/03/09-150446.php)
* [アクセス解析で便利だったコマンド集]
 (http://bosssato.hatenablog.com/entry/20100528/1275016235)
* [上司がアクセス数を出せって言うから...](http://blog.sixapart.jp/2012-04/boss-love-pv.html)
* [UNIXコマンドの使い方 grep](http://www.envinfo.uee.kyoto-u.ac.jp/user/susaki/command/c_grep.html)
* [UNIXコマンドの使い方 cut](http://www.envinfo.uee.kyoto-u.ac.jp/user/susaki/command/c_cut.html)
* [Man page of GAWK](http://linuxjm.sourceforge.jp/html/GNU_gawk/man1/gawk.1.html)
* [Man page of SORT](http://linuxjm.sourceforge.jp/html/gnumaniak/man1/sort.1.html)
* [Man page of UNIQ](http://linuxjm.sourceforge.jp/html/GNU_textutils/man1/uniq.1.html)
* [Man page of WC](http://linuxjm.sourceforge.jp/html/gnumaniak/man1/wc.1.html)

バシャログ tnakamuraさんとても参考になりました。