OmniAICreator/Qiita-1.07M huggingface dataset:
Cocos2dxで物理エンジンをオンにするまで


cocos2d-xで物理エンジンをオンにする設定

手順は次の通り
1.Sceneの物理設定をオンにする
2.イベントリスナーを追加する
3.オブジェクトにPhysicsBodyを設定する


<h3>1.Sceneの物理設定をオンにする</h3>


```cpp:GameScene.h

class GameScene : public Layer
{
// クラスメソッド
public:
	static Scene* createPhysicsScene();
	static Scene* createScene();
	
	CREATE_FUNC(GameScene)
// インスタンスメソッド
public:
	GameScene(){};
	~GameScene(){};
	bool init();
	
}

```

とりあえず、createPhysicsScene()メソッドを追加しました。
そして、そのメソッドでは次のようなことをやっております

```cpp:GameScene.cpp

Scene* createPhysicsScene()
{
	// 重力設定をオンにしてcreate
	Scene* scene = Scene::createWithPhysics();

	// 物理空間を取得して重力を設定	
	PhysicsWorld* world = scene->getPhysicsWorld();
	world->setGravity(Vec2(0,-980));

	GameScene* layer = GameScene::create();
	scene->addChild(layer);
	return scene;
}

```

<h3>2.イベントリスナーを追加する</h3>

加えて、衝突判定を行うためにはイベントリスナーを追加する必要があります

```cpp:GameScene.cpp

bool GameScene::init()
{
	////略/////
	
	// 物理衝突リスナー
    auto phlistener = EventListenerPhysicsContact::create();
    phlistener->onContactBegin = CC_CALLBACK_1(GameScene::onContactBegin, this);
    getEventDispatcher()->addEventListenerWithSceneGraphPriority(phlistener, this);
}

```
てなわけで衝突イベントメソッドを追加


```cpp:GameScene.h

class GameScene : public Layer
{
// クラスメソッド
public:
	static Scene* createPhysicsScene();
	static Scene* createScene();
	
	CREATE_FUNC(GameScene)
// インスタンスメソッド
public:
	GameScene(){};
	~GameScene(){};
	bool init();
	
	bool onContactBegin(PhysicsContact& constact); // !!new!!

}

```

```cpp:GameScene.cpp
bool onContactBegin(PhysicsContact& constact)
{
	log("当たっております。");
	
	return true;
}

```

<h3>3.オブジェクトにPhysicsBodyを設定する</h3>

つづいて、このLayerにつけるオブジェクトにはPhysicsBodyや
衝突判定を行うための設定を行ってやらねばなりません

```cpp:GameScene.cpp

const Size& winSize = this->getContentSize();

Sprite* ball = Sprite::create("ball.png");

// 剛体
PhysicsBody* body = PhysicsBody::createCircle(ball->getContentSize().width/2);
body->setContactTestBitmask(1);
body->setCategoryBitmask(1);
    
ball->setPhysicsBody(body);
ball->setOpacity(128);
ball->setPosition(Vec2(rand()%winSize.width,rand()%winSize.height));
this->addChild(ball);

```

ここでContactTestBitmaskとCategoryBitmaskを説明します。
ContactTestBitmaskは誰とぶつかるか、のbitmask情報です
CategoryBitmaskは自分のbitmask情報です

```cpp:GameScene.cpp
body->setContactTestBitmask(3);	// 3 == 0011
body->setCategoryBitmask(1);		// 0001
// なので自分と同じbodyを持っているものは
// 0010や0001,0011と衝突するということ。
```

このような設定をすると物理設定をオンにし、衝突イベントを取得できるようになりましたとさ。
sinatra で activerecord と連携して kaminari を使用してみる

Gemfileに設定をする。

```rb:Gemfile
...
gem 'kaminari'
...
```

kaminari を require して使用するメソッドを インクルードする。

```rb:app.rb
...
require 'kaminari/sinatra'

class SampleApp < Sinatra::Base

  helpers Kaminari::Helpers::SinatraHelpers

  get '/' do
    erb :top, :layout => true
    @tasks = Task.all.page(params[:page]).per(10)
  end

  ...

end

...
```

デフォルトの表示件数を設定したい場合にはそれぞれの model に設定することもできる。

```rb
# Task model へ設定する
class Task
  paginates_per 10
end

```

ページングを表示するページへの記述

```rb:view/top.rb
...
#ページング処理を行いたいloopの下に記述
<%= paginate @tasks %>
...
```
エラーをrescueして、rescueしない場合と全く同じエラーメッセージを出力する

#おことわり
このスクリプトは **Ruby のエラーメッセージと `Exception` インスタンスのメソッドとの対応** を確認するものです。そのため、 `rescue` 節で捕捉する例外（エラー）範囲として、最も先祖である `Exception` に **意図的に表記** しています。 **実際に使用するときには `rescue` 節で捕捉する例外範囲を適切に指定してください** 。

参考：
>Rubyにおいて`Exception`クラスは各種例外クラスの親クラスになっているが、その派生クラスには`Interrupt`も含まれる。
そのため、`rescue Exception` とした場合、`ctrl`+`c` でプログラムを停止しようとした場合にそのシグナルも捕捉されてしまい、プログラムが停止できなくなる。（そのような場合、`kill -9`コマンドなどでプロセスを強制停止することになる）
[tips - rescue Exception を安易に使うべきではない理由 - Qiita](http://qiita.com/snaka/items/40c9fd3cc16c2ccc195d)

#スクリプト
```rb
begin
  <raise error>
rescue Exception => ex
  puts ex.backtrace.first + ": #{ex.message} (#{ex.class})"
  ex.backtrace[1..-1].each { |m| puts "\tfrom #{m}" }
end
```

#例
```rb:error.rb
def err
  1 + nil
end

begin
  err
rescue Exception => ex
  puts ex.backtrace.first + ": #{ex.message} (#{ex.class})"
  ex.backtrace[1..-1].each { |m| puts "\tfrom #{m}" }
end

err
```
実行結果

```
$ ruby error.rb 
error.rb:2:in `+': nil can't be coerced into Fixnum (TypeError)
	from error.rb:2:in `err'
	from error.rb:6:in `<main>'
error.rb:2:in `+': nil can't be coerced into Fixnum (TypeError)
	from error.rb:2:in `err'
	from error.rb:12:in `<main>'
```

#参考

>##instance method `Exception#backtrace`
`backtrace` -> [String]
バックトレース情報を返します。
デフォルトでは

>* "#{sourcefile}:#{sourceline}:in `#{method}'" (メソッド内の場合)
* "#{sourcefile}:#{sourceline}" (トップレベルの場合)

>という形式の String の配列です。
[instance method Exception#backtrace](http://rurema.clear-code.com/2.2.0/method/Exception/i/backtrace.html)

<br>

>##instance method `Exception#message`
`message` -> String
`to_s` -> String
エラーメッセージをあらわす文字列を返します。
[instance method Exception#message](http://rurema.clear-code.com/2.2.0/method/Exception/i/message.html)

#ちなみに
`Interrupt` の上位クラスには `SignalException` があります。

>## class `SignalException`

> クラスの継承リスト: `SignalException` < `Exception` < `Object` < `Kernel` < `BasicObject`
>###要約
捕捉していないシグナルを受け取ったときに発生します。
実際に発生したシグナル名は、 `Exception#message` から 「"SIG" + シグナル名」という形で得られます。
デフォルトの状態では、 以下のシグナルが `SignalException` を発生させます。
`SIGALRM`
`SIGHUP`
`SIGINT` (※ただし以下参照)
`SIGQUIT`
`SIGUSR1`
`SIGUSR2`
なお、`SIGINT` シグナルを受けた場合は `SignalException` の下位クラスである `Interrupt` が発生します。
htmlspecialchars関数が長いので便利な関数を作った

XSS攻撃を防ぐためにhtmlspecialcharsを使うことが多いと思いますが、関数名が長く、しかも安全に使うにはオプションを指定しなければならない場合が多く、面倒です。

```php
$安心文字列 = htmlspecialchars($あぶない文字列, ENT_QUOTES, 'UTF-8');
```

そんなわけで、HTMLのエスケープ処理を簡単安全に行う関数を作成しました。
こちらです。

```php
function ＨＴＭＬスペシャルキャラズ($str) {
  $search = ['&', '"', "'", '<', '>'];
  $replace = ['＆', '”', '’', '＜', '＞'];
  return str_replace($search, $replace, $str);
}
```

## 使い方

```php
$安心文字列 = ＨＴＭＬスペシャルキャラズ($あぶない文字列);
```

## メリット一覧

* 関数名は13/16文字でなんと20%もの削減を実現。
* &amp;lt; や &amp;gt; といった意味不明のエンティティ文字を使わず、変換後も分かりやすい文字列を保持。
* ENT_QUOTES相当の処理を行い、オプションが不要に。
* 文字コード…？
Emberのunit testでstoreオブジェクトをstubにしたらrestoreも忘れずに

Emberに限った話でもないですが、少しハマったので

## はじめに

以下のようなモデルがあるとします

```js
App.User = DS.Model.extend({
  name: DS.attr('string'),
  age: DS.attr('number'),
  
  callUp: function() {
    var calling = this.store.createRecord('calling', userId: this.get('id'));
    calling.save().then(function() {
      this.store.deleteRecord(calling);
    }.bind(this));
  }
});

App.Calling = DS.Model.extend({
  userId: DS.attr('number')
});
```

App.User#callUpを実行するとApp.Callingモデルを作成し即座にsaveした後に削除を行います。

こうすることで、```POST /callings```なXHRが飛ぶのでRESTfulなAPIでユーザーを呼び出すという動作を行えるようになります。

## モデルのunit test

さてcallUpメソッドのテストは以下のように書きました（ember-mochaを使っています）

```js
describeModel('uesr', 'User', {
  needs: [],
  beforeSetup: function() {}
}, function() {

  beforeEach(function() {
    this.model = this.subject();
  })

  describe(function() {
    beforeEach(function() {
      Ember.run(function() {
        this.fakePromise = { then: function(callback) { callback() } };
        this.fakeCalling = { save: function() { return this.fakePromise }.bind(this) };

        sinon.stub(this.model.store, 'createRecord')
          .withArgs('calling', { userId: 0 })
          .returns(this.fakeCalling);

        sinon.stub(this.model.store, 'deleteRecord')
          .withArgs(this.fakeCalling);

        this.model.set('id', 0)
      }.bind(this))
    })

    it('should create new calling and delete', function() {
      Ember.run(function() {
        this.model.callUp();
        expect(this.model.store.createRecord.called).to.be.ok
        expect(this.model.store.deleteRecord.called).to.be.ok
      }.bind(this))
    })
  })

})
```

これでstoreオブジェクトを使ってApp.Callingをcreateしてsaveしてdelete...という流れがテストできるようになります。

## this.model(this.subject()の戻り値)がundefined

しかしこの後に更に別のテストを追加すると```this.model```はundefinedになってしまいます。

なんでだぁぁぁぁぁぁああ、と思ってよくよくコードを見直すと

```
sinon.stub(this.model.store, 'createRecord')
```

この時点で```store.createRecord```は使えない子になってるわけですよね。
しかも特定の引数の場合のみ戻り値を設定しているので、それ以外はundefinedが返るはずです。

this.subject()って中でstore.createRecordを呼び出しているんです。

テストの一番最初のbeforeEachでthis.modelにthis.subject()の戻り値をセットしなおしているので、callUpのテストの後は全てundefinedがthis.modelにセットされるようになるわけです。

## sinon.stubしたらrestore

要は戻せばいいだけ

```
afterEach(function() {
  this.model.store.createRecord.restore();
  this.model.store.deleteRecord.restore();
})
```

ドキュメントに書いてあるよね
http://sinonjs.org/docs/#stubs
middlemanで起動してるサーバーを終了する方法


Middlemanで複数サーバーを立ち上げようとして下記のように起こられるとき、使ってないサーバーを終了させるやり方がわからなくて、仕方なくマシン再起動とかしてた。。

```
The source :rubygems is deprecated because HTTP requests are insecure. Please change your source to 'https://rubygems.org' if possible, or 'http://rubygems.org' if not.
== The Middleman is loading
== Port 4567 is unavailable. Either close the instance of Middleman already running on 4567 or start this Middleman on a new port with: --port=4568
```

サーバーを終了させる方法があった。

```
$ lsof -i:4567
```

して、出てきたPIDをkill

```
$ kill -9 <PID here>
```

するだけ。


ソースはここ:
[What does this error while running &#39;middleman&#39; mean? - Middleman Forum](https://forum.middlemanapp.com/t/what-does-this-error-while-running-middleman-mean/1243)


他の方法としては、かぶらないportを利用して起動させれば複数立ち上げ可能。


```
$ bundle exec middleman --port 5000
```
sinatra で activerecord と連携して will_paginate を使用して見る

Gemfileに設定をする。

```rb:Gemfile
...
gem 'will_paginate'
...
```

will_pagenate を require して使用するメソッドを インクルードする。

```rb:app.rb
...
require 'will_paginate/view_helpers/sinatra'
require 'will_paginate/active_record'

class SampleApp < Sinatra::Base

  helpers WillPaginate::Sinatra, WillPaginate::Sinatra::Helpers

  get '/' do
    erb :top, :layout => true
    @tasks = Task.all.paginate(:page => params[:page], :per_page => 10)
  end

  ...

end

...
```

デフォルトの表示件数を設定したい場合にはそれぞれの modele に設定したり、全体に設定することもできる。

```rb
# Task model へ設定する
class Task
  self.per_page = 10
end

# 全体に反映させる
WillPaginate.per_page = 10
```

ページングを表示するページへの記述

```rb:view/top.rb
...
#ページング処理を行いたいloopの下に記述
<%= will_paginate @tasks, previous_label: "&laquo;&nbsp;前", next_label: "次&nbsp;&raquo;" %>
...
```
arm > eabiとは > Embedded ABI (Application Binary Interface)

~~[参考](http://www.oidon.net/linux/arm-eabi-oabi)~~ (Note. 2020-08-25 リンク切れ)

以下は参考ページからの引用

ARM用バイナリで使用されるABI (Application Binary Interface)にはOABIとEABIの二つがある。

EABIは"armel"として記述する。

...
EABIのメリット

総じて処理速度が上がるというメリットがある一方で、可搬性は保たれています。

<hr>
[参考] (https://wiki.debian.org/ArmEabiPort)

EABI is the new "Embedded" ABI by ARM ltd.
【Swift】UIAlertControllerのActionをクロージャで処理したくない２

[【Swift】UIAlertControllerのActionをクロージャで処理したくない](http://qiita.com/tdaiku/items/6a2e0c65522d74f642c9)

同じクラスから複数回呼び出す場合の対応について考えました。

##パターン１ 呼び出し元Delegateメソッド内で分岐を増やす
ボツ。
呼び出すたびに見づらくなるし、その場しのぎにも程がある。

```swift:CallFrom.swift
    func alertClose(alertReturn: Alert.AlertReturn) {
        
        switch alertReturn{
        case .Cancel:
            if(callTimes = 0){
                break
            }else{
                break
            }
        case .Value1:
            if(callTimes = 0){
                break
            }else{
                break
            }
        case .Value2:
            if(callTimes = 0){
                break
            }else{
                break
            }
        case .Value3:
            if(callTimes = 0){
                break
            }else{
                break
            }
        default:
            break;
        }
    }
```

##パターン2 呼び出し先クロージャ内で分岐
ボツ。
パターン１よりマシな気もするけど、パターン１より実行時例外が増えそう。

```swift:Common.swift
let cancelAction:UIAlertAction = UIAlertAction(title: "キャンセル",
   style: UIAlertActionStyle.Cancel,
    handler:{
        (action:UIAlertAction!) -> Void in
        if(isFirstCall){
                self.delegate.alertClose(AlertReturn.Cancel)
        }else{
                self.delegate.alertClose2(AlertReturn.Cancel)
        }
})
            
alert.addAction(cancelAction)
```


##パターン３　タイトルは何だったのか？オブジェクト生成時にクロージャでデリゲート内を書き換える
とりあえずこのパターンでやっていこうかと思います。
呼び出し元でオブジェクトを生成する時にクロージャ内で処理を書く。
ただアラートからの戻り値によって更にアラートを生成する場合はアラートが連鎖的に動作してソースが汚い。
（この動作がいかがなものかということは置いておいて・・・・）
精々２階層程度にとどめておくなら問題ないかなぁ。
（注）ちゃんと検証してません

・デリゲート実装部分

```swift:CallFrom.swift
var alertAction:Alert.AlertReturn -> () = {(alertReturn:Alert.AlertReturn) -> () in
    println("not implement")
}
    
func alertClose(alertReturn: Alert.AlertReturn) {
    self.alertAction(alertReturn)
}
```

・アラートを生成する

```swift:CallFrom.swift
var alert = Alert()
alert.title = "アラート"
alert.message = "アラートです"
alert.delegate = self
alert.defaultVal1 = Alert.AlertDefault(title: "OK", alertReturn: Alert.AlertReturn.Value1)

//修正部分                
self.alertAction = {(alertReturn:Alert.AlertReturn) -> () in
                    switch alertReturn{
                    case .Cancel:
                        break
                    case .Value1:
                        println("1")
                        break
                    case .Value2:
                        println("2")
                        break;
                    case .Value3:
                        println("3")
                        break;
                    default:
                        break;
                    }
}
                
alert.showAlertController(self)
```


##まとめ
ポップアップ画面を作成するのが面倒なのでUIAlertControllerでしのげるかと思っての試みでした。やはりポップアップ画面を作成してカスタマイズしていったほうが使い勝手はいいですよね。

いい方法があればコメント下さい。


[次⇒【Swift】UIAlertControllerのActionをクロージャで処理したくない まとめ](http://qiita.com/tdaiku/items/7ed8900fa820bd46db36)
Mac版lddコマンドは otool -L


Linuxでは `ldd a.out` で、実行ファイル `a.out` が依存してる共有ライブラリを調べられたが、Macにはlddが無い。

というわけで、 `otool` を使うと良いです。

```bash
$ otool -L 実行ファイル
```
shやbashのwhile文内の変数スコープはwhile内だけなのにzshは違った話



whileの中で定義した変数は、whileの外ではアクセスできません。でもzshはできるんです。
なので内容によってはハマるかもだよ、という話です。

```bash
# こんなファイルがあるとします
$ cat file
aaaaa
bbbbb
ccccc
```

```bash
# ファイルを1行ずつ読み込んでechoするwhile文
cat file | while read line
do
	BUF=${line}
	echo ${BUF}
done

echo "-----"

echo ${BUF}  # ここに注目
```

## /bin/sh

最後の行、 `echo ${BUF}` の結果がからっぽです。というかそんな変数無いよ、という状態ですね。

```bash:実行結果
aaaaa
bbbbb
ccccc
-----
        # BUFがからっぽ！
```

## /bin/bash

`/bin/sh` におなじく。

```bash:実行結果
aaaaa
bbbbb
ccccc
-----
        # BUFがからっぽ！
```


## /bin/zsh

この人だけ違います。

```bash:実行結果
aaaaa
bbbbb
ccccc
-----
ccccc   # 最後の状態のBUFが表示される
```
Framinで、Fx0のアプリを作ってみる（３）

# Framinで、Fx0のアプリを作ってみる（３）

## はじめに

[前回](http://qiita.com/Souj/items/b7fd62ceb7d9599b136b)に引き続き、FraminでFx0のアプリを作成したいと思います。

今回は、音声を再生したいと思います。音声の再生は、デフォルトで用意されている素材の他、自分で用意した音声ファイルを再生させることができます。

## アプリの作成

作成するアプリの概要は以下の通りです。

|項目|内容|
|---|---|
|アプリ名|sound|
|動作仕様|1.ドラムの画像をタップするとドラムの演奏を行う。<br>2. Fx0を振ると音声が再生される。|

<img src="https://qiita-image-store.s3.amazonaws.com/0/72852/2c3465c3-881a-eba2-290f-af02f8865ab8.jpeg" width="60%">


## リソースの準備

アプリの作成に必要なリソースを準備します。
必要なリソースは「アイコン」と「ドラムの画像」です。

### ◆ アイコン

今回は、以下のアイコンを作成しました。

![icon.png](https://qiita-image-store.s3.amazonaws.com/0/72852/2e0cf7c3-9f06-8a3c-7111-4a37ceb039da.png)

### ◆ ドラムの画像

<img src="https://qiita-image-store.s3.amazonaws.com/0/72852/520a4360-f8eb-28a7-30c9-be37792f5fa5.png" width="40%">

## アプリの作成

### ■ アプリ新規作成(アプリ名およびアイコンの設定)

アプリ名とアプリアイコンを設定します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/72852/b36d470c-d022-7d72-9c42-14908fb64f0f.jpeg" width="40%">

### ■ ビューの管理

ビューに、用意したリソースを設定します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/72852/6e10f3f1-785c-2d46-23f9-50ae19084bc5.jpeg" width="40%">

### ■ レシピ作成

レシピに、「レシピ1」および「レシピ2」を設定します。

### ◆ レシピ1の作成

設定するトリガとアクションは以下の通りです。

|項目|内容|
|---|---|
|トリガ|タッチを操作する|
|アクション|音声出力<br>※デフォルトで用意されている「ドラム」を設定|

以下は、レシピ1を設定した画面です。

<img src="https://qiita-image-store.s3.amazonaws.com/0/72852/33c4274e-ec4f-2166-0e5c-b9d78eecebf0.jpeg" width="40%">

### ◆ レシピ2の作成

設定するトリガとアクションは以下の通りです。

|項目|内容|
|---|---|
|トリガ|端末を振る(速さ)|
|アクション|音声出力<br>※デフォルトで用意されている「ソード」を設定|

以下は、レシピ2を設定した画面です。

<img src="https://qiita-image-store.s3.amazonaws.com/0/72852/b27a6ba5-56d7-ec13-a5e0-fddc0c10566a.jpeg" width="40%">

必要な設定が完了したら「インストール」ボタンでアプリをインストールします。

<img src="https://qiita-image-store.s3.amazonaws.com/0/72852/a3850a02-332c-1745-d7d8-dc0de68d5843.jpeg" width="40%">

インストールが完了すると、ホーム画面にアイコンが追加されます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/72852/1862a5a4-fa1c-cda6-336b-1d45ba1bfac4.jpeg" width="40%">

## アプリの実行

アプリを起動した直後の画面です。

<img src="https://qiita-image-store.s3.amazonaws.com/0/72852/5cefce06-952f-5de3-05c1-4d3c227c7e0e.jpeg" width="40%">

画像をタップしてみます。

 ドロドロ ♪♪♪..♪.♪ ～

さらに、Fx0を振ってみます。

 シャキーン　♪.♪♪. ～

「レシピ1」および「レシピ2」で設定した、音声が再生されました。

## おわりに

今回もプログラミングなしで、音声を再生するアプリが作成できました。
音声ファイルは自分で用意したものを設定できます。これを利用し、

* 色々な楽器の画像を用意し、タップすると画像の楽器の音が鳴る。
* 端末を振ると「マラカス」の音がなる。

このように、アイデア次第で楽器アプリが作成できるかと思います。
git diff で改行コードを無視

デザイナーさんがcssを修正してくれて、それをリポジトリに取り込んだ時など、改行コードが変わってしまっていて、git diffをとると全部----++++になっていまい、どこを修正したのか全くわからないことがある。

そういう時は

```
git diff -w css/main.css
```


参考サイト
[http://9ensan.com/blog/server/git-svn-diff-crlf-ignore/](http://9ensan.com/blog/server/git-svn-diff-crlf-ignore/)
glClearColorで色を塗りつぶす

glViewPortで指定した範囲をglClearColorで塗りつぶす事が可能です。


```glClearColor(float r, float g, float b, float a);```

引数は４つでRGBA（Aは透明度）で指定可能。
しかし、256段階の数字ではなく、ここでは係数で扱う必要があります。
例えば赤（RGB255, 0, 0）の場合
```glClearColor(1.0f, 0.0f, 0.0f, 1.0f)```

のようになる。

ちなみに画面全体を塗りつぶす際はこちらの関数が使える。
```glClear(int mask);```

mskには、どのViewなのんかという情報を与えます。
例えばGL_COLOR_BUFFER_BIT

```
@Override
public void onDrawFrame(GL10, gl10){
    gl10.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
    gl10.glClear(GL10.GL_COLOR_BUFFER_BIT);
}
メモ：ExcelでJavaやJSのmillisecondsのタイムスタンプを読めるようにする

JavaやJS、データベースから出力されたエポックからの経過秒や経過ミリ秒の値をExcelで表示したいときが多々あるのでその方法です。

Excel

```vbnet
 = (<TimeStamp> / 86400000) + DATE(1970,1,1)
```

ミリ秒じゃなくて秒の場合は86400000の部分を86400にすればOK。

データベースやTreasureDataから取り出した値を読みたいときに重宝します。
Atom　localizationでの日本語化ができない　Windows7

結論から言うと、

<br>
**どうしたらAtomの日本語化ができるのでしょうか？**
<br>
AtomをWindows7の環境にインストールしました。
そしてメニューの日本語化のためlocalizationプラグインをインストールし再起動したのですが
日本語化になりません。

そもそもメニューの[Packages]に[localization]が表示されていません。
調べたところ、Windowsではreplaceする文言がマッチしていないため、できなかったという記事もありました。


**Windowsではできないのでしょうか？
また他の方法によって日本語化できる方法はあるでしょうか？**


わかる方お願いします。
OpenGLのglViewPort

OpenGL ESにおいて、SurfaceViewのようなホワイトボードの様なViewを得た後は、どの領域を使うかを指定する必要がある。

そのための関数が、glViewPort(int x, int y, int width, int height)である。

```

@Override
public void onSurfaceChanged(GL10 gl10, int w, int h){
    gl10.glViewPort(0, 0, w, h);
}
```

int x, int yにあたる部分が、原点部分となり、int width, int heightは、原点部分からの幅と高さである。
Pydioで共有リンクにアクセスしてもNotFoundと表示されて、ファイルが見れない対処


どっかに書いてあるんだろうけど、どこに書いてるか気付かなかったのでメモ書き

## /etc/httpd/conf.d/pydio.conf の確認

標準では下記のようになっている

```
Alias /pydio /usr/share/pydio
Alias /pydio_public /var/lib/pydio/public

<Directory "/usr/share/pydio">
        Options FollowSymLinks
        AllowOverride Limit FileInfo
        Order allow,deny
        Allow from all
        php_value error_reporting 2
</Directory>


<Directory "/var/lib/pydio/public">
        AllowOverride Limit FileInfo
        Order allow,deny
        Allow from all
        php_value error_reporting 2
</Directory>
```

で共有リンクの`/pydio_public`が気にくわなかったので、`/share`に変更した。


```
Alias /pydio /usr/share/pydio
Alias /share /var/lib/pydio/public

<Directory "/usr/share/pydio">
        Options FollowSymLinks
        AllowOverride Limit FileInfo
        Order allow,deny
        Allow from all
        php_value error_reporting 2
</Directory>


<Directory "/var/lib/pydio/public">
        AllowOverride Limit FileInfo
        Order allow,deny
        Allow from all
        php_value error_reporting 2
</Directory>
```

## /var/lib/pydio/public/.htaccess

`RewriteBase`を上記の設定の`/share`に変更させる

```
Order Deny,Allow
Allow from all

<Files ".ajxp_*">
deny from all
</Files>

        <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteBase /share
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^([a-zA-Z0-9_-]+)\.php$ share.php?hash=$1 [QSA]
        RewriteRule ^([a-zA-Z0-9_-]+)--([a-z]+)$ share.php?hash=$1&lang=$2 [QSA]
        RewriteRule ^([a-zA-Z0-9_-]+)$ share.php?hash=$1 [QSA]
        </IfModule>
```


にしても何だこの空白スペースのインデントは…

## Pydio の確認

管理者ユーザでログインの後、設定→「Application Core」→「Pydio Main Options」にある「DOWNLOAD FOLDER」を「/share」に変更して「保存」ボタンを押す。
Genericクラスでデフォルト引数(enum)を持つメソッドの後に定義したメソッドはクラス内から見えなくなる


あまり詳しくないのでそもそも問題があるコードなのかもしれませんが、
こんな感じのコードを書くとクラス内から一部のメソッドにアクセスできなくなります。

enumのデフォルト引数がよろしくないようです。

```C#
// Unityでエラーとなるコード(Ver4.6.3f1で確認)
public enum EnumType {
	Default,
	TypeA,
}

public class Hoge<T> {
    public void test() {
    	Found();       //!< OK
    	NotFound();    //!< error CS0103: The name 'NotFound' does not exist in the current context
    }
    
    
    public void Found() {
    }
    
    public void def(EnumType type = EnumType.Default) {
    }
    
    public void NotFound() {
    }
}

public class Test {
    public void test() {
    	var a = new Hoge<int>();
    	a.NotFound(); //!< 別クラスからならOK
    }
}
```
vcs / coding > @sinceタグ

Javadocタグには`@sinceタグ`というのがあるようだ。

用途としては、そのAPIが導入されたバージョンを表示する。

[参考](http://www.javadrive.jp/javadoc/tag/index6.html)

ソースコードの中のドキュメントとして、いつから導入されたかを示すsinceタグを入れておけば過去のバージョンとの違いを追う時に便利かもしれない(VCSがあればいらないかもしれないが)。

```xxxdriver.c
/**
 * xxxドライバ
 * @since 3.1.4
 */

void xxxDriverEntry() {
  ...
}
```
Herokuでよく使うかもしれないコマンド

自分の為だけのHerokuのコマンドたち。
ログインIDとパスワードを聞かれるので教えてあげる。

```
cd {app_directory}
heroku login
```

Procfileを作る。

```
echo 'web: node app.js' > Procfile
```

Express4使っている場合は、下記のようにした。

```
echo 'web: npm start' > Procfile
```

node_modulesはデプロイしない。

```
echo 'node_modules' > .gitignore
```

gitのローカルリポジトリにコミットしておく。

```
git init
git add .
git commit -m "Ready to deploy."
```

Herokuにデプロイする。
アプリケーション名を省略すると勝手に名前つけられる。

```
heroku create {app_name} --stack cedar
git push heroku master
heroku ps
```

Herokuのログを確認できるよ。

```
heroku logs
```

動作見る。

```
heroku open
```

Herokuを再起動する。

```
heroku restart -app {app_name}
```

Dyno別に再起動。

```
heroku restart web.1 -app {app_name}
```

ベーシック認証かけたいね。

```
heroku config:set BASIC_AUTH_USERNAME="{user}"
heroku config:set BASIC_AUTH_PASSWORD="{password}"
```
naming > private functions > underscoreで始める / 始めない

コーディング規約において、private functionの名前の付け方は(_で始める)や(小文字で始める)などがある。

たまたま以下のサイトを見ていて、_(underscore)で始める、始めないという部分で気になったので、メモを残す。

[GTK+ BestPractices] (https://wiki.gnome.org/Projects/GTK+/BestPractices)


- Private functions that can be used from multiple compilation units need to either have their name start with an underscore, or be marked as G_GNUC_INTERNAL when declaring them.

- Private functions that are only used from a single compilation unit should be marked as static and not start with an underscore.

|  _の有無 | 用途 |
|:---:|:---:|
| _で始める | multiple compilation unitsから使われる |
| _で始めない | single compilation unitから使われる |

multiple compilation unitsから使われるprivate functionというものの理解がいまいち。

publicほど公けにしていないけど、extern宣言などである特定の.cファイルから使えるようにした関数ということだろうか?
Git push がやたら落ちていると思ったら、ファイルサイズ・数がやたら多かった場合

Railsでプロジェクトを作って外部リポジトリにpushしようとしたときのこと。

プロジェクトを始めたばかりなのに、サイズやファイル数がとんでもないことになっていました。

```rb
$ git push origin master
Counting objects: 26593, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (24906/24906), done.
Writing objects: 100% (26593/26593), 157.41 MiB | 160.00 KiB/s, done.
Total 26593 (delta 4255), reused 0 (delta 0)
remote: error: GH001: Large files detected.
remote: error: Trace: 
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File vendor/bundle/ruby/2.2.0/gems/libv8-3.16.14.7-x86_64-darwin-14/vendor/v8/out/x64.release/libv8_base.a is 150.14 MB; this exceeds GitHub's file size limit of 100 MB
To git@github.com:hoge/hgoe.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@github.com:hoge/hoge.git'
```

# 対応

## .gitを消してgit initからやり直す

.git/objects/以下に大量のファイルが出来てしまっています。おそらくこの辺に問題がありそうなのですが、急ぎの対応をしたかったので、一旦スルー。。。

git init からやり直すとすんなりいきました。

```rb
$ rm -rf .git && git init
$ git add .
$ git commit -am "retry"
```


# 結果

```rb
$ git push bb master
Counting objects: 135, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (118/118), done.
Writing objects: 100% (135/135), 162.30 KiB | 0 bytes/s, done.
Total 135 (delta 10), reused 0 (delta 0)
To 
 * [new branch]      master -> master
```

このオブジェクト数の差...

```rb
# before
26593, 157.41 MiB

# after
135, 162.30 KiB
```

# 原因

## gemファイルをリポジトリに含めて一度commitしてしまった

gemファイルが多ければ多いほどファイルサイズが大きくなってしまいます。
今回は $ bundle install --path vendor/bundleとしてgemの中身をvendor/bundleに入れていま。
基本的に.gitignoreでvendor/bundleをgitから省いていましたが、cacheの都合で、.gitignoreの更新が反映されておらず、vendor/bundleをcommitしてました。

cacheを削除するのは以下の様にすればできます。

```rb
$ git rm -r --cached .
```
Atom Shellで俺の役に立ったIssue達 2015年春版

# はじめに

最近はhttp2やmruby関連でAtom ShellのIssueウォッチが今まで以上に雑になっている。
特に今季はLinux関連は追えていない。

- [atom-shell - Atom Shellで俺の役に立ったIssue達 - Qiita](http://qiita.com/kjunichi/items/bf10a4b93b6b3dceee52)

# [Mac App Store](https://github.com/atom/atom-shell/issues/249)

Mac App Storeに出せるかに関して
まだ誰も結果報告を挙げていない模様

# [app.restart()](https://github.com/atom/atom-shell/issues/539)

Atom Shellの再起動方法

# [Windows: Support for the equivalent of the OS X Dock bounce (FlashWindow)] (https://github.com/atom/atom-shell/issues/890)



# [Having multiple JavaScript contexts causes a race condition in uv event loop handling](https://github.com/atom/atom-shell/issues/894)

デバッグの参考になるかも

# [Pressing "Delete" key backwards the page after page is reloaded](https://github.com/atom/atom-shell/issues/836)

マックでDeleteキーを押すとリロードするバグらしい

# [Implement Chromium task manager](https://github.com/atom/atom-shell/issues/820)

将来的に実装される可能性が高い。つまり、まだ使えない。。

# [printing is broken on Windows](https://github.com/atom/atom-shell/issues/865)

Windowsだと印刷がうまくできない模様
プリンタに印刷が必要なアプリを作る際は要注意。

# [Add window globals before page load](https://github.com/atom/atom-shell/issues/803)

こったことやる時に知ってると便利かも。

# [Access image in OS X pasteboard](https://github.com/atom/atom-shell/issues/580)

https://github.com/atom/atom-shell/pull/1303

クリップボードに画像を貼ったりできるっぽい。

# [Segmentation Fault on uncaught Exception before app.ready](https://github.com/atom/atom-shell/issues/909)

デバッグに知ってるといいのかも、ドキュメントに未掲載のAPI

# [Webview: display:none seems to cause it to be garbage collected and using it after that will crash Atom-Shell](https://github.com/atom/atom-shell/issues/764)

Atom Shellのバージョンを調べるには

```js
process.versions['atom-shell']
```

# [IME Problem in WebView](https://github.com/atom/atom-shell/issues/1051)

これ、Windowsでは起きないけど、OSXでは大問題、いまだに本家のChromiumでも未解決。

# [generators in browser process](https://github.com/atom/atom-shell/issues/956)

もうES6が使えるんです

# [How to capture stdout?](https://github.com/atom/atom-shell/issues/683)

WindowsでDOS窓にどうやって出力するかのおはなし


# [Linux video acceleration support for Intel hardware](https://github.com/atom/atom-shell/issues/1032)

# [how to set up localization in atom-shell?](https://github.com/atom/atom-shell/issues/1093)

gettextでの国際化がまだうまくできないらしい

# [Clipboard not working in some OSX environments](https://github.com/atom/atom-shell/issues/916)

OSXでのコマンドライン起動と、Finder起動の違い

# [Log to mac Console app](https://github.com/atom/atom-shell/issues/1047)

node-nslogの紹介

# [Atom & App in one executable](https://github.com/atom/atom-shell/issues/914)

一つの実行ファイルにできるか問題

# [protocol can not worked with <audio>](https://github.com/atom/atom-shell/issues/1123)

# [about cookie](https://github.com/atom/atom-shell/issues/1142)


# [Codesign fails after Yosemite upgrade](https://github.com/atom/atom-shell/issues/720)

コードサイン出来ないっぽい？

# [Atom-shell and socket.io](https://github.com/atom/atom-shell/issues/1141)

Socket.ioを受けたらウインドウを出したいはなし


# [Webgl in linux no available?](https://github.com/atom/atom-shell/issues/1277)

Chromeとは別にVGAのブラックリストを持たせることができるっぽい。
git で管理してるプロジェクトの中でサブプロジェクトをやってたけど別リポジトリにしたくなったとき

git filter-branch の subdirectory-filter を使うのがいいみたいです。履歴も残るのが素晴しいです。


`man git-filter-branch` から引用すると

    Only look at the history which touches the given subdirectory. The result will contain that directory (and only that) as its project root.
    Implies the section called “Remap to ancestor”.

だそうです。


## やってみる


まずは元のプロジェクトからサブプロジェクト用の新しいディレクトリに clone します。

````console
$ git clone project-dir new-project-dir
$ cd new-project-dir
````

filter-branch でサブプロジェクトのディレクトリにある修正だけを有効にします。これで subproject のディレクトリがルートにやってきて、履歴もそこにコミットしたものだけになります。

````console
$ git filter-branch -f --subdirectory-filter path/to/subproject
````

足りないものがあれば、clone 元からコピーとかでお茶を濁します。履歴が微妙に変なのが気になる人は頑張って rebase してください。まだどこにも push してないので改変しほうだいです。


ここまでで今いるブランチがサブプロジェクトだけのものになりました。


## お掃除

origin が不要になので削除します。

````console
$ git remote remove origin
````

タグも消してしまいます。

````console
$ git tag | xargs git tag -d
````

ゴミ掃除 (`man git-filter-branch` にのってます)。

````console
$ git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
$ git reflog expire --expire=now --all
$ git gc --prune=now
````


## おわり

これでサブプロジェクトが履歴を残したまま分離できました。あとは新しいリポジトリに push して、元のプロジェクトから消しさってしまえばおしまいです。

git すごいですね。
メモを検索するマクロ

```vbscript
'-------------------------------------------------------------------------------
'メモを正規表現で検索する
'
' CopyRight Naoshi Ide 2015-
'-------------------------------------------------------------------------------
Call Main

'メイン処理
Sub Main()
	Dim memofolder
	Dim regexp
	memofolder = "C:\Users\Nao\Documents\個人フォルダ\10.メモ\"
	regexp = "^■.*$"
	Grep regexp, "*.memo",memofolder,29
End Sub
```
raspberry piとwebカメラでmotion検知&rubyでmail送信

# webカメラを接続
```
sudo apt-get update
sudo apt-get upgrade

lsusb
```
でwebカメラの接続を確認。upgradeしないとusbを認識しない模様

```
sudo apt-get install fswebcam
fswebcam ./tmp.jpg
```
で出力確認

# motion検知のライブラリmotionのインストール
```
sudo apt-get install motion
sudo vim /etc/motion/motion.conf
sudo vim /etc/default/motion
```
でよしなに編集
```
sudo service motion start
```
ストップするか、設定を適切にしないと/tmp/motion/以下にファイルがたまり続けるので注意
デフォルトでは
localhost:8081
にアクセスするとstreamingが見れる


# rubyでmail送信
```
gem install mail
```
これに時間かかる
sudo vim /etc/motion/motion.conf
に
on_event_startに~.shを登録
.shファイルに

```
ruby ~.rb
```

.rbファイルに

```
Mail.new
smtpの設定(gmailが楽)
```

# 次やりたいこと
lockファイルの作成
envにpasswordを移動
写真をメールに添付して送る
「何故htmlspecialcharsを通すのか？」を一言でどうぞ

[htmlspecialchars]: (http://www.php.net/manual/ja/function.htmlspecialchars.php)

# 結論

**`Content-Type: text/plain` な入力を `Content-Type: text/html` な環境の中に正しく出力させるため。**

もう議論され尽くした内容だが、このような言い回しの人は見たことがなかったので敢えて記事にしてみる。

# 解説

- ユーザがテキストボックスを通じて入力するのは `text/plain`、つまり**ただのテキスト**。ただのテキストであるから装飾する機能は無い。
- プログラマがユーザ入力を元にPHPで出力するのは `text/html`、つまり**HTML**。HTMLには見出しを示したり、太字にしたり、下線を引いたり、CSSやJavaScriptを呼び出す機能もある。
- [htmlspecialchars] は `text/plain` を `text/html` に変換する。`<` `>`を`&lt;` `&gt;`に変換するというのはあくまで<ins>一例に過ぎない</ins>、と考えるべきである。

通常、ユーザ入力は `text/plain` であるべきだ。但し、**一部のタグや一部の属性のみを許可する**といった処理を厳重なコーディングのもとに行っている場合、ユーザ入力が`text/html`であると見なすことも許されるであろう。実績のある代表的なライブラリとしては [HTML Purifier](http://htmlpurifier.org/) が挙げられる。

# 余談

- 上記では簡略化のため説明を割愛したが、[htmlspecialchars]は事実上第3引数の文字コード指定までは必須と言われる。以下のコードは `text/plain; charset=UTF-8` から `text/html; charset=UTF-8` への変換を行う。

```php
$out = htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
```

- Content-Typeのうちcharsetのみを変換する場合も考えられる。以下のコードは `text/plain; charset=Shift_JIS` から `text/plain; charset=UTF-8`、あるいは `text/html; charset=Shift_JIS` から `text/html; charset=UTF-8` への変換を行う。

```php
$out = mb_convert_encoding($in, 'UTF-8', 'SJIS');
```

- SQL文にユーザ入力を埋め込む際に[htmlspecialchars]を用いるのは不適切である。求められる変換は `text/plain` から `text/html` ではなく、**`text/plain` から `application/sql`(における文字列リテラル)** だ。この処理はプリペアドステートメントとそれに付随するプレースホルダが役割として担うものである。

```php
$stmt = $pdo->prepare('SELECT * FROM table WHERE name = :name');
$stmt->bindValue(':name', $name);
$stmt->execute();
```

- PHPで作るWebページは必ず`text/html`になるのか？と言われればそうではなく、`text/plain`として出力することも可能である。この場合[htmlspecialchars]は不要になる。

```php
<?php
header('Content-Type: text/plain; charset=UTF-8');
echo '<script>alert(1)</script>'; // IE以外ではJavaScriptは実行されない (コメント欄参照)
```
知れば面白いGit


#Gitコマンド一覧
###Git設定
```$git config --global オプション```:
インストールしたGitに対してコマンドラインから設定を行うコマンド
ex)ユーザー設定・メールアドレス設定
```$ git config --global user.name <username>
$ git config --global user.email <mailaddress>
```
###リポジトリの作成・メンテナンス
```$git init```:リポジトリを作成
```$git clone```:既存のリポジトリの複製を作る
```$git fsck```:リポジトリの正当性チェックを行う
```$git gc```:リポジトリ内の不要なオブジェクトを削除し、最適化を行う


###作業ツリー,ブランチを操作管理する
```$git status```:変更が加えられたファイルを表示
```$git diff```:ファイルに加えられた変更点をdiff形式で表示
```$git add```:コミットするファイルを指定
```$git commit```:変更点をコミット
```$git reset```:コミットlogを閲覧
```$git revert```:作業ツリーを指定したコミット時点の状態にまで戻す
```$git branch```:ブランチ情報の表示,ブランチの作成
```$git checkout```:ブランチの切り替え
```$git show-branch```:ブランチの作成/ 変更/マージ履歴を表示
```$git merge```:ローカルブランチのマージを行う
```$git tag```コミットにタグをつける
```$git stash```現在の作業ツリーの状態を一時的に保管
```$git rebase```ブランチの派生元を変更

###他のリポジトリとの連携を行う
```$git pull```:他のリポジトリの変更点をローカルリポジトリにマージ
```$git push```:公開リポジトリに自分のリポジトリの内容を送信


###新しいレポジトリの作り方の例
```
mkdir SourceTree_rensyu
cd SourceTree_rensyu
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitlab.com/seeker-of-it-my/SourceTree_rensyu.git
git push -u origin master
```

###既存のGitリポジトリをプッシュの例
```
cd existing_git_repo
git remote add origin https://gitlab.com/seeker-of-it-my/SourceTree_rensyu.git
git push -u origin master

※git remote add [shortname] [url]```:リモートリポジトリの追加


###新しいことがわかり次第、随時更新していきます。
開発必須ツール：SourceTree


今までチームで開発していた時Cyberduckを使っていたのですが、
そこで問題となったのは同時に開発している時に上書きしあってしまうことでした。

今回はそれを解消するためにSourceTreeというGUIツールを紹介します。


###1.SourceTreeダウンロード+インストール
[http://www.sourcetreeapp.com/](http://www.sourcetreeapp.com/)
***
###2.Gitlabのアカウント作成＋Sign in
右下のSign upの方でアカウントを作成
[https://gitlab.com/users/sign_in](https://gitlab.com/users/sign_in)
メールが届くのでリンクをクリック
***
###3.プロジェクト作成
Welcome to GitLab!と表示される
下の+New Projectをクリック


Project pathの中にプロジェクト名を書く
チームメンバーに見てもらうためにpublicにマークを付ける
Create projectをクリック
![スクリーンショット 2015-04-03 0.20.26.png](https://qiita-image-store.s3.amazonaws.com/0/74135/021d570f-9650-ae0e-6265-9f21e50f1aa5.png)
###4.クローン
今回はhttpsのURLをコピー
![スクリーンショット 2015-04-03 1.31.04.png](https://qiita-image-store.s3.amazonaws.com/0/74135/c39dbe22-fbf7-c421-8775-5811bd8b6b9a.png)

SourceTreeを開き +新規レポジトリ>URLからクローンをクリック

*ソースURL:先ほどコピーしたURLを貼り付け
*保存先のパス:自由で良い
*名前：自由でよい
クローンをクリック！
![スクリーンショット 2015-04-03 0.46.12.png](https://qiita-image-store.s3.amazonaws.com/0/74135/44f6bc8c-7683-de1a-2ebe-081de14fb7e9.png)

###5.ファイル編集,ステージ,コミット
テキストエディタを開き、編集したファイルを
先ほど設定した、保存先のパスのディレクトリの中に保存

SourceTreeで先ほど作成したプロジェクトを開く
作業ツリーのファイルの下のファイルを上のボックスにドラッグしてステージする
![スクリーンショット 2015-04-03 0.51.26.png](https://qiita-image-store.s3.amazonaws.com/0/74135/665e245f-ce79-51f5-1a96-8a3123abcb43.png)

メニューバーにあるコミットをクリック
下の方にコミット欄が表示されるのでprogramに対して説明を書く
![スクリーンショット 2015-04-03 1.00.22.png](https://qiita-image-store.s3.amazonaws.com/0/74135/664fab57-fe58-47bd-b37c-ba720d5c2c73.png)
###6.プッシュ
メニューバーにあるプッシュをクリック
編集したファイルが属するブランチのチェックボックスにチェックをつける
OKをクリック

ステージ→リモートリポジトリで共有

###7.プル
メニューバーにあるプルをクリック


これはメンバーがプッシュしてリモートリポジトリで
共有したファイルをローカルリポジトリへクローンする

その他の操作については後日。
ポンコツでも理解できるGit＆SourceTree


#■Gitとは
・ファイルの**履歴を管理**するもの。
・開発チームでファイルを**共有**することができる。
・ファイルを枝分かれさせて**複数のバージョンを同時に管理**することが可能。
・ソースコードだけでなく、画像やExelファイルなど、**なんでも入る**。
・もしPCが壊れてもファイルはGitに入っているので、**バックアップ**としても活用可能。


#■SourceTreeとは
・**GUI**で操作できるGitのクライアント。
・ターミナルを使わず、変更履歴などを**可視化**することができる。

#■用語
**クローン**
→リモートリポジトリからデータを引き取り、そのままローカルリポジトリを作成する。

```
$ git clone
```
**ブランチ**
→ファイルを枝分かれさせる概念。

```
$ git branch
```
**チェックアウト**
→ブランチを切り替えること。

```
$ git checkout
```
**コミット**
→ファイルをGitに登録すること。

```
$ git commit
```
**プッシュ**
→ローカルからコミットした内容をリモートに反映させるための行程。

```
$ git push
```
**マージ**
→あるブランチに他のブランチの変更を取り込むこと。

```
$ git marge
```


#■SourceTree使い方
###◆Gitとの連携

###◆リポジトリ作成
・リポジトリを新規で0の状態から作成する。
・Gitからクローンしてリポジトリを作成する。
上記いずれかを実行。

###◆リモートファイルを書き換える手順
1.ファイルを作成・変更する。
2.indexに作成・変更したファイルを追加する。
3.コメントを入力し、コミット。
4.リモートに反映させるために、プッシュ。
Rails g modelの際のdecimal型のフィールドについての注意点

例えば１０進数で最大桁数１０桁、小数点以下２桁の``price``フィールドを持ったモデルを作成するとする。

このときシングルクォーツで囲ってやらないとヤヴァイ。

``rails g model product 'price:decimal{10,2}'``

理由は以下に書いてあるのですが、

https://github.com/rails/rails/pull/12642

要は囲わないとマイグレーションファイルがこのようになっちゃう。

```rb
class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.decimal10 :price
      t.decimal2 :price

      t.timestamps
    end
  end
end
```

``decimal10``型と``decimal2``型のpriceができちゃう。

bash上でこうやってチェックしてみるとわかりやすい。

```bash
$ echo p{1,2}
p1 p2
```

なのでシングルクォーツで囲って

```ruby
class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.decimal :price, precision: 10, scale: 2

      t.timestamps
    end
  end
end
```

このように生成するということです。

その他参考記事：  
http://guides.rubyonrails.org/active_record_migrations.html#passing-modifiers
incsearch.js を利用して、インクリメンタルサーチを試してみる

## :musical_score: 概要
incsearch.js を利用して、インクリメンタルサーチを試してみます

<i class="fa fa-external-link" style="font-size:1em;"></i> [incsearch.js](http://www.enjoyxstudy.com/javascript/incsearch/)

## <i class="fa fa-flask" style="font-size:1em;"></i> サンプルコード

~~~html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <script type="text/javascript" src="./incsearch.js"></script>
  <script type="text/javascript" language="javascript">
  <!--
    var list = [
      ['高橋名人の大冒険島','ハドソン'], 
      ['プロフットボール','イマジニア'], 
      ['ドラゴンボールZ 超サイヤ伝説','バンダイ'], 
      ['ロマンシング サ・ガ','スクウェア'], 
      ['ソウルブレイダー','エニックス'], 
      ['ドラゴンスレイヤー英雄伝説','エポック社'], 
      ['エキゾースト・ヒート','セタ'], 
      ['魂斗羅スピリッツ','コナミ'], 
      ['ロケッティア','アイジーエス'], 
      ['スーパーバーディー・ラッシュ','データイースト'], 
      ['弟切草','チュンソフト'], 
      ['スーパー伊忍道 打倒信長','光栄'], 
      ['R.P.M.レーシング','ビクターエンタテインメント'], 
      ['新世紀GPXサイバーフォーミュラ','タカラ'], 
      ['ファイナルファイト・ガイ','カプコン'], 
      ['超攻合神サーディオン','アスミック'], 
      ['スーパーファミスタ','ナムコ'], 
      ['ハットトリックヒーロー','タイトー'], 
      ['ザ・グレイトバトルII ラストファイターツイン','バンプレスト'], 
      ['ラッシング・ビート','ジャレコ'], 
      ['スマッシュT.V.','アスキー'],
    ];

    // wondowのonloadイベントに追加
    var start = function(){
      new IncSearch.ViewTable(
        'text',
        'view_area',
        list,
        {
         startElementText: '<table><tr><th width="50%">ゲーム</th><th width="50%">メーカー</th>',
         ignoreCase: false
        }
      );
    };
    window.addEventListener ?
      window.addEventListener('load', start, false) :
      window.attachEvent('onload', start);
  </script>
  <style type="text/css">
     <!--
       strong {
         font-weight: normal;
       }
       strong.high1 {
         background-color: #FFFF99
       }
       strong.high2 {
         background-color: #CCFFFF;
       }
       strong.high3 {
         background-color: #CCFF99;
       }
       strong.high4 {
         background-color: #FFCC99;
       }
       -->
   </style>

  <title>incsearch.js</title>
</head>
<body>
  <input id="text" type="text" name="pattern" value="" autocomplete="off" size="40" />
  &nbsp;&nbsp;<span id="status"></span>
  <!-- 検索結果の表示エリア -->
  <div id="view_area"></div>
</body>
</html>
~~~

## <i class="fa fa-flask" style="font-size:1em;"></i> デモ

![incsearch.gif](https://qiita-image-store.s3.amazonaws.com/0/43480/a9b458b7-190c-0515-69f6-6b0aed79f182.gif)

## :books: 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [incsearch.js](http://www.enjoyxstudy.com/javascript/incsearch/)
iOSアプリのAdMobを、6系から7系にアップデートした話

久しぶりに、iOS版の[詰め共円](https://itunes.apple.com/jp/app/id792426923)をアップデートしようとしたら、
いろんなライブラリがoutdatedだったので、ライブラリもアップデートしました。

実際のコードはこちら。 https://github.com/noboru-i/kyouen-ios/commit/d883d6e03a6a5dad1ee6e5edb366ac3c0abe6495

## Podfileのアップデート

```diff
-pod 'Google-Mobile-Ads-SDK', '~> 6.8'
+pod 'Google-Mobile-Ads-SDK', '~> 7.1'
```

## projectファイルの調整

Build Phasesの、Link Binary With Librariesにあった、`libGoogleAdMobAds.a`を削除する。

Build Settingsの、Apple LLVM 6.0 - Language - Modulesの、Enable Modules (C and Objective-C)を`YES`に変更する。

Build Settingsの、Search Pathsの、Library Search Pathsにあった`"$(PROJECT_DIR)/Pods/Google-Mobile-Ads-SDK/GoogleMobileAdsSdkiOS-6.11.1"`を削除する。

## ソースコードの修正

importしていたヘッダファイルを削除し、GoogleMobileAdsモジュールを読み込む。
`@import GoogleMobileAds;`

GADRequestのtestDevicesに、GAD_SIMULATOR_IDを設定していたのを削除する。
（何も設定しなくても、シミュレータではテスト用配信がされる模様）

# 感想
全体的に、記述量が減っていい感じだと思う。
今更だと思うけど、`@import`って初めて見た。
一時ファイルを作成する

```JScript
//一時ファイルを作成する
var tempPath = "c:\\temp\\";
var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
strTempName = objFileSys.GetTempName();
strCreateFile = objFileSys.BuildPath(tempPath, strTempName);
objFileSys.CreateTextFile(strCreateFile);
objFileSys = null;

FileOpen(strCreateFile);
```
Visual C# 2013 パーフェクトマスター 5章 制御構造

[Amazon.co.jp： VisualC#2013ﾊﾟｰﾌｪｸﾄﾏｽﾀｰ (Perfect Master SERIES): 金城 俊哉: 本](http://www.amazon.co.jp/VisualC-2013%EF%BE%8A%EF%BE%9F%EF%BD%B0%EF%BE%8C%EF%BD%AA%EF%BD%B8%EF%BE%84%EF%BE%8F%EF%BD%BD%EF%BE%80%EF%BD%B0-Perfect-Master-SERIES/dp/4798040193)

自分の不明点をとりまとめ。理解できているところは割愛。

# 選択ステートメント
## if文
```csharp
            if(x == 1)
            {
                Console.WriteLine("true");
            
            }
            else
            {
                Console.WriteLine("else");
            }
```
{}を省略することもできる

```csharp
            if(x == 1)Console.WriteLine("true");
            else Console.WriteLine("else");
```

## switchステートメント
```csharp
            switch (x)
            {
                case 1:
                    Console.WriteLine("1");
                    break;
                case 2:
                    Console.WriteLine("2");
                    break;
                default:
                    Console.WriteLine("default");
                    break;
            }
```

# 繰り返しステートメント
## 同じ処理を繰り返す「while」
```csharp
            int i = 1;
            while(i<=5)
            {
                Console.WriteLine(i);
                i++;
            }
```

## 繰り返し処理を最低1回は行う「do while」
```csharp
            int i = 1;
            do
            {
                Console.WriteLine(i);
                i++;
            }
            while (i <= 5);
```

## 繰り返しとカウンター定義を一度に行う「for」
```csharp
            for (int i = 1; i <= 5; i++)
            {
                Console.WriteLine(i);
            }
```

## コレクション内すべてのオブジェクト「foreach」
```csharp
            var arry = new[] {1,2,3,4,5};
            foreach(var item in arry)
            {
                Console.WriteLine(item);
            }
```
Ruby を使ってみる



## 環境

- Mac OS X Yosemite 10.11.3
- rbenv 1.0.0
- ruby-build 20160130


## rbenv で ruby のバージョンを管理する

### rbenv をインストール

```bash
$ brew update
$ brew install rbenv ruby-build
```

既にインストールされている場合は更新する。

```bash
$ brew upgrade rbenv ruby-build
```

### インストール済みの ruby のバージョンを確認

```bash
$ rbenv versions
```

### インストール可能な ruby のバージョンを確認

```bash
$ rbenv install -l
```

### バージョンをインストール

```bash
$ rbenv install 2.3.0
```

### グローバルで使うバージョンを指定

```bash
$ rbenv global 2.3.0
```

### ローカルで使うバージョンを指定

プロジェクトごとに使用するバージョンを設定できるらしい。

```bash
$ rbenv local 2.3.0
```

### パスを通す

以下を.zshenvに追加。
ネットの情報だとこれないんだけど、やらないとMacのデフォルトのrubyから切り替わらなかった。
常識過ぎて書かれていないだけかも。

```:.zshenv
export PATH=$HOME/.rbenv/shims:$PATH
```

ここまでで一旦終了。もう使える状態。


## 更新

### Gemで新しいパッケージを入れた場合

以下を実行する。

```bash
$ rbenv rehash
```

そうすると ```$HOME/.rbenv/shims``` 以下が更新される。
globalを更新した後もやるのかも。
と思ってたけど、これいらなくなってるかも。
メモを新規作成するマクロ

```vbscript
'-------------------------------------------------------------------------------
'新規メモの作成マクロ
'
' CopyRight Naoshi Ide 2015-
'-------------------------------------------------------------------------------
Call Main

'メイン処理
Sub Main()
	Dim memofolder
	Dim strDate
	Dim memoFileName
	Dim memoFileObj

	memofolder = "C:\Users\Nao\Documents\個人フォルダ\10.メモ\"

	strDate = Date
	strDate = Replace(strDate, "/", "")


	text = InputBox("メモのタイトルを入力してください","memo")

	If text="" then
		Exit Sub
	End If

	memoFileName = memoFolder & strDate & "_" & text & ".memo"

	'ファイルの新規作成
	Dim objFileSys
	Set objFileSys = CreateObject("Scripting.FileSystemObject")
	objFileSys.CreateTextFile memoFileName
	Set memoFileObj = objFileSys.OpenTextFile(memoFileName, 2, True)

	memoFileObj.WriteLine("■" + text)
	memoFileObj.Close

	FileOpen(memoFileName)
End Sub

```
Node.jsを使ってみる



## 環境

- Mac OS X Yosemite 10.10.2
- nodebrew 0.8.0
- node v0.12.2
- npm 2.7.4


## 準備

### nodebrewをインストール

nodebrewはnodeのバージョン管理ツール。
これが一番いけてるっぽい。

```bash
$ brew update
$ brew install nodebrew
```

### 最新版のnodeをインストール

```bash
$ nodebrew install latest
```

インストールされたバージョンを確認する。

```bash
$ nodebrew list
v0.12.2

current: none
```

### バージョンの有効化

```bash
$ nodebrew use v0.12.2
```

### パスを通す

.zshenvに以下を追加。

```bash
export PATH=$HOME/.nodebrew/current/bin:$PATH
```


## 参考

- [Mac OSXにnodebrewをインストールする](http://qiita.com/ryosy383/items/2ea9c92a792302b159b0)
- [[Node.js] nodebrewで環境管理](http://yslibr4ry.blogspot.jp/2012/03/nodejs-nodebrew.html)
- [あなたのWeb開発人生を変えるYeoman、Bower、Yoのインストールと使い方 (1/3)](http://www.atmarkit.co.jp/ait/articles/1407/02/news040.html)
AngularJS を使ってみる


AngularJS は JavaScript のフレームワーク。

- [公式サイト](https://angularjs.org/)
- [APIリファレンス](https://docs.angularjs.org/api)

### Node.js をインストール

[こちら](http://qiita.com/kiarina/items/dee17fddefe79f362020)を参考にインストール。

### Yeoman をインストール

```bash
$ npm install -g yo grunt-cli bower generator-gulp-angular
```

### プロジェクトを生成

```bash
$ mkdir <project-dir> && cd $_
$ yo gulp-angular
```

### プロジェクトを再生成

プロジェクトをGitで管理している場合は、clone後に以下を実行。

```bash
$ npm update
$ bower update
```

### ブラウザで確認

変更を監視して、コンパイルやデプロイ、ブラウザのリロードまで実行してくれます。

```bash
$ gulp serve
```

### ビルド

```bash
$ gulp build
```

dist ディレクトリにコンパイルしたデータが出力される。

### ctags 設定

```bash
$ npm install gulp-shell --save-dev
```

gulp/ctags.js を作成。

```javascript
var gulp = require("gulp");
var shell = require("gulp-shell");

gulp.task("ctags", shell.task([
    'echo "generate ctags file."',
    'ctags -R src gulp'
]));
```

gulp/watch.js の watch タスクに以下を追加。

```javascript
gulp.watch(["src/**/*.js", "gulp/**/*.js"], ["ctags"]);
```

### Tern for Vim の設定

.tern-project を作成。

```json
{
    "libs": [
        "browser",
        "jquery",
        "ecma5"
    ],
    "plugins": {
        "angular": "./"
    }
}
```

### 外部ライブラリの追加

```bash
$ bower install <package> --save
```

index.html への追加は wiredep が勝手にやってくれます。

### AngularJS のライブラリについて

AngularJSでは、様々な外部モジュールが提供されている。
必要なものを bower でインストールしよう。

- http://ngmodules.org/


## 参考

- [AngularJSとTwitter Bootstrapを組み合わせて使う](http://qiita.com/zoetro/items/eb3a44e4baa8c367b4aa)
- [あなたのWeb開発人生を変えるYeoman、Bower、Yoのインストールと使い方 (1/3)](http://www.atmarkit.co.jp/ait/articles/1407/02/news040.html)
- [Startup!! Yeoman and AngularJS : Qiita Advend Calendar 2013 12/05](http://blog.kinzal.net/post/68979324453/yeoman-angularjs-qiita-advend-calendar)
UI部品を複数動的作成


はじめに
この記事はobjective-cで見た記事をswiftに書き直しただけで、しかも適当な自分用のメモです。（要は間違ってたりしても許して下さい。）


まずNSMutableArrayを用意

var buttons=NSMutableArray()

 

UIbutton作成のタイミングでNSMutableArrayに追加

tagも追加

for i in 1...10{

var tmp=UIButton(frame:CGRectMake(10,CGFloat(20*i+20),100,50))

tmp.setTitle(textArray[i].forState:UIControlState.Normal)

tmp.addTarget(self,action:"buttontupped",forControlEvents.TouchUpInside)

tmp.tag=i

addSubview(tmp)

buttons .addObject(tmp)