OmniAICreator/Qiita-1.07M huggingface dataset:
Elm0.18で簡単なの作ったのでThe Elm Architectureをざっくり説明する

Elm Advent Calendar 5日目の記事です

## この記事
タイトル通り
日本語で解説読みたい、緩い感じの説明読みたい人用
型とコードはある程度読めるのを想定

## 作ったもの
[random-color-palette](https://miyamoen.github.io/random-color-palette/)
### 説明
- Rollボタンで色が変わります
- 色タイルを押すと固定され変わらなくなります
- 固定された色タイルは左上に集まっていきます
- 右下にあるのは0.18の新機能のdebuggerです

### なんで作ったの？
手を動かして何かを作る練習用に簡単なものを作りたかった
ついでに0.18きたので0.18で

## The Elm Architecture
TEAと呼ばれたりする
フレームワークレベルの概念で、現在はElmのcoreに組み込まれている
Elmのアプリはこのアーキテクチャを使って書かれる
[TEAのドキュメント](https://guide.elm-lang.org/architecture/)

### Signalはなくなった
0.17でElmからSignalはなくなりました。
TEAは前、Signalを使って実装されていたが、今は使われていません。
個人的には前よりすっきりしてわかりやすくなったと思います。

### 一枚岩のState
Elmのアプリケーションは1つのStateからできています。

```Model.elm
type alias Fixed = Bool

type alias Model =
  { colors : List (Color, Fixed)
  }
```

アプリケーション全体で管理する状態は、このModelだけです
レコードにModelという別名をつけています
ColorとBoolのタプルのリストだけの簡単なModelですね

### updateでModelの変更を定義
このModelを自分で新しい状態に更新することはありません。
代わりに更新関数作って渡します

```.elm
type Msg
  = New (List Color)
  | Roll
  | ToggleFixed Int
  | NoOp


update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
  case msg of
    Roll ->
      ..

    New colors ->
      ...

    ToggleFixed index ->
      ...

    NoOp ->
      ...
```

Msgとupdateを定義します.
Msgは前はActionと定義されていました。決まりはないので好きな名前で大丈夫です。
アプリの処理系にメッセージを投げて更新してもらうイメージで書いてます。
Msgと今のModelを投げて新しいModelを返す感じですね

状態は変化する値なので[model0 model1 model2 model3...]みたいな感じで表現できるぜってことです

### viewで表示

```.elm
view : Model -> Html Msg
view model =
  div
    [ style
      [ "display" => "flex"
      , "flex-wrap" => "wrap"
      , "width" => "500px"
      ]
    ]
    <| rollButton :: viewColors model.colors
```

Modelを引数にしてHtmlを返します
viewは関数ってやつですね。現在のModelが渡されます

デザインをいい感じにできると嬉しいんですけど、とりあえずflexboxを使って整列させたりしてます

#### Html Msgってなんだ
Html MsgはMsgを送ることのあるHtmlの型って意味です
どこにいつ送るかっていうと、clickイベントのときなどにMsgを処理系に送ります
つまり送られたMsgはupdateで処理します

SignalがあったときはMailBoxがあったりでよくわからなかったりしたんですけど、シンプルになったかなって思います

### 全体

```Colors.elm
main : Program Never Model Msg
main = program
  { init = init 50
  , update = update 
  , view = view 
  , subscriptions = subscriptions
  }
```

今まで説明したものをprogram関数に渡してmainにしたらアプリが動きます
initとsubscriptionsは説明していませんが。

## まとめ・雑感
Signalのときは、mailBoxを自分でハンドリングしていたので、理解できるまでつらい感じがありました
今は全部、処理系？にぶん投げているイメージでやっているので、自分でやらなくていいので楽です

バージョンが上がって前よりエラーメッセージがわかりやすくなっていてElmほんとすごいってなるのでおすすめです
前はtype aliasした型は元の型で表示されていたんですが、alias後の型で表示されるようになったりして（なってるよね？）わかりやすいです。

みんなもElmやろう

Advent Calendar、金曜も担当してます
D3.jsでバストサイズを円グラフで表す「おっぱいチャート」を作成

#version
d3.jsのversionは**4.2.3**です。

#完成図
![image](https://qiita-image-store.s3.amazonaws.com/0/26043/8c269022-8c88-3c1c-0014-0a2790ce4062.png)

##code
http://jsbin.com/memehidaxi/1/edit?js,output

#企画
##可視化の目的
バストサイズの人数割合を瞬時に知るため。

##用意するデータ
バストサイズごとの人数。

今回はデータはダミーのものを使います。 :joy: 

```js
const data = [
  {"id": 1, "number": 6, "name": "Aカップ"},
  {"id": 2, "number": 9, "name": "Bカップ"},
  {"id": 3, "number": 15, "name": "Cカップ"},
  {"id": 4, "number": 30, "name": "Dカップ"},
  {"id": 5, "number": 23, "name": "Eカップ"},
  {"id": 6, "number": 13, "name": "Fカップ以上"},
]
```

#可視化方法
##グラフの種類
割合を知るために円グラフを用います。

```js
const arc = d3.arc()
    .innerRadius(0)
    .outerRadius(radius)

const pie = d3.pie()
.value((d) => d.number)
(data)
```

[arc d3-shape/README.md at master · d3/d3-shape](https://github.com/d3/d3-shape/blob/master/README.md#arc)
[pie d3-shape/README.md at master · d3/d3-shape](https://github.com/d3/d3-shape/blob/master/README.md#pie)


##色付けの定義
バストサイズがすぐにわかるように、色付けを行います。バストサイズが大きくなるにつれて、薄い緑から濃い緑(~~薄い赤から濃い赤~~ 赤は刺激的な色なので緑に変更しました)に色付けします。バストサイズのnumberではなく各バストサイズに対して色をつけることにしました。

###code
```js
const color = d3.scaleQuantize()
.domain([1, 6])
.range(["#b4f49b", "#9BDB82", "#81C168", "#68A84F", "#4E8E35", "#35751C"])
```
scaleQuantizeを使えば、離散的な値に対して、色を設定することができます。ここではデータにidを設定し、id一つ一つに色を振りました。
[d3/d3-scale: Encodings that map abstract data to visual representation.](https://github.com/d3/d3-scale#scaleQuantize)

##バストサイズ名を表示

###ラベルの位置

ラベルも円上に配置するので、arcを使います。

```js
const labelArc = d3.arc()
    .outerRadius(radius)
    .innerRadius(radius - 80)
```

centroidを使えば、半径の半分の円周上の位置を知ることができます。そこからdxで微調整します。もっと細かく調整できると思いますが、今回は止めておきます。

```js
group.append("text")
.attr("transform", (d) => { return "translate(" + labelArc.centroid(d) + ")"; })
.attr("dx", "-1.5em")
.text((d) => d.data.name);
```
[d3-shape/README.md at master · d3/d3-shape](https://github.com/d3/d3-shape/blob/master/README.md#arc_centroid)
イメージバックアップとベアメタルで力ずくのリカバリ環境を作ってみた！w

こんにちは。
Bluemix(SoftLayer) Advent Calendar 2016 5日目ですね。
カレンダー書く、yamaju_chigeです。よろしくお願いします。


## お題の概要
クラウド、クラウド言いますけど。
私は業務系の仮想化基盤に関するお仕事がほとんどです。
Windowsの世界ばっかり。
そんな中でも、お客さんからは「クラウドどうなん？」って話はありますよ。
ええ。あります。

で、クラウドでリカバリ環境作りたいとかそういうお話は、ホント多いんですよ。でもね。考えれば考える程、さらに考えなきゃいけないことが出て来るんです(´･ω･`) 

そんな感じなので、とりあえず「力づくで、とりあえず動く環境作ってみよう！」と思い立ってやってみたことを書いてみます。

## モヤモヤしてたことの整理

考えれば考える程、と書いたけど具体的にはどういうこと？っていうのを書き出してみます。

・クラウド側のネットワークどうなる？
・利用者からは、どう接続させる？
・L2で延伸できないと、色々しんどくない？
　・プロミスキャス許可されてないからブリッジ構成できなくない？
　・IP変わったらDNSの手動変更？動的変更？
　・切り替わり時間/登録時間のギャップは？
・そもそもActiveDirectory問題ない？
・普段使わないサイトにいくら掛けられる？
・ハイパーバイザにとらわれない仕組みは？
・vSphere DataProtection/Site Recoveryとかじゃなくて汎用的なもので、汎用的な仕組みでやるには？

などなど…
結果的にはL2でクラウド上に延伸したネットワークを作成できれば、割りとスッキリとしそうだなと思った次第です。

図解すると、こんな感じですかね。
L2延伸できないなら、L3ルーティングで決着する。でもその場合はIPでアクセスしてるとクライアント側に影響もあるし。DNSの仕組みだったら動的な変更も必要だし。


![image](https://qiita-image-store.s3.amazonaws.com/0/101027/e09d5472-ea42-ac16-3fd4-af3c8afb3a6c.png)

## 強引な結論
これって…ベアメタルじゃないと解決できないんじゃ？

と、強引な結論を出したところで。
具体的な例を書いていきましょう。

## 実装で使うツール
・イメージバックアップソフト
　私はStorageCraftのShadowProtectが好きです。扱いやすいし。スタンドアロンでOKだし。

・ベアメタルクラウド環境
　言わずもがな。SoftLayerですね。最近ではBluemix Infrastructureって言わないと怒られちゃうんでしたっけ^^;
　なぜSoftLayerの名前を捨てたのか…個人的には残念でなりません。

・ソフトウェアルータ
　L2ブリッジを実現するためには、ベアメタルサーバ上に仮想ルータを稼働させるしかないかなって思ったので。
　今回はPacketixを使いましたが、VyOSなどでもいいと思います。

## 実装モデル
こんな感じで実装しました。雑な図ですみません^^;

![image](https://qiita-image-store.s3.amazonaws.com/0/101027/10e71816-77f0-2e44-2dc6-8e4073a6a588.png)

簡単に解説すると、オンプレとベアメタルサーバ上の仮想としてL2ブリッジを行うための仮想ルータを稼働させます。
ベアメタルサーバ側では、仮想環境内に閉じたネットワークを作成します。このネットワークは物理NICとはどことも接続されていないものとなります。
（図中ではClosedネットワークと記載しています）
ソフトウェアルータで直接L2ブリッジさせているため、SoftLayerのVPNサービスは利用しません。
今回はvSphereを使った例としましたが、Hyper-Vでも同様の構成は可能なのではないでしょうか。

## リカバリ発動のイメージ

![image](https://qiita-image-store.s3.amazonaws.com/0/101027/fc142603-8e5b-19ee-3891-5dff9796a616.png)


オンプレミス側サーバが利用不可能な状態となった場合は、クラウド上のリカバリ環境でファイナライズを実施します。
これはバックアップソフト（ShadowProtect）による継続的な仮想ディスクに対する追記を終了し、利用可能な状態とする操作です。
ファイナライズが完了したら、仮想ゲストとして起動できるようになっています。

![image](https://qiita-image-store.s3.amazonaws.com/0/101027/34bc69e8-54f2-39c2-fe38-d0bbd48429f5.png)

ね。力づくでしょ。

では。素敵なクリスマスを！
Go 言語で同一ファイル中のベンチマーク同士を比較するツールを作った

# はじめに

* Go 言語のベンチマーク結果を比較するツールとして`benchcmp`があります
* 使い方としては比較したいベンチマーク結果をファイルに書き出しておいて`benchcmp <Before file> <After file>`のように実行します
* 使われ方としてベンチマーク取って改善してどれだけ速くなったかを比較したいとかを想定しているのだと思いますが、同一のテストファイル中のベンチマーク同士を比較するのが面倒なので[bbcmp](https://github.com/nirasan/bbcmp)というツールを作ってみました。

# `bbcmp`でできること

* 同一ファイル中のベンチマーク同士の比較
* サブベンチマークを使えば一度に複数のベンチマークの比較ができます
* 標準入力とファイルから読み込みができます

# Install

```
go get golang.org/x/tools/benchmark/parse
go get github.com/nirasan/bbcmp
go install github.com/nirasan/bbcmp
```

# How to use

## Read from stdin

```
go test -run=NONE -bench . | bbcmp <BEFORE_BENCH_REGEX> <AFTER_BENCH_REGEX>
```

## Read from file

```
go test -run=NONE -bench . > result.txt
bbcmp -f result.txt <BEFORE_BENCH_REGEX> <AFTER_BENCH_REGEX>
```

# Example

## Compare normal benchmarks

### sample1_test.go

```go
package sample

import (
	"testing"
)

func BenchmarkSample1Double1(b *testing.B) {
	f := func(n int) int { return n * 2}
	for i := 0; i < b.N; i++  {
		f(i)
	}
}

func BenchmarkSample1Double2(b *testing.B) {
	f := func(n int) int { return n << 1}
	for i := 0; i < b.N; i++  {
		f(i)
	}
}
```

### sample1.txt

```
BenchmarkSample1Double1-4   	1000000000	         2.29 ns/op
BenchmarkSample1Double2-4   	1000000000	         2.26 ns/op
PASS
ok  	github.com/nirasan/bbcmp/sample	5.016s
```

### Run

```
> bbcmp -f sample1.txt Double1 Double2
benchmark                     old ns/op     new ns/op     delta
BenchmarkSample1Double1-4     2.29          2.26          -1.31%
```

## Compare sub benchmarks

### sample2_test.go

```go
package sample

import "testing"

func BenchmarkSample2DoubleBefore(b *testing.B) {
	b.Run("Double1", func(b *testing.B){
		f := func(n int) int { return n * 2 }
		for i := 0; i < b.N; i++ {
			f(i)
		}
	})
	b.Run("Double2", func(b *testing.B){
		f := func(n int) int { return n << 1 }
		for i := 0; i < b.N; i++ {
			f(i)
		}
	})
}

func BenchmarkSample2DoubleAfter(b *testing.B) {
	b.Run("Double1", func(b *testing.B){
		f := func(n int) int { return 2 * n }
		for i := 0; i < b.N; i++ {
			f(i)
		}
	})
	b.Run("Double2", func(b *testing.B){
		f := func(n int) int { return n + n }
		for i := 0; i < b.N; i++ {
			f(i)
		}
	})
}
```

### sample2.txt

```
BenchmarkSample2DoubleBefore/Double1-4         	1000000000	         2.28 ns/op
BenchmarkSample2DoubleBefore/Double2-4         	1000000000	         2.26 ns/op
BenchmarkSample2DoubleAfter/Double1-4          	1000000000	         2.29 ns/op
BenchmarkSample2DoubleAfter/Double2-4          	1000000000	         2.26 ns/op
PASS
ok  	github.com/nirasan/bbcmp/sample	10.040s
```

### Run

```
> bbcmp -f sample2.txt Before After
benchmark                                  old ns/op     new ns/op     delta
BenchmarkSample2DoubleBefore/Double1-4     2.28          2.29          +0.44%
BenchmarkSample2DoubleBefore/Double2-4     2.26          2.26          +0.00%
```
javascriptのWebInspecterでdevtoolsのスニペット機能にアクセスする

Chromeのスニペットコードにアクセスする方法
Webインスペクタが開きドックから離した状態でインスペクタを開くとインスペクタに対するデバッグコンソールが開く。
そこで以下のスクリプトでスニペットにアクセスできる。

```js

InspectorFrontendHost.getPreferences(function(prefs) {
    console.log(JSON.parse(prefs.scriptSnippets));
});
```
Spring Bootの組み込みTomcatのSession Persistenceを有効にする

通常Tomcatは再起動すると、セッションに保持していた情報は再起動後も引き継がれる(これはTomcatのデフォルト設定)。仕組みとしては、Tomcat停止時にセッション情報を一時ファイルに書き出し、Tomcat起動時にそのファイルを読み込みセッション情報をメモリに展開している。これを回避したい場合は、$CATALINA_HOME/conf/context.xmlに`<Manager pathname="" />`を追加することで回避できる。

```context.xml
<Context>

   ～省略～

　 // 以下を追加 
   <Manager pathname="" />
</Context>
```

ただ、Spring Boot(Ver1.3以上)の組み込みTomcatは再起動すると、セッションに保持していた情報は再起動後は引き継がれない(通常のTomcatとは逆の挙動となる)。じゃあ、$CATALINA_HOME/conf/context.xmlを修正しよう、、と思ってもそもそもファイルが存在しない(組み込みTomcatなので)。そんな時は、application.properties(application.yml)に以下の設定値を追加することで解決することができる。

```application.properties
server.session.persistent=true
```

Spring Bootの組み込みTomcatのSession Persistenceはデフォルトで無効(false)なので、trueにしてやることでセッション永続化が可能となる。

# 注意点

以下のようにSpring Sessionへの依存があると、TomcatのHttpSessionではなくSpring Sessionが使われるため、application.propertiesでserver.session.persistentの設定をしても効かない。

```pom.xml
<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
```
Opal製のスライドアプリ「Hyaslide」

この記事は[Opal Advent Calendar 2016](http://qiita.com/advent-calendar/2016/opal)の4日目の投稿として書いています。

私はOpalでReact-likeなVirtual DOM実装の[Hyalite](https://github.com/youchan/hyalite)を作っている(このアドベントカレンダーの他の記事を読んでいただけば何度か出てきます)のですが、このgemについてRubyKaigiなどで発表するためにスライドアプリをHyaliteで作ったらインパクトがあるかなと思い[Hyaslide](https://github.com/youchan/hyaslide)というスライドアプリをつくりました。
名前はHyaliteでHyaliteのために作ったのでHyaslideという感じで極めて適当に決められました。
自画自賛すると、これが思いのほか良くできたので自分がどこかで発表する機会があれば必ずこのスライドアプリを使っています。

Hyaslideの登場は、[RubyKaigi 2015](http://rubykaigi.org/2015/presentations/youchan)のときでそのときの様子はこの[まとめ](http://togetter.com/li/912112)で伺い知ることができます。(そのときのスライドは[こちら](http://slides.youchan.org/RubyKaigi2015)です)

RubyKaigi 2015以来いくつかの改良が重ねられていまに至ています。
主なものは以下のとおりです。

* gem化して誰でもセットアップして使えるようにしました。
* 一つのスライドアプリで複数のスライドをホストすることができるようになりました。
* スクリプトをつけることができ、スクリプトのページからスライドをコントロールすることができるようになりました。

私の発表の機会があるたびにバージョンアップしている感じですが、自分としては大分つかえるツールになってきた感触がありますので、他のひとにもつかってもらえるとよいなと思っています。

この記事ではHyaslideのつかい方などを解説しようかと思ったのですが、そこはOpalのアドベントカレンダーなのでやはり内部的なことを書くことにします。
(つかいかたなどはREADMEや私の[スライド](https://github.com/youchan/slides)を参考にしてもらうのと、また別の機会に記事を書こうかと思います。)

とはいえしくみを説明するのに最低限の使用法の知識を

* Hyaslide gemはスライドアプリというより、スライドアプリを生成するジェネレータとして働きます。
    - 例: `$ hyaslide new slide-app`
* スライドは`slide.md`というファイルから生成されます。

Hyaslideの動作のしくみについて説明します。

スライドアプリの起動時に`slide.md`を読みこんで`pages.rb`というスライドを表示するプログラムを生成します。
この`pages.rb`がOpalによってJavaScriptに変換されてWebブラウザ上で動きます。
サンプルのスライドで確認してみましょう。

```ruby
class Hyaslide::Page0 < Hyaslide::PageBase
def header
  h1(nil, "Title")
end

def content
  [].tap do |children|
      children << p({className:"author"}, "Your Name")
  end
end
end

class Hyaslide::Page1 < Hyaslide::PageBase
def content
  [].tap do |children|
      children << h4(nil, "Press 's' then starting the race of rabbit and turtle.")
  end
end
end

class Hyaslide::Page2 < Hyaslide::PageBase
def header
  h2(nil, "Slide")
end

def content
  [].tap do |children|
      children << ul(nil,
                    li(nil, "Listing"),
                    li(nil, "...")
      )
  end
end
end

Hyaslide.page_count = 3
Hyaslide.title = "Title"
```

インデントがくずれていますが自動生成なのでご容赦を。

ページ毎に`Hyaslide::PageBase`を継承する`Hyaslide::Page#{n}`クラスが定義されています。
`header`メソッドや`content`メソッドがHyaliteの要素(列)を返すようになっています。


```ruby
module Hyaslide
  class PageBase
    include Hyalite::Component

    def render
      section({className: "page #{page_class_name}", style: style}, header, content)
    end
  end
end
```

`Hyaslide::PageBaseg`クラスはHyaliteのコンポーネントで`render`のなかで、`header`と`content`を呼んでいます。

スライド本体のプログラムは、`hyaslide`コマンドで生成された、`app/slide.rb`になります。説明すると長くなりそうなのでソースを読んでください。

あとはスライドを生成する部分はOpalではないのでやめておきましょう。
`config.ru`と`server.rb`は私がいつもSinatraでOpalを動かすときのパターンで作られているのでてっとり早くOpalのアプリを作りたいひとはどうぞ参考にしてください。

## 最後に

終りのほうが適当になってしまったのは、今、台湾から日本に帰る帰途で書いているからです。
日付もとっくに変ってしまったので早々にパブリッシュします。
GitLab自体の開発のされ方

[GitLab Advent Calendar 2016](http://qiita.com/advent-calendar/2016/gitlab) 5日目の記事です。

本日は、GitLab自体の開発がどのように行われているのか紹介します。
GitLabは無償版のCommunity Edition (以下CE) と有償版のEnterprise Edition (以下EE) があります。GitLab CEはOSSのため、自由に自身のサーバーにインストールして使用したり、ソースを修正してカスタマイズすることが出来きます。GitLab EEはプロプライエタリソフトウェアであり、使用するにはライセンスを購入する必要がありますが、ソース自体は公開されています。

GitLab CEとGitLab EEはともに[GitLab.com](https://gitlab.com)のプロジェクトとして公開されていて、不具合の報告や機能追加のリクエストもそちらで受け付けています。
以前は[GitHub](https://github.com/gitlabhq/gitlabhq)のリポジトリで開発されていましたが、GitLabが法人化され自前のホスティングサービスの提供を開始したことにより、GitLabの開発もそちらで行われるようになりました。

- [GitLab CEのプロジェクトページ](https://gitlab.com/gitlab-org/gitlab-ce)
- [GitLab EEのプロジェクトページ](https://gitlab.com/gitlab-org/gitlab-ee)

現在、GitLabの開発は同名の会社であるGitLab社により行われています。
GitLab社はフルリモートの会社でチームメンバーは世界中に散らばっています。ちなみに、チームメンバーはサイトで公開されていて、現在は33カ国に144名の社員がいるようです。2015年の会社設立時は8名ではじめたらしいので、まさしく急成長中という感じです。

- [GitLabのチーム](https://about.gitlab.com/team/)

前述の通り、GitLabの開発はGitLab社により行われていますが、OSSコミュニティーからの貢献もとても大切にしています。今年の5月にはGitLabのコントリビューターが累計で1,000人を超えたことを記念して、希望者全員に対してステッカーが郵送で配布されました。私も微力ながらGitLabにコントリビュートしていたので、はるばるサンフランシスコよりステッカーが送られてきました。

- [Celebrating 1000 Contributors](https://about.gitlab.com/2016/05/24/1k-contributors/)

最近もGitLabにマージリクエスト(GitHubで言うプルリクエスト)を3つ送ったのですが、数日以内にGitLab社の社員の方がレビューをしてくれて無事にマージされました。マージリクエスト上で社員の方とやり取りした印象ですが、コミュニティーからの貢献に対してGitLab社としてかなりのリソースを割いていると感じました。

- [久しぶりにGitLabにコントリビュートしました](http://hiroponz.hateblo.jp/entry/2016/11/23/215145)

最後に、GitLabはRuby on Railsで作成されているため、Railsエンジニアであれば比較的簡単にコードを理解し修正することができます。また、前述の通りGitLabはコミュニティーからの貢献をとても大切にしているので、OSSに貢献してみたいと思っているけど、どこから手を付けたら分からないというRailsエンジニアの方は、まずはGitLabにマージリクエストを送ることに挑戦してみてはいかがでしょうか？
技術英語 > If a class doesn't seem to be [carrying its weight], 

@ Code Complete (No. 18217 / 36077)

> If a class doesn't seem to be **<font color=red>carrying its weight</font>**, ask if you should assign all of that class's responsibilities to other classes and eliminate the class altogether.

日本語訳は「相応の役割を果たさない」となっている。

http://idioms.thefreedictionary.com/carry+weight
> carry (a lot of) weight (with someone or something)
> to be very influential with someone or some group of people. 

THE FREE DICTIONARYでは上記のような意味（大変な影響を持つ）となっている。

「影響がなくなる」、から転じて「役割を果たさない」と訳したのだろう。
秋月パワーグリッド基板の極性に関する覚書


秋月パワーグリッド基板という便利なやつがあるのですが、普通のスルーホールのユニバーサル基板にVccとGNDの配線が引き回してあるという便利なものです。
各部品に配線しないといけないジャンパの数がVccとGNDの本数分だけ減るのでかなり便利です。

オレンジと白の2本が引き回してあるのですが、どっちがVccでどっちがGNDか迷います。これが黒とオレンジとかだったら迷わないのですが・・・
自分で勝手に決めて使えばいいんですが、後からどっちだったか忘れたら困るので、何かに倣おうとしたところ、秋月の通販サイトにちゃんと表記ありました。

![AE-B3_C3_app.png](https://qiita-image-store.s3.amazonaws.com/0/26038/09648fa5-164c-e049-abad-2974ec20f21f.png "AE-B3_C3_app.png")

http://akizukidenshi.com/catalog/g/gP-07149/ より引用

オレンジがVcc, 白がGNDのようです。
Ubuntu環境のSublime text 3 でTab補完の無効化

#####Tabキーがなにかと邪魔なので,オートコンプリートの選択にはenterを使い,TabキーにはTabの挿入だけをしてもらいます.

+ ~.config/sublime-text-3/Packages/ 以下に新しいフォルダ Default を作成

+ sublime text 3 を起動し Preferences -> Key Bindings を選択しデフォルトのキーマップファイルの内容をすべてコピーする

+ 新しいファイルを開きコピーした内容をすべて貼り付け, Default (Linux).sublime-keymap の名前でDefaultフォルダに保存する

+ 新しく作成した Default (Linux).sublime-keymap 以下の部分をコメントアウトもしくは削除する

```c:
	{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
	{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
		"context":
		[
			{ "key": "setting.tab_completion", "operator": "equal", "operand": true },
			{ "key": "preceding_text", "operator": "not_regex_match", "operand": ".*\\b[0-9]+$", "match_all": true },
		]
	},
	{ "keys": ["tab"], "command": "replace_completion_with_next_completion", "context":
		[
			{ "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
			{ "key": "setting.tab_completion", "operator": "equal", "operand": true }
		]
	},
```


+ このままでは通常のタブ入力ができないので以下の部分を ["shift+tab"] から ["tab"] に変更する

```c:
	{ "keys": ["shift+tab"], "command": "insert", "args": {"characters": "\t"} },
```

完了です.
/etc/shadowでロックされていないのにログインできないときは、pam_tally2を使ってみる

はじめに
----------------------------------------
以前SIer時代の業務で、/etc/shadowではロックされていないのにログインできないユーザーに遭遇してハマったときの記録です。

参考：[pam_tally2 で一定回数ログインに失敗したアカウントをロックする - うまいぼうぶろぐ](http://hogem.hatenablog.com/entry/20121107/1352297631)

事象
----------------------------------------
sshでログインしようとすると、Permission Deniedになって弾かれる。

```sh-session
# ssh user@000.000.000.000
user@000.000.000.000's password:
Permission denied, please try again.
```

アカウントロックを疑い、`/etc/shadow`を確認するも、下記のような`!!`にはなっておらず、ロックされていないように見える。

```text
# grep user /etc/shadow
user:!!:16098:0:99999:7::: # ロックされている場合(!!になる)
user::16098:0:99999:7::: # ロックされていない場合
```

原因
----------------------------------------

`/etc/shadow`以外にも、ロックをかける方法はあるらしく、`pam_tally2`によってロックされていた模様。

下記のコマンドで確認すると、`Failures`がものすごい大きい数字になっていた。

```sh-sesshon
$ pam_tally2 -u <user>
$ pam_tally2 --user=<user> # またはこっちでもOK
Login           Failures  Latest    failure     From
<user>               N    00/00/00  00:00:00    000.000.000.000
```

解除方法
----------------------------------------

解除には下記のコマンドを実行する。これで無事解決した。

```sh-session
$ pam_tally2 -u <user> --reset
$ pam_tally2 --user=<user> --reset # こっちでもOK
```
2016-11-25 リリースの Raspbian Jessie Lite でsshログインできるようにする


2016-11-25 リリースの Raspbian Jessie Lite のイメージをダウンロードして、いつも通りddでイメージ書き込んで起動してもsshでログインできません。
今回のリリースから、デフォルトでsshが無効化されているようです。
リリースノートにしっかりと書いてありましたがなかなか気づかずにはまりました。

[リリースノート](http://downloads.raspberrypi.org/raspbian/release_notes.txt)にある通り、イメージを書き込んだSDカードの`boot`パーティションに`ssh`という名前で空のファイルを作成してから起動すれば、sshが有効化されます。
（もちろんこの作業はMacからでもWindowsからでもできます）

こういう修正が行われた背景として、大量の野良Piが踏み台になってたりするのかなぁ・・・
塗って繋ぐ

もう知らないToT
水に流そうToT

以下、http://ange1.hateblo.jp/entry/2016/12/05/022642 の写経です

```hs:tyama_henae10.hs
#!/usr/bin/env runghc
-- http://mtsmfm.github.io/2016/12/03/doukaku-e10.html
-- http://qiita.com/mtsmfm/items/8a78b895910a89e3012d

import System.IO (isEOF,hFlush,stdout)
rec x o l ('X':xs) = rec (x+1) (o+l) 0 xs
rec x o l ('O':xs) = rec x o (l+1) xs
rec x o l [] = ((2^l)-1)*4*2^o + case x of
	0 -> 0
	1 -> 5+(if o==0 then 0 else 5^o)
	otherwise -> 1+4^(x-1)*5^o

main = do
	eof <- isEOF
	if not eof then do
		getLine >>= print . rec 0 0 0
		hFlush stdout
		main
	else return ()
```
DOP Impact Dataを使ってみる。

![スクリーンショット 2015-06-18 午前5.44.16.png](https://qiita-image-store.s3.amazonaws.com/0/51857/ba9676c5-1e8b-86bb-7c2e-cfcc3e844281.png)

# Impactsデータを可視化してみる。

Impactsデータを可視化するために便利なノードが用意されている。
RBD Visualization DOPを使用する。
Impactsのチェックを入れると、衝突時にNormalのラインが表示される。

![スクリーンショット 2015-06-18 午前5.14.11.png](https://qiita-image-store.s3.amazonaws.com/0/51857/a76425a5-54e9-3b34-c68c-0854fdf6d3aa.png)

![スクリーンショット 2015-06-18 午前5.14.17.png](https://qiita-image-store.s3.amazonaws.com/0/51857/51254555-07d4-72a1-9527-5fda172837af.png)



# Impactsデータを拾って利用してみる。

このImpacsデータを利用するためのノードにはDOP Import Record DOPを使ったりImpact Analysis DOPを使ったりあるが、これをGeometryとしてとり扱うためにあらかじめ用意されている物がある。SOP Solver DOPを作成して、その中を見てみよう。
ちなみに、後で使うためにこんな感じにつなげておく。

![スクリーンショット 2015-06-18 午前5.21.12.png](https://qiita-image-store.s3.amazonaws.com/0/51857/f26ffa82-0346-ae9b-b558-d6d64cdc9a04.png)

SOP Solverの中をみてみると、すでにSOP Solver DOPの中にはDOP Import SOP、DOP Import Records SOP、Object Merge SOPが作成されており、さらに、すぐに使える様、DOPで扱ったDataのインポート情報やImpacts Dataの設定等が入力されてある。

![スクリーンショット 2015-06-18 午前5.26.38.png](https://qiita-image-store.s3.amazonaws.com/0/51857/0ef3a394-ec8e-2a1c-10bb-a5a11d5610c1.png)


次に以下の様なネットワークを構築して、Magnet SOPのtransform値に若干の調整を加えてみると……
![スクリーンショット 2015-06-18 午前5.38.50.png](https://qiita-image-store.s3.amazonaws.com/0/51857/c2e6dbf9-e921-b340-3899-8baf6717b3a2.png)

![スクリーンショット 2015-06-18 午前5.40.41.png](https://qiita-image-store.s3.amazonaws.com/0/51857/93882e00-8546-4db6-60a9-21012f15957a.png)


毎フレGeoemtryがImpactsの情報を得て更新されていくので、こんな感じに潰れていく情報が取れる。

![スクリーンショット 2015-06-18 午前5.44.16.png](https://qiita-image-store.s3.amazonaws.com/0/51857/ba9676c5-1e8b-86bb-7c2e-cfcc3e844281.png)

とりあえず、今回はここまで。
Impactsの中にはnormal情報もあるので、これを利用Powerなどの調整を経てPointに影響させるといった手もあるのだけれど、そちらはまた今度。(多分このノートに更新を加える)



# 資料

- [RBD Visualization dynamics node](https://www.sidefx.com/docs/houdini14.0/nodes/dop/rbdvisualization)
- [DOP Import Records surface node](http://www.sidefx.com/docs/houdini14.0/nodes/sop/dopimportrecords)
- [How to use impact data of RBD objects](http://forums.odforce.net/topic/18203-how-to-use-impact-data-of-rbd-objects/)

- [Using DOP Impact Data - Taka's VFX Note](http://takavfx-note.tumblr.com/post/126011932707/using-dop-impact-data)
Asset 紹介  fairygui.

http://www.fairygui.com/en/

![IMG_6457.PNG](https://qiita-image-store.s3.amazonaws.com/0/150885/970419ff-9b3a-7f42-7c14-59d4abc5c153.png)

新しいguiシステム

長所
Gui保守が楽に見えます。
必要なコントロールらすでに実装されています。
オープンソースプロジェクトです。 (https://github.com/fairygui/FairyGUI-unity)
Gui edior(scaleform見えます)

短所
まだ文書の不足
[Houdini Tool] Cache Dpendency

[![Screenshot from 2015-09-20 23-24-50.png](https://qiita-image-store.s3.amazonaws.com/0/51857/b1238822-a454-43de-6cd9-c869e994d6b1.png)](https://vine.co/v/etgXVIPA7Yz)


*Houdiniで、自動でキャッシュディペンデンシーを組んでくれるツール。*

### Process

1. キャッシュを書き出したいノードを選択。
2. このツールを実行。


### Behaviour

- 選択したノードの下にFileCache SOPを作成。
- いくつかのパラメーターがFileCache SOPからリファレンスされたGeometry ROPノードが /out パスにディペンデンシーが組まれた状態で作成される。
- 既にFileCache SOPを作成している場合、そのノードを選択して実行すれば、そのFileCache SOPが自動的に利用される。

##Bento Toolsetへ

現在は、このツールは[Bento](https://github.com/takavfx/Bento)に組み込まれてます。
そちらで、ダウンロード&インストール、また、開発への参加をしてみて下さい！

#資料

- [Tool: Cache Dependency - Taka's VFX Note](http://takavfx-note.tumblr.com/post/128674281607/tool-cache-dependency)
Trigger Solverなるものを作ってみる。

[![Screenshot from 2015-10-31 05-03-17.png](https://qiita-image-store.s3.amazonaws.com/0/51857/7d27b194-97b5-b12d-0070-7eeee6e3cab3.png)](https://vine.co/v/eVtwQhnwaXH)

<iframe src="https://vine.co/v/eVtwQhnwaXH/embed/simple" width="480" height="480" frameborder="0"></iframe><script src="https://platform.vine.co/static/scripts/embed.js"></script>


友人からスケーリングをしながらフラクチャーが起こるエフェクトをどう作るか質問を受けたのでやってみた。

フレーム毎に小さくさせることとそれぞれのフラクチャーをアニメーションさせたバウンディングボックスでアクティベートしていることから、ピースごとににageアトリビュートをもたせることが必要だった。

Solver SOPを使ってTrigger Solver的なものを作ってみた。原理は単純で、赤い部分と黒い部分を作成し、赤い部分のみを元のジオメトリに転写していく。さらにそれを利用して黒い部分を削除し、赤く転写された時点のフレームをtriggerFrameとして内包。最終的にはそれを利用してageアトリビュートと手動で代入されたlifeアトリビュートと一緒にbiasアトリビュートを作成。

フラクチャー変形のジオメトリに対しては、Bulletを使用したいのもあって、Intrinsicと一緒にPackを利用している。

サイズを小さくしていっている場所は、`/obj/fracture/SIM_Fracture/sopsolver1/scale_packed_object`にあり、Intrinsicデータを利用してそれぞれのフラクチャーに対してbiasアトリビュートを取り込みつつスケーリングしている。

```
vector scale = 1 * @bias;

matrix3 tr = primintrinsic(0, "transform", @primnum);
matrix scalem = maketransform(0, 0, {0,0,0}, {0,0,0}, scale, @P);
tr *= matrix3(scalem);
setprimintrinsic(0, "transform", @primnum, tr);
```

なんかもっとこういう方法もあるよ！とかあったら是非言ってもらえればありがたいです！


[Download HIP File](https://drive.google.com/file/d/0B5WpdZsh8d9QV1VBcjlGS2ROZms/view?usp=sharing)
*H14で作成しなおしたものを添付してます。
【SEO対策】３分で分かるライター初心者向けHTMLコーディング

※この投稿は、東海の学生クリエイター集団「OthloTech」のアドベントカレンダーへの寄稿記事です。

皆さん初めまして、名古屋でWebライター・編集の仕事をしている若目田（わかめだ）と申します。最近、ライターを複数人雇ったのでSEO周りのプチ勉強会を定期的に開催しているのですが、その中でも特に大切な基礎的なポイントについてまとめたものをシェアしていきたいと思います。コーディングが苦手な方でもすぐ出来ることなので、よかったら実践してみてください。

<h2>タイトルの左側に検索して欲しいキーワードを入れる</h2>
タイトルを変えるだけで検索順位が大幅に変わります。例えば「名古屋　観光　おすすめ」のキーワードを狙う場合は、

```html

<title>意外と知らない！？名古屋のおすすめ観光スポット20選</title>

```

というタイトルよりも

```html

<title>名古屋観光におすすめ！名古屋に来たら絶対に寄りたい人気スポット20選</title>

```

の方が検索に強い記事になります。キュレーションメディアのほとんどがこのようなタイトル付けをしてますよね。

<h2>見出しタグを階層構造にする</h2>
原則として、見出しタグは　h1>h2>h3>h4…>p のように階層構造して使用するのが基本です。見出しが階層構造になっているかどうかも検索順位を上げる一つの基準です。

○ 良い例

```html

<h1>見出し1</h1>
    <h2>中見出し1-1</h2>
        <h3>小見出し1-1-1</h3>
        <h3>小見出し1-1-2</h3>
        <h3>小出し1-1-3</h3>
    <h2>中見出し1-2</h2>
    <h2>中見出し1-3</h2>
<h1>見出し2</h1>
    <h2>中見出し2-1</h2>
    <h2>中見出し2-2</h2>

```


<h2>リンクしたいテキストにもキーワードを入れる</h2>
リンクするテキストのことのことをアンカーリンクと呼びます。このアンカーリンクにも関連するキーワードごとリンクさせるとSEO的にも効果があります。例えば以下のようなアンカーテキストでは、前者よりも後者の方がクローラーに評価されます。

```html

<a href="https://qiita.com/">Qiita</a>
<a href="https://qiita.com/">プログラマの技術情報共有サービス「Qiita」</a>

```

<h2>brタグ（改行タグ）はなるべく使わない</h2>
改行タグはHTMLの構造上、適切でないと言われています。Googleのクローラーは改行を認識できないので注意が必要です。例えばリストタグを利用するときは以下のようにコーディングします。

```html

<p>
・これはダメなパターン<br>
・これはダメなパターン<br>
・これはダメなパターン<br>
</p>

```

```html

<ul>
    <li>これが正しいパターン</li>
    <li>これが正しいパターン</li>
    <li>これが正しいパターン</li>
</ul>

```

<h2>まとめ</h2>
上記のSEO対策は本当に基礎の部分ですが、意識してみるだけで検索順位が大幅に変わります。まずはあなたのブログでチェックしてみてくださいね。
錯視作成に使える開発環境・言語（２）Processing

昨日の続きで、錯視作成に使える開発環境・言語を紹介します。

昨日も書きましたが、錯視作成にプラスな点として、

- ネイティブで描画・表示をサポートする開発環境
- アニメーションのサポート（動画錯視の場合）
- 色空間のサポート（RGBだけではなく、HSVも必要）
- ベクトルデータ、ベクトル演算（錯視は繰り返しパターンが多いので、楽です）
- 3DCGサポート
- 簡単に使える画像・動画出力

などがあります。

# Processing

https://ja.wikipedia.org/wiki/Processing

> Processing（プロセシング）は ... （略） ... **電子アートとビジュアルデザイン**のためのプログラミング言語であり、統合開発環境である。アーティストによるコンテンツ制作作業のために、詳細な設定を行う関数を排除している。 視覚的なフィードバックが即座に得られるため、**初心者がプログラミングを学習するのに適しており**、電子スケッチブックの基盤としても利用できる。Javaを単純化し、グラフィック機能に特化した言語といえる。

あまり聞き慣れない言語かもしれません。ベースはJavaですが、いまはPythonやJavaScriptによる実装なども出てきているようです。

アドカレもありますね。
http://qiita.com/advent-calendar/2016/processing

錯視に関しては、

- 息を吐くように絵をかける（そもそもグラフィックス出力を目的としている）
    - さまざまな高水準の描画用関数群。
    - 加えてOpenGLのラッパになってる。例えばモデルビュー行列の操作（アフィン変換とか、行列のpush/popも）なんかも可能。
- 3次元画像のサポート（OpenGLなもんで）。
- 適度な数学関数群。
- 貧弱なベクトルサポート。
- 高い時間解像度のアニメーション
- 色空間サポート
- 一応、動画ファイルを作成できる。
- マウス・キーボードなどによるインタラクティブな操作が可能。

というような特徴があり、静止画系は昨日紹介したRで、やや複雑な動画系はProcessingかな、というのが現状です。

基本的にOpenGLのラッパになっていて、描画にはコールバックルーチンが使えます（`glutDisplayFunc`みたいな雰囲気）。
また、マウスやキーボードで操作できるので、行為主体感とか、action-perceptionループが関わるような錯視も作成することができます。

この他、Arduinoと通信できるので、コンピュータ画面を越えた錯視も作ることができます。
あと、[Webmo](http://webmo.io/)というプログラマブルモータも使えます。実際の物体を回すことができるので、ベンハムのコマ、ホローフェイス錯視などを作ることができます。

# ライラックチェイサーの作成

![llcc_1.gif](https://qiita-image-store.s3.amazonaws.com/0/4390/b1abfc29-fc94-788f-d343-f662024c2448.gif)

真ん中の白い点をじっと見つめていてください。絶対に目は動かさずに。瞬きはしてもいいです。

うまくいくと、そのうちピンクの玉が消えて、緑の丸の動きだけが見えてきます。
うまくいかなかったら、NTTリュージョンフォーラムで試してみてください。

http://www.kecl.ntt.co.jp/IllusionForum/v/lilacChaser/ja/

Processingで作るには、こんな感じです。

```processing
int t0, t1;
int N = 12;
float vel = 6.0; 

void setup() {
  size(800, 800);
  t0 = millis();
}

void draw() {
  background(128);
  noStroke();
  t1 = millis() - t0; 
  int j = int(t1/1000.0*vel) % N;
  fill(221, 157, 221);
  for (int i=0; i<N; ++i) {
    if (j == i) continue;
    ellipse(400+(cos(float(i)/N*2*PI))*300, 400+(sin(float(i)/N*2*PI))*300, 50, 50);
  }
  // ほんとはblurかけたいけど、実時間でのレンダリングに間に合わないので省略。
  // filter(BLUR, 2);
  fill(255);
  ellipse(400, 400, 20, 20);
} 
```

簡単！！

# プログラミング入門としてのProcessing

大学に入った時点で、プログラミングにほとんど触れたことがない、という人は結構います。
そういう人に、プログラミングを体験してもらうのの一番いい言語だと思います。

https://www.amazon.co.jp/dp/4873117739
Processingをはじめよう 第2版

これ、いいです。

まず、作ったものがすぐに目で見られるのは重要です。架空の銀行口座つくって架空のお金を預けたりしても、なんの面白みもありません。錯視を作って、自分の目で見ること、これは、プログラミングを学ぶモチベーションを維持する上で、ものすごく重要です。

というわけで、これからプログラミングを始めてみたい、と思っている人は、「Processingでお気に入りの錯視を作る」というあたりから入ってみることをお勧めします。

# 明日は

明日はWebGLなどについて紹介します。

Enjoy!!
【Kubernaetes】AWS上でKubernetesを試すための備忘録

AWSでKubectlが使えるようになるまでの手順の備忘録です。

# AWS Cliのインストール

```
$ sudo apt-get update
$ sudo apt-get -y install python-pip
$ sudo pip install awscli
```

ユーザーのキーを設定しておきます。

```
$ aws configure
```

# 環境変数の設定

| Env Variable Name  | Description    | default           |
|--------------------|----------------|-------------------|
| KUBE_AWS_ZONE      | Available Zone | us-west-2a        |
| NUM_NODES          | node数         | 4                 |
| MASTER_SIZE        | マスターのサイズ   | [node数による](https://github.com/kubernetes/kubernetes/blob/master/cluster/aws/config-default.sh#L33-L51)        |
| MINION_SIZE        | Minionのサイズ | [node数による](https://github.com/kubernetes/kubernetes/blob/master/cluster/aws/config-default.sh#L22-L31)        |
| AWS_S3_REGION      | 使用するS3のリージョン | us-east-1        |
| EXTRA_DOCKER_OPTS  | Dockerデーモンの起動オプション？ |         |


# Kubernetesのインストール

```
$ export KUBERNETES_PROVIDER=aws; curl -sS https://get.k8s.io | bash
```

# kubectlの設定

```
$ sudo cp kubernetes/platforms/linux/amd64/kubectl /usr/local/bin/kubectl
$ sudo chmod +x /usr/local/bin/kubectl
```

# 参考

http://kubernetes.io/docs/getting-started-guides/aws/

http://kubernetes.io/docs/user-guide/prereqs/

http://qiita.com/Arturias/items/8f16194f164aeacbe67d

https://get.k8s.io/

https://github.com/kubernetes/kubernetes/blob/master/cluster/aws/config-default.sh
cocos2dxのテンプレプロジェクトを見てみよう

いままでQiitaは見る専でしたが、
せっかくのアドカレなので参加してみようと思います。
cocos2dxのカレンダー( http://qiita.com/advent-calendar/2016/cocos2dx )、
現状寂しい感じなので、ぜひご参加よろしくお願いします！

##cocos2dxとは
http://www.cocos2d-x.org/
c++でiOS,Androidのスマートフォンアプリを作れます(ざっくり)

JavaScriptや、LUAでも作れます。
ただ、各OSに近い機能を使う際は、それぞれObjective-C(iOS)、Java(Android)でも書く必要があります。


##ダウンロード
http://www.cocos2d-x.org/download
最新バージョンのv3.13.1を落としてみます(2016.12現在)

##セットアップ
ダウンロード後、cocos2d-x-3.13.1.zipを解凍、
解凍したファイルを適当なディレクトリにおきます。

ターミナルを開き、解凍したcocos2d-x-3.13.1に移動します。
cocos2d-x-3.13.1で`./setup.py`を実行します。
本来ならここでsdk、ndkなど、プロジェクトのビルドに必要な諸々のパスを設定します。
が、今回はとりあえず割愛します。プロジェクトの作成はできるので。。

##プロジェクト生成
プロジェクトを作りたいディレクトリに移動し、
`cocos new CocosTest -p com.cocos.test -l cpp`
を実行します。
コマンドの内容は、
cocosコマンドで
cocosプロジェクト名「CocosTest」
Androidのパッケージ名「com.cocos.test」
使用言語はcpp
で作成する。といった感じです。

##プロジェクトを見ていこう
全体像はこんな感じです。
![Kobito.wYPSA9.png](https://qiita-image-store.s3.amazonaws.com/0/130684/f683e73c-0a88-6eb4-646b-34b899d5f883.png "Kobito.wYPSA9.png")


###Classes
cppで書かれたプログラムファイルが存在します。
開発中は主にここのファイルにメインのプログラムを書いていくことになります。
Classes以下のコードは主にiOSのプロジェクトファイル
proj.ios_mac/CocosTest.xcodeproj
をXcodeで開いて編集します。

###cocos2d
cocos2dxが提供する機能を含んだファイルが存在します。
基本的にはここを操作することはあまりないですが、必要に応じてcocos自体を修正することも稀にあります。
また、cocosのアップデートがあった際、最新のcocosから作成したプロジェクトのcocos2dディレクトリから一部コードをマージすることで、一部のアップデートのみ適用することもあります。

###proj.~
各プラットフォームに対応したプロジェクトが存在します。
androidは、android-studio対応の有無でプロジェクトがふたつ存在します。
それぞれのプラットフォームの機能を使う際は、各ディレクトリの対応コードを編集します。

###Resources
全プラットフォームで共通して使う素材が存在します。
初めてのargs4j

#args4jとは
コマンドライン引数の解釈をしてくれるライブラリです。
http://args4j.kohsuke.org/

ex) `java example.class hoge fuga -foo bar`
class以降の文字列がコマンドライン引数

#前提
執筆時点最新のver2.33を使います。

# 使い方
使うこと自体はいたって簡単3ステップ
1. 読込先 兼 定義のクラスを用意
1. パーサーのインスタンスを生成
1. メソッド起動
以上
beanに入っているのであとは煮るなり焼くなりお好みで

```java:読込先クラス
import org.kohsuke.args4j.Option;

/**
 * コマンドライン引数の格納先兼定義
 */
public class ArgBean {
	@Option(name = "-f")
	public Boolean flag;
}
```

``` java:実行クラス
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;

public class Example {
	public static void main(String ... args) throws CmdLineException {
		//beanインスタンス生成
		ArgBean bean = new ArgBean();
		//パーサーインスタンス生成
		CmdLineParser perser = new CmdLineParser(bean);
		//パース実行
		perser.parseArgument(args);

		//画面表示 オプションが指定されていればtrue,されていなければnull
		System.out.println(bean.flag);
	}
}
```


# 読込先クラスの設定
読込先クラスでは、フィールドへアノテーションを付与することにより、コマンドライン引数の解釈方法を制御する。
引数は名前の有無で2つのアノテーションを使い分ける。
どちらにも、handlerがあるがString,数値系プリミティブとそのラッパー型,列挙型（Enum）であればなしで動く

## Option
名前付き引数に対して使用するアノテーション
### name
必須項目　この項目の名称を指定する
先頭は必ず、「-」にすること
`org.kohsuke.args4j.CmdLineParser#isOption(String arg)`でArgument扱いされてしまうことを避けるため

```java:sample
@Option(name="hoge")
public Boolean flag;
```
次の起動でflagがtrueになる

```cmd:コマンド
java example hoge
```

## Argument
名前なし引数に対して使用するアノテーション
### index
何番目に出現するかを指定する。配列と同じく0スタート
デフォルトが0指定されているため省略可能

```java:sample
@Option(index="0")
//↑↓同じ
//@Option
public String str;
```

次の起動でstrがfooになる

```cmd:コマンド
java example foo
```

#使用時の注意事項
* usageはparse実行後の場合、上書きされる。
    * 出力時はparse前か新しい読込先・パーサーインスタンスを用意すること


# 参考先
* http://terurou.hateblo.jp/entry/20110215/1297700839

#余談
* サンプルの通りフィールドのみでも構成でき、読込先クラスはbeanとは呼べないような気もしますが今回の記事の範囲では言及しないでください。
* Argumentのindexで何を思ったか1スタートにしたら例外吐いてて例外読んでもぱっと見では原因に紐付かなくてはまった。
* org.kohsuke.args4j.spi.FieldSetter#getValue()を見るとフィールドアクセスできなかった時、setAccessibleで再アクセスを試みているので、セキュリティマネージャとか使ってると落ちるんじゃないだろうか・・・？
残り容量があるのに"No space left on device"って言われる時の対処法

`Capistrano`で`git:update`したら残り容量の確認を`df -h`でしたらちゃんとまだまだあるのに`No space left on device`って怒られたので、そういう時の対処法。

```.sh
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G   15G  3.4G  82% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            235M  4.0K  235M   1% /dev
tmpfs            50M  428K   49M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            245M     0  245M   0% /run/shm
none            100M     0  100M   0% /run/user
```

ちゃんとある。

### 原因

`inode`が枯渇してる。

```.sh
$ df -i
Filesystem      Inodes   IUsed IFree IUse% Mounted on
/dev/vda1      1277952 1277950     2  100% /
none             62720       2 62718    1% /sys/fs/cgroup
udev             60007     417 59590    1% /dev
tmpfs            62720     348 62372    1% /run
none             62720       1 62719    1% /run/lock
none             62720       1 62719    1% /run/shm
none             62720       3 62717    1% /run/user
```

100%使用しちゃってる。

### 対策
- ファイル数が多いフォルダを削除する

```.sh
find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n
```

で検索してファイル数が多すぎるものを削除。

- inode数を増やす

ファイルシステムの書き換えになるし、VPS上でやろうとするとめんどくさそうなのでやってませんが、`inode`数を増やすのが一番正攻法だと思います。ココらへんのサイトを参考にやってみてください。

http://www.itmedia.co.jp/enterprise/articles/0808/12/news036.html

### 参考

http://unix.stackexchange.com/questions/117093/find-where-inodes-are-being-used
iOS Safari で最後の一文字だけ改行される不具合の対処方法

# 特定条件のみ最後の一文字が改行されてしまう

iOS Safariでページを確認したら特定の箇所だけ最後の一文字が改行されてしまうという現象に悩まされていました。

![スクリーンショット 2016-12-05 1.22.47.png](https://qiita-image-store.s3.amazonaws.com/0/2513/28c4fce0-94b3-672b-6762-6e16cbaeb876.png)

こんな感じです。

# 発生条件

[≫iOSで最後の1文字が改行される](http://cly7796.net/wp/smartphone/the-last-one-character-is-a-new-line-in-the-ios/)
[≫Mobile Safariで最後の１文字が改行されてしまうバグ](http://kudakurage.hatenadiary.com/entry/2013/05/04/152413)

上記ページに発生条件がいろいろ書かれていますが、

- フォントサイズ
- 前後の空白
- 文字数

などは自分の場合は**関係ありませんでした。**別の文字列にしても改行されたので文字コードなども関係ないようです。

- `dt` タグを `display:inline-block` する

というのが自分の発生条件のようです。


# 対処法

```scss
dt{
	display: inline-block;
	margin-right: -1px;
	&:after{
		content: ".";
		width: 0;
		font-size: 0;
		color: transparent;
		margin-right: 1px;
	}
}
```

`content` を空白にすると効果がなかったので適当にピリオドを入れました。
`font-size: 0;` にして、 `color: transparent;` にすることで余計な余白も見た目も異物が表示されないようにしました。

![スクリーンショット 2016-12-05 1.22.47.png](https://qiita-image-store.s3.amazonaws.com/0/2513/28c4fce0-94b3-672b-6762-6e16cbaeb876.png) → ![スクリーンショット 2016-12-05 1.23.16.png](https://qiita-image-store.s3.amazonaws.com/0/2513/5b08b00a-b335-8713-396d-cfe6d69b7aa3.png)
AWS ElastiCacheに外部からtelnet接続

AWS ElastiCacheは同一VPC内EC2からしかアクセスできないそうです。

[ステップ 4: アクセスを許可する \- Amazon ElastiCache](https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/UserGuide/GettingStarted.AuthorizeAccess.html) より引用

>すべての ElastiCache クラスターは Amazon EC2 インスタンスからアクセスするように設計されています。クラスターとその関連 EC2 インスタンスは同じ Amazon Virtual Private Cloud (Amazon VPC) にあることが必要です。同じ VPC 内の EC2 インスタンス以外の場所から ElastiCache クラスターにアクセスする必要がある場合は、回避策としてキャッシュの VPC 内に EC2 ホストを 1 つ以上セットアップして外部のプロキシとして動作させることができます。

そこで、言われたとおりEC2をプロキシにして外部ネットワークからの接続を試してみます。

## 手順

IPアドレスを下記のようにおきます。

- AWS ElastiCache エンドポイントIP: xxx.xxx.xxx.xxx
- AWS EC2 プロキシサーバ パブリックIP: yyy.yyy.yyy.yyy ※ElasticIP推奨
- 外部のソースIP: zzz.zzz.zzz.zzz

### ElastiCache構築

セキュリティグループで「セキュリティグループ自身からの11211ポート」を許可して構築します。
後は適当です。t2.microでmemcache1.4.24にしました。

### EC2構築

セキュリティグループで「zzz.zzz.zzz.zzzからのSSH(22)ポート」「zzz.zzz.zzz.zzzからの11211ポート」を許可して構築します。
後は適当です。t2.nanoでAmazonLinuxにしました。

SSHでEC2インスタンス内に入り、iptablesによるIPフォワーディング設定を有効化します。

```
$ ssh -i ~/.ssh/(生成した鍵) ec2-user@yyy.yyy.yyy.yyy
$ sudo su -

# yum install telnet iptables
# sysctl -w net.ipv4.ip_forward = 1
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11211 -j DNAT --to xxx.xxx.xxx.xxx:11211
```

※sysctlとiptables設定は、ずっと使うなら/etc下に記述して永続化を推奨

## 接続確認

[古の強大なTELNETプロトコル](https://twitter.com/NJSLYR/status/487598586054467585)を使って接続の検証をします。

まず内部EC2から。

```
[ec2-user@ip-yyy-yyy-yyy-yyy ~]$ telnet xxx.xxx.xxx.xxx 11211
Trying xxx.xxx.xxx.xxx...
Connected to XXXXX.XXXXXX.XXXX.XXXXX.cache.amazonaws.com.
Escape character is '^]'.
^]

```

外部から。

```
[argus@01110110111 ~]$ telnet xxx.xxx.xxx.xxx 11211
Trying xxx.xxx.xxx.xxx...
Connected to XXXXX.XXXXXX.XXXX.XXXXX.cache.amazonaws.com.
Escape character is '^]'.
^]

```

成功しました。

## 参考文献

- [AWS 外部からの ElastiCache リソースへのアクセス \- Amazon ElastiCache](https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/UserGuide/Access.Outside.html)
- [アルゴス \- ニンジャスレイヤー Wiki](http://wikiwiki.jp/njslyr/?%A5%A2%A5%EB%A5%B4%A5%B9#h4_content_1_5)
CentOS 6.x に phpenv をインストール


## EPELリポジトリのインストール

PHPのビルドで利用する libmcrypt-devel や re2c パッケージはEPELリポジトリにあるようなので事前にインストール

```shell:bash
cd /tmp

curl -O http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum -y install epel-release-6-8.noarch.rpm

# 追記: 
sudo sed -i 's/enabled=1/enabled=0/g;s/mirrorlist=https:/mirrorlist=http:/g' /etc/yum.repos.d/epel.repo
```

以前はなぜか問題なかったのですが、改めてやってみるとエラーで困りました。
cf. https://qiita.com/kyrya/items/d3a4cba0ff2aa9a4a402
cf. https://qiita.com/maruware/items/eb659266a45021cf486c

## php の build に必要なパッケージのインストール

```Bash:bash
yum -y --enablerepo=epel install git libxml2-devel openssl-devel curl-devel libjpeg-devel libpng-devel libXpm-devel freetype-devel re2c libmcrypt-devel libicu-devel readline-devel libtidy-devel libxslt-devel bzip2-devel gcc gcc-c++ cmake
```

## phpenv のインストール

特に指定しない場合は `$HOME/.phpenv` にインストールされますが、下記のようにインストール先を指定することもできます。

```shell:bash
# 例: `/usr/local/phpenv` にインストール
export PHPENV_ROOT="/usr/local/phpenv"

```

### phpenv 本体のインストール
```shell:bash
curl -L https://raw.githubusercontent.com/CHH/phpenv/master/bin/phpenv-install.sh | bash

echo -e "export PATH=\"${PHPENV_ROOT}/bin:\$PATH\"\neval \"\$(phpenv init -)\"" >> ~/.bash_profile

source ~/.bash_profile

```

### php-build のインストール

```shell:bash
yum -y install git

git clone https://github.com/php-build/php-build ${PHPENV_ROOT}/plugins/php-build
```


## おまけ: PHPのインストール

```shell:bash
# バージョンは適宜
PHP_VERSION=7.1.0
phpenv install $PHP_VERSION
phpenv global $PHP_VERSION
phpenv rehash
# インストールバージョンを確認
php -v
フリーランスになって良かったこと

ここ一昨日と昨日でネガティブなことを書いてしまったので、今日は良い事を

# フリーランスになって良かったこと

フリーランスで苦労する面もありますが、良かったこともあります。

 - 自分の時間が作れる
 - 家族のための時間が作れる
 - 子どものために、緊急時に駆けつけることができる
 - オフシーズンに旅行ができる

ぐらいなことですかね。

## 自分の時間が作れる

会社員時代だと、始業から終業まで決まっていて、決まった時間は拘束されて、家には風呂と寝に帰って来ただけだけだったりしてましたが、フリーランスになると、労働条件や契約条件によっては、自宅に仕事を持ち帰り、在宅作業が出来たりします。
家で仕事をするのは、慣れるまで時間がかかりますが、結構、音楽をＢＧＭにしてコードを書いたり、自分のペースで仕事が出来たりします。
まあ、最近、持ち帰り可能の在宅の仕事ってなかなか無いんですけどね。

## 家族のための時間が作れる

終業が19時だとすると、家に着くのが20時過ぎになったりして、もう小さな子どもがいる場合なんかは、すでに寝ていたり、お風呂を済ませたりしてたりしますよね。
フリーランスで、在宅ワークになると、保育園や幼稚園へのお迎えや、子どもと一緒に夕食を食べたり、一緒にお風呂に入ったりすることが出来るんです。
あとは、平日休みを作ってお出かけしたり、家族のために時間が使えるって結構重要かもしれません。
しかし、在宅の仕事や就業条件が厳しくなって来た昨今は、なかなか難しいです。

## 子どものために、緊急時に駆けつけることができる

一応、自分はフリーランス（自営業）ということになっているので、子どもが保育園や小学校でなにかあると、一番最初に携帯電話連絡があります。
在宅作業をしているときは、そのまますぐにかけつけて、医者につれて行くことが出来るんですけど、客先常駐の時にそういう連絡があると、すぐにかけつけることが出来ません。
在宅で自由に仕事をしたいのが一番の理想なんですけどね、そういう案件が中々無いというのが、最近の状況です。

## オフシーズンに旅行ができる

これはフリーランスで無くても、会社員でもがんばれば実行可能だと思います。
沖縄のオフシーズンは3月〜5月（ＧＷを除く）、北海道のオフシーズンは2月（雪祭り後）〜６月とか、観光客自体がいないことが多くて、どこも貸し切り状態で観光ができていたりしていました。ただ、ここ最近は中国人観光客が多く、オフシーズンは少ないみたいで、今度は場所を移すしかないかなって感じです。
海外でもいいし、国内でも沖縄や北海道、京都以外だとまだまだ空いている時期や場所があるみたいですし。


まあ、こんな感じがフリーランスと会社員の大きな違いですね。

明日からは仕事の思い出でも語ります。では、明日
AtCoder Beginner Contest 048

2016年12月4日のAtCoderの記録。言語はRubyです。
競技プログラミングの感想をQiitaに投げている人ってあまりいない印象なのだけど、投稿して良いのだろうか。
問題はこちら：[AtCoder Beginner Contest 048](http://abc048.contest.atcoder.jp/)
私の回答一覧はこちら：[自分の結果](http://abc048.contest.atcoder.jp/submissions/all?user_screen_name=Linus)

#A問題
文字列が```AtCoder Foobar Contest```の形式であることを仮定しなくても良い。
スペース区切りの2番めの1文字目を取ってくれば良いから

```ruby
ch = gets.split[1][0]
puts "A" + ch + "C"
```
でおしまい。

#B問題
変数に適切に代入した後

```ruby
puts b/x - (a-1)/x
```
とする。
a以上b以下の数のうち、xの倍数の個数
= 1以上b以下の数のうち、xの倍数の個数 - 1以上(a-1)以下の数のうち、xの倍数の個数
= b/x - (a-1)/x
a,bが0である可能性もあるので、その辺を念入りに試験したあと提出。

#C問題
DPかなぁと思って漸化式を立てようとしても上手くいかない。
最初の要素から減らしていくのは明らかに損である。したがって、2番目の要素から減らしていく。2番目の要素が0になっても1番目+2番目が条件を満たさないなら、1番目の要素から減らすしかない。
あとは
2番目+3番目が条件を満たすように、　3番目の要素を減らす
3番目+4番目が条件を満たすように、　4番目の要素を減らす
……と続けていけば良い。

このやり方の最適性はあんまり厳密に考えてないけど、「無駄な減らし方」をしてないから多分大丈夫だろうなぁ、という気分で提出した。



#D問題
5文字や6文字の例をいくつかやってみて「これ……先手と後手がどういう風に操作をしようと、勝者は変わらないのでは……」という気がしてきた。
確証は無かったが、正しそうな気がしたので仮定した。すると「先手と後手は可能な手をテキトウに(=最善を尽くさずに)選択する」と考えて良い。簡単のため、両者は削除できる最初の文字を削除していくということに決めつけて解いた。

```ruby
str = gets.chomp

c = 0
fl = 0
while true do
	
	0.upto(str.length - 3) do |i|
		if str[i] != str[i+2]
			str.slice!(i+1)
			c += 1
#			puts str
			break
		end
		
		if i == str.length - 3
			# 文字を削除できない
			fl = 1
			break
		end
	end
	
	break if fl == 1
	break if str.length == 2
end

if c % 2 == 0
	puts "Second"
else
	puts "First"
end
```
フラグ用の変数flを使わないといけなかったのが、ゴチャゴチャしていて気に入らない。もうちょっと綺麗に書けたような気がする。
デバッグ用の```puts str```をつけたまま一度提出してしまい、5分ペナルティを喰らった。

解説の動画を見ていたら、「2文字・3文字・4文字……のありえる文字列を全て考える」というやり方をしていた。自分は「サイズの小さい問題を適当に作って考える」ということはしていたが、「**サイズの小さい問題を全て列挙して考える**」ということはしていなかった。確かにそうやればもっと早く解けたかもしれない。次回以降は気をつけよう。

#配列の合計
C問題で必要になったのだが、咄嗟に書けないからググってしまった。

```ruby
sum_of_array = array.inject(0){ |sum, i| # (0) はあっても無くても良い
	sum + i
}
```
(もっと短い書き方もあるが、ここでは割愛)

詳細な説明は以下を参照。
[ruby の inject をわかりやすく説明してみる](http://kenkiti.hatenadiary.jp/entry/20090114/ruby_inject)
[ちょっとわかりにくいけど非常に便利なinjectメソッド](http://akisute3.hatenablog.com/entry/20111122/1322153061)
Rubyリファレンス：[inject (Enumerable)](http://ref.xaio.jp/ruby/classes/enumerable/inject)
Androidの設計はとりあえずこれだけはやっとけ的な話

[Android Advent Calendar 2016](http://qiita.com/advent-calendar/2016/android) の 5日目を担当します @kobakei です。

Androidの設計やアーキテクチャの話となると、MVC, MVP, MVVM, Reduxなど色々なパターンが試されているものの、万人が「これを使っとけば間違いない！」的なものはまだない印象です。

この記事では、どのパターンがいいか／悪いかみたいなマサカリが飛びそうな話題はせず、**Android初心者が最低限これくらいはやっといたほうがいいよ**という設計を紹介します。

※shibuya.apk 11で話した内容をベースにまとめています。スライドは[こちら](https://speakerdeck.com/kobakei/popcorn-android-akitekutiyafalsebian-qian)。

# モデルとビューを分ける

それぞれのMVX系パターンはプレゼンターやビューモデルなどの責務は異なっていますが、**「モデルとビューは別」**という点は共通しています。なので、少なくともモデルとビューは分けてしまいましょう。

Androidの場合ActivityやFragmentにビジネスロジックを書いていくとどんどん肥大化してすぐにマッチョな辛いクラスになってしまいます。ビジネスロジックはクラスを切り出して、ビューに依存しないようにしておきましょう。

なお、ビジネスロジックをActivity/Fragmentから追い出しても、Activity/Fragmentがいずれ肥大化するときは来ます。そうなったときには、MVX系パターンやReduxから自分に合ったものを試せば良いと思います。

# モデルの依存関係を一方向にする

モデルを切り出していくと、あるモデルが別のモデルに依存したくなるケースが出て来るでしょう。このとき、安易に依存関係を持つと、いずれモデルが相互に依存したり、依存関係が複雑になりすぎたりして手に負えなくなります。

そんなときは、モデルの中にも階層を設けることにして、**モデルが依存していいのは自分より下の層のクラスのみ**という制約を与えます。例えば、私の作っているサロン予約アプリでは、以下の3層になっています（注意：ここでは例として3層ですが、アプリの規模によっては2層でいいこともあるし、4層以上になるかもしれません）

- ユースケース
    - ビジネスロジックを実現する層。「サインインする」「サロンを予約する」などの処理ごとに1クラス。
- リポジトリ
    - エンティティのCRUDを担う層。エンティティごとに1クラス。
- インフラ
    - SQLiteやREST APIなどからデータを取り出し、エンティティに変換する層。ほぼライブラリそのまま。

ここで上の制約をあてはめると、あるユースケースが依存していいのはリポジトリのみになります。他のユースケースに依存してはいけないし、リポジトリを飛び越してインフラを呼んではいけません。

このようにクラスの依存関係を一方向にすることで、コードを見ただけで理解できるように設計をシンプルに維持できます。

# DI（依存性注入）を使う

あるクラスAが他のクラスBのインスタンスに依存している場合、コンストラクタで引数で渡すなどしますが、これでは後で別のクラスB'への依存に変更しようとしたときにコードを大きく書き換える必要があります。DIはこうした問題を解決する、クラス間の依存性を解決する手法です。

始めたばかりの人だと、DIの必要性について疑問を感じているかもしれません。実際、DaggerなどのDIライブラリは理解するまでに少し努力がいるように感じます。しかし、DIの導入はできるだけ最初のうちから行っておいたほうがよいです。これは、途中で導入するよりも最初に導入しておいたほうがハードルが低いのと、最初から導入しておくことでテストしやすい設計になりやすいためです。

はじめから「テストはがっつり書こう」「単体テストくらいは書こうかな」と決めているなら勿論のこと、「サービスがどれくらい続くかわからないから今はまだテスト書くか決めてないや」という場合にも、書こうと思えばいつでもテストが書ける状態にしておくことはとても大事です。

DIライブラリは、おそらくGoogleの[Dagger](http://google.github.io/dagger/)が最もメジャーかと思われますので、とりあえずはこれを使っとけば良いと思います。
最新のスクラムガイド

今年2016年にスクラムガイドの更新が行われました！
2013年にリリースされた前バージョンにと今回のバージョンの変更は、スクラムの価値基準(Scrum Values)の項目が追加されたことです。

こちらの項目について、少し語りたいと思います。


## スクラムの価値基準(Scrum Values)

スクラムチームが、確約（commitment）・勇気（courage）・集中（focus）・公開（openness）・尊敬（respect）の価値基準を取り入れ、それらを実践するとき、スクラムの柱（透明性・検査・適応）は現実のものとなり、あらゆる人に対する信頼が築かれる。スクラムチームのメンバーは、スクラムのイベント・役割・作成物に触れて、仕事を進めるなかで、これらの価値基準を学習・探索する。

#### スクラムを活用するには、これらの 5 つの価値基準を上手に実践しなければいけない。
- 個人はスクラムチームのゴールの達成を確約しなければいけない。
- スクラムチームのメンバーは、正しいことをする勇気を持ち、困難な問題に取り組まなければいけない。
- 全員がスプリントの作業とスクラムチームのゴールに集中しなければいけない。
- スクラムチームとステークホルダーは、仕事や課題と、その遂行の様子を公開することに合意しなければいけない。
- スクラムチームのメンバーは、お互いを能力のある独立した個人として尊敬しなければいけない。


XPの４つの価値基準に非常に近いものがあります。
一番注目しているのはrespectです。翻訳では尊敬とありますが、リスペクトはそれとは違う意味を含んでいるのではないかと思っています。
尊敬と少し違い、それぞれを認め合い良いところを認め合いながら相互に向上を目指す。そんなふうに考えています。

### リスペクト

個々に自分に任された仕事"だけ"を頑張るのではなく、壁をはずし、それぞれの得意な仕事を活かしながら、人が行う仕事に踏み込みながら化学反応を起こしていくようなイメージを持っています。
そうすることで自分のできる領域が広がり、そこで教える人は得意な分野でより詳しくなります。

人が自分の領域にくるというのはナワバリのようなものを気にする人には恐怖かもしれません。でも、それを蹴落としても、他の現場、チーム、会社でどんどん成長するのは変わりません。
それよりは人に教えるということで自分の力を向上させること、成長することで本当の価値を磨くことの方が遥かに効率的に自分の立場を安定させることでしょう。

能力が向上すれば、いいものが作れる、そこで認められれば、次にいいチャレンジが出来る、いいチャレンジが出来ればより早く成長出来る。こうして能力向上の螺旋のキーワードにリスペクトがあると思います。

もし壁を作る上司、チームメンバー、顧客などが居るならば、リスペクト出来る方法をぜひ考えてもらいたいと思います。

## 終わりに

今回はスクラムガイドの変更の箇所のみに注目してみました。
スクラムガイドは一番スクラム開発を行うときのベースになる知識です。
まだ読んだことが無い方は全部読んでみましょう。


[スクラムガイド2016 (PDF)](
http://www.scrumguides.org/docs/scrumguide/v2016/2016-Scrum-Guide-Japanese.pdf)
Atlassian IDE Connectorで快適Atlassian生活

## はじめに

この記事は、[Atlassian User Group Tokyo Advent Calendar 2016](http://qiita.com/advent-calendar/2016/augtokyo) 4日目の記事です。

## ここでやること

普段SQUEEZEでもPyCon JPでもタスク管理でJIRAを利用していますが、JIRAをチェックするために開発しているエディタとwebブラウザとを行き来するのはかなり面倒でストレスになります。

ここではAtlassianツールとIDEとの連携ができるプラグイン[Atlassian IDE Connector](https://www.atlassian.com/software/ide-connectors/overview)を紹介します。

これでIDEの画面上から、JIRAのチケット確認やチケットのステータス変更などができるようになります。

## 対応してるIDE
+ IntelliJ
+ Visual Studio
+ Eclipse


## 利用イメージ
![スクリーンショット 2016-12-05 0.59.49.png](https://qiita-image-store.s3.amazonaws.com/0/19111/3be71f03-b6a7-1bab-58b1-010277c77c24.png "スクリーンショット 2016-12-05 0.59.49.png")


※ 自分の作業環境であるPyCharmのキャプチャ画像

以下のような基本的な処理は全てIDE上から操作可能です。

+ タスク一覧確認
+ タスク詳細確認
+ ステータス変更
+ サブタスク追加
+ コメント記入
+ etc.


## 連携できるAtlassian製品

+ [Bamboo](https://www.atlassian.com/software/bamboo)
+ [Crucible](https://www.atlassian.com/software/crucible)
+ [JIRA](https://www.atlassian.com/software/jira)

以上3つが「Atlassian IDE Connector」によって連携可能です。

## おわりに

かなりサクッと[Atlassian IDE Connector](https://www.atlassian.com/software/ide-connectors/overview)を紹介しましたが、あまりこの便利なプラグインが知られてないようなのでこれを機にぜひ使ってみてください！

それでは皆さん快適なAtlassian生活を。