OmniAICreator/Qiita-1.07M huggingface dataset:
npm packageに`yarn.lock` が入っているとインストールが失敗する例

手元でokなのに、circleci上のubuntuでこけた

```bash1
ubuntu@box95:~/autoupdate-app$ npm i webpack-combine-loaders --verbose
npm info it worked if it ends with ok
npm verb cli [ '/opt/circleci/nodejs/v6.9.1/bin/node',
npm verb cli   '/opt/circleci/nodejs/v6.9.1/bin/npm',
npm verb cli   'i',
npm verb cli   'webpack-combine-loaders',
npm verb cli   '--verbose' ]
npm info using npm@3.10.8
npm info using node@v6.9.1
npm verb request uri https://registry.npmjs.org/webpack-combine-loaders
npm verb request no auth needed
npm info attempt registry request try #1 at 9:26:03 AM
npm verb request id 923e36d2b4e610a0
npm verb etag "BR6RDRT1QOF0ZGFQWW3ETY8SB"
npm http request GET https://registry.npmjs.org/webpack-combine-loaders
npm http 304 https://registry.npmjs.org/webpack-combine-loaders
npm verb headers { date: 'Fri, 04 Nov 2016 09:26:03 GMT',
npm verb headers   via: '1.1 varnish',
npm verb headers   'cache-control': 'max-age=300',
npm verb headers   etag: '"BR6RDRT1QOF0ZGFQWW3ETY8SB"',
npm verb headers   age: '0',
npm verb headers   connection: 'keep-alive',
npm verb headers   'x-served-by': 'cache-ams4139-AMS',
npm verb headers   'x-cache': 'HIT',
npm verb headers   'x-cache-hits': '1',
npm verb headers   'x-timer': 'S1478251563.441382,VS0,VE179',
npm verb headers   vary: 'Accept-Encoding' }
npm verb etag https://registry.npmjs.org/webpack-combine-loaders from cache
npm verb get saving webpack-combine-loaders to /home/ubuntu/.npm/registry.npmjs.org/webpack-combine-loaders/.cache.json
npm verb correctMkdir /home/ubuntu/.npm correctMkdir not in flight; initializing
npm verb cache add spec webpack-combine-loaders
npm verb addNamed "latest" is being treated as a dist-tag for webpack-combine-loaders
npm info addNameTag [ 'webpack-combine-loaders', 'latest' ]
npm verb addNameTag registry:https://registry.npmjs.org/webpack-combine-loaders not in flight; fetching
npm verb get https://registry.npmjs.org/webpack-combine-loaders not expired, no request
npm verb addNamed "2.0.2" is a plain semver version for webpack-combine-loaders
npm verb afterAdd /home/ubuntu/.npm/webpack-combine-loaders/2.0.2/package/package.json not in flight; writing
npm verb correctMkdir /home/ubuntu/.npm correctMkdir not in flight; initializing
npm verb afterAdd /home/ubuntu/.npm/webpack-combine-loaders/2.0.2/package/package.json written
npm ERR! cb() never called!
ubuntu@box95:~/autoupdate-app$
```

```bash
npm ERR! cb() never called!
```

なので、
```bash
rm -rf node_modules/
npm cache clean
rm -fr $HOME/.npm
```

をひととおり試したり、npmを最新版にしてもNG

## 回避方法


forkしてから、`yarn.lock`消して、githubからインストールすればok
あるいは、このpkg限定なら、webpack v2.1に上げてdevDependenciesから外す
ただこれは根本的解決でない

https://github.com/jsdf/webpack-combine-loaders/issues/6

~~issueに上がってるが、解決されてない。~~
解決されてた。`yarn publish` し直してくれたらしい。手元、circleci上でもインストールできた

```
Trace: 
  Error: https://registry.yarnpkg.com/webpack-combine-loaders/-/webpack-combine-loaders-2.0.2.tgz: invalid tar file
```

`.npmignroe` に追加してくれたら、npm installは通るだろうが、`yarn`側のデメリットあるのか（`yarn`使ってないので不明）
KinesisでResourceNotFoundException

---

LambdaもKinesisも東京リージョン、ストリーム名も間違っていないのになぜか下記のエラーが。

```
com.amazonaws.services.kinesis.model.ResourceNotFoundException: Stream ストリーム名 under account 01234567890 not found. (Service: AmazonKinesis; Status Code: 400; Error Code: ResourceNotFoundException; Request ID: xxxx-xxxx-xxxx-xxxx)
```

この方の記事が関係しているのかな？

http://kechanzahorumon.hatenadiary.com/entry/2015/07/06/183945

（詳しく調べてないのでよくわからず）


環境
---

* aws sdk for java 1.11.49


対応
---

下記のように、明示的に書いてあげたら直る。

```
final AmazonKinesisClient amazonKinesisClient = new AmazonKinesisClient(); amazonKinesisClient.setRegion(Region.getRegion(Regions.AP_NORTHEAST_1));
```

暗黙的に解決してくれよ（心の声）
ブロック要素を、上下左右の中央寄せをする方法

例えば以下のHTMLがある。

```html
  <body>
    <header>
      <h1>title</h1>
    </header>
  </body>
```
この際、h1のtitleを上下左右に中央寄せしたい場合のメモ。

#方針
1. 左右の中央寄せをする
2. 上下の中央寄せをする

#1. 左右の中央寄せ
テキストの左右中央寄せは、text-align:center;を使う。

```css
header{
  height: 48px;
  background-color: white;
}

h1{
  text-align: center;
}

```

これで左右はOK

#上下の中央寄せ

上下の中央寄せは、親要素と同じピクセル数でline-heightを指定してあげればできる。

```css
header{
  height: 48px;
  background-color: white;
}

h1{
  text-align: center;
  line-height: 48px;
}

```

親要素のheaderは48pxなので、子要素のh1も同じ数だけline-heightしてあげる。

以上。
ssh踏み台サーバ越しに、いろんなサービスにアクセスする方法集

#背景
こんな感じで、sshで接続できるのは、とあるサーバが１台だけで
その先にプライベートネットワーク上では、アクセスできるmysqlに繋ぎたいときどうすれば良いかの話です。
![Network diagram (1).png](https://qiita-image-store.s3.amazonaws.com/0/44351/c75a0d27-e8cb-869f-c3b6-f19eccb5046c.png)

#方法
##Windowsの場合

Tera Termにすばらしい機能がついてます！
SSHポート転送！！
![SSH転送.png](https://qiita-image-store.s3.amazonaws.com/0/44351/391a1bfe-246e-84ef-9b84-df553dbbdc50.png)

Web Serverにsshでログインした状態で、このSSHポート転送でローカルのポートを画像のように設定します。

これにより、mysql -h 127.0.0.1 -P 13306 -u root -pで接続できるようになります。
これだけだと、a5m2とかのsshトンネル接続で良いじゃないかと思われると思います。

私の場合、cakephpから、sshトネリング接続するのが困難だったのでこの手を使いました。

レプリケーションしている場合に
13306は、マスターの3306へ
23306は、スレーブの3306へ
という事が可能になるのです。

ちなみに、Tera Termの設定を保存しておかないと毎回設定する羽目になります。

##Macの場合
いろいろやった結果、Coccinellidaが一番でした。
~~http://coccinellida.sourceforge.net/~~
https://sourceforge.net/projects/coccinellida/files/

brewでもインストール可能です。
http://macappstore.org/coccinellida/

brew cask install coccinellida


###トンネルを設定と接続
1.上部メニューの小さいてんとう虫をクリックすると「Preferences…」というのがあるので、それを開きます。

2.Tunnelタブを開きます。

3.Addボタンでトンネル設定を追加します。

4.Generalではトンネルになるホストの設定をします。
Name: わかりやすい任意の名前（xxxトンネルとか）
Host: ホスト名
Port: 22 (他のポート指定がある場合はそのポート番号)
User: ユーザー名
Password: パスワード
Identity: 秘密鍵を選択します。

5.Port Forwardingでは、トンネルを介して接続する本命のサーバーの設定をします。Addボタンで追加します。
Type: localのまま
Local Port: 13306 (任意のポートでもいい)
Local Host: localhost
Remote Host: 10.102.55.203(本命のサーバーのIP、ホスト名)
Remote Port: 3306 (他のポート指定がある場合はそのポート番号)

これでsave(保存)。
再びてんとう虫をクリックすると、追加したサーバー名が出ているので、選択して接続します。
パスワードを要求されるので、入力して接続します。
接続成功しても何も起きないので達成感ありません。

あとは、Windowsの時と同じように、ローカルのポートへ接続すればOK
【運用】wikiに遺した方がよい項目を列挙してみた

# 1. サービス概要
　(1) 概要
　(2) ユーザの課題
　(3) 対象ユーザー
　(4) サイトマップ
　(5) リリースバージョン

# 2. 各画面説明
　(1) 機能一覧

# 3. 仕様関連
　(1) ワイヤーフレーム
　(2) DB仕様書
　(3) デザイン関連
　(4) インセプションデッキ
　(5) リーンキャンバス

# 4. プログラム構成
　(1) ツリー図・クラス図
　(2) JavaDoc

# 5. ルール
　(1) Git運用ルール
　(2) チケット更新ルール
　(3) 開発ルール
　(4) コーディング規約
　(5) 運用ルール

# 6. テスト
　(1) テスト仕様書

# 7. ノウハウ
　(1) デプロイ方法
　(2) IP一覧
　(3) システム構成図
　(4) 人間相関図

# 8. FAQ

# 9. KPT結果

# 10. その他
　(1) 環境一覧
　(2) 体制図・チームメンバー
　(3) 環境構築手順 
　(4) 議事録
 　(5) スケジュール
LambdaからKinesisにPutしようとしたらNoSuchMethodError

---

CloudWatchのログを見ると、下記のようなエラーを吐いている。


```
Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.dataformat.cbor.CBORGenerator.getOutputContext()Lcom/fasterxml/jackson/core/json/JsonWriteContext;
```


環境
---

* aws-sdk-java 1.11.22


問題
---

どうやら、aws-sdk-java 1.11.22だと依存するjacksonのライブラリーが古い？のかNoSuchMethodErrorを起こしているくさい

対応
---

SBTだと以下をbuild.sbtに追記

~~~
libraryDependencies += "com.fasterxml.jackson.dataformat" % "jackson-dataformat-cbor" % "2.8.2"
~~~
その瞬間タッチされているかを判定する方法

## はじめに

他所から何らかの通知を受けて画面を更新しようとしたのですが、ユーザーが編集作業をしているときに勝手に更新すると事故りそうな内容だったため、「ユーザーがタッチしていない瞬間」を見計らって更新を掛けたらどうかと考えました。
ただ、その「タッチしているかどうかの判定方法」が調べても出てこなかったので作ってみました。

- Xcode8, Swift3.0

## タッチイベントの監視

まず、`UIWindow`のサブクラスを作り、イベントを監視します。
その中でタッチイベントのみをさばき、タッチ情報を更新するだけです。

```swift:MyWindow.swift
class MyWindow: UIWindow {
    
    var allTouches = Set<UITouch>()
    
    override func sendEvent(_ event: UIEvent) {
        
        if event.type == .touches {
            if let allTouches = event.allTouches {
                for touch in allTouches {
                    switch touch.phase {
                    case .began:
                        self.allTouches.insert(touch)
                    case .ended, .cancelled:
                        self.allTouches.remove(touch)
                    default:
                        break
                    }
                }
            }
        }
        
        super.sendEvent(event)
        
        //allTouches = Set<UITouch>(allTouches.filter({ $0.phase != .ended && $0.phase != .cancelled }))　これだとメモリ効率悪いかな
        allTouches.filter { $0.phase == .ended || $0.phase == .cancelled }.forEach { allTouches.remove($0) }
    }
}
```

ちなみに、`UITouch`の`phase`プロパティは、`UIScrollView`だかジェスチャーだかどこかで処理がコケると`phase`が`.ended`に変わる現象を確認しています（滅多に起きないんですが）。そのために、`sendEvent`後半でわざわざ`phase`を見て間引いています（この間引く処理が無いとゴミ情報が残り、誤判定します）。

## UIWindowを置き換える方法

Storyboardを使っている場合で、既存の`UIWindow`を自前のクラスに置き換える方法は
[subclassing UIWindow while using storyboards](http://stackoverflow.com/questions/10403137/subclassing-uiwindow-while-using-storyboards)
を参考にしました。

```swift:AppDelegate.swift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    // http://stackoverflow.com/questions/10403137/subclassing-uiwindow-while-using-storyboards
    
    var myWindow: MyWindow?
    
    var window: UIWindow? {
        get {
            if myWindow == nil {
                myWindow = MyWindow(frame: UIScreen.main.bounds)
            }
            return myWindow
        }
        set {}
    }

	略
}
```

## 使い方の例

```swift:ViewController.swift
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.didTimer), userInfo: nil, repeats: true)
    }
    
    @objc private func didTimer() {
        if let myWindow = (UIApplication.shared.delegate as? AppDelegate)?.myWindow {
            print(myWindow.allTouches.isEmpty ? "タッチ無し" : "タッチ有り")
        }
    }
}
```

タイマーで定期的にカスタムウィンドウの`allTouches.isEmpty`を見ているだけのサンプルコードです。

## 所感

実際には、他所から通知を受けてタッチ状態だったら、１秒後にもう一回タッチされていないか確認する（繰り返す）...といった処理を書きました。
今回はそれで十分でしたが、もう少しレスポンスが欲しければタッチが終わった瞬間にイベントを通知するなどという方法も実現できそうです。

また、タッチの監視なんて`ViewController`のtouches系を処理すりゃええやん！とツッコミがありそうですが、`UIWindow`系でやれば、どのビューコントローラーからでもタッチの有無情報が見られるというお手軽さがあるかと思われます。

いろいろ書きましたが、他にもっとスマートな判定方法が有ったら教えてくださいm(_ _)m
三方良しのプロジェクト立ち上げをするために　〜 エンジニア視点 〜

# プロジェクト立ち上げ時に大切にしてほしいこと
## ①チームメンバーが**ほぼ**同じ方向を向いてスタート地点に立っていること。
　アジャイルとかスクラムとかの手段だけでは、解決できない。
　誰かが決めてくれる、誰かが言い出すのを待つのではなく、全て自分ごとにしながら行動することで、徐々に同じ方向にベクトルが向いてくる。

## ②顧客のためのサービスになっていること。
　短期的な収益や株主への配当を考えるのではなく、
　顧客のことを長期的に考え、顧客の立場になって考えられていることがサービス本質であると思う。

　- 顧客は誰なのか
　　広域の意味にするとブレる。狭義の意味になってもよいので、できるだけわかりやすく考える。
　　考え方の例）飲食店向け⇒飲食店の誰向け？どれくらいの店舗の規模？
　　　　　　　　飲食店のマネージャー⇒年齢は？なんの管理をしている人？？
　　　　　　　　飲食店のの41歳男性マネージャー⇒どんなことが趣味？業務でどんな悩みがあるの？？
　　と、顧客のことをブレイクダウンし、深く突き詰めて考えていく。
　　百聞は一見に如かずなので、インタビューをしたほうがより具体的な顧客になっていく。

　- 顧客の問題は何なのか
　- 顧客はどういう状態になっていることが理想か
　- 顧客の数（ターゲット）はどれくらいいるのか

## ③プロデューサー（企画、マーケ）、エンジニア間で、合意形成ができている状態になること。
　サービスの企画に外れやブレはつきもの。
　ただ、合意形成がなされている状態であれば、失敗を糧に改善を行ったり、
　新しいアイデアが生まれる。
　サービスは常に多種多様に変化するものなので、変化に負けない合意形成の手法であったり、
　変化に対応できる人間関係を構築していくことが大事である。
　プロジェクト・プロダクトで目指す方向は、常に皆で確認し、合意形成をしながら突き進んでいけば、
　自ずと、よいアウトプットが産みだされ、強いチームが形成されていく。

# プロジェクト立案や企画をするときに使われる手法（参考サイト）
## フレームワーク全般
http://keiei-manabu.com/criticalthinking/framework-3.html

## ３C
https://blog.kairosmarketing.net/marketing-strategy/3c-analysis/

## SWOT
https://blog.kairosmarketing.net/marketing-strategy/swot-analysis/

## リーンキャンバス
https://ferret-plus.com/3175

# 顧客の現状を知る
プロデューサー、マーケター、エンジニアが一体となって考察する。
文章だけではなく、チーム全体で顧客の現状を考え、同じ時間を共有することに意義がある。

絵を描くのが認識を合わせる手法としてはベター。
ユーザストーリーマッピングやカスタマージャーニーがわかりやすい。

## ユーザストーリーマッピング（参考サイト）
http://qiita.com/Koki_jp/items/6aebc73bedd0a932dcb8

## カスタマージャーニー（参考サイト）
http://www.xlisting.co.jp/marketing-x/digital-marketing/digital-marketing_various/how-to-make-customer-journey-map
GoFのデザインパターンまとめ

# はじめに
本投稿は<a href="http://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797327030/ref=sr_1_1?ie=UTF8&qid=1454743284&sr=8-1&keywords=java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80" target="_blank">Java言語で学ぶデザインパターン入門</a>のデザインパターンをまとめた記事です。今後も更新していく予定です。

## デザインパターンまとめ

- 生成に関するパターン
 - Abstract factory
 - Builder
 - <a href="http://qiita.com/shoheiyokoyama/items/d752834a6a2e208b90ca" target="_blank">Factory Method</a>
 - <a href="http://qiita.com/shoheiyokoyama/items/61826e158b3c4a259065" target="_blank">Prototype</a>
 - <a href="http://qiita.com/shoheiyokoyama/items/c16fd547a77773c0ccc1" target="_blank">Singleton</a>
- 構造に関するパターン
 - <a href="http://qiita.com/shoheiyokoyama/items/bd1c692db480b640c976" target="_blank">Adapter</a>
 - Bridge
 - Composite
 - Decorator
 - Facade
 - Flyweight
 - Proxy
- 振る舞いに関するパターン 
 - Chain of responsibility
 - Command
 - Interpreter
 - <a href="http://qiita.com/shoheiyokoyama/items/3f42d0057d9d5a861039" target="_blank">Iterator</a>
 - Mediator
 - Memento
 - <a href="http://qiita.com/shoheiyokoyama/items/d4b844ed29f84a80795b" target="_blank">Observer</a>
 - State
 - Strategy
 - <a href="http://qiita.com/shoheiyokoyama/items/c2ce16b4f492cd014d50" target="_blank">Template Method</a>
 - Visitor

## ソースコード

[shoheiyokoyama/design-pattern_java](https://github.com/shoheiyokoyama/design-pattern_java)
OS X に DynamoDB Local を Homebrew でインストールして brew services で起動する

※ Homebrew から DynamoDB Local の Formula が削除されているため、インストールに下記の方法を利用することはできなくなっています。（@shirakiya さん、コメントありがとうございます。）

DynamoDB を使用した開発をすることになり DynamoDB Local を Mac のローカルにインストールすることにしたのでその方法をメモっとく。

# DynamoDB Local を Homebrew でインストールする

Homebrew で DynamoDB Local をインストールする。

```shell-session
$ brew install dynamodb-local
```

# DynamoDB Local を起動する

DynamoDB Local は `brew services start dynamodb-local` で起動できる。

```shell-session
$ brew services start dynamodb-local
==> Successfully started `dynamodb-local` (label: homebrew.mxcl.dynamodb-local)
```

また、brew services list で起動状況が確認できる。

```shell-session
$ brew services list
Name           Status  User   Plist
dynamodb-local started takuya /Users/takuya/Library/LaunchAgents/homebrew.mxcl.dynamodb-local.plist
```

# DynamoDB JavaScript Shell にアクセスする

DynamoDB Local には DynamoDB JavaScript Shell という Web インターフェイスが用意されている。そこから DynamoDB を操作することができ、簡単なチュートリアルも付属している。DynamoDB Local が起動している状態で下記の URL にアクセスすると DynamoDB JavaScript Shell が表示される。

http://localhost:8000/shell

![dynamodb-javascript-shell.png](https://qiita-image-store.s3.amazonaws.com/0/67627/58295ed0-64aa-019c-6cf2-8fc7efe35aaf.png)

# DynamoDB JavaScript Shell の接続先データベースを変更する

DynamoDB Local ではアクセスキー ID ごとにデータベースが作成される。DynamoDB JavaScript Shell で開発中のアプリケーションのデータベースを確認したい場合は、アプリケーションで設定しているアクセスキー ID を DynamoDB JavaScript Shell の Options（右上の歯車アイコンをクリックすると表示される。）に設定することを忘れないようにしよう。

![dynamodb-javascript-shell-options.png](https://qiita-image-store.s3.amazonaws.com/0/67627/58391b9e-8ce1-ce43-cdda-f5e4bd2e307a.png)

# DynamoDB Local を停止する

DynamoDB Local を `brew services stop dynamodb-local` で停止できる。

```shell-session
$ brew services stop dynamodb-local
Stopping `dynamodb-local`... (might take a while)
==> Successfully stopped `dynamodb-local` (label: homebrew.mxcl.dynamodb-local)
```

# 参考文献

http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.html
CloudSearchの内部動作と、それを知らぬがゆえにハマったこと

# この記事の対象
CloudSearchを使い始めたばかりの方へ。
CloudSearchのことを良く知らないまま、運用を引き継いだエンジニアの方へ（私）。

# 内部動作について

## スケールする時、何がおきているのか
CloudSearchはインデックス再構築の際に、S3上にその時点でのドキュメントとインデックスを保存します。
スケールが発生する際、このS3上のデータを読み込んでインスタンスが新規に起動するのですが、注意点として、インデックス再構築後にアップロードしたドキュメントは、インスタンスが立ち上がり、アクセス可能になった状態から随時更新されていきます。

この仕様は認識しておかないと、後述のように痛い目をみることがあります。

## インスタンスタイプを変更する時、何が起きているのか
インデックス再構築が同時に走るため、非常に長い時間PROCESSINGステータスとなるインスタンスタイプ変更。
この間、本番環境に影響は無いのか？内部動作を知っていると、安心して実行できます。

結論として、ドキュメントのアップロードを実行し続けていなければ、本番環境には一切影響がありません。

1. 変更前インスタンスにてインデックス再構築（EMRクラスターによる実行のため、変更前インスタンスには影響無し）
2. 構築されたインデックスを用いて新規インスタンスが起動
3. 2の直後、変更前インスタンスが削除される

もし1と2の間にドキュメントアップロードを行っていた場合、変更後のインスタンスが起動した後に、差分更新が発生します。
この更新が完了するまで、若干パフォーマンスが落ちる可能性があるようです。
変更の際は、あまり大量の更新を行わないのが吉ですね。

# ハマったこと

## NEEDS INDEXING状態だとオートスケールされない
2016/5の話ですが、オペレーションミスで、NEED INDEX状態のままサービス提供をしてしまい、スケールせずに応答不能となる事故が発生しました。
直前に気付いたため、再構築には非常に時間がかかるので、果たして本番サービス適用中にPROCESSINGにして何か問題が出ないか、非常にバタバタしました。上述の内部動作を知っていればそこまで慌てなかったんですが、、

これはよく考えると、逆手に取って負荷テストでスケールしたくないのにスケールしてしまう場合に利用できるかもしれないですね。


## インデックス再構築をサボっていると、データが消えたと勘違いするかも

「スケールする時、何がおきているのか」の通り、完全にドキュメントが同期されてからアクセスできるようになるわけではないので、「あれっ、登録した筈のデータが無い！誰か消しちゃった！？」と慌てて再登録を行ったものの、全然改善されないなんでだー！という事故に遭遇しました。
もちろん本番サービスの場合、ドキュメント同期中のインスタンスにアクセスしてしまったユーザは「あれ？データが無い！」となります。

ちなみに管理コンソールのSearchbleDocumentsも、どのインスタンスにアクセスして返した数字か分からないので、当てになりません、、（インスタンス毎にSearchbleDocumentsを表示していて欲しかった）

差分ドキュメントが大量にあると、こうした事故に遭遇する可能性があります。
みんな、お金はかかるけど、こまめにインデックス再構築はしよう！（冷静に考えると、この仕様でインデックス更新に課金されるのって鬼仕様ですね、、）

## boto3でDesired Replication Count管理してたらギャッとなった話

アクセスのバーストが予測される状況に備えて、CloudWatchルールからLambdaを呼び出して、事前増強するようにしてました。

http://boto3.readthedocs.io/en/latest/reference/services/cloudsearch.html#CloudSearch.Client.update_scaling_parameters

で、当初はデフォルトのインスタンスで運用してたので、DesiredInstanceTypeはrequiredでもないし、指定してなかったんです。
ある時管理コンソールからインスタンスタイプを上げて、しばらくした後このツールを使ったら、恐怖のNEEDS INDEXIN状態（オートスケールしない）になってしまってました。

DesiredInstanceTypeを明示しないと、Use Defaultに変更する、と同義として捉えられてしまうようです。

幸い、PROCESSING状態であればちゃんとスケールするので手動対応にて事なきを得ましたが、ヒヤリハット事例でした。

# まとめ

CloudSearchはちゃんと勉強しないと運用できないよ！安易に引き継いじゃ駄目だよ！
AWSサポートにはとてもお世話になりました。多謝。
jqを使って {"日付": {"number": XX}} を {"date": "日付", "number": xx}に整形する


はじめに
=======

jq という JSONを整形してくれるツールは便利なのですが、いつも JSONのkeyが不定の場合(例えばkeyが日付)に悩んでしまっていたのですが、解法を見つけたのでメモっておきます。

`{"日付": {"number": XX}}` を `{"date": "日付", "number": xx}` に整形する
=========
例えば以下のようなJSONがあったとします。

```json:sample.json
{
  "2016-11-01": {"number": 100},
  "2016-11-02": {"number": 110},
  "2016-11-03": {"number": 120},
  "2016-11-04": {"number": 130}
}
```

これを

```
{
  "date": "2016-11-01",
  "number": 100
}
{
  "date": "2016-11-02",
  "number": 110
}
{
  "date": "2016-11-03",
  "number": 120
}
{
  "date": "2016-11-04",
  "number": 130
}
```

にしたいときは、

```bash:example
jq 'to_entries[] | {date: .key, number: .value.number}' < sample.json
```

でいけます。

ちょっと説明
---------
ポイントは `to_entries` で、

```bash:example
jq 'to_entries' < sample.json
```

は ↓ のようになります。

```json:output
[
  {
    "key": "2016-11-01",
    "value": {
      "number": 100
    }
  },
  {
    "key": "2016-11-02",
    "value": {
      "number": 110
    }
  },
  {
    "key": "2016-11-03",
    "value": {
      "number": 120
    }
  },
  {
    "key": "2016-11-04",
    "value": {
      "number": 130
    }
  }
]
```

あとは普通に整形していけば良いというわけです。

おまけ： CSVやTSVにしたいとき
------

ちなみに csv や tsv として出力したい場合は `-r` オプションと最後に`@csv` や `@tsv` を付けると良いです。

```bash:example
% jq -r 'to_entries[] | [ .key,  .value.number ] | @tsv ' < sample.json
2016-11-01      100
2016-11-02      110
2016-11-03      120
2016-11-04      130
```

さいごに
=======

微妙な悩みが解決してスッキリしました...
EnvDTEのVCCodeFunctionのDeclarationTextを取得するとArgumentExceptionになる。 


C++のコードからさらにコードを生成するようなVisualStudioのaddinを作ってるのですが
C#でEnvDTEのVCCodeFunctionから宣言を取得しようとDeclarationTextを取得すると
たまに落ちることがあります。
どういうときに落ちるか判明したので以下記載。

以下のようなコードだとDeclarationTextが取得できる。

```cpp
class Test
{
    public:
        void func();
};
void Test::func(){}
```


以下のようなコードだとDeclarationTextが取得できない。
(例外ArgumentExceptionが発行される。)

```cpp
class Test
{
    public:
        void func(){}
};
```

DeclarationTextにアクセスする際にtry-catchで包むと回避できます。
またTypenameとDisplayname使うと定義を何となく作ることができます。

```csharp
public void func(VCCodeFunction codeElem)
{
        try
        {
            Trace.WriteLine(codeElem.DeclarationText);
        }
        catch
        {
            Trace.WriteLine(codeElem.TypeString + " " +codeElem.DisplayName + ";");
        }
}
```

が、上記の方法ではvirtualやoverrideキーワードが取得できないのが悩ましいところです。
誰か解決策知ってたら教えてください…
CALayerのサブクラスCATextLayerを使ってみる

例によって単純に表示させるだけに1時間かかったので備忘録😩

以下は最低限必要なコードです。

```swift
let textLayer = CATextLayer()
textLayer.frame = CGRectMake(0,0, 20, 10)
textLayer.string = "hoge"
textLayer.foregroundColor = UIColor.whiteColor().CGColor
textLayer.fontSize = 10.0
// 次の行は、ないと非Retina状態でレンダリングされる by Takabosoftさん
textLayer.contentsScale = UIScreen.mainScreen().scale
self.view.layer.addSublayer(textLayer)
```

他のプロパティもあります。以下のリファレンスを参照して下さい。

[CATextLayer \- QuartzCore \| Apple Developer Documentation](https://developer.apple.com/reference/quartzcore/catextlayer#//apple_ref/swift/cl/c:objc(cs)CATextLayer)

文字列を別の要素と連動して動かしたいんです。おとなしく**UILabel**を使った方がいいのだろうか…

---
ブログやっています：http://weed.nagoya
NCL / NetCDF > & > Named coordinates & coordinate arrays

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
```

NetCDFファイルを描画するためのNCLについて。
NCAR Command Language (NCL)。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm

NCLのサンプルコードを見ていて、意味が分からなかったこと。

以下で説明を見つけた。

> ## Named coordinates & coordinate arrays
>
>imagine a geophysical dataset with dimensions [time (31 days), height (30 pressure levels), latitude (by 2 degrees), longitude (by 2 degrees)]
>
>DATA = new( (/31,30,90,180/),double)
>printVarSummary(DATA)
>
>now you want to name the dimensions
>DATA!0 = "time"
>DATA!1 = "lev"
>DATA!2 = "lat"
>DATA!3 = "lon"
...
> but the dimensions might actually be coordinates
and they might have values
time_coord = ispan(1,31,1)
lev_coord = fspan(1000.,2.,30)
lat_coord = fspan(-89.,89.,90)
lon_coord = fspan(0,360,180)
> 
>DATA&time = time_coord
DATA&lev = lev_coord
DATA&lat = lat_coord
DATA&lon = lon_coord

`!`で定義したものに対して`&`で定義(`time_coord`など)を設定できる、という理解をした。
c Initializing array of structures

http://stackoverflow.com/questions/18921559/initializing-array-of-structures

```c
#include <stdio.h>

int main(int argc, char *argv[])
{
	struct Books {
	   char  title[50];
	   char  author[50];
	   char  subject[100];
	};

	struct Books lala[] = {
		{"a", "a", "a"},
		{.title = "b", .author = "b", .subject = "b"}
	};

	printf("%s\n", lala[1].title);
	return 0;
}
```
NCL / NetCDF > ! > now you want to name the dimensions > DATA!0 = "time"

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
```

NetCDFファイルを描画するためのNCLについて。
NCAR Command Language (NCL)。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm

NCLのサンプルコードを見ていて、意味が分からなかったこと。

以下で説明を見つけた。

http://www.vericuljak.net/UCLA/StudentsActivities/Tutorials/NCL/ncl_1.html

>now you want to name the dimensions
>DATA!0 = "time"
>DATA!1 = "lev"
>DATA!2 = "lat"
>DATA!3 = "lon"

余談だが、上記のページで"!"で検索すると54個の候補が見つかる。
上記のページに辿り着くまでに数十ページを見た。
この中で自分が見たかった上記の部分にたどり着いたのはほとんど奇跡のようなものだ。

言語を作るときは情報の検索性の高さも考慮して欲しいと思う。
!や@や$の機能を探すユーザの身になってほしい。

R言語というのも検索で絶望的なものだ。そのため、自分でQiita記事を作り検索性を高めたつもりだ。
NCL / NetCDF > load "..../gsn_code.ncl" > pythonのimport相当

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
```

NetCDFファイルを描画するためのNCLについて。
NCAR Command Language (NCL)。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm

NCLのスクリプトにて先頭に以下のような表記をする。

```
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
```

こうすることでgsn_code.nclに記載の機能が使えるようだ。

上記ファイルがあるかどうかは [locateコマンドを使う](http://qiita.com/7of9/items/60255794936bdb3d8a69#comment-522a9c50f9f13c3c1a4f)ことで見つかる

```bash
$ locate gsn_code.ncl
/home/wrf/WRFV3/ncl/lib/ncarg/nclex/gsun/gsn_code.ncl
/home/wrf/WRFV3/ncl/lib/ncarg/nclscripts/csm/gsn_code.ncl
```

2箇所出てきた。
NCL / NetCDF > Arrays > u2 = u(0:0, :, :)

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
```

NetCDFファイルを描画するためのNCLについて。
NCAR Command Language (NCL)。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm

Arrayの扱い。

Arrayは`u(0:0,:,:)`のような表記をする。
最初、ひっかかったのは「関数なのか、Arrayなのか」を見た時に分かりにくいこと。
( NCLに関数があるかは未消化 )。

http://www.ncl.ucar.edu/Document/Language/array_dim_reduce.shtml

> ## Array Dimension Reduction

> Is a feature that causes arrays with a dimension = 1 to collpase to one fewer dimensions. 

>Array (13,64,128): sub-select u2 = u(0,:,:). u2 now (64 x 128). No other information is lost, all attributes, and coordinate variables for the original three dimensions are still associated with u2. 

>To get around this automatic dimension reduction, the following syntax is required: 
u2 = u(0:0,:,:).

Arraysに関する他の事項は以下のArrays節を参照する
http://www.ncl.ucar.edu/Document/Language/index.shtml
Unityアフィリエイトに参加してみた

今日、Unityさんから「アフィリエイトプログラム出来たぜ！」ってメール来てたので、さっそく参加してみた(^^)/
さすがUnityさん、めっちゃ簡単にアフィリエイトリンク設置出来ましたよ☆

# はじめに
**[【公式】Unity Affiliate プログラム](https://unity3d.com/jp/affiliates)**
**[【公式】Unity Affiliate ログインページ](https://console.partnerize.com/login/phg/jp?)**
**[【公式】アフィリエイトリンクメーカー](https://assetstore.unity.com/linkmaker?locale=ja-JP)**
**[【自サイト】てんぷら王国（Unity Affiliateを設置したサイト）](https://tempura-kingdom.jp/)**

AssetStoreのAssetを紹介することで報酬が発生するアフィリエイト。
参加手順も簡単で

***

[参加ページ](https://unity3d.com/jp/affiliates)から申請
↓
審査（５営業日以内）
↓
[リンクメーカー](https://assetstore.unity.com/linkmaker?locale=ja-JP)から発行されるリンクをサイトに設置
↓
[ログインページ](https://console.partnerize.com/login/phg/jp?)で報酬確認

***

まだ試した程度なので随時内容はこの記事を更新していく予定。

# [Unity Affiliate プログラムに参加](https://signup.performancehorizon.com/signup/jp/unitytechnologies)
必要事項を記入の上申請。

<img width="525" alt="スクリーンショット 2016-11-04 15.26.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/96554/94c4f000-cb5d-8951-cc28-be10a6df148c.png">

確認メールが来る。審査があって5日以内に返信あるとのこと。

<img width="452" alt="スクリーンショット 2016-11-04 15.25.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/96554/47a0f4ff-6e32-683a-71b4-4e8f18aacd98.png">

そしたら即効返信あった(笑)まるで自動返信だったかのような1分以内の返信(^^;)

<img width="450" alt="スクリーンショット 2016-11-04 15.29.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/96554/87185d67-f830-a4e9-bb60-a4553e1dd556.png">

# [アフィリエイトリンクメーカー](https://assetstore.unity.com/linkmaker?locale=ja-JP)でリンクをサイトに設置
Affiliate ID（aid）に発行されたアフィリエイト・トークンを入れることでリンクを作成することが可能。
Create Linkをクリック。

<img width="717" alt="スクリーンショット 2016-11-04 15.39.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/96554/2376479b-6805-fb4a-74a9-aa659eb3e3bd.png">

バナーの形を選択し、Embed Codeをメモ。こいつをサイトに設置してやればOK。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/96554/3979cd83-dbb2-c638-082c-9e7ec659b25f.png)

Embed Codeを[自サイト](https://tempura-kingdom.jp/)に設置。確かに表示された。簡単！

**PC**
<img width="667" alt="スクリーンショット 2016-11-04 16.16.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/96554/7a6e7711-3ece-e485-317a-df0cbade42bb.png">

**スマホ**
<img width="320" alt="IMG_0227.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/96554/d7e3adde-7cd6-6a0c-e745-7b33935b9b2b.png">

# [Unity Affiliate ログインページ](https://phgconsole.performancehorizon.com/login/unitytechnologies/jp?)から報酬確認
まだそんなに確認してないが、とりあえず支払いは日本円が可能なよう。

<img width="781" alt="スクリーンショット 2016-11-04 16.00.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/96554/2f573abf-259d-9c74-9d10-e4418b638d93.png">

# リンク
[Unity Affiliate プログラムについて調べてみた](http://qiita.com/murapong/items/3fc6dfb11ed776e594dc)
[Unity Asset Storeのアフィリエイトプログラム開始！【Unity】【アセット】](http://kan-kikuchi.hatenablog.com/entry/Unity_Affiliates)
[AssetStoreのアフィリエイトを早速使ってみた](http://caitsithware.com/wordpress/archives/1944)

# 最後に
[個人で販売してるAsset](http://qiita.com/tempura/items/d8048ef72c94b59778f9)でいずれパブリッシャーとして参加する予定。
Unityの侵略が着々と進んでいくなぁ〜w
NCL / NetCDF > tag = sprinti("%02i", 314) / sprintf()

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
```

NetCDFファイルを描画するためのNCLについて。
NCAR Command Language (NCL)。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm


以下のような記述を見つけた。

```
tag = sprinti("%02i", 314)
```

整数の標準?出力にはsprinti()という関数があるようだ。

https://www.ncl.ucar.edu/Document/Functions/Built-in/sprinti.shtml

double型の場合は以下を使う。

https://www.ncl.ucar.edu/Document/Functions/Built-in/sprintf.shtml

１つの総称関数を整数とdouble両方の型に使えれば便利なのだが。
Google SreadSheetでセルから数値のみ取得したいときのメモ+営業日数の備忘録

# Whats
数値だけセルから抜き出したいときの備忘録

|||
|---|---|---|
||A|B|
|1|目標300円|
|2|300|

```
A2=int(SPLIT(A1, CONCATENATE(SPLIT(A1, "0123456789"))))
```

# 営業日
```
A1=eomonth(today(),-1)+1 // 今月開始日
B1=EOMONTH(TODAY(),0) // 今月終了日
C1=today() // 今日の日付

// 日数
D1=YEAR(TODAY()) // 今年度の数
E1=MONTH(TODAY()) // 今月の数
F1=day(today()) // 今日の日数
H1=day(eomonth(today(),0)) // 今月の日数
J1=H1-F1 // 今月の残りの日数
K1=NETWORKDAYS(A1,B1) // 今月の営業日数
L1=NETWORKDAYS(B1,C1) // 今月の残りの営業日数
M1=NETWORKDAYS(A1,C1) // 今日のの営業日数
```

## 関係ないけどExcelのPDF化のメモ on Excel 2017 on Mac
1.  File -> Print... -> Scale to fit
2.  File -> Save as... -> File Format PDF, Check Sheet check box  


# References
NCL / NetCDF > マップの表示 > gsn_csm_contour_map(wks,arr1, res1) / res1の定義

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
```

NetCDFファイルを描画するためのNCLについて。
NCAR Command Language (NCL)。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm

https://www.ncl.ucar.edu/NclScripts/panellab.ncl
にサンプルスクリプトがある。

### gsn_csm_contour_map()

この中で注目したのは以下。

```
 plot(0)  = gsn_csm_contour_map(wks,arr1, res1)
```

http://www.ncl.ucar.edu/Document/Graphics/Interfaces/gsn_csm_contour_map.shtml
> Creates and draws a contour plot over a map.

### 引数のres1

引数のres1は以下のように定義されている。

```
;-------------------------Plot 1--------------------------------------
  res1                         = res
  res1@tiMainString            = " "
  res1@mpRightCornerLonF       =   18.92471
  res1@mpRightCornerLatF       =   49.78167
  res1@mpLeftCornerLonF        =    4.037801
  res1@mpLeftCornerLatF        =    42.74934
  res1@cnLevelSelectionMode    = "ExplicitLevels"
  res1@cnLevels                = (/5,25,50,100,200,400,500/)
  res1@cnFillColors            = (/26,27,28,29,30,32,2,3/)
```

### res1に代入しているres

res1に代入しているresは以下のようになっている。

```
 res                        = True
  res@gsnFrame               = False
  res@gsnDraw                = False
  res@cnRasterModeOn         = True
  res@cnLinesOn              = False          ; Turn off contour lines.
  res@cnFillOn               = True           ; Turn on contour line fill.
  res@cnLineLabelsOn         = False          ; Turn off line labels.
  res@cnInfoLabelOn          = False          ; Turn off informational label.
  res@lbLabelBarOn           = False
...
```

Trueを最初に代入して、プロパティ?を設定している。
このresの設定が共通設定として、下の方のres1, res2, res3などに使われる。
アジャイル・スクラム導入に際して、参考にしていたサイト集（随時更新）

# 概念的なやつ
http://www.slideshare.net/takigawa401/30-15760436

# 要点ごとの説明
http://morizyun.github.io/blog/scrum-agile-xp-book-review/

# スクラムマスターに関して（スクラムの初歩）
http://www.slideshare.net/yangiYa/csm2014-1114

# インセプションデッキ
http://www.slideshare.net/rootmoon/agile-samurai
http://www.sekai-lab.com/times/?p=985

# ユーザストーリー
http://hosukepoi.hatenablog.com/entry/2013/05/30/222338

# プロダクトバックログ
http://kray.jp/blog/attractive-product-backlog/

# 勘違いアジャイル
http://www.slideshare.net/Ryuzee/agile-day?next_slideshow=1

# 開発の透明化
http://kray.jp/blog/agile_entrusted_dev/

# もし女子高生がRedmineで「スクラム」開発をしたら
http://www.atmarkit.co.jp/fjava/index/index_scrum.html

# 振り返りの手法
http://www.objectclub.jp/download/files/pf/RetrospectiveMeetingGuide.pdf
Laravelで都道府県のプルダウンメニューを作ってみる

以下の記事を見て、DBを使うのは色々と無駄が多いなと思ったので、設定ファイルを使う例を紹介します。設定ファイルはお好きにコピペで使いまわしちゃってください。
[Laravel5で都道府県のプルダウンをデータベースから取得する（自分用メモ）](http://qiita.com/qwe001/items/3f06ea17e879aee4c63d)

## データの準備
Laravelではconfig下に好きなファイルを作成でき、定数的な使い方ができる。` 定義した値はconfig('ファイル名.キー名') `でアプリのどこからでも取得できる。配列の入れ子ももちろん可能。

```php:pref.php
<?php 
return array(
  '1' => '北海道', 
  '2' => '青森県', 
  '3' => '岩手県', 
  '4' => '宮城県',
  '5' => '秋田県', 
  '6' => '山形県', 
  '7' => '福島県', 
  '8' => '茨城県',
  '9' => '栃木県', 
  '10' => '群馬県', 
  '11' => '埼玉県', 
  '12' => '千葉県',
  '13' => '東京都', 
  '14' => '神奈川県', 
  '15' => '新潟県', 
  '16' => '富山県',
  '17' => '石川県', 
  '18' => '福井県', 
  '19' => '山梨県', 
  '20' => '長野県', 
  '21' => '岐阜県', 
  '22' => '静岡県', 
  '23' => '愛知県', 
  '24' => '三重県',
  '25' => '滋賀県', 
  '26' => '京都府', 
  '27' => '大阪府', 
  '28' => '兵庫県',
  '29' => '奈良県', 
  '30' => '和歌山県', 
  '31' => '鳥取県', 
  '32' => '島根県',
  '33' => '岡山県', 
  '34' => '広島県', 
  '35' => '山口県', 
  '36' => '徳島県',
  '37' => '香川県',
  '38' => '愛媛県',
  '39' => '高知県', 
  '40' => '福岡県',
  '41' => '佐賀県', 
  '42' => '長崎県', 
  '43' => '熊本県', 
  '44' => '大分県',
  '45' => '宮崎県', 
  '46' => '鹿児島県', 
  '47' => '沖縄県'
);
?>
```

## コントローラーで取得する

```php:SampleController.php
public function sample() {
  $prefs = config('pref');
  return view('sample')->with(['prefs' => $prefs]);
}
```

## ビューで表示する

```php:sample.blade.php
<select>
  @foreach($prefs as $index => $name)
    <option value="{{ $index }}">$name</option>
  @endforeach
</select>
```

## ビューで直接取得＋表示も可能

```php:sample.blade.php
<select>
  @foreach(config('pref') as $index => $name)
    <option value="{{ $index }}">$name</option>
  @endforeach
</select>
```

## 選択された値の保持
検索機能なんかでは選択されたメニューを保持しておきたいことがあると思います。

```php
<select name="_pref">
  @foreach(config('pref') as $index => $name)
    <option value="{{ $index }}" @if(old('_pref') == $index) selected @endif>$name</option>
  @endforeach
</select>
```

## （おまけ）
普通は1~47の数字をpref_idみたいなカラムに保存して、表示する時はIDをもとに文字列を取得すると思う。Userモデルを例にその流れを書いてみる。

### Userモデルに都道府県名を返すメソッドを用意する。

```php:User.php
public function getPrefNameAttribute() {
    return config('pref.'.$this->pref_id);
}
```

```php:user.blade.php
<p>出身地：{{ $user->prefName }}</p>
```
Gitのタグのメッセージを上書きする

# 対象者
Gitで管理しているソフトウェアのリリース用にタグをつけるときにtypoなどをしてしまいタグを付け直したい人

# 経緯
1. タグつけた
    * `git tag -a tagname -m "hogehoge"`
2. hogehoge部分を変えたくなった
    * tagを消して再登録は面倒
3. タグのメッセージを（追記して）上書きしたい

# 実行コマンド
## 完全に上書き
```
git tag -a tagname -f -m "new message"
```
## 前回のメッセージを編集
```
git tag -a tagname -f
```
→ メッセージ編集画面へ（`git commit --amend`の場合と同じ）

# オプション・引数説明
* `-a` (`--annotate`): 注釈付きタグ作成
* `tagname`: タグ名（各自変更）
* `-f` (`--force`): タグが既に存在していたら置き換える
* `-m` (`--message`): タグ付け時のメッセージ
ブロック要素と文字の中央寄せは、違うんだぜ！

中央寄せとは言っても、適用したい要素によって方法が違う。うっかりブロック要素と文字への中央寄せを勘違いしたことがあったので、メモする。

#ブロック要素の中央寄せ

margin: 0 auto; を使う。

index.html
```
<div class="box1">
  <div class="box2">
  </div>
</div>
```

style.css

```
.box1{
  width: 450px;
  background-color: red;
}

.box2{
  width: 150px;
  height:450px;
  background-color: blue;
  margin: 0 auto;
}
```

margin: 0 auto; とすることで、子要素は親要素に対し、上下には要素間の距離をとらない。また左右にはautoが効き、等間隔の距離をとり、結果的に中央揃いになる。

親要素の横幅は450px, 子要素は150pxなので、左右の余白は(450-150)/2 = 150pxとなる。

#テキストの中央寄せ
text-aline: centerを使うだけ。

以上
WordPressのpathを指定したい場合にwp_upload_dir() を利用する


## ファイルの場所から指定する場合

```
dirname(__FILE__) . '/path/hoge'
```

これで、指定したファイルのディレクトの場所から相対的に指定が可能です。

## wp-content/uploads/内を指定する場合

wp-content/uploads/内を指定する場合もっと直接的な指定が可能です

```
wp_upload_dir() ["basedir"]  . '/path/hoge';
```

これで

wp-content/uploads/内にてpathが指定できます。

## 参考

- [関数リファレンス/wp upload dir - WordPress Codex 日本語版](http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_upload_dir)
クラシックスタイルでSinatraのログを手軽に出すメモ

自分用です。プロトタイプ的なものをSinatraで作る機会が多いんだけど、いつもログ周りで一瞬引っかかるのでメモしておきます。なぜクラシックスタイルなのかといえば、普段手癖で小さなAPIを書くときにはだいたいクラシックスタイルで書くからです。

configure の中にまとめるのは趣味です。

```config.ru
require './app.rb'

configure {
    Dir.mkdir("log") unless File.exist?("log")

    access_log = File.new("#{settings.root}/log/access.log","a+")
    access_log.sync = true
    use Rack::CommonLogger, access_log

    error_log = File.new("#{settings.root}/log/error.log","a+")
    error_log.sync = true

    app_log = File.new("#{settings.root}/log/application.log","a+")
    app_log.sync = true
    app_logger = Logger.new(app_log)

    before {
        env["rack.errors"] = error_log
        env["rack.logger"] = app_logger
    }
}

run Sinatra::Application
```

rack.errors は「出力先」なのに対し、rack.loggerは「利用するロガー」である点がややこしいところです。まあそれを言ったら「アクセスログを出すとかエラー出力のキャプチャはSinatra側というよりHTTPサーバ側の都合だよね」的なものとかあれこれあるわけなんですが。

## 参考

- http://recipes.sinatrarb.com/p/middleware/rack_commonlogger
- http://stackoverflow.com/questions/2239240/use-rackcommonlogger-in-sinatra
アジャイル・スクラムを開発に導入するとき

# 前置き
私が経験したことをベースに記載いたします。
こういう観点も加えてほしいなどのお言葉を頂戴できると幸いです。

# 導入の最初が一番肝心
**目的**と**背景（課題）**と**導入ロードマップ**をとことん考え抜いてください。
導入するモチベーションの源泉として、チームを良くしたい、製品を良くしたい、楽しく開発したい、など、背景は様々です。
新しく導入するために様々な失敗をすると思います。
その失敗をどう活かして、上記で記載した３つの要素は、どのように改善していくかの軸になります。

#導入する目的
私が考えた事例を記載いたします。

①自己組織化の推進
②最強のチーム作り
③プロダクトのビジネス価値向上

今後は、目的をベースにどのような行動や要素、数値があるかをブレイクダウンしていきます。

#背景／課題
こちらは、各々のチームや企業様で異なると思います。
背景や課題を考えることで、アジャイルを導入する前の状態と導入後の状態を見出しやすくなります。

・エンジニアのスキルにブレがある
・チームによって開発プロセスが異なる
・属人化を脱却できない
・トップダウンの要望になってしまっている
・エンジニアが採用できず、リソースが確保できないが開発したいプロジェクトがたくさんある

などなど、考えうる課題を列挙したり、課題をヒアリングして、どの課題から解決したいのかチームの方々と話あってみてください。

#導入ロードマップ
自分たち目指す理想像・To Be像を描いてください。

１年後　１チームでアジャイル・スクラムの導入し、開発を成功させる（成功事例を作る）
２年後　複数チームでアジャイル・スクラムの導入し、開発を成功させる（成功事例を再現させる）
３年後　1チームで型を破った開発プロセスを導入し、開発を成功させる（自己組織化）
４年後　to be continued...

といった具合に決めていくと方向性があっているかどうかの指針になります。

# 3つが完成したら
開発を進めながらもう一度、二度、三度と見直してブラッシュアップすることをオススメします。
導入ロードマップが**マクロ**だとすると、目的からブレイクダウンしたアクションが**ミクロ**になります。
マクロとミクロ、両側面から観測をすることで、方向性をブレさせずに導入を進められます。
Windows Update 後から Excel 2010 の VBA が動作しなくなった

Windows Update 後
VBAのファイルの編集が出来なくなった。
大変困っています。

参考資料URL
https://support.office.com/ja-jp/article/Excel-%E3%81%8C%E5%BF%9C%E7%AD%94%E3%81%97%E3%81%AA%E3%81%84%E3%80%81%E5%81%9C%E6%AD%A2%E3%81%99%E3%82%8B%E3%80%81%E3%83%95%E3%83%AA%E3%83%BC%E3%82%BA%E3%81%99%E3%82%8B%E3%80%81%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8B-37e7d3c9-9e84-40bf-a805-4ca6853a1ff4

http://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_excel-mso_windows8/%E6%9C%AC%E6%97%A5%E5%AE%9F%E6%96%BD%E3%81%97/5886d5cb-2449-46e9-a396-2e8142784b5e

updateの中に
KB2553154はインストールされておらず
どうして良いか解からない状態です。

どなたか同じ症状で解決した方法があれば教えて頂きたい所です。
お手数ですがよろしくお願い致します。
ポエム > 強運の持ち主 

@ 強運の持ち主 by 瀬尾まいこさん

>付き合って二年にもなると、いつからか自然にお互いが苦手なものをカバーできるようになってくる。私のお菓子の餡こや生クリームを通彦が横取りし、通彦のハンバーガーの中のピクルスやラーメンのもやしを私が食べる。朝は通彦が低血圧の私を起こしてくれて、夜はこたつで眠ってしまう通彦を、私がベッドまで連れていってあげる。お互いがいるから、二人ともほんの少しだけど生きやすくなっている。

やりとりしあって一年にもなると、いつからか自然にお互いが苦手なものをカバーできるようになってくる。僕のJavascript実装やPowerShell実装をxxxさんが代わりに実装し、yyyさんのC++ Builder XE4実装や英語の添削を僕がする。システムが不安定な時はzzzさんが低障害となるようにPCを設定する方法を掲示してくれて、急ぎでCode Integrationが必要なときのmmmさんを、nnnさんが安定版リリースまでいざなってくれる。お互いがいるから(Qiitaがあるから)、[Qiitaユーザ数(250万人?)]人ともほんの少しだけど生きやすくなっている。


ポエムでした。
Spockノウハウの簡単なまとめ

G*Advent Calendar(Groovy,Grails,Gradle,Spock...) Advent Calendar 2016 4日目。
前日→@PoohSunnyさん
翌日→@h1romas4さん

# TL;DR
Spockでテスト書くときの細々としたノウハウまとめ。

# Spockとは
* テストフレームワーク
* 名前の由来はスタートレックの分析官
* Groovyだけでなく、JavaのUnit Testにも使える
* パラメータの値をパラメタライズする試験を簡単に書ける

http://spockframework.org/

# テスト作成方法
* SpecificationクラスをextendすればOK

## Eclipse利用
JUnitとほぼ同じ感じで作れる

## ファイル手作り
おすすめは
* 拡張子を```.groovy```にする
* テスト実行クラス名の末尾を```Spec```にする


# テスト実行方法
## Eclipse利用
* JUnitと同じで、メソッド名やクラス名からテストを実行できる

## コマンドライン
```gradle test```や```mvn test```から実行できる。

### gradle test
動かすだけ

```shell-session
gradle test
```

オススメ

```shell-session
gradle --info test
```

単一テスト実行

```shell-session
gradle --info test -Dtest.single=XyzSpec
```

### mvn test

```shell-session
mvn test
```

# JUnitとの比較

|観点             |JUnit       |Spock          |
|----------------|------------|---------------|
|テストクラス命名  |Test        |Spec           |
|テストクラス初期化|@BeforeClass|def setupSpec()|
|テストクラス後始末|@AfterClass |def cleanupSpec()|
|テストケース呼び方|Test Case   |Feature         |
|テスト初期化     |@Before     |def setup()          |
|テスト後始末     |@After      |def cleanup()        |
|網羅試験         |@Theory     |@Unroll|
|正常系の期待値確認|Assertion   |Conditions(when, then)|
|異常系の期待値確認|@Test(expected=...)|@FailsWith() or Thrown()|

```groovy:spockの例
import spock.lang.Specification

class XyzSpec extends Specification {
  def setupSpec() {
    //テストクラス内で一度きりの初期化
  }

  def setup() {
    //テストケースごとの初期化
  }

  //@Unroll 書くならここに付ける
  def "何かのテスト"() {
    setup:
    //何かの初期化

    expect:
    //何らかの期待値

    when:
    //何らかの条件

    then:
    //モックメソッドの呼び出し回数確認など
 
    cleanup:
    //後始末(あれば)
  }

  def cleanup() {}

  def cleanupSpec() {}
}
```

Theoriesの話の参考(JUnit)→ http://tt4cs.blogspot.jp/2013/02/theories-and-parameterized-in-junit-4.11.html

@Unrollの話の参考(Spock)→ http://d.hatena.ne.jp/kiy0taka/20111205/1323096586

setup,cleanupの話の参考(Spock)→ http://spockframework.org/spock/docs/1.1-rc-2/all_in_one.html (Fixture Methods)

# よくはまるポイント
## @Unroll使う時はパラメータをdefしないように気をつける

```groovy:ダメな例
@Unroll
def "このテストは実行エラーになります"() {
  def expectedValue

  expect:
  expectedValue == someObject.someMethod(parameterA, parameterB)

  where:
  expectedValue || parameterA | parameterB
  1             || 2          | 3
  2             || 2          | 1
}
```

```groovy:よい例
@Unroll
def "このテストは実行できます"() {
  expect:
  expectedValue == someObject.someMethod(parameterA, parameterB)

  where:
  expectedValue || parameterA | parameterB
  1             || 2          | 3
  2             || 2          | 1
}
```

defした変数はwhere句のパラメータとして選べない。

# 参考になるサイト(随時更新予定)
「Spockのモックサポート」https://github.com/yamkazu/spock-workshop/blob/master/docs/04_mock.md
「SpockにおけるMock、Stub、Spyの違い」 http://uehaj.hatenablog.com/entry/2014/05/09/120930
「モックの基本的な使い方」https://github.com/yamkazu/spock-workshop/blob/master/src/test/groovy/learning/mock/MockSpec.groovy
分かりにくいmarginとpaddingの違いを、人間の身体で例えてみる。

#とにかく分かりにくいんだよ！
cssを触るようになって、marginとpaddingの違いがよく分からなくなる。両方とも、要素間の距離を作るけど、どっちが内で、どっちが外？使い方の違いは？

英語の意味で考えると、marginは「欄外、余白」とかの意味だから、外側のイメージがある。
またpaddingはpadってベッドパッドとか、なんかを中に入れる感があるから分かる。

外と内はこうやって覚えられる。

しかし、これにborderとか入ってくると厄介だ。
#paddingは脂肪、marginは洋服だ！
すいません、完璧に自分が思っただけですｗ
paddingは脂肪。marginは洋服。

paddingは、背景色も含めて幅を取ることができる。
→ 脂肪は増えると、なかなか取ることができない。
→背景色が付いてきちゃう

一方marginは、背景色を含めないで幅をとる。
→ 服はいつでも脱げるので、余計なものが付かない。
→背景色は付いてこない

(書いてて改めて思ったけど、意味ワカンネｗ)

で、borderは、marginとpaddingの間に引かれる。
ようするに、皮膚のようなもんだ。

以上。
CI のビルド時に patch を適用する際の注意点

CI（継続的インテグレーション）のビルド処理の中で patch の適用を実行する際の注意点です。

## 問題点

CI（継続的インテグレーション）のビルド処理で cache に前回のファイルが残っていると、2回目のビルドで **Reversed patch** と判断されて元に戻ってしまうことがあります。

例） `node_modules/foo/bar/xxx` に対して `xxx.patch` を適用したい場合

```bash
# 1回目
$ patch --batch -p0 -i xxx.patch
patching file node_modules/foo/bar/xxx

# 2回目
$ patch --batch -p0 -i xxx.patch
patching file node_modules/foo/bar/xxx
Reversed (or previously applied) patch detected!  Assuming -R. # 元に戻ってしまう
```

## Reserved patch を無視するように

Reversed patch を無視するには、patch コマンドの **`-N`** オプションを使います。

```bash
$ patch --batch -N -p0 -i xxx.patch
patching file node_modules/foo/bar/xxx
Reversed (or previously applied) patch detected!  Skipping patch.
1 out of 1 hunk ignored -- saving rejects to file node_modules/foo/bar/xxx.rej
```

これで元に戻ることを防ぐことはできるのですが、終了ステータスが「異常終了 (1)」となるため、CI 上でこれを実行するとビルドが失敗してしまいます。
また、`node_modules/foo/bar/xxx.rej` ファイルができてしまうのも気になります。

## 解決策

一度 `--dry-run` で試してみて、成功したときだけ実行するようなスクリプトにすればこの問題を回避することができました。

```bash:patch-xxx.sh
#!/bin/bash

PATCH_CMD="patch --batch --silent -p0 -N -i xxx.patch"

if ${PATCH_CMD} --dry-run; then
  ${PATCH_CMD}
fi
```
Nginx + PHP でのPOSTによるファイルアップロードの上限サイズを変更する

Ajaxで10MB程のファイルをPOSTしようとしたらサーバ側でエラー吐いていたので、 NginxとPHP側の設定を確認。

$ cat /etc/nginx/conf.d/default.conf

```
client_max_body_size 10M;
```

$ cat /etc/php.ini

```
upload_max_filesize = 10M
```

いつも見てる設定は大丈夫そうなので、色々と調べてみると、POSTの場合はもう一つ設定が必要だった。
`post_max_size` の上限値を変更したらファイルのアップロードができました。

/etc/php.iniを編集

```diff
+ post_max_size = 10M
- post_max_size = 8M
```

デフォルトで8MBだから今までPOSTでアップロード処理してたけど、あまりきにならなかったな。
ブロック要素を横並びにした時の面倒なバグは、clearfixで解消しよう。

#レイアウトにおいて要素の横並びは非常に大切。
メインコンテンツとサブコンテンツなど、どのサイトにおいても横並びが絶対使われている。
ブロック要素の横並びには、floatを使うんだけど、このfloatが若干面倒くさい。

#floatの面倒臭さとは
この面倒臭さを知るためには、まずhtml, cssにおける親要素の高さの決定する仕組みを知る必要がある。

親要素の高さは、子要素の高さの合計になる。

例えば

```html:index.html
    <div class="contents">
      <div class="upper_content"> 
      </div>
      <div class="lower_content">
      </div>
    </div>


```


```css:style.css
.contents{
  width: 960px;
  background-color: red;
}
.upper_content{
  height: 400px;
  width: 640px;
  background-color: green;
}

.lower_content{
  height: 370px;
  width: 320px;
  background-color: yellow;
}
```

では、親要素であるcontetsのheightは、子要素であるupper_contentのheight 400pxとlower_contentのheight 370pxの合計値770pxとなる。

次に、この前提でfloatの面倒臭さだ。

floatをかけた要素は、浮いている状態になり、高さが認識されなくなる。
もし子要素であるupper_contentとlower_contentを横並びにしたい場合、それぞれにfloatをかける。すると親要素であるcontentsは、子要素の高さを認識することができなくなるので、高さがなくなってしまうのだ！

#それを解決するclearfix:after
さて、そんな面倒なfloat問題をどう解決すればいいのか。

いろいろ方法はあるが、clearfixを作製することが楽なんじゃないかと思っている。


style.css 
(一部抜粋、upper_contentをleft_contentに、lower_contentをright_contentに名称変更
)

```css:style.css 
.contents{
  width: 960px;
  background-color: red;
}

.clearfix:after{
  content: "";
  display: block;
  clear: both;
}

.left_content{
  height: 400px;
  width: 640px;
  background-color: green;
  float: left;
}

.right_content{
  height: 370px;
  width: 320px;
  background-color: yellow;
  float: left;
}

```

```html:index.html
    <div class="contents clearfix">
      <div class="left_content">
      </div>
      <div class="right_content">
      </div>
    </div>
```

このように、横並びをさせる子要素にfloat:leftを、そして親要素に対してclearfixをあててあげることによって、高さが検出されるようになる。

ちなみにafterは、疑似要素と言われるもので親要素の最下部に新たな要素を追加する、というものらしい。（ここらへんはあまり詳しくないので詳細を知りたい方はググってくださいｗ）

で、clearfix内のプロパティをそれぞれ簡単に触れると

```css
.clearfix:after{
  content: "";      /* 文字列を突っ込むというもの。何も入れないので""でOK！ */
  display: block;   /* block要素で表示させるよ！というもの               */
  clear: both;      /* 一番重要。これで回り込みのバグを消している。        */
}
```

てな感じ。

まとめると、「子要素にfloatをかけて、親要素にclear fixを当てる」。

以上。
Apple 的擠牙膏式更新

今天看到 Xcode 8.2 beta 的 release note

> Xcode 8.2 is the last release that will support Swift 2.3.  Please migrate your projects to Swift 2.3 code to Swift 3 syntax by opening the project and choosing Edit > Convert > To Current Swift Syntax.

讓我想到 Apple 對於促使開發者更新開發技術的做法。

有人跟我說過， 
Apple 更新的手段很激烈，
當過了某個版本，就會強制妳不要用什麼東西

這個其實有一部分是不對的。

> 當 Apple 決心要推什麼東西的時候，
> 會很用力地堆
> 而且會很果斷的斷掉舊的做法

這點可以接受，我也樂於擁抱新東西和改變。

## 擠牙膏

為什麼說是擠牙膏呢？
來一些例子好了

### 去 C 化

目前還對 Swift 要去 C 化還有點印象，
就用這個來當例子吧。

Apple 的做法是會在前一個版本先開始提示你說：「我要把這個東西拿掉囉～！」
就把即將會 deprecate 的做法，先以 `Warning` 的方式呈現，

因為一般的開發團隊都會把 IDE 吐出的 `Warning` 數量盡量減到 0 ，
所以 Apple 也讓開發者們，可以先在這段時間先修改掉，
避免更新 SDK 的大版本造成的衝擊太大。

### 更新到 Swift 3

到 Xcode 8 的時候，
其實大家應該都知道從 2.x 到 3.x 的變化都很大。

於是 Apple 也先開放大家可以先用 Swift 2.3 ，
讓開發者們可以先用最小的 effort 讓自家產品可以先在 iOS 10 平台上開發，
先熟悉 iOS 10 的 SDK 後，再來轉換到 Swift 3.x ，
對線上的產品衝擊也會比較小。

## 強制更新

當然，
擠牙膏也有擠完的一天

當擠完的時候， Apple 當然就會要開發者強制更新了

所以說 Apple 無情好像也沒有那麼的無情？
人家都有提早說了 :coffee:
flex-boxで作るサムネイル付きリスト(左辺固定、右辺可変の縦中央寄せ)

左辺固定（サムネイルとか）、右可変(テキストコンテンツ)みたいなレイアウトの構造をflex-boxで表現する時のベースコード。

![flex-box.png](https://qiita-image-store.s3.amazonaws.com/0/18469/4a26d0c5-de8c-d908-78f8-5290b0ead3e5.png)

今までも以下のようなやり方があったけど、コードが長かったりセマンティックな感じでなくモヤモヤしてた感じ
- 古典的なtableタグを使うやり方
- display:table,display:table-cellを駆使していくやり方

### flex-boxを使う利点
- コードを短縮できる
- 縦方向の中央寄せが簡単

```ruby:html

<div class="item">
  <div class="thumb">
    <img src="hoge.png" alt="hogehoge">
  </div>
  <div class="content">
    <p>thumbの説明テキストが入りますよ</p>
  </div>
</div>
```

```ruby:sass
.item {
  display: flex;
  align-items: center;
}

.thmb {
  width: 100px;
}

.content {
  flex: 1;
}
```
manylinux1 wheelhouse 作成手順

## はじめに
デプロイやCI + tox などにおいて、依存ライブラリインストールを安定・高速化するための`wheelhouse`作成手順をまとめておきます。
※ プラットフォームはmanylinux1
※ [PyCon JPのweb構築](https://github.com/pyconjp/pyconjp-website)から学んだ作成手順

## 勉強になったもの
- [manylinux1 wheel を作ってみる - methaneのブログ](http://methane.hatenablog.jp/entry/trying-manylinux1)
- [Pythonプロフェッショナルプログラミング 第2版](https://www.amazon.co.jp/gp/product/B00XZTYMG6/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B00XZTYMG6&linkCode=as2&tag=massa1420d-22)
- [https://github.com/pyconjp/pyconjp-website](https://github.com/pyconjp/pyconjp-website)

## Dockerfile

```Dockerfile
# PyPAが提供するmanylinux1 wheelビルド用Docker
FROM quay.io/pypa/manylinux1_x86_64

COPY ./requirements /app/requirements
COPY ./scripts/make-wheels.sh  /app/make-wheels.sh

VOLUME /app/wheelhouse /app/wheelhouse_new
WORKDIR /app/wheelhouse_new

CMD ["bash", "/app/make-wheels.sh"]

```

## Shell Script

```make-wheels.sh
set -ex

WHEELHOUSE_OLD=/app/wheelhouse
WHEELHOUSE_NEW=/app/wheelhouse_new

# Python-2.7.11(cp27mu)向けに依存パッケージをwheel化
/opt/python/cp27-cp27mu/bin/pip wheel -r /app/requirements/online.txt -f ${WHEELHOUSE_OLD} -w ${WHEELHOUSE_NEW}

# wheelのmanylinux化
cd ${WHEELHOUSE_NEW}
for f in ./*linux_*; do
  if [ -f $f ]; then
    auditwheel repair $f -w .
    rm $f
  fi
done
```

## Commands

```bash
$docker build -f Dockerfile -t massa142/wheelhouse .
$docker run -it --rm -v `pwd`/wheelhouse:/app/$wheelhouse:ro -v `pwd`/wheelhouse_new:/app/wheelhouse_new massa142/wheelhouse
$rm -R wheelhouse
$mv wheelhouse_new wheelhouse
```