OmniAICreator/Qiita-1.07M huggingface dataset:
php初心者が、Smartyから配列変数にしてAdminLTEのテンプレートに受渡しました。

AdminLTE の htmlコードを Smarty のテンプレートに移行して、表示するデータを配列変数にしてテンプレートに引き渡しました。

![image](https://qiita-image-store.s3.amazonaws.com/0/93227/d2272c52-7afd-3da6-6d97-d6cdf1f57cb1.png)

▼サンプル画面
http://otoku55.sakura.ne.jp/phpStudy/tf_message.php

本来は、MySQLなどのデータベースからデータを取得してテンプレートにデータを渡すのでしょうが、とりあえず、変数にセットしてテンプレートを呼び出してみました。

タイトルと本文とフッターを１セットにして、's_message'という変数にセットしました。

```php:tf_message.php
<?php

(smartyの環境設定)

//システム更新情報
$w_info01 = 'BARI 顧客管理システムのメールアドレスにお知らせを一括メール配信いたします。';
$w_info02 = '画面デザインは、AdminLTEを利用して作成しています。';
$smarty->assign('s_sysinfo',array($w_info01, $w_info02));

//お知らせ
$w_title01 = '2015/09/12　ログイン画面を作成';
$w_body01 = 'ログイン画面を作成しました。ユーザー認証は省略しています。';
$w_footer01 = '※確認しましたら、お知らせを削除してください。';
$w_msgset01 = array($w_title01, $w_body01, $w_footer01);

$w_title02 = '2015/09/23　お知らせ画面を作成';
$w_body02 = 'お知らせを配列変数でセットしました。';
$w_footer02 = '※確認しましたら、お知らせを削除してください。';
$w_msgset02 = array($w_title02, $w_body02, $w_footer02);

$smarty->assign('s_message',array($w_msgset01,$w_msgset02));

$smarty->display( 'tf_message.tpl' );
```


Smarty で 設定した変数を テンプレートで受け取るコードです。

受け取った変数は、'foreach'で繰り返し表示しています。

```tf_message.tpl

        <!-- Main content -->
        <section class="content">
          <div class="callout callout-info">
            <h4>システム更新情報</h4>
              {foreach from=$s_sysinfo item=info}
                <p>{$info}</p>
              {/foreach}
          </div>

          {foreach from=$s_message item=msgset}
            <!-- Default box -->
            <div class="box">
              <div class="box-header with-border">
                <h3 class="box-title">{$msgset[0]}</h3>
                <div class="box-tools pull-right">
                  <button class="btn btn-box-tool" data-widget="collapse" data-toggle="tooltip" title="Collapse"><i class="fa fa-minus"></i></button>
                  <button class="btn btn-box-tool" data-widget="remove" data-toggle="tooltip" title="Remove"><i class="fa fa-times"></i></button>
                </div>
              </div>
              <div class="box-body">
                {$msgset[1]}
              </div><!-- /.box-body -->
              <div class="box-footer">
               {$msgset[2]}
              </div><!-- /.box-footer-->
          {/foreach}

          </div><!-- /.box -->

        </section><!-- /.content -->
```
macでsha256のハッシュを生成する



以下の２つ方法で可能。

```bash:
$ shasum -a 256 hoge
$ gsha256sum hoge
```

調べるまでもなくzshで256と打ってタブ補完したら一発でgsha256sumまで補完されたので、とりあえず256と打てばいいじゃないかみたいな気持ちになりました。
csharp > .Split で複数のデリミタを使う > string separator = ",{:}"; / .Split(separator.ToCharArray()))

JSON文字列を単純に要素だけ取り出したい。

##try1 
`',', '{', ':', '}'`をデリミタとしたい時は[参考ページ](http://www.ipentec.com/document/document.aspx?page=csharp-parse-string-to-string-array)によると、以下のようにすればいいようだ。

```
.Split(new char [] {',', '{', ':', '}'})
```

ideoneで実装した。

http://ideone.com/rqhN3S

```csharp
using System;
using System.Linq;

public class Test
{
	public static void Main()
	{
		string sample = "{\"AAA\":{\"bbb\",\"ccc\"},\"ddd\"";
		foreach(var element in sample.Split(new char [] {',', '{', ':', '}'})) {
			if (element.Length > 0) {
			    Console.WriteLine(element);
			}
		}
	}
}
```

```txt:結果
Success	time: 0.03 memory: 23880 signal:0
"AAA"
"bbb"
"ccc"
"ddd"
```

##improved (by muroさん)

コメントにて @muro さんから教えていただいた、string型のseparatorに文字を格納しておき、.ToCharArray()を使ってSplitを組み合わせる方法の方がコードリーディングがはるかにしやすい。

また、separatorをstring型にすることで、後で変更したりもできそうという点もいい。

実際のコードはmuroさんのコメント参照。

ideoneでも動作確認済。
http://ideone.com/hB38Yg
mapの記法が変わっている


Swift 2.0  ,Xcode 7で、mapの記法が変わっているようである

古いやり方

```
let numbers = [4,7,2,9]
let array1 = map(numbers,{(let v:Int) -> Int in return v * 2})
print(array1)
```

これだとエラーが出るので、以下のように記するべきである

```
let numbers = [4,7,2,9]
let array1 = numbers.map({(let v:Int) -> Int in return v * 2})
print(array1)
```

ちなみに以下の記法もダメである

```
let numbers = [2,3,4,5]
let array2 = map(numbers){(let v:Int) -> Int in return v * 2}
print(array2)
```

以下のような記法が正しい

```
let numbers = [2,3,4,5]
let array2 = numbers.map(){(let v:Int) -> Int in return v * 2}
print(array2)
```

役立てていただければ幸いである。
p5.js 三角形の内部にマウスカーソルがあるか


回転する三角形の内部に点(マウスカーソル)があるかを判定するプログラムを [p5.js](http://p5js.org/) で書いてみました。
マウスカーソルが三角形の内部にあるときは、三角形を灰色で塗りつぶしています。

![point-in-triangle.gif](https://qiita-image-store.s3.amazonaws.com/0/1900/bb394189-290c-31e4-87fd-e94885d34814.gif "point-in-triangle.gif")

## プログラム

```js
'use strict';

var a, b, c;

function setup() {
    createCanvas(400, 400);

    a = createVector(100, 0);
    a.rotate(radians(0));
    b = createVector(100, 0);
    b.rotate(radians(120));
    c = createVector(100, 0);
    c.rotate(radians(240));
}

function draw() {
    background(255);

    // 3 角形の 3 点を回転
    a.rotate(radians(0.5));
    b.rotate(radians(0.5));
    c.rotate(radians(0.5));

    push();
    translate(width/2, height/2);

    // マウスカーソル位置
    var p = createVector(mouseX - width/2, mouseY - height/2);

    //     a
    //    / \
    //   /   \
    //  b --- c
    //
    var ab = p5.Vector.sub(b, a);
    var ap = p5.Vector.sub(p, a);

    var bc = p5.Vector.sub(c, b);
    var bp = p5.Vector.sub(p, b);

    var ca = p5.Vector.sub(a, c);
    var cp = p5.Vector.sub(p, c);

    // 外積
    var z1 = ab.x * ap.y - ab.y * ap.x;
    var z2 = bc.x * bp.y - bc.y * bp.x;
    var z3 = ca.x * cp.y - ca.y * cp.x;
    if ((z1 > 0 && z2 > 0 && z3 > 0) || (z1 < 0 && z2 < 0 && z3 < 0)) {
        // 点 p は、3 関係の内側にある
        fill(120, 120, 120);
    }
    else {
        noFill();
    }
    triangle(a.x, a.y, b.x, b.y, c.x, c.y);
    pop();
}
```
alternatives経由でJavaを使うならjavacも指定しよう

Javaをインストールする際、`alternatives`でJavaのバージョンを管理することがよくあります。

例えば、OpenJDKが入っているマシンに対して、Oracle JDKをインストール後、
Oracle Javaを標準で使うよう`alternatives`コマンドで指定することができます。

```bash
# Javaのバージョン指定
alternatives --config java
```

ただし、このままでは`jstat`などのJDKに含まれているツールは変更されないままです。
上記の例だとOpenJDKの`jstat`を使おうとしてしまいます。

`alternatives`で`java`だけではなく`javac`も指定するようにすると、
JDKツールが一式変更されます。

```bash
# JDKツールのバージョン指定
alternatives --config javac
```

alternativesでコマンドを切り替える際に一緒に変更されるものは、
以下の方法で確認できます。

```bash
alternatives --display javac
```
compassでsassのコンパイル・スプライト画像生成


[Grunt+Compassでフロント環境構築【導入編】](http://qiita.com/kohei789/items/4d9d4e94e174b60fe0d4)の続きです。

# 目次
1. [Grunt+Compassでフロント環境構築【導入編】](http://qiita.com/kohei789/items/4d9d4e94e174b60fe0d4)
2. [compassでsassのコンパイル・スプライト画像生成](http://qiita.com/kohei789/items/f76b9c57072a060cbfdb)
3. [Gruntfile.js作成](http://qiita.com/kohei789/items/11480613cc67dd30f6aa) 

## 概要

sassのコンパイル
スプライト画像生成

## config.rb作成



```lang:config.rb

#圧縮するかどうかの設定(:nested, :expanded, :compact, or :compressed)
output_style = (environment == :production) ? :compressed : :expanded

#SASS内の行番号の出力(true or false)
line_comments = (environment == :production) ? :false : :true


# 対象ディレクトリを指定
http_path="/"
css_dir = "src/main/webapp/css"
sass_dir = "src/main/webapp/scss"

images_dir = "src/main/webapp/img"
generated_images_dir = 'src/main/webapp/img'

javascripts_dir = "src/main/webapp/js"

http_generated_images_path = "/img"
http_images_path = "/img"


#スプライト設定
on_sprite_saved do |filename|
  if File.exists?(filename)
    FileUtils.mv filename, filename.gsub(%r{([a-z0-9_]+)-[a-z0-9]+\.png$}, '\1/sprite.png')
  end
end

on_stylesheet_saved do |filename|
  if File.exists?(filename)
    css = File.read filename
    File.open(filename, 'w+') do |f|
      f << css.gsub(%r{([a-z0-9_]+)-s[a-z0-9]{10}\.png}, '\1/sprite.png')
    end
  end
end
```


## 実行

下記コマンドでwatchタスク実行可能
変更があった場合は自動でconfig.rbで設定したタスクが実行される。

```
conpass w
```

[続き: Gruntfile.js作成](http://qiita.com/kohei789/items/11480613cc67dd30f6aa)
Using Xmonad

#Using Xmonad

![xmonad](https://raw.githubusercontent.com/robertbnd/Blog/master/2/xmonad.png)

One day I woke up and my life changed, I has a notification on google plus,
on an archlinux group a buddy post happy because he istalled Xmonad,
I was curious,  he so happy and just a backgroud,
something was wrong with my observation.
Then I investigated….

**¿What is Xmonad?**
“xmonad is a dynamically tiling X11 window manager that is written 
and configured in Haskell. In a normal WM, you spend half your
time aligning and searching for windows. xmonad makes work easier,
by automating this.” For me is to use the computer focused in the functionality,
beacuse this is exactly Haskell “An advanced purely-functional programming language”  
it has many groovy  solely you need study a little more.

**Instructions**
we go to install on Archlinux.
<code>
sudo pacman -S xorg  xorg-utils xmonad xmonad-contrib xmobar   dmenu git feh terminator
</code>

and search the corresponding video driver
https://wiki.archlinux.org/index.php/Xorg

<code>
xorg  xorg-utils is the the displays server (X windows system)
xmonad xmonad-contrib our windows manager
</code>

**xmobar**  we can have a top bar this  give us information as date,battery, wifi, anything
**dmenu**  this  allows search any program and execute
**git**  to get our files of github  
**feh** this allows set background we are using on .xinitrc  
**terminator**  This is just I love terminator but you can choose your preference and edit xmonad.hs
on home directory you should have .xmonad (~/.xmonad) if you don’t have create it, on directory .xmonad:
git clone https://github.com/robertbnd/dotfiles/blob/master/xmonad.hs
git clone https://github.com/robertbnd/dotfiles/blob/master/xmobar.hs
on ~/ 
git clone https://github.com/robertbnd/dotfiles/blob/master/.xinitrc 
this file is executed when starts X windows  system
on tty use startx and run your xmonad or  if you has gdm change the option of gnome to xmonad.

by default Xmonad use ALT but I chaged to use windows key example

> windows key + o: Run the terminal  “terminator”
> windows key + g: Run chrominum
> windows key + f: Firefox
> windows key + Shift + F4 : turn off our computer
> windows key + Shift + F4 : change focused window

I commented xmonad.hs you can found all the combinations.
My recomendation is  to learn Haskell because you can understand easily the configuration
and also is a good lenguage. I need fine-tune my xmonad but for now is ok,
nevertheless  you can ask me any question.

##Source

**Learn haskell**  http://hackr.io/tutorials/haskell
**Tutorial Xmonad**
http://www.linuxandlife.com/2011/11/how-to-configure-xmonad-arch-linux.html
http://www.vicfryzel.com/2010/06/27/obtaining-a-beautiful-usable-xmonad-configuration/
Grunt+Compassでフロント環境構築【導入編】

# 目次

1. Grunt+Compassでフロント環境構築【導入編】
2. [compassでsassのコンパイル・スプライト画像生成](http://qiita.com/kohei789/items/f76b9c57072a060cbfdb)
3. [Gruntfile.js作成](http://qiita.com/kohei789/items/11480613cc67dd30f6aa) 

## Gruntで何を解決するか

#### 昔：
・html,css,js(or jquery)のシンプルな構成

#### 今：
html,sass(cssへのコンパイル),js,テンプレートエンジン

- 各種使用ライブラリ増加に伴いライブラリのバージョン管理(require.js,jquery,zept,lodash・・）
- それら各タスク管理
- sassのコンパイル
- スプライト画像の生成
- js,cssの結合、ミニファイ

  　
**これらを肥大したタスクを一元管理する**

## 本件におけるGruntで行う内容

コンパイル・結合・圧縮等、各タスク管理。
local,dev,本番等環境別タスクを一元管理する。

## compassで行うこと

sassのコンパイル,圧縮


## Grunt導入

```
#最新にしてインストール
npm update
sudo npm install -g grunt-cli
#確認
grunt -version

#プロジェクトのルートディレクトリに移動
npm init
#Gruntプラグイン導入。
npm install プラグイン名　—save-dev
```

## Compass導入


```
sudo gem update --system
sudo gem install sass
sudo gem install compass

#バージョン確認
compass -v
sass -v

#開始
compass create
```

[続き: compassでsassのコンパイル・スプライト画像生成](http://qiita.com/kohei789/items/f76b9c57072a060cbfdb)
iterm2の設定覚え書き

最近macのターミナルからiterm2に乗り換えたので、設定等を忘れないように覚え書き

# 導入した理由  
ショートカットひとつでターミナルを現在表示されている画面上に全画面表示できるから。  
今まではエディタでコーディングして事あるごとに隣の仮想デスクトップに開いておいたターミナル画面にトラックパッドを使ってスワイプ移動、という手順を踏んでいた。  
これをショートカットでエディタの画面上に表示できるようにする事で0.5秒程の短縮。なんだかんだターミナルと現在画面の往復する回数が多いので、これだけでも大分1日の作業効率があがっている気がする。

# 設定
## フルスクリーンの表示方法の変更
 iTerm -> preferences -> General
「Native full screen windows」のチェックをはずす。
これをつけてると緑ボタンを押した時のフルスクリーンになって、画面一個専有してしまうのが気に食わないため。

## バックグラウンドを透過する
iTerm -> preferences -> Profile -> window
Window Appearance -> transparencty -> 適当に右にずらす。
バックグラウンドは透明度あげたいから

## どの画面でも最前面にかぶせて表示
iTerm -> preferences -> Profile -> window
Setting for New Windows -> Style -> Fullscreen
Setting for New Windows -> Space -> All Spaces
どこにいても全画面表示でかぶせて表示できるように。

## タブを常に表示
iTerm -> View -> Show Tabs in Fullscreenをチェック
フルスクリーンのデフォルトだとタブが見えないけど、常にタブは見えていて欲しいので。

## 表示のショートカットを変更
iTerm -> preferences -> Keys
「Show/hide iTerm2 with a system-wide hotkey」のチェックを入れる。
Hotkeyを「cmd + shift + enter」に

## カラーセットの変更
iTerm -> Profiles -> Colors -> Color Presets
Solarized　Darkを選択
Aurelia関連でいろいろと

Aurelia を触るにあたっての前提知識をいくつか。

# ポリフィルなんぞ
Aurelia は ES6/7 で記述することを想定している（ES5 でもかける）。当然 ES6 は最新ブラウザでも動かないわけで、動くするようにするのが「Polyfill」だ。「[Polyfilla](http://www.polycell.co.uk/product/polycell-deep-gap-polyfilla/)」は商標名だ。
package manager（e.g. jspm） -> transpiler（e.g. babel）の多段構成になっていて、実装は選べる。Aurelia は現実解を [jspm](http://jspm.io/) と設定している。


# 双方向バインディングなんぞ
Aurelia といえば Angular 代替と目されるわけで、つまり双方向バインディングなわけだ（誤）。
Aurelia での双方向バインディングの実現方式は適応性のあるもので、Object.observe、ゲッタ/セッタ、「汚いチェック」、あるいはオレオレ実装のうち最も効率の良いものを選択できる。
と、ここで出てくるのがO.oだ。[ES7 プロポーザル](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/observe)で、Chrome などで実装取り込み済み。

```js
Object.observe(obj, callback[, acceptList]);
```

実際には Aurelia で直接 O.o を記述することはない。HTML で View を書き、ES6 の Class で JS を書く。普通だ。侵襲性がなくてビューティフルだ。

# ルーティングなんぞ
Routing を URL と処理のマッピングと定義する。Ember でも Angular でも Routing によってプログラムを構造化し、SPA の部分描画に資する。
Aurelia では JavaScript の配列で階層構造を表現する。

```js
import {Router} from 'aurelia-router';

export class App {
  static inject() { return [Router]; }
  constructor(router) {
    this.router = router;
    this.router.configure(config => {
      config.title = 'Aurelia';
      config.map([
        { route: ['','welcome'],  moduleId: 'welcome',      nav: true, title:'Welcome' },
        { route: 'flickr',        moduleId: 'flickr',       nav: true },
        { route: 'child-router',  moduleId: 'child-router', nav: true, title:'Child Router' }
      ]);
    });
  }
}
```

# 感想
Aurelia は全体に ES6/7 で記述することによってシンプルでわかりやすい構造になっていると思う。実際にワークフローまわした場合には Polyfill が介在することでブラックボックス化は避けられない予感はある。
GitBucket Pluginでコミット件数をグラフ表示してくれるやつを作りました

GitHubのコミット件数とか色々とグラフ表示してくれるメニューが欲しくて作ってみた。

ただ、非機能系があまり作りこめていないので、

* コミット件数が多い
* コミットしたユニークユーザーが多い

といったプロジェクトの場合、おそらく表示に時間がかかったり、もしかすると、OutOfMemoryとかで落ちちゃうなんてこともあるだろう。

そのあたりは、そのうち解決していこうと思う。

コードはこちら。
https://github.com/yoshiyoshifujii/gitbucket-commitgraphs-plugin

## Install

[README.md](https://github.com/yoshiyoshifujii/gitbucket-commitgraphs-plugin/blob/master/README.md) のとおり。

## 使い方

Pluginを適用していただいたら、特に設定画面はない。

いつもお使いのリポジトリ画面を開いていただくと、

![root_sample.png](https://qiita-image-store.s3.amazonaws.com/0/24050/7dbdfa10-97db-a641-d663-60c7769e4d69.png)

こんな感じでリンクが出てる。

クリックしていただくと、

![Commit_Graphs.png](https://qiita-image-store.s3.amazonaws.com/0/24050/b845fdb2-0e46-c9d5-ccb7-bc67ccc8da8e.png)

こんな感じ。

## 課題

冒頭に申し上げたとおり、コミット数が多かったり、ユニークユーザーが多かったりすると性能問題ありそう。

また、グラフ自体も横軸値が固定じゃないので、人によって違うし、コミット数にマージ数も入ってるので、GitHubと異なった表示になっていたりする。

まあ、そのうち、取り組もうと思ってます。

以上。
Procの使いどころとか

そういえば自分の中でだいたいパターン化してきるなと思ったので、メモがてら整理しつつ、初心者の人に参考になればと思いつつ、上級者の人には教えてほしい的なものを書いてみます。

Procの詳細については良記事がいくつかあるので省きます。
[[Ruby] ブロックとProcをちゃんと理解する](http://qiita.com/kidach1/items/15cfee9ec66804c3afd2)
[Procを制する者がRubyを制す（嘘）](http://melborne.github.io/2014/04/28/proc-is-the-path-to-understand-ruby/)

※リファレンスもいいですよね
[手続きオブジェクトの挙動の詳細](http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2flambda_proc.html)


#1. デザインパターンのテンプレートメソッドパターン
私の場合はRubyを勉強してからすぐに[Rubyによるデザインパターン](http://www.amazon.co.jp/Ruby%E3%81%AB%E3%82%88%E3%82%8B%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-Russ-Olsen/dp/4894712857)を買ったのですが、テンプレートメソッドパターンで使われてるのを見て、初めてProcが便利だなって感覚を持ちました。
詳細は本や他の記事に譲りますが、基本的な概念としては冗長性を削ってよりDRYに、ポータブル化して遅延評価する事で可読性の向上って感じだと思ってます。
というかProcを使う時って全部この概念に則っていると思います。
例えばRailsだと汎用的なaction（import_csv、download_csvみたいな）をライブラリ化しておいて、中の処理の微妙な差異は呼び出す側がProcを渡す事で吸収する、みたいな事は良くやりますよね。


#2. ループ内での分岐排除
下記のように毎回分岐が走るのは性能的によろしくないです

```rb
status = 0
values.each do |value|
  case status
  when 0
    # valueを使った処理
  when 1
    # valueを使った処理
  when 2
    # valueを使った処理
  end
end
```

なので以下のように毎回分岐を避けようとしますが、これだとコードが冗長になってしまうケースがたまにあります。eachとか3回も書いてますし。

```rb
case status
when 0
  values.each do |value|
    # valueを使った処理
  end
when 1
  values.each do |value|
    # valueを使った処理
  end
when 2
  values.each do |value|
    # valueを使った処理
  end
end
```

こういう時にProcを使うとすっきりします。
callback的な事ですよね。

```rb
case status
when 0
  block = -> (value) {
    # valueを使った処理
  }
when 1
  block = -> (value) {
    # valueを使った処理
  }
when 2
  block = -> (value) {
    # valueを使った処理
  }
end

values.each do |value|
  block.call(value)
end
```

もっとも、上記パターンを応用した下記のようなパターンを使うシチュエーションの方が多いように思います。

```rb
hash = {}
hash[0] = -> (value) { 処理 }
hash[1] = -> (value) { 処理 }
hash[2] = -> (value) { 処理 }

values.each do |value|
  hash[value.status].call(value)
end
```

ただし、このやり方には個人的に一つわかってない事があります。
それは、GCです。
ブロック内でメモリ消費量の多いオブジェクト生成をして、大量ループが走ったらどうなるんだろうってのが良くわかってないんですよね。
そういうシチュエーションに出くわした事がなく、調べずに来てしまっています（ひどい言い訳）。
GCがやたら非効率になるような事がなければいいのですが。


#3. いわゆるクロージャ
詳細はこの記事に託します。
http://www.atmarkit.co.jp/ait/articles/1409/29/news035_3.html



#4. かっこつけたい時
こういうの書いたらドヤっていいと思うんです。

```rb
[1, 2, 3].map(&:my_method)
```

# [関連]メソッド内でyieldを使うか.callを使うか
Procの使いどころは以上なんですけど、yieldの使いどころもパターン化してきてるのでついでに書いてみます。

yieldを使う時、それはEnumerator のインスタンスを返したいケースがある時です。
つまり、こんなスタイルになります。

```rb
def method
  if block_given?
    yield
  else
    to_enum
  end
end
```
既存ライブラリをモンキーパッチしたり、オレオレライブラリを作る時とか、基本的にビジネスロジックに超無関心な所で使う感じがあります。
逆にto_enumしないようなケースでは.callするようにしてます。

```rb
def method(proc)
  proc.call
end
```

理由は可読性です。
Rubyに慣れ親しんでないと前者の書き方は違和感しかないと思います。
後者はまだオブジェクトを扱っている感がありますし、少しProcについて勉強するだけでしっくりくるようになると思うわけです。
あと、後者の場合&をつけてブロックを受け取る方法もありますが、あまり好きじゃないんですよね。
ブロックを渡された事が明示的になるメリットはありますが、これも慣れ親しんでないと違和感が大きいですし、いろんな書き方があると混乱を招きそうで。
blockを受け取ってyieldするか、
procを受け取って.callするか
のどっちかに倒した方がいいと個人的には思ってます。
以上です。
GoogleスプレッドシートをAPI化してくれる話題の「Sheetsu」をRailsで使ってみた


## 経緯
自分が携わっている[転職サイトGreen](http://www.green-japan.com/)のユーザ側に答えてもらうアンケートを作ろうと思ってた矢先[Producthunt](http://www.producthunt.com/tech/sheetsu)でめちゃくちゃスコアが付いてたので、実際に使ってみた (まだ実際にリリースした訳ではないですw)

![sheets.png](https://qiita-image-store.s3.amazonaws.com/0/5365/fa4674cb-1b21-6160-c70e-9c5a52fa66a3.png)


## 実際に使ってみる

### 1. まずは登録

![まず.png](https://qiita-image-store.s3.amazonaws.com/0/5365/675e7d75-5794-5106-9733-20d18eeb65ac.png "まず.png")

![2.png](https://qiita-image-store.s3.amazonaws.com/0/5365/1a56a32b-cc41-b315-aa1e-f1436abbc8e4.png "2.png")

### 2. 実際にコンソールからcurlコマンドで叩いてみる

![スクリーンショット 2015-09-23 14.38.48.png](https://qiita-image-store.s3.amazonaws.com/0/5365/21315206-eb43-1f0e-cfe0-a83722b61d7a.png "スクリーンショット 2015-09-23 14.38.48.png")

ご丁寧にちゃんとコマンドも書いてくれているので、シートにカラムを追加してコマンドを実行すればok

### 3. 実際にサービスに組み込む

- フォームを作る
![rails.png](https://qiita-image-store.s3.amazonaws.com/0/5365/408b7b38-e629-bac0-7bc1-262ccb09c2d4.png "rails.png")


- パラメータをAPIを使ってpost

![post.png](https://qiita-image-store.s3.amazonaws.com/0/5365/6a3b623e-bf7e-c364-cc3c-085e739aee22.png)


- シートを確認する

post前
![スクリーンショット 2015-09-23 14.30.33.png](https://qiita-image-store.s3.amazonaws.com/0/5365/4aef0a4c-0732-fa13-cec0-8303e0c0f4d2.png "スクリーンショット 2015-09-23 14.30.33.png")

↓

post後
![after post.png](https://qiita-image-store.s3.amazonaws.com/0/5365/193e58f3-25fb-fb7e-c333-c88f6d515026.png "after post.png")


### おお！！！素晴らしい。ってかめちゃくちゃ簡単やで゜+.(・∀・)゜+.゜

## 注意点

- 今のところhttpsが使えなさそう・・・
- 何でマネタイズされるか不明w

## 総論

GoogleScriptと戦う必要が全くなく、ここまで手軽に使えると今後流行りそうな予感。
こういうデータってDBに突っ込むと容量が馬鹿にならないから、こういう風に外出しできるとサービスとしての保守性も高まっていいね！！
pecoを使ってrbenvのRubyのバージョンを切り替えやすくする

rbenvでglobalやlocalのRubyのバージョンを切り替える際に、いつも

```bash
$ rbenv versions
  system
* 2.0.0-p645 (set by /Users/username/.rbenv/version)
  2.1.4
  2.2.0
  2.2.2
```
みたいに確認してから

```bash
rbenv global 2.2.2
rbenv rehash
```
とかやっていました。
そんなに頻繁に切り替えはしないのですが、めんどくさかったので
[peco](https://github.com/peco/peco)を使って選択できるようにしてみました。
pecoについては他の投稿を見たほうが分かりやすいです。

以下コマンド

```bash
rbenv global "$(rbenv versions | egrep -o '[0-9].*[0-9]|system' | peco)";rbenv rehash;rbenv version;
```
最後の`rbenv version;`はどのバージョンを選択したかわかりやすくするために入れています。
無くても動作します。

長いのでaliasとして

```zsh:.zshrc
alias rvgp='rbenv global "$(rbenv versions | egrep -o "[0-9].*[0-9]|system" | peco)";rbenv rehash; rbenv version;'
```

のようにしておけば簡単に切り替えることができるようになります。
Chrome Developer Toolを開くとJavascript がブロックされる

以前はそんなことなかったの気がするのだが、いつのまにかlocalhostで動かしているサーバにアクセスして、developer toolを開くとJavasriptがブロックされるようになっていた。(知らないうちに設定をいじってしまってたのかもしれないが、記憶にない)

URL欄の右側に表示されるJava Script無効化のアイコンをクリックし、localhostでの実行を許可しても動いてくれない。

調べてみると以下の情報がヒットした。
http://stackoverflow.com/questions/13020530/chrome-blocking-javascript-on-localhost

どうやら、ChromeのJavascript許可設定と、Developer ToolのJavascript許可設定は別なようだ。Developer Toolを開いて、歯車のマークをクリックし、Disable Javascriptのチェックボックスをはずせば無事動いてくれた。
9/11/2015時点でのIonicはiOS9で少し画面遷移がおかしくなるためパッチを当てないといけない件

こんにちはimaiです．
9/11/2015時点で，iOS9でのIonicの挙動がおかしくなるのでパッチを当てなければいけないので，それについて少し書きます．
しばらくすれば、Ionicのバージョンが上がると思うので，それまでの対処方になるかと思います．

#問題
僕の環境(Ionic&iOS9)では，ページ遷移においてガクガクしてうまく動かない．

#こうしたい
iOS8まで動いていたようにiOS9でもヌルヌル動作させたい．

#手法
[公式ブログ](http://blog.ionic.io/ios-9-potential-breaking-change/)とやり方は同じ．
iOS9にてUIWebViewの仕様が変わったのが原因らしい(`window.location`や`$location`を使ってると起こるらしい)ので，それを解消させるパッチをあてる．

- index.htmlでパッチのスクリプトを読み込ませる
- angularにモジュールを読み込ませる

```index.html
<script src="http://code.ionicframework.com/patch/ios9-$browser-patch.js"></script>

```

```app.js
angular.module(appName, ["ionic", "ngIOS9UIWebViewPatch"]);
```

以上．

#余談
window.locationに関するバグと，ラジオボタンに関するバグと，セキュリティに関する変更点が挙げられているので困っている方は[公式ブログ](http://blog.ionic.io/preparing-for-ios-9/)へ．
RasPiに冷却ファンを付けて、CPU温度でコントルールする


RasPiに冷却ファンを付けると気になるのが「風切り音」と「ファンの消費電力」

「風切り音」は組込み用途やオフィスでは気にならないが、リビングで音楽やホームシアター用にvolumioやKodi(旧XBMC)を使っていると耳障り。
また組み込み用途なら太陽電池＋バッテリーや、音楽用途のピュアオーディオだと電源ラインのノイズ混入回避のためモバイルバッテリーをRPi電源に使っている方も多いと思います。
ところが、意外と電気を消費するのがケースの冷却ファン。

USB電流電圧計測器でRaspberry Pi 2本体をモニターするとRPi2でUSBマウス＋キーボード＋アンテナ式Wifiアダプターの構成で待機状態で約0.4A/5V、4Coreをほぼフルに使っても0.7A/5V程度なので2-3.5Wが一つの電源容量指標となると思います。（USBポートに500mA x 4のデバイスをつけたら2Aを超えますが..）

![11813239_953224471402457_5033201116225614881_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/88766/898e1f42-2a51-bc46-e2d4-f9a3f75e0f7c.jpeg)

通常のRaspberry Piケースについている冷却ファンは2-3Wで、本体の動作電源容量と同じぐらいです！、ファンを使うと冷えて目に見えてCPU温度が安定しますがRPi2実質2台分の電力を使うのがネックです。

そんなわけで、RPi2のCPUが指定温度以上になると冷却ファンに電流を流すプログラムを作りましたのでポストします。
トランジスターや小型のリレーをGPIOに結線してファンをつなぐと、CPUが指定温度以上になると冷却ファンが回転します。
cronで1分間隔で温度チェックしてして位置より下がっていたら回転を止めます。また、温度が高ければまた1分回転します。

なお、トランジスター（推奨トランジスター　東芝 2SC1815-GR アマゾンで10個入り200円です）の仕様である3.3-5V/150mA(7.5W)以下のファンを対象にしています。（リレー使えば、GPIOピン2から500mA程度はとれると思うのでUSB扇風機も回せると思います。）
でも、よくかんげえるとファンじなくてもいいですね　Raspberry Pi 2をざっくりとした温度センサー代わりに（外気温とCPU温度差を考慮する必要ありますが）。。例えばCPU温度が上がったらリレーを介して窓を開けるとか。


![tempFan.PNG](https://qiita-image-store.s3.amazonaws.com/0/88766/3cbe86b1-793d-8df0-616e-c52d1f9c7592.png)


外部スイッチによる時限式Shutdownプログラムも完成しています。
室外設置や農業用途など、一次側の５V電源が切れた場合にモバイルバッテリーで駆動しつつ、モバイルバッテリーの電源供給可能時間内に電源が復旧しなければShutdownを行うユーティリティープログラムです。
こちらはドキュメントをまとめ、2-3日中に以下に置きます。
http://www.newlife-newdesing.jp/support/setup-tool/

Raspberry Pi 2用 “Fan Controle Program(free)”

ソースコード、セットアップドキュメントも合わせて公開していますので、よろしければご利用ください。

NewLife NewDesing 瀬川![image1.JPG](https://qiita-image-store.s3.amazonaws.com/0/88766/b7ed03b0-5004-9237-5136-247109ab6fe3.jpeg)
![image2.JPG](https://qiita-image-store.s3.amazonaws.com/0/88766/b003e778-a10a-62dd-ed2e-c620f8246084.jpeg)
![image3.JPG](https://qiita-image-store.s3.amazonaws.com/0/88766/d003115e-e063-0db0-7a45-817f16cff593.jpeg)
unity > udp RS-232C 通信変換 > udpRs232c 

```txt:
実装: Unity 5.1.3-f1 on MacOS X 10.8.5
動作確認:
1. MacOS X 10.8.5
2. Windows 7pro 32bit
```

RS-232C通信とUDP通信を変換したい。

##code

[v0.6 @ github](https://github.com/yasokada/unity-150923-udpRs232c/releases/tag/v0.6)

メインの処理は以下で実装

- udpRs232cScript.cs

UDP通信をリレーするudpMonitorをベースにRS-232C送受信の処理を実装した。
9600bpsで通信をする。
処理のパフォーマンスはかなり悪いので、今後改善が必要。

##使い方

###接続例

- UDP側 (192.168.10.3)
- UDP-RS232C変換側 (192.168.10.8)

上記の２つを以下のように接続して試した。
(Assets/ConnectionDesign/ConnectionExample1.unity)

![ConnectionExample1_unity_-_150923-udpRs232c_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/026c7288-4bed-7c4c-f8c0-52ee91c6c6b6.jpeg)

COM5からCOM6へはクロス接続になるように、USBシリアルケーブル2本と自作のクロス接続治具を使用。
vmwareなど使えるのであれば、パイプを使えば同じことができる。

本来はCOM5から先は別のものがRS-232Cケーブルでつながっているという使用形態になるだろう。

### 使用例

192.168.10.8(Windows7)側でソフトを起動して以下で設定する。

1. Settingボタンを押して、以下のように設定する
2. OKボタンを押す
3. ターミナルソフトをCOM6で立ち上げる
4. ToggleCommにチェックを入れて、通信が始まる

![Win7ProRadXE4.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/5da872c1-e950-5263-56a8-eef088969819.jpeg)

以下の手順での使用になる (使い方にまだ制限がある)

1. 192.168.10.3からポート6000でUDP送信 : 
  - 送信文字列が192.168.10.8のTerminalに表示される
  - 返信ポート番号 (53041など)が保持される
2. 192.168.10.8のTerminalから送信
  - COM6->COM5->UDP(53041)経路で192.168.10.3に送信される
3. 2の処理を繰り返すことができる

1の手順をやり直すと、別の返信ポート番号(例: 48136)が割り当てられ、2の手順を繰り返すことができる。

上記の手順(1)の例として、192.168.10.3(Macのターミナル)にて以下でUDP通信を確立し、192.168.10.8のTerminalにhelloが表示される。

```
$ echo "hello" | nc -u 192.168.10.8 6000
```

手順(2)の例として、192.168.10.8のTerminalで入力した文字列が192.168.10.3(Mac)のターミナルに送信される。

```
$ echo "hello" | nc -u 192.168.10.8 6000
abcdefghijkl
```

##不備

1. 処理に余計なwaitがかかっている。
2. 使い方に制限ある。

## v0.6.1 (RS-232C入力改善)

RS-232Cからの入力時の送信を速くなるようにした。

[v0.6.1 @ github](https://github.com/yasokada/unity-150923-udpRs232c/releases/tag/v0.6.1)

##検討中

UDPのポート番号(6000と任意番号)の設定を反対にすれば、UDP接続を確立しっぱなしにしなくていい気がする。
そうした場合、192.168.10.8はUDP経路で来るものをポート番号関係なしですべてCOM5に送ることになる。何らかのフィルタが必要になるかもしれない。
Google App EngineでRequestsで取得したHTMLが文字化けするときに確認すること

#現象
Google App Engine(Python)のRequestsで取ってきたHTMLが文字化け。
ローカルのターミナル（GAEでない）では動いてるのに……。
検索して出てきた
Requestsのマニュアルにあるエンコーディングを変更してもだめ。
contetnsやjsonなど他の取得方法を試してもだめ、
とかなり詰まったので、解決した方法を書いておきます。

#まず確認すべきこと
**使っているRequestsのバージョンがGAEでサポートされてるのか**、ということです。

[Google App Engineのライブラリ追加方法](https://cloud.google.com/appengine/docs/python/tools/libraries27)に、
pipでインストールするように書いてありますが、そうすると最新バージョンがインストールされます。

ですが、最新版はGAEではサポートされていないようで
下記の回答を元に2.3バージョンをインストールしたら解決しました。

Requestsに限らずバージョンの明記がないライブラリは注意が必要と思います。

#参考
[Can Python Requests library be used on Google App Engine?](http://stackoverflow.com/questions/9604799/can-python-requests-library-be-used-on-google-app-engine)
Phoenix で rails console みたいなやつ

`iex -S mix phoenix.server`

rails console との違いとしては通常のサーバー実行と同様ポートを開くので、すでに別のプロセスで使用されていると失敗するので注意。

`iex -S`？
---------
`iex --help` によると以下とのこと。iex 上でスクリプトを実行しつつユーザー入力も受け付ける、という理解でいいのだろうか・・・？
>   -S "script"       Finds and executes the given script

参考
------
http://www.phoenixframework.org/docs/up-and-running
ES6の構文にブラウザが対応しているかチェックするスニペット。


開発者ツールのコンソールなどに流し込んで使う


```js

try {
	eval('(function() { yield 1 })()');
	console.log('%c%s', 'color:green', 'yield を使えます');
} 
catch (e) { console.log('%c%s', 'color:red', 'yield は使えません') }


try {
	eval('(function(a=10) { return a })()');
	console.log('%c%s', 'color:green', 'デフォルト引数 を使えます');
} 
catch (e) { console.log('%c%s', 'color:red', 'デフォルト引数 は使えません') }

try {
	eval('(function(...numbers) { return numbeers })()');
	console.log('%c%s', 'color:green', '可変引数 を使えます');
} 
catch (e) { console.log('%c%s', 'color:red', '可変引数 は使えません') }

try {
	eval('(()=>{ return null })();');
	console.log('%c%s', 'color:green', 'アローファンクション を使えます');
} 
catch (e) { console.log('%c%s', 'color:red', 'アローファンクション は使えません') }

try {
	eval('(function() { let foo = 1 })()');
	console.log('%c%s', 'color:green', 'let を使えます');
} 
catch (e) { console.log('%c%s', 'color:red', 'let は使えません') }

try {
	eval('(function*() { const foo = 1 })()');
	console.log('%c%s', 'color:green', 'const を使えます');
} 
catch (e) { console.log('%c%s', 'color:red', 'const は使えません') }

try {
	eval('(function() { var myMap = new Map(); })()');
	console.log('%c%s', 'color:green', 'Map を使えます');
} 
catch (e) { console.log('%c%s', 'color:red', 'Map は使えません') }

```

実行例(Chrome)

![kyoju000004.JPG](https://qiita-image-store.s3.amazonaws.com/0/2832/6288fcba-dc25-0177-6020-bdd2b2728380.jpeg)
UbuntuにSolrをさくっとインストールしたい男たち

## Java
```
$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ apt-get install oracle-java8-installer
```

## Solr
```
$ cd ~
$ wget http://ftp.riken.jp/net/apache/lucene/solr/5.3.0/solr-5.3.0.tgz
$ tar xzf solr-5.3.0.tgz solr-5.3.0/bin/install_solr_service.sh --strip-components=2
$ sudo bash ./install_solr_service.sh solr-5.3.0.tgz
$ sudo service solr status
```
勉強会BDD編＜１＞ RSpec/Capybara - スタート


## 関連記事

* 勉強会BDD＜１＞RSpecとCapybaraースタート
* [勉強会BDD＜２＞RSpecとCapybaraーモデル](http://qiita.com/park-jh/items/07a9367f0bd94abc528b)
* [勉強会BDD＜３＞RSpecとCapybaraーユーザー認証](http://qiita.com/park-jh/items/ed64de86ad9aaa6a3635)
* [勉強会BDD＜４＞RSpecとCapybaraーポイントシステム](http://qiita.com/park-jh/items/7726820d950f03f8b061)

## BDD（振舞駆動開発：behavior driven development）とは

* プログラム開発手法の一種で、テスト駆動開発（TDD）から派生した物である。（wikipediaより）
* テスト駆動開発でのテストに加えてこれから作成しようとするプログラムに期待される「仕様」を自然言語で併記しながらテストコードを記述する。
* BDDで書いたスペックの実行結果を見てみよう。
* この勉強会で作成するcustomerモデルのスペックである。

```sh
$ bin/rspec spec/models/customer_spec.rb

Customer バリデーション
  妥当なオブジェクト
  family_nameは空であってはならない
  family_nameは40文字以内
  family_nameに含まれる半角カナは全角カナに交換して受け入れる
  given_nameは空であってはならない
  given_nameは40文字以内
  given_nameに含まれる半角カナは全角カナに交換して受け入れる
  family_name_kanaは空であってはならない
  family_name_kanaは40文字以内
  family_name_kanaに含まれる半角カナは全角カナに交換して受け入れる
  given_name_kanaは空であってはならない
  given_name_kanaは40文字以内
  given_name_kanaに含まれる半角カナは全角カナに交換して受け入れる
  family_nameは漢字、ひらがな、カタカナを含んでもよい
  family_nameは漢字、ひらがな、カタカナ以外の文字を含まない
  given_nameは漢字、ひらがな、カタカナを含んでもよい
  given_nameは漢字、ひらがな、カタカナ以外の文字を含まない
  family_name_kanaはカタカナを含んでも良い
  family_name_kanaはカタカナ以外の文字を含まない
  family_name_kanaに含まれるひらがなはカタカナに交換して受け入れる
  given_name_kanaはカタカナを含んでも良い
  given_name_kanaはカタカナ以外の文字を含まない
  given_name_kanaに含まれるひらがなはカタカナに交換して受け入れる

Customer password=
  生成されたpassword_digestは60文字
  空文字を与えるとpassword_digestはnil

Customer#points
  関連付けられたRewardのpointsを合計して返す

Finished in 0.20008 seconds (files took 4.99 seconds to load)
26 examples, 0 failures
```

* テストでありながら、モデルの仕様（スペック）を自然言語（日本語）で分かりやすく表している。

## 実習環境

* vagrant上で実習を行う。
* 実習環境の構築については「[10分で終わるRailsの開発環境構築](http://qiita.com/park-jh/items/e6db96b75596fc0c61df)」を参考。

## アプリケーションの生成

* Railsアプリケーションを作成する。
* Railsアプリケーションを作成する際には、テンプレートを使う。
* テンプレートを使うと、いろんな下準備作業を自動化することができる。
* 自作したテンプレートをgithubに公開したので、ご参考にしていただければと思う。
* https://github.com/devtopia/rails_template/blob/master/install.rb
* データベースとしてmysql（mariadb）を使用する。
* postgresqlを使用したい場合は下記の記事を参考。
  - [yumでpostgresqlを設置する。](http://qiita.com/park-jh/items/eb212ed78de188fb2bf6)
  - [homebrewでpostgresqlを設置する。](http://qiita.com/park-jh/items/9596d1e1b46d7f9b645a)

```sh
rails new oiax -T -B -d mysql -m https://raw.githubusercontent.com/devtopia/rails_template/master/install.rb
```

## トップページの生成

```sh
# run server
bin/rails g controller top index
bin/rails s -b 0.0.0.0 -p <ポート番号> # ゲストで起動

# config/routes.rb
root to: 'top#index'

# confirm url
http://192.168.33.10:<ポート番号> # ホストで確認 
```

## 最初のテスト

```ruby
# create features directory
mkdir spec/features

# spec/features/top_page_spec.rb
require 'rails_helper'

describe 'トップページ' do
  example '挨拶文を表示' do
    visit root_path
    expect(page).to have_css('p', text: 'Hello World!')
  end
end

# , + c
```

* 「, + c」はvimで実行したいスペックファイルを開いている状態で、コンマとcキーを同時に押すという意味である。
* 「[10分で終わるRailsの開発環境構築](http://qiita.com/park-jh/items/e6db96b75596fc0c61df)」を参考にして実習環境を構築したら、上のvim設定を使える。

## 参考

* http://www.oiax.jp/rails/rspec_capybara_primer/rspec_capybara_introduction.html
* http://www.oiax.jp/rails/rspec_capybara_primer/rspec_capybara_the_first_step.html
簡易ETLツールとしてのQlikView

qiitaにQlikViewのタグが無かったため、本稿ではQlikViewについて概念的に簡単に説明しつつ、さらっとETLツールとしての利用法を提唱してみる実験を行っています。
# QlikViewとは
## 概要
- データを分析するためのツールです。
- 処理がかなり高速です。
- 操作感は、Excelでピボットテーブルやピボットグラフを作ったり、Accessでテーブルを結合したりするのと近いものがあります。
- 分析にあたって、RDBに近いデータの持ち方をします。

## メリットをもう少し細かく
- 分析に特化しているため、分析に関する操作感はExcel/Accessよりも上です。具体的には、
  - Excelのピボットテーブルで言う「スライシング」や「フィルタリング」の部分が簡単です。
  - テーブル同士の結合をきちんと設計しておくと、あるテーブルにフィルタをかけたとき、直接・間接的に結合しているすべてのテーブルに対してフィルタがかかります。
  - フィルタをかけるときは、例えばテーブルならテーブルの項目をクリックするだけでOKです。
- データの取得元としては、次のようなものに対応しています。したがって、特別なETLツールのようなものを導入しなくても、QlikViewで直接データを見ることができます。
  - エクセルやcsvのファイル
  - 各種RDB
  - html、xml等のファイル

ここで述べているメリットはExcelやAccessとの比較がベースになっていますが、QlikViewはデータ分析に関する様々な集計や統計操作等が、高速で簡潔にできるツールです。この機能性を用いて、今まで気づいていないような「事実」を発見する(＝Data Discovery)というのがQlikViewの主要な用途の一つであると思います。
ちなみに、QlikViewにはPersonal Editionという、いわゆる無料版があります。若干の制約はありますが、個人使用に関してはフル機能を利用できます。

## QlikViewのデータの持ち方について
- 各ファイルやDBから取り込んだデータは、テーブル形式で格納されます。
- テーブル同士は、同じ名称の列をキーとして結合します。同じ名称の列がある場合は、必ずキーとして結合されます。これがRDBと少し異なる部分です。
- 各ファイルからのデータの取り込みは、SQLに似た構文のスクリプトをベースに行いますが、GUIを使えば直接スクリプトを書く必要はありません。
- 一度データを読み込むと、読み込んだデータはQlikViewのファイルの中に保持され続けます。QlikViewのデータの読み込みは、分析に必要なデータセットを一式読み込んで、複数のテーブルからなる小さなDBを作り出すイメージです。
- この「小さなDB」は、同じ名前の列はすべて結合した、いわば「データの塊」のようなものです。
- 従来のデータ抽出・集計作業における「クエリ」は、QlikViewでは「必要なデータを塊の中から選び取る」ことに対応します。QlikViewの世界では、データは常にすべて読み込まれた状態であり、クエリとは次のような対応があります。
  - 読み込まれたデータの中から必要な値を指定する → 条件抽出に対応
  - 計算に必要な項目をオブジェクトの軸・数式として指定する → 集計に対応  

QlikViewに関しては、特許である連想技術と超正規化の観点から製品特徴が説明されることが多いですが、概念的に整理すると、今述べたような説明の仕方もできます。
※連想技術、超正規化については様々なところで紹介されているので、検索してみてください。

古くからあるBIツールでは、クエリをしばしばテキストベースで都度作成していました。一方のQlikViewでは、クエリの作成がそのまま
**オブジェクトの作成＋画面のクリック（値の選択）**
に置き換わっています。
そういう考えで改めて見てみると、処理の高速化に限らず「欲しいデータのクエリ」自体が劇的に高速に行えるようになった、という部分がQlikViewの最も優れた部分（のひとつ）ではないかと思います。
Excelを振り返ってみると、たとえ一つのテーブルに対してであっても、ピボットテーブルは非常に有効な手段で、多くの人が使用しています。ピボットテーブルは、特別な訓練を積んだプログラマでなくても、ある程度Excelが使える人であれば問題なく利用できます。
これが、複数のテーブルを結合したデータの塊に対しても柔軟に行える、というところがひとつの革新ではないか、というところです。特殊なプログラムスキルを持たない、業務部門のユーザが簡易ETLを構築できたりもする訳です。

さて、この長い前置きを受けて、簡易ETLツールとしてQlikViewを使用する「ススメ」を書いてみます。つまり、QlikViewを用いて複数のデータソースからデータを読み込み、結合して別の形で出力する、という方法です。

# QlikViewでETL（概要）
処理の段階は次のようになります。

- データ読込(Load Scriptで実行)
- データ加工(オブジェクトで実行)
- データ出力(マクロで実行)

## データ読込
GUIにしたがって、ぽんぽんとデータソースを指定し、ロードスクリプトを作ります。

## データ加工
読み込んだデータを利用して、ぽんぽんとピボットテーブルやテーブル等のオブジェクトを作ります。

## データ出力
オブジェクトのデータを、そのままCSV等の形式で出力します。
QlikViewのエクスポート機能ではExcel2007のxlsx形式では出力ができない為、xlsまたはcsvとして出力します。csv出力する場合のイメージ…

```vbnet:macro.vbs
Sub ExportToFile
set sObject = ActiveDocument.GetSheetObject("TB01")
sObject.Export "C:\path\to\your\file.csv", ", "
End Sub
```

この出力を、データ読込の直後に行わせることも可能です。
さらに、タスクスケジューラと合わせて個人のPCで毎日CSVを出力させる、というようなことも可能です。
これで、あなたのPCも明日からcsv生産工場として機能する訳ですね。

# QlikViewでETL（詳細）
そのうち書くかもしれません。
Convert Signed Int to Unsigned Int


CoreLocation関連で結構困ったのでまとめておく。
といっても内容としては大した話ではない。

## How to convert NSNumber to Uint16

```swift
let hoge: Int16 = 78
let num = NSNumber(short: hoge)
let uint_num = UInt16(bitPattern: num.shortValue)
```

結論だけ言うと、上記のようにすれば`NSNumber`を`UInt16`に変換できる。

## 背景

`CLBeaconRegion`の`init()`において、引数`major`、`minor`の型`CLBeaconMajorValue`、`CLBeaconMinorValue`基底型は`UInt16`である。

> CLBeaconRegion Initializer
init(proximityUUID proximityUUID: NSUUID,
             major major: CLBeaconMajorValue,
             minor minor: CLBeaconMinorValue,
        identifier identifier: String)
        
しかし、`CLBeaconRegion`、`CLBeacon`のメンバー変数`major`、`minor`を取り出してみると、その型は`NSNumber?`である。

> Declaration
var major: NSNumber { get }

例えば`locationManager(_:didRangeBeacons:inRegion:)`なんかで受け取った`inRegion`から`major`や`minor`なんかを取り出して、改めて`CLBeaconRegion`としてなんかしようと思った時に、大変苦労した覚えがある。
`cast`しようとしてみたり、辞書型を使って解決しようと試みたが失敗に終わり、上記のような変換に至った。

一般的な情報科学の常識に則って考えると、上記はとても簡潔でわかりやすい変換なのだが、そういうのをすぽーんと忘れて小手先だけで言語を扱うと痛い目に遭う。
そういうお話。
Postfix.adminでのメールエイリアス管理支援ツールをExcel-VBAで作ってみました。

# 作成経緯
メールサーバにpostfixを使用しており、そのアカウント管理にpostfix.adminを使用しています。

社員数が十数人、エイリアスが数個レベルの時は手動でも良かったのですが、社員数が50人、100人を超え、エイリアスも30個、70個と増えてきて、毎日のように頻繁にエイリアスの更新依頼が来るようになると、とても手で作業していられません。

そこで、postfix.adminのエイリアス画面にペタっとコピペできる形でメールアドレスのリストを自動で生成できるExcel-VBAを考えました。

# 動作環境
Microsoft製の有償純正Excel
オープンオフィス系や、MSの無料プレビュー版を使うと、VBAマクロが壊れてしまう現象を確認しています。

# 管理シートのフォーマット
## 登録内容管理シート
シート名は後述のマクロで見つけられる様に「mailalias」とします。
A列3行目から下にズラーっと氏名
B列3行目から下にズラーっと所属名
C列3行目から下にズラーっとメールアドレス
D列2行目から右にズラーっとエイリアス名
D列3行目から下と右にズラーっと、プルダウンメニュー形式で「O」を選べるように入力規則を設定。

上記の様なシートを作成し、更新はエイリアスを更新したくなった各プロジェクトのリーダーに「O」をポチポチ入れて貰ったり、追加したい場合はD列以降2行目にエイリアス名を入れて貰って、「O」をポチポチ付けてもらうだけです。
「○」じゃなくて「O」にしているのは、前者が英語版Macで使えなくてマクロが動かなかったからです。
私のインフラチーム内に外国籍メンバーが数人居るので、必要な措置でした。

そしてこのシートには後述するマクロを実行するボタンをどこかに付けておきます。
インフラ担当者はそのボタンを押すだけです。

## エイリアスリストのシート
シート名は後述のマクロから見つけられる様に「LIST」とします。
B列1行目から右にズラ～っとエイリアス名が入ります。
B列2行目から下にズラ～っとエイリアスメンバーのメルアドが入ります。
C列以降も同様です。

ボタンを押すと上記フォーマットでリストが出来上がるので、それをコピペしてpostfix.adminのエイリアス管理画面にコピペするだけです。

# コード
```vba:createList.vba
Sub createList()

  Dim linenumber As Integer
  Dim colnumber As Integer
  Dim reslinenumber As Integer
  Dim rescolnumber As Integer
  Dim chkmark As String
  
  linenumber = 3
  colnumber = 4
  reslinenumber = 2
  rescolnumber = 2
  chkmark = "O"
  i = 1
  j = 2
  
  ' 一旦クリア
  Worksheets("LIST").Select
  Do Until Worksheets("LIST").Cells(i, j).Value = ""
    Do Until Worksheets("LIST").Cells(i, j).Value = ""
      Worksheets("LIST").Cells(i, j).Value = ""
      i = i + 1
    Loop
    i = 1
    j = j + 1
  Loop
    
 ' 列のループ
 Worksheets("mailalias").Select
  Do Until Cells(2, colnumber).Value = ""
    ' 行のループ
    Do Until Cells(linenumber, 3).Value = ""
      If Cells(linenumber, colnumber).Value = "O" Then
        If (Worksheets("LIST").Cells(1, rescolnumber).Value = "") Then
          Worksheets("LIST").Cells(1, rescolnumber) = Cells(2, colnumber)
        End If
        Worksheets("LIST").Cells(reslinenumber, rescolnumber) = Cells(linenumber, 3)
        reslinenumber = reslinenumber + 1
      End If
      linenumber = linenumber + 1
    Loop
    linenumber = 3
    reslinenumber = 2
    colnumber = colnumber + 1
    rescolnumber = rescolnumber + 1
  Loop
  Worksheets("LIST").Select

End Sub
```

# まとめ
この管理シートを作るだけで、かなりエイリアス管理業務が楽になり、且つ正確になりました。

mailaliasシートは、利用者にやさしくマルをつけるだけ。
LISTシートはインフラーにやさしくコピーするだけ。

このマクロがpostfix.adminのエイリアス管理をされている方のお役に立てれば幸いです。
C# .NET Frameworkでバックグラウンドワーカーに自由度を持たせる

Visual Studioには「Background Worker」は、.NET2.0からある、いわゆる「コンポーネント」に入っているくらいの定番で、使いやすく、かんたんに非同期処理を実装するために役立つクラスです。

Microsoftの公式サイトの「[方法 : バックグラウンド ワーカーを使用する](https://msdn.microsoft.com/ja-jp/library/cc221403(v=vs.95).aspx)」に書かれた内容通りにコードを書けば、簡単に実装できます。

ですが、ちょっと複雑なことをやろうとすると、途端に自由度がなく、やりにくくなります。

引数を渡したりとか、DoWorkイベントハンドラに、別のクラスのメソッドを仕込みたい場合などです。

## DoWorkイベントハンドラから引数を渡すには？

たとえば、引数を渡したいことがあると思います。どうすれば良いでしょうか？
これには以下のようなアプローチがあります。

## RunWorkerAsync()に引数を仕込む。
僕も知らなかったのですが、バックグラウンドワーカーを開始するメソッドに値を渡すことができます。

```csharp
int value = 123;
backgroundWorker1.RunWorkerAsync(value); 
```

```csharp
private void worker_DoWork(object sender, DoWorkEventArgs e) 
{
  int value = (int) e.Argument;
  //なんらかの処理
  
  double result = 0.1 * value;
  e.Result = result;
}
```

ということは、なんでも渡せるということになります。オブジェクトなど、ジェネリッククラスも引数にできます。

```csharp
List<object> arguments = new List<object>();
                    arguments.Add(argument 1);
                    arguments.Add(argument 1);
                    arguments.Add(argument n);
backgroundWorker1.RunWorkerAsync(arguments);
```

```csharp
private void worker_DoWork(object sender, DoWorkEventArgs e) {
  List<object> genericlist = e.Argument as List<object>;
}
```

この辺りのサンプルは、[StackOverFlow](http://stackoverflow.com/questions/4807152/sending-arguments-to-background-worker)で見ることができます。

## メソッドごと渡す
では、ちょっとした引数ではなく、既にあるメソッドや、そこに含まれる引数も一緒に渡すにはどうすれば良いのでしょうか？

DoWorkイベントハンドラの記述に合わせず、そのままメソッドをクロージャ（ラムダ式）で渡す方法です。

```csharp
backgroundWorker1.DoWork += (s, e) => MyWorkMethod(userName, targetNumber);
```

この正体は、以下のデリゲートメソッドでも表現できます。

```csharp
backgroundWorker1.DoWork += delegate(object sender, DoWorkEventArgs e)
{
　　MyWorkMethod(userName, targetNumber);
};
```

これも同じく[StackOverFlow](http://stackoverflow.com/questions/1145780/alternative-to-backgroundworker-that-accepts-more-than-one-argument)にあった例です。


## キャンセル処理はどうすれば良いの？
ただ、メソッドを渡す方法は分かっても、キャンセル処理を、渡したメソッド内で、どうやって行えば良いのでしょうか。

すでに書いたメソッドやクラスですと、BackgoundWorkerのために、あまり内容をグチャグチャと書き換えたりしたくはないものです。

ここは僕もずいぶんとハマって、なかなかネットでも見つからなかったのですが、DoWorkイベントのObject型の「Sender」と、DoWorkEventArgs型の「e」を、そのままメソッドに渡してやることで実現できました。

```csharp
backgroundWorker1.DoWork += (s, e) => MyWorkMethod(s, e, userName, targetNumber);										
```

上記の例ですと、以下の方が分かりやすいでしょうか。

```csharp
backgroundWorker1.DoWork += delegate(object sender, DoWorkEventArgs e)
{
　　MyWorkMethod(sender, e, userName, targetNumber);
};
```

メソッド内ではこのように書きます。

```csharp
public bool MyWorkMethod(object sender, DoWorkEventArgs e, string userName, int targetNumber)
{
  BackgroundWorker worker = sender as BackgroundWorker;

  //なんらかの処理…

  //ユーザーによるキャンセルなど
  if ((worker.CancellationPending == true))
  {
    e.Cancel = true;
    return(false);
  }
}
```

至極、当たり前で、単純なやり方ですが、調べて始めてから、気づくまでに時間がかかったので、一応ここにまとめて、シェアしておきます。
Rubyのaws-sdkでDynamoDBにバイナリデータ(StringIO)を登録するとエラーが発生


## 概要

Rubyのaws-sdkでDynamoDBにバイナリデータ(StringIO)を登録するとエラーが発生する。

## 再現

```ruby
require 'aws-sdk'
client = Aws::DynamoDB::Client.new(region: 'ap-northeast-1')

item = {
  'id' => 'bar',
  'foo' => StringIO.new('baz')
}
client.put_item(table_name: 'foobar', item: item)
```

```
NoMethodError: undefined method `read' for "baz":String
from .../vendor/bundler/ruby/2.1.0/gems/aws-sdk-core-2.0.47/lib/aws-sdk-core/json/builder.rb:54:in `format'
```

## 原因

aws-sdkのバージョン2.0.47以前にDynamoDBのバイナリデータ登録に関する不具合が存在する。

## 対策

2.0.48で修正されているのでバージョンアップすることで解決。

リリースノート抜粋:

> Issue - Aws::DynamoDB - Resolve an issue where IO objects were not properly marshaled, leading to runtime errors.

## 参考

該当のIssue:

* [DynamoDB: Unable to put binary data · Issue #831 · aws/aws-sdk-ruby](https://github.com/aws/aws-sdk-ruby/issues/831)
Node.jsが必要なSublimeTextのプラグインで、Node.jsのパスが変わってしまったときの対処法


Node.jsの管理を、公式サイトのインストーラーからnodebrewに変更したときに、Node.jsのパスが変わってしまったため、SublimeTextのプラグイン「CSScomb」と「Autoprefixer」が使えなくなってしまいました。

パスを通し直せば解決する問題ですが、各プラグインで設定方法が異なったので、メモしておきます。

注：こちらは、以下の環境での設定です。
+ Mac OSX 10.10.5
+ Sublime Text3 Build 3083
 

##Node.jsのパスを調べる

ターミナルを開き、

```
$ which node
```
と入力し実行すると、次の行に現在のNode.jsのパスが表示されます。
私の環境では、以下のような結果が表示されました。

```
/Users/ユーザー名/.nodebrew/current/bin/node
```
Node.jsの正しいパスが判明したので、こちらを各プラグインに反映させていきます。

##CSScombの場合

SublimeTextを起動し、

**Preferences → Package Settings → CSScomb → Settings-default**

を開きます。

4行目の

```
"node-path" : ":/usr/local/bin",
```

が、Node.jsのパスですので、こちらを先ほど取得した正しいパスに変更して保存すればOKです。

**Settings-default**を変更したくなければ、

**Preferences → Package Settings → CSScomb → Settings-User**

に追加しても良いでしょう。

##Autoprefixerの場合
「CSScomb」と同じようにSettings-defaultに記入してみましたが、「Autoprefixer」ではパスが通らなかったので、こちらはファイル本体を修正しました。

```
/Users/ユーザ名/Library/Application Support/Sublime Text 3/Packages/Autoprefixer/node_bridge.py
```

上記ファイルをテキストエディタで開き、14行目にある、

```
env['PATH'] += ':/usr/local/bin'
```

こちらを取得したパスに書き換え、保存します。

SublimeTextを再起動させると、パスが反映されます。
hmtとhabtmの違いについて調べようとした

# htm
has_many through

# habtm 
has_and_belongs_to_many

# 参考
http://naotooncajon.hatenablog.com/entry/2013/07/23/002404
http://tech.a-listers.jp/2012/01/31/the-evil-unnecessary-has_and_belongs_to_many/
http://blog.flatironschool.com/why-you-dont-need-has-and-belongs-to-many/

# 結論
調べようとしたが、habtmの評判がなんかどうもぽい。
htm一択って感じぽい。
できることは一緒だけで、habtm実現方法が魔法っぽいってことなのか。
EC-CUBE 用の.gitignore

# 自分用.gitignore
EC-CUBE を新規でインストールすると、割と空のディレクトリが多いのでそのあたりがちょっと面倒だったりしますね。

あとキャッシュ的なのが大量に増えるので、共有したくないものとかありますね。
/data/Smarty/templates_c/*　とか……

/ のあとに*で、中のファイルだけを対象にしちゃってます。

ありがちな不要ファイルも含めてしまっています。

案件固有の追加ディレクトリなんかがあると書き足していく感じです。

```git:.gitignore
*_backup_*
.LCK
*~
.DS_Store
Thumbs.db
ehthumbs.db
Desktop.ini
*.lnk
_notes
dwsync.xml
*.swp
*.log
sitemap.xml
sitemap.xml.gz
/readme.html
/license.txt
/html/.htaccess
/data/.htaccess
/data/config/config.php
/data/cache/*
/data/config/*
/data/download/temp/*
/data/downloads/api/*
/data/downloads/backup/*
/data/downloads/module/*
/data/downloads/plugin/*
/data/downloads/tmp/plugin_install/*
/data/downloads/tmp/plugin_update/*
/data/downloads/update/*
/data/logs/*
/data/Smarty/config/*
/data/Smarty/templates_c/*
/data/upload/csv/*
/html/install/temp/*
/html/plugin/*
/html/upload/graph_image/*
/html/upload/mobile_image/*
/html/upload/temp_image/*
/html/upload/temp_plugin/*
/html/upload/temp_template/*
/html/user_data/include/preview/*
/html/user_data/packages/default/js/*
/html/user_data/templates/preview/*
!.gitignore
!.gitkeep
```
QlikViewのリロード関係小ネタ

小ネタ集です。リロード関係です。

# Binary Load
qvwファイルの内容を丸丸読み込むことができる。先頭に書く必要あり。

`Binary [c:\path\to\your\file.qvw];`

末尾にqvw等は不要。
Binary Loadした後、さらに他のテーブルを読み込んだり、ResidentしたりDropしたりもできる。

# ロードをトリガーとする処理について
QMCでリロードしても、OnLoadのトリガーは動かない。qv.exeを直接立ち上げて読み込ませる必要がある。
逆に、パーソナルエディションでもタスクスケジューラ等によってコマンド実行すれば、リロードをさせることが可能。

`"C:\Program Files\QlikView\qv.exe" /r file.qvw `

※ちなみにQlik Senseでこれをする方法は知らない。たぶんできない。(2015/9/23現在)
サーバAPIが叩ける環境であれば、サーバAPIでリロードさせることができる。

# 重くて開けないファイルを開く方法
nodataにして読み込む。

`"C:\Program Files\QlikView\qv.exe" /nodata file.qvw`

ファイルを保存したページに、メモリを消費するオブジェクトが存在している場合は、別のシートに移動してから、自分自身をBinary Loadすることで助かる可能性がある。また、必要に応じてDropするのも一つの手段。

# パーソナルエディションで消えるデータ
パーソナルエディションで他のユーザが作成したqvwを開くと、データが消える。このときは、ファイルを開く前にバックアップをとっておき、自分自身をBinary Loadすればよい。（実はバックアップを取っておかなくてもよいが、誤って保存してしまうことを避けるため、バックアップは事前にとっておく。）
シンボリックリンクの絶対パス→相対パス変換する symlinks

# シンボリックリンクの絶対パス→相対パス変換

シンボリックリンクの宛先は、以下のように絶対パスと相対パスの両方ともできる。絶対パスから相対パスにしたい。

絶対パスの場合：

    % cd /tmp
    % ln -s /tmp/foobarbaz hogehugapiyo
    % ls -l hogehugapiyo
    lrwxrwxrwx. 1 cat-in-136 cat-in-136 14 Sep 23 10:38 hogehugapiyo -> /tmp/foobarbaz

相対パスの場合（一から作る場合）：

    % ln -s foobarbaz hogehugapiyo
    % ls -l hogehugapiyo
    lrwxrwxrwx. 1 cat-in-136 cat-in-136 9 Sep 23 10:32 hogehugapiyo -> foobarbaz

絶対パス→相対パスの変換をするには、symlinks なるユーティリティを使えばできる。下記の通り、パッケージが提供されている：

 * Ubuntu の場合：[symlinks](http://packages.ubuntu.com/ja/symlinks)
 * Fedora の場合：[symlinks](https://admin.fedoraproject.org/pkgdb/package/symlinks/)

まず `-t` オプションで変更前をプレビューできる。引数の `.` はカレントディレクトリ以下のシンボリックリンクを対象にすることを示している。

    % symlinks -t .
    absolute: /tmp/hogehugapiyo -> /tmp/foobarbaz
    changed:  /tmp/hogehugapiyo -> foobarbaz

実際に変更するには、`-t` のかわりに `-c` を使う。

    % symlinks -c .
    absolute: /tmp/hogehugapiyo -> /tmp/foobarbaz
    changed:  /tmp/hogehugapiyo -> foobarbaz
    % ls -l hogehugapiyo
    lrwxrwxrwx. 1 cat-in-136 cat-in-136 9 Sep 23 10:47 hogehugapiyo -> foobarbaz

なお、`symlinks` は、`-r` で指定ディレクトリ以下を再帰で変換してくれる。これを使えば、ディレクトリが入り組んだところで相対パスでシンボリックリンク貼りたい場合、一旦絶対パスでシンボリックリンク貼ってから `symlinks` で変換すれば間違いも少なくなるだろう。

    % cd /tmp
    % mkdir -p foo/bar/baz
    % ln -s /tmp/foo foo/bar/baz/foo
    % symlinks -cr foo
    absolute: /tmp/foo/bar/baz/foo -> /tmp/foo
    changed:  /tmp/foo/bar/baz/foo -> ../../../foo

注意点。

 * 変換対象がディレクトリに限るので、あるディレクトリの特定のシンボリックリンクのみ変換ということができない
 * `-t` でテスト実行したときの表示と `-c` で実際に実行した時とで表示されるログメッセージに差がない。
 * `symlinks` 単体では絶対パス→相対パスに特化していて、相対パス→絶対パスへの変換はできない。
    
いろいろと微妙なところがあるけれどまぁいいユーティリティだと思います。
【Android】FacebookでSNS共有するためにFacebook sdkを導入！！（アカウント登録に失敗編）

# 背景
AndroidにてFacebook共有を行う際に、クエリにメッセージを設定し、Facebookのアプリスキーマでアプリ起動を行うなんて簡単な方法を探したのですが、該当の方法を探し出す事が出来ず、FacebookSDK導入を行いました。
そのため今回は、その導入方法を記載していきます。

# つまったところ
Facebookアカウント作成に失敗したら、その都度ブラウザのCookieを削除する。

# 環境
* Android Studio 1.3.2
* Facebook sdk v4

# Step1 ｰ Facebookアカウント作成とDeveloper登録
下記から
https://developers.facebook.com/quickstarts/?platform=android

アカウントの新規作成を行う場合、**使用ブランザのCookieを削除しないと、アカウント作成に失敗する**可能性があります。アカウント作成に失敗した際には、その都度、皆様が使用されているブラウザの設定画面より、キャッシュ・Cookieを削除してから作業を行ってください。
**私自身、上記手順を行わず、何度も、、、何度も、、、Facebookアカウント作成に失敗しました**

### Facebook Developer の Register Now
![スクリーンショット 2015-09-23 9.35.26.png](https://qiita-image-store.s3.amazonaws.com/0/61953/a9b6cc6f-db45-7190-f90a-454f8266686f.png)

### プライバシーポリシーにも同意する
![スクリーンショット 2015-09-23 9.41.31.png](https://qiita-image-store.s3.amazonaws.com/0/61953/f68915e0-ae48-2e0e-f230-7b1f809bd5d5.png)

### ここら辺も指示通りに
![スクリーンショット 2015-09-23 9.47.41.png](https://qiita-image-store.s3.amazonaws.com/0/61953/aa8ee0f2-9d67-963f-fd16-c1855812044b.png)


どんどん進めましょう！
### 「Android」を選択する
![スクリーンショット 2015-09-23 9.49.32.png](https://qiita-image-store.s3.amazonaws.com/0/61953/27d23ad8-69a0-4eeb-8868-34a22df23d0e.png)

### 導入先のアプリの名称を入力し、Facebook App IDを作成する（任意の名称）
* その後カテゴリを聞かれるので。導入するアプリに該当するものを選択する
![スクリーンショット 2015-09-23 10.03.02.png](https://qiita-image-store.s3.amazonaws.com/0/61953/28caf4ca-ebb3-b16d-7e6e-c0c30a0261a6.png)

### SDK導入手順の画面に遷移しました!
一旦ここまでです！
この後、必要な作業のみ記載します！
![スクリーンショット 2015-09-23 10.29.49.png](https://qiita-image-store.s3.amazonaws.com/0/61953/e5f0b38a-2169-28f7-87de-69f9030155bf.png)

## Step2　 - アプリへのSdk導入手順
次の手順 投稿でき次第、リンク貼ります。