OmniAICreator/Qiita-1.07M huggingface dataset:
ハードディスクを換装してWindows 10を新規インストールするなら、元のWindowsをアップグレードしておく

# かいつまんで言うと

* Win7/8.1をまだWin10にアップグレードしていない
* 新しいハードディスクに（上記のライセンスで）Win10を新規インストールしたい

この場合、先にWin7/8.1の入っているハードディスクをWin10に更新してレジストリキーを取得してから、インストールメディアを作ると良い。

# 問題：Windows 10が認証されない

私物のThinkPad x220をWin8.1から10にアップグレードしようと思い、それならばと新しいSSDにWin10を新規インストールしたのだけど、レジストリ認証で躓いた。

## やったこと

1. Win8.1で[Windows 10ツール](http://www.microsoft.com/ja-jp/software-download/windows10)をダウンロードし、USBメモリにインストールメディアを作成
2. 新SSDをThinkPadに入れて作成したUSBメモリでWin10をインストール
3. 設定→更新とセキュリティ→ライセンス認証　でエラー

# 原因：Windows 10用のレジストリキーが必要

Windowsのレジストリキーは、Windowsをアップグレードする度に新しくなるようで、本体に付いているレジストリキー（Win7）、Win8.1のどちらもエラーが出てしまった。

# 対策：Windows 8.1をアップグレードしてレジストリキーを入手する

レジストリキー入手するには、元のハードディスクのWin8.1をWin10にアップグレードする必要があった。アップグレード後レジストリキーを調べて、SSDに入れた方のWin10にそのレジストリキーを入れたところ、無事認証された。
なお、Win10でメディアを作れば、レジストリキーを入れる必要は無い。

# 補足（蛇足）

* 元のThinkPadがWin8.1 Proで、インストールメディアをWin10 Home用に作ってしまったが、認証時にアップグレードがかかってWin10 Proになった
* インストールメディアは16GB推奨

# 参考

* [ライセンス認証に関するエラー - Windows 10移行wiki](http://windows10.wiki.fc2.com/wiki/%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E8%AA%8D%E8%A8%BC%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E3%82%A8%E3%83%A9%E3%83%BC)
* [Windows 10のライセンス認証とクリーンインストール方法 | Solomonレビュー[redémarrage]](http://solomon-review.net/windows10-upgrade-clear-install-2/)
* [Windows10をクリーンインストール アップグレード後にインストールメディアから | ThinkPad X240sを使い倒す シンクパッドのレビュー・カスタマイズ](http://korya-sugoi.com/thinkpad_faq/windows10_clean_install/)
djangoのFormのChoiceFieldにselectedを入れたい

`<select>`にselectedを入れたい時に悩んだ。

```html+django
<select name="breakfast">
    <option value="hamu">hamu</option>
    <option value="egg" selected="selected">egg</option>
    <option value="milk">milk</option>
</select>
```

こんなの使いたい時にform.pyとかに

```py3:from.py
breakfast = forms.ChoiceField(label='朝ごはん',
                              widget=forms.Select,
                              choices=Family.FOOD_CHOICES,)
```

として、templateに渡す前にinitialにフィールド名と指定したい値を設定します。

```py3
xxx_form['initial'] = {'breakfast':'egg'}
```

なんということでしょう！templateはこれだけでイチバン上のHTMLが出力されました。

```html+django
{{ xxx_form.breakfast }}
```
TestLinkのdocker imageをdockerhubにアップロードしてみた

TestLinkのdockerイメージをdockerhubにアップロードしてました。
docker-composeでの起動方法については、完全に理解できていないため、データの永続化などできていない可能性もあります。
不具合があった場合はコメントでお願いします。
また、問題なく動いた場合もコメントほしいです。


#TestLinkについて

TestLinkはPHP製のテスト管理をするWebアプリケーション。




#docker imageを使う方法

まず、dockerイメージをpullする。

```
docker pull imtnd/testlink:latest
```

イメージから、コンテナを作成し、起動。

```
docker run -d -p 80:80 --name testLink imtnd/testlink
```

docker-machineのIPアドレスを確認する。defaultはVMマシンの名前。

```
docker-machine ip default
```

ブラウザから　http://xxx.xxx.xxx.xxx/testlink/ 　にアクセスする。


#docker-composeを使用してmysqlと一緒に起動する。

以下のファイルを　docker-compose.yml という名前で作成。

```lang:docker-compose.yml
data00mysql:
  image: busybox:buildroot-2014.02
  volumes:
    - /var/lib/mysql
data00testlink:
  image: busybox:buildroot-2014.02
mysql:
  image: mysql:5.6.24
  environment:
    MYSQL_ROOT_PASSWORD: password
  volumes_from:
    - data00mysql
  ports:
    - "3306:3306"
testlink:
  image: imtnd/testlink:latest
  volumes_from:
    - data00testlink
  links:
    - mysql:mysql
  ports:
    - "80:80"
```

ファイルと同じディレクトリで docker-composeを起動する。

```
docker-compose up -d
```


ブラウザから　http://xxx.xxx.xxx.xxx/testlink/ 　にアクセスする。


DBの設定画面では、以下を入力。
Database type:MySQL
Database host:docker-machineのIPアドレス
Database name:testlink
Database admin login:root
Database admin password:password
TestLink DB login:testlink@%
TestLink DB password:testlink

ログイン画面では、ユーザ admin パスワード　admin でログインできるはず。










愚痴
dockerfileをアップロードしてdockerhubでビルドして貰う場合、githubを通さなきゃいけないのか。。。
バージョン管理しなくても良い場合は、適当にdockerfile貼り付けてビルドとかしてくれないのかな。。。
Swift で月の最初の日を得る

メモ

NSDate, NSCalendar, NSCalendarComponents を使って月の最初の日を得る

  var date = NSDate()
        var calendar = NSCalendar.currentCalendar()
        var comps = calendar.components(NSCalendarUnit.CalendarUnitDay, fromDate: date)
        comps.day = comps.day - comps.day - comps.day + 1
        let firstDay = calendar.dateByAddingComponents(comps, toDate: NSDate(), options: nil)
        println(firstDay)
        

出力結果
Optional(2015-08-01 10:34:05 +0000)
Ansible導入手順

# Ansibleとは
[Ansible](http://www.ansible.com/home)とはPuppet・Chefなどと同じプロビジョニングツールになります。
Puppet・Chefとの違いとしてはクライアントツールのインストールを必要としません。
またコアのコードはPythonを使用しておりPythonを使用できる環境であればAnsibleを動かすことができます。
クライアント側の必要環境がSSHで接続ができるのであれば使用することができるなどが特徴です。 
インストールもCnetOSでなら比較的に簡単で
epelリポジトリを使用すればyum簡単にインストールできます。

## CentOS6インストール手順

- epel リポジトリの追加とansible・sshpassのインストール

``` bash
yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install ansible sshpass -y
```


## ansible hostsファイル

ansibleは管理を明示的にしてあるサーバーにしかセキュリティ上接続させることができません。
hostsファイルはデフォルト下記のpathになります。

/etc/ansible/hosts
hostsファイル例

``` bash
#クライアントの追加
127.0.0.1
test.example.com

#クライアント名のグループ化
[webserver]
web1.example.com
web2.example.com
web3.example.com

#複数のクライアントの略称化
dns[1:3].example.com
```

## 疎通確認
``` bash
#初めてSSHで接続するサーバーの公開鍵をknown_hostsに書き込む
ssh-keyscan 127.0.0.1 >> ~/.ssh/known_hosts
#パスワード接続の場合
ansible 127.0.0.1 -m ping -k 
#秘密鍵接続の場合
ansible 127.0.0.1 -m ping -i 秘密鍵
```
naming > クラス名をnamespace名と同じにはしないこと

Unityで処理を別ファイルにしようとしていて、namespaceとクラス名をどういうふうにつけようか考えているなか、同じ名前にしようかと思った。

調べているうちに以下を見つけた。

[Do not name a class the same as its namespace, Part One](
http://blogs.msdn.com/b/ericlippert/archive/2010/03/09/do-not-name-a-class-the-same-as-its-namespace-part-one.aspx)

```cpp
namespace MyContainers.List
{
    public class List { … }
}
```

上記がまずい理由として以下の理由があげられている
> Part One: Collisions amongst referenced assemblies:

以下の実装において、Fooを参照しようとして、どのFoo?となってしまうとのこと。

```cpp
// Foo.DLL:
namespace Foo { public class Foo { } }

// Bar.DLL:
namespace Bar { public class Foo { } }

// Blah.DLL:
namespace Blah 
{
  using Foo;
  using Bar;
  class C { Foo foo; }
}
```


回避策は上記リンクであるようだが、結局は「最初からFoo.DLLの著者がguidelinesに基づき、かつ、typeとnamespaceを同じようにしないことで避けられる」とのこと。

> The problem can be avoided in the first place by the authors of Foo.DLL following the guidelines and not naming their type and their namespace the same thing.


using Fooとusing Barを同時にするのをやめてFoo::Foo, Bar::Fooという書き方にするのはどうなのだろうか？

このあたりはどういうのが標準的かまだ良くわかっていない。
homebrewでPermission deniedが出た場合の対処法

`homebrew doctor`を実行したところ以下のエラーが発生しました。

```
Error: Permission denied - /tmp/doctor20150830-57379-u4qeq6
```

# 結論
homebrewの問題じゃなくてディスクのアクセス権の問題でした。

# 修復

ディスクユーティリティを起動します。
ディスクのアクセス権を検証を実行後、ディスクのアクセスの修復を実行します。

これでパーミッションの問題が修復されました。

# 参考

- [unix - Permission denied to homebrew trying to acces /tmp - Stack Overflow](http://stackoverflow.com/questions/31195228/permission-denied-to-homebrew-trying-to-acces-tmp)
【Java】指定したURLの存在確認

引数で指定したURLの存在を確認する．
存在すればtrueを返す．

```.java
	public boolean isExistURL(String urlStr) {
		URL url;
		int status = 0;
		try {
			url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("HEAD");
			conn.connect();
			status = conn.getResponseCode();
            conn.disconnect();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		if (status == HttpURLConnection.HTTP_OK) {
			return true;
		} else {
			return false;
		}
	}
```

リダイレクトしたくない場合は、

```.java
conn.setInstanceFollowRedirects(false)
```
を追記．
bxSliderで外部HTMLをスライド表示する

自分用メモ

bxSliderは画像以外にも任意の要素をスライド表示することができるが、外部HTMLを読み込むようなoptionはないようだ。

そこで、ajaxで読み込めるように...

```html

<ul id="bx-pager">
  <li> <a data-slide-index="0" href="">東洋水産</a>
  <li> <a data-slide-index="1" href="">日清食品</a>
  <li> <a data-slide-index="2" href="">サンヨー食品</a>
  <li> <a data-slide-index="3" href="">明星食品</a>
</ul>

<div class="bxslider">
  <div class="slide">スライドさせたい内容【1】</div>
  <div class="slide" src="htm2.html"></div> <!--ここは外部HTML-->
  <div class="slide">スライドさせたい内容【3】</div>
  <div class="slide">スライドさせたい内容【4】</div>
</div>
```
```js

<script>
$(document).ready(function() {
  $.ajaxSetup({cache:false});
  $('.slide').each(function(){
    var src = $(this).attr('src');
    if(src !=''){
      $(this).load(src);
    }
  });
});
  
$(document).ready(function(){
  $('.bxslider').bxSlider({
    pagerCustom: 'ul#bx-pager',
    controls: false,
  });
});
</script>

```
sample
http://qitailang.small.jp/misc/text_nav_slider_external_file_hanyo/
Composerがbinに対して作成するスタブの種類

composer.jsonに`bin`が指定されているパッケージをインストールする時、composerはスタブとなるバッチファイルやシェルスクリプトを`vendor/bin`に作成する。

この処理はプラットフォームによって異なっていて、具体的な処理は`Composer\Installer\LibraryInstaller`の`installBinaries`に見ることができる。

https://github.com/composer/composer/blob/master/src/Composer/Installer/LibraryInstaller.php

1. Windowsの場合はバッチファイルとシェルスクリプトを作成する。シェルスクリプトはCygwinなどのために作成する。
2. Unixの場合は、まずスタブを作成せずに単にシンボリックリンクを作成する。
3. しかし、ファイルシステムによってはシンボリックリンクが使えない場合がある（smbfsや、VirtualBoxの共有フォルダなど）。このため、シンボリックリンクの作成に失敗した場合はシェルスクリプトを作成する。

例えばphpunitをインストールした場合は、

1. の場合、バッチファイル`vendor/bin/phpunit.bat`とシェルスクリプト`vendor/bin/phpunit`が作成される
2. の場合、`vendor/phpunit/phpunit/phpunit`のシンボリックリンクが`vendor/bin/phpunit`に作成される
3. の場合、シェルスクリプト`vendor/bin/phpunit`が作成される

追記
`bin-compat:(auto|nosymlink|full)`という設定が追加されたようだ。後で調べる。
https://github.com/composer/composer/pull/3704

関連

* [CLIコマンドはautoload.phpをどのように探せばよいのか - Qiita](http://qiita.com/iakio/items/06d92f8a9b9f890ebf9f)
* [bat - バッチファイルによるスタブのパターン - Qiita](http://qiita.com/iakio/items/7858751a583755327cad)
Phoenixインストールまで

## モチベーション
- とりあえず触ってみたかっただけ
- 気が向いたらそれ以降も書く

## 前提条件
- OSX 10.10.5
- Homebrew 0.9.5
    - Elixir 1.0.5
    - PostgreSQL 9.4.4


## インストールまで
```bash

$ brew install elixir
$ elixir -v
Elixir 1.0.5

$ brew install postgresql
$ createdb # データベース追加
$ createuser postgres # postgresユーザを追加
$ psql
(username)=\# ALTER USER postgres CREATEDB; # DB作成できるように

$ mix local.hex # パッケージマネージャー hexをインストール
$ mix phoenix.new ./practice_phoenix
$ cd ./practice_phoenix
$ mix ecto.create
$ mix phoenix.server
[info] Running PracticePhoenix.Endpoint with Cowboy on http://localhost:4000
30 Aug 18:56:08 - info: compiled 5 files into 2 files, copied 3 in 2181ms
```

とりあえず動いたよ。
![スクリーンショット 2015-08-30 18.58.24.png](https://qiita-image-store.s3.amazonaws.com/0/17373/8a4bb17f-0a07-17d0-7bff-527f42098d2c.png)


## mix phoenix.*
mix phoenix タスクリストを見てみる

```bash
$ mix help | grep phoenix
mix phoenix.digest      # Digests and compress static files
mix phoenix.gen.channel # Generates a Phoenix channel
mix phoenix.gen.html    # Generates controller, model and views for an HTML based resource
mix phoenix.gen.json    # Generates a controller and model for a JSON based resource
mix phoenix.gen.model   # Generates an Ecto model
mix phoenix.gen.secret  # Generates a secret
mix phoenix.new         # Create a new Phoenix v1.0.0 application
mix phoenix.routes      # Prints all routes
mix phoenix.server      # Starts applications and their servers
```
Unity ラグドールで遊んでみた

##ラグドールで遊んでみた

適当にキャラクターをシーン上に配置して
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/b303e84e-11df-0226-936b-015f8cacee6b.png" width="200px">

GameObject->3D Object->Ragdoll
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/48c9b88a-75fa-a3b9-9589-eeead849bc27.png" width="250px">

出てくるウィンドウに対応するボーンを設定し、右下Create
Pelvis,Middle SpineがBoxCollider
HeadがSphereCollider
あとはCapsuleColliderとなる!
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/13d057a5-6c41-094f-7059-9968e689f52c.png" width="350px">

するとこんな感じにコライダーとかが設定される。
サイズが気になる場合は修正!
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/1700f07d-b706-66cf-bb15-498df07c3f0a.png" width="200px">

再生するとこんな感じ
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/a6503dbf-d1a6-dc61-59df-b8aedb4b2285.gif" width="300px">

##頭がとれるようにしてみたかったんだけど・・・。

このキャラに恨みがある訳ではないですが・・・。
ラグドールを作成するとCharacter Jointがアタッチされているのでこれをいじくることでどれくらいの勢いでぶつかったらパーツがとれるというのができます
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/689d051a-4be5-ee6c-de68-8910ab1407bb.png" width="300px">

試しにBreak Forceと Break TorqueをInfinityから1にしてみたところ
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/cbb70ce5-bbb2-aff9-cc7e-21eba41c888e.gif" width="300px">

ちょっとしたホラーになりました。
ボリゴンがつながっているのでさすがにむりがありました・・・。
これはいったんあきらめよう
unity > github | sourcetree > cloneして別リポジトリにする

githubにあるunityプロジェクトを別リポジトリにcloneして作業をしていきたい。

あるソフトを作成していたが、分岐でなく別リポジトリとして管理したい、分岐元とは切り離したい、時などに使うかもしれない。

##状況

```txt:動作確認
OS: MacOS X 10.8.5
Unity 5.1.2-f1
SourceTree v2.0.5.2
github
```

- 元: unityTest-150830-oldProj
- 先: unityTest-150830-newProj

githubのリポジトリには以下を参考に設定した上でpushしているとする。
[Unity を Git でバージョン管理する @ qiita](http://qiita.com/hkomo746/items/432ed5b3a3395a804f5f)


##手順
### 1. SourceTreeからcloneをする

SourceTreeにて[+新規リポジトリ]->[URLからクローン]を選択し、以下の設定をする。

```
URL: githubのリポジトリ右側の"HTTPS clone URL"に記載の*.gitを指定する
(例: https://github.com/7of9/unityTest-150830-oldProj.git)
保存先のパス: 作業するフォルダを指定 (例: /Users/7of9/Documents/UnityTest/150830-newProj)
名前: 新しいリポジトリ名 (例: unityTest-150830-newPorj)
```
[クローン]を押してcloneをする。

### 2. githubにてリモートリポジトリを作成する

github.comにおいて unity-150830-newProj というリポジトリを作成する

### 3. SourceTreeにてリモートリポジトリの設定を変更する

SourceTreeにて手順1でcloneして作成された unityTest-150830-newProjを開いた状態から

- [リポジトリ]->[リポジトリ設定] を選択する
- [リモート]タブを選択する
- origin (...unityTest-150830-oldProj.git)を選択し[編集]を押す
- [URL / パス]にunity-150830-newProjの.gitの場所をコピーする
(コピーする文字はgithubから取得、またはSourcTreeにて地球マークから検索してもいい)
- [OK]を押して編集を終了する (リポジトリ設定画面に戻る)
- [OK]を押して設定を終了する

以上で新しいリポジトリへのpushの準備ができている。

### 4. Unityで作業してpush

- Unityを立ち上げてOPEN OTHERにて[/Users/7of9/Documents/UnityTest/150830-newProj]を選択して開く
- GameObjectを追加などしてプロジェクトに変更を加えて保存する
- SourceTreeからcommitをして、pushするとgithubの新リポジトリに変更が追加される
Selenium#PhantomJSのユーザーエージェントを変える方法

## 1.やりたいこと
RubyのSelenium（[selenium-webdriver](selenium-webdrive)）のdriverをphantomjsにしてユーザーエージェントを変更する

## 2. Rubyスクリプト

```rb
require 'selenium-webdriver'

USER_AGENT = "Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53"
capabilities = Selenium::WebDriver::Remote::Capabilities.phantomjs('phantomjs.page.settings.userAgent' => USER_AGENT)
driver = Selenium::WebDriver.for :phantomjs, :desired_capabilities => capabilities
```

## 3.動作確認

http://luftool.com/useragent/ に行ってスクリーンショットを撮ります
設定したユーザーエージェントになっていることが確認できます

```rb
driver.get('http://luftool.com/useragent/')
driver.save_screenshot('useragent.png')
driver.quit
```
 
![1.png](https://qiita-image-store.s3.amazonaws.com/0/84451/089d6296-7545-0924-d64a-f950a8275b8d.png)

## 4.参考
http://stackoverflow.com/questions/18126868/initialising-a-webdriver-useragent-in-chrome-does-not-seem-to-emulate-an-iphone
django templateで金額を表示（数値を三桁ずつ区切る）

最近、djangoを触りまくりなので、調べてもなかなか見つからなかったことを書きます。完全に自分のメモ  
注）完全な初心者なので過度な期待は禁物です。

# templateで金額を表示
そんなわけで、ありそうでわからなかったことですが、数値を３桁づつ区切って出したい、３文字ずつstr[:6]str[:3]とか書く？わけないよね。ということで、調べたいが、このtemplateのformatがなかなか馴染めなかったです。

そんなわけで下記のリンクに全部書いてあります。  
[django.contrib.humanize](https://docs.djangoproject.com/en/1.8/ref/contrib/humanize/)

- - -
と、不親切すぎるのでもうちょっと追記。  
まず、[INSTALLED_APPS](https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-INSTALLED_APPS)に下記を追加します。

```python::
django.contrib.humanize
```

で、tamplateの上にこれ書いて、あとは使うだけ。

```html+django
{% load humanize %}
```

今回は[intcomma](https://docs.djangoproject.com/en/1.8/ref/contrib/humanize/#intcomma)を使います。

```html+django
{{ amount| intcomma }}
```

amountが100000だとすると、100,000と表示されます。  
いやー便利ですね。
## 余談
久しぶりにMarkdown書いたら手が動かない。コード挿入にhtml+djangoもある。便利だ！
ウニウニエンジニアじゃなくて、真のエンジニアになるためには、日々、精進が必要だ。
Android Gradle Plugin 1.4.0-beta1のVector Imagesを試してみた

# 概要
Lollipopより前のAndroid OSでは`VectorDrawable`に対応していないため、`<vector>`要素を使ったリソースを使うことができません。
そのため`<vector>`要素を使ったリソースをresフォルダにおいても利用することができませんでした。

しかし、Android Gralde Plugin 1.4からはベクトル画像から古いAndroid OS向けに解像度別png画像を生成してくれます。
これはGoogle I/Oでも紹介されていました。
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/9f280c89-58e9-513e-8734-5d2dff5f8e88.png)

これによりアイコンのような画像などは一つのリソースファイルを置くだけで良くなります。


Android Studio 1.4をフライングした話
http://qiita.com/takahirom/items/3c54cdc35b6dd5116d73
でフライングはしていたのですが、
Beta版が出て、自分でビルドしなくても誰でも使えるようになったようなので試してみました。



# Vector画像を追加してビルドしてみる

## Android Gradle Plugin 1.4.0-beta1を追加する
まずプロジェクトのルートフォルダに有るbuild.graldeに以下のように書きます。

```groovy
    dependencies {
        classpath 'com.android.tools.build:gradle:1.4.0-beta1'
    }
```

## 画像を追加する

Vector AssetからVector画像の追加を行います。
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/e0be453b-c59a-b15d-30dc-203c81579c74.png)

ここから画像が選べるので、追加を行うと、
drawableフォルダにこのようなVectorデータが入ったリソースファイルができます。

drawable/ic_accessibility_24dp.xml  

```xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M12,2c1.1,0 2,0.9 2,2s-0.9,2 -2,2 -2,-0.9 -2,-2 0.9,-2 2,-2zm9,7h-6v13h-2v-6h-2v6H9V9H3V7h18v2z"/>
</vector>
```

## 画像を使う
普通にImageViewのsrcなどで参照します。

```xml
    <ImageView
        android:src="@drawable/ic_accessibility_24dp"
        android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
```

## 動かしてみる
Android 4.4で動きました！

![image](https://qiita-image-store.s3.amazonaws.com/0/27388/ae43c617-52c4-f5bf-f27b-f99f43ed8e78.png)

vectorリソースの`android:fillColor`を`"#FF0000ff"`のように変えてあげれば画像の色も変更することができます。
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/5d4c9a5f-7791-b16c-ccd4-20a4630ba91e.png)


# buildフォルダを覗く
生成されている画像を見ることができます。

![image](https://qiita-image-store.s3.amazonaws.com/0/27388/e52808e4-ec9a-82a4-b12b-e74c793e032a.png)




# ビルドエラーがでてビルドできない場合の対処法

![image](https://qiita-image-store.s3.amazonaws.com/0/27388/b15a5eb7-2f4d-8c3d-955d-c50ff2ea4c7e.png)

AOSPのissueに同じようなのが上がっていて、gfxさんのワークアラウンドが載っていたので、それを参考にさせていただきます。(build.gradleに書く)
https://code.google.com/p/android/issues/detail?id=162448

https://github.com/gfx/gradle-android-ribbonizer-plugin/commit/bca43414f5e21e94a82e4ae8ab985eeceecc1e49
Crystal で JSON を高速パースする

## Crystal で JSON パースするには ?

Ruby 風の静的言語 [Crystal](http://crystal-lang.org/) で JSON をパースするには、以下の 2 つの方法があります。

- JSON::Parser を使う方法
- JSON::Mapping を使う方法

JSON::Parser は、どんな型が入っているかが未定な JSON に有効な方法で、変換後の型を確かめながら (もしくは強制的に型を変換し) 値を取得します。特に動的言語で有効なアプローチです。

JSON::Mapping は、事前にどのような型が入っているかを定義し、それに従ってパースする方法です。こちらのほうが高速で、変換後の値も扱いやすいのでオススメです。この記事では、こちらを解説します。

## JSON::Mapping を使ってパースする方法

今回変換するのは、イベント管理サイト Connpass の API 出力です。

- [API リファレンス](http://connpass.com/about/api/) (公式)
- 出力例 (Ruby でキーワード検索した場合)<br />
  http://connpass.com/api/v1/event/?keyword=Ruby

JSON::Mapping を使ってパースするには、はじめに JSON の構造の定義をし、その定義を用いてパースします

### JSON 構造の定義
JSON 構造を定義するには、json_mapping マクロを使います。引数は `{ key: Type }` の形式で指定します。値に null が来る可能性がある場合は、`{ key: { type: Type, nilable: true }` のように指定します。

```rb
require "json"

module Response
  class Result
    JSON.mapping({
      results_returned: Int32,
      results_available: Int32,
      results_start: Int32,
      events: Array(Event),
    })
  end
 
  class Event
    JSON.mapping({
      event_id: Int32,
      title: { type: String, nilable: true },
      catch: { type: String, nilable: true },
      description: { type: String, nilable: true },
      event_url: { type: String, nilable: true },
      hash_tag: { type: String, nilable: true },
      started_at: { type: String, nilable: true },
      ended_at: { type: String, nilable: true },
      limit: { type: Int32, nilable: true }, 
      event_type: { type: String, nilable: true },
      series: { type: Series, nilable: true },
      address: { type: String, nilable: true },
      place: { type: String, nilable: true },
      lat: { type: String, nilable: true },
      lon: { type: String, nilable: true },
      owner_id: { type: Int32, nilable: true }, 
      owner_nickname: { type: String, nilable: true },
      owner_display_name: { type: String, nilable: true },
      accepted: { type: Int32, nilable: true }, 
      waiting: {type: Int32, nilable: true },
      updated_at: { type: String, nilable: true },
    })
  end
 
  class Series
    JSON.mapping({
      id: Int32,
      title: { type: String, nilable: true },
      url: { type: String, nilable: true },
    })
  end
end
```

### JSON のパース
上記で定義した構造を用いて、JSON を実際にパースするには、以下のようにします。

```rb
require "json"
require "http/client"

# HTTP リクエストを投げて JSON を取得する
res = HTTP::Client.get("http://connpass.com/api/v1/event/?keyword=Ruby")
body = res.body

# 定義した構造を元に JSON をパースする
# 変換結果は Response::Result のインスタンスとして取得されます
result = Response::Result.from_json(body)

p result.title
```

# まとめ
JSON::Mapping を使うと、簡単・高速に JSON パースが可能です。標準 API なので、積極的に使いましょう。

# 参考文献

- [Crystal API Reference](http://crystal-lang.org/api/)
[Swift] UIWebViewに任意のCookieをセット

```lang:swift
    var cookieProperties = [String: AnyObject]()
    cookieProperties[NSHTTPCookieName] = "cookiename"
    cookieProperties[NSHTTPCookieValue] = "cookievalue"
    cookieProperties[NSHTTPCookieDomain] = "www.example.com"
    cookieProperties[NSHTTPCookiePath] = "/"
    cookieProperties[NSHTTPCookieVersion] = NSNumber(integer: 0)
    cookieProperties[NSHTTPCookieExpires] = NSDate().dateByAddingTimeInterval(31536000)
    
    let newCookie = NSHTTPCookie(properties: cookieProperties)
    NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(newCookie!)
```
これで、ドメインwww.example.comに対するcookieがセットされます。

参考（引用）：
http://stackoverflow.com/questions/29596206/how-to-get-cookie-from-a-nsurlsession-with-swift
InfluxDB 0.9.3のClustering


# はじめに
InfluxDB0.9.3のClusteringでちょっとハマったのでメモしておく。

# 環境

- OS: CentOS7.1
- InfluxDB: 0.9.3
- firstnode: 10.6.0.14
- secondnode: 10.6.0.142 

# Install

以下のコマンドでインストールする。

```
$ sudo yum -y install https://s3.amazonaws.com/influxdb/influxdb-0.9.3-1.x86_64.rpm
$
```

# Configファイル作成

以下のコマンドでconfigファイルの雛形を作成。

```
$  /opt/influxdb/influxd config >> influxd.conf
```

# Configファイルの編集
https://influxdb.com/docs/v0.9/guides/clustering.html
にあるようにhostname部分の編集と、clusteringの部分でclusterメンバの設定をしてやる。

```influxd.conf
[meta]
....
  hostname = "(10.6.0.14|10.6.0.142)"
  bind-address = ":8088"
....  
[cluster]
  peers = ["10.6.0.14:8088","10.6.0.142:8088"]
....
```

# 起動
## FirstNode
最初のノードはオプションを付けずに起動。

```
$ /opt/influxdb/influxd -config influxd.conf 
```

## SecondNode
最初のノード以外はjoinオプションを追加して起動してやる。

```
$ /opt/influxdb/influxd -config influxd.conf -join 10.6.0.100:8088
```

# 確認
GUIかCUIで以下のコマンドを実行して認識されていればおk。

![influxdb_clustering.png](https://qiita-image-store.s3.amazonaws.com/0/46472/ef2d49ab-ab38-923e-4080-275968f3135e.png "influxdb_clustering.png")

おしまい。
Facebook sdk 導入まで(Android Studio)

Androidアプリで、Facebook OAuth認証のlogin画面の作成履歴と、
facebook loginに関する記事が古いものが多いので書きます。
初めてブログを書きますので、分かり難い部分はどうぞご指摘下さい。

**・参考にしたサイト**
http://yut.hatenablog.com/entry/20140813/1407867715
http://tajiblo.blogspot.jp/2015/01/android-studiofacebook-sdk.html
http://tech.noriakihoriuchi.com/post/com-facebook-facebookexception-cannot-use-sessionloginbehavior-sso-with-fallback-when-com-facebook-loginactivity-is-not-declared-as-an-activity-in-androidmanifest-xml

**・環境**
OS Mac OS X 10.10.5
Android studio 1.3.1
facebook android sdk 3.23.1


Facebook sdk 導入手順

**1.Facebook android sdkのダウンロード**
(最新verは、libs/bolts.jarがどこにあるかわからなかったため3.23.1をインストール)

**2.Android Studioにインポート**
File-New-Import Module...

**3.インポートするファイルを選択**
facebook-android-sdk-3.23.1内のfacebookを選択(facebook-android-sdk-3.23.1にはsample等を含んでいるため)

**4.error発生**
Error:(8, 0) Could not find property 'ANDROID_BUILD_SDK_VERSION' on project ':hogehoge'.

**5.gradle.propertiesに以下を追記**
ANDROID_BUILD_TARGET_SDK_VERSION=22
ANDROID_BUILD_TOOLS_VERSION=20
ANDROID_BUILD_SDK_VERSION=18
ANDROID_BUILD_MIN_SDK_VERSION=15
それぞれの数字に対応したSDKのversionを入れる必要あり(4つの記述の意味が全てわかる方がいれば教えていただけると嬉しいです)

**6.Build-Clean Project**
errorが消えることを確認

**7.Android StudioのFile-Project Structureを選択**

**8.appをクリック、Dependencyタブを選択**

**9.下にある＋をクリック、3 Module dependencyを選択、:facebookを選択、OK**

**10.Build-Clean Project**


facebook OAuth loginするコードは、可能であれば後日アップロードしたいと思います。
コピペで動作したソースコードを掲載しているサイトを紹介します。
http://yut.hatenablog.com/entry/20140813/1407867715
http://dev.classmethod.jp/smartphone/android/android-facebook-sdk_post/
sigmoid neuron シグモイドニューロンについて

[Michael Nielsen](http://michaelnielsen.org/): 『[Neural Networks and Deep Learning](http://nnadl-ja.github.io/nnadl_site_ja/index.html)』,2014
訳: [「ニューラルネットワークと深層学習」翻訳プロジェクト](https://github.com/nnadl-ja/nnadl_site_ja)より

# 自分が得た新たな知識のメモのため,万人向けではないと思います.ゴメンナサイ:umbrella:
## CHAPTER 1
# [perceptron パーセプトロン](http://nnadl-ja.github.io/nnadl_site_ja/chap1.html#perceptrons)
NANDゲートの万能性（それさえあればどんな関数でも計算できるという性質）から,パーセプトロンもまた万能.
とりあえず,パーセプトロンは理解しているのでこのままにする.

# [sigmoid neuron シグモイドニューロン](http://nnadl-ja.github.io/nnadl_site_ja/chap1.html#sigmoid_neurons)

新しいタイプの人工ニューロン

パーセプトロンと似ているが,シグモイドニューロンの重みやバイアスに微小な変化を与えたとき,それに応じて生じる出力の変化も微小なものに留まるように調整されている.
このことは,シグモイドニューロンで構成されているニューラルネットワークの学習を可能にする,決定的な違いとなる.  

パーセプトロンと同じく,シグモイドニューロンは$x_1, x_2,\ldots$といった入力を取りこむ.
しかし,これらの入力値は,単に$0$や$1$だけではなく,$0$から$1$<em>の間</em>のあらゆる値をとりこめる.

パーセプトロンと同じく,シグモイドニューロンはそれぞれの入力に対して,重み($w_1, w_2,\ldots$)を持ち,またニューロン全体に対するバイアスと呼ばれる値($b$)を持っている.しかし,出力は$0$や$1$だけではなく,
代わりに出力としては$\sigma(w \cdot x+b)$という値をとる.  

$\sigma$はシグモイド関数
{ = <em>ロジスティック関数</em>と呼び,この新しいニューロンを<em>ロジスティック・ニューロン</em>と呼ぶことがある.
こちらの用語を使うニューラルネット研究者も大勢いる.(岡谷貴之 :『[深層学習](http://amzn.to/1hMiOjZ)』講談社, 2015.によると,シグモイド関数にロジスティック関数は包含されるようだ)}と呼ばれ,ニューラルネットでよく使われているアクティベーション関数である.  
次の式で定義される：

$$\begin{eqnarray}
  \sigma(z) \equiv \frac{1}{1+e^{-z}}.
\end{eqnarray}$$

パーセプトロンとの共通点を理解するため,  
$z = w \cdot x + b$を大きな正の数とする.  
すると,  
$e^{-z} \approx 0$,つまり$\sigma(z) \approx 1$となる.  

言い換えると  
$z = w \cdot x+b$を大きな数であるとき,  
シグモイドニューロンの出力はほぼ$1$となり,パーセプトロンと同じになる.

逆に,  
$z = w \cdot x+b$を大きな負の数とする.  
すると,  
$e^{-z} \rightarrow \infty$,つまり$\sigma(z) \approx 0$となる.

言い換えると  
$z = w \cdot x +b$を大きな負の数であるとき,  
シグモイドニューロンの出力はほぼ$0$となり,パーセプトロンと同じになる.


ただし, $w \cdot x+b$がそこまで大きな数でない場合はパーセプトロンと同じにはなならない.
（Google Maps JavaScript API ）ボタンのオンオフでイベントの切り替え

[この記事](http://qiita.com/SOJO/items/d43a28a6fe27de3cc85c)にボタンでオンオフできるようにしただけですが，ボタンで切り替える例が他に見られなかったので書きました．もっとスマートな書き方がありそうな気がします．

```html
<!DOCTYPE html>
<html lang="ja">
<head>
  <title>Test Map</title>
  <meta charset="UTF-8">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
  <meta charset="utf-8">
  <style>
    html, body {
      height: 100%;
      margin: 0;
      padding: 0;
    }
    #map {
      height: 80%;
      width: 80%;
    }
  </style>
</head>
<body>
  <div id="map"></div>
  <button type="button" onClick="addEvent();">ここを押してね！</button>
  <ul id="latlng" style="display:none;">
    <li>lat: <span id="lat"></span></li>
    <li>lng: <span id="lng"></span></li>
  </ul>
  <script>
    var map;
    
    // マップの初期化
    function initMap() {  
      map = new google.maps.Map(document.getElementById('map'), {
        zoom: 13,
        center: {lat: 36.38992, lng: 139.06065}
      });
    }

    // イベントの追加と表示の切り替え
    function addEvent() {
      if (document.getElementById("latlng").style.display == "none") {
        // 緯度経度を表示
        document.getElementById("latlng").style.display = "block";
        // クリックイベントを追加
        map.addListener('click', function(e) {
          getClickLatLng(e.latLng, map);
        });  
      } else {
        // 緯度経度を非表示
        document.getElementById("latlng").style.display = "none";
        // クリックイベントを削除
        google.maps.event.clearListeners(map, 'click');
      }
    }
 
    // 座標の取得とマーカーの表示
    function getClickLatLng(lat_lng, map) {
      // 座標を表示
      document.getElementById('lat').textContent = lat_lng.lat();
      document.getElementById('lng').textContent = lat_lng.lng();

      // マーカーを設置
      var marker = new google.maps.Marker({
        position: lat_lng,
        map: map
      });

      // 座標の中心をずらす
      // http://syncer.jp/google-maps-javascript-api-matome/map/method/panTo/
      map.panTo(lat_lng);
    }  
  </script>
  <script src="https://maps.googleapis.com/maps/api/js?signed_in=true&callback=initMap" async defer></script>
</body>
</html>


```
UIKit & Swift プログラミング


UIKit の使い方に絞って解説した iOS のプログラミングの参考書です。本書も初心者向けではなく既に Swift の経験があり、 iOS　のアプリを作成した経験のある人に向けた解説書です。
Swift の基本やXCode の基本にはほとんど触れずに、Storyboard についてもいきなりAutoLayout やSizeClass についての説明から入っているのので、確かに経験のない初心者には理解が難しいでしょう。
UIKit 関係でも基本的なクラスの説明は必要最小限に抑えてある程度基本的なアプリが作れた後に悩んだり理解が進まない部分について解説してあり、１段階ステップアップしたい人には適しています。
たとえば最初のStoryboard を使ったビューの制御でもSizeClass をしっかり解説されており、またConstraint をコードでいじるなどAutolayout を使いながら困ったところを解決する方法を示してくれています。
このほか、各チャプターで次のようになかなか他の解説書では取り上げないような内容が解説してあります。

* イベント処理における独自Recognizer の実装
* ドキュメント処理におけるUIDocumentの解説
* 独自View の実装
* ユーザー通知におけるUILocalNotification
* 別アプリとの連携

また、各チャプターで取り上げたクラスにおけるプロパティやメソッドをきちんと網羅してあるので、取り上げた以外にどんな機能があるかをReference を見なくても理解しやすくなっています。
このようにたぶん初心者が読むともしかすると全く理解できないかもしれない解説ですが、ある程度のレベルの人にとっては、iOS を１ステップ深く使えるようになる可能性を持ったよい解説書です。

![IMG_0306.jpg](https://qiita-image-store.s3.amazonaws.com/0/60473/60ae8706-b1a1-2324-3d16-08ba5f7627a2.jpeg "IMG_0306.jpg")
[Swift] Podfileにuse_frameworks!を追加したらAWS SDK for iOSのS3が読み込めなくなった

CocoaPodでAlamofireをインストールしたところ、AWSのS3が使えなくなってしまった。
原因は、AlamofireをインストールしたときにPodfileにuse_frameworks!を書いたことのようである（以下）。

```lang:Podfile
（略）
pod 'AWSCore'
pod 'AWSS3'
pod 'AWSiOSSDKv2'
pod 'AWSCognito'

# new rows
platform :ios, '8.0'
use_frameworks!
pod 'Alamofire', '~> 1.3'
（略）
```

これでターミナルで```pod install```してからアプリを走らせたところ、以下のようなエラー。

```lang:error
/Users/*****/Pods/AWSCore/AWSCore/FMDB/AWSFMDatabase.h:2:9: Include of non-modular header inside framework module 'AWSCore.AWSFMDatabase'
```

AWSCoreがuse_frameworks!に対応していないversion 2.2.0だった。

```pod update```で更新をかけてAWS系を最新版のversion 2.2.4に更新した。
これで走らせたところ、以下のエラー。

```lang:error
Use of undeclared type 'AWSS3TransferManagerUploadRequest'
Use of undeclared type 'AWSS3TransferManager'
```

どうやらS3だけ読み込めていない様子。
アプリ名-Bridging-Headerで以下のように、直接パスを指定してあげたところ、読み込んでくれるようになった。

```lang:Bridging-Header変更前
#import <AWSCore/AWSCore.h>
#import <AWSCognito/AWSCognito.h>
#import <AWSS3/AWSS3.h>
```

```lang:Bridging-Header変更後
#import <AWSCore/AWSCore.h>
#import <AWSCognito/AWSCognito.h>
#import "/Users/****/****/****/Pods/AWSS3/AWSS3/AWSS3.h"
```

これで解決したが、疑問は残る。

なぜ```#import <AWSS3/AWSS3.h>```で読めないのか不明だし、
このように絶対パスを書くのは賢い方法ではない。
特定のテストでのみRambulanceを有効にしてエラーページのテストをするやり方

[Rambulance](https://github.com/yuki24/rambulance) でエラーページの出し分けを行っているので、エラーページのテストを書きたかった。
Rambulance をテスト環境でも動かすには、 `config/environments/test.rb` に

```
config.consider_all_requests_local = false
config.action_dispatch.show_exceptions = true
```

を設定すれば良いのだが、これだと例外のテストが書きにくくなりそうなので、
指定した場合のみ Rambulance が有効になるようにしたかった。

試行錯誤のすえ、RSpec の場合は次のような `shared_context` を用意すればいけた。

```ruby
RSpec.shared_context 'enable rambulance', rambulance: true do
  before do
    Rails.application.env_config['action_dispatch.show_detailed_exceptions'] = false
    Rails.application.env_config['action_dispatch.show_exceptions'] = true
  end

  after do
    Rails.application.env_config['action_dispatch.show_detailed_exceptions'] = true
    Rails.application.env_config['action_dispatch.show_exceptions'] = false
  end
end
```

使い方

```rb
specify 'エラーページを返すこと', rambulance: true do
  # ...
end
```

注意点として、 `Rails.application.config` の値を直接変えてもダメだったので、`Rails.application.env_config` を変える必要がある。

参考: http://makandracards.com/makandra/12807-custom-error-pages-in-rails-3-2
mkfifoとncでポートフォワーディング

OSX10.10にて確認。

## 参考

* [netcat で port forward - うまいぼうぶろぐ](http://hogem.hatenablog.com/entry/20120409/1333979151)

## 使ってみる

```bash:
sudo nc -l 80 | nc myserver.co.jp 3000
```

* 上記例だと一度アクセスするとncが終了してしまう。
* 永続化のためにfifoを使う。


```bash:
mkfifo fifo
while True ; do sudo nc -l 80 < fifo | nc myserver.co.jp 3000 > fifo; done
```

* http://localhost にアクセスすると http://myserver.co.jp:3000 から応答が帰ってくる。
* 接続が切れた時用にwhileしておく。
MongoDB 3.0.6（Windows版）をインストールして起動するまでの手順

## 概要（MongoDBとは）

+ NoSQL（Not only SQL）の1種
+ RDBMS界隈の初見者も理解しやすいデータ構造
    + テーブルに相当する概念：コレクション
    + レコードに相当する概念：ドキュメント
    + find（SQLのselectに相当）、insert、update、remove（SQLのdeleteに相当）などでドキュメントを操作
+ 大量のデータを管理＆検索することに向いている
+ ただし、MongoDBの苦手分野もある
    + 「結合」が苦手
    + トランザクションがない
        + 複数のコレクションを（複雑なルールで）同時更新するのには向いてない
+ JSONに似た形式でドキュメントを表現する
    + RDBMSの「列」ではないので、コレクション内に持つドキュメントを柔軟に定義（変更）できる

## Windowsで使う場合（2015/08/30時点）
### インストール

+ [Downloads - MongoDB](https://www.mongodb.org/downloads)からダウンロード
    + WindowsのVERSION（例：Windows 64-bit 2008 R2+）を選択して、DOWNLOAD(MSI)をクリック
+ インストーラーに頼る（例：mongodb-win32-x86_64-2008plus-ssl-3.0.6-signed.msi）
+ インストール後、exeファイルの場所をPathに追加
    + 例：C:\Program Files\MongoDB\Server\3.0\bin
    + コマンドプロンプトで`mongod --version`が通ってればOK

### 起動方法

+ データを保存する場所とログを保存する場所を確保する
    + データの保存場所の例：D:\mongodb\data
    + ログの保存場所の例：D:\mongodb\logs
+ コマンドプロンプトでMongoDBを起動する
    + 例：`mongod --dbpath D:\mongodb\data --logpath D:\mongodb\logs\mongodb.log`

### 終了方法

+ 別のコマンドプロンプトから終了してみる

```
mongo
use admin
db.shutdownServer()
quit()
```

### サービス登録

+ 毎回コマンドプロンプトから起動するのが面倒な場合、Windowsサービスに登録もできる
    + 管理者権限で `--install`オプションをつけてMongoDBを起動するだけ
        + `mongod --remove`でサービス削除ができる
+ 起動時に色々オプション渡すのが面倒な場合、設定ファイル（confファイル）を用意する
    + 管理者権限で`mongod --install --config D:\mongodb\mongodb.conf`のようにコマンドを打てばOK
    + confファイルはUTF-8で保存する
        + SJISだとサービス名とかが文字化けしちゃう
    + 以下は設定例
        + 詳細は[公式サイトのドキュメント](http://docs.mongodb.org/manual/reference/configuration-options/)で確認できる

``` 
storage:
  dbPath: D:\mongodb\data
  engine: wiredTiger
  journal:
    enabled: true

systemLog:
  destination: file
  path: D:\mongodb\logs\mongodb.log

net:
  bindIp: 127.0.0.1

processManagement:
   windowsService:
      serviceName: MongoDB
      displayName: MongoDB
      description: MongoDBのサービス
#      serviceUser: <string>
#      servicePassword: <string>
```

### クライアント
コマンドプロンプトから操作できるけど、色々なクライアントツールがあるみたい。
とりあえず[Robomongo](http://robomongo.org/)というのを使ってみる。

### 困ったこと（というか注意すること）
MongoDB3.0からストレージエンジンが2種類になったらしい。新エンジンの方が速いらしい。

+ mmapv1（従来エンジン：デフォルト）
+ wiredTiger（新エンジン）

ただし、新エンジンのwiredTigerを使う場合、従来エンジンmmapv1で作成したDBデータとは互換性がないみたい。

起動時エラーの例：`exception in initAndListen: 28574 Cannot start server. Detected data files in D:\mongodb\data created by storage engine 'mmapv1'. The configured storage engine is 'wiredTiger'., terminating`

## 参考になりそうなサイト
### 外部サイト（概要と運用方法について）
[初心者向けMongoDBのキホン！](http://www.slideshare.net/tetsutarowatanabe/mongo-db-32210761)
[MongoDB〜その性質と利用場面〜](http://www.slideshare.net/naruoga/os-sforum-mongodb)

### Qiita内投稿記事（実際の操作方法について）
[MongoDB超入門](http://qiita.com/saba1024/items/f2ad56f2a3ba7aaf8521)
[mongod設定項目まとめ(wiredTiger編）](http://qiita.com/kuwa_tw/items/0a5704e9e505cffeae34)
[MongoDB コマンドメモとか書き](http://qiita.com/svjunic/items/285e9cf20169d70aa1fa)
Rubyのaws-sdk(v2)を用いたSESの使い方


Qiitaやネット上のblogなどに出てくる記事が総じてv1で、そのまま書いただけではまったく動かなくて、少し詰まった。
ので数か月後の自分の為にメモ

Ruby 2.2.2
aws-sdk 2.1.15
での記事です。

# ドキュメントを見る

[公式のAWS SDK for Ruby](http://aws.amazon.com/jp/documentation/sdk-for-ruby/)を参照すると
まず[クライアントの設定](http://docs.aws.amazon.com/sdkforruby/api/Aws/SES/Client.html)は以下の通り

```Ruby:Client
ses = Aws::SES::Client.new(
  region: region_name,
  credentials: credentials,
  # ...
)
```

次に[メール本体の設定](http://docs.aws.amazon.com/sdkforruby/api/Aws/SES/Client.html#send_email-instance_method)については

```Ruby:send_email

resp = client.send_email({
  source: "Address", # required
  destination: { # required
    to_addresses: ["Address"],
    cc_addresses: ["Address"],
    bcc_addresses: ["Address"],
  },
  message: { # required
    subject: { # required
      data: "MessageData", # required
      charset: "Charset",
    },
    body: { # required
      text: {
        data: "MessageData", # required
        charset: "Charset",
      },
      html: {
        data: "MessageData", # required
        charset: "Charset",
      },
    },
  },
  reply_to_addresses: ["Address"],
  return_path: "Address",
  source_arn: "AmazonResourceName",
  return_path_arn: "AmazonResourceName",
})
```

という形になっている

# 実際に書いてみる

```Ruby:test_mail.rb
ses = Aws::SES::Client.new(
  region: #SESを設定したRegion,
  access_key_id: YOUR_ACCESS_KEY,
  secret_access_key: YOUR_SECRET_KEY,
)

body_text = "メールやで"

subject = 'サブジェクトやで'

from_email = YOUR_ADDR
to_email = YOUR_ADDR

ses.send_email({
  source: from_email,
  destination: {
    to_addresses: [to_email],
  },
  message: {
    subject: {
      data: subject,
      charset: 'ISO-2022-JP',
    },
    body: {
      text: {
        data: body_text,
        charset: 'ISO-2022-JP',
      },
    },
  },
})
```

で何も詰まることなく届いた。

# 結論
大体の事はドキュメントを読むと数秒で終わるのでドキュメント読むのがいい
MySQLのDBに接続しSQLを実行する

DBに接続しSQL文を実行し切断するまでのソースのメモ。
DBはMySQL。

今回はPC内でサーバを立ち上げている場合のメモ。

```lang:php
//DBに接続
$link = mysql_connect('接続先のサーバ', 'ユーザ名', 'パスワード');
$db_selected = mysql_select_db('テーブル名', $link);
mysql_set_charset('utf8');

//sqlを作成
$sql = '実行したいSQL文を入力';

//SQL文を作成して実行
$result = mysql_query($sql);
if (!$result) {
	die('SELECTクエリーが失敗しました。'.mysql_error());
}

//取得したデータを表示する
while($data = mysql_fetch_array($result)){
	//変数にDBから取得したデータを格納
	$a = $data['列名'];
	echo $a;
}

//DBを切断
$close_flag = mysql_close($link);
if ($close_flag){
	print('<p>切断に成功しました。</p>');
}

```

基本的に、DBに接続する際の
接続先のサーバは"localhost"
ユーザ名は"root"
パスワードは自分は設定していなかったので空欄、""で通った。

while文は複数のデータを取得したい場合に使用する。
1件だけinsertしたい場合とかは消去。

insertする内容をユーザに入力させてそれを変数に格納後
SQL文で実行することももちろん可能だが、ややこしかったのでメモ。

```lang:変数を使用したSQL文
$sql = 'INSERT INTO photo (列名a, 列名b, 列名c, 列名d) VALUES("'.$変数a.'","'.$変数b.'","'.変数c.'","'.変数d.'")';
```

もちろんselect文でも変数を使用することは可能。
もし、SQL文を使用したプログラムが思った通りにならない時は
そもそもSQL文が間違っている可能性もあるので注意。

DBの列にオートナンバーを使用している表のinsertは
オートナンバーの列を空欄、""でちゃんと番号がふられる。
Intact Case （頭字語を含む複合語で CamelCase と snake_case を相互変換可能にする規則）

### Intact Case

camelCase と snake_case を相互変換するライブラリは、様々な言語で作成されています。しかし、複合語が頭字語を含む場合に対応しているライブラリは、過去に存在しませんでした。

頭字語が含まれる複合語でも camelCase と snake_case の自然な相互変換を可能にするために作られた規則が、Intact Case です。
5V Arduino+3.3V I2Cデバイス+双方向ロジックレベルコンバータを試す

電子工作でセンサー類やその他デバイスを入手すると、インターフェースがI2Cとなっているものがあります。これは電子部品のバス接続でよく用いられるインターフェースで、2線接続で複数デバイスを制御できるのが特徴です。

これらのI2Cデバイスは3.3V動作のものが多い印象があります。一方でArduinoは5V動作のものが多いので、電子工作初心者のうちは両者をどう接続したものか悩んでしまいます。

そこで、5V動作のArduino Nanoから、双方向ロジックレベルコンバータを介して3.3V動作のI2Cデバイスに接続してみました。その内容をまとめます。

# 双方向ロジックレベルコンバータとは

ロジック電圧が異なるデバイスを接続する場合、電圧を適切に変換してやる必要があります。特に、5VのHigh出力を3.3Vデバイスに入れるとデバイスが壊れてしまうかもしれません。

このようなときに、ロジックのHigh/Lowのタイミングを維持しながら電圧を適切に変換してくれるのがロジックレベルコンバータ（レベルシフタとか電圧レベル変換モジュールなどと呼ばれることもあるようです）と呼ばれる部品です。SPIやUARTであれば一方向のみの電圧変換を行う「単方向ロジックレベルコンバータ」で十分なこともあるのですが、I2Cのように1つの信号線が入出力両方に使われる場合は双方向ロジックレベルコンバータが必要になります。

筆者はBSS138を使った4chのモジュールをeBayで1.12豪ドル（約97円）で買いましたが、秋月で販売されている[PCA9306利用 2chロジックレベルコンバータ](http://akizukidenshi.com/catalog/g/gM-05452)（150円）も良いと思います。

![bi-llc.jpg](https://qiita-image-store.s3.amazonaws.com/0/46856/cf0e2184-bc64-3306-4a14-64c818138c2c.jpeg)

# 準備

- Arduino Nano 互換ボード
- 双方向ロジックレベルコンバータ
- 気圧モジュール（BMP180利用、I2C接続）
- 気温・湿度モジュール（SHT21利用、I2C接続）

# 実行例

![DSC01530.JPG](https://qiita-image-store.s3.amazonaws.com/0/46856/b95551be-8ba0-c59e-30bd-c492bf68dccd.jpeg)

Arduino NanoのA4/A5ピンをロジックレベルコンバータ経由でI2CデバイスのSDA/SDLに接続しています。3.3V動作のI2Cデバイスを2個（右下）接続してみましたが、両方のデバイスから値を取得できました。

実験に使ったソースコードは下記のようなものです。動作には下記ライブラリが必要です。

- [adafruit/Adafruit-BMP085-Library](https://github.com/adafruit/Adafruit-BMP085-Library)
- [misenso/SHT2x-Arduino-Library](https://github.com/misenso/SHT2x-Arduino-Library)

```cpp

#include <Wire.h>
#include <SHT2x.h>
#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;

void setup()
{
  Serial.begin(9600);

  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP085 sensor, check wiring!");
    while (1) {}
  }
}

void loop()
{
  Serial.print("Humidity(%RH): ");
  Serial.print(SHT2x.GetHumidity());
  Serial.print("     Temperature(C): ");
  Serial.println(SHT2x.GetTemperature());

  Serial.print("Temperature = ");
  Serial.print(bmp.readTemperature());
  Serial.print(" *C");

  Serial.print("     Pressure = ");
  Serial.print(bmp.readPressure());
  Serial.println(" Pa");

  Serial.println();
  delay(5000);
}

```

# 参考資料

* [Bi-Directional Logic Level Converter Hookup Guide - learn.sparkfun.com](https://learn.sparkfun.com/tutorials/bi-directional-logic-level-converter-hookup-guide)
gulp.srcのglobからtsconfig.jsonのfilesを更新するプラグインを作った

[追記]
Gulpプラグインで受け取れるファイルストリームが順不同で、実行するたびにfilesの順序が変わる可能性がある。
ので、atom-typescriptと同じように`filesGlob`を展開するだけのCLIを作ったのでこっちを使って欲しい。
[laco0416/tsconfig-cli](https://www.npmjs.com/package/tsconfig-cli)
Globの展開に使ってるのはatom-typescriptの内部でも使われてる[TypeStrong/tsconfig](https://github.com/TypeStrong/tsconfig)なので、割と信用していいはず。少なくともnpmにある他のtsconfig展開系CLIはどれも独自にglob展開しているので使いたくなかった。
tsconfigに設定を集める、タスクランナーに設定を持たないべきという思想のメモという意味でこの記事は残す

----

@laco0416です。gulp.srcのglobパターンからtsconfig.jsonのfilesを更新するプラグインを作りました。

**gulp-tsconfig-update**
https://www.npmjs.com/package/gulp-tsconfig-update


# **TypeScript1.6で不要になりました！→やっぱり必要でした**
TypeScript 1.6からtsconfig.jsonに`exclude`プロパティが生えますので`node_modules`あたりをぶち込んでおけば幸せっぽい！
詳しいTypeScript 1.6の変更点は[こちら](
http://qiita.com/vvakame/items/072fa78f9fe496edd1f0#tsconfigjson%E3%81%ABexclude%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3%E8%BF%BD%E5%8A%A0)

1.6来るのはわかってたけどまさか5日で要らない子になるとは思ってなかった

`exclude`だけだとコンパイルの順序を指定できないのでよくない。やっぱりglob必要だった。


## やりたかったこと
昨日@vvakameさんとご飯を食べながら話していたら

```
laco「gulp-typescriptにオプション渡すのおかしい気がしてきた」
vv「tsconfig.json使おう？」
laco「filesにファイル指定するの人間の仕事じゃなくないですか？」
vv「atom-typescriptはfilesGlobを解釈して展開してくれるんだよなぁ」
laco「じゃあgulpとかGruntからglob与えてtsconfig.jsonのfilesに展開したらよくないです？」
vv「正しそう！」
```

ということで作った。ちなみにGrunt版はvvakameさんが作った。
**grunt-tsconfig-update**
https://www.npmjs.com/package/grunt-tsconfig-update

## 出来上がったもの

こういう状態で

```
├── gulpfile.js
└── src
    ├── bar.ts
    └── foo.ts
```

gulpでこうすると

```js:gulpfile.js
var gulp = require("gulp");
var tsConfig = require('gulp-tsconfig-update');

gulp.task('tsConfig', function() {
  return gulp.src("./src/**/*.ts")
      .pipe(tsConfig());
});
```

これが出てくる。

```json:tsconfig.json
{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "declaration": false,
        "noImplicitAny": true,
        "removeComments": false,
        "noLib": false,
        "preserveConstEnums": false,
        "suppressImplicitAnyIndexErrors": false
    },
    "files": [
        "./src/bar.ts",
        "./src/foo.ts"
    ]
}
```

`./tsconfig.json`が既に存在していれば`files`だけ上書きして、存在しないならデフォルトの`compilerOptions`を設定して書き出す。

## 嬉しい事
「どのファイルをコンパイルするか」という責任と「どうコンパイルするか」という責任を分割して適切に委譲できた気がする。

gulp-typescriptやgulp-tsを使うのは一見楽(？)でいいのだけど渡したオプションがどう処理されてコンパイルされるのか、自分が指定したオプションが適切に反映されているのかを保証するにはソースを読むしかなくて、加えてtscのアップデートに対応できているのか、メンテされているのかという心配でストレスが少し増える。
そこでtsconfig.jsonを使うようにすることでtscだけに依存するビルド環境になった。
「gulp-tsconfig-updateに依存してるじゃん」というのは、何かが起きても手でJSON編集すればいい話なのでそこまで問題じゃないと思っている。「このプラグインが壊れると開発が止まる」という相手を極力減らすことが重要だという認識。背中を預ける相手はできるだけ少なくしたい。

## 学び

### gulpプラグインは比較的楽にTypeScriptで書けた
基本的なモジュールは型定義ファイルがある。

* node.d.ts
* gulp-util.d.ts
* through.d.ts
* vinyl.d.ts
* gulp.d.ts

のおかげでだいぶ捗った。
map-stream.d.tsがなかったのがつらかったけどフィーリングでなんとかなった。

## まとめ
Issue, PR, その他フィードバックお待ちしてます。
phpの文字化けを直す

HTML形式でPHPを書いていた時
文字化けが起こり、足止めをくらったのでメモ。

HTMLのheadタグの中に以下を書けば解消された。

```html+php:php
<?php
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
<title>文字化けを直したい。</title>
</head>
</html>
```
確認フォームを表示する

php等で情報をpost送信する前に
ユーザにもう一度、内容を確認させたいときにおすすめ。

```lang:html
<body>

<script>
    /**
     * 確認ダイアログの返り値によりフォーム送信
    */
    function submitChk () {
        /* 確認ダイアログ表示 */
        var flag = confirm ( "送信してもよろしいですか？\n\n送信したくない場合は[キャンセル]ボタンを押して下さい");
        /* send_flg が TRUEなら送信、FALSEなら送信しない */
        return flag;
    }
</script>


<form action="×××.php" method="post" onsubmit="return submitChk()">
	<input type="text" name="text" value="" /><br/>
	<input type="submit" value="送信する"/>
</form>

</body>
```

送信ボタンを押した直後に確認フォームが表示される。
rubyで特定のメソッドを無効化する

rubyで特定のメソッドを無効化したかったのだが、そういった需要はあまりないのか見つからなかったのでとりあえず作った。

## 呼び出し方
```rb
NOP.nop class_name, *methods (, options)
```

## 基本的な使い方

```rb
NOP.nop Array, :to_a
# => [:to_a]

[1,2,3].to_a
> NOP: to_a, *args:[], return:
# => nil
```

### return値指定

```rb
NOP.nop Array, :to_a, return: "hoge"
# => [:to_a]

[1,2,3].to_a
> NOP: to_a, *args:[], return:hoge
# => "hoge"
```

### 元メソッドを別名で保存(デフォルトでは保存しない)

別名は、元メソッド名にアンダースコアを2つ付けたものになる。

```rb
NOP.nop Array, :to_a, backup: true
```

#### suffix指定
```rb
NOP.nop Array, :to_a, backup: '_ato'
```

#### 細かく指定
```rb
NOP.nop Array, :to_a, backup: { prefix: 'mae_', suffix: '_ato' }
```

## コード

https://gist.github.com/chsh/6e1d170b7fe9a3e2ebbc

```rb
module NOP
  def self.nop(*args)
    opts = args.extract_options!
    methods = args
    raise ArgumentError if methods.size < 2
    klass = methods.shift
    raise ArgumentError unless klass.is_a?(Class)
    do_backup, backup_prefix, backup_suffix = extract_backup_options opts[:backup]
    methods.map(&:to_sym).each do |method|
      next unless klass.instance_methods.include? method
      result = opts[:return] || nil
      if do_backup
        backup_method = "#{backup_prefix}#{method}#{backup_suffix}"
        klass.class_eval do
          alias_method backup_method, method
        end
      end
      klass.class_eval do
        define_method method do |*args|
          puts "NOP: #{method}, *args:#{args}, return:#{result}"
          result
        end
      end
    end
  end

  private
  def self.extract_backup_options(value)
    case value
    when nil, FalseClass
      [false, nil, nil]
    when TrueClass
      [value, '', '__']
    when String
      raise ArgumentError if value.blank?
      [true, nil, value]
    when Hash
      [true,
       value[:prefix].presence || '',
       value[:suffix].presence || '__']
    else raise ArgumentError
    end
  end
end
```
Google Maps JavaScript API でクリックした座標の取得

Google Maps JavaScript API でクリックした箇所の緯度経度を取得する簡単なコードです．クリックした場所が分かるようにマーカーも設置しています．（座標の取得がメインの目的なので，マーカーをずらしたりしていません）

```html
<!DOCTYPE html>
<html lang="ja">
<head>
  <title>Test Map</title>
  <meta charset="UTF-8">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
  <meta charset="utf-8">
  <style>
    html, body {
      height: 100%;
      margin: 0;
      padding: 0;
    }
    #map {
      height: 80%;
      width: 80%;
    }
  </style>
</head>
<body>
  <div id="map"></div>
  <ul>
    <li>lat: <span id="lat"></span></li>
    <li>lng: <span id="lng"></span></li>
  </ul>
  <script>
    function initMap() {

      // マップの初期化
      var map = new google.maps.Map(document.getElementById('map'), {
        zoom: 13,
        center: {lat: 36.38992, lng: 139.06065}
      });

      // クリックイベントを追加
      map.addListener('click', function(e) {
        getClickLatLng(e.latLng, map);
      });
    }

    function getClickLatLng(lat_lng, map) {
      
      // 座標を表示
      document.getElementById('lat').textContent = lat_lng.lat();
      document.getElementById('lng').textContent = lat_lng.lng();

      // マーカーを設置
      var marker = new google.maps.Marker({
        position: lat_lng,
        map: map
      });

      // 座標の中心をずらす
      // http://syncer.jp/google-maps-javascript-api-matome/map/method/panTo/
      map.panTo(lat_lng);
    }
  </script>
  <script src="https://maps.googleapis.com/maps/api/js?signed_in=true&callback=initMap" async defer></script>
</body>
</html>

```

参考
[Accessing arguments in UI events](https://developers.google.com/maps/documentation/javascript/examples/event-arguments)