OmniAICreator/Qiita-1.07M huggingface dataset:
homebrewインストールができない

macOS10.9.5でhomebrew をインストール。
ターミナルで
①brew install nodeを実行すると
→「node-0.12.4 already installed, it's just not linked」（リンクが張られてない）

②brew link nodeでリンクを張ろうとすると
→Linking /usr/local/Cellar/node/0.12.4... 
Error: Could not symlink include/node/android-ifaddrs.h
/usr/local/include/node is not writable.
権限がない？とでます。

この時点でbrew doctorを実行すると

Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!

Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:

    node
brew link nodeをしなさい。ということで②に戻ってしまいます。
どうすればよいのでしょうか
基本文法（if else switch）

##if文
if文は条件によって処理を分岐させる場合に利用する。

```
if( 条件式 ){
   //条件式がtrueだった場合に処理される
}
```

##if-else文
if文での条件式の評価結果がtrueの場合だけでなく、falseになった場合にも何らかの処理を実行したい場合がある。この場合、次のようにif文にはelse文を追加した書式がある。

```
if( 条件式 ) {
  //条件式がtrueだった場合に処理される
} else {
  //条件式がfalseだった場合に処理される
}
```

##else-if文
3つ以上の分岐処理の場合、else-if文を使用する。

```
if ( 条件式1 )  {
    //条件式1を満たしたら処理される
} else if ( 条件式2 ) {
    //条件式2を満たしたら処理される
} else if ( 条件式3 ) {
    //条件式3を満たしたら処理される
} else {
    //上記条件にいずれも該当しない場合に処理される
}
```

##switch文
if文はプログラムの実行を分岐させる場合に有用だが、
`同じ変数の値の種類によって条件を分岐させたい場合はswitch文が便利`
である。

```
switch(式) {
    case 式1:
        //式1の条件を満たした時に処理される
        break;
    case 式2:
        //式2の条件を満たした時に処理される
        break;
    default:
        //上記条件いずれも満たさない時に処理される
        break;
}
```
VB.Net Datarowの拡張メソッド

#DataRowに拡張メソッドが用意されたようです。

System.Data.DataSetExtensions を参照する必要があります。
.net Framework 3.5 からの機能のようです。

これでキャストする必要がなくなります。
ただし、Nullの場合の考慮が必要です。。。。

```vb.vb

dr.Field(Of String)("hoge")

```

本来は型付のデータセットを使用したかったのですが、変更が大きかったのでこの方法にしました。
Windowsでも黒い画面、Cygwin設定メモ

都度追記します。

## インストール

基本はデフォルト+以下のパッケージをインストール

* vim
* tree

一度インストールした後は再度インストーラーを叩くと再度パッケージがインストールできるらしい

## cygwin設定

ウィンドウ左上のロゴを右クリックで設定

### Looks
* Transparency「Med」  
背景を半透明に

### Text
* Font「MS ゴシック, 10-point」  
日本語設定にする
* Locale「ja_JP」  
地域を日本に
* Charcter set 「SJIS」
エンコード設定を変更（文字化け対策）

### Keys

* Backspace sends ^H をon  
こちらをみて設定  
[Windows7にCygwinを入れてみた。](http://mariusz137.hatenablog.com/entry/2014/01/12/230118)

### Terminal

* Type 「xterm-256color」

## vim

設定ファイルを作成

```
vim ~/.vimrc
```

コピーペ

```vim
set number
set autoindent
set tabstop=2
set shiftwidth=2
set expandtab
set backspace=indent,eol,start
if has('vim_starting')
  set runtimepath+=~/.vim/bundle/neobundle.vim
endif

call neobundle#begin(expand('~/.vim/bundle'))
NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'Shougo/unite.vim'
NeoBundle 'itchyny/lightline.vim'
NeoBundle 'tomasr/molokai'
filetype plugin indent on
NeoBundleCheck
call neobundle#end()
 
syntax on
colorscheme molokai

```

1. vim再起動して、インストールしますか？と効かれるので``y``
1. しばらく放置
1. 再起動してエラーが出ないことを確認

## その他

### alias

* ls -al

```
alias ll='ls -al'
```

### シンボリックリンク

bash_profileに記載

```
vim ~/.bash_profile
```


デスクトップに飛びたい、cygwinから行くにはメンドなのでリンクをはる。Git for Windowsの設定を真似ました。

```
cd /
ln -s /cygdrive/c/Users/ここはあなたのユーザ名/Desktop/ Desktop
```

これで

```
/Desktop
```

らくらくアクセス
Golang ファーストインプレッション

並行処理のタイプが全く違うので、悩ましいが、どれも違って面白い。曖昧だが自分としてはしっくりくる描写は、各言語を書く時「何が主役だと感じるか？」という印象だ。それぞれ冒頭にそのイメージを書き、その後にちょっとした特性を附記する。

* **golang**： goのコード自身が主役な感じ。チャンネルでの待ち合わせ時に停止する可能性がある。コンテクスト切り替えは、プリエンプティブに勝手に行われる。メッセージは送信者も受信者も、合意の元でチャンネルを介して行う。
* **Erlang**： メッセージ処理の周りにコードがくっつく感じ。メールボックスでの待ち合わせ時に停止する可能性がある。コンテクスト切り替えは、プリエンプティブに勝手に行われる。メッセージは送信者が受信者を決めてメールボックスへ送る。
* **Javascript (node)**： IO処理の周りにコードがくっつく感じ。他のコンテクストがCPUを独占している間、停止する可能性がある。非同期関数の呼び出しによる(半)明示的なコンテクスト切り替え。メッセージは同一オブジェクトへの参照を介して授受する。（Node.js clusterにより複数プロセスにまたがる時は、メッセージイベントにより授受する）
* **Lua (OpenResty)**： ホストプログラムの周りにコードがくっつく感じ。他のコンテクストがCPUを独占している間、停止する可能性がある。coroutineのメソッドによる明示的なコンテクスト切り替え。メッセージは同一テーブルへの参照を介して授受する。

こう書くと、何だか、golangとErlang、Javascriptとluaが似ているかのようだが、それぞれの書き味はかなり違う。golangは良くも悪くもC系のスクリプトを書いている感じで、メッセージ授受はあくまでシンプルなメッセージ送受信ライブラリを使っているかのようだ。いい加減な例えで申し訳ないけど C++ で演算子オーバーロードを使ったライブラリを使っている手応えに似ているかもしれない。いずれにせよ、メッセージ授受を書く場所を選ばないように感じる。Erlangはメッセージ送受信を中心に書く感じで、メッセージ処理スクリプト、というイメージだ。Javascriptとluaの差は、まあここでの話題から外れるし、Javascript（node.js）の「抜け道の多さ」みたいなものを説明するだけでかなり文章を費やしそうなので、割愛する。

なので、 golang では、メッセージパッシングの文脈上のタイミングが自由な分、メッセージ体系を慎重に組み立てないとヤバいことになる予感がする。また、メッセージパッシングが主従の「従」になるので、 golang で書いたコードは、Erlang, Javascript, lua には訳しにくそうだ。むしろ、 C++, Java, C# みたいなC系の言語との相互訳のほうが容易そう。いずれにせよ、golangは他の言語では状態変数や（EventEmitterみたいな）イベントラベルなどの状態を持つべきところを、チャンネルがそこここに挟まった制御フローとして記述できる可能性が高いように思う。どちらが書きやすい、というものでもないが、ライブラリ作者には辛く、アプリケーション作者には優しい、というのが文字通りファーストインプレッションだ。そのあたりはもう少しパターンを知らないと確かなことは言えない。

また、これも、もうちょっと書いてみないとわからないけれど、ウェブアプリを書く際、セッション毎にgoroutineを立ち上げて、**ページ遷移やSPA内状態遷移を、そのまま制御フローとして書く**、というような可能性も感じる。そういう書き方はしてみたかったので、目下それを実現する、というマイルストーンをおいても良いかもしれない。言葉としては単純だが、某ライブラリ同様、外観デザインとの分離が難しくなる予感がするけどね。

とりあえず、あまりに違って混乱しそうにないので、CoffeeScriptとのマルチリンガルのまま進めりゃ良いじゃん、ということになった。ちゃんちゃん
2015-06-17 comment > FIXME: / HACK: > FIXMEの実例

引用: The Art of Readable Code > Comment the Flaws in Your Code
No. 1756 / 6036 (Kindle)
p61 (日本語の本)

コメントで使うもので以下のMarkerが興味深かった。

>FIXME: Known-broken code here
>HACK: Admittedly inelegance solution to a problem

FIXME:があればうまく動いていないことがわかる。HACK:があればまだ改善点があることがわかる。

<hr>
FIXME:の実例を以下で見つけた。
https://github.com/mamedev/mame/commit/a929b15424546e929769e028f12b8c99b237ec34

> FIXME: The io ports are designed as open collector outputs. Bits 7 and 8 of...
[matlab]Obtain vectors that have a specific number

## イントロ

行列から、特定の数字を含む行の
全てを取得する方法を調べたので報告します。

[How to check if a number is in an array?](http://www.mathworks.com/matlabcentral/newsreader/view_thread/162725)

## 事例

下記のような行列から、

```
     1    10     2     4     5
     ...  ...   ...   ...    ...
     ...  ...   ...   ...    ...
     1    10     2     4     5
     1    10     2     4     5
     3    11    14     0     9
     ...  ...   ...   ...    ...
     ...  ...   ...   ...    ...
     ...  ...   ...   ...    ...
     3    11    14     0     9
     3    11    14     0     9
```

下記のようなものだけ取得したい。

```
     3    11    14     0     9
     ...  ...   ...   ...    ...
     ...  ...   ...   ...    ...
     ...  ...   ...   ...    ...
     3    11    14     0     9
     3    11    14     0     9
```



## サンプルコード

```matlab:grep_matrix.m
a = [1 10 2 4 5];
b = [3 11 14 0 9];
Mat = [repmat(a, 107, 1); repmat(b, 16, 1)];
Mat(any(b(1) == Mat, 2), :);
```

## 解説

サンプルコードを走らせるとわかりますが、
事例をみたす実装ができています。
特定の数字を含む行Vectorを探して
1/0を返すany関数を使って、行列について
Mat(any, :)と書くことで目的は達成されました。
gulpでphp環境  ～ gulp-connect-php ～

gulp環境で、PHPを使いたくて、browser-syncも使いたかった時に調べたメモ。

調べてた結果「[gulp-connect-php](https://www.npmjs.com/package/gulp-connect-php)」に行きついた。
他にもいろいろ方法はあるみたいだけど、「[gulp-connect-php](https://www.npmjs.com/package/gulp-connect-php)」はシンプルで良いと思われる。

```lang:node_modulesインストール
npm init
npm install --save-dev gulp
npm install --save-dev gulp-connect-php
npm install --save-dev browser-sync
```

```js:gulpfile.jsサンプル（wwwディレクトリ内にPHPを設置）
var gulp = require('gulp'),
    connect = require('gulp-connect-php'),
    browserSync = require('browser-sync');

gulp.task('connect-sync', function() {
  connect.server({
    port:8001,
    base:'www'
  }, function (){
    browserSync({
      proxy: 'localhost:8001'
    });
  });
});

gulp.task('reload', function(){ 
  browserSync.reload();
});

gulp.task("default",['connect-sync'], function() {
  gulp.watch("./www/**/*.php",["reload"]);
});

```

と自分のmac環境だと動いたけど、windows環境だとうんともすんとも動かずで、
オプションにphpのexeとiniを指定出来るので、そっちを指定する方法で試したところ解決。
※このオプションのおかげでPHPのバージョン毎の環境が柔軟に作れて便利かも。

```js:gulpfile.jsサンプル（bin指定Windowsバージョン）
var gulp = require('gulp'),
    connect = require('gulp-connect-php'),
    browserSync = require('browser-sync');

gulp.task('connect-sync', function() {
  connect.server({
    port:8001,
    base:'www',
    bin: 'C:/xamp/php/php.exe',
    ini: 'C:/xamp/php/php.ini'
  }, function (){
    browserSync({
      proxy: 'localhost:8001'
    });
  });
});

gulp.task('reload', function(){ 
  browserSync.reload();
});

gulp.task("default",['connect-sync'], function() {
  gulp.watch("./www/**/*.php",["reload"]);
});

```

```js:gulpfile.jsサンプル（bin指定Macバージョン）
var gulp = require('gulp'),
    connect = require('gulp-connect-php'),
    browserSync = require('browser-sync');

gulp.task('connect-sync', function() {
  connect.server({
    port:8001,
    base:'www',
    bin: '/Applications/MAMP/bin/php/php5.6.2/bin/php',
    ini: '/Applications/MAMP/bin/php/php5.6.2/conf/php.ini'
  }, function (){
    browserSync({
      proxy: 'localhost:8001'
    });
  });
});

gulp.task('reload', function(){ 
  browserSync.reload();
});

gulp.task("default",['connect-sync'], function() {
  gulp.watch("./www/**/*.php",["reload"]);
});

```
勿論xamppのapacheは起動しなくても大丈夫。

他にもいろいろオプションがあるみたい。
詳しくは、「[gulp-connect-phpのページ](https://www.npmjs.com/package/gulp-connect-php)」をどうぞ。

※追記（6/17）
自分のWindows環境でデフォルト動かなかったのは、PHPにPATHが通ってなかったからでした。。
node_module内にPHPサーバーの機能が入っているのかと勘違いしました。

※追記（6/22）
Macのmamp内のPHPを指定するバージョンを追記しました。
jquery-validation-engineのポップアップを中方付近に表示させる方法

いい感じだったので共有します。
#方法

`promptPosition`に`topLeft`と余白を指定します。

````js
$(function(){
  $('form#id').validationEngine({
    promptPosition: "topLeft:130"
  })
})
````

## before
幅が狭い場合、画面からはみ出ていました。
![image](https://qiita-image-store.s3.amazonaws.com/0/37516/57d37381-6ea3-0771-09f4-b1108ce57db6.png)

## after
![image](https://qiita-image-store.s3.amazonaws.com/0/37516/b94c4d6d-dcca-1c46-81a6-7b8a0b50572d.png)


以上です。

#参考
https://github.com/posabsolute/jQuery-Validation-Engine
http://stackoverflow.com/questions/21316625/jquery-validation-engine-position-arrow-centerright
http://stackoverflow.com/questions/14560965/how-to-fix-positioning-error-with-jquery-validation-engine-and-twitter-bootstrap
Spark 1.4の新機能Spark UIのVisualizationを試す


![スクリーンショット 2015-06-17 10.38.26.png](https://qiita-image-store.s3.amazonaws.com/0/36931/ac9c0622-3ff7-0e0c-59fe-a8f54b0ee34a.png)


Spark 1.4がリリースされました。
機能追加についてはリリースノートを参照。
https://spark.apache.org/releases/spark-release-1-4-0.html

一番すぐに試せるのはDAGのモニタリングやSparkStreamingのモニタリングができるVisualization機能の追加でしょう。
これは得に既存のコードの改変も必要なくライブラリを1.3から1.4にすればSparkUIですぐ試せます。

SparkUI http://localhost:4040/


## Spark1.4 + SparkStreamingを利用するbuild.sbt

```scala
version := "1.0"

scalaVersion := "2.10.5"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.4.0"
libraryDependencies += "org.apache.spark" %% "spark-streaming" % "1.4.0"
libraryDependencies += "org.apache.spark" % "spark-streaming-twitter_2.10" % "1.4.0"
```

## Twitterからデータをリアルタイムに取得しSparkStreamingで取得集計するプログラムを書く

今回つかったフル版のソース
https://github.com/AKB428/mikasa_ol/tree/feature/spark14



![スクリーンショット 2015-06-17 11.57.19.png](https://qiita-image-store.s3.amazonaws.com/0/36931/396c754e-bb99-f04d-a586-6c867e3ecd91.png)



http://lovelive-net.com/5/
http://lovelive-net.com/60/

こんな感じで毎分、直近5分、直近60分のTwitterワード集計ランキングを行うプログラムを走らせる




## Spark起動

``
sbt
run
``

## SparkUI にアクセス 

Sparkを動かしているのが外部サーバー（VPS等）ならSSHポートフォワードする

```
ssh -L 14040:XXX.XXX.XXX.XXX:4040 user@server_hostname
```

XXX.XXX.XXX.XXXがサーバーIP

この場合はport14040にアクセスする。

![スクリーンショット 2015-06-17 10.35.31.png](https://qiita-image-store.s3.amazonaws.com/0/36931/8dbed7e4-59be-d27d-ace9-104df5665969.png)


Event lineを押下


![スクリーンショット 2015-06-17 10.36.10.png](https://qiita-image-store.s3.amazonaws.com/0/36931/f7f0891d-dfb0-ab41-e1d8-61ea38e0b0c6.png)
![スクリーンショット 2015-06-17 10.36.16.png](https://qiita-image-store.s3.amazonaws.com/0/36931/8473f5d5-bb9d-4234-35e5-3542249ca202.png)


青い四角を押下


DAG Visualizationを押下(たぶん直近のものしかデータが見れない）

![スクリーンショット 2015-06-17 10.37.58.png](https://qiita-image-store.s3.amazonaws.com/0/36931/d2f25ca5-b638-8da1-f7e5-fd956fa20c08.png)

![スクリーンショット 2015-06-17 10.38.26.png](https://qiita-image-store.s3.amazonaws.com/0/36931/1e1363ac-e0f2-6a7e-185b-9d33643add28.png)

![スクリーンショット 2015-06-17 12.06.39.png](https://qiita-image-store.s3.amazonaws.com/0/36931/8ccb902d-9369-8e1b-f40b-61a7d5376777.png)


Timeline Eventを押下

![スクリーンショット 2015-06-17 10.41.26.png](https://qiita-image-store.s3.amazonaws.com/0/36931/6d0720e3-4d50-66f5-cb51-d53868b68a94.png)


## Spark Streaming タブを押下

![スクリーンショット 2015-06-17 10.39.26.png](https://qiita-image-store.s3.amazonaws.com/0/36931/11896880-af18-18b8-c738-9f4db71970c3.png)
GoでRabbitMQに接続してみる

**環境・バージョン**
Windows 7
go 1.4.2
RabbitMQ 3.4.1
go amqp 0.9.1

###AMQPクライアントの導入

```
go get github.com/streadway/amqp
```

###Subscriber

```go:sub.go
package main

import (
    "fmt"
    "log"
    "github.com/streadway/amqp"
)

var amqpURI string = "amqp://localhost:5672"

func failOnError(err error, msg string) {
	if err != nil {
		log.Fatalf("%s: %s", msg, err)
		panic(fmt.Sprintf("%s: %s", msg, err))
	}
}

func main() {
    conn, err := amqp.Dial(amqpURI)
    failOnError(err, "Failed to connect to MQ")
    defer conn.Close()

    channel, err := conn.Channel()
    failOnError(err, "Failed to open a channel")

    q, err := channel.QueueDeclare(
        "my-queue", // name
        false,      // durable
        false,      // delete when unused
        false,      // exclusive
        false,      // no-wait
        nil,        // arguments
    )
    failOnError(err, "Failed to declare a queue")

    messages, err := channel.Consume(
        q.Name,     // queue
        "",         // consumer
        true,       // auto-ack
        false,      // exclusive
        false,      // no-local
        false,      // no-wait
        nil,        // arguments
    )
    failOnError(err, "Failed to register a consumer")

    forever := make(chan bool)

    go func() {
        for data := range messages {
            log.Printf("%s\n", data.Body)
        }
    }()

    log.Printf(" [*] Waiting for messages. To exit press CTRL+C\n")
    <-forever
}
```

###Publisher

```go:pub.go
package main

import (
    "fmt"
    "log"
    "github.com/streadway/amqp"
)

var amqpURI string = "amqp://localhost:5672"

func failOnError(err error, msg string) {
	if err != nil {
		log.Fatalf("%s: %s", msg, err)
		panic(fmt.Sprintf("%s: %s", msg, err))
	}
}

func main() {
    conn, err := amqp.Dial(amqpURI)
    failOnError(err, "Failed to connect to MQ")
    defer conn.Close()

    channel, err := conn.Channel()
    failOnError(err, "Failed to open a channel")

    sendMessage(channel, "my-queue", "Hello, AMQP1!!")
    sendMessage(channel, "my-queue", "Hello, AMQP2!!")
    sendMessage(channel, "my-queue", "Hello, AMQP3!!")
}

func sendMessage(channel *amqp.Channel, queueName string, payload string) {
    err := channel.Publish(
        "",     // exchange
        queueName,  // routing key
        false,      // mandatory
        false,      // immediate
        amqp.Publishing{
            ContentType:    "text/plain",
            Body:           []byte(payload),
        })
    failOnError(err, "Failed to publish a message")
}
```

###実行結果

```
2015/06/17 11:27:40  [*] Waiting for messages. To exit press CTRL+C
2015/06/17 11:27:45 Hello, AMQP1!!
2015/06/17 11:27:45 Hello, AMQP2!!
2015/06/17 11:27:45 Hello, AMQP3!!
```
paloaltoのGlobalProtectクライアントがYosemiteで動かない時の対処


えらくニッチな内容になりますが、とりあえず備忘録的に。
[paloalto](https://www.paloaltonetworks.jp/)の[GlobalProtect](https://www.paloaltonetworks.jp/products/technologies/globalprotect.html)クライアントがYosemiteで動かない時の対処方法です。

動かないっていうか、「接続中」のままでステータスがまったく変わらないので、結局繋がらない。原因はカーネルのモードにあるらしい。

```
$ sudo nvram boot-args="kext-dev-mode=1" 
```
で、再起動。

繋がるようになります。

一回設定すると二度と同じコマンド打たない気がしてしょうがないのです。っていうかググれば一発で出るだろコレ、という感じでもあるのですが。とりあえず書いておきますね。

ググって一発で出てきたサイトは[こちら](https://networkinferno.net/palo-alto-globalprotect-yosemite)。
カスタマイズ方法

##Bootstrapのカスタマイズ方法
###CSSを上書きする
カスタマイズ用のCSSファイルを作ってbootstrapのCSSより後から読み込む。

カスタマイズ用CSSは次の2つの目的に分けている。

+ bootstrap-custom.cssは全体に適用するものを書く。
+ my.cssは一部分だけ（このdivの中身だけ変えたい）というものを書く。

Bootstrapのデフォルトと異なるスタイルを適用しているのが全体なのか一部なのか意識するためである。

###公式サイトの「Customize and download」を使う
ここでlessの変数を変更すると、それを反映したcssがダウンロードできる。

###Customize and downloadで設定できない場合
lessの変数になっていない項目は、CSSを上書きする。

###部分的に変えたい場合
たとえばサイト内にあるテーブルのうち、ある一つのテーブルのスタイルだけを変えたいといった場合、CSSを上書きする。
部分的な適用であることを意識するために、my.cssに書くとよい。
CakePHP3(Phinx)のMigrationでidの定義を変更する

CakePHP3(Phinx)のMigrationでtableをcreateすると、primaryの`id`カラムは自動的に生成されますが、signed integerでauto_incrementになるので、名前を変えたりvarcharにしたりunsignedにしたり等、変更したい場合は、以下のようにします。

# 名前を変える

`id`ではない違う名前にしたい場合は、`$this->table()`の`id`オプションで指定します。

```php
$table = $this->table('new_table_name', ['id' => 'my_id_name']);
$table
    ->addColumn('title', 'string', ['limit' => 100])
    ・・・
    ->create();
```

# 自動生成をやめる

`$this->table()`のオプションで、`'id' => false`とすると自動生成されないので、自動生成をやめて、`addColumn()`で追加します。
`primary_key`オプションは、配列にして複数カラムを指定することもできます。

以下はidが varchar(50) なtableを作る例です。

```php
$table = $this->table('new_table_name', ['id' => false, 'primary_key' => 'id']);
$table
    ->addColumn('id', 'string', [
        'default' => null,
        'limit' => 50,
        'null' => false,
    ])
    ->addColumn('title', 'string', ['limit' => 100])
    ・・・
    ->create();
```

# `create()`の後に`changeColumn()`する

デフォルトではidはsignedなintegerになるので、unsignedにするには、`create()`した後に`changeColumn()`すれば良いです。
(`signed`オプションは、MySQLにのみ適用されるオプションです。)

```php
$table = $this->table('new_table_name');
$table
    ->addColumn('title', 'string', ['limit' => 100])
    ・・・
    ->create();
$table
    ->changeColumn('id', 'integer', [
        'identity' => true,
        'signed' => false,
    ])
    ->save();
```

`'identity' => true`を書かないと、auto_incrementじゃなくなってしまうので注意。
alfredでエイリアスファイルを開きたいとき

iOSシミュレータをalfredで一発起動したいけど、候補に出ない泣
ってなってたので、調べました。

Featuresタブから、Default ResultsのAdvancedをクリックして出てきたウインドウに
追加したいファイルをドラッグアンドドロップで行けます。簡単簡単♪

![Screen Shot 2015-03-25 at 17.46.58.png](https://qiita-image-store.s3.amazonaws.com/0/71629/f1f30767-a5f4-b1c6-3e12-c8d5c4313ae0.png)


これでiosシミュレータが一発で行ける！
助かりました。

![Screen Shot 2015-03-25 at 17.48.19.png](https://qiita-image-store.s3.amazonaws.com/0/71629/4a2b111c-a0d9-957f-5a34-72a2f96b926b.png)
xcodeのInterface Builderでビュー作成MEMO。（主にAutolayauto機能辺り）

xcodeのInterface Builder使って、画面作成がぱっと見便利そうだったけど、最初使ってみたらどう使ったらよいのか分からなかったので、ここさえ見れば大丈夫的なURLを集めました。

●入門集
https://codeiq.jp/magazine/2014/02/6035/
http://dev.classmethod.jp/references/ios-7-xcode-5-auto-layout-1/
http://dev.classmethod.jp/references/ios-7-xcode-5-auto-layout-2/

●HTMLみたいに画面の大きさに対して、何%と設定する方法
http://qiita.com/tmokita/items/abf8ec17469185de2d97
セットした画像が表示されないとき

xcodeのImages.xcassetsにセットした画像で読み込めないものがあった。

Images.xcassets上では表示できている。
ビュー側はxibで実装していたが、xib上でも表示されているし、Referenching Outletの設定も正常に出来ている。
試しにプログラム上で、

```objc
UIImage *image = [UIImage imageNamed:@"Sample.png"];
[self.view addSubview:image];
```
とか

```objc
UIImage *image = [UIImage imageNamed:@"Sample"];
[self.view addSubview:image];
[self.view bringSubviewToFront:image];  //最前面にする処理
```

と書いても、画像が表示されなかった。

下記サイトを参考にして、解決した。
http://kyo-asu-aozora.seesaa.net/article/257890808.html
ddrescueでHDDをイメージ化


## 参考

* [HDDが壊れそうなときにdd使うのは古い。というわけでGNU ddrescue - unsuitanの日記](http://unsui.hatenablog.com/entry/2015/03/26/224512)


## 手順

```bash:ビルド
apt-get install -y lzip build-essentilal
cd /opt
wget http://ftp.jaist.ac.jp/pub/GNU/ddrescue/ddrescue-1.19.tar.lz

tar xf dd*lz
cd dd*

./configure
make
make install
```


```bash:使い方
ddrescue -n -v /dev/sdb 80gb.img ddrescue.log
```

```bash:こんな感じの画面になる
GNU ddrescue 1.19
About to copy 80026 MBytes from /dev/sdb to 80gb.img.
    Starting positions: infile = 0 B,  outfile = 0 B
    Copy block size: 128 sectors       Initial skip size: 128 sectors
Sector size: 512 Bytes

Press Ctrl-C to interrupt
rescued:    80022 MB,  errsize:   3944 kB,  current rate:      284 B/s
   ipos:    41435 MB,   errors:     503,    average rate:    1183 kB/s
   opos:    41435 MB, run time:   18.77 h,  successful read:       0 s ago
Finished
```
出荷ステータス変更APIでパラメータエラー

http://developer.yahoo.co.jp/webapi/shopping/orderShipStatusChange.html
を参考に、PHPで出荷ステータス変更リクエストのスクリプトを組んでます。
上記ページのサンプルリクエストと同じように、
&lt;ShipMethod&gt;ヤマト宅急便&lt;/ShipMethod&gt;
をリクエストしたところ、下記エラーが返ってきました。
&lt;Code&gt;od90101&lt;/Code&gt;
&lt;Message&gt;Request Parameter Error : ShipMethod</Message&gt;

ちなみに、
&lt;ShipMethod&gt;ヤマト&lt;/ShipMethod&gt;　や、
&lt;ShipMethod&gt;宅急便&lt;/ShipMethod&gt;　や、
半角英数字の文字列はエラー無く更新されます。

また、配送メモ、
&lt;ShipNotes&gt;ヤマト宅急便&lt;/ShipNotes&gt;　は
エラー無く更新されます。

ShipMethod　の日本語の値の設定方法がおかしいのでしょうか？
ご教示ください。
SHOW PROCESSLISTの結果をソート


プロセス一覧を表示する`SHOW PROCESSLIST`は便利だけど、TIMEでソートができないので、多くのプロセスの中で時間がかかっているものを探したい時などにちょっと面倒。

そんな時は

```
SELECT * FROM information_schema.PROCESSLIST ORDER BY TIME;
```

を使うと、TIMEでソートができるのでとても便利。
/etc/resolv.conf について

イマイチ分かっていなかったのでメモ

## 先にまとめ

- レゾルバ設定ファイル
- 主にネームサーバ(DNSサーバ)のIPアドレスを書くところ
- 後、searchや、domainを設定すると、デフォルトのルートドメインを指定できる


## resolv.conf って何のファイル?

```
resolv.conf - レゾルバ設定ファイル  
```
[Man page of RESOLV.CONF](http://linuxjm.osdn.jp/html/LDP_man-pages/man5/resolv.conf.5.html)

## レゾルバ(resolver) って何?

```
リゾルバとは、IPアドレスとドメイン名を結びつけるDNSにおいて、ネームサーバにホスト名を通知してIPアドレスの検索を依頼したり、その逆を依頼したりするクライアント側のプログラム。
アプリケーションソフトがIPアドレスやホスト名を必要とする場合には、通常リゾルバを介して名前解決が行われる。
リゾルバは一つ以上のネームサーバのアドレスを知っており、そのネームサーバに問い合わせを行い、返ってきた答えをアプリケーションに渡す。
...
通常はOSに付属するライブラリの機能として提供される。
```
[リゾルバとは｜DNSリゾルバ｜ネームリゾルバ - 意味/解説/説明/定義 ： IT用語辞典](http://e-words.jp/w/%E3%83%AA%E3%82%BE%E3%83%AB%E3%83%90.html)


```
resolver は、インターネットのドメインネームシステム (DNS) へのアクセスを提供する C ライブラリのルーチン群である。
レゾルバ設定ファイルには、レゾルバルーチンがプロセスによって最初に 起動されたときに読み込まれる情報が格納されている。
このファイルは人間に可読なように設計されている。
キーワードと値のリストが含まれ、いろいろなタイプのレゾルバ情報を提供する。
```
[Man page of RESOLV.CONF](http://linuxjm.osdn.jp/html/LDP_man-pages/man5/resolv.conf.5.html)


## で、resolv.conf には何を書くの?

```
「/etc/resolv.conf」は、自分のマシンが利用するDNSサーバの情報（IPアドレス）
```

- [Linux初心者の基礎知識 - /etc/resolv.conf -](http://www.linux-beginner.com/linux_setei2.html)


```
基本的には，以下の設定があります．

  nameserver ネームサーバのIPアドレス
  domain     ドメイン名
  search     検索リスト


最低必要なのが，nameserver です．これで，ネームサーバを指定します．
```
- [resolv.conf を触ってみよう - いますぐ実践! Linuxシステム管理 / Vol.021](http://www.usupi.org/sysad/021.html)

## ネームサーバー = DNSサーバ

```
ネームサーバーとは、インターネット上でドメインとWebサーバーやメールサーバーを結びつけるための名前解決をするサーバーです。
```

- [【ドメイン】ネームサーバー（DNSサーバー）とは？ | よくある質問 | お名前.comヘルプセンター](http://help.onamae.com/app/answers/detail/a_id/8072)


## domainとsearchについて

[DNS (resolver) setting for UNIX](https://www.st.ryukoku.ac.jp/services/dns-unix.html)


```
 「domain st.ryukoku.ac.jp」と指定した場合、 telnet hogehoge を 実行すると、OS は まず

    hogehoge.st.ryukoku.ac.jp 

というホストの IP アドレスを検索します。 このホストがみつからない場合、hogehoge の IP アドレスを検索します。 それでも見つからない場合はエラーを返します。 
```


```
 一方、 「search st.ryukoku.ac.jp math.ryukoku.ac.jp elec.ryukoku.ac.jp」 とした場合は

    hogehoge.st.ryukoku.ac.jp
    hogehoge.math.ryukoku.ac.jp
    hogehoge.elec.ryukoku.ac.jp 

を順に検索してくれます。
```
Webサーバーへ静的ホームページをgitから直接配置する



## モチベーション

ホームページのソースコードをgitで管理したい。

ソースコードをgitで管理してもFTPを使って手動で配置していると
Webサーバー上のファイルを直接編集して、なぜかgit上のファイルと乖離します。

配置手順を自動化して、gitにあるソースコードとWebサーバー上のソースコードを同じに保ちましょう。

## 要するに
Webサーバーにsshログインして`git pull`します。

## 前提条件
Webサーバー

- sshログインできる
- gitコマンドがインストールされている

gitサーバー

- Deploy keysを設定できる
- githubまたはgitlabを想定

## 手順
### リポジトリを作成

```
cd homepage
git init
touch index.html
git add .
git commit -m 'Initial Commit.'
git remote add origin git@github.com:oreore/homepage.git
git push -u origin master
```

### WebサーバーのDeploy keysを設定
Webサーバーにsshログインします。

秘密鍵を作成します。

```
ssh-keygen -t rsa -C "$your_email"
```

公開鍵を表示します。

```
cat ~/.ssh/id_rsa.pub
```


プロジェクトの設定からDeploy keysを選び、表示した公開鍵を登録します。


### Webサーバーでgit clone

`www`ディレクトリでホームページを公開する例です。

sshログインします。

```
ssh web@oreno.web.server
```

git cloneします。

```
git clone git@github.com:oreore/homepage.git www
```



### Deploy

`web`ユーザーでログインする例です。

```
ssh web@oreno.web.server "cd www; git pull"
```

## 応用編
### ロールバックできるようにタグをつける

```
ssh web@oreno.web.server "cd www; git tag `date +%Y%m%d%H%M%S`; git pull"
```

間違ってタグをつけた際は、Webサーバーにログインして、手動で直前のタグを`git checkout`すれば元に戻せます。

### Webサーバーに秘密鍵でログイン
作業用PCで作成した公開鍵をWebサーバーに送ります。

```
scp ~/.ssh/id_rsa.pub  web@web@oreno.web.server:/home/web
```

Webサーバーにsshログインして、公開鍵を登録します。

```
cat id_rsa.pub >> .ssh/authorized_keys
```

ログインし直します。

```
ssh web@oreno.web.server
```

パスワードを聞かれなければ成功です。
Post時にInternal Server Error with Maximum file multiparts in content reachedとエラーが返る


Rails4.2にて。
Rack側でmultipartのfieldの制限が128個とデフォルトではなっている。

下記の設定追加で回避は可能

```
Rack::Utils.multipart_part_limit = 0
```

下記のコミット見てみると、どうも仕様的にバグっぽい。
https://github.com/rack/rack/blob/8d21788798b521b97beb10047ebf593ddc0aaed2/lib/rack/utils.rb#L75
PhalconのtoArrayはカラム指定できた

知らなかったのでメモ

API作るときに、不要なカラムを除去する必要がありました。（Userのpasswordとか）
今までは、レコードのオブジェクトに対してtoArray()してからunset()していました。
しかし、よく調べてみたらカラム指定で抜き出すことができるようです。
もちろん、ResultSetにも使えるのでとっても便利。

```php
$robot = Robots::findFirst(1);
$robotArray = $robot->toArray(array('id', 'name'));
```

```php
$robots = Robots::find(array("type='virtual'", "order" => "name"));
$robotsArray = $robots->toArray(array('id', 'name'));
```
goでLチカの練習　その２

グリーン、イエロー、レッドの順に点灯。


```
package main
import(
	"fmt"
	"time"
	"sync"
)
var mutex sync.Mutex
func A() {
	for {
		mutex.Lock()
		time.Sleep(500 * time.Millisecond)
		fmt.Println("green on")
		time.Sleep(500 * time.Millisecond)
		fmt.Println("green off")
		mutex.Unlock()
		time.Sleep(1500 * time.Millisecond)
	}
}
func B() {
	for {
		mutex.Lock()
		time.Sleep(500 * time.Millisecond)
		fmt.Println("yellow on")
		time.Sleep(500 * time.Millisecond)
		fmt.Println("yellow off")
		mutex.Unlock()
		time.Sleep(1500 * time.Millisecond)
	}
}
func C() {
	for {
		mutex.Lock()
		time.Sleep(500 * time.Millisecond)
		fmt.Println("red on")
		time.Sleep(500 * time.Millisecond)
		fmt.Println("red off")
		mutex.Unlock()
		time.Sleep(1500 * time.Millisecond)
	}
}
func main() {
	go A()
	go B()
	go C()
	var input string
	fmt.Scanln(&input)
}
```
[WIP]Macのハードディスクを痩せさせる


# Tips
## 太った原因を想像してみる
### 何がHDを占めているのか確認
メニューバーの「」をタップすると、こんなのが出てくるので
![q.png](https://qiita-image-store.s3.amazonaws.com/0/4107/7b35c363-ce94-9294-ae4b-d3374c39d892.png "q.png")
「このMacについて」てのが出てきます。

![スクリーンショット 2015-06-20 22.49.56.png](https://qiita-image-store.s3.amazonaws.com/0/4107/4f308249-5ff3-71ad-1881-fb1cb0fba64d.png "スクリーンショット 2015-06-20 22.49.56.png")

### 容量の大きいフォルダを確認する
`# sudo du -g -x -d 5 / | awk '$1 >= 5{print}'`
容量が5GB以上のフォルダがリストアップされる (出力結果の数字は各フォルダの容量 (単位：GB)

### ブラウザのキャッシュクリア
Google Chrome
メニューバー「Chrome＞環境設定＞詳細設定を表示…＞[閲覧履歴データの消去]」

Safari
メニューバー「Safari＞環境設定＞プライバシー＞[すべての Web サイトデータを削除…]」

# Link
* [ハードディスクの空き容量が極端に少なくなる場合の対処方法](https://discussionsjapan.apple.com/docs/DOC-1081)
* [Macの「ライブラリ」内に貯まっている不要なキャッシュファイルを削除](http://weekly.ascii.jp/elem/000/000/232/232381/)
* [iOS開発していて気がついたら一杯のハードディスクを20GB以上軽くする方法！](http://qiita.com/reikubonaga/items/48987d35fb10b7de6bcc)
* [iTunesから不要なiPhone/iPadのバックアップを削除する方法](http://netafull.net/iphone-tips/048374.html)
* [私が月に1度やってるMacのメンテナンス方法](http://stocker.jp/diary/mac-maintenance/)
Macでcliからseleniumを使うとエラーになる場合


## 参考

* [osx - Selenium and Python on Snow Leopard - Stack Overflow](http://stackoverflow.com/questions/8334706/selenium-and-python-on-snow-leopard)

Firefoxが `/Applications`にないとエラーになる。
自分は`$HOME/app/`などHOMEディレクトリに置くことが多いので遭遇した。

## エラー例

```bash:
$ python mrtg.py
E
======================================================================
ERROR: test_c3 (__main__.C3)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "mrtg.py", line 12, in setUp
    self.driver = webdriver.Firefox()
  File "/Library/Python/2.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 64, in __init__
    self.binary, timeout),
  File "/Library/Python/2.7/site-packages/selenium/webdriver/firefox/extension_connection.py", line 51, in __init__
    self.binary.launch_browser(self.profile)
  File "/Library/Python/2.7/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 69, in launch_browser
    self._start_from_profile_path(self.profile.path)
  File "/Library/Python/2.7/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 92, in _start_from_profile_path
    env=self._firefox_env)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 709, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1326, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

----------------------------------------------------------------------
Ran 1 test in 0.228s

FAILED (errors=1)
```
技術英語 > moving parts @ ハードウェア / ソフトウェア

moving partsというのは「可動部品」のこと。

[vaisala WXT520](http://www.vaisala.com/en/meteorology/products/weatherinstruments/multiweathersensors/Pages/WXT520.aspx)
ハードウェアにおいてはmoving partsがない方が長期運用できるというのはわかる。


ソフトウェアではmoving partsはないだろう、と思っていたが、以下のように言っている人がいた。
[Moving Parts in Software](https://www.subbu.org/blog/2004/11/moving-parts-in-software)

なるほど。
このmoving partsは確かに少ないほうがいいだろう。でも、どういうように少なくするかは設計が難しいと常々思う。
【デザインパターン】 Iteratorパターン

##概要
コンテナオブジェクトと、その要素へのアクセス、走査のためのインターフェイスを独立に実装したパターン

以下の4種類のクラスからなる
1. Iteratorクラス(コンテナオブジェクトの要素にアクセス、走査するためのインターフェイスを定義)
2. ConcreteIteratorクラス(1.で定義したインターフェイスを実装する)
3. Aggregateクラス(1.を生成するためのインターフェイスを定義)
4. ConcreteAggregateクラス(3.で定義したインターフェイスに対して適切な2.のインターフェイスを生成して返す)

##具体例と実装
エンタメサイトの一覧ソート機能を例にすると

上記1~4はそれぞれ
1. 作品イテレータークラス
2. 新着順クラス
3. 作品一覧クラス
4. 映画一覧クラス

が対応する。
コードの詳細は以下

```rb:iterator.rb
class Iterator
  def initialize(aggregate)
    @aggregate = aggregate
    @index = 0
  end

  def has_next?
  end

  def next_item
  end
end
```

```rb:recent_iterator.rb
class RecentIterator < Iterator
  def initialize(aggregate)
    @aggregate = aggregate.sort do |(_k1, v1), (_k2, v2)|
      v1[:published_at] <=> v2[:published_at]
    end
　　@index = 0
  end

  def has_next?
    @index < @aggregate.size
  end

  def next_item
    @index = @index + 1
    item = self.has_next? ? @aggregate.get_by_index(@index) : nil
  end
end
```

```rb:aggregate.rb
class Aggregate
  def initialize
    @works = []
  end

  def get_by_index(index)
  end

  def size
  end
end
```

```rb:MovieAggregate.rb
class MovieAggregate < Aggregate
  def initialize
    @works = []
  end

  def add_work(work)
    @works << work
  end

  def get_by_index(index)
    @works[index]
  end

  def size
    @works.size
  end
end
```

```rb:client.rb
movie_list = MovieAggregate.new
# 映画作品を追加していく
movie_list.add_work(...)
...
iterator = RecentIterator(movie_list)
while iterator.has_next?
  work = iterator.next_item
  puts work.title
end 
```


##メリット
* コンテナオブジェクトと走査のインターフェイスが独立しているため、コンテナの内部表現を公開せずに要素へのアクセスを提供出来る
* あるコンテナオブジェクトに対して複数の走査をサポートできる
* 異なるコンテナに対して、同一のインターファイスで要素にアクセス出来る

##まとめ
コンテナの内部表現を隠蔽して要素へのアクセスを提供するパターン
あるコンテナの要素への複数のアクセス方法が必要な場合、または複数のコンテナの要素に対してアクセスする共通のインターファイスが必要な場合に用いる
NSCalendarUnitはなにをしているのか


iOS初心者です

カレンダーを表示しようとしたときに

```swift
let now = NSDate()
let calendar = NSCalendar.currentCalendar()
let flag = NSCalendarUnit.CalendarUnitYear  |
           NSCalendarUnit.CalendarUnitMonth |
           NSCalendarUnit.CalendarUnitDay   |
           NSCalendarUnit.CalendarUnitHour

calendar.components(flag, fromDate: now) // 日付を取得！
```

こんなかんじのものが出てきました。
`calendar.components`にflagと現在時刻を渡せばよいみたいなのですが、 このflagがなにをしているのかどうも分かりません。

調べてみました。

まずflagの生成に使われている `|` はbit演算子の`OR` です。playgroundで見ると分かりやすいですが


まずは一つの時

```swift
var flag  = NSCalendarUnit.CalendarUnitYear // {rawValue: 4}
```

となり、なにか値を持っているようです。


つぎに2つにすると

```swift
var flag  = NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth // {rawValue: 12}
```

値が増えた！OR演算子を使ってビットを立てているので値が増えるわけですね。


つまり、flagで立てられているbitの部分によって、`calendar.component` メソッドは返り値を変えるようです。


ここで objective-c側の `NSCalendarUnit` の定義を見てみると


```objective-c
enum {
	NSEraCalendarUnit				= 1 << 1,
	NSYearCalendarUnit				= 1 << 2,
	NSMonthCalendarUnit				= 1 << 3,
	NSDayCalendarUnit				= 1 << 4,
	NSHourCalendarUnit				= 1 << 5,
	NSMinuteCalendarUnit			= 1 << 6,
	NSSecondCalendarUnit			= 1 << 7,
	NSWeekCalendarUnit				= 1 << 8,
	NSWeekdayCalendarUnit			= 1 << 9,
	NSWeekdayOrdinalCalendarUnit	= 1 << 10
};
```

こうなってます。 `<<` で左シフトして、10桁までのbitのうちそれぞれ1つづつが立ててある定数を定義しているみたいです。

先ほど

```swift
var flag  = NSCalendarUnit.CalendarUnitYear // {rawValue: 4}
```

で4だったのは `CalendarUnitYear` が `1<<2`、つまり 2進数で `100` なので、10進数に直して `4`だったわけです

つまりこれも、 

```swift
var flag  = NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth // {rawValue: 12}
```

`0100`　と `1000` を OR演算しているので、 `1100` で `12`、というわけでした。


iOS初心者すぎて理解が微妙ですが、bitを使って場合分けをするの、なかなか便利そうですね。
`component` メソッドが中でどのようにflagを処理しているのかまで調べたかったですがまた今度
p5.jsで何か作るときにbackground()の挙動でハマっていた


たまに触るけど、全然慣れないp5.js http://p5js.org/

![](http://i.gyazo.com/89b9c2009672034db7dd871d3872c70a.gif)

こんな感じのものを作りました。

* クリックしていると両サイドの線が集まってきて、真ん中にくると画面の色が変わります。
* クリックしていない状態だと線が外に逃げます。

## setup()とdraw()とbackground()
それで、何が問題かというと。

setup()とdraw()とbackground()の挙動について理解していませんでした。

p5では`backgroung()`で背景色を指定してあげます。

例えば、

```app.js
function setup() {
  createCanvas(800, 400);
  background(0);//背景黒
}
```

こんな感じにすると背景黒のキャンバスが表示されます。
まずは問題無いです。

その黒い画面にこんな感じで図形を動かす場合、どうするか
![](http://i.gyazo.com/1dafa1cf5d92102e4b6665a3084fd881.gif)

### background()が分かってなかった例
この流れで、作るとこんな感じになりそうですね。

```app.js
var x,y;

function setup() {
  createCanvas(800, 400);
  stroke(255); //線を白く
  background(0);//背景黒
  y = height * 0.5; //画面中央
  x = 0;
}

function draw(){
	x++;
	rect(x, y, 10, 1);
}

```

これを実行するとこうなります。

![](http://i.gyazo.com/700d8aaa9fcb8381ee8b94dd85a1eab1.gif)

(これはこれで、こういう挙動をさせたい場合にはいいかもしれませんが)意図する挙動と違いました。

雰囲気で予想はつきますが、フレームの更新がされずにフレーム毎に上書きしているっぽいですね。前のフレームで描画した内容のクリアはどこでやるんだ...というところですね。

### [ドキュメント](http://p5js.org/reference/#/p5/background)によるとクリアがbackground()の中で行われてるみたい

これはメソッド名が分かりにくいなぁと感じました汗
ドキュメントちゃんと読んで無かった自分が悪いんだけど汗

>Description
The background() function sets the color used for the background of the p5.js canvas. The default background is light gray. This function is typically used within draw() to clear the display window at the beginning of each frame, but it can be used inside setup() to set the background on the first frame of animation or if the background need only be set once.

なるほどですね。
**書き換えが発生し無い場合は最初のsetup()で一回だけ呼ぶやり方でいいけど、
基本的にはbackground()はdraw()の中で呼び出しましょうとのこと。**

ということでこうなります。

```app.js
var x,y;

function setup() {
  createCanvas(800, 400);
  stroke(255); //線を白く
  y = height * 0.5; //画面中央
  x = 0;
}

function draw(){
  background(0);//背景黒
  x++;
  rect(x, y, 10, 1);
}
```

##ひとまず完成

という感じで挙動に無駄になやんだ感じでしたがひとまづの完成。

```app.js
var CW = 1000,
    CH = 400;
var sceneFlag = 0,
    clickFlag = 0;
var bgColor = 0,
    stColor = 255;
var y,x1,x2;
var speed = 3;

function setup() {
  createCanvas(CW, CH);// Create object
  y = height * 0.5; //画面中央に
  x1 = 0;
  x2 = width;
}

function draw() {
  background(bgColor);//背景を黒に
  stroke(stColor); //線を消す

  if(clickFlag === 0){
    //クリックしていない場合
    if(x1 > 0) x1 = x1 - speed;
    if(x2 <= width) x2 = x2 + speed;
  }else{
    //クリック長押し中
    x1 = x1 + speed;
    x2 = x2 - speed;
    if(sceneFlag === 0 && x2 <= CW/2){
      sceneFlag = 1; //一度切り
      bgColor = color('magenta');
      stColor = bgColor;
    }
  }
  rect(0, y, x1, 1);
  rect(x2, y, width, 1);
}

//クリック長押し処理
var loop;
var pressLoop = function(){
  clickFlag = 1; //クリック中
};

function mousePressed() {
  loop = setInterval(pressLoop,16);
}

function mouseReleased(){
  clearInterval(loop);
  clickFlag = 0; //クリックしていない
}
```
ポチポチやるだけで数万オーダーのテストデータを生成する

# 大量のダミーデータを生成できるサイトを紹介します。
ここ
http://www.databasetestdata.com/
![1.PNG](https://qiita-image-store.s3.amazonaws.com/0/15448/036d1772-c48d-5024-8e45-4e9de9262df3.png)

## 使い方はちょー簡単
1. **Table Structureを選択する。**　
構造は、User Account, Blog Post, Shop Product, Full Customの4つ。　構造が決まっているものでも、カラムは自由に追加、削除できます。

2. **Export Format　を選択する。**
出力形式は、　JSON, CSV, XMLの3種類

3. **Generated rows　を入力する**
生成したいデータ量を指定します。1万データぐらいならさくっとダウンロードできました。10万件は返ってきませんでした。。

4. **必要に応じてカラムの追加、削除を行う**
カラムのデータとして、　Name, Address, Number, Internetなどがあり、テストデータとして便利なものが揃っています。

5. **データ生成！**
Generate data ボタンでデータ生成！

## 使い道
RDBに入れてもいいし、Kibanaとか触ってみたいけど、お手頃なデータが無いときとかにこれでデータ生成して、ElasticSearchにぶち込んでKibanaを堪能するとか、Rでデータ分析体験したいけどデータがない時とかとか、結構使い道はあるんじゃないでしょうか。
Haskell の関数を point-free スタイルにした時の定義を教えてくれるコマンド

Haskell の勉強中に面白そうなものを見つけたのでメモ。
勉強中なのでいろいろ間違ってるかも。

# point-free スタイルとは

一番簡単な例だと

```hs
f x = g x
```

な関数の定義を

```hs
f = g
```

な感じにする。引数がないので、 point-free ポイントフリーというらしい。

```f x = g (h x)``` と ```f y = g (h y)``` は、 x とか y みたいに引数につける名前は違うけど、本質的には同じ。
どちらもポイントフリースタイルでは ```f = g . h``` になる。
その点をブレなく表現できるということが、関数型プログラミング的には美しいのかもしれない（？）

# 便利な pointfree コマンド

↑ のようなポイントフリースタイルでの書き方を教えてくれるコマンドがあった

```console
$ pointfree 'f x = g x'
f = g
```

とか

```console
$ pointfree 'f x = g (h x)'
f = g . h
```

みたいな感じ。

もっと複雑に 4 つの引数 x, y, z, w を取り、順番を入れ替えて g に適用するような関数でもできた。

```console
$ pointfree 'f x y z w = g w z x y'
f = flip . (flip .) . flip (flip . flip g)
```

という感じ。

いくつかためしたところ、 do 記法の変換はできないようだった。残念。

# インストール方法

```console
$ cabal install pointfree
```
swiftでif let let let な時のインデントの話


Optionalな値をまとめて剥ぎとりたり場合は、カンマでletをつづけてかけるらしい。

```swift
if let ... ,
    let ... ,
    let ... ,
    let ... { ... }
else { ... }
```

ひとつでも nil があれば else を実行するらしい。

インデントがずれて微妙だとおもってたのだけど、ifの後のスペースを二つにすると、ちょっとだけ良い感じになることに気づいた。

```swift
if  let ... ,
    let ... ,
    let ... ,
    let ... { ... }
else { ... }
```

具体例もあげとこう。

```
func letletlet(x: Int?, y: Int?, z: Int?) -> Int? {
    if  let xx = x,
        let yy = y,
        let zz = z {
            return xx + yy + zz
    } else {
        return nil
    }
}

letletlet(1, 2, 3)   // => 6
letletlet(1, nil, 2) // => nil
```

どっちにしろ、ifの中が微妙な気がするね。
swiftで [Int?] な配列を [Int]? にするのはどうするのが良いのだろうか


オプショナルな値の配列を配列のオプショナルに変えたいことはよくある。(たぶん)
`[Int?]` を `[Int]?` にしたい。

Haskellを例にだす。

```haskell
[Just 1, Just 2, Nothing, Just 3] :: [Maybe Int]
sequence [Just 1, Just 2, Nothing, Just 3] :: Maybe [Int] -- => Nothing
sequence [Just 1, Just 2, Just 3] :: Maybe [Int]  -- => Just [1,2,3]
```

ひとつでも`Nothing`があれば`Nothing`になる。

Optinalに限定にしているので、こんな風に書いておいた。

```swift
func sequence<T>(xs: [T?]) -> [T]? {
    var result: [T]? = []
    for optX in xs {
        if let x = optX {
            result?.append(x)
        } else {
            return nil
        }
    }
    return result
}

let xs: [Int?] = [1, 2, nil, 3] // => [{Some 1}, {Some 2}, nil, {Some 3}]
sequence(xs)  // => nil
let ys: [Int?] = [1,2,3] // => [{Some 1}, {Some 2}, {Some 3}]
sequence(ys) // => [1, 2, 3]
```

内部に副作用がある場合は途中でreturnすべきでない気がする。

一応 reduceでもかいておこう。

```swift
func sequence2<T>(xs: [T?]) -> [T]? {
    return xs.reduce([], combine: { (var acc,optX) in
        if let x = optX {
            acc?.append(x)
            return acc
        } else {
            return nil
        }
    })
}
sequence2([1, 2, nil, 3])
sequence2([1,2,3])
```

accに変更を加えないといけないのでvarにした。このあたりどうかいていくのがいいのかよくわからない。

より良い方法やライブラリがあったら教えて欲しい。

実際のsequenceはもっと一般的なので注意.

```
> :t sequence
sequence :: (Monad m, Traversable t) => t (m a) -> m (t a)
```
SpriteKitの CategoryBitMask、CollisionBitMask、ContactTestBitMask まとめ

iOS標準の2D絵動かしライブラリであるSpriteKitですが、物理エンジンが同梱されており、剛体としてふるまってほしいNodeに、 `SKPhysicsBody` を設定するだけで使えて便利です。

ところでこのオブジェクトは、`CategoryBitMask` 、`CollisionBitMask` 、 `ContactTestBitMask` と3つの整数のプロパティを持っていて、ビットフラグを設定することで、衝突するしない、コールバック起動するしない の設定ができるようになっていますが、ビットフラグが3つも必要なのか? 本当に3つも必要なのか? と、設計思想が理解できなくて、どれがどれか覚えられないのでメモっておこうと思いました。
特に、衝突する側か、される側かを意識して使う必要があり、衝突される側の設定を変更して見守っても何の変化しないことが多々あるので注意です。


| プロパティ名           | 意味                      | デフォルト値 |
|----------------------|------------------------------------------|-----------|
| `categoryBitMask`    | 自分が属するカテゴリ                        | `0xFFFFFFFF` (全てに属する) |
| `collisionBitMask`   | 衝突する側のとき、跳ね返るふるまいをする相手のカテゴリ    | `0xFFFFFFFF` (全てに衝突する) |
| `contactTestBitMask` | 衝突する側のとき、衝突コールバック (`SKPhysicsContactDelegate` のメソッド) を起動する相手になるカテゴリ | `0` (デフォルトでは何に衝突しても起動されない)        |


僕が最初にはまった落とし穴
* 衝突**される側** の `collisionBitMask` を 0 にしても 相変らず衝突するので「あれ?」となった
* おなじく衝突**される側** の `categoryBitMask` を 0にすると今度は衝突しなくなるので「あれ?」となった
* `collisionBitMask`、`contactTestBitMask` は、 衝突する側のときだけ意味がある
OSXでssh ポートフォワードするときに　channel 1: open failed: administratively prohibited: open failed”

OSXからサーバーLinuxにポートフォワードする時にハマったのでメモ

基本

* /etc/ssh/sshd_configのAllowTcpForwarding はyesにする service sshd restart
* SELinuxは無効にする

これをしてもエラーが治らなかった・・・

```
ssh -L 14040:hostname:4040 root@hostname
```

hostnameは/etc/hostsに記述しているもの

```
ssh -L 14040:XXX.XXX.XXX.XXX:4040 root@hostname
```

XXX.XXX.XXX.XXX　はIPアドレス
にすれば何故かうまくいった・・。
SublimeText3+Pandocプラグインで日本語PDF出力

Sublime Text3 + Pandocの相性がよく、文書作成がはかどる今日この頃です。


Sublime TextでPandocと連携するプラグインはいくつか試したのですが、変換だけなら、比較的自由に設定できるPandocプラグインがよさそうに思います。


なおMarkdownのプレビューにはリアルタイムでHTML変換をプレビューできる[Markmonプラグイン](https://github.com/yyjhao/sublime-text-markmon)がおすすめです。PDF変換は時間がかかるため、個人的には、編集中はMarkmonでプレビューし、PDF出力を確認したくなったらPandocプラグインで変換という手順をとっています。


以下、Pandocプラグインの使い方を紹介します。

まずPackage Controlプラグインから[Pandocプラグイン](https://packagecontrol.io/packages/Pandoc)をインストールします。

Packageコントロールの設定が終わっていれば、`Ctrl+Shift+p`から`Package Control: Install Package`を選択し、Pandocプラグインを選ぶだけです。

インストールが終わると`Ctrl+Shift+p`でパレットからPandocを選択できるようになります。


## PDF出力のカスタマイズ
ただしデフォルトのPDF出力は日本語の扱いに弱いので、少々カスタマイズします。

なお、ltjsarticleクラスはmicrotypeパッケージと相性が悪く、クラスファイルを差し替えてやる必要があります。

これについては以下を参照ください。

- [Pandocを使ってMarkdownからPDFを生成する](http://qiita.com/takeh1k0/items/ff84cb85bfffedc75066)

以下では、myltjsarticle.clsを/User/takada/.pandoc/myltjsarticle.clsに保存し、これを変換に使用しています。

`Preference > Package Settings > Pandoc > Settings - User`を選択し、以下のような内容をユーザー設定として追加します。パスの設定は各自の環境に合わせてください。

```json
{
  "user": {
    "pandoc-path": "/usr/local/bin/pandoc",
    "transformations": {
      "PDF(ltjarticle)": {
        "scope": {
          "text.html": "html",
          "text.html.markdown": "markdown"
        },
        "pandoc-arguments": [
          "-t", "pdf",
          "--latex-engine=/usr/texbin/lualatex",
          "-V", "documentclass=ltjarticle",
        ]
      },
      "PDF(ltjsarticle)": {
        "scope": {
          "text.html": "html",
          "text.html.markdown": "markdown"
        },
        "pandoc-arguments": [
          "-t", "pdf",
          "--latex-engine=/usr/texbin/lualatex",
          "-V", "documentclass=/Users/takada/.pandoc/myltjsarticle",
        ]
      }
    }
  }
}
```

以上を追加すると、Pandocプラグインを選択したあと、変換の選択肢にPDF(ltjarticle)とPDF(ltjsarticle)がでてくるようになるので、好きな方を選択すればPDFでプレビューできます。
Swiftスクロールビューで縦長画面の作成

## はじめに
Storybordで縦長Viewを作成するためメモ

## ツリー
・デフォルトのViewを削除しScroll Viewを追加
・Scroll View上にViewの追加
![1-1.png](https://qiita-image-store.s3.amazonaws.com/0/70031/05893a00-84c3-6977-20cf-555cfb8de828.png)


## 制約
・viewにEqual Widthsをscroll Viewに対して追加(vievからscroll viewへ　control + ドラッグ)
※viewのwidth値を可変にする
![1-2.png](https://qiita-image-store.s3.amazonaws.com/0/70031/9eaef776-2cfc-60ec-c3f2-8fbb5734a978.png)


・viewに高さとマージンを加える
![1-3.png](https://qiita-image-store.s3.amazonaws.com/0/70031/37d0b7cc-981c-8bfa-5f79-11aa53dd278e.png)


・スクロールバーが表示される
![1-4.png](https://qiita-image-store.s3.amazonaws.com/0/70031/05780e3c-5025-a030-298f-1f04a64452d8.png)

## サンプルコード
https://github.com/kawasakiatsushi/SwiftLongHeightView
CygwinのPythonでPILやPillowを使う


### 更新履歴
2015/06/17 必要パッケージが誤っていたので修正しました。
2016/05/05 libjpeg-develについて追加

# 環境
Windows7＋cygwin
virtualenvでPython2.7やPython3.4の環境を準備

# 方法
freetype2を入れて、ディレクトリのシンボリックリンクを作りました。
Python2.7にPILを入れる場合もPython3.4にPillowを入れる場合も、この方法でいけるっぽいです。

※ **libjpeg-devel**も必要だったとの情報をいただきました（コメント参照）
　 自分の環境では別件で入れてしまっていたかもしれません。

```bash
# 必要パッケージを入れる
apt-cyg install libfreetype6
apt-cyg install libfreetype-devel
# シンボリックリンクでfreetype2をfreetypeに見せかける
ln -s /usr/include/freetype2 /usr/include/freetype
```

この後、Python2.7なら

```bash
# PILを入れる
easy_install PIL
```

Python3.4なら

```bash
# pillowを入れる
easy_install pillow
```

freetype2をfreetypeに見せかけた場合の悪影響とかは不明です。
とりあえず動きました。
PILやpillowを入れ終わったらシンボリックリンク削除しておいてもよいかも？
Laravel 5 で Paginator->render() する時、自前のテンプレートを用いる方法

Paginator 提供が提供してくれるデフォルトの View は Bootstrap3 に最適化されています。

例えば、ガラケー対応が必要な場合など、render() の出力(というか view? )を変更したいときの方法。

# 結論: Presenter を使いましょう

例えば、以下の様な Class を用意します。

```app/Presenters/CustomPresenter.php
<?php namespace App\Presenters;

use Illuminate\Pagination\BootstrapThreePresenter;

class CustomPresenter extends BootstrapThreePresenter {

	public function render()
	{
		if( ! $this->hasPages())
			return '';

		return sprintf(
			'<div class="pagination">%s %s %s</div>',
			$this->getPreviousButton(),
			$this->getLinks(),
			$this->getNextButton()
		);
	}

	/**
	 * Get HTML wrapper for an available page link.
	 *
	 * @param  string  $url
	 * @param  int  $page
	 * @param  string|null  $rel
	 * @return string
	 */
	protected function getAvailablePageWrapper($url, $page, $rel = null)
	{
		$rel = is_null($rel) ? '' : ' rel="'.$rel.'"';

		return '<a href="'.htmlentities($url).'"'.$rel.'>'.$page.'</a>';
	}

	/**
	 * Get HTML wrapper for disabled text.
	 *
	 * @param  string  $text
	 * @return string
	 */
	protected function getDisabledTextWrapper($text)
	{
		return '<span>'.$text.'</span>';
	}

	/**
	 * Get HTML wrapper for active text.
	 *
	 * @param  string  $text
	 * @return string
	 */
	protected function getActivePageWrapper($text)
	{
		return '<span>['.$text.']</span>';
	}
}
```

上記では BootstrapThreePresenter を継承していますが、 PresenterContract を implements すればOKのはず。

あとは好きにメソッドを書き換えたりするだけ。

## 作った Presenter を使う

view や controller などで、 `(new MobilePresenter($paginator))->render();` として使います。

※値を持ち回る場合は `$paginator->appends(Input::all())`を忘れずに。
HTML/CSSの参考サイトと学習サイト

#概要
最近HTML/CSSの勉強するのにあたって学習サイトを調べたりすることがあり、気になったサイトをまとめました。

##参考サイト

###[HTMLクイックリファレンス](http://www.htmq.com/)
HTMLタグの意味のを調べたり、CSSのプロパティの初期値はなんだったかを調べたりするときによく利用しています。

###[意外と知らない!?CSSセレクタ20個のおさらい](http://weboook.blog22.fc2.com/blog-entry-268.html)
CSSの要素指定の方法がまとめられています。CSS3で追加になったセレクタを勉強するときに教えてもらった記事です。他にもいくつか記事をブックマークしていましたが最近はこの記事を見に行くことが多いです。一番見やすく情報量が多かったのが理由です。


##学習サイト
###[ドットインストール](http://dotinstall.com/)
何かプログラミングを勉強するときは定番。

###[Codeprep](http://codeprep.jp/)
穴埋め式の学習サイト。
教えてもらってHTMLとCSS、jQeryの基礎を挑戦してみました。
ヒントをみるとそこに答えが大体書いてあるのでヒントをみないように学習していました。
間違えた時、何が間違えか出ないので調べる癖はここで少し身についたと思います。

###[ShareWis](http://share-wis.com/)
法人向け無料学習サイト。
英語、PCスキル、プログラミング、会計、仕事術、が学習できるという会社に役立ちそうな学習内容になっています。HTMLだけ体験、アカウント作成をしなくても利用ができます。
クイズ形式なため学習して覚えるよりも覚えたことの復習、理解度の確認に利用できると思います。何かと併用しての利用ができそうです。

###[HTML5全国実力テスト](http://jsdo.it/event/html5cat/2012/autumn/)
15分テスト。HTML/CSS,Javascript,iOS/Androindの３コースで基礎、応用と基礎コースが用意されています。



##追記
もっと多くを調べてまとめている方がいらっしゃいましたのでご紹介。
[プログラミング学習Webサービスまとめ](http://qiita.com/cigalecigales/items/80aba2f0259a100bd9fb)
Unityで3Dモデルを自在に動かす方法


## はじめに

  今回は、Unityで3Dキャラの追尾方法とモーションを設定する方法、そして、キーボードで自在に操作する方法を紹介したいと思います。

## カメラでキャラを追尾する方法

  まず、[Mecanim Locomotion Starter Kit](https://www.assetstore.unity3d.com/jp/#!/content/7673)をインポートして、以下のスクリプトを`Main Camera`に設定します。

  - `Hierarchy -> Main Camera -> Add Component` から `Camera Control -> Smooth Fllow`を選択します。

  - そこで、Targetなどの項目があれば、追尾するキャラを指定します。
  
## モーションを設定する方法

  上の`Locomotion`で設定するのですが、MacBookでは、`Locomotion Player`は動きませんでした。キー関連が原因かなあ。調べてないけど。

  また、独自のモデルに追加する場合は、`Model : Select -> Rig -> Humanoid`を選択します。また、もし`Configure...`が上手く設定できてない場合も修正します。キャラの各部位を右のカラムの必要な部分にドラッグアンドドロップして設定すればよいです。すべて緑にすれば`Apply -> Done`で動くようになります。
  
  ![](https://raw.githubusercontent.com/mba-hack/images/master/unity_sao_yui_model_demo_04.gif)

## 3Dキャラを自在に動かす方法

  [Unity Chan](https://www.assetstore.unity3d.com/jp/#!/content/18705)をインポートして、動かしたいキャラに`/UnityChan/Animators/UnityChanLocomotions`のモーションを設定します。そして、`Add Component`にて`Script -> UnityChan/Scripts/UnityChanControlScriptWithRgidBody`を使います。

![](https://raw.githubusercontent.com/mba-hack/images/master/unity_yui_movie_akiba.gif)

http://hariery.deviantart.com/art/MMD-Yui-Sword-Art-Online-Infinity-Moment-437232373
JavaScript FileReaderを使って、ファイルをバイナリで読み込む

FileReaderを使ってMIDIファイルを読み込む際に勉強したメモです。

#readAsArrayBufferメソッドを使う

````input.html
<input type=file id=loadFile>
````
````loadMidi.js
//using jQuery
$(function(){
    $("#loadFile").change(function(e){
        var file = e.target.files[0];  
        var reader = new FileReader();

        reader.onload = function() {   
            var ar = new Uint8Array(reader.result);   
        }
        
        reader.readAsArrayBuffer(file);
    })
})
````

UnitArrayは通常の配列とはちょっと違います。
配列の要素には添え字でアクセス可能ですが、
shiftとか、joinといったメソッドがありません。

subarray(begin,end)メソッドを使えば、任意のオフセットのデータを取得できます。
詳しくは[ここ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)で
以上!
【つかえるCordova pluginシリーズ】タッチ＆スワイプのハンドリング用プラグイン

タッチ＆スワイプの、コントロール系プラグイン
地味に便利です。

http://labs.rampinteractive.co.uk/touchSwipe/demos/index.html

タッチエリアをスクロール出来ないようにコントロールしたり、スワイプの距離を取得出来たりします。
db:migrateでuninitialized constant Admin::DashboardController が起こる場合

```
bin/rake db:migrate RAILS_ENV=test
```

した時に、下記が起こる人がいた。

```
/vendor/bundle/ruby/2.2.0/gems/activesupport-
4.2.1/lib/active_support/inflector/methods.rb:263:in `const_get': uninitialized constant Admin::DashboardController (NameError)
```

どうやら、こういうことの様子で

http://www.railszilla.com/rails-uninitialized-constant-dashboardcontroller/rails

つまり
`config/routes.rb`で`root`設定をする前に `ActiveAdmin.routes(self)`呼んでいるからの様子だ。わけわからん。特定の環境なのも意味不明。