OmniAICreator/Qiita-1.07M huggingface dataset:
Fabric（Crashlytics）を導入したらアプリが起動できなくなった

Fabricでアプリケーションを配布したが、アプリケーションが起動直後にクラッシュするようになってしまった。


## 原因調査
XcodeのWindow＞Devicesからコンソールログを確認したところ、
以下のようなエラーが発生していることがわかった。

```
*** Terminating app due to uncaught exception 'FabricException', reason: '[Fabric] Value of Info.plist key "Fabric" must be a NSDictionary.'
```

どうも、Info.plistにFabricのKeyが必要らしい。
私の場合、debug用と本番用でplistを分けているのだがどうも本番用にだけ
この"Fabric"のキーが存在しないことがわかった。


## 対策
FabricのKeyを、存在するinfo.plistからコピーして貼り付け。
どうもFabric導入のチュートリアルを行ったplistにしか登録されていなかったらしい。
もしくは以下の内容をinfo.plistに追加する

***Info.plistをOpenAs＞Source Codeから開いて

```objc
<key>Fabric</key>
	<dict>
		<key>APIKey</key>
		<string>[your Fabric API Key]</string>
		<key>Kits</key>
		<array>
			<dict>
				<key>KitInfo</key>
				<dict/>
				<key>KitName</key>
				<string>Crashlytics</string>
			</dict>
		</array>
	</dict>
```

※ [your Fabric API Key]の箇所を自分のFabricAPI Keyに変更
Build PhasesのRun Scriptなどから引用できる。
HTMLの雛形

Railstutorilを読んでテンプレートについてわかってきたことを少しづつメモ
[ヘルパーって何？](http://qiita.com/histori/items/9b5af7d38ee8b8527bd2)にここで使う関数をメモしている

# HTMLの雛形
```html:hello_world.html
<!DOCTYPE html>
<html>
  <head>
    <title>Hello world!</title>
  </head>
  <body>
    <p>Hello, world!</p>
  </body>
</html>
```
# レイアウトファイルの雛形
```erb:app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title><%= full_title(yield(:title)) %></title>
    <%= stylesheet_link_tag "application", media: "all",
                                           "data-turbolinks-track" => true %>
    <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
    <%= csrf_meta_tags %>
    <%= render 'layouts/shim' %>
  </head>
  <body>
    <%= render 'layouts/header' %>
    <div class="container">
      <!-- 各要素にCSSクラスを指定してメッセージの種類が分かるようにする -->
      <% flash.each do |key, value| %>
        <div class="alert alert-<%= key %>"><%= value %></div>
      <% end %>
      <%= yield %>
      <%= render 'layouts/footer' %>
      <%= debug(params) if Rails.env.development? %>
    </div>
  </body>
</html>

```
> [デバック情報を整形するためのCSS](http://railstutorial.jp/chapters/sign-up?version=4.0#code-mixin_and_debug)

# パーシャルの雛形
```erb:app/views/layouts/_header.html.erb
<header class="navbar navbar-fixed-top navbar-inverse">
  <div class="navbar-inner">
    <div class="container">
      <%= link_to "sample app", root_path, id: "logo" %>
      <nav>
        <ul class="nav pull-right">
          <li><%= link_to "Home", root_path %></li>
          <li><%= link_to "Help", help_path %></li>
          <% if signed_in? %>
            <li><%= link_to "Users", '#' %></li>
            <li id="fat-menu" class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                Account <b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><%= link_to "Profile", current_user %></li>
                <li><%= link_to "Settings", edit_user_path(current_user) %></li>
                <li class="divider"></li>
                <li>
                  <%= link_to "Sign out", signout_path, method: "delete" %>
                </li>
              </ul>
            </li>
          <% else %>
            <li><%= link_to "Sign in", signin_path %></li>
          <% end %>
        </ul>
      </nav>
    </div>
  </div>
</header>
```
```erb:app/views/layouts/_footer.html.erb
・
```
```erb:app/views/layouts/_shim.html.erb
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
```
RSpec × Capybara で出来ること

Railstutrialで登場するテスト関連のメモ
随時更新

# RSpec

## 重複キーワードを取り除きたいとき
`let(:foo) { "bar" }`して、
任意の場所で`#{foo}`置く

## 各センテンスで重複コードを取り除きたいとき
例：`before { visit(root_path) }`

# Capybara

## 指定したURLにアクセスする
`visit '<url>'`

## 指定したリンクの有無の確認
`have_link('Profile', href: user_path(user))`

## 指定した入力項目に任意の文字列を入力する
`fill_in "Name", with: "Example User"`

## 指定したボタンをクリックする
`click_button "Create my account"`

## 擬似操作の雛形
ユーザー情報を登録出来るとき、出来ない時のケース

```rb:hoge_spec.rb
describe "signup" do

  before { visit signup_path }

  let(:submit) { "Create my account" }

  describe "with invalid information" do
    it "should not create a user" do
      expect { click_button submit }.not_to change(User, :count)
    end
  end

  describe "with valid information" do
    before do
      fill_in "Name",         with: "Example User"
      fill_in "Email",        with: "user@example.com"
      fill_in "Password",     with: "foobar"
      fill_in "Confirmation", with: "foobar"
    end

    it "should create a user" do
      expect { click_button submit }.to change(User, :count).by(1)
    end
  end
end
```

## 主題を宣言してコードを簡潔にする
　page変数を使った例：`subject { page }`

－ページ内に○○がある／ない
　`it { should have_content('hoge') }`
　`it { should_not have_content('hoge') }`

－ページタイトルに○○がある／ない
　`it { should have_title('hoge') }`
　`it { should_not have_title('hoge') }`

# ここまでの雛形

```rb:hoge_spec.rb
let(:hoge) { "Hello, world" }

subject { page }

describe "Home page" do
  before { visit root_path }

  it { should have_content("#{hoge}") }
  it { should have_title("foo") }
  it { should_not have_title('bar') }
end
```
FizzBuzz問題

初心者挑戦編。今回は問題の理解に注力します。初めてです。

>参考URL
>http://blog.jnito.com/entry/20111007/1317976730

仕様 *1
1から順番に数をコマンドプロンプト/ターミナルに表示する。
その数が3で割り切れるなら"Fizz“
5で割り切れるなら"Buzz“
両方で割り切れるなら"FizzBuzz"と表示する。

ではtry!!(皆さんの書いた美しいrubyのコードを希望致します。コメント欄に書いて頂ければ今後の励みとなりますのでよろしくお願い致します。)


>参考URL
http://fujitaiju.com/blog/technology/ruby/%E5%88%9D%E3%82%81%E3%81%A6%E4%BD%BF%E3%81%86ruby%E3%81%A7fizzbuzz%E5%95%8F%E9%A1%8C%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%BF%E3%81%9F/
>参考コード(最初はif文とcase文で理解、個人的には美しいと感じる)

```
for i in 1..100
    if i % 5 == 0
        if i % 3 == 0
            puts "FizzBuzz"
        end
        puts "Buzz"
    elsif i % 3 == 0
        puts "Fizz"
    else
        puts i
    end
end

for i in 1..100
    case true
    when i % 3 == 0 && i % 5 == 0
        puts "FizzBuzz"
    when i % 3 == 0
        puts "Fizz"
    when i % 5 == 0
        puts "Buzz"
    else
        puts i
    end
end

```
【移行中】bootstrap 2から3に以降するときに行ったこと。



## ボタン周り

### btn-defaultを追加

bootstrap 2

```html
<a class="btn" /> 
``` 

bootstrap 3

``` 
<a class="btn btn-default" /> 
``` 


### btn-mini

bootstrap 2

```html
<a class="btn btn-mini" /> 
``` 

bootstrap 3

``` 
<a class="btn btn-sm" /> 
``` 

## レイアウト周り

## row-fluid

bootstrap 2

```html
<div class="row-fluid" /> 
``` 

bootstrap 3

``` 
<div class="row" /> 
``` 

## span


bootstrap 2

```html
<div class="span8" /> 
``` 

bootstrap 3

``` 
<div class="col-md-8" /> 
``` 


## icon

bootstrap 2

```html
<i class="icon-bar-chart"></i>
``` 

bootstrap 3

``` 
<i class="fa fa-bar-chart"></i>
```
Chromeの右上のアイコンを消す

[Chromeの設定をいい感じにする(Windows)](http://qiita.com/ao_love/items/21a571f14668e299111c)
で過去にも触れたのですが、あいつが復活しました。
邪魔。

しかも今回`chrome://flags`からじゃ消えません…orz
私の環境では昨日(2015/7/27)突然現れたのですが、ver.44の仕様らしいです。

コチラの記事を参考にして消すことができました！
[Chrome 右上の変なアイコン 「アバターメニュー」 を無効にする方法 【Windows版】/カモメのリズム](http://seagull.hateblo.jp/entry/disable-chrome-avatar-menu)

ざっくりいうと起動オプションとして
`--disable-new-avatar-menu`
を引数で渡すらしいです。

ただ、この方法はショートカットのリンク先を書き換えるものなので、自分が普段起動するショートカットを書き換えないと適用されません^^;
色んな場所から起動する方はすべてのショートカットを書き換えてください。

### 手順
0. chromeを開いている場合は閉じる
0. chromeのショートカットを右クリック→プロパティを開く
0. リンク先の`～chrome.exe"`の後ろに半角スペースと `--disable-new-avatar-menu`を挿入
↓こんな感じ
![chrome.png](https://qiita-image-store.s3.amazonaws.com/0/71000/75c201e5-8780-75d0-5ca6-14b5435a6c2a.png)


これだけでOKです。
ほんと、あのアイコン推してくるの辞めてほしい…
Jenkins+Slackで超簡易版ヘルスチェック

自前のサーバにアプリを展開しているとき、死活監視を簡単にしようと思ってつくった際のメモ。

Site Monitor pluginとSlack notification pluginを使う。


## slack連携の設定

システムの設定で、グローバル設定ができる。
チームのサブドメインとトークンを貼りつけて、通知先のチャンネルをいれるだけ。

## ヘルスチェック用のジョブ作成

### slackの通知設定

ジョブの設定画面にslackの通知設定項目がある。死んだときと復活したときに通知してもらいたいので下記のようにする。

![image](https://qiita-image-store.s3.amazonaws.com/0/9880/aa96605b-b45a-4299-1dd7-678ce59fec5d.png)

### トリガの設定

アプリのビルドが成功した後と、定期的に実行してもらいたいので、つぎの二つにチェックをいれる。

* 他プロジェクトの後にビルド（job名を入力）
* 定期的に実行



### ビルド後の処理

サイトモニターのURLとSlack通知を追加して完了

![image](https://qiita-image-store.s3.amazonaws.com/0/9880/f3df1441-194f-c09c-e023-c44de498cabe.png)

### ローテーション

ビルドとその成果物をいつまでも残す必要がないので、適当な間隔でローテーションさせる。

## 参考サイト

http://qiita.com/sqrtxx/items/d8751e18c549a41f6276

http://qiita.com/key/items/b38066de6de3b8ea3483
SequelizeでGroup byを記述する

Node.jsのORMであるSequelizeで、Group byを使ったCOUNT関数やSUM関数をどう書けばよいかを調べてみました（MySQLを使っている場合）。
例えば、以下の様なテーブルがあったとして、

```lang:Chargeテーブル
var Charge = sequelize.define('Charge', {
  userId: { Sequelize.INTEGER },
  companyId: { Sequelize.INTEGER },
  amount: { Sequelize.INTEGER }
});
```

```lang:SQL
SELECT companyId, SUM(amount) AS 'totalAmount'
FROM Charge
GROUP BY companyId;
```

みたいな感じで`amount`フィールドを`companyId`毎に集計したい場合は、

```lang:Sequelize
Charge.findAll({
  attributes: [
    'companyId',
    [sequelize.fn('sum', sequelize.col('amount')), 'totalAmount']
  ],
  group: ["companyId"]
}).then(function (results) {
  results.forEach(function(result){
    
  });
}).error(function(err){

});
```

と書くことができます。

`[sequelize.fn('sum', sequelize.col('amount')), 'totalAmount']]`
のsumの部分には、avg、count、min、maxなど、関数が使えそうです（すべての関数を試したわけじゃないです）。もちろん、関数は使用しているデータベースに依存すると思われます。

### 注意点
集計結果を取得するときに、例えば上記の例だと、`totalAmount`という別名を付けているので、`result.totalAmount`と書きたいところですが、これだとなぜか`undefined`になってしまいます。
仕方ないので、`result.dataValues['totalAmount']`として値を参照しています。これはSequelizeのバージョン（テストに使ったSequelizeのバージョンは、1.7.9）に依存するバグなのかも知れません。
Railsインストール on CentOS7 (最小手順？)

執筆時点のバージョンはCentOS7 + ruby2.0 + Rails4.2です。
できるだけ複雑な手順を省けるようにしたいと思います。

##epel有効化
rubyをepelリポジトリからyumコマンドでインストールしたいので、epel-releaseをインストールしてepelリポジトリを有効にします。

```bash:
$ sudo yum install epel-release
```

##Rubyのインストール
yumコマンドでrubyをインストールします。rubygemsも依存パッケージとして自動でインストールされます。
また、nokogiriのインストールでruby.h, libxml2, libxsltも必要になるので、それらもインストールしておきます。

```bash:
$ sudo yum install ruby ruby-devel libxml2-devel libxslt-devel sqlite-devel
```

インストールが完了したら、お約束のバージョン確認をしておきます。

```bash:
$ ruby --version
ruby 2.0.0p598 (2014-11-13) [x86_64-linux]
```

※proxy環境の場合は[HTTP_PROXY環境変数をセット](http://qiita.com/egnr-in-6matroom/items/5b9c0ce91d4d203c8ede)しておきます。
##nokogiriのインストール
こやつがC言語のライブラリ依存でひっかかるので、先にインストール。

```
$ gem install nokogiri -- --use-system-libraries
```
2016/04/28 追記：　gcc入ってない場合はインストールで怒られます。おこられたらgccをインストールしてください。

```bash:
$ sudo yum install gcc
```

##Railsのインストール

ruby gemsからrailsをインストールします。

```bash:
$ gem install rails -N
```

しばらく時間がかかります。完了したらバージョンを確認します。

```bash:
$ rails --version
Rails 4.2.3
```

以上
javasciprt,underscore true,false一覧

[Underscore.js](http://underscorejs.org/) 1.8.3で検証

||if()|_.isEmpty()|_.isNull()|_.isUndefined()|_.isNaN()|
|---|---|---|---|---|---|
|0|false|true|false|false|false|
|""(空文字)|false|true|false|false|false|
|" "(半角スペース)|true|false|false|false|false|
|"0"(文字列0)|true|false|false|false|false|
|[]|true|true|false|false|false|
|{}|true|true|false|false|false|
|true|true|true|false|false|false|
|false|false|true|false|false|false|
|null|false|true|true|false|false|
|undefined|false|true|false|true|false|
|NaN|false|true|false|false|true|
iOS7から使用できるBackground Fetchについて


## 概要
* アプリがバックグラウンドにある状態で一定期間毎に特定の処理を実行できる
	* 実行される間隔に関しては、アプリの利用状況などをみて決定される
* iOS7から使用可能

### 具体的な利用シーン
* 定期的にサーバーと通信し、未読のコンテンツが会った場合にlocal pushにて通知を行う
	* リアルタイムではないが、擬似的なpush通知がremote pushを利用しなくても実装可能
	

## 実装方法

### Background Fetchの有効化
はじめに、アプリでBackground Fetchが利用できるように設定を追加していきます。手順は以下の通り。
1. ProjectのCapabilitiesを選択
2. Background Modesを「On」に変更
3. 「On」にするとModesが表示されるので、Background fetchの項目にチェックを入れる

### メソッドの設定
Background Fetchを利用するには、以下の2つのメソッドが必要です。

```
// fetchする間隔の設定。
- (void)setMinimumBackgroundFetchInterval:(NSTimeInterval)minimumBackgroundFetchInterval

// 実際にbackground fetchにて実行する処理を記述する
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
```

#### - (void)setMinimumBackgroundFetchInterval:(NSTimeInterval)minimumBackgroundFetchInterval
これは、どのくらいの間隔でBackground Fetchを実行したいかを設定するためのメソッドです、AppDelegate.mのdidFinishLaunchingWithOptionsで呼んでください。
以下サンプルです。

```
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
	// このような感じで呼ぶ。今回は最小間隔を指定
    [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
    
    return YES;
}
```

Background Fetchでは具体的な期間を明示することができません。最小間隔を指定したとしても、実際に呼ばれる間隔は、今までどのくらいアプリを使用しているか、どのくらいの頻度で開いているか等のデータに基づいて決定されます。

#### - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
このメソッドでは、実際にBackground Fetchが実行された際に行う処理について記載します。
必ずcompletionHanlderを書かなくてはならないので、その点に関しては注意してください。
以下サンプルです。

```
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
	// 処理が成功したかどうかをBOOL型でsuccessという変数で定義していると仮定
    if (success) {
        completionHandler(UIBackgroundFetchResultNewData);
    } else {
    	completionHandler(UIBackgroundFetchResultFailed);
    }
}
```

また、completionHandlerで設定できるのは以下3つの項目となります。

```
// データDLに成功
UIBackgroundFetchResultNewData
// DLするデータがなかった
UIBackgroundFetchResultNoData
// DLに失敗した
UIBackgroundFetchResultFailed => データのダウンロードに失敗した 
```

## デバッグ
最後にBackground Fetchのデバッグについて書いていきます。今回は一番簡単な方法だけ紹介します。

1. iOSシュミレータにてアプリを起動
2. xcodeに戻り、ナビゲーションの「Debug」をクリック
3. Debugの中に「Simulate Backgroun Fetch」という項目があるので、それをクリック

これで強制的に- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandlerのメソッドで定義した処理を実行することができます。


## 参考
* [[iOS 7] [MultiTasking] バックグラウンドで定期的にフェッチ処理を実行する](http://dev.classmethod.jp/references/ios-background-fetch/)
* [Background Fetch を試してみた](http://qiita.com/griffin_stewie/items/8371c09059b3ba7bb202)
JsValue⇔JsObject

すごく単純なことですが、メモします。

```scala
val jo: JsObject = Json.obj("name" -> "hoge")

// JsObject => JsValue
val jv: JsValue = Json.toJson(jo)

// JsValue => JsObject
val jvo: JsObject => jv.as[JsObject]

// case class
case class User(name: String)

implicit val userJson = Json.format[User]

val user: User = User("hoge")

val jvUser: JsValue = Json.toJson(user)

val oUser: User = jvUser.as[User]

```
よく使用するGitコマンド一覧

# 目的
自分の業務中に、便利だと感じたり、たまにしか使わないけど重要と感じたGitコマンドをメモしておく。

# Untracked filesを削除する
``` bash
git clean -fd
```
Untracked filesを削除する、dオプションを付ける事でディレクトリも一緒に消してくれる

# 変更したファイルを元に戻す
``` bash
git checkout HEAD ./
```

# リモートリポジトリで削除済みのブランチを削除する
``` bash
git fetch -p
```

# ブランチ一覧を詳細情報付きで表示
``` bash
git branch -vv --all
```
-vvオプションで、現在のコミット表示と、ローカルブランチのリモートPUSH先の表示
--allオプションで、リモート用のブランチも表示する

# ブランチをマージ
``` bash
git merge origin/feature/hogebranch
```
GitHub等でコンフリクトによりAuto Merge出来ない時はローカルでマージする必要がある

# マージで発生したコンフリクトした場合の対応
## 手動でコンフリクトを修正した場合
``` bash
git add hoge.txt
```
## 自分のワークスペース側のファイルを採用したい場合
``` bash
git checkout --ours hoge.txt
```
## ブランチ側のファイルを採用したい場合
``` bash
git checkout --theirs hoge.txt
```
以下の記事を参考にしました。
http://qiita.com/nantekkotai/items/2ed17c3d774211d234a4
apt-getで一括インストール

#ファイルに羅列したパッケージを一括インストール(bash編)

※githubに置きました → https://github.com/digitarhythm/apt-install
※「**[spitiko](http://qiita.com/digitarhythm/items/66a3597cc37304800e3b)**」でインストール出来ます。

おそらく車輪の再発明だが、備忘録として書いておく。
下記のようなbashスクリプトをパスの通ったところに「**apt-install**」みたいな名前で置いておく。

```bash
#!/bin/bash
#=====================================================
# apt-get install at once from package list file
#=====================================================
TARGET="$@"

#if [ -z ${TARGET} ]; then
if [ "${#}" -eq 0 ]; then
    echo "Usage:"
    echo "apt-install [package name | package list file]"
    exit
fi

if [ -f ${1} ]; then
    for line in `cat ${1}`
    do
        if [ -n "${line}" ]; then
            ret=`dpkg -l ${line} | egrep "i\s*?${line}"`
            if [ -z "${ret}" ]; then
                sudo apt-get install ${line} -y
            fi
        fi
    done
else
    for i in `seq 1 ${#}`; do
        sudo apt-get install ${1} -y
        shift
    done
fi
```
で、「require.txt」とかのファイルに、

```text
git
php5-cli
php5-cgi
imagemagick
```
とか書いて、
$ **apt-install ./require.txt**
などと実行すると、入ってないものだけがインストールされる。
パッケージ名を指定するとそのままそのパッケージがインストールされる。
指定した名前がファイルかどうかで判断してるが、ファイルであるほうが優先される。
でも、ファイル名をなにかのパッケージ名と同じにしないようにしておくほうが後々のトラブルを防げるとは思う。
中で「sudo」をしてるので、自分のアカウントではパスワードが必要ないようにするとそのアカウントではそのまま使えます。
セキュリティがぁ〜という人は、sudoを外して「**/usr/local/sbin**」にでも置いて、スーパーユーザーで実行するようにするといいでせう。
NSDataのbytesプロパティを参照するとautoreleaseプールに登録される

チャンク単位で`NSData`を作成して処理させたら、autoreleasepoolにオブジェクトが溜まって大変だったのでメモ。

```objc

- (void)func
{
    for (int i = 0; i < 1000; ++i)
    {
        char text[] = "sample text";
        NSData * data = [[NSData alloc] initWithBytes:text length:sizeof(text)];
        [self operate:data];
    }
}

- (void)operate:(NSData *)data
{
    const char * chars = (const char *)data.bytes;
    NSLog(@"%02d %02d %02d %02d", chars[0], chars[1], chars[2], chars[3]);
}

```

こんな感じでNSDataを別の関数に渡して処理させていたら、メモリを圧迫してしまいました。

## 原因

結局 `data.bytes` を呼び出すとautoreleasingの参照が増えて、ループが終わってRunLoopに戻るまでオブジェクトが解放されませんでした。

`operate:`を`@autoreleasepool{}`で囲うことで、メモリの問題は解消されました。

`bytes`プロパティは`const void*`なので油断していたら、ここでも参照管理は(ある程度)されていました。

InstrumentsでAllocationsの様子を見ていると、`_NSInlineData`の# Persistentが増え続けて、ループが終わるとごっそり# Transientに移るのが確認できました(ループが終わると消えるのでリークにはならない)。
`@autoreleasepool`に入れると# Persistentはほぼ変わらず# Transientのみ増えるのでautoreleaseで解放されているようです。

(`_objc_autoreleasePoolPrint()`は試したけど何も出力してくれませんでした)

### もう少し詳しく

`bytes`プロパティは `@property (readonly) const void *bytes NS_RETURNS_INNER_POINTER;`と宣言されていて、`NS_RETURNS_INNER_POINTER`が記されています。
LLVMのARC資料の[7.7 Interior pointers](http://clang.llvm.org/docs/AutomaticReferenceCounting.html#interior-pointers)によると、

> the object’s lifetime will be extended until at least the earliest of:
> - the last use of the returned pointer, or any pointer derived from it, in the calling function or
> - the autorelease pool is restored to a previous state.

となっています。  
これに従うと`chars`のスコープが終わった時点で前者の条件を満たして参照が解放されると思うのですが、実際には、理由は分かりませんが(`void *`だから?)後者のautoreleaseの処理まで残っていたようです。

## 参考資料
- http://stackoverflow.com/questions/28042944/how-to-use-ns-returns-inner-pointer-flag
-  http://clang.llvm.org/docs/AutomaticReferenceCounting.html#interior-pointers
開発中に rails generate や db:migrate をやり直したい時

やり直す方法を知っていることは、心の安定に繋がります。
ということで、やり直しの方法をまとめます。

# rails generate controller をやり直す方法

`$ rails generate controller FooBars hage`
「あ、やっちゃった！」
`$ rails destroy controller FooBars`
「ふ～、助かった」

# rails generate model をやり直す方法

`$ rails generate model Foo hage`
「また、やっちゃった！」
`$ rails destroy model Foo`
「ふ～、助かった」
（モデル名以外の引数は不要）

その他、rails generate integration_test なども同じ要領でやり直せます

# migrateをやり直す方法

`$ rake db:migrate`
「うぎゃー」
`$ rake db:rollback`
「ふ～」
～中略～
「うーん、最初の状態に戻そう」
`$ rake db:migrate VERSION=0`
変数:variableに関して


変数とはデータの入れ物
変数名 = 値で変数に代入することが出来る

```
name = "Qiita"
puts name

results 

#=> Qiita
```

***
実際にやってみる 割り算「/」に関して
***
商を求める(小数点以下を気にしない)

```
number_1 = 654321
number_2 = 123456  

puts number_1/number_2

result

#=> 5
```

浮動小数点数を求める

```
number_1 = 654321
number_2 = 123456  

p number_1.to_f/number_2

result

#=> 5.300034020217729

```

分数を求める

```
number_1 = 654321
number_2 = 123456  

p number_1.quo(123456) 

result
#=> (218107/41152)

```

>参考サイト
>http://qiita.com/cia_rana/items/525ed5a57a28aaf9d2eb
http://ai-future.hatenablog.jp/entry/%E3%83%8B%E3%83%BC%E3%83%88%E5%B0%B1%E8%81%B7
>
c++ Builder > SetLocalTime()の失敗対応 > Administratorユーザで実行 / 「管理者としてこのプログラムを実行する」チェックしておく

SetLocalTime()を正常実行する方法


以下のいずれかの方法で対応できる。
1. Administratorユーザでソフトを実行
2. 一般ユーザでソフトを実行. ソフトのプロパティで「管理者としてこのプログラムを実行する」のチェックをつけておく。
rubyの学習、復習編(何かしら問題があればお申し付けください)




オブジェクト=データ＋メソッド

```
・オブジェクト
データ+メソッド(機能)を持つもので、rubyでは全ての値[数値、文字列、メソッド]がオブジェクトになります。
そしてオブジェクトは全て何かしらのクラスに属していて、その所属するクラスのメソッドを扱います。
```
```
・例　文字列
文字列 "rudiments"は「rudiments」という文字データを持つオブジェクトであり、Stringクラスのメソッドやarrayクラスのメソッドを扱えます。

「length」メソッド
"rudiments"の文字データとその文字数を図る
「reverse」メソッド
"rudiments"の文字列の文字の順番を反転させた新しい文字列を返す
```

lengthメソッドとreverseメソッド

```:ruby.rb

puts "rudiments".length

puts "rudiments".reverse


```
results

```:ruby.rb
#=> 9
#=> stnemidur

```

```
・例 数値
数値 103は「103」という数値データを持つオブジェクトであり、integer(整数)クラスのメソッドを扱えます。
数値 3.14はfroat(小数)クラスのメソッドを扱えます。

「round」メソッド
3.14などの値を四捨五入する
「floor」メソッド
小数点以下を小さい方の整数にする
```

roundメソッドとfloorメソッド

```ruby.rb
puts 3.14.round

puts 31.4.floor
```
result

```:ruby.rb
$ ruby ruby.rb
#=> 3
#=> 31
Google Chromeの右上「ユーザの切り替え」ボタンを消す方法＠Windows


## ゾンビのように蘇るアバターメニュー

Googleアカウントの切り替えやシークレットモードの利用をしないユーザにとって、
Google Chromeが提供する「新しいアバターメニュー」は
タブバーを一部占有されたり変な名前が表示されたりして邪魔に感じるものです。

このボタン、少し前までは「chrome：//flags」で開くメニューから
機能の無効化（ボタンの非表示）をすることができたのですが、
つい最近の更新でまた表示されるようになり、かつ旧来の方法では
表示を消すことができなくなっていたので、その対応です。

## 方法

1. Google Chromeを起動するのに使ってるショートカットを右クリック
    タスクバーの場合は右クリックで出てくるドロップダウンから「Google Chrome」の上でさらに右クリック
2. 「プロパティ」をクリックして開く
3. 「リンク先」の欄に以下を追加

```
 --disable-new-avatar-menu
```

その後、Chromeを再起動すればボタンが消えてるはずです。
消えない場合はChromeがバックグラウンドで動いてるのでタスクを殺すか、
やり方がわからないならPCを再起動すればよいかと。

この方法はショートカットのリンク先にオプションをつけることで
ボタンの非表示を行っているので、複数個所にショートカットがあって
いずれも利用することがある場合はそれぞれに対して適用する必要があります。

## 参考

http://seagull.hateblo.jp/entry/disable-chrome-avatar-menu
c++ Builder > 作成したアプリを管理者として実行

SetLocalTime()という管理者権限が必要な関数を使っていたソフトにて、管理者権限をつけずに実行していたため失敗していた。

<hr>

こちらが参考になる。
http://mrxray.on.coocan.jp/Delphi/Others/WindowsVista.htm#03

> 管理者権限が必要なアプリケーションは，「管理者として実行」で実行します．そうしないと，たとえエラーが発生しなくても正常に動作するとは限りません．そのため，デスクトップ等にショートカットを作成して常に [管理者として実行] 可能なようにしておくと便利です．

<hr>
microsoftの説明
https://technet.microsoft.com/ja-jp/windows/ff189336.aspx

プロパティ > 互換性タブ > [管理者としてこのプログラムを実行する] チェック ボックス
c++ Builder > SetLocalTime()がデバッグ中に失敗する時

```txt:動作確認
C++ Builder XE4
```

SetLocalTime()という関数がある。
Windows7では管理者権限でソフトを起動しておかないとSetLocalTime()がfalseになる。

C++ Builder XE4でデバッグを行うと、通常、SetLocalTime()の戻り値はfalseになる(管理者権限ではないから）。

デバッグ中にSetLocalTime()をtrueにするには、「C++ Builder XE4自体を管理者権限で実行する」。

ただし、これをすると他の部分でどうなるか不明な点があるので、注意。
Controller を作らないで View を追加したい

**やりたい事**：「Visual Regression Testing に使いたい」「実装前のサンプルにしたい」などの理由で、 View を追加する時に Controller や routes を書かないで済むようにする

**今回の条件**

* `/tests/` 以下はテスト用
* `/tests/admin/` 以下は管理画面用
* 管理画面とそれ以外で別のレイアウトを使いたい

※ `tests` 微妙……とは思っています。

## routes を書く

ワイルドカードを使う。
参考：[3.11 ルーティンググロブとワイルドカードセグメント | Rails のルーティング](http://railsguides.jp/routing.html#%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B0%E3%83%AD%E3%83%96%E3%81%A8%E3%83%AF%E3%82%A4%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88)

```rb:routes.rb
Rails.application.routes.draw do
  if Rails.env.development?
    get 'tests/*path', to: 'tests#show'
  end
end
```

## Controller を書く

`/tests/admin/xxx` だったら、`layouts/admin` を使う。

```rb:tests_controller
class TestsController < ApplicationController
  def show
    if params[:path].split('/').first == 'admin'
      layout = 'admin'
    else
      layout = 'application'
    end

    render "tests/#{params[:path]}", layout: layout
  end
end
```

これで、

```
http://localhost:3000/tests/blog/index
  -> /views/tests/blog/index.html.slim
http://localhost:3000/tests/blog/category/index
  -> /views/tests/blog/category/index.html.slim

http://localhost:3000/tests/admin/entries/index
  -> /views/tests/admin/entries/index.html.slim
http://localhost:3000/tests/admin/entries/edit
  -> /views/tests/admin/entries/edit.html.slim
```

のようにできるはず。

※ `.slim` なのは読み替えてください。
Herokuへのデプロイでつまづいたことまとめ

# 環境
Rails 4.2.2

# そんなことより
ここを読もうぜ（全部これで解決する）
https://devcenter.heroku.com/articles/getting-started-with-rails4

# つまづいたことメモ
## DBはpostgresqlを使うこと

```Gemfile
#gem 'sqlite3'
gem 'pg'
```
場合によっては```bundle update```でGemfile.lockを更新する必要があるかもしれない。

また、config/database.yml を以下のように変更する。

```config/database.yml
default: &default
  adapter: postgresql
  pool: 5
  timeout: 5000
  encoding: unicode

development:
  <<: *default
  database: アプリ名_development
  
test:
  <<: *default
  database: アプリ名_test

production:
  <<: *default
  database: アプリ名_production

```

ローカルでのpostgresqlの導入までカバーすると大変なのでその辺は別途Google先生にお頼みしたい次第です。
自分の場合はローカルですでにsqlite3上でmigrateをしてしまっていたので、```$bundle exec rake db:migrate:reset```で初回からmigrateやりなおしするのが必要でした。

参考： http://qiita.com/mm36/items/f1d6a1bdc1023ebe1c62


## rails_12factorのgemを導入
公式さんより
https://devcenter.heroku.com/articles/getting-started-with-rails4#heroku-gems
> Herokuの統合環境はRails4で削除されたRailsプラグインに依存していました。静的なassets servingとloggingといった機能をHeroku上で有効にするために、あなたの`Gemfile`に`rails_12factor`を追加してください。

（注：意訳です）
ということなので素直にGemfileに追加します。

```Gemfile 
gem 'rails_12factor', group: :production
```

それから`$ bundle install`とのこと。

## deployできたと思ったらInternal Server Error吐いた
> Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml`

原因は`config/secrets.yml`を.gitignoreで無視してリポジトリに含めていなかったこと。
secrets.yml の中身にはセッションで用いる暗号化キー（？）やAPIキーなど色々定義できる様子。productionのキーはcommitしたくないと思うところだが、環境変数を参照するようになっているので大丈夫な様子。

環境変数はHerokuさんのほうがよしなにやってくださっている様子。
https://devcenter.heroku.com/changelog-items/426
以下超アバウトな意訳（2番）
> configの `SECRET_KEY_BASE` 変数はRails 4.1アプリのlifetimeにて生成されます。新しいRails 4.1.0 RC1 アプリはこれを設定しますが、あなたの`config/secrets.yml`は次のように書いてください。


```config/secrets.yml
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
```

> `SECRET_KEY_BASE` には新しい値をセットすることができます。

```
$ heroku config:set SECRET_KEY_BASE=`ruby -rsecurerandom -e "puts SecureRandom.hex(64)"`
```

（lifetime と to roll your credentials ってどう訳せばいいんだろう...）

参考：
- http://qiita.com/kanpe777/items/cb11dc88ced544d10bd5
- http://easyramble.com/rails-secret-key-base-env.html
- http://t4traw.github.io/20141215/study-rails-secrets-yml.html


## modelが無いっぽくて We're sorry, but something went wrong. と言われちゃう

`$ heroku logs`を見たところ、

```
ActionView::Template::Error (PG::UndefinedTable: ERROR:  relation "cards" does not exist
```

肝心のmigrateを忘れているようでした。

```
$ heroku run rake db:migrate
```


## おまけ、assets:precompileでトラブル
```
remote: -----> Preparing app for Rails asset pipeline
remote:        Running: rake assets:precompile
remote:        I, [2015-07-27T22:48:18.024011 #1007]  INFO -- : Writing /tmp/build_2bfe1d5f5d5d24c9965ede0f9a198f5f/public/assets/application-ffb31ff9fed8e5d57837a7022f8809d296f3b8f0de91fc2b6d8d29b92f9b55dc.js
remote:        rake aborted!
remote:        Sprockets::ArgumentError: require_tree argument must be a directory
（中略）
remote:  !     Precompiling assets failed.
```
と言われてしまった。
何か変なことしたかと思っていましたが、中にcssファイルを1件も入れていない空のディレクトリをapplication.cssで読み込んでいたのが原因でした。
themes以下が空っぽだったので、以下のように指定してあるのを削除しました。

```app/assets/stylesheets/application.css
 *= require_tree ./themes
```

まぁこれは個人的な問題だった...。
Railsが書けるようになったから業務で使おうってことになったときに見落としがち必要知識10選

こんにちは。　[@srockstyle](http://twitter.com/srockstyle)です。
Rails書いてます。Rails6で好きな機能はActionTextです。

以前フリーランスエンジニアの友人と話していて
「Rails周りを扱いながら業務に投入するには知識多すぎて、コードだけ書いていたひとたちや初級から中級になるひとにはしんどいかもなあ」
という話題が上がったので、僕が業務でRailsを使っていて日常的に使うけど見落とされがちな知見をまとめてみます。

業務でRails使っている人、なにか追加で必要なものなどあればコメントしていただけると助かります。


## 1. bash,zshなどのシェルを使ったUNIXコマンドライン

Railsをやるときにも必要になりそうですが、ターミナル上で必要とされる知見です。サーバに入ればGUIが設定してあるサーバなんて滅多にないので、そこで作業するには必須のスキルになります。

 * ディレクトリを作る / mkdir 
 * ディレクトリに移動する / cd
 * ファイルのリストを見る。 / ls
 * ファイルの中身を見る / cat、vi、less 

あたりはできるといいですね。

## 2. Linux / Unixのユーザ権限とディレクトリ構成

LinuxやUnixのユーザ権限とディレクトリ構成がどうなっているかは押さえておくといいですね。
MacBookを使う人だとこの辺りはとっつきやすいかもしれません。

本番環境だとrootユーザでアプリを起動はしない、ドキュメントルートは、みたいなお作法もありますね。
作業は権限を限定した一般ユーザで行うのがおすすめです。rootユーザで動いているサーバをたまにみてしまうこともあります。

## 3. サーバ-クライアント通信の基礎

ネットワーク、本当に理解しようとすると大変ですよね。僕もたまに言ってること正しいのか自信ないです。
RailsはWebアプリケーションを作るためのフレームワークなので、httpプロトコルについて知っておくのがおすすめです。

サーバ/クライアントという言葉の使い分けに注意するといいです。

## 4. 動かすまでに必要なセッティング

Linux内部の「サーバ」といったものに対する知見が必要になりますよね。
本番でリリースするまでには以下のものが必要になります。

 * SSH
 * DNS
 * WEB
 * APP
 * DB

サーバ上で何をうごかせばいいのか、どういうものかは知っておくことをおすすめします。SSHとかDNSとか、どのあたりで繋がらなくなっているのかトラブル解決をするのに役立ちます。

## 5. SSH

SSHの設定についてお話します。
SSHもそうですがコマンドラインでしょうか。今ではDocker使ってBlue Green Deployなどを行うことも増えてきmしたが、EC2インスタンスやVPSにSSHしてデプロイはまだあるようです。

リモートのサーバにSSH -> git clone -> bundle -> server restartの流れは掴んでおくといいです。
ただ、SSHの設定はサーバをいただいた時にいくつかしておかないと危険なこともあるので、きちんと行う必要があります。

こんな設定をしておくといいです。

 * パスワード認証は鍵認証にする
 * rootユーザでのログインは不可能にする
 * sudoを使ってrootを使えるようにする
 * ポートを変える
 * リモートログインできるユーザは限定的にする

## 6. DNSサーバ

これも↑のネットワークに通じますね。
サーバにつながらない、で一番最初に発生しがちかもしれません。ドメインの向き先を間違えたりしちゃいます。

昔僕はサーバの中を疑ったりしてしまったことがありまして、サーバ内は通常なのにつながらないとは何事だ、結果ドメインが向いてませんでした、というのはわりとありました。

## 7. Webサーバ

ここでは80 / 443を受け取るサーバとしましょう。
代表的なのはnginx / Apacheですが、h2oというのもあります。
本番で使うならここの設定ファイルをどうしようかの知識を押さえておくのがおすすめです。

まるまるアプリ構築を行う業務ではサーバ構築も含まれることがほとんどですね。
ここは後でどこかのドキュメントにまとめます。

## 8. アプリケーションサーバ

Webサーバと一緒にするか迷いました。ここはあえて分けますね。ちなみにアプリケーションを作らない人からしたら、あまりパッとくる概念ではないようです。説明すこし難しい。

RailsではPassenger、Unicorn、Pumaなどが有名ですね。
ここの設定値はconfig/***にあることが多いです。unicornならconfig/unicorn.rbが設定ファイルです。
ここも設定方法あとで書きますね。

Webrickなどもありました。今はRubyのbundle gemになっています。

## 9. コンピュータリソースについて

「リソースが〜」などと言いますね。代表的なのは以下のものになります。
* メモリ
* CPU
* ディスク容量

これらの種類と、使い果たすとどういった弊害がおきるのかは押さえておくと業務で運用中にバグなどの発見に繋がることもあります。

Linuxならtop / ps / vmstat / uptimeあたりは覚えておくといいですね。

## 10. デプロイ

最近は手元でDockerコンテナをまとめる -> BlueGreenみたいな手段も増えてきて、デプロイの方法も多種多様になってきました。capistranoという手段もレガシーになっていくのでしょうね。

サーバにSSHして行う系のものもまだ生き残ってます。手元でコマンドを実行 -> 配置されるまでの流れは確認しておくといいです。1〜9のことを気をつけているとスムーズにできると思います。

このポイントは自分以外の人の環境でもできるようにすること！
業務では自分が会社を辞めても誰かができるようにするのがとても大切です。

## まとめ
いろいろ眺めていてscaffoldすれば簡単〜とか言ってはいけないな、と思いました。

初めてRailsでプロダクト開発するとき、この記事を思い出してもらえたら嬉しいです。
入っているAWS SDK for PHPのバージョンを雑に調べる



プログラムの中でSDKのバージョンによって挙動を変えたい場合など。


```php
<?php

if (class_exists('\Aws\Sdk')) {
    var_dump(\Aws\Sdk::VERSION);
    // ver3.x
} elseif (class_exists('\Aws\Common\Aws')) {
    var_dump(\Aws\Common\Aws::VERSION);
    // ver2.x
}
```

string(5) "3.2.1"
ReactNativeのfetchがテザリング中エラーになる


テザリングでreactNative製アプリをシミュレーターで動かすと、fetchを使ってネットワークリクエストを送っている部分がことごとく `"Network request failed"` というエラーになる。



[本家にissueが立ってた。](https://github.com/facebook/react-native/issues/844)ここで言われている通り、iOSシミュレーターの `Reset Content and Settings...` をすれば直った。
![スクリーンショット 2015-07-28 7.54.51.png](https://qiita-image-store.s3.amazonaws.com/0/40921/c2e87f73-7a82-51ca-bcfe-0250722840ea.png)
c++11 > nullオブジェクトの挿入

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

> nullオブジェクトとは、nullポインタの代わりとなるダミーオブジェクトのことです。

```cpp:元々のコード
if (player != nullptr) {
  player->move();
}
...
if (player != nullptr) {
  player->draw();
}
```

nullオブジェクトクラスを作成する

```
class NullActor : public Actor {
   ...
   virtual void move() override { } // do nothing
   virtual void draw() override { } // do nothing
};
```

```
player = new NullActor();
```

```cpp:変更後のコード
player->move();
player->draw();
```

if文がなくなったため、すっきりした。
c++11 > unordered_set > unordered_mapクラスのキーの部分だけを持つデータ構造

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

> unordered_setクラスはunordered_mapクラスのキーの部分だけを持つデータ構造です。

```
bool isWeapon(Item id) {
  static const Item weapon[] = {SWORD, SPEAR, KNIFE};
  return std::find(&weapon[0], &weapon[3], id) != &weapon[3]);
}
```

上記をunordered_setで書き換えたのが以下

```
const std::unordered_set<Item> WeaponID = {SWORD, SPEAR, KNIFE};

bool isWeapon(Item id) {
  return WeaponID.find(id) != WeaponID.end();
}
```

isWeapon()の内のreturn分がすっきりした。
c++11 > unordered_map > 連想配列

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

> unordered_mapクラスはC++11から追加された連想配列です。連想配列は連番の数値だけでなく、文字列や任意の数値を添え字として扱うことができます。

<hr>
使用例
http://program.station.ez-net.jp/special/handbook/cpp/stl/map.asp

上記では配列の名前をhashとしている。

<hr>
技術英語 > be out of contact > I've never [been out of contact] for so long.

@ Star trek Voyager > エピソード: Eye of the needle.

通常では75年かかるデルタ宇宙域にたどりついてしまい、地球の親兄弟とは連絡が取れない状況にてキムが言った言葉。

> I've never been out of contact for so long. (こんなに長い間連絡が取れなくなったことはない）

<hr>

out of関連で思い出したのは

> out of control

out of controlに関連して思い出しのは

> get things organized (整理する)

<hr>
バックエンドのサービスをまとめる

# Mobile

| Name | URL |
|:-----------|------------:|:------------:|
| Baasday       | https://baasday.com/ |
| アピアリーズ       | http://www.appiaries.com/jp/ |
| kii       | http://jp-cloud.kii.com/ |
| App C cloud       | https://app-c.net/ |
| App42 cloud API       | http://api.shephertz.com/jp/ |


# Realtime Backend and Database
| Name | URL |
|:-----------|------------:|:------------:|
|Firebase|https://www.firebase.com/|
|Milkcocoa|https://mlkcca.com/|


# IoT向け、MQTT

| Name | URL |
|:-----------|------------:|:------------:|
|PubNub|http://www.pubnub.com/|
|Xively|https://xively.com/|
|CloudMQTT|http://www.cloudmqtt.com/|
|Sango|https://sango.shiguredo.jp/|
|Nifty Cloud MQTT|http://cloud.nifty.com/service/mqtt.htm|
Vagrant+Railsでmailcatcherを使う

[MailCatcher](http://mailcatcher.me)

>MailCatcher runs a super simple SMTP server which catches any message sent to it to display in a web interface. 

# mailcatcherインストール

Gemfile

```ruby
# Gemfile: 

group :development, :test do
  gem 'mailcatcher'
end
```

config/environments/development.rb:

```ruby
# config/environments/development.rb:

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = { :address => 'localhost', :port => 1025 }
```

インストール

```
$ vagrant ssh
$ cd /your/project
$ bundle install
```

# mailcatcher起動

```
$ vagrant ssh
$ cd /your/project
$ bundle exec mailcatcher --http-ip 192.168.33.10
```

ブラウザで`http://192.168.33.10:1080`にアクセスします
(iptablesなどで1080番を閉じている場合は、解放してください)


# 参考

* [mailcatcherが開発環境（vagrant）でメールのテストをするのに便利過ぎる](http://lequinharay-development.tumblr.com/post/81664922096/mailcatcher-vagrant)
ビットコイントランザクションの手数料の求め方

# 手数料の求め方

* 手数料はトランザクションバイト数から求めます
* 1バイトあたり手数料という概念があります
* トランザクションバイト数 * 1バイト当たり手数料　が手数料になります
* 古いコインは無料(coin age)という考え方もあるらしいですがここでは無視します※１

サンプルとして以下のような計算になります

```
トランザクションバイト数=226
1バイト当たり手数料=90
手数料= 226 * 90 = 20340
```

※１　なぜ無視するかというと実際にどのトランザクションをブロックに取り込むかを選ぶ権利はマイナーにあって、普通の競争原理から考えて手数料のないトランザクションはよほど手数料が低いときでないと選ばれないからです。
マイニングプールのアルゴリズムの実装は割と自由なのでそうなっている可能性が高いです。
世の中カネです

## 1バイト当たり手数料

* 21という会社が公開しています
* APIでも取得できます
* ネットワークの混雑状況によって変化することがあります
* https://bitcoinfees.21.co/

## トランザクションバイト数

トランザクションバイト数は以下の式で求められます

```
s = スクリプトバイト数
i = 入力数
o = 出力数
txbyte = (s * i) + (34 * o) + 10
```

スクリプトバイト数はトランザクションの内容によって計算式が異なります。

## P2PKH

P2PKHは以下のようなフォーマットです

```
PREVOUT: hash (32 bytes)
         index (4 bytes)
SCRIPTSIG: length (1 byte)
           CONTENTS: push opcode (1 byte)
                     signature (71 or 72 bytes)
                     push opcode (1 byte)
                     pubkey (33 bytes for compressed, 65 for uncompressed)
sequence (4 bytes)

= 147 or 148
```

スクリプトバイト数は147 ～ 148なので148とします

P2PKHのトランザクションバイト数は以下のような計算式になります

```
s = 148
txbyte = (s * i) + (34 * o) + 10
```

## P2SH

2of3マルチシグの場合のP2SHは以下のようなフォーマットです

```
PREVOUT: hash (32 bytes)
         index (4 bytes)
SCRIPTSIG: length(3byte)
           OP_0(1byte)
           sig1(73byte) sig2(73byte) OP_2(1byte)
           pubkey1(34byte) pubkey2(34byte) pubkey3(34byte) OP_3(1byte)
           CHECKMULTISIG(1byte)
sequence (4 bytes)

= 295byte
```

マルチシグトランザクションのスクリプトバイト数は以下の計算式で求められます

```
m = 署名の数
n = 公開鍵の数
s = (73 * m) + (34 * n) + 47
```

P2SHのトランザクションバイト数は以下のような計算式になります

```
s = (73 * m) + (34 * n) + 47
txbyte = (s * i) + (34 * o) + 10
```


## 参考資料
* https://en.bitcoin.it/wiki/Transaction_fees
* [鍵と署名のバイト数](https://en.bitcoin.it/wiki/Elliptic_Curve_Digital_Signature_Algorithm)
* [マルチシグの仕組み](http://qiita.com/you21979@github/items/795236fde38d510bbdd1)


## JS実装

詳しい実装は以下を参照

* https://github.com/you21979/node-bitcoin-util-fee
* https://github.com/you21979/node-bitcoinfees-21co
ReactiveCocoaの演算をビジュアルに確認できるサイト「RAC Marbles」

![RAC Marbles](https://qiita-image-store.s3.amazonaws.com/0/62550/88a79e7c-fa79-3a57-5277-1324ed2d3176.png)
[RAC Marbles](http://neilpa.me/rac-marbles/)

ReactiveCocoaの演算の結果がどうなるのかを実例で簡単に確かめられます。
FRPの演算は抽象的でわかりにくいですが、こういったサービスを使って実際に動かして見ると理解しやすいと思います。
NSWindowを常に最前面に出す

ウィンドウを常に最前面に出す(どのSpaceでも/Fullscreenでも)常駐アプリっぽいのを作ろうとしたのですが、ちょっとハマったので書きます。

## Custom OS X Application Target Propertiesの設定

Application is agent(UIElement)キーをYESで追加する必要があります。

![20150728003430.png](https://qiita-image-store.s3.amazonaws.com/0/38151/6a151fa2-bb4a-2dd0-e1b3-5339801cf161.png)

これを知らずに、Fullscreenなアプリの上に出てこなくてハマりました。

## NSWindowの設定

```objc:AppDelegate.m

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
  [_window setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces | NSWindowCollectionBehaviorFullScreenAuxiliary];
  [_window setLevel: NSFloatingWindowLevel];
}

```
GO言語でHello Worldしてみる

# マシン環境
* Macbook Pro
* OS 10.10.3 64bit

# 環境構築
## 公式サイトからインストーラをダウンロード
**公式サイト**
http://golang.org/doc/install

* "Download Go" -> ファイル選択 -> ファイルクリック
* インストーラに従って進める

## 動作確認
* ターミナルを起動

```
$ go version
go version go1.4.2 darwin/amd64
```

# コード

* 公式サイトトップからコピペ

```
// You can edit this code!
// Click here and start typing.
package main

import "fmt"

func main() {
	fmt.Println("Hello World!!!")
}
```

* "helloworld.go"として保存
* ターミナル起動

```
$ go run helloworld.go
Hello World!!!
```

おわり
Reactぼちぼち調査中

Reactを中心に昨今のフロントエンド周りをぼちぼち調査中。

というか趣味のゲームを作ってる。

# 続Fluxわからん話

Fluxは未だによく分からんが、Reactのトップレベルコンポーネントだけで情報を管理するのはあまり良い手段ではなさそうであることはわかった。

データ構造＝コンポーネント構造というのはちょっと違っていて、表示に現れる必要のないものや、コンポーネント側で閉じていれば良いものがある。

整理するとこうだ。

+ 表示に現れない部分：Fluxで言うStore。MVCで言うModel。
+ データ構造＝コンポーネント構造の方程式が成り立つ大部分の範囲：トップレベルコンポーネントのstate。
+ コンポーネントの中で閉じていれば良い話：適当なコンポーネントのstate。

これである。

な、わけで、Storeを切り出してみたが、今のところcallbackを駆使してデータの流れを単一方向に保たなくても全然問題ない。

View-Storeアーキテクチャで何ら問題ないのだ。

更新タイミングが知りたい、というのも、Storeが更新されたら速攻cookieもシンクロして更新するという程度なので、今のところsetterを作っておけば事足りる感じだ。

とはいえ、Actionを使った通知が欲しくなるというのも理解できる。

Storeの更新を必ずAction経由にすることで、Storeが自身の知らない間に更新されることを防げる……いや、でもこれだけだとsetterと同じかも……

まぁ要研究。

そんなことよりChromeがローカルファイルのcookie読み書きに対応してないのは微妙。

# TabbedArea/TabPaneの話

どうも最終的にレンダリングされる構造とは関係なく、TabbedAreaの直下にTabPaneを配置する必要があるようだ。

いや、そんだけ。

しかしReact-Bootstrapは適当に作ってもきちんとしたViewが作れていいね。

Bootstrap（＆そのへんで拾ってきたテーマ）のおかげでノンデザイナーでもそれなりに見れるサイトが作れるし、Reactのおかげでコントロールの制御も楽ちんだ。

結構気に入ったのでBindで作ってた公式サイト作りなおそうかな……

# jsdoc

うんまぁ使い方は分かった。

本格的に使うなら、そろそろglup導入してプリプロセスもろとも一気に全部処理するようにしたいね。

エディタはAtom使ってるのだけれども、

    /**


と打ち込んだ時に

```
/**
 *
 */
```

と補完してくれないのが気になる。

ここ３年ほどしばらくJava（とAS3）書いてたから、Eclipse脳になっているのだ。

しかしなんで趣味のコードってコメントあんま書かないんだろうな。同じ人間とは思えん。自分だけしか読まないからだろうか。
PHPのPOSTのキー名に半角スペースを使うとアンダースコアに置換される

## はじめに

* `PHP`と`HTML`の最低限の知識を持っている人対象です。
* `POST`の仕組み自体を説明するものではありません。

## サンプルコード

```html:index.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
    </head>

    <body>
        <form method="post" action='post_sample.php'>
            <input type='text' name='sample' value='sample'><br>
            <input type='text' name='全角文字' value='全角文字'><br>
            <input type='text' name='sample plus space' value='sample plus space'><br>
            <input type='text' name='sample.php' value='sample.php'><br>
            <input type='text' name='sample1[test]' value='sample1[test]'><br>
            <input type='text' name='sample2[test' value='sample2[test'><br>
            <input type='text' name='sample3test]' value='sample3test]'><br>
            <input type='submit'>
        </form>
    </body>
</html>
```

```php:post_sample.php
<?php
echo('<pre>');
var_dump($_POST);
echo('</pre>');
```

### 結果
![スクリーンショット 2015-07-28 0.09.41.png](https://qiita-image-store.s3.amazonaws.com/0/67471/3a0b23df-cf30-8a78-e03c-dfae2ace3816.png)

上記結果からポストのキー名に指定した「半角スペース」「ピリオド」「単独開きブラケット」は内部的にアンダースコアに変換されるようです。
`PHP`の公式サイトにもアンダースコアに置換される旨の記載があることから、`PHP`公式の仕様のようです。
知らなかったので備忘録と共有の意味を込めて記事にしました。

## 参考

> http://jp2.php.net/manual/ja/language.variables.external.php

## おわりに

今回この件を調べたのは、ポストされてきたキー値をそのまま`SQL`のカラム名指定に使用しようとしていて「あれ？これってインジェクションできるのかな？」と思いポストのキー値に`drop table`等を仕込んで攻撃してみようとしたという背景からでした。結果として半角スペースがアンダースコアに変換されてしまうので攻撃できませんでしたが、安全のために別の手段に置換することにしました。
好奇心って大事ですね:smile: 
どうでもいいですが、前回の記事の最後に「次回は`Rails`編を書きます」と言いましたが別内容になってしまいました。
`Rails`編はその内書きます。
否定形の書き方いろいろ


こんなメソッドを書こうとします。

```java
@Nullable
public Element getFirst(List<Element> list) {
    //TODO リストが空じゃなかったら最初の要素を返す
    return null;
}
```

# パターン１：普通に否定形で書く。

一番良く見る書き方な気がするんですが、再度コードを見た時に`!`を見落とすことが多くてあまり好きになれません。

```java
@Nullable
public Element getFirst(List<Element> list) {
    if (!list.isEmpty()) {
        return list.get(0);
    }
    return null;
}
```

# パターン２：ちょっと見やすく否定形で書く

`!`ではなく`== false`と書いてみました。
個人的にはこちらの書き方が好きで多用してます。
どこかの本でも可読性の面でこんな書き方をしていたような？（違うかも）

```java
@Nullable
public Element getFirst(List<Element> list) {
    if (list.isEmpty() == false) {
        return list.get(0);
    }
    return null;
}
```

# パターン３：否定形を使わずにelseで書く

`if`の条件の中を反転させないように頑張って書くとするとこのようになるでしょうか。
僕個人がやることはほぼないですが、ごくたまに見かけることがある気がします。
今回の場合は例が簡単すぎて単純に冗長なコードになってますがw

```java
@Nullable
public Element getFirst(List<Element> list) {
    if (list.isEmpty()) {
        //do nothing!
    } else {
        return list.get(0);
    }
    return null;
}
```

# パターン４：早期リターンする

先に例外ケースなどをつぶしてからやりたい処理に入る書き方ですね。
今回はかなりコードが短いので良い感じかと思います。
ただしコードが長くなってくると`if`の先の「条件を抜けた後の状態」を把握しながら書くことになるので場合によっては少しキツいかもです。

```
@Nullable
public Element getFirst(List<Element> list) {
    if (list.isEmpty()) {
        return null;
    }
    return list.get(0);
}
```


もちろん時と場合によって書き方を選ぶんでしょうが、個人個人で好きな書き方とかはありそうですねー。
Elixirの文字列と文字リスト


[Elixir](http://elixir-lang.org/)の[Getting Started](http://elixir-lang.org/getting-started/introduction.html)をやろうと思いまして、そのメモです。

# はじめに
[06. Binaries, strings and char lists](http://elixir-lang.org/getting-started/binaries-strings-and-char-lists.html)です。

# UTF-8 and Unicode
* 文字のコードポイントは、`?`を使って得られる
* 文字列をコードポイントごとに分割するには`String.codepoints/1`

```iex
iex> ?a
97
iex> ?ł
322
iex> ?こ
12371
iex> String.codepoints("こんにちは")
["こ", "ん", "に", "ち", "は"]
```

# Bainaries (and bitstrings)
* バイナリ = バイト列
* 文字列 = バイト列
* バイト列は1バイトずつカンマ区切りで`<<...>>`で囲む
* バイト列の結合は`<>`演算子
* NULL文字`<<0>>`を結合して文字列のバイナリ表現をみたりする

```iex
iex> <<128, 129>>
<<128, 129>>
iex> <<97, 98>>
"ab"
iex> String.valid? <<128, 129>>
false
iex> String.valid? <<97, 98>>
true
iex> "ab" <> <<0>>
<<97, 98, 0>>
```

* 各要素オーバーフローしたビットは捨てられる
* 各要素何ビットで表現された要素かを`::size(bit数)`で表現できる

```iex
iex> <<256>>
<<0>>
iex> <<256::size(16)>>
<<1, 0>>
iex> <<2::size(1)>>
0
iex> <<12371::utf8>>
"こ"
iex> <256::size(16), 256::size(16)>>
<<1, 0, 1, 0>>
```

* "バイナリ"はバイト列(8bitで割り切れるbit列)

```iex
iex> is_binary <<1::size(1)>>
false
iex> is_binary <<1::size(7)>>
false
iex> is_binary <<1::size(8)>>
true
iex> is_bitstring <<1::size(1)>>
true
iex> bit_size <<1::size(4)>>
4
```

* バイト列/ビット列にもパターンマッチできる

```iex
iex> <<0, 1, x>> = <<0, 1, 2>>
<<0, 1, 2>>
iex> x
2

iex> <<0, 1, x>> = <<0, 1, 2, 3>>
** (MatchError) no match of right hand side value: <<0, 1, 2, 3>>

iex> <<0, 1, x::binary>> = <<0, 1, 2, 3>>
<<0, 1, 2, 3>>
iex(155)> x
<<2, 3>>

iex> "he" <> rest = "hello"
"hello"
iex> rest
"llo"
```

# Char lists
* 文字リストは文字のリスト
* iexでは、ASCII文字以外が含まれているとコードポイントのリストとして表示される
* 文字列と文字リストは相互変換できる

```iex
iex> 'こんにちは'
[12371, 12435, 12395, 12385, 12399]
iex> is_list 'こんにちは'
true
iex> 'hello'
'hello'

iex> to_char_list "こんにちは"
[12371, 12435, 12395, 12385, 12399]
iex> to_string 'こんにちは'
"こんにちは"
iex> to_string :hello
"hello"
iex> to_string 1
"1"
```
MariaDB 10.0.20 をインストールしてみる。

CentOS 7 の環境を作ったので、MariaDB 10.0.20をインストールしてみる

## 1. まずは、リポジトリの設定

下記ページの左メニューにて、[RESOURCES] > [Repository Configuration Tool] を選択

[Installing MariaDB with yum](https://downloads.mariadb.org/mariadb/repositories/#mirror=yamagata-university)

![スクリーンショット 2015-07-27 23.24.52.png](https://qiita-image-store.s3.amazonaws.com/0/37644/294b34a4-b2c8-e1fb-5928-e020d9ce47f5.png)

## 2. Distributionを選択

インストールする環境はCentOSなので、「CentOS」を選択

![スクリーンショット 2015-07-27 23.26.18.png](https://qiita-image-store.s3.amazonaws.com/0/37644/b7dea01a-d751-41ec-ee4d-48cee463d2f0.png)

## 3. 2のバージョン、MariaDBのバージョンを選択

![スクリーンショット 2015-07-27 23.27.31.png](https://qiita-image-store.s3.amazonaws.com/0/37644/193e4431-2b18-5325-5cd5-fbbf6f3717c3.png)

## 4. 手順通りインストール

3の後、画面下に手順が表示されるので、そのまま実行

![スクリーンショット 2015-07-27 23.29.58.png](https://qiita-image-store.s3.amazonaws.com/0/37644/f74db8ab-ee59-ed28-81f2-9a89e27542a2.png)

リポジトリの設定を行い、

```
# vim /etc/yum.repos.d/MariaDB.repo
```

```repo:/etc/yum.repos.d/MariaDB.repo
  [mariadb]
  name = MariaDB
  baseurl = http://yum.mariadb.org/10.0/centos7-amd64
  gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
  gpgcheck=1
```

そのままyumでインストール

```
# yum install MariaDB-server MariaDB-client
```

楽、、楽すぎる！
楽ですわよ！！
奥様！！！
JAWS-UGコンテナ支部 Docker入門 #1 参加メモ

JAWS-UGコンテナ支部 Docker入門 #1に参加してきました。
https://jawsug-container.doorkeeper.jp/events/27766

2部のECSのイベントや懇親会も参加したかったのですが、2部の参加枠に入れなかったり、先約がありで途中退室しました。
次回は残りたいなー。

私が出席した回はDockerのハンズオンの回で、
>Docker入門～いまから始めるDocker @zembutsu
>Docker 10分ハンズオン @pottava

Dockerの関連資料を良く拝見させて頂いているお二人がいらして、個人的に「おぉ！」と思っておりましたｗ

以下、発表を聴いた時の備忘メモになります。
(誤っている部分等ありましたら、ご指摘頂けると幸いです。。)

■ 登壇者：前佛さん
今回の対象者：初心者、ECSの前にそもそもDockerってなんだっけ？な人（私のような人）

#Dockerって？
コンテナを効率的に使えるようにした
→一回イメージを作れば、どんな環境でも使えるってのがDockerのすごいところ

例えば、社内のPCでばらばらなバーション管理をしていて、人によって環境差異がでてくる
→解決するのがコンテナ
→Docker Imageを展開することで全て同じ環境となる

#コンテナって？
chrootは、プロセスをせばめている
→Dockerも同じ

#Docker hub
みんなでDocker Imageを共有するシステム
→自分に必要なイメージを取ってくる

#Dockerの弱点
ひとつのサーバ、ひとつのPC上でしかコンテナをたてられない

#Docker Macine
特徴
手元の環境に複数のDocker環境を使える
→従来の環境構築時の問題を解決する

#Docker Sworm
特徴
SwarmManagerというサーバを立てるとでどこのコンテナを立ち上げるかの制御が出来る

#Docker Compose
特徴
複数のDocker環境をコマンド一発で一気に立ち上げる

#Docker VS 仮想化、構成管理ツール、クラウド
前佛さん曰く、Dockerは他のツールの補完的な役割

#Dockerの基本的な操作
Dockerのイメージを取得する
Dockerをたちあげる
Dockerを停止する
Dockerのイメージを削除する

#Docker Imageって？
Docker-hab(公開リポジトリ）から取得できるイメージ
→一回取得すれば次回からは取得しなくて良い
→使わなくなったイメージは消すこと

ベースイメージ（OS）の上に書き込み可能な領域が積み上がる
→コンテナ起動時に書き込み可能な領域上に作成する
→@zenbutsuさんは初心者だったころ、ここでハマったとのこと
→使い終わったイメージを削除せず、放置して書き込み可能領域を食いつぶしたそうな。

#まとめ
Dockerの大切なところ
 ・Dockerって難しくない
  → 基本コマンドもLinux知ってれば特に難しくない
 ・速さと利便性

■ 登壇者：ナカマルさん
Qiitaの資料を使ってDockerのハンズオンでした。
10分間であったため、内容も凝縮されておりましたが、短い時間で起動できて遊べるDockerたん早いぜ。
CloudFormationを使ってEC2上にDockerが入っている環境を展開
→ハンズオンに遅れてしまっていたので、自宅で自習しました。。

#個人的なまとめ
Dockerは技術的にキャッチアップしている最中のものになります。
まだまだ、登壇者の方の話を聴いて「へー」と思ったり知識の再確認程度で留まってしまい、
その先の「こういう使い方の時どうなの？」とか、「こういう使い方ありますよ！」という議論へ参加する、みたいな勉強会の醍醐味まで自分が行けていないなと思っています。
引続き、勉強していき懇親会などでお話したいです。
(Docker触ってて困ったこと、躓きは聴きたいです。)
Learn Rust by writing Entirely Too Many linked lists

Learn Rust by writing Entirely Too Many linked lists
http://cglab.ca/~abeinges/blah/too-many-lists/book/
https://github.com/Gankro/too-many-lists

> I fairly frequently get asked how to implement a linked list in Rust. The answer honestly depends on what your requirements are, and it's obviously not super easy to answer the question on the spot. As such I've decided to write this book to comprehensively answer the question once and for all.
> 
> In this series I will teach you basic and advanced Rust programming entirely by having you implement 6 linked lists. In doing so, you should learn:
> 
> - The following pointer types: `&`, `&mut`, `Box`, `Rc`, `Arc`, `*const`, `*mut`
> - Ownership, borrowing, inherited mutability, interior mutability, Copy
> - All The Keywords: struct, enum, fn, pub, impl, use, ...
> - Pattern matching, generics, destructors
> - Testing
> - Basic Unsafe Rust
> 
> Yes, linked lists are so truly awful that you deal with all of these concepts in making them real.

（参考訳）
> Rustでリンクリストをどう実装するかという質問をたびたび受けます。正直なところ、回答内容はどのような要件かに依存し、その場で質問に答えるのは簡単なことではないのです。なので、こういった質問にまとめて答える本書を書こうと決めました。
>
> このシリーズでは、6種類のリンクリスト実装を通じてRustプログラミングの基礎と応用を教えます。そこでは、下記を学べます：
>
> - 次のポインタ型：`&`, `&mut`, `Box`, `Rc`, `Arc`, `*const`, `*mut`
> - 所有権(ownership)、借用(borrowing)、mutable性の継承(inherited mutability)、内的なmutable性(interior mutability)、コピー(copy)
> - 全てのキーワード：struct, enum, fn, pub, impl, use, ...
> - テスト
> - UnsafeなRustの基礎
> 
> ええ、これら全てのコンセプトを扱うのに、リンクスリストの実装というのはハッキリ言うとひどい題材ではあります。