OmniAICreator/Qiita-1.07M huggingface dataset:
電子回路 > 不完全積分回路 > ある周波数: 積分回路 / 別の周波数: 増幅回路

参照: トランジスタ技術 SPECIAL for フレッシャーズ No.104 OPアンプIC活用ノート

「不完全積分回路」というものが紹介されていた。

> fc以下では増幅回路
> fc以上では積分回路

fc: カットオフ周波数

一方で、あらゆる周波数で積分回路となるのは「完全積分回路」という記載となっている。
電子回路 > バイラテラル回路 > 吐き出し、吸い込み、両方向の電流を出力できる

引用: トランジスタ技術 SPECIAL for フレッシャーズ No.104 OPアンプIC活用ノート
p89 電圧-電流変換と定電流源

> ここで紹介した電圧-電流変換回路は、入力電圧が正なら出力電流は吐き出し、入力電圧が負なら出力は吸い込みというように、両方向の電流を出力できます。このため、バイラテラル(bilateral)回路とも呼ばれます。

<hr>
http://toragi.cqpub.co.jp/tabid/193/EntryID/118/Default.aspx

> 一般に，電圧一電流変換回路としては③のバイラテラル回路が多く用いられます．入力電圧の正負に応じて，吸い込み/吐き出しの両出力が得られるからです． 

<hr>
回路バイラテラル・スイッチ [SN74HC4066N]
http://www.aitendo.com/product/10377

<hr>
Devise - email更新時に確認メールを送る(reconfirmable)

#必要事項（4点）

##`confirmable`モジュールがセットされていること

```rb:/app/models/user.rb

class User < ActiveRecord::Base
  #...
  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable, :omniauthable
  #...
```

##`reconfirmable`が有効になっていること

```rb:/config/initializers/devise.rb
Devise.setup do |config|
  #...
  config.reconfirmable = true
  #...
```

##データベースに`unconfirmed_email`コラムが存在すること

```
# == Schema Information
#
# Table name: users
#
#  id                     :integer          not null, primary key
#  email                  :string           default(""), not null
#  encrypted_password     :string           default(""), not null
#  reset_password_token   :string
#  reset_password_sent_at :datetime
#  remember_created_at    :datetime
#  sign_in_count          :integer          default(0), not null
#  current_sign_in_at     :datetime
#  last_sign_in_at        :datetime
#  current_sign_in_ip     :inet
#  last_sign_in_ip        :inet
#  created_at             :datetime
#  updated_at             :datetime
#  confirmation_token     :string
#  confirmed_at           :datetime
#  confirmation_sent_at   :datetime
#  admin                  :boolean          default(FALSE)
#  username               :string
#  provider               :string
#  uid                    :string
#  unconfirmed_email      :string
#
```

##ユーザーに現在メール確認待ちの状態であることを知らせること

```haml:
- if devise_mapping.confirmable? && resource.pending_reconfirmation?
  .alert.alert-warning
    Currently waiting confirmation for: #{resource.unconfirmed_email}
```
![Screenshot 2015-08-09 18.07.17.png](https://qiita-image-store.s3.amazonaws.com/0/82804/a466afec-96e9-65e7-f766-e4d2a3ebfd6c.png)

#特定の状況でのみreconfirmable無効にしたい場合

```rb:例
#...
def update
 @user = User.find(params[:id])
 @user.skip_reconfirmation!
 if @user.update_attributes(params[:user])
  flash[:notice] = "User was successfully updated."
  redirect_to edit_admin_user_path(@user)
 else
  render :edit
 end
end
#...
```

#資料

- [How To: Add :confirmable to Users](https://github.com/plataformatec/devise/wiki/How-To:-Add-:confirmable-to-Users)
- [Module: Devise::Models::Confirmable](http://www.rubydoc.info/github/plataformatec/devise/Devise/Models/Confirmable)
pattern > MVCモデル > シングルチェックボックスのボタンの例 > モデル:ボタンのON/OFF, ビュー:現在のボタンの状態, コントローラ:モデルの状態を更新し、ビューを表示する

引用: C++のためのAPIデザイン by マーティン・レディ
3.5 オブサーバーパターン

> シングルチェックボックスのボタンを例にとれば、現在のボタンのオン／オフ状態は「モデル」に保存され、「ビュー」は現在のボタンの状態を画面に描画し、ユーザがボタンをクリックすると、「コントローラ」が「モデル」の状態を更新し、「ビュー」が表示するのである。
pattern > MVCモデル > ノキアのQt, アップルのCocoa, JavaのSwing、マイクロソフトのFoundation Classライブラリといった現在のUIツールキットは、すべてMVCからインスピレーションを受けている。

引用: C++のためのAPIデザイン by マーティン・レディ
3.5 オブサーバーパターン

> ノキアのQt, アップルのCocoa, JavaのSwing、マイクロソフトのFoundation Classライブラリといった現在のUIツールキットは、すべてMVCからインスピレーションを受けている。
pattern > observer pattern > ...A.cppにB.hを格納し、そのクラスを直接呼び出すことだ。しかし、これではコンパイル時におけるAとBの依存性が発生し...

引用: C++のためのAPIデザイン by マーティン・レディ
3.5 オブサーバーパターン

> たとえば、オブジェクトAはオブジェクトBの存在とインタフェースについて知識がなくては呼び出すこともできない。これを行うための最もシンプルなアプローチは、<font color=red>A.cppにB.hを格納し</font>、そのクラスのメソッドを直接呼び出すことだ。しかし、これではコンパイル時におけるAとBの依存性が発生し、クラス同士が緊密に結合することになる。その結果、クラスAはクラスBを引っ張ってこない限り別のシステムで再利用できなくなるため、クラスAの一般生が低くなる。

「A.cppにB.hを格納」の元の英語文が分からないがおそらく「A.cppにB.hをinclude」なのだろう。格納そのものに間違いはないが、includeの方がわかりやすい。

上記の問題の解決法として observer patternが紹介されている。
c++11 > ラムダ式を利用した「内部イテレータ」

引用: ゲームプログラマのためのコーディング技術 by 大圖衛玄(Moriharu Ohzu)さん

> Iteratorパターンの別の実装方法として、C++11のラムダ式を利用した「内部イテレータ」というテクニックがあります。たとえば、Compositeパターンで紹介した木構造を、内部イテレータで順番にアクセスできるようにしてみます。

```cpp
// ゲームオブジェクト管理ノード
class Node {
public:
  ...
  // 内部イテレータ
  void each(std::function<void (Node*)> fn) {
    fn(this);
    for (auto child: children_) {
       child->each(fn); // 子を巡回
    }
  }
private:
  // 子ノード
  std::list<Node*> children_;
  ...
};
```

利用者側のコード

```cpp
root_.each([&](Node* node) { node->draw(renderer);});
```
IPアドレスを固定する

# IPアドレスを固定する

## 作業
`sudo cp /etc/network/interfaces /etc/network/interfaces.orig`  

`sudo nano /etc/network/interfaces`

```lang:/etc/network/interfaces
[Before]
iface eth0 inet manual

[After]
iface eth0 inet static
address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.1
```

`sudo nano /etc/hosts`

```lang:/etc/hosts
192.168.0.2     raspi
```

## 実行前
`ifconfig`

```lang:result
eth0      Link encap:Ethernet  HWaddr b8:27:eb:e9:--:--  
          inet addr:192.168.0.101  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:28574 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7734 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:24274536 (23.1 MiB)  TX bytes:835426 (815.8 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:508 (508.0 B)  TX bytes:508 (508.0 B)
```

## 実行後
`ifconfig`

```lang:result
eth0      Link encap:Ethernet  HWaddr b8:27:eb:e9:--:--  
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:475 errors:0 dropped:0 overruns:0 frame:0
          TX packets:404 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:45559 (44.4 KiB)  TX bytes:44506 (43.4 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:508 (508.0 B)  TX bytes:508 (508.0 B)
```
c++11 > 簡素なfor文で各要素にアクセス > for (auto& i: a) { i = 0; }

引用: ゲームプログラマのためのコーディング技術 by 大圖衛玄(Moriharu Ohzu)さん

> C++11ではfor文が拡張されました。listクラスやvectorクラスのようにiteratorクラスが実装されているクラスに対して、簡素なfor文で各要素にアクセスできます。

```cpp

// std::vector<int> aの要素に順番にアクセス
for (auto& i : a) {
  i = 0;
}

// std::list<int> bの要素に順番にアクセス
for (auto& i : b) {
  i = 0;
}
```
技術英語 > I'd prefer not to give my name.

@ Start Trek Voyager > Eye of the needle

偽装船の艦長に所属と名前を聞いた時の相手の回答
> I'd prefer not to give my name.

<hr>
https://github.com/MSOpenTech/vagrant-windows-hyperv/issues/54
> vagrant destroy errors out when user <font color=red>prefers not to</font> destroy the VM

<hr>
https://github.com/dweeves/magmi-git/pull/305

> <font color=red>Personally I prefer not to</font> load JS from a CDN on sensitive pages (backends and such), especially when it might be ...
MacOSXを使ってmicroSDにRaspbianを書き込む

# MacOSXを使ってmicroSDにRaspbianを書き込む
## Raspbianをダウンロードして展開しておく
http://downloads.raspberrypi.org/raspbian_latest

## Raspbianを書き込む先になるmicroSDを特定する
`diskutil list`  

```lang:result
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.0 TB     disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            999.3 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk5
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *32.5 GB    disk5
   1:             Windows_FAT_32 NO NAME                 32.5 GB    disk5s1
```

※今回は/dev/disk5でmicroSDが認識されている  
※これを間違えると大惨事になるのでよく確認する

## Raspbianを書き込むためmicroSDをアンマウントする
`sudo diskutil unmountDisk /dev/disk5`

## Raspbianを書き込む
`sudo dd bs=1m if=/[解凍先のPath]/[解凍したRaspbianイメージ].img  of=/dev/disk5`
※今回は
`sudo dd bs=1m if=~/Downloads/2015-05-05-raspbian-wheezy/2015-05-05-raspbian-wheezy.img of=/dev/disk5`

## Raspbianを書き込んだmicroSDをアンマウントする
`sudo diskutil unmountDisk /dev/disk5`

## 取り外したmicroSDをRaspberry Piに取り付けて起動する
【デザインパターン】 Mementoパターン

##概要
データ構造に対する状態を記録しておき、以前の状態への復帰を行えるようにするパターン

以下の3種類のクラスからなる
1. Mementoクラス(2.の内部情報(フィールド値)を保持する)
2. Originatorクラス(内部状態のスナップショットを入れておくために1.オブジェクトを生成する)
3. Caretakerクラス(1.のオブジェクトを操作せずに保管する)

##具体例と実装
描画ソフトを例にすると、

上記1~3はそれぞれ

1. 描画オブジェクトクラス(DrawingObjectクラス、描画ソフトで描かれた生成物オブジェクト)
2. 描画ソフトクラス(DrawingSoftクラス、入力にしたがって描画オブジェクトを作成)
3. 描画物管理クラス(DrawingCaretakerクラス、クリップボードの状態を管理する)

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

```rb:drawing_object.rb
class DrawingObject
  def initialize(drawing)
    @drawing = drawing
  end

  def get_drawing_object
    @drawing
  end
end
```

```rb:drawing_soft.rb
class DrawingSoft
  def initialize
    @drawing = nil
  end

  def draw(drawing)
    # 絵を描く
    @drawing = drawing
  end

  def get_drawing_object
    return @drawing
  end

  def save_drawing_object
    @clipboard = DrawingObject.new(@drawing)
  end

  def load_drawing_object(clipboard)
    @clipboard = clipboard
    @drawing = clipboard.get_drawing_object
  end
end
```

```rb:drawing_caretaker.rb
class DrawingCaretaker
  def initialize()
    @clipboard = []
  end

  def add_to_clipboard(drawing)
    @clipboard << drawing
  end

  def get_from_clipboard
    @clipboard.pop
  end
end
```

クライアントコード

```rb
drawing_caretaker = DrawingCaretaker.new
drawing_soft = DrawingSoft.new

drawing_soft.draw(#{適当な絵})

# save
drawing_caretaker.add_to_clipboard(drawing_soft.save_drawing_object)
puts(drawing_soft.get_drawing_object) # 適当な絵

drawing_soft.draw(#{綺麗な絵})
puts(drawing_soft.get_drawing_object) # 綺麗な絵

# undo
drawing_soft.load_drawing_object(drawing_caretaker.get_from_clipboard)
puts(drawing_soft.get_drawing_object) # 適当な絵
```


##メリット
* Originatorオブジェクトのみが管理すべき情報を外部から隠蔽し、カプセル化の境界を保つことができる

##まとめ
内部状態を保存しundo機能を実装する際に便利なパターン
OpenBabel/C++で構造式(png, svg)を描く


またOpenBabelのお話。インストールは以下参照。
[OpenBabelをc++からいじってみる](http://qiita.com/yanagi3150/items/d83fa3f25210e6a5c4af)

画像を表示したいなーーーってなったので、やった。
手抜きコードなのでOBMol経由・・・（やり方理解したら修正します

##svg版

```cpp/output_svg.cc
#include <iostream>

#include <openbabel/mol.h>
#include <openbabel/obconversion.h>

int main(int argc, char** argv){
  std::string outfile = "test.svg";

  // input molecule using smiles
  std::string smiles = "c1cc(C(=O)N(C)C)c2cc(C(=O)N)ccc2c1";
  std::stringstream ss(smiles);
  OpenBabel::OBConversion conv(&ss);
  conv.SetInFormat("smi");

  OpenBabel::OBMol mol;
  conv.Read(&mol);

  conv.SetOutFormat("svg");
  conv.WriteFile(&mol, outfile.c_str());

  return 0;
}
```

これでtest.svgが出力できる。

##png版
ところで、svgはいろんな所に対応してなかったりいろいろ不便。vector表現なんだけどなー。
ということで、png版も作る。

```cpp/output_png.cc
#include <iostream>

#include <openbabel/mol.h>
#include <openbabel/obconversion.h>

int main(int argc, char** argv){
  std::string outfile = "test.png";

  // input molecule using smiles
  std::string smiles = "c1cc(C(=O)N(C)C)c2cc(C(=O)N)ccc2c1";
  std::stringstream ss(smiles);
  OpenBabel::OBConversion conv(&ss);
  conv.SetInFormat("smi");

  OpenBabel::OBMol mol;
  conv.Read(&mol);

  conv.SetOutFormat("_png2"); //単純にpngではないことに注意
  conv.AddOption("w", OpenBabel::OBConversion::OUTOPTIONS, "500"); //出力幅の設定
  conv.AddOption("h", OpenBabel::OBConversion::OUTOPTIONS, "500"); //出力高さの設定
  
  conv.WriteFile(&mol, outfile.c_str());

  return 0;
}
```

これならここにも貼れる。
![test.png](https://qiita-image-store.s3.amazonaws.com/0/84317/07aa5624-34aa-ae09-c164-045d38ecdad7.png)

こんな感じ。
【デザインパターン】 Proxyパターン

##概要
あるオブジェクトへのアクセスを制御するため、共通のインタフェースを持つオブジェクトが代理をするパターン

以下の3種類のクラスからなる
1. Proxyクラス(2.のインタフェースを実装)
2. Subjectクラス(1,3の共通のインタフェースを定義)
3. RealSubjectクラス(1.で共通化されていない2.のインターフェイスを実装)

##具体例と実装
飲食店の店長代理と店長の仕事を例にすると、
上記1~3はそれぞれ

1. 店長代理クラス(ProxyStoreManagerクラス、重要な仕事以外は店長の仕事を代行する)
2. 店長インターフェイスクラス(StoreManagerInterfaceクラス、店長の行う仕事を定義)
3. 店長クラス(StoreManagerクラス、店長として仕事を行う)

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

```rb:proxy_store_manager.rb
class ProxyStoreManager < StoreManagerInterface
  def instruct(staff)
    # スタッフに指示を出す
  end

  def educate(staff)
    # スタッフを教育する
  end

  def pay_salary(staff)
    puts 'ちょっと待って'
    # スタッフの給料を支払う権限はないので、店長に支払ってもらう
    StoreManager.new.pay_salary(staff)
  end
end
```

```rb:store_manager_interface.rb
class StoreManagerInterface
  def instruct(staff)
  end

  def educate(staff)
  end

  def pay_salary(staff)
  end
```

```rb:store_manager.rb
class StoreManager < StoreManagerInterface
  def instruct(staff)
    # スタッフに指示を出す
  end

  def educate(staff)
    # スタッフを教育する
  end

  def pay_salary(staff)
    # スタッフの給料を支払う
  end
end
```

スタッフクラス、クライアントコード

```rb
class Staff
  def initialize
  end
end
```


```rb
staff = Staff.new
proxy_store_manager = ProxyStoreManager.new
proxy_store_manager.educate(staff)
proxy_store_manager.instruct(staff)
proxy_store_manager.pay_salary(staff)
```

##メリット
* あるオブジェクトへの要求があり次第オブジェクトを生成するといった最適化が行える
* RealSubjectが必要になるまでその生成を遅延することが出来るため、copy-on-writeが実装できる

##まとめ
* 複雑なオブジェクトのインスタンス1つと、それを代理可能な複数のプロキシオブジェクトを使い、必要なときにのみ複雑なインスタンスを生成、変更することで、メモリを節約することが出来る
【デザインパターン】 Chain Of Resposibilityパターン

##概要
要求を受信するフクスのオブジェクトをチェーン状につなぎ、あるオブジェクトがその要求を処理するまでチェーンに沿って要求を渡していくパターン

以下の5種類のクラスからなる
1. Handlerクラス(要求を処理するためのインターフェイスを定義)
2. ConcreteHandlerクラス(要求の中で担当するものについての処理を実装、担当外の要求はsuccessorに転送する)
3. Clientクラス(チェーンの中にある2.に要求を出す)
 
##具体例と実装
会社内での業務確認を例にすると、

上記1~3はそれぞれ

1. 社員クラス(Staffクラス、確認内容のチェックと回答、部下社員への確認指示を行う)
2. 課長クラス、部長クラス、メンバークラス(SectionManagerクラス、Managerクラス、Memgerクラス、自分の担当範囲の業務確認内容かを判断し、回答、あるいは確認指示を行う)
3. 社長クラス(Presidentクラス、確認事項を投げる)

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

```rb:staff.rb
class Staff
  def initialize
    @next_staff = nil
  end

  def set_next_staff(staff)
    @next_staff = staff
  end

  def handle_request(request)
    if check_request(request)
      confirm_request(request)
    elsif(@next_staff)
      next_staff.handle_request(request)
    end
  end
end
```

```rb:section_manager.rb
class SectionManager < Staff
  def check_request(request)
    # 課長に確認可能な内容か判断
  end

  def confirm_request(request)
    # 確認して、確認結果を返す
  end
end
```

```rb:manager.rb
class Manager < Staff
  def check_request(request)
    # 部長に確認可能な内容か判断
  end

  def confirm_request(request)
    # 確認して、確認結果を返す
  end
end
```

```rb:member.rb
class Member < Staff
  def check_request(request)
    true # どんな内容でも確認！
  end

  def confirm_request(request)
    # 確認して、確認結果を返す
  end
end
```

```rb:president.rb
section_manager = SectionManager.new
manager = Manager.new
member = Member.new
section_manager.set_next_staff(manager)
manager.set_next_staff(member)

section_manager.handle_request(request)
```

##メリット
* 要求を処理する相手を知る必要が無いため、オブジェクトの結合度が低くなる
* チェーンの中にオブジェクトを追加したり変更したりすることで、オブジェクトの処理に対する責任の割り振りを柔軟に変更出来る

##まとめ
処理を行う責任を持ったオブジェクトを連ねて、そのなかのどこかの段階でいずれかのオブジェクトが処理を行うパターン
【デザインパターン】 Stateパターン

##概要
状態を表すオブジェクトを導入することで、オブジェクトの内部状態が変化した時に、オブジェクトが振る舞いを変えるようにするパターン

以下の3種類のクラスからなる
1. Contextクラス(クライアントに必要なインターフェイスを定義し、状態を表す3.のインスタンスを保持する)
2. Stateクラス(1.の個々の状態に関する振る舞いをカプセル化するためのインターフェイスを定義)
3. ConcreteStateクラス(1.のある状態に関する振る舞いを実装)

##具体例と実装
自動空調を例にすると、

上記1~3はそれぞれ

1. リモコンクラス(RemoteControllerクラス、空調の運転状態を切り替える)
2. 温度調節クラス(TemperatureControlクラス、運転状態に共通の振る舞いを定義)
3. 冷房クラス、暖房クラス、エコモードクラス(Coolingクラス、Heatingクラス、EcoModeクラス、冷房、暖房、エコモードそれぞれの運転状態での振る舞いを実装)

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

```rb:remote_controller.rb
class RemoteController
  def initialize(drive_mode)
    @drive_mode = drive_mode
  end

  def drive
    @drive_mode.set_temperature
    @drive_mode.drive
  end

  def set_drive_mode(drive_mode)
    @drive_mode = drive_mode
  end
end
```

```rb:temperature_control.rb
class TemperatureControl
  def initialize
    @temperature = nil
  end

  def set_temparature
  end

  def drive
  end
end
```

```rb:cooling.rb
class Cooling < TemperatureControl
  def set_temparature
   @temperature = 28 # 室温を28度にセット
  end

  def drive
    # 設定温度にしたがって冷房運転を行う
  end
end
```

```rb:heating.rb
class Heating < TemperatureControl
  def set_temparature
   @temperature = 20 # 室温を20度にセット
  end

  def drive
    # 設定温度にしたがって暖房運転を行う
  end
end
```

```rb:eco_mode.rb
class EcoMode < TemperatureControl
  def drive
    # エコモードでの運転を行う
  end
end
```

クライアントコード

```rb
# 暑い！
remote_controller = RemoteController.new(Cooling.new)
remote_controller.drive
# 寒い！
remote_controller.set_drive_mode(Heating.new)
remote_controller.drive
```

##メリット
* 状態毎に振る舞いを分割し、新しい状態や遷移の追加がサブクラスの定義によって簡単に行える
* 複数の状態に対して別々のオブジェクトを用意することで、状態の遷移を明確に表現できる
* ConcreteStateオブジェクトをContextオブジェクトをまたいで共有することでメモリを節約できる

##まとめ
オブジェクト本体と、その状態、振る舞いを表すオブジェクトを別に用意することで、条件分岐をへらし、新しい状態、振る舞いの追加を容易にできるパターン
githubのリポジトリのブランチを全部削除する

以下のコマンドでOK

```
$ git branch -r | grep origin/ | grep -v master | grep -v HEAD| cut -d/ -f2 | while read line; do git push origin :$line; done;
```

* originの部分（２箇所）は自分のリモート名に変えてください。
* masterブランチのみ削除から外すようにしています。
簡易password_hashクラス

# まえがき
投稿のテストも兼ねて、試しに作成。
なお、password_hash関数を使用しているので、
動作するのはPHPバージョン5.5.0から。

## 簡易のパスワードクラス

```php:Password.php

$pass1 = 'password1234'; // 基準となるパスワード (登録時など、初めに入力されたパスワード)
$inputPass = $pass1; // ログイン時など入力されたパスワード (今は簡易的に$pass1をコピー)
$savePass = ''; // 基準となるパスワードの保存先 (DBから取得後の変数とか)

class Password {

    public static function passwordHash($password) {
        return password_hash($password, PASSWORD_DEFAULT);
    }

    public static function passwordVerify($inputPass, $savePass) {
        return password_verify($inputPass, $savePass);
    }

}

// *1
$savePass = Password::passwordHash($pass1);

// 照合
if(Password::passwordVerify($inputPass, $savePass)) {
    echo '照合OK!';
} else {
    echo '照合NG!';
}
```

さらに、値やPOST・GETの検証用 'Inputクラス' などを作成し、

```php
// (*1)
$savePass = Password::passwordHash(Input::○○○($pass1));
```

とかして、DBに突っ込むとなお良し・・・だと考える。

# あとがき
ま、とりあえず、こんな感じでスタート。
キャッシュサーバーを使ってネットワーク帯域を安価に買い足す

ネットワークの転送料金って意外と高くてAWSのS3とかその他従量制のサービスは
個人ではとても使おうとは思えないものばかりです。
特に画像共有サービスなどを運営していると深刻な問題になります。
どうにか安く大量の帯域を用意できないか考えていたのですが、キャッシュサーバーを使えば
簡単に安価にネットワーク帯域を買い足すことができることに気づきました。

たぶんキャッシュサーバーを使ったことがある人からすると当たり前なんでしょうけど。

簡単です。￥1,000くらいのVPSにキャッシュサーバーを突っ込めばいい。
帯域が不足したらキャッシュサーバーを足す。DNSラウンドロビンで回す。以上。
運悪く同じ物理マシンに組み込まれたりしなければたった￥1,000くらいで100Mbps(共有)の帯域を買い足すことができます。

さくらVPSとかだと一台で10MB/sec近いDL速度が出てネットワークは無制限に使えます。
S3や帯域を買い増しできるクラウドサービスとかを使うより圧倒的に低コストです。
【しずおかアプリ部】活動ログ　第五回

![しずおかアプリ部3.png](https://qiita-image-store.s3.amazonaws.com/0/88105/66b34080-b6b3-9e20-0d65-50f5db177443.png)


■タイトル
第五回


■開催日
２０１５年８月８日（土）　１６：００～１８：００


■参加者
６名


■活動内容（概要）
・部員さん実演「3Dモデリング実演」
・保坂プレゼン「Cocos2d-xで作る物理演算ゲーム　～環境構築編～」
・菅原プレゼン「Unityはじめるよ　～基礎１～」
・部員さんが開発に参加したアプリ「歯磨き彼女」の紹介


■活動内容（詳細）
【実演・プレゼン】
　<A HREF="http://monolizm.com/sab/pdf/第五回_プレゼン資料(Cocos2d-xで作る物理演算ゲーム　～環境構築編～).pdf">第五回_プレゼン資料(Cocos2d-xで作る物理演算ゲーム　～環境構築編～).pdf</A>

　<A HREF="http://monolizm.com/sab/pdf/第五回_プレゼン資料(Unityはじめるよ　～基礎１～).pdf">第五回_プレゼン資料(Unityはじめるよ　～基礎１～).pdf</A>



・「3Dモデリング実演」
　～3Dキャラのモデリング方法を実演＆動画で紹介～
　　「3ds Max」を使って、麦わら帽子をかぶったキャラクターを作成する。
　　　１、まず人型に頂点を打って、ペラペラのキャラを作る
　　　　　ミラーリングを機能を利用して体の半分を作り、もう半分は自動で生成
　　　２、関節となる部分に頂点を増やし、ポリゴンを分割する
　　　３、ポリゴンを押し出して立体化しながら、各頂点を移動してバランスを整える

　　実演動画
　　http://youtu.be/QxzxwT2MKZo


　～着せ替えモデルの話～
　　服や鎧などの装備を着せかえるときの方法は２通りある。
　　　・キャラと装備を別々に作っておく方法
　　　・キャラの体を胴体、頭などのパーツごと別々に作っておき、「装備とパーツを一体化したモデル」を丸ごと交換する方法（こっちが主流）
　　　　メリット
　　　　　装備を変更した時に、キャラと装備が干渉しないため、身体のポリゴンが飛び出す等が起きない
　　　　　※ただし、別パーツ同士の干渉発生するので注意
　　　　デメリット
　　　　　プログラム側で頂点を繋ぐ作業が必要になるかも。ブレスレットなどのアクセサリーで隠すことでの回避も可能。

　　Unity公式着せ替えチュートリアル(Unity5だと、すんなり動かないです。後日検証してみます)
　　https://www.assetstore.unity3d.com/jp/#!/content/8 


　～顔パーツの作り方～
　　・完全にポリゴンで作成する方法
　　　メリット
　　　　リアルで自然な仕上がりになる
　　　デメリット
　　　　ポリゴン数が増える、ボーンが増えるなどの開発コストと実行速度のコストがかかる

　　・テクスチャで作成する方法
　　　メリット
　　　　実装が容易、表現が豊か、実行時の制御コストが低い
　　　デメリット
　　　　表情毎に絵が必要、アニメーションがパタパタになってしまう、テクスチャメモリを食う
　　　　
　　・ポリゴンで顔パーツの輪郭線を表現する方法
　　　メリット
　　　　制作が容易、実行時のコストが低い
　　　デメリット
　　　　ポリゴンが２重になるため、遠くにいる場合にちらつきが発生する可能性がある

　　どの方法が良いというわけではなく、ゲームの作りによってケースバイケースである。


　～背景の分割方法～
　　スマホなどの低スペック機の場合は、背景は分割せず一つのモデルとして表現する場合が多い
　　マテリアルを共有できるので、高速に描画することができる。


　～Unityシェーダーの話～
　　特殊な表現をしたくてUnityでシェーダーを作った場合、モデリングツール上ではその表現が確認できない
　　・モデリングツール用に同等のシェーダーを作る場合もあるが、開発コストがかかるため、
　　　大体の場合はUnity側で確認する方法をとる


　～Unityと3Dグラフィッカーの役割～
　　Unityを利用することで、効率よく分業ができる。
　　3DグラフィッカーもUnityを触り、最終描画結果まで確認する。
　　Unityパッケージにしてからプログラマーに渡す。


　～スカルプト系モデリングツール～
　　・スカルプトリス（無料）
　　　モデリングはできるが、そのほかの事は他のツールにもっていって作業することが多い
　　・Zブラシ
　　有料のツールはやはり有料なりの価値がある



・「Cocos2d-xで作る物理演算ゲーム　～環境構築編～」
　Cocos2d-xの環境構築から、プロジェクト作成までの流れを実演しながら紹介。
　前提条件：Mac OSX Yosemite, Xcode6.4, Android開発環境
　導入するもの：AndroidNDK r10e, Python2.7.9, Cocos2d-x 3.7
　環境導入、および、プロジェクト作成に、ターミナルのコマンドを使うので、
　導入ハードルは高いように見えるが、実際はそうでもない。



・「Unityはじめるよ　～基礎１～」
　Unityの特徴を紹介。
　実演・体験を交えながら、Unityの主要な機能を紹介。
　時間の都合上、全部はできなかったので、次回に持ち越し。


【部員さんが開発に参加したアプリ「歯磨き彼女」の紹介】
　口の中からひょっこり顔を出してくる虫歯菌をスワイプして引っこ抜くゲーム。
　美少女の表情やセリフにもちゅーもく！
　部員さんはグラフィッカーとして参加
　公式サイト　http://www.tokyootakugames.com/cavity.html
　YouTube　https://youtu.be/6pHoigF_h_Q
なぜループカウンタ変数のほとんどに “i”が使用されるのか？

索引であるインデックス(Index)の「i」でしょ？と思った方、それが正解だと思います。

確かに、i, j,など1文字変数をインデックス参照などに使われるループカウンタとして使う慣習は最初の高級言語であるFORTRANに由来します。  
当時のFORTRANではデフォルトで変数の型宣言が不要であり、アルファベットI～Nの1文字目の変数名が整数型、それ以外は実数型という言語仕様になっていました。([変数名は6文字までOK](https://archive.computerhistory.org/resources/text/Fortran/102649787.05.01.acc.pdf))
FORTRANはもともと理工系向きの言語として設計されており、数学の式の習慣に則って整数にI,J,Kが採用されていたとしても不思議ではありません。
現に数学の総和(シグマ)はiを添字として使ってますし(最近のΣの公式ではkが採用されてますね、iは虚数[imaginary number]と混同されるからかな)、デカルト座標にはI,J,Kが使われます。

FORTRANの作者であるBakusは、この命名規則については『Iから始まる6文字に決まったのは、みんな添え字にI、J、Kをつかっていたので、(L、M、Nを)気前よく増やした。』と言っています。また、I～NなのはI-Ntegerというアメリカンなシャレもあるかも知れません。


アルファベットの「I」は、Index,Iterator,Integerの頭文字ですから変数として使用するにも都合がいい。また、アルファベットの「I」の起源であるギリシア文字のイオタ(iota)は小さな変化の意味があり、カウンタとは小さな変化を起こしているともいえるでしょう。

ループカウンタ変数の名前に下手に悩むより慣習のまま「i」を使うのが悩まず楽でいいですよね。
あと、「j」と「k」をループカウンタ変数として使用するのは「i」の次の文字という自然な理由です。

参照:
[Why do most of us use 'i' as a loop counter variable?](http://programmers.stackexchange.com/questions/86904/why-do-most-of-us-use-i-as-a-loop-counter-variable)
[Why are variables “i” and “j” used for counters?]
(http://stackoverflow.com/questions/4137785/why-are-variables-i-and-j-used-for-counters)
[なぜ for 文に使うループ変数は i なのか？]
(http://blogs.wankuma.com/jitta/archive/2007/01/25/58555.aspx)
[ループ変数 i, j, k]
(http://togetter.com/li/138510)
[C++0xの完全なドラフトが9月に出ること、および、Iotaについて]
(http://cpplover.blogspot.jp/2008/07/c0x9iota.html)
[【数列】シグマ記号（Σ）は「和」を表す]
(http://oto-suu.seesaa.net/article/243869238.html)
【メモアプリ】タイトル作成

#メモアプリのタイトル
メモアプリのタイトルは、TextBoxでの入力ではなく、Evernoteのタイトルのように枠線がなく。placeholderがセットされているタイトルとする。
#React.jsでタイトルコンポーネント作成
以下のコンポーネントを作成

```js:ContentEditable.js
{/*
　・ContentEditableを有効にする
　・placeholderの値を動的に設定出来るようにする。
　・値が入力された場合、placeholderの値が消えること。
　・値がなくなった場合、placeholderの値が表示されること。
 ・ENTERを押しても、Cancelされること。
*/}

window.React = require('react');
var React = require('react');

var ContentEditable = React.createClass({
	propTypes:{
	 	placeholder: React.PropTypes.string.isRequired
	},
	getDefaultProps: function(){
		return {
			placeholder: 'メモの題名を入力してください',
			allowEnter: false,
			fontType: 'Normal__font'
		}
	},
	getInitialState: function(){
		return{
			Value: '',
			isShowDefaultValue: true
		};
	},
	getDefaultValue: function(){
		return this.state.isShowDefaultValue ? this.props.placeholder : '';
	},
	handleChange: function(e){
		if(e.target.firstChild == null){
			this.setState({
				isShowDefaultValue: true
			});
		}　else　{
			this.setState({
				isShowDefaultValue: false,
				Value: e.target.firstChild
			});
		}
	},
	cancelEnter: function(e){
		if(!this.props.allowEnter){
			if((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)){
				return false;
			}			
		}
	},
	render: function(){
		var self = this;
		return (
			<div contentEditable 
				className={this.props.fontType}
				data-placeholder={this.getDefaultValue()} 
				onInput={this.handleChange.bind(self)}
				onKeyDown={this.cancelEnter.bind(self)}>
				{this.state.titleValue}
			</div>
		);
	}
});

module.exports = ContentEditable;
```

```css:memoer.css
.Normal__font{
	color: #2dbe60;
	line-height: 32px;
	font-size: 28px;
	font-weight: 300;
	outline: none;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

[data-placeholder]::before {
	content: attr(data-placeholder);
	opacity: 0.5;
}
```

##ContentEditable
HTMLのタグを編集可能にする場合、編集したいタグに対して、contentEditable=trueをセットする。ただし、React.jsの場合、contentEditableをセットする場合、以下のようにcontentEditableのみを指定するとcontentEditable=trueと同じ状態となるらしい。

>			<div contentEditable></div>

##onInput
divタグのContentEditableをセットした場合、onChangeイベントではなく、onInputイベントにてHandlerをセットしたところ、変更時にHandlerが実行された。

##改行のキャンセル
タイトルでは、改行を含まない仕様とするため、以下の処理を追加することで、改行をキャンセルし、改行を防止する。「13」は、Enterキーのキーコードとなる。

```js:ContentEditable.js
	cancelEnter: function(e){
		if(!this.props.allowEnter){
			if((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)){
				return false;
			}			
		}
	}

　　　　　・・・・・・・・

                       <div contentEditable
				className={this.props.fontType}
				data-placeholder={this.getDefaultValue()} 
				onInput={this.handleChange.bind(self)}
				onKeyDown={this.cancelEnter.bind(self)}>
				{this.state.titleValue}
			</div>



```
RaspberryPiからmi.1につないでMIDI楽器の音を鳴らしてみる


今度はQUICCO SOUNDのmi.1というBLE MIDI I/Fを扱ってみる。
[前回](http://qiita.com/yujimny/items/ff747ed89caa94036d5f)と同様、RaspberryPiにBLEドングルを接続してBluezを使用するが、今回はサンプルソースコードがないので自力で調べてみる。

そこで、LightBlueというソフトを使用。Macにインストールする。
[参考URL](http://qiita.com/kazuph/items/85ae7b350cd8a4209541)


LightBlueを使ってmi.1に接続すると、Servicesに三つ出てくるので順番にいろいろ見ていくが、結論から言うとUUID`03b80e5a-ede8-4b33-a751-6ce34ec4c700`これを選択すると一つのCharacteristicsにたどり着く。
![スクリーンショット 2015-08-10 0.51.02.png](https://qiita-image-store.s3.amazonaws.com/0/29493/30db0567-3acb-55f0-f883-93190e14646a.png "スクリーンショット 2015-08-10 0.51.02.png")

`7772e5db-3868-4112-a1a9-f2669d106bf3`これがBLE MIDIのR/WをするUUIDになる。
ここで右側にSubscribeボタンがあるので押してみる。
そして試しにmi.1をMIDI鍵盤につないでキーを押すと、なにやら反応することがわかる。
これで受信が出来るらしい。

送信は、Subscribeの下の方にあるWrite Hexテキストボックスに入れる。
ここにMIDIコマンドを入れてやる。
音を鳴らすのと止めるのだけ簡単に書く。

|Command|Meaning|Param1|Param2|
|:------|-------|------|-----:|
|90|Note-on|Key(0-127)|Velocity(0-127)|
|80|Note-off|Key(0-127)|Velocity(0-127)|

音を出すには、0x90,0x45,0x7fあたりを突っ込んでみる。
テキストボックスには90457fと入れてみる。
しかし鳴らない。

で、SubscribeしたときのHex情報を見てみると、0x8080FEとなっていて、おそらくヘッダ情報がつくのだろうと推測。
まずはその通りやってみた。
8080fe90457f
鳴らず。
そこでSubscribeしたときに鍵盤を叩いてみるとどうなっていたか、やってみると0x8080904568って具合に帰ってくる。
feはいらなかった、ということで808090457fと入れると、見事に鳴った！（もちろん試行錯誤の過程を省いたわけでここまでこんなにすんなりとはいってない）

あとはBluezで同じことをやってみるだけ。

```
[XX:XX:XX:XX:XX:XX][LE]> primary
attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0008, end grp handle: 0x000b uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x000c, end grp handle: 0x0016 uuid: 0000180a-0000-1000-8000-00805f9b34fb
attr handle: 0x0017, end grp handle: 0x001a uuid: 03b80e5a-ede8-4b33-a751-6ce34ec4c700
attr handle: 0x001b, end grp handle: 0xffff uuid: 00001530-1212-efde-1523-785feabcd123
```

`03b80e5a-ede8-4b33-a751-6ce34ec4c700`のhandleは`0x0017`なので、

```
[XX:XX:XX:XX:XX:XX][LE]> char-desc 0x0017
handle: 0x0017, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x0018, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0019, uuid: 7772e5db-3868-4112-a1a9-f2669d106bf3
handle: 0x001a, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x001b, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x001c, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x001d, uuid: 00001532-1212-efde-1523-785feabcd123
handle: 0x001e, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x001f, uuid: 00001531-1212-efde-1523-785feabcd123
handle: 0x0020, uuid: 00002902-0000-1000-8000-00805f9b34fb
```

`7772e5db-3868-4112-a1a9-f2669d106bf3`
のhandleは`0x0019`になる。

```
[XX:XX:XX:XX:XX:XX][LE]> char-write-req 0x0019 808090457f
```

OK。
ノートOFFするときは

```
[XX:XX:XX:XX:XX:XX][LE]> char-write-req 0x0019 8080804500
```

で音は消える。

これでRaspberryPiから無線でMIDI動かせちゃうね！
最初にハマるScalaの省略記法(無名関数編)


## はじめに
普段Javaで開発している私が、Scalaを覚えようとネット上のサンプルソースを読んだ際最初に感じたのが
**「あれ、さっき見たソースとなんか違う..」**
でした。

調べたところScalaでは多くの **省略記法** が存在し、 **同じ処理でも様々な書き方ができる**そうで、

* 自明な型や変数を省略することで、スッキリした可読性の高いコードになる
* カッコの省略やドット(.)をスペースに置換えにより、自然言語に近い記述となる
* 単純にタイプ量が減り、読み書きの時間が削減され生産性向上につながる

などのメリットがあるそうです。

今回は無名関数の省略記法についてまとめたので、参考にしてみてください。

## 無名関数の省略記法
```scala:AnonymousFunctionSample.scala

object AnonymousFunctionSample {
  def main(args: Array[String]) {
  
    val strs = Array("foo", "bar")

    //以下、全て同じ結果を返す

    // 基本となる無名関数の文法「(変数名 :型) => { 処理 }」
    strs.foreach((str :String) => { println(str) })

    // 変数の型は省略可能。省略した場合は型推論が行われる
    strs.foreach(str => { println(str) })

    // 処理ブロックの{}は省略可能
    strs.foreach(str => println(str))

    // 変数名に「_」を利用すると変数宣言が省略可能
    strs.foreach(println(_))

    // 処理内での引数が1つとなる場合、変数そのものを省略可能
    strs.foreach(println)
  }
}
```

## 参考
以下のサイトを参考にさせて頂きました。

* [Scalaの文法一覧](http://xerial.org/scala-cookbook/recipes/2012/06/28/grammar/)
Surface 3に開発環境をつくる - Part2: Minttyのターミナル

Surface3のディスプレイは10.8インチで画面解像度は1920×1280ドットです。デフォルトでは「テキスト、アプリ、その他の項目のサイズを変更する」が150%に設定されています。タブレットモードで使う場合はこれで十分ですが、ノートPCとして使う場合はとても文字が小さく感じます。このままプログラミングで使うと目が疲れてしまうので、フォントを変えたり、OSのテキストサイズを変更する必要があります。コマンドプロンプトは開発環境に適していないので、[Mintty](http://mintty.github.io/)をインストールして使います。

## OSのテキストサイズ

Windows10では画面を右端から左にスワイプすると「チャーム」の代わりに「アクションセンター」が表示されます。「すべての設定」をタップすると「設定」画面が表示されます。右上の「システム」をタップすると「ディスプレイのカスタマイズ」画面になります。設定は好みですが、プログラミングで使う場合、テキストのサイズは200%の最大にすると見やすいです。

![display.png](https://qiita-image-store.s3.amazonaws.com/0/43745/095fc56a-b9dd-52ef-04d0-29fb7d0c59a4.png)

## Mintty

[MinGW](http://www.mingw.org/)から[MSYS](http://www.mingw.org/wiki/msys)をインストールしたあとに`mingw-get`コマンドから[Mintty](http://mintty.github.io/)をインストールします。

### MinGW

mingw-get-setup.exeを[ダウンロード](http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download)して実行します。[MinGW](http://www.mingw.org/)はWindows用のGNUツールです。MinGWからMSYSをインストールしたいのでmsys-base A Basic MSYS Installation (meta)にチェックを入れます。MSYSはWindowsでBashを動かすためのツールです。

![mingw.png](https://qiita-image-store.s3.amazonaws.com/0/43745/21fac51c-bddf-cb78-b85a-39bfc4e473af.png)


### 環境変数

左下のWindowsボタンからシステムプロパティのダイアログを表示して環境変数ボタンを押します。

* コントロール パネル > システムとセキュリティ > システム > システムの詳細設定 > 環境変数


![system-property.png](https://qiita-image-store.s3.amazonaws.com/0/43745/60f7855a-a9f6-1088-6d55-aa4e4352b883.png)


ユーザー環境変数に`HOME`を作成します。

```text
C:\MinGW\msys\1.0\home\{username}
```

### MSYS

以下のフォルダにあるmsysを起動します。

```
C:\MinGW\msys\1.0\msys
```

シェルが起動するので、updateをした後にminttyをインストールします。

```
$ mingw-get update
$ mingw-get install mintty
```

### Ricty Diminishedフォント

プログラミングに適したフォントの[Ricty Diminished](https://github.com/yascentur/RictyDiminished)をインストールします。リポジトリのページから[RictyDiminished-master.zip](https://github.com/yascentur/RictyDiminished/archive/master.zip)をダウンロードします。zipを解凍してすべてのフォントをインストールします。

### Minttyの設定

MSYSのbinにインストールされたminttyを起動します。またminntyを右クリックしてタスクバーとスタート画面にピン留めをしておきます。

```
C:\MinGW\msys\1.0\bin\mintty
```

タイトルバーを右クリックして`Options`を選択します。好みですが以下のように設定します。

* Text
 * Font: Ricty Dimished Discord: 16-point
 * Locale: ja_JP
 * Characterset: UTF-8

![text.png](https://qiita-image-store.s3.amazonaws.com/0/43745/6be37a20-a0ac-7993-0f1d-26f945068c79.png)


* Window
 * Columns: 100
 * Rows: 30

![window.png](https://qiita-image-store.s3.amazonaws.com/0/43745/9614abff-eae2-2a26-307a-b3a48bf403d2.png)


## 開発環境

MinttyではエディタとSSHが使えればよいので、vimとopensshをインストールします。

```
$ mincw-get install msys-vim
$ mincw-get install msys-openssh
```

ssh-keygenコマンドでキーペアを作成します。

```bash
$ ssh-keygen -t rsa
```

[ssh-copy-idのシェルスクリプト](http://gabrielsomoza.com/server-administration/ssh-copy-id-implementation-for-mingw-and-msys/)などを使いログインするサーバーに公開鍵を登録しておきます。
React.js始めます

#はじめに
　BackBone.jsとViewに特化したReact.jsを組み合わせて、アプリケーションを作成する。３歩歩くと忘れてしまう、鶏級の脳みそを持つ筆者の備忘録として記事を記載する。
#作成するアプリケーション
メモを入力して保存するアプリケーションを作成する。
##仕様
* メモの仕様は、以下とする。
    * 左上にタイトルをセットする。
    * 右上に日付をセットする。
    * 初期状態で4つのメモを入力できる入力項目を準備する。
    * ドラッグ＆ドロップで画像のインプットアウトプットを実現する。
    * カウントダウンタイマーを設ける。時間は、任意に設置可能とする。
    * メモから派生してメモを記載できるようにする。
    * 各メモの関連状態を見た目で確認できるインターフェースを設ける。
Unity3Dプロジェクトのバージョン管理が必要なファイル

Unity3Dでバージョン管理が必要なファイルのメモ
使用したのはUnity5.1.2fです。

新規でプロジェクトを作成するとこんなファイルができます。
基本的にバージョン管理必要なのは「Assets」「ProjectSettings」ディレクトリとその中にあるものだけです。

それ以外はバージョン管理不要です。
Monodevelopを起動するとsln,csproj,userperfsファイルが作成されますが、これもバージョン管理不要です。


![UnityNewProjectSS.png](https://qiita-image-store.s3.amazonaws.com/0/89022/6e0de45d-82d4-a914-2d58-cb493682900e.png)


古いバージョン(Unity3以前)だと、違うので注意。
そこまで古いものはもうあんまり使われていないと思いますが...
(1)JavaScriptのオープンソースのコードを読んでいく


「2048」というゲームのソースコードを読んでいきます

ソースには以下のサイトよりアクセスできます

https://github.com/gabrielecirulli/2048


## animframe_polyfill.jsを読んでいく

ソースコードには以下のURLよりアクセスできます

https://github.com/gabrielecirulli/2048/blob/master/js/animframe_polyfill.js

３行目の

```js
var vendors = ['webkit', 'moz'];
```

これは、ブラウザのベンダーを指定していますね。webkitはおそらく、Appleのブラウザと考えることができます。mozはもちろんmozilla FireFoxですね。


４行目から８行目までの

```js
  for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
    window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||
      window[vendors[x] + 'CancelRequestAnimationFrame'];
  }
```

ここで、windowはグローバルの変数を格納するオブジェクトですね。window.requestAnimationFrameが格納されている場合はこのループは実行されません。
まずは、
window.webkitRequestAnimationFrameの内容を
window.requestAnimationFrameに代入しています。
同じく、
window.webkitCancelAnimationFrameの内容が存在すればその内容を、存在しなければ
window.webkitCancelRequestAnimationFrameの内容を
window.cancelAnimationFrameに代入しています
それぞれ関数が代入されるわけですね。
そのあと、window.requestAnimationFrameを再びループの最初でチェックすることにより、代入されているかわかります。
おそらくですが、Appleのブラウザの場合には代入されることとなり、mozなどの他のブラウザの場合は次のループで代入されることとなります。

では、次のループでは
window.requestAnimationFrameに
window.mozRequestAnimationFrameの内容が代入され、

window.calcelAnimationFrameに
window.mozCancelAnimationFrameの内容が、それが存在しなければ
window.mozCancelRequestAnimationFrameの内容が代入されます

この２回のループでも代入されない場合は

10行目から２１行目まで

```js
  if (!window.requestAnimationFrame) {
    window.requestAnimationFrame = function (callback) {
      var currTime = new Date().getTime();
      var timeToCall = Math.max(0, 16 - (currTime - lastTime));
      var id = window.setTimeout(function () {
        callback(currTime + timeToCall);
      },
      timeToCall);
      lastTime = currTime + timeToCall;
      return id;
    };
  }
```

ここで、関数が代入されることとなります。
ここでは、currTimeで現在のタイムスタンプを取得し、lastTimeは最初は０で初期化されているので、timeToCallは０を代入される。
そして、callbackには、現在の時間が代入されることとなり、即座に描画が実行される。
lastTimeには、描画が実行された時間が代入されることとなり、次にrequestAnimationFrameが呼び出されると、１６秒後に描画が実行されることとなる。
つまり、このルーチンは、１６秒ごとに描画を実行する仕組みを記述したものとなる。

２３行目から２７行目では、cancelAnimationFrameがもし設定されていなければ代入されることとなる

```js
  if (!window.cancelAnimationFrame) {
    window.cancelAnimationFrame = function (id) {
      clearTimeout(id);
    };
  }
```

では、次回は別のコードを読み解いて行きます。
桁があふれるぐらい大きな整数で加減算をしてみる

#はじめに
初カキコ…ども…
マークダウンとかWikipediaぐらいしか経験無いので許してください。
この内容絶対既出ですが見つからないのでどこにあるか誰か教えてください！
あとプログラムとか初心者なんでこうした方がいいとかぜひコメント下さい。

#概要
64bitもしくは32bitを超える符号なし整数(integer)が桁あふれを起こすことは周知の事実ですが、桁があふれるぐらい大きな整数をどう扱えばいいの？という疑問に誰も答えてくれなかったので考えてみました。
てか普通に誰か考えてると思うけどまあ車輪の再発明は悪いことではないでしょう。

#実装
##格納
まずは64bitで表せる最大値、すなわち9223372036854775807を越える数字を格納します。
え、いやまあ一の位から順番に配列に格納していくだけです。

```php:格納
//9223372036854775808を格納する
$num = '9223372036854775808';
$digit = strlen($num);

for($i=$digit-1;$i>=0;$i--){
 $array[$i] = substr($num, $i, 1);
}
```

for文の条件式が汚いような。arrayにした時に0番目を一の位にするか最上位にするかはお好みかな？

##足し算
足し算をします。$1+1=2$、簡単だね。

```php:足し算
function array_add($a,$b){//$a:足される数、$b:足す数。それぞれarray

    //大きい方の桁数を取得
    if(count($a)>count($b)){
        $n = count($a);
    }else{
        $n = count($b);
    }

    $c[0] = 0;
    for($i=0;$i<$n;$i++){

        //undifined対策
        if(!isset($a[$i])){
            $a[$i] = 0;
        }elseif(!isset($b[$i])){
            $b[$i] = 0;
        }

        $c[$i] = $a[$i] + $b[$i] + $c[$i];
        
　　　　//繰り上がり処理
        if($c[$i]>9){
            $c[$i+1] = 1;
            $c[$i] -= 10;
        }else{
            $c[$i+1] = 0;
        }
    }

　　//最後に頭に0が着くことがあるので消す
    $m = count($c)-1;
    for(;$c[$m] == 0;$m--){
            unset($c[$m]);
    }

    return $c;
}
```

これだけ。特に無駄はないと思うんだけどどうだろう？最後の0消すfor文はいらないかもしれない。

##引き算
引き算をします。$2-1=1$、簡単だね。

```php:引き算
function array_sub($a,$b){//$a:足される数、$b:足す数。それぞれarray

    //大きい方の桁数を取得
    if(count($a)>count($b)){
        $n = count($a);
    }else{
        $n = count($b);
    }

    $c[0] = 0;
    for($i=0;$i<$n;$i++){

        //undifined対策
        if(!isset($a[$i])){
            $a[$i] = 0;
        }elseif(!isset($b[$i])){
            $b[$i] = 0;
        }

        $c[$i] += $b[$i] - $a[$i];

　　　　//繰り下がり処理
        if($c[$i]<0){
            $c[$i] += 10;
            $c[$i+1] = -1;
        }else{
            $c[$i+1] = 0;
        }
    }

　　//最後に頭に0が着くことがあるので消す
    $m = count($c)-1;
    for(;$c[$m] == 0;$m--){
            unset($c[$m]);
    }

    return $c;
}
```

足し算と引き算は同じものだと実感しました。

##掛け算(おまけ1)
まだ任意桁×一桁しか出来てません。

```php:掛け算
function array_multi_single($a,$b){//$a:掛けられる数、任意桁 $b:掛ける数、一桁　それぞれarray
    $n = count($a);
    $c[0] = 0;
    for($i=0;$i<$n;$i++){
        $c[$i] += $a[$i]*$b;

        //繰り上がり処理
        if($c[$i]>9){
            $d = (int)floor($c[$i]/10);
            $c[$i] -= 10*$d;
            $c[$i+1] = $d;
        }else{
            $c[$i+1] = 0;
        }
    }

　　//最後に頭に0が着くことがあるので消す
    $m = count($c)-1;
    for(;$c[$m] == 0;$m--){
            unset($c[$m]);
    }

    return $c;
}
```

足し算より短く済むことに驚きを隠せないが当然である。

##べき算(おまけ2)
上の掛け算を使うとべき算もできます。

```php:べき算
function array_pow($a,$b){//$a:基数、$b:指数。$aの$b乗
    $c = $a[0];

　　//0乗は1
    if($b == 0){
        return array(1);
    }

    for(;$b>1;$b--){
        $a = array_multi_single($a, $c);
    }
    return $a;
}
```

2の1024乗とかが意外と速くもとまってびっくり

#まとめ
くぅ～疲れましたw これにて完結です！
一言で言えば、筆算、ですね。やってることは完全に筆算です。なので掛け算の計算量は$O(n^2)$になっているはず。つまりもっと計算量を減らせるということですね。
このアイデア僕が一番乗りとは決して思えないんで、同じことしてるサイトとかあったら教えてください。あとソースの改善とか、お叱りとか、お待ちしております。
[memo][解決] whitespace.el の customize がうまくいかない。

`whitespace.el` で space をxyzzy 風に表示したい。同 file の l. 937 - 

```whitespace.el
;; Hacked from `visible-whitespace-mappings' in visws.el
(defcustom whitespace-display-mappings
  (if (>= emacs-major-version 23)
      ;; Emacs 23 and higher:
      '(
	(space-mark   ?\     [?\u00B7]     [?.]) ; space - centered dot
	(space-mark   ?\xA0  [?\u00A4]     [?_]) ; hard space - currency
	(space-mark   ?\x8A0 [?\x8A4]      [?_]) ; hard space - currency
	(space-mark   ?\x920 [?\x924]      [?_]) ; hard space - currency
	(space-mark   ?\xE20 [?\xE24]      [?_]) ; hard space - currency
	(space-mark   ?\xF20 [?\xF24]      [?_]) ; hard space - currency
```

がにおう。`u00B7` は centerd dot を指すので、ここを変えればよいはずだ。だがこの S 式を scratch buffer に貼り付けていじって評価してやっても反映されない。なぜだろうか。

# 解決編

http://d.hatena.ne.jp/t_ume_tky/touch/20120906/1346943019 を参考にしたらうまくできた。
https://github.com/idaisukee/.emacs.d/blob/gnupack/init-files/whitespace-init.el というふうに書いた。
[memo] net でも読める広報印刷物

- [広報誌ほっかいどう](http://www.pref.hokkaido.lg.jp/ss/tkk/koho/kbacknumber.htm)
- [電脳会議](http://gihyo.jp/book/dennou)

これらは自分で保存しなくて良いし、 scan もしなくて良い。
Javaでびっくりした書き方×2

Androidアプリを開発することになり、Javaを使い始めました。今まで使ったことのない状態で、断片的な知識だけはあったのですが、実際に使ってみると、「こんなこともできるんだ」と驚くことがちょくちょくありました。

# 文字列 + 数値
デバッグメッセージを出そうとして、その中に数値を取り込む必要があったのですが、文字列の中に数値を混ぜるにはどうすればいいのだろうと、そこから調べることになりました。

で、得られた結論が、

```java:数値と文字列の連結
int i = 2;
String s = "hoge: " + i ;
```

「Javaは型が厳密だ」という意識があったので、何かしらの変換メソッドを呼ぶことになると思っていたのですが、こんなにシンプルにできるのが意外でした。

# その場でインターフェースを実装
JavaScriptであれば関数が存在しますし、Rubyにはブロックがありますが、Javaの場合はクラスから遊離したメソッドをコールバックに使うわけにも行かないようです。

そこでインターフェースが登場するわけですが、当然ながら具象クラスとして継承しないと実装になりません。ただ、それごとにクラスが増えると扱いは面倒だな、というように思っていました。

と思っていろんなコードを眺めていると、以下のようなコードが出てきました。

```java:その場継承
hoge.setOnSomeCallBack(new SomeInterface(){
    public void onFoo(){
        //略
    }

    //略
});
```

いきなりインターフェースをnewしていて面食らったのですが、どうやらこの構文で、特定のインターフェースを実装したクラスをその場で作ることができるという事でした。

# おわりに
Javaの世界も広大なので、迷わないように精進が必要そうです。
BrowserStack + browserstack-webdriverで、ブラウザごとのテストを自動化する


## セットアップ
BrowserStackのアカウントがあれば、すぐに試せるexampleを作りましたので、[こちら](https://github.com/imunew/browserstack-node-example)を参照ください。

## テストコード
```coffee
webdriver = require("browserstack-webdriver")
config = require("./config")

# Input capabilities
capabilities = config.browserstack
capabilities["browser"] = "IE"
capabilities["browser_version"] = "9.0"
capabilities["os"] = "windows"
capabilities["os_version"] = "7"
capabilities["resolution"] = "1024x768"


describe "E2E test examples with \"browserstack-webdriver\"", () ->

  this.timeout(config.mocha.timeout)

  it "Search \"BrowserStack\" by google.", () ->

    driver = new webdriver.Builder().
              usingServer("http://hub.browserstack.com/wd/hub").
              withCapabilities(capabilities).
              build()

    driver.get("http://www.google.com/ncr")
    driver.findElement(webdriver.By.name("q")).sendKeys("BrowserStack")
    driver.findElement(webdriver.By.name("btnG")).click()

    driver.getTitle().then((title) ->
      console.log(title)
    )
    driver.quit()
```

## 実行結果サンプル
Windows7 + IE9 にて、
![browserstack-node-example.png](https://qiita-image-store.s3.amazonaws.com/0/26422/2ba77f9b-3683-094f-f803-fa4ed4949f6c.png "browserstack-node-example.png")

## 参考
- https://www.browserstack.com/automate/node
- [BrowserStack + facebook/php-webdriver で、ブラウザごとのテストを自動化する](http://qiita.com/imunew/items/dd68924ea5d6b3c982d9)
- [Nightmare + mocha ベースに、coffee-scriptでE2Eテストを書く](http://qiita.com/imunew/items/4b636c7c5604d2e5828b)
ActiveRecord でカラムの値をオブジェクトに変換して取得する

※ composed_of を使用した方がスマートに解決できるようです。詳しくは @jnchito さんのコメントをご覧ください。

* * *

ActiveRecord でカラムの値を取得するとき、普通はもちろん DB に格納されている値を
取得することになるんですが、Float の値を [Value Object](http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/) に変換して取得したいときがありました。

そんなときは、カラム名のメソッドを作れば解決できます。
メソッド内で元の値を取得する時は `read_attribute()` を使用しましょう。

```ruby
# coding: utf-8
class User < ActiveRecord::Base
  # user.rate でレコードの値を直接取得せず、
  # Rating オブジェクトに変換したものを取得している
  def rate
    # レコードの rate の値は read_attribute() で取得
    @rate ||= Rating.new(read_attribute(:rate))
  end
end
```

さて、これを定義した場合に困るのが validates です。
`validates :rate` と記述した際、値に対してバリデーションをかけたいのに、
`Rating` オブジェクトに対してかかってしまいます。

そんな場合には生データを取得するためのメソッドも用意して、
そっちにバリデーションをかけましょう。

```ruby
# coding: utf-8
class User < ActiveRecord::Base
  validates :raw_rate,
    format: {with: /\A\d+(\.\d{1,2})?\z/},
    numericality: {more_than_or_equal_to: 0, less_than_or_equal_to: 100}

  def raw_rate
    read_attribute(:rate)
  end
end
```

少し回りくどいですが、これでデータを Valude Object で取得できました。
データ取得時に何らかの前後処理を入れたいときにもこの方法を利用できると思います。

もっと良い方法があれば是非コメントください。
2015-08-29 unity > プロジェクト名の変更 > フォルダ名を変更 / .slnと.userprefsは削除する > MonoDevelopでスクリプトを開いた時に.sln / .userprefsが再作成される

```txt:動作確認
Unity 5.1.2-f1 on MacOS X 10.8.5
```

途中まで作成していたプロジェクトについてプロジェクト名を変更したくなった。

- 変更前 : udpEcho
- 変更後 : udpRepeater

[answers.unity3d.com](http://answers.unity3d.com/questions/261558/renaming-the-entire-project-how-to.html)を参考にした。

> Quit Unity, rename the main folder, the one that contains Assets and co, and restart Unity. 
...
> How about the .sln and .userprefs names to match the rename of the folder?
...
> You can just remove them, Unity will regenerate them afterwards


1. Unityを終了する
2. フォルダ名を変更する (udpEcho -> udpRepeater)
3. .slnファイルを削除する (下図参照)
4. .userprefsファイルを削除する
5. 新しいプロジェクトで開く (Open Other -> フォルダ選択)
6. script (C# or javascript)をダブルクリックしてMonoDevelopを開くと .slnファイルと.userprefsなどが新しい名前(udpRepeater.*)で再作成される

変更前
![udpEcho.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/7782c24b-fefd-906c-fe79-33f447d4cd65.jpeg)

変更後
![udpRepeater.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/94148a34-3e7c-f671-de6a-400396739422.jpeg)
Snippet jQuery Syntax Highlighterとjquery.browser


```js:jquery.snippet.js

if($.browser.opera){
//処理
} else {
//処理
}

if($.browser.webkit){
//処理
}

```

##解説
シンタックスハイライトするライブラリ[snippet][2]をjquery-1.11.3.min.jsと共に使用すると正常に実行されなかった。webコンソールを見ると、\$.browserでエラーが出ていた。ググってると、どうやら、この\$.browserがjQuery1.9で消えたそうだ。エラーを出さないためには、\$.browserを仕様している箇所を変更する必要がある。jquery.snippet.jsでは、\$.browser.operaが1箇所、\$.browser.webkitが2箇所あった、これらを変更する。
\$.browser.operaと\$.browser.webkitは何をやっているのか？
[jQuery.supportでのブラウザ判別][1]によると


```js:
if(jQuery.browser.opera){
alert('あなたがお使いのブラウザはoperaです');
}
if(jQuery.browser.webkit){
alert('あなたがお使いのブラウザはchromeもしくはsafariです');
}

```
となっている、jQuery.browserの代わりは、jQuery.supportを使う。
chromeとsafariはjQuery.support.checkOnがfalseになることを使う。
それから、(jQuery.support.checkOn && jQuery.support.noCloneEvent)がtrueでoperaまたはfirefoxまでは判定できる。

operaかfirefoxかはwindow.globalStorageを使うがwindow.globalStorageは将来的にfirefoxから削除って書いてるが、
firefox 40.0.3でwindow.globalStorageってundefinedになっておりforfoxから削除されてしまっている。
どうやってoperaとfirefoxを判定するか不明。
とりあえず、(jQuery.support.checkOn && jQuery.support.noCloneEvent && !window.globalStorage)がtureでoperaとしておく。

```js:jquery.snippet.js

//if($.browser.opera){
if(jQuery.support.checkOn && jQuery.support.noCloneEvent && !window.globalStorage){
//operaかfirefoxか不明なときある
//処理
} else {
//処理
}

//if($.browser.webkit){
if(!jQuery.support.checkOn){
//処理
}

```

##参考文献
[jQuery.supportでのブラウザ判別][1]
[Snippet jQuery Syntax Highlighter 公式][2]
[1]:https://w3g.jp/blog/jquery_browser_sniffing
[2]:http://www.steamdev.com/snippet/
秘密鍵や公開鍵やSSL証明書のペアをチェックする方法


- どの秘密鍵とどの公開鍵がペアなのか分からなくなった。
- どの証明書がどの鍵とペアだったか分からなくなった。
- 証明書のインストールが上手くいかない。（先日あるベンダーから証明書を購入したところ、インストールに失敗。なんと、誤った証明書が納品されていたことが原因だった。）

そんな時に、ペアを見つける方法です。

```bash
$ openssl req -noout -modulus -in "CSRのファイル名"
$ openssl x509 -noout -modulus -in "証明書のファイル名"
$ openssl rsa -noout -modulus -in "秘密鍵のファイル名"
```

で出力される文字列を比較してみましょう。
ペアであれば同じ文字列が出力されます。
[iOS] A simple way to add touch event for the UIView

If you want to add a touch event to the UIView.

Here is a simple way to do this.

* First set the view custom class to `UIControl`.

![Screen Shot 2015-08-29 at 20.15.27.png](https://qiita-image-store.s3.amazonaws.com/0/51455/5f6a3f2d-ad88-1ac7-5e7a-9e3561357d83.png)

* Then drag the `Touch Up Inside` event to the code area on the connections inspector.

![Screen Shot 2015-08-29 at 20.20.35.png](https://qiita-image-store.s3.amazonaws.com/0/51455/cee34160-7e18-60c8-4ee3-8a432b18fc56.png)

* That's all.