OmniAICreator/Qiita-1.07M huggingface dataset:
Cygwin/Msys2 で Windows標準の ping や nslookup を使う (nkf を使わないでシフトJISの出力をUTF-8に変換する方法)

# 前提知識

- Cygwin には ping パッケージがありますが、Cygwin の ping コマンドは Bash Console や Cygwin Terminal を「管理者として実行」していないと使えません（！）。
- Cygwin Terminal が標準設定で前提としている文字コードは UTF-8 です。この設定のまま、シフトJISを出力するWindows標準コマンドやフリーソフト(コマンドラインで使うもの)等を実行して標準出力や標準エラー出力を確認したいケースは結構多いと思います。Visual Studio のコンパイラや nmake、公式の CMake 等を使う際にも応用できます。
- iconv は Msys2 でも使えるので、ここで紹介したやり方は Msys2 でも使えます。

# スクリーンショットを使って文章は簡単に書くよ！

- Cygwin.bat(bash.exeを直接使用)を起動した場合には、ping や nslookup は文字化けしない。(bash.exeがOS標準のコンソールウィンドウで実行されているためと思われる)

![a.png](https://qiita-image-store.s3.amazonaws.com/0/140610/6f8c3f11-509b-605f-b5a3-56447df92c19.png)

- Cygwin Terminal(mintty.exe経由でbashを使用)を起動した場合は(標準の設定では)文字化けする。(Cygwin Terminal はデフォルトでは UTF-8 の出力を期待しているが、Windows標準の ping や nslookup はシフトJIS(CP932)を出力するため)

![b.png](https://qiita-image-store.s3.amazonaws.com/0/140610/0af0cc8e-3046-7f5f-87b9-3d158ea376da.png)

- ネットで「cygwin ping」等で検索すると「nkf」を使う方法が紹介されていたりするが Cygwin 用の「nkf」標準パッケージはない。(わざわざ「nkf」をソースからコンパイルして解決されてますね！)

- 実は、Cygwin に標準でインストールされている「iconv」を使って、シフトJISをUTF-8に変換してやれば良い。<kbd>|</kbd>でパイプをすると標準エラー出力がリダイレクトされない(「権限のない回答」の部分が化ける)ので、<kbd>|&</kbd>で標準出力および標準エラー出力の両方をリダイレクトすると良いことが分かる(下図の通り)。

![c.png](https://qiita-image-store.s3.amazonaws.com/0/140610/f7e94966-086c-cdd2-b98e-56c094c1d964.png)

最後に、上記変換処理をシェルスクリプトにしてみる。<kbd>sjis nslookup www.youtube.com</kbd> のようにコマンドの前に <kbd>sjis</kbd> を付けるだけで、シフトJISの出力が(標準出力・標準エラー出力の両方とも)UTF-8に変換される。

- エディタで sjis というファイルを作成した後、<kbd>install sjis /usr/local/bin</kbd> のように <kbd>install</kbd>コマンドを使うことで実行権限も自動的に付与されます。(<kbd>chmod</kbd> する必要がありません)
- <kbd>install</kbd>コマンドを実行する前にカレントディレクトリで試したい場合は、<kbd>bash sjis nslookup www.youtube.com</kbd> のようにしてください。

```text:sjis
#!/bin/bash
$* |& iconv -f cp932 -t utf-8
```

![d.png](https://qiita-image-store.s3.amazonaws.com/0/140610/1bfab4c3-64a8-db3c-020e-cfdbe5fb31ef.png)

# 以上です。

>http://qiita.com/javacommons/items/879efd486313cac8b381 **『Cygwinインストール革命 (Mac/Linuxユーザーに朗報。Windows上で tmux(端末多重化ソフト) や vim が使える環境が3分で構築できます！emacs, git や Xサーバーも追加インストール可能)』もよろしければお読みください！**
WindowsでMarkdownエディタ「EME」をビルドした


結果としては**画面真っ白で動かなかった**けどとりあえず。

## EME - Elegant Markdown Editor
- [Elegant Markdown Editor - EME](https://eme.moe/)

よくあるSDI系Markdownエディタだが、Electron製なので**基本的に**マルチプラットフォーム、つまりWindowsでも動く。**基本的には**。

[MarkRight](https://github.com/dvcrn/markright)みたいなモンだと思うがEMEのがエレガントなかんじする。

## さりとてWindowsでは
Githubのリポジトリを見てみる。

- [egoist/eme: ✏️ Elegant Markdown Editor\.](https://github.com/egoist/eme)

[Releases](https://github.com/egoist/eme/releases)からダウンロードしろとか書いてあるから見てみると、Windows向けバイナリがなさげ。dmgはMacで、amd64.debはUbuntuみたいだから、じゃあtar.xzでいいの？っつってダウンロードしてみるとexeが入ってない。きれそう。

## 自分でビルド
[Contribute](https://github.com/egoist/eme#contribute)見ると、バイナリ欲しけりゃcloneしてyarnでビルドしろとか書いてある。yarnってなんだよ。ぐぐってもよくわかんねえ。リンク張れよ。

- [Yarn](https://yarnpkg.com/en/)

まあたぶんこれでしょ

### Chocolateyでyarnをインストール
- [Installation \| Yarn](https://yarnpkg.com/en/docs/install)

Chocolateyで入れろとあるので入れる。以下コマンドプロンプト。

```shell-session
> choco install yarn
```

### yarnでビルド
別にコマンドプロンプトでもできると思うけど以下MSYS2。

```shell-session
$ git clone https://github.com/egoist/eme ~/eme
$ cd ~/eme
$ yarn win
```

つったらbuildコマンドねーよとか言われたので対策。

yarn自体のアップグレード。

```shell-session
$ yarn -v
```

依存パッケージのインストール。

```shell-session
$ cd ~/eme
$ yarn
```

やっとこビルド。

```shell-session
$ cd ~/eme
$ yarn win
```

んで、eme/dist以下にwin-ia32/EME Setup 0.13.0-ia32.exeと、win-ia32-unpacked/EME.exeができた。

    EME
    └── dist
         ├── win-ia32
         │   ├── EME Setup 0.13.0-ia32.exe
         │   └── *
         └── win-ia32-unpacked
             ├── EME.exe
             └── *

## 動か…せない
win-ia32-unpacked/EME.exeがportableな感じなのかしらん？と思って叩いてみると、起動はするが画面真っ白で操作受け付けない。

![スクリーンショット](http://i.imgur.com/djW0eFL.png)

じゃあEME Setup 0.13.0-ia32.exeでインストールしたらいいんですか？！って半ギレで叩いたら、なんか棒グラフがうにょうにょするみたいな変な画面が出て、EME（純白）立ち上がって終わり。

一応、「プログラムの追加と削除」には表示されたので、インストール自体はできてるっぽい。スタートメニューにも登録されてないけど。

## あきらめ
これ以上粘る根性が入ってないので撤退。あーMacDownみたいなWinDownだれか作ってくれないですかね。
クライアントスクリプトのそれっぽい書き方について。

<div class='alert alert-warning'><h4>警告</h4>
この記事は個人用の覚書なんだってば！
</div>

## 目的

最近ちょっとしたスクリプトを書くことが多い。大規模なもんじゃなくて、特定の操作をcrontabで定期的に実行するスクリプトとか、モジュールとかちょっとしたクライアントスクリプトとか。何も考えずにべたっと一枚に書いてもいいんだけど、ちょっと規模が大きくなるとわかりやすく書きたくなってくる。

なので既存のよく使われているスクリプトはどのような風に実行しているか調査してみた。

## chef-knife

https://github.com/chef/chef/blob/master/bin/knife

```knife
require "chef/application/knife"
Chef::Application::Knife.new.run
```
ここが実際たたかれるポイント

https://github.com/chef/chef/blob/master/lib/chef/application/knife.rb#L152

```knife.rb
 def run
    Mixlib::Log::Formatter.show_time = false
    validate_and_parse_options
    quiet_traps
    Chef::Knife.run(ARGV, options)
    exit 0
```
ここではconfファイルやら引数で渡されたoptionをパースして実際のknifeの処理をしている部分に渡している

https://github.com/chef/chef/blob/master/lib/chef/knife.rb#L203

```knife.rb:self.run
def self.run(args, options = {})
      subcommand_class = subcommand_class_from(args)
      subcommand_class.options = options.merge!(subcommand_class.options)
      subcommand_class.load_deps
      instance = subcommand_class.new(args)
      instance.configure_chef
      instance.run_with_pretty_exceptions
    end
```

argsはコマンドライン引数から渡されているので```knife node list```みたいな引数が渡され、該当するコマンドのクラスのインスタンスが作成され、```run_with_retty_exceptions```が呼ばれているような感じがする。

サブコマンドはすべて```Chef::Knife```クラスを継承しているよう(https://github.com/chef/chef/blob/master/lib/chef/knife/client_list.rb)

```run_with_pretty_exceptions``` でさらに ```run``` が呼ばれており
この```run```関数の中身は各サブコマンドで定義する感じ

```knife.rb:run_with_pretty_exceptions
   def run_with_pretty_exceptions(raise_exception = false)
      Chef::LocalMode.with_server_connectivity do
        run
      end
  end
```

実際のsub_commandは

```client_list.rb
      def run
        output(format_list_for_display(Chef::ApiClientV1.list))
      end
```
こんな感じで各コマンド毎の処理がわかりやすく記述されている。

### command パターン
前置きが長くて何を書きたかったか忘れそうなんだけど、knifeはcommandベースのスクリプトなんで実行をrunに集約して各サブコマンドごとの処理をサブコマンド用のクラスの```run```関数に集約できるcommnadパターンぽい書き方はわかりやすくて良いかもしれない。

### 最小のサンプルプログラム

何らかしらのクライアントプログラムを書くときに参考にできそうな気がするのでコマンドベースのクライアントコードを書くときは多分下のようなファイル構造になるのかな?

例えば、```special <subcommand>```みたいなプログラムを書きたいとき

```ファイル構造
special
├── lib
│   ├── application.rb
│   ├── command
│   │   └── ls.rb
│   └── command.rb
└── special.rb
```
で中身

```special.rb
#!/usr/bin/ruby

require_relative 'lib/application'

Application.new.run
```

```lib/application.rb
require_relative 'command'
class Application
  def initialize
  end

  def run
    #ここらへんで渡すoptsとかを取得したりargvのvalidateとかするといいかも
    Command.run(ARGV[0])
  end
end
```

```lib/command.rb
require_relative 'command/ls'

class Command
  def self.run(sub_command, opts ={})
    instance = nil
    if sub_command == 'ls'
      instance = Ls.new
    else
      puts sub_command + ' not found'
      exit 1
    end
    instance.run
  end

  def initialize()
  end
end
```

```lib/command/ls.rb
require_relative '../command'
class Command
  class Ls < Command
    def run()
      puts `ls`
    end
  end
end
```
【kintone】即時アクションプラグイン

「日報」「交通費精算」の２アプリを使用し、日報アプリからその日に発生した交通費を交通費精算アプリへ登録します。


日報と交通費精算アプリを用意します。
プラグインを使用し、日報アプリから交通費精算申請アプリへ「部署」「業務内容」を、交通費精算申請アプリの「手段」「概要」「金額」「領収書」「備考」を入力する設定を行います。

STEP1
日報アプリ設定画面からプラグインを追加し、設定画面を開きます。
プラグインの読み込み方法はkintone管理者ヘルプをご覧ください。
→kintoneにプラグインをインストールする
→アプリにプラグインを追加する

STEP2
アプリIDを設定します。アプリ名は自動的に入力されるので、間違いないか確認してください。
フィールド設定欄を任意で設定し、保存ボタンを押してください。
また、作成先アプリで必須設定をしているフィールドは必ず設定してください。設定をしていない場合、値を登録時にエラーとなり、機能を使用することが出来ませんのでご注意ください。

STEP3
アプリの詳細画面を開くと、「アクション」というボタンが追加されています。
このボタンを押すとポップアップが開き、プラグイン設定で設定したフィールドが入力できます。
保存ボタンを押すと、入力項目と共に設定したコピーフィールドの値が画面遷移することなく交通費精算申請アプリに登録されます。

https://www.novelworks.jp/blog/kintone/action_plugin
【kintone】年齢算出プラグイン

年齢を知りたい。ということで、お客様の生年月日（西暦）から年齢を算出してみます。

最低限必要なフィールドは入力となる「生年月日（日付）フィールド」と、年齢を表示（保有）する「スペース」または、「文字列１行」または、「数値」を用意します。

STEP1　プラグインの追加
日報アプリ設定画面からプラグインを追加し、設定画面を開きます。
プラグインの読み込み方法はkintone管理者ヘルプをご覧ください。
→kintoneにプラグインをインストールする
→アプリにプラグインを追加する

STEP2　プラグインの設定
アプリIDを設定します。アプリ名は自動的に入力されるので、間違いないか確認してください。
フィールド設定欄を任意で設定し、保存ボタンを押してください。

STEP3　年齢算出を試す
レコードの編集（レコード、一覧）、レコードの登録画面において、生年月日が変更された場合、年齢算出を行います。
（※スペースフィールドを設定した場合、レコード詳細画面においても年齢算出を行います）

https://www.novelworks.jp/blog/kintone/ageconv_plugin
【kintone】和暦変換プラグイン

西暦→和暦変換ということで、お客様の生年月日（西暦）から和暦生年月日に変換してみましょう！

最低限必要なフィールドは入力となる「西暦年月日（日付）フィールド」と、和暦年月日を表示（保有）する「スペース」または、「文字列１行」を用意します。

STEP1　プラグインの追加
サンプルアプリ設定画面からプラグインを追加し、設定画面を開きます。
プラグインの読み込み方法はkintone管理者ヘルプをご覧ください。
→kintoneにプラグインをインストールする
→アプリにプラグインを追加する

STEP2　プラグインの設定
アプリIDを設定します。アプリ名は自動的に入力されるので、間違いないか確認してください。
フィールド設定欄を任意で設定し、保存ボタンを押してください。

STEP3　和暦変換を試す
レコードの編集（レコード、一覧）、レコードの登録において、生年月日（西暦）が変更された場合、和暦変換を行います。

https://www.novelworks.jp/blog/kintone/wareconv_plugin
npm-scriptsの練習メモ sassのコンパイルと圧縮をやってみる

npm-scriptsの練習としてsassをコンパイルして圧縮するものを作ってみたメモです。
npm初心者です。iMacユーザー。間違えてたらごめんなさい。

npm-scripts って？ -> npmのタスク管理機能。タスクランナー。
公式：https://docs.npmjs.com/misc/scripts

※前準備

- npmとNode.jsのインストール。
- 該当ディレクトリに移動しておく。（ここではwordpressのテーマファイル内を想定して書いてます）

Node.jsって？ -> サーバーサイドのJavaScript
公式：https://nodejs.org/ja/
npm って？ -> Node.jsのパッケージマネージャー
公式：https://www.npmjs.com

# 1. package.jsonを作る
`npm init`
で対話形式でpackage.jsonの項目を入力…するのが正式？だけど面倒なのでコピペで済ましちゃってもいい。

```
{
  "name": "myTest",
  "version": "0.0.1",
  "description": "sass compile and minify"
}
```

必要項目とかよく分かって無いけれどこんな感じ。（パッケージ入れたらWARNでrepositoryとlicenseが無いって怒られたから、それも書いたほうが良いらしい。逆を言えば無くても動きます。）

# 2. 必要なパッケージをインストール
グーグル先生に聞くと[node-sass](https://www.npmjs.com/package/node-sass)がオススメらしいのでインストール。


## 2021/02/27追記: node-sassはもう非推奨なので、sass（ https://www.npmjs.com/package/sass ） に切り替えましょうー！


~~`npm install --save node-sass`~~ -> `npm install --save sass`

sassについては [node\-sass（LibSass）からsass（DartSass）への移行 \- Photosynthesic blog](https://blog.photosynthesic.jp/2020/11/libsass-to-dartsass/) などを参照してください。

`--save`と書くと、package.jsonにdependenciesとして以下のように追加される。こうしておくと後で便利。

```
"dependencies": {
  "node-sass": "^4.5.2"
}
```

# 3. scriptを書く
package.jsonのscriptsのところに、`"スクリプト名": "コマンド"`て感じで、やりたいことを書いていく。スクリプト名って書いちゃったけれど「shell scriptのエイリアス」って言うのが正しいのかな。

## sassをコンパイルする

node-sassの書き方は
`node-sass [options] <input> [output] `　または　`cat <input> | node-sass > output` だけどcat良くわかんないのでスルー。

ここではscssディレクトリ以下にsassのファイル、一個上のディレクトリにcssファイルがある想定で

```
"scripts": {
    "compile-sass": "node-sass --include-path scss scss/style.scss ../style.css"
}
```

とか書く。
## sass(css）を圧縮する
ファイルの圧縮もnode-sassで出来る。末尾に`--output-style compressed`

```
"build": "node-sass --include-path scss scss/style.scss ../style.css --output-style compressed"
```
## ファイルをwatchする

いちいちコマンド叩くのも面倒なのでwatchしてもらうためには `-w` でファイルでもディレクトリでもwatchしてくれる。

```
"node-sass --include-path scss scss/style.scss ../style.css -w"
```

など。
というわけで、こんなscriptに。

```
 "scripts": {
    "compile-sass": "node-sass --include-path scss scss/style.scss ../style.css",
    "build": "node-sass --include-path scss scss/style.scss ../style.css --output-style compressed",
    "watch": "node-sass --include-path scss scss/style.scss ../style.css -w"
 }
```

# 4. npm run で動かす
書いたscriptを `npm run compile-sass`という感じで呼び出す。
watchを停止するのは`control + C`で。

# 5. 再利用
こんな感じで作ったpackage.jsonを次のプロジェクトのディレクトリにコピペ（node_modules以下は除く）して
`npm install`
すると、必要なパッケージがインストールされて使えます。

# 感想
何よりもプロジェクトに最適なパッケージを探すのが大変な気がするので（今回みたいなシンプルなものでもnode-sassが色々出来ることが分かって無くて別のパッケージを入れたりしました）、先達の素晴らしいpackage.jsonを探し出すのが何よりな気がします。でもgulp使ってた時はnpmって何だこの赤いのぐらいのふわっふわな認識で触ってたので、少し理解が出来てよかったかなあ。
iMacroでさくっとスクリーンショットを取る

とあるサイトのスクリーンショットを取る必要があったのでFireFoxのiMacroというアドオンで対処することのした。

他でも活用する機会もあるかと思うのでメモしておく。
iMacroのDownloadフォルダにスクリーンショットが保存される。
デフォルトだと`C:\Users\<username>\Documents\iMacros\Downloads`

``` javascript
var pages  = ["page01", "page02", "page03"];
var site = "http://test.website.com/";

pages.forEach(function(e){
	var url = site + e;
	var png = e + ".png";
	
	var macro = `CODE:
	VERSION BUILD=8970419 RECORDER=FX
	SET !ERRORIGNORE YES
	TAB T=1
	URL GOTO=${url}
	SAVEAS TYPE=PNG FOLDER=* FILE="${png}"
	`;
	iimPlay(macro);

	return ;
	
});

```
[休憩] 本を読んで英気を養う(サイバー・電脳系)

読んだ時に共感や驚き、憧れや哲学的な示唆が刺激になった本。
そしてまた読んでみたいなと思える本がある。
サイバー・電脳系で３冊と限定してみたらの前提で簡潔に挙げてみる。

# １　The S.O.U.P. (ザ・スープ） :川端 裕人(著) 角川文庫

### [Ｔｈｅ　Ｓ．Ｏ．Ｕ．Ｐ．](http://www.kadokawa.co.jp/product/200312000255/)
>ネット社会の落とし穴を、壮大なスケールで描いたサイバーミステリ！
>かつて伝説のＲＰＧゲーム「S.O.U.P.」を開発、巨額の富を得た巧。彼はある日、ハッキングに悩む経済産業省の役人・礼子の訪問を受ける。礼子の依頼でハッカーを追う巧が見たのは、変わり果てたゲーム世界だ


主人公は凄腕のプログラマー。セキュリティー、ネットワーク技術にも秀でており、
その一挙手一投足がテンポ良く表現されている。そしてその人物のキャラクターも味がある。

他登場人物のキャラクターも背景描写含めとても優れており、
ネットの世界に沈殿した経験がある人は共感を得ると思う。
仮想世界を構築した3人の1人としての主人公、そしてそのチームのその後、その仮想と現実世界。

この本を読んだ当時はアプリ以外にサーバー・ネットワークの仕事をしたり、
人口知能や仮想世界の広さに興味があったので、表現される言葉の深い示唆に、ある種の共感を感じた。
ハッカー、仮想世界、チーム開発、ゲーム開発、
Unix・ネットワーク、セキュリティ、人口知能に興味がある人はお勧め。
登場人物の背景やメモリ空間の表現については特に記憶に残っている。ここではあえて詳しくは書かず。


# 2　know :野崎 まど(著) ハヤカワ文庫JA

### [ｋｎｏｗ](http://www.hayakawa-online.co.jp/product/books/21121.html)
>超情報化対策として、人造の脳葉“電子葉”の移植が義務化された2081年の日本・京都。情報庁で働く官僚の御野・連レルは、情報素子のコードのなかに恩師であり現在は行方不明の研究者、道終・常イチが残した暗号を発見する。その“啓示”に誘われた先で待っていたのは、ひとりの少女だった。道終の真意もわからぬまま、御野は「すべてを知る」ため彼女と行動をともにする。それは、世界が変わる4日間の始まりだった―

これはとても面白かった。
読みやすく言葉のセンスも良く、一度読み終えてその構成と設定された個々の言葉の意味が染みてくる。
超情報化対策として、電子葉の移植が義務化された2081年の日本が舞台。
情報の意味、知る事、どこまで知るのか等と問いかけてくる。

恩師と出会い進んでいく道。
転じてそこから世界が変わる4日間。
すべてを知るために。

超情報化社会、人工脳葉、計算処理・計算量、情報材、ソースコード、魅力あるキャラクター、
知ること、について興味がある時に読んでみたい。
また情報材とそのネットワーク等については、
今のIOTや自律分散的な情報処理とも関連があるようで興味深い。

あと主人公が情報材の基底ソースを耽読的に探索・解析する場面では、
ある種のゾーン(極度の集中状態)であり、コードが好きな人には類似共感を得たりすると思う。




# 3 Project SEVEN :七瀬 晶(著) アルファポリス文庫
### [Project SEVEN](http://www.alphapolis.co.jp/book/detail/1031000/)
>そう遠くない未来。ネット上にはWWVS(ワールド・ワイド・バーチャル・スペース)というリアルな仮想空間が提供され、「認証局」により一人一人にIDが付与されている―高校生の望月奈々は自分のルーム(仮想部屋)に何者かが侵入した痕跡を発見した。奈々はその世界では「SEVEN」の名で知られる凄腕のハッカーだ。怒りに震える彼女は自らのプライドをかけ、侵入者の追跡を開始する。セカンドライフの未来を予言するサイバーパンクアドベンチャー。

随分前に読んだが、面白かったと記憶に残る。
VR的な仮想空間が一般化している社会にて、リズム感よくサイバーパンクの旅にでるような感じで、
「ハッカーと蟻」といった本よりはライトで読みやすい。

主人公と共に登場するプログラマーも凄腕なのだが、
とても人間味に溢れたキャラクター。
またそのプログラマーが確か所属している会社での社内でのやりとり等もありえそうで、
著者がＳＥとしての経歴を活かした表現もあると感じる。

サイバーパンク、セキュリティ、ネットワーク、プログラミング、
ハッカー、VS、等に興味がある人にお勧めかも。
白夜書房のハッカージャパンという雑誌（現在休刊中)が好きだった人は多分面白いと思う。
Bitbucket Pipeline を利用したHerokuへの自動デプロイ

Dropbox や Github 経由でのデプロイはあるもののBitbucket経由でのデプロイはあまり参考が無かったので備忘録を兼ねて残します。
要はこれまでの`git push heroku master`(Heroku)と`git push origin develop`(Bitbucket)2箇所へのPushから、`git push origin develop`(Bitbucket)1箇所だけのPushで済ませることが目的です。

####公式サイトはこちら(すごく簡単)
https://confluence.atlassian.com/bitbucket/deploy-to-heroku-872013667.html


####手順1.
Bitbucketにログイン→任意のリポジトリに入り「設定」→「Environment variables」を選択。
ここでHEROKU_API_KEYとHEROKU_APP_NAMEを入力。


![キャプチャ.png](https://qiita-image-store.s3.amazonaws.com/0/172938/3e1f07b0-83f8-94d3-7d54-cfad7c70a8d4.png)

HEROKU_API_KEY...コマンドで`heroku auth:token`で出てきたやつコピペ
HEROKU_APP_NAME...同じく`heroku apps`で今回のアプリを選択

####手順2.
bitbucket-pipelines.ymlを作成→HerokuへPush。
下記のファイルはBitbucketの公式サイトにある。一番下のURL(- git push...のところ)にHEROKU_API_KEYとHEROKU_APP_NAMEを充てればOK。

```bitbucket-pipelines.yml
# This is a sample build configuration for PHP.
# Check our guides at https://confluence.atlassian.com/x/e8YWN for more examples.
# Only use spaces to indent your .yml configuration.
# -----
# You can specify a custom docker image from Docker Hub as your build environment.

image: phpunit/phpunit:5.0.3
clone:
  depth: full
pipelines:
  default:
    - step:
        script: # Modify the commands below to build your repository.
          - composer install
          - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_APP_NAME.git HEAD
```

ではでは
配列の先頭要素除外、 shift() と slice(1)、早いのはどっち？ あと splice(1) と splice(0, 1)

## 先頭要素を取り除くための `shift` と `slice`。あと `splice`
最近の言語では配列の一部から別の配列を作る時に「参照する先頭要素を変える」という手法が使われている。みたいな記事を読んだ気がしていて、(Go言語の `slice` とかがそうだったような)もし、js の slice が似たような仕組みを採用していたら、実は `shift` よりも早いのでは？ と思ったので試してみる事にした。

```go
// Go 言語では下のようなコードがあった時に
list = []string{ "a", "b", "c", "d", "e" };
rest = list[1:]

/**
 * 下のような感じに、同じ配列を参照することで、省メモリ・高速化を図ってる
 * 
 *   ↓ list が参照する先頭要素
 * [ a | b | c | d | e ]
 *       ↑ rest が参照する先頭要素
 *
 * みたいな記事を読んだ気がする (逃げ腰)
 */
```

## 結論
圧倒的に `shift`
`splice` も追加したけど敵わない。`slice` にすら敵っていない。
特に変数の再割当てに処理がかかるのか、splice(1)して出された値を保存する方法はすこぶる遅い。

```shell-session
$ node shift-slice-splice.js
Array#shift x 90,369,063 ops/sec ±2.47% (80 runs sampled)
Array#slice x 9,655,846 ops/sec ±3.19% (73 runs sampled)
Array#splice.break x 9,249,277 ops/sec ±2.55% (76 runs sampled)
Array#splice.insert x 8,824,188 ops/sec ±4.86% (71 runs sampled)
Fastest is Array#shift
```

内部実装見ないと分からないけど、むしろ `shift` が省メモリ・高速化の実装になってるんでね？ ってくらいに `shift`。

## ベンチマークのコード
一般的にベンチマークを図りたい時はどういうコードを書くのが良いのだろうかと思って調べた結果
 [Benchamrk.js](https://benchmarkjs.com) というライブラリを見つけたので使ってみることにした。
上の結果はその出力。

内容は 3000 個のランダムな文字列を要素として持つ配列の先頭要素を削除するもの。
また、後処理として削除した後に配列要素を追加する処理をして、常に3000要素あるように調整している。

のだけれども、コードの書き方がそもそも違ったり、ライブラリの使い方が間違ってないかと戦々恐々←
何か間違いや改善点があれば是非ご指摘くださいな。

```js:shift-slice-splice.js
"use strict";
const Benchmark = require("benchmark");
const shortid   = require("shortid");

const suite = new Benchmark.Suite;
let arr = new Array(3000).fill(0).map(_ => shortid.generate());

const options = {
  onComplete: function () {
    arr.push(shortid.generate());
  },
};

// add tests
suite.add('Array#shift', function() {
  arr.shift();
}, options)
.add('Array#slice', function() {
  arr = arr.slice(1);
}, options)
.add('Array#splice.break', function() {
  arr.splice(0, 1);
}, options)
.add('Array#splice.insert', function() {
  arr = arr.splice(1);
}, options)
// add listeners
.on('cycle', function(event) {
    console.log(String(event.target));
})
.on('complete', function() {
    console.log('Fastest is ' + this.filter('fastest').map('name'));
})
// run async
.run({ 'async': true });
```
Global Azure Bootcamp 2017@Tokyo に行ってきたので かなり雑にまとめる


## 概要

* イベントページ [Global Azure Bootcamp 2017@Tokyo - connpass](https://jazug.connpass.com/event/52917/)
* Togetter : [URL](https://togetter.com/li/1103228)
* ハッシュタグ #jazug #GlobalAzure
* 他の方のまとめ
    * [Global Azure Bootcamp 2017@Tokyo めも - Qiita](http://qiita.com/kinoko_0000/items/624b4a8c2d2faf32df79)

### Global Azure Bootcamp って何よ？

* Global Azure Bootcampとは世界中の Azure コミュニティが世界180ヶ所以上で一斉に開催するMicrosoft Azureのコミュニティイベントです。…だそうです(connpassより)
* 公式サイト: [Global Azure Bootcamp – Global Azure Bootcamp 2017](https://global.azurebootcamp.net/)


## 忙しい人向けのまとめ

* 同時開催という意味ではかなり大きなイベント、ではありますが、やってることはMS Azureに関するセッション集。
* 大きく分けて、「Azure update」「2017/3のAzureの大規模障害に関するセッション」「Azure DocumentDB のコアな使い方」「Azureも含めた自社サービス開発事例」「LT」に分かれていました。
* Azureを初めて触る人向け、というよりかはAzureをある程度検証や導入している人向け。
* まぁ、パブリッククラウドベンダー系の勉強会の王道的な内容だったのではないでしょうか。


## 各セッションについて

### Azureって何よ〜2017年の最新情報ゆるまとめ 
* 発表者：jazug 女子会のお二人
* スライド：[Azureって何よ〜2017年の最新情報ゆるまとめ](https://www.slideshare.net/jazug_girls/azure2017)
* 最初にMS Azureって何よ？の掴みの後に、いろいろUpdateしてますよーのお話


### Azure 2017年3月障害 DeepDive 
* 発表者：@harutama
* スライド：[Azure2017年3月障害DeepDive](https://docs.com/user770511/5468/azure20173deepdive)
* 2017/3 に Azureのストレージにて障害が起きましたね？→原因について読んでみるとストリームマネージャーという用語が→ストリームマネージャーを含めたストレージのアーキテクチャについて学んでみようか、という内容。


### Azure 障害との上手な付き合い方
* 発表者：bitflyer社のお二方
* スライド：[Azure 障害との上手な付き合い方](https://www.slideshare.net/YutoTakei/azure-75296598)
* Azureの障害に関する知見集、といった方が早そうです。一部の方には好評だった模様。あと障害に関する対応事例、ってあるとうれしいものはありますよね。


### サポートエンジニアが紹介する、Azure Portal/CLI 使いこなし
* 発表者：@tanaka_733
* スライド：[2017/04/22 Azure Portal CLI 使いこなし](https://docs.com/tanaka-takayosh/a8d11684-d658-4789-9405-744106cbbb96/2017-04-22-azure-portal-cli)
* 題名を読んで字のごとく。「Azure Portal/ Azure CLI」を使いこなして、Azureの無駄を削減していきましょう、というご紹介も含めた内容。


### Azure ML系 「practice over theory」
* 発表者：@Takeshi Umezaki
* スライド：[Azure ML系 「practice over theory」](https://docs.com/user142134/1717/japan-azure-boot-camp)
* AzureのAI(人工知能)系のサービスに関する紹介/ノウハウ集。


### DocumentDB DeepDive(?)
* 発表者：@takekazuomi
* スライド：[DocumentDB Deep Drive](https://www.slideshare.net/takekazuomi/documentdb-deep-drive)
* Azure Document DB の細かい仕様の紹介を交えながらの活用方法の伝授的な内容。実際にAzure Document DB を利用している所ではありがてぇ、ありがてぇ、なのかなと。
* …完全な個人的な感想ですが、結構概念が某○ongo△Bに似てるなぁ、と思いつつ。
* Azure Document DBを触る機会があれば、また読みたいスライドになるのかな、と感じました。


### マイソースファクトリーを支える技術
* 発表者：オルターブースのお二方
* スライド：[マイソースファクトリーを支える技術](https://docs.com/yuta-matsumura/9364)
* Azureを含めたクラウドネイティブ(というか○aaSサービスや流行技術の組み合わせ)で作るサービスってこんなですよー、という事例/ノウハウ。
* 実際にサービスを作っているらしき方からの質問が飛んでいて、好評だったみたいですね。


### LT枠

* 4名位の人がやられていました
* スライド
    * [Kubernetes Helm で始めるコンテナ生活 - Docs.com](https://docs.com/tony-tonykun/6036/kubernetes-helm)
    * [DocumentDBとFunctionsの良い関係 - Docs.com](https://docs.com/user508130/4991/documentdbfunctions)
 


## 参加後の所感

* 一通り参加して(といってもUpdateの部分は結構聞けませんでした…) 感じたことを率直に言うと、「そりゃAzureだってちゃんと組んだり部分だけでも活用すればいいもの一杯あるよな」。
* 日本では、他の人が使っている率が高いAWSで全てOKとなりがちですが、Azureでもちゃんと出しているものもあるし、○aaSを組み合わせてシステムを作る世の中、Azureもちゃんと見なきゃなぁ…と改めて認識しました
    * 出来ればこのブログを追ったり、この番組聞けばAzure情報を洩れずにキャッチできますよ、なんてものがあったら :pray:
Charts：タップした際の処理

チャートを描きたいときに便利なライブラリ　[Charts](https://github.com/danielgindi/Charts) で、チャートをタップした際の処理を共有します。

```Swift3
import UIKit
import Charts

class ChartViewController: UIViewController, ChartViewDelegate {

    @IBOutlet weak var pieChartView: PieChartView!

    override func viewDidLoad() {
        super.viewDidLoad()

        pieChartView.delegate = self

        let summeryList = [
            ("key0", "value0"),
            ("key1", "value1"),
            ("key2", "value2")
        ]

        var dataEntries = [PieChartDataEntry]()
        for i in 0..<summeryList.count {
            let dataEntry = PieChartDataEntry(value: summeryList[i].1, label: summeryList[i].0)
            dataEntries.append(dataEntry)
        }
        let dataSet = PieChartDataSet(values: dataEntries, label: "ラベル")
        let data = PieChartData(dataSet: dataSet)

        pieChartView.data = data
    }

    func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {

        if let dataSet = pieChartView.data?.dataSets[highlight.dataSetIndex] {
            
            let sliceIndex: Int = dataSet.entryIndex(entry: entry)
            let label = summeryList[sliceIndex].０
            let value = summeryList[sliceIndex].1
    }
}
```

ポイントは以下。
・**ChartViewDelegate** プロトコルを追加
・**chartValueSelected** 関数をサポート
・**chartValueSelected** の引数からタップした部分の値を取得する方法

ちなみに本記事は、**Charts 3.0** での処理です。
ググると古いバージョンの記事が多くて、Charts 3.0 で使えるコードを探し出すのに苦労したので書きました。
Vimでタブを使うのをやめた

Vimmerです。

Vimでタブページを使うのをやめました。どうしたかというと、代わりに**バッファ**を使い始めました。

超快適なので紹介します。

![output-denite.gif](https://qiita-image-store.s3.amazonaws.com/0/8862/b7c22d82-6cf1-8e18-99ef-e9c124a09b1b.gif)

ほぼ[NeoVimを端末として使うためにしたこと - Qiita](http://qiita.com/acomagu/items/1199b94715a1ccdf1176)の続きです。

## やったこと

### Deniteの導入

[Shougo/denite.nvim: Dark powered asynchronous unite all interfaces for Neovim/Vim8](https://github.com/Shougo/denite.nvim)

まじで速い。Uniteなんて使ってられない。

こんな感じでmappingしてます。

```vim
" Denite
nnoremap <Leader>p :Denite buffer file_rec<CR>
nnoremap <Leader>b :Denite buffer<CR>
call denite#custom#map('insert', "<Up>", '<denite:move_to_previous_line>', 'noremap')
call denite#custom#map('insert', "<Down>", '<denite:move_to_next_line>', 'noremap')
```

さすがに`file_rec`が入るとちょっと時間かかるので、利用は最小限にとどめています。

### `:set hidden`

未保存の状態でバッファを切り替えても警告が出なくなります。

### `:wq`の代わりを定義

[NeoVimを端末として使うためにしたこと - Qiita](http://qiita.com/acomagu/items/1199b94715a1ccdf1176)にも書いたのですが、こんな感じでやってます。

```vim
nnoremap <Leader>q :up<CR>:call CloseBuf()<CR>
```

`<Leader>q`で**変更があれば保存+バッファを閉じる**という動作になります。

### 端末のバッファの名前を実行中のプロセス名を含むものに変更

端末のバッファ名ってデフォルトで全て`term://〜:/usr/bin/fish`みたいな感じで、端末で実行中のプログラム名とかは入らないんですよね。これで何が困るかというと、端末を複数開くとDenite上で見分けがつかないんです。

例えば「rails server」を実行中のバッファは、railsとかでfuzzy-searchしたいので、プロセス名を入れることにします。

```vim
autocmd BufLeave * if exists('b:term_title') && exists('b:terminal_job_pid') | execute ":file term" . b:terminal_job_pid . "/" . b:term_title
```

`file`はファイル名を変更するコマンドですが、端末なら何でも大丈夫なようです。端末のタイトルを含めているだけなので、端末の方でタイトルにプロセス名等入れてください。

PIDを入れているのは、Vimではバッファ名が被るとエラーが出てしまうようなので、ユニーク化の意味です。

こんな感じです。

![Screenshot from 2017-04-22 20-41-34.png](https://qiita-image-store.s3.amazonaws.com/0/8862/d27fd465-55f2-9eae-6a55-ee71c16de33b.png)

## Bufferを使うメリット

- fuzzy-searchできる
- タブバーがでない→かっこいい
- Vimmerっぽい
- file_recと組み合わせると、今開いているファイルと開いていないファイルを意識する必要がない(NERD_Treeいらない)

## Bufferを使う(タブを使わない)デメリット

- 画面分割の状態を保存できない
    - 基本的に分割せずにやるしかない
- タイプ数が基本的に増えた
    - 自分は今のところタブよりストレスが少ないので、好みの問題の気もする

画面分割の問題については、おんなじような操作方法でBufferの代わりにタブページをfuzzy-searchするのも頑張ればできそうなので、気が向いたらやるかもしれません。

---

良いVim Lifeを!
【CakePHP3メモ②】コントローラだけ使ってみる

# 前提
http://qiita.com/kure/items/ec7cc03ffd8edf56f61c

# 手順
## コード
src\Controller

```php:TestkureController.php
<?php

namespace App\Controller;

class TestkureController extends AppController {
	public $name = "Testkure";
	public $autoRender = false;
	public function index() {
		echo "TestkureController";
	}
	public function index2(){
		echo "index2";
	}
}
```

## 動作確認
http://localhost:8001/testkure
http://localhost:8001/testkure/index2

# 参考

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798048577/kuredev-22/ref=nosim/" name="amazletlink" target="_blank"><img src="https://images-fe.ssl-images-amazon.com/images/I/51GbBM22PzL._SL160_.jpg" alt="PHPフレームワーク CakePHP 3入門" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798048577/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">PHPフレームワーク CakePHP 3入門</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 17.04.22</div></div><div class="amazlet-detail">掌田 津耶乃 <br />秀和システム <br />売り上げランキング: 15,411<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798048577/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>
（IT質問サイトの規模感・タグ数比較）teratailと日本語版stack overflow、英語版stack overflow

2017/04/22時点 

## 規模感比較

| サービス名 | 質問数 | ユーザー数 | 
| ---| ---| --- |
| teratail | ? | [58847](https://teratail.com/users) |
| stack overflow(ja) | [11321](https://ja.stackoverflow.com/questions) | [10296](https://ja.stackoverflow.com/users?tab=reputation) |
| stack overflow(en) | [13721940](https://stackoverflow.com/questions) | [6687900](https://stackoverflow.com/users) |



## タグ比較

* タグ名はlower chain caseで統一
* ()内はサービス内でのタグ数順位
* 各サイト上位１０タグの総組み合わせ

| タグ名 | [teratail](https://teratail.com/tags) | [stack overflow(ja)](https://ja.stackoverflow.com/tags) | [stack overflow(en)](https://stackoverflow.com/tags?page=1&tab=popular) | 
| ---| ---| --- | --- |
| php | 11492 (1) | 715 (6) | 1065086 (4) | 
| java | 7926 (2) | 637 (7) | 1244789 (2) | 
| javascript | 7867 (3) | 1172 (1) | 1369247 (1) | 
| html| 4441 (4) | 379 (14) | 645244 (8) | 
| android | 3900 (5) | 834 (4) | 976639 (5) | 
| ruby | 3595 (6) | 588 (8) | 180249 (24) | 
| swift | 3525 (7) | 1042 (2) | 144460 (32) | 
| jquery | 3523 (8) | 346 (15) | 833145 (6) | 
| ruby-on-rails | 3265 (9) | 770 (5) | 272043 (16) | 
| mysql | 3151 (10) | 280 (16) | 458733 (12) | 
| c# | 3132 (11) | 498 (11) | 1084332 (3) | 
| ios | 2244 (14) | 915 (3) | 503211 (10) | 
| python | 1812 (19) | 574 (9) | 737237 (7) | 
| c++ | 1733 (22) | 252 (19) | 509896 (9) | 
| monaca | 284 (82) | 560 (10) | 211 (10008) | 


日本の質問は海外に比べ、php, ruby, swift, monacaが多い印象。
期間を1年以内と絞ればまた違うかもしれないが＠＠
Excelのワークシートの一覧シートを作成するVBAマクロ


# はじめに
2008年くらいにWindows版Excelで作成したVBAマクロを見つけたので、Mac版Excelでも動くのか試してみたのですが、大抵動く、という結果でした。
せっかくなので、VBAマクロを切り出して残しておこうと思います。

# VBAマクロ
## 概要
ワークブックに存在するシートの情報を集め、「シート一覧Work」シートにリンク付きのシート一覧を作成します。
「シート一覧Work」は、シートがなければ追加されます。シートがある場合はそのシートを使いますが、都度、値をクリアして作成し直す処理になっているため、必要に応じて調整が必要と思います。

## ソース
```vbnet
Option Explicit

'=====================================================================
' シート一覧作成
' -------------------------------------------------------------------
' "シート一覧Work"シートに、シート一覧(リンク付き)を作成する
'=====================================================================
Public Sub MakeSheetList()
    Const LIST_SHEET_NAME = "シート一覧Work"    'シート一覧の物理的なシート名
    Const LIST_NO_COLIDX = 1                    'No. インデックス
    Const LIST_NAME_COLIDX = 2                  '名前 インデックス

    Dim intIdx As Integer       '処理用インデックス
    Dim intWksCnt As Integer    '処理用カウンタ
    Dim objWks As Object        'シート作成用オブジェクト
    Dim strWks() As String      'シート名格納先
    
    Dim intLstShtIdx As Integer 'リスト一覧シートのインデックス(位置)
    Dim intLstIdx As Integer    'リスト一覧作成時のインデックス
    
    Dim strSubAdr As String     'ハイパーリンクのアドレス
        
    '初期化
    intLstShtIdx = -1

    'シート数取得
    intWksCnt = Excel.ActiveWorkbook.Worksheets.Count
    '格納バッファ定義
    ReDim strWks(intWksCnt)
    
    'シート数ループ
    For intIdx = 1 To intWksCnt
        strWks(intIdx) = Worksheets(intIdx).Name
        If strWks(intIdx) = LIST_SHEET_NAME Then
            intLstShtIdx = intIdx '一覧表示用シートが存在する
        End If
    Next
    
    '一覧表示用シートの存在確認
    If intLstShtIdx < 0 Then
        '存在しない：一覧表示用シート追加
        Set objWks = ActiveWorkbook.Worksheets.Add(before:=Worksheets(1))    '先頭に追加
        objWks.Name = LIST_SHEET_NAME
    Else
        'ワークシートオブジェクトをセット
        Set objWks = Worksheets(LIST_SHEET_NAME)
    End If
    
    objWks.Select
    'リストクリア
    Range(Cells(1, LIST_NO_COLIDX), _
    Cells(intWksCnt, LIST_NAME_COLIDX)).ClearContents

    'リスト一覧インデックスの初期化
    intLstIdx = 0
    For intIdx = 1 To intWksCnt
    
        'シート一覧の名前は出力しない
        If intLstShtIdx <> intIdx Then
            'リスト一覧インデックスセット
            intLstIdx = intLstIdx + 1
            
            'セルをセット
            Cells(intLstIdx, LIST_NO_COLIDX) = intLstIdx 'No.
            Cells(intLstIdx, LIST_NAME_COLIDX) = strWks(intIdx) 'Name
            
            'ハイパーリンクを設定
            strSubAdr = "'" & strWks(intIdx) & "'" & "!A1"      'ハイパーリンクのアドレス
            ActiveSheet.Hyperlinks.Add _
                Anchor:=Cells(intLstIdx, LIST_NAME_COLIDX), _
                Address:="", SubAddress:=strSubAdr, TextToDisplay:=strWks(intIdx)
        End If
    Next

End Sub
```

# 補足
## 所感
大量のシートが存在するワークブックで、各シートへのアクセスを容易にしたくて作成しました。
シートが少なければ単純に移動すれば良いし、あるいはワークシートの左下にあるシート選択の矢印を右クリックして一覧を表示して選択し移動することもできますが、大量になるとそれも操作性が悪く感じます。そんな時にこのVBAマクロを使います。一覧シートになると、チェックシートとしても使えます。

しかし、この一覧シート作成を何度も実行する場合は、一覧の出力行の指定やリストのクリア処理の改善が必要になります、ね。

## Windows版をMacで実行した際の修正点
特にありません。
NeoVimを端末として使うためにしたこと

Vimmerです。

「全ての操作はVim内で行われるべき」という哲学のもと、Vimを`gnome-terminal`の代わりとして常用しています。

今日はその環境作成のためにしたことをまとめます。

僕のinit.vimはこちらで見られます->[dotfiles-nvim/init.vim at master · acomagu/dotfiles-nvim](https://github.com/acomagu/dotfiles-nvim/blob/master/init.vim)

## `:terminal`から親のVimを操作できるようにする

せっかくVim内で端末が開くなら、そこからファイルを開きたいですよね。(Vimをネストしたくないですよね)

[neovim-remote](https://github.com/mhinz/neovim-remote)の出番です。

言ってしまえば、Vimの端末内から`nvr file`と打てば親のVimで`file`が開きます。最高。

インストール方法はリンク先で!

それを応用して、僕は以下のようなものも使っています。

```fish
function nvcd
    nvr -c "cd "(realpath $argv)
end
```

(fishです)

これで`nvcd .`とやると、Vimのカレントディレクトリが端末内のカレントディレクトリに移動します。

## 空のバッファが開いたら端末を開くようにする

```vim
" Open terminal on new buffer
autocmd VimEnter * if @% == '' && s:GetBufByte() == 0 | call Term()
function! s:GetBufByte()
  let byte = line2byte(line('$') + 1)
  if byte == -1
    return 0
  else
    return byte - 1
  endif
endfunction
```

新規かつ空のバッファが開いた時に、端末を開くようにしています。これでVimの起動時/新しいタブを開いた時等には自動的に`:terminal`が実行された状態になります。

`Term()`関数は後述します。

## 最後のバッファが閉じたらVimを終了する

なぜバッファ? という点はこちらをご覧ください→[Vimでタブを使うのをやめた - Qiita](http://qiita.com/acomagu/items/5f10ce7bcb2fcfc9732f)(タブも同じような書き方でできます。)

```vim
function! Term()
  call termopen(&shell, {'on_exit': 'OnExit'})
endfunction

function! CloseLastTerm()
  if len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1
    :q
  endif
endfunction

function! OnExit(job_id, code, event)
  if a:code == 0
    call CloseLastTerm()
  endif
endfunction
```

基本的に端末は`call Term()`で立ち上げます。すると端末が終了した時、残りのバッファがひとつであれば`:q`でVimが終了します。

ついでに端末以外のバッファにも適用します。

```vim
function! CloseBuf()
  if len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1
    :q
  else
    :bd
  endif
endfunction

nnoremap <Leader>q :up<CR>:call CloseBuf()<CR>
```

これで(端末でないバッファで)`<Leader>q`を押すと、同じような挙動を実現できます。

本当は`autocmd BufDelete`を使ってこれらを共通化したかったのですが、挙動が「最後のバッファの終了リクエスト」→「新しいバッファの作成」→「BufDelete発火」→「元のバッファを終了」という順序らしく、結果的に開いているバッファの数が`2`となってしまいうまく判別できませんでした。

## `Ctrl-Alt-T`でVimを開く

仕上げに、Ubuntu上で`Ctrl-Alt-T`を押した時にVimを開くようにします。(流石に`update-alternatives`するのは怖かったので...)

```bash
gnome-terminal -e nvim
```

これを各自UnityやGNOMEのGUIから設定すると良いと思います。

## (おまけ)`:terminal`から抜けるコマンドをRemapする

これはやってる人も多いと思いますが、こんな感じです。

```vim
tnoremap <C-j> <C-\><C-n>
```

---

以上を設定すると、こんな感じになります。

![output.gif](https://qiita-image-store.s3.amazonaws.com/0/8862/bdf67974-b3c7-dc41-5465-db077d346952.gif)

良いVim Lifeを!
Skypeのトーク履歴を整形する

# 背景
Skypeはトーク履歴をテキストファイルでエクスポートできないようなので、トーク履歴をコピペしました。

# 作成したシェルスクリプト

```bash:bash
sed -e "s/.*] //" before.txt > after.txt
```

# 整形した内容

 * 時刻表示が不要だったので消しました。

```text:before
[2017/03/05 23:56:19] taumu: ほげほげほげほげ
[2017/03/05 23:56:25] cywath10: ふがふがふがふが
```

```:after
taumu: ほげほげほげほげ
cywath10: ふがふがふがふが
```

# LINE版も書いてます。
LINEのトーク履歴を整形する
http://qiita.com/taumu/items/278b2a3a1530498a62d1
Choregrapheが動かない！

# はじめに

Pepper　にアプリをインストールしようとして、Choregrapheでプロジェクトを開いたものの、
マウスポインタが虹色のくるくるになってしまう。その後、アプリケーションの強制終了画面で見ても Choregraphe は「応答無し」。強制終了しないと復帰できない問題に1ヶ月ぶりくらいに出会いました。

<img width="338" alt="スクリーンショット 2017-04-22 19.11.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/53393/689a5b93-ae45-6437-43d9-48cb13aca0c7.png">

本日は２回目の遭遇でしたが、1ヶ月前にどうやって解決したのか忘れてしまったので困りました。
今後、遭遇するたびにハマりそうなので記事にしておこうと思います。
※そのまま放置を続けると　Choregraphe　が復帰するのかは未検証です。

# 開発環境

- Mac OS X El Capitan 10.11.6
- Choregraphe 2.4.3.28
- プロジェクト概要
    - ボックスでの Pepper の実装
    - Pepper のタブレットに表示する HTML/CSS/JS の実装

# 現象

Choregraphe を起動して、project.pml を開く。
その後、Choregraphe を操作しようとするとフリーズ。
何度やってもフリーズ。。。

新規プロジェクトを作成して　Say させようとすると普通に動く。

# 解決方法

今回、Pepper のタブレットに表示する HTML/CSS/JS の実装では、
一部開発のために npm モジュールを使用していました。
いわゆる `devDependencies` の `node_modules` がありました。

Pepperプロジェクトを開いた時に、この `node_modules` ディレクトリがよくなかったようです。

`node_modules` ディレクトリなどを不要なものを削除し、
再度、Pepperプロジェクトを開くと、Choregraphe は動くようになり、
Pepper　へのインストールもできました！

無事解決！！

# その他メモ

本現象が発生した際に、Choregraphe 強制終了後、すぐに起動しようとすると Choregraphe 自体が起動しない場合があるようです。正確には、アプリケーションの終了やら起動やら何か処理が詰まってしまって起動できていないような印象です。

自分は、フリーズとかするとすぐイライラしてしまうので、本現象では、起動終了をたくさん繰り返してしまいました・・・。
【統計学を学ぶ前に】3種類の確率の考え方  ―そもそも確率ってなんなの？―


#はじめに
学校でも日常生活でもよく耳にする**確率**。

「そもそも確率ってなんなの？」

このページでは以下の3種類の確率の考え方についてまとめています。

- **数学的確率(古典的確率)**
    - 小中学校で習う確率。苦手だった人も多いはず。
- **統計的確率**
    - 数学的確率を少し拡張。自然と利用している事が多い気がする。
- **公理論的確率**
    - 現代数学における確率の考え方。統計学や人工知能の分野でよく用いられる。


# 数学的確率(古典的確率)
```math
確率=\frac{求める場合の数}{起こりうる全ての場合の数}
```
小中学校で習う確率。
サイコロとかコインとかのあれ。
**場合の数の比**。

現代確率論と比較して古典的確率とも呼ばれる。
ピエール・シモン・ラプラス(Pierre-Simon Laplace)によって1814年にまとめられた。

直感的であり、確率に対する理解を深めるには良いが、適用できる状況というのは限られてくる。

この確率は、**どの単一事象の起こる確率も同じであるという仮定**の下に成り立っている。
《**同様に確からしい**(*equally likely*)》ってやつ。
サイコロはどの目も等しい確率で上を向くし、コインの表と裏のでる確率は等しい。
だからサイコロ1回振ったらそれぞれの目がでる確率は1/6だし、コインの表がでる確率は1/2。

適用できない例として、各事象が同様に確からしいとは限らない場合が挙げられる。
というか世の中ほとんど同様に確からしくない。
じゃんけんにおいて、それぞれの事象(「ぐー」「ちょき」「ぱー」)の起こる確率は等しいの？
結局サイコロもコインも同様に確からしい保証は無いと言ってしまえばそれまで。

**この確率では、各事象の起こる確率は同様に確からしいと仮定することで、確率を計算する。**
じゃんけんもそれぞれの起こる確率は同様に確からしいとすることで確率を計算することが可能となる。

適用できる範囲が狭いだけであって、間違っているわけではない。
後述する公理論的確率の特殊化とみなせる。

# 統計的確率
```math
確率=\frac{事象の起こった回数}{試行回数}
```

**発生頻度の比**。
世間一般的に、確率といったらこれが割りと多い気がする。
プロ野球選手の打率とか、交通事故に遭遇する確率とかまさにこれ。
確率を頻度で定義する。

同様に確からしいという仮定を立てるのが困難な事象に対して、確率を計算できる。

じゃんけんで勝つ確率が知りたければ、ひったすらじゃんけんを繰り返し、勝った回数を数えることで求める。  

実際に試行をする必要があり、数学的に扱うのが少しむずかしい。

# 公理論的確率

*****
$Ω$を集合とし、$A$、$B$を$Ω$の部分集合、$Pr$を$Ω$の部分集合から実数への関数とする。

公理1

```math
Pr(A) \geq 0
```

公理2

```math
Pr(\Omega) = 1
```

公理3

```math
A \cap B = \{\}　 ならば \\
Pr(A\cup B) = Pr(A)+Pr(B)
```

Prが全ての公理を満たすとき、

- 集合$Ω$を**標本空間**
- $Ω$の部分集合を**事象**
- 関数$Pr$を**確率分布**
- 実数$Pr(A)$を$A$が起きる**確率**

とする。
*****
現代数学における確率の定義。
**確率の公理**を定め、その公理を満たすものを確率として定義する。
確率の公理は1933年、アンドレイ・ニコラエヴィッチ・コルモゴロフ(Andray Nikolaevich Kolmogorov)によって提唱された。
同様に確からしいという仮定を必要とせず、かつ数学的に確率を扱うことが可能。


これまでの定義と異なり、かなり抽象度の高い定義となっている。
そのため、多くの問題に適用が可能である。
起こりうる事象を網羅する**標本空間**と、対応する**確率分布**を考えることで確率を論じることができる。
古典的確率は、確率分布を一様分布とみなした場合の公理論的確率となる。



サイコロを例にしてみる。
サイコロを1回振る時の標本空間$Ω$は以下のようになる。

```math
\Omega = \{1がでる, 2がでる, 3がでる, 4がでる, 5がでる, 6がでる\}
```

漏れもダブりもない。

続いて確率分布。

|$ω$|1がでる|2がでる|3がでる|4がでる| 5がでる |6がでる|計
|:-:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
|$Pr(ω）$|$p_1$|$p_2$|$p_3$|$p_4$|$p_5$|$p_6$|1|

確率分布は上のように表で書くこともあれば

```math
Pr(\omega_i)=p_i \qquad (i = 1,2,3,4,5,6)
```

のように数式で書く場合もある。


ここで一様な確率分布、すなわちどの単一事象の起こる確率も同じであるような確率分布を考えることで、数学的確率と同じ議論となる。この例の場合$p_i=1/6$である。
さらに、同様に確からしくないサイコロやコインに関しても、確率分布を考えれば議論ができる。

具体的に議論するためにはさらに、確率変数やら確率密度関数といった概念がここから展開されていく。  

# まとめ
- **数学的確率**
- **統計的確率**
- **公理論的確率**
Mac で git の commit 履歴を昨日に変更する


```
git commit --amend --date "`date -v -1d -R`"
```

- GitHub で芝が途切れてしまった時に
    - そもそも芝を生やすことではなく、毎日コードを書く習慣をつけるのが目的ということを忘れてはならない(戒め)
- Linux だと `date` コマンドのオプションが違うので注意

EOF
d3.js "v4" にて地図描画


v4 で大きく verup した d3.js だが v3 に慣れてしまい、
かつ、単純にライブラリをverupしただけでは互換性なくエラーになり、v3 固定で使い続けてきましたが、
いよいよv4にしていきましょうということでメモ。

今回は日本鉄道路線図を書いてみるというネタ。

<img src="https://qiita-image-store.s3.amazonaws.com/0/36803/808b7795-abe7-5ee1-2171-622365b6af67.png" width=400px>

国土数値情報 鉄道データ
http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N02-v2_3.html

```
$ unzip N02-15_GML.zip
$ ogr2ogr -f GeoJSON N02-15_RailroadSection.json N02-15_RailroadSection.shp
```

日本地図のデータ以前の投稿から拝借
http://qiita.com/hiyuzawa/items/dbe82feecc57ec84a880

実際のところのv3→v4変更点
* projection のところが d3.geo.mercator() → g3.geoMercator()
https://github.com/d3/d3-geo-projection

* path のところが d3.geo.path → d3.geoPath
https://github.com/d3/d3-geo

* d3.jsとは外れるけどtopojsonが topojson.feature(...)

意外と geo 系を使う分にはその程度の修正でいけた。

```html
<!DOCTYPE html>
<html>
<head>
    <title>D3.js v4 Example</title>
    <style>
.N02_002_1 { stroke: #6495ed; stroke-width: 2px;} /* JRの新幹線 */
.N02_002_2 { stroke: #00bfff; stroke-width: 2px;} /* JRの在来線 */
.N02_002_3 { stroke: #b8860b; stroke-width: 2px;} /* 公営鉄道 */
.N02_002_4 { stroke: #2e8b57; stroke-width: 2px;} /* 民営鉄道 */
.N02_002_5 { stroke: #ff4500; stroke-width: 2px;} /* 第三セクター */
    </style>
</head>
<body>

<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://unpkg.com/topojson@3"></script>
<script>
    var width = window.innerWidth;
    var height = window.innerHeight;
    var svg = d3.select("body").append("svg")
                .attr("width", width)
                .attr("height", height);
 
    var projection = d3.geoMercator()
                        .center([136, 38])
                        .scale(3300)
                        .translate([width/2, height/2]);
    var path = d3.geoPath(projection);

    console.log(topojson);

    d3.json("map_topo.json", function(json) {
        svg.selectAll("path")
            .data(topojson.feature(json, json.objects.map_geo).features)
            .enter()
            .append("path")
            .attr("stroke", "#999")
            .attr("fill", "none")
            .attr("d", path);
    })

    d3.json("N02-15_RailroadSection.json", function(json) {
        svg.selectAll("path")
            .data(json.features)
            .enter()
            .append("path")
            .attr("class", function(d) {
                return "N02_002_" + d.properties.N02_002;
            })
            .attr("fill", "none")
            .attr("d", path);
    });

</script>
</body>
</html>
```

 東京らへんを拡大

   
   <img src="https://qiita-image-store.s3.amazonaws.com/0/36803/c6a623e4-467e-31de-7deb-f1ebf3ea8b2c.png" width=400px>
【Xcode】 Clang-formatを自動化

相変わらずのメモ書きです

# clang-formatをbrew経由でインストール
ターミナルにて次のコマンドを入力

```brew tap tcr/tcr```
```brew install clang-format```

# Xcodeにて

### [Edit Schema]を開く
<img width="400" alt="スクリーンショット 2017-04-22 19.02.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/8109/72fbb136-505f-aad0-aaf5-c358ad9f6886.png">

### [Run]の中の[Pre Actions]を選択
<img width="1106" alt="スクリーンショット 2017-04-22 19.03.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/8109/fd0d16a0-51b5-e2a9-7bcb-7bf323e8d4c8.png">

### 自動フォーマットする対象を選ぶ
<img width="640" alt="スクリーンショット 2017-04-22 19.04.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/8109/5c1ec6a0-00ee-60bb-873c-95054e8a7ff7.png">

### スクリプトを設定する
以下のコマンドを入力する
```find ${SRCROOT} -name *.[h,m] | xargs clang-format -i -style=Google```
<img width="640" alt="スクリーンショット 2017-04-22 19.04.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/8109/b0e4b631-b293-2bf8-358d-1168725e92f6.png">

### あとはBuildするだけ！
※ 何もフォーマットをかけていないプロジェクトならば、ほぼ全体が変更されるのでバージョン管理しているならば別ブランチなどをきって行いましょう。

# 終わりに
今回設定したのは
「.hファイルと.mファイルをGoogleのフォーマットルールに沿った整形にする」といったものです。
カスタムは可能なので色々自分や現場にあったものにしておくといいでしょう。
【CakePHP3メモ⓪】インストール

# 前提
- Win10
- プロジェクト名：cake-test
- インストールディレクトリ：C:\cake-test
- Composerはインストール済
- CakePHP3.4.5
- ローカルポート：8001

# 手順
## CakePHPインストール
コマンドプロンプトで以下実行

```
c:\cake-test>composer create-project --prefer-dist cakephp/app cake-test
```

## サーバ起動

以下のバッチファイルを用意して実行

```exec-caketest-sever.bat
php C:\cake-test\cake-test\bin\cake.php server -H localhost -p 8001
```

## アクセス
http://localhost:8001/

## 参考
<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798048577/kuredev-22/ref=nosim/" name="amazletlink" target="_blank"><img src="https://images-fe.ssl-images-amazon.com/images/I/51GbBM22PzL._SL160_.jpg" alt="PHPフレームワーク CakePHP 3入門" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798048577/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">PHPフレームワーク CakePHP 3入門</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 17.04.22</div></div><div class="amazlet-detail">掌田 津耶乃 <br />秀和システム <br />売り上げランキング: 15,411<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798048577/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>
jQueryプラグインを単体テストしてカバレッジも取得したい

要望
-------------------------------------------

- 自作のjQueryプラグインの単体テストをしたい。
- DOMと密接に結びついているので、JSファイル単体ではなく、HTMLファイル全体としてテストしたい。
- ブラウザとコマンドラインの両方でテストしたい。
- カバレッジも取得して、結果をHTMLに出力したい。


実現
-------------------------------------------

簡単な例をGitHubで公開しています。
- JavaScriptのみ: https://github.com/sutara79/demo-qunit
- PHPも一緒に: https://github.com/sutara79/jq-plugin-template

(フォーク元 https://github.com/thorst/Code-Coverage-Qunit )

### ブラウザで実行
https://sutara79.github.io/demo-qunit/test/
ユニットテストのみ、可能です。

![001.png](https://qiita-image-store.s3.amazonaws.com/0/27816/7febcf74-5a61-0415-14fc-980de96e9875.png)

### コマンドラインで実行
カバレッジも同時に測定し、HTMLに出力します。

```
$ npm test

> demo-qunit@0.0.1 test /path/to/folder
> grunt qunit

Running "qunit:files" (qunit) task
Testing test/index.html .OK
>> 3 assertions passed (66ms)
>> Coverage:
>> -  Lines: 100%
>> -  Statements: 100%
>> -  Functions: 100%
>> -  Branches: 100%

Done.
```

https://sutara79.github.io/demo-qunit/coverage/lcov-report/

![002.png](https://qiita-image-store.s3.amazonaws.com/0/27816/f13a06c5-7713-494c-c2a4-5aa093322263.png)

![003.png](https://qiita-image-store.s3.amazonaws.com/0/27816/c718d00d-be3d-9e36-cfcb-33df47b55d42.png)


しくみ
-------------------------------------------

QUnitでテストして、Istanbulでカバレッジを測定・出力します。
コマンドラインでテストするためにPhantomJSを使います。
全体をGruntで管理しています。

GitHubにプッシュすると、TravisCIでテストしてCoverallsでカバレッジを測定し、READMEのバッジに反映されます。


QUnit 1.x系を使う理由
-------------------------------------------

QUnitの最新版は2.x系ですが、依存パッケージの[grunt-qunit-istanbul](https://github.com/asciidisco/grunt-qunit-istanbul)では対応していないようです。
フォーク元の依存パッケージのバージョン指定が古かったので更新してみましたが、grunt-qunit-istanbul だけは最新版にできませんでした。

|パッケージ|フォーク元|私|最新版(2017年4月現在)|
|:--|:--|:--|:--|
|grunt|0.4.2|^1.0.1|1.0.1|
|grunt-coveralls|0.3.0|^1.0.1|1.0.1|
|grunt-qunit-istanbul|^0.4.0|^0.6.0|1.0.0|

grunt-qunit-istanbul の最新版1.0.0のソースコードの一部を修正したらQUnit2.x系が動作するようになりましたが、それでも原因不明の不具合が発生するので諦めました。
一応、プルリクエストを送っています。
私の変更を適用すると、古いNode.jsではエラーになるようですが…。
https://github.com/asciidisco/grunt-qunit-istanbul/pull/68


他に試したこと
-------------------------------------------

Mochaを使いたかったのですが、どうしても私の要望通りになりません。
いろんな記事を参考にしましたが、下記のような失敗ばかりでした。

- ブラウザではテストもカバレッジ測定もできるが、コマンドラインでカバレッジを取得する方法が分からない。
- JSファイル単体ならばコマンドラインでテストもカバレッジ測定もできるが、jQueryやHTMLと結びついた状態で実行する方法が分からない。

結局、他の方が作ったベアボーンを利用させてもらおうと考え、上述のリポジトリにたどり着きました。
「pythonスタートブック」のpython3対応メモ


「pythonスタートブック」はプログラミング初心者がプログラミンの概念を獲得しつつpythonを勉強するための非常にオススメの本です。
ただ，この本は若干古く(2010年)，python2にしか対応していないため，この本を使用してpython3の勉強する際に混乱したところをまとめました。

---  

全体的に。
紙面上では，スクリプトの最初に
`# coding:utf-8`
と書くことになっているが，python3ではデフォルトで文字コードがutf-8になるので不要。



---  

BMI計算とかのところ。
raw_input()がpython3にはない。
→ input() を使う


---   

自分でモジュールを作ってimportし，それをreloadするくだり。
のreload()関数がpython3では廃止になっている


```代替  
import importlib
importlib.reload(my_module)
```


---  

map()関数使うところ。
map(str, [1,2,3])みたいなときに，紙面上と結果が違う。

→ python2では自動的にリスト形式として返ってくるが，python3では返ってこない。
　list()でくくる必要がある。  

```
list(map(str, [1,2,3]))
```  
　
　
　
### 参考
http://qiita.com/mriho/items/52f53559ba7fe7ef06ff
【CakePHP3メモ①】静的ファイルを表示する（コントローラも何も使わない）

# 前提
http://qiita.com/kure/items/0c55c6a02754bd450801


# 確認すること
- 静的ファイルを表示する（コントローラも何も使わない）

# 手順
## コード
以下のファイルを「webroot」配下に配置

```php:test.php
<?php
echo "test.php";
```

## 動作確認
http://localhost:8001/test.php
にアクセス

# 参考
p45.

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798048577/kuredev-22/ref=nosim/" name="amazletlink" target="_blank"><img src="https://images-fe.ssl-images-amazon.com/images/I/51GbBM22PzL._SL160_.jpg" alt="PHPフレームワーク CakePHP 3入門" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798048577/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">PHPフレームワーク CakePHP 3入門</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 17.04.22</div></div><div class="amazlet-detail">掌田 津耶乃 <br />秀和システム <br />売り上げランキング: 15,411<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798048577/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>
SourceTreeで何度もGitHub、bitbucketのログインを求められた時に解決した方法

SourceTreeにて、
GitHubやbitbucketのアカウントを複数追加し、remoteに接続しようとした時、
下記のエラーが一つのアカウントで出て、再ログインを求められた・・・

**"could not authorize request with the available token. please re-authenticate"**

再認証が必要なのかと思い、再度ログインをした後も
また、同じエラーが出てきてログインを求められるという、無限ループ状態！＼(^o^)／

そこで、
SSH認証キーを作り直したり、configファイルを見直したりしたが、
一向に状況が改善せず・・・
（ちなみに、この時ターミナル上でのssh接続は確認済み。

その時に、以下の記事を発見！
https://community.atlassian.com/t5/Answers-Developer-Questions/Authenticating-with-Bitbucket-not-possible/qaq-p/502460
（Google翻訳様様(-人-)

ここでユーザー名がふにゃふにゃと書いているのを見て、
試しにユーザー名を変えたら・・・

**動いた！！！**

どうやら、SourceTreeで使用するアカウントとしては、
**GitHubとbitbucketで同じユーザー名は使用できない**ということらしいです・・・

上記のエラーで悩んでいる方は、
ユーザー名の見直しを検討して見てはいかがでしょうか・・・
※SourceTreeのバージョンは、2.5になります。アップデートで修正される可能性もあります。（ってか修正してほしい！

（全く関係ないけど、bitbucket良いなぁ・・・非公開リポジトリを無料で作れる〜！