OmniAICreator/Qiita-1.07M huggingface dataset:
MacのTerminalで「 ssh 接続名」で SSH 接続

# はじめに
　サーバーに接続する際、毎回下記のように接続するのは大変ですよね。

```terminal
$ ssh ユーザー名@ホスト名 -i 秘密鍵ファイルのパス -p ポート番号
```

　なので、下記のように接続できるように設定します。

```terminal
$ ssh 接続名
```

## 環境
- macOS High Sierra 10.13.3

## 前提条件（重要）
- 接続情報（ホスト名、ユーザー名、ポート番号）が分かっている
- SSH 秘密鍵取得済み（拡張子が ppk ならば OpenSSH 形式にする → [参考](https://qiita.com/B73W56H84/items/88bc05b119da2eaa4757)）
- 上記の情報で接続できる

# 接続するまで

> １．~/.ssh ディレクトリの作成
> ２．秘密鍵ファイルを移動
> ３．~/.ssh/config ファイルを作成
> ４．サーバーに接続できるか確認

## １．~/.ssh ディレクトリの作成

```terminal
# 現在のユーザーで作成
$ mkdir ~/.ssh

# 所有者に読み・書き・実行権限を付与
$ chmod 700 ~/.ssh
```

## ２．秘密鍵ファイルを移動

```terminal
# ~/.ssh ディレクトリへ移動
$ mv 現在の秘密鍵ファイルのパス ~/.ssh/秘密鍵ファイル名

# 所有者に読み込み権限を付与
$ chmod 400 ~/.ssh/秘密鍵ファイル名
```

## ３．~/.ssh/config ファイルを作成

```terminal
# 現在のユーザーで作成・編集
$ vi ~/.ssh/config
```

```terminal:~/.ssh/config
Host 接続名(自由)
    HostName ホスト名
    User ユーザー名
    IdentityFile ~/.ssh/秘密鍵のファイル名
    Port ポート番号
    TCPKeepAlive yes
    IdentitiesOnly yes
```

　 vi で上書き保存してターミナルに戻る ← :wq

```terminal
# 所有者に読み・書き権限を付与
$ chmod 600 ~/.ssh/config
```

## ４．サーバーに接続できるか確認

```terminal
$ ssh 接続名
```

# 接続できない場合
　ファイルやディレクトリの所有者や権限が間違っていないか確認、~/.ssh/config の設定が間違っていないか確認する。それでも接続できない場合は教えてください(笑)

# おわりに
Windows では [TeraTerm](https://ja.osdn.net/projects/ttssh2/) をインストールして使っていましたが、Mac は デフォルトで Terminal 使えるのほんと良いですね！ Mac 信者になりそうw （2018/10/6現在、Mac 信者になりましたw）

　もし記事でおかしい点・分かりにくい点があったり、もっと良い方法があったりしたら、どんどん突っ込んでもらえると助かります！！
Unityツールにラジオボタンを実装する方法　UnityEditor拡張その３

#こんなことってありませんか？
自作のツールにWebとかで使われているラジオボタンを実装したい！

そのお悩みこの記事を読んだ人は解決する手段の一つをてにいれるかもしれません。



#早速実装

今回は手短に実装
以下を関数に作成するだけ


``` sample.cs

    /// <summary>
    /// ラジオボタン、変更したら通知を受け取れる。
    /// </summary>
    /// <param name="_now_select">現在選択しているもの</param>
    /// <param name="_radio_name">ラジオで表示する文字列</param>
    /// <param name="_notification">変更された際に通知を行うためのもの</param>
    /// <param name="_layout">レイアウト</param>
    /// <returns>選択しているもの</returns>
   public int Radio(int _now_select,string[] _radio_name,System.Action<int> _notification,params GUILayoutOption[] _layout)
    {
        int _prev_select = _now_select;
        bool[] _radio_prev = new bool[_radio_name.Length];
        _radio_prev[_now_select] = true;

        //羅列分描画を行う。
        for (int _i = 0;_i < _radio_name.Length;_i++)
        {
            bool _result = EditorGUILayout.Toggle(_radio_name[_i], _radio_prev[_i], EditorStyles.radioButton, _layout);
                //_radio_prev[_i],_radio_name[_i],null,_layout);
            
            if(_result != _radio_prev[_i])
            {
                _now_select = _i;
            }

        }

        
        //選択しているものが違う状態になったら通知
        if(null != _notification && _now_select != _prev_select)
        {
            _notification(_now_select);
        }

        return _now_select;
    }

```

上記を実装すると以下の感じになります。
文字列として、国名を引数として渡しています。


![editor_toggle_sample.png](https://qiita-image-store.s3.amazonaws.com/0/101366/493a1bbd-b285-a2e9-0f2b-eb4c6a6c6896.png)


##解説

おおよそコード通りなのですが、
UI部分にEditorGUILayout.Toggleを使っています。
通常、この場合はToggleボタンが出てしますのですが、EditorStyles.radioButton
にてラジオボタンにしています。

このEditorStylesによって、性質が似た入力のものなら、見た目を変更する事が可能です。

それに加えて、１つしか選択されていない処理をしているだけの
シンプルなコードになっています。（もうちょいスマートなやり方はある気がするが・・・）


##ちなみに　ToggleLeftに使用すると・・・
今回では、EditorGUILayout.Toggleを使っていますが、非常に不細工な格好になっています。

ToggleLeftを使えば行けるんじゃないか？
なんて事を考えた方もいらっしゃるかもしれません。


しかしながら、ToggleLeftを使用すると
チェックボックス＋ラジオボタンという奇妙な形になってしまいます。

推測ですが、ToggleLeftでのStyleの内容には、文字を左に移動させているみたいな処理が働く設定が
設定がされており、それが影響して、左に行っていると思われます。

###解決方法
なので、Radioボタンを左に行う方法としては２つかなと個人的には考えています。

１．ToggleLeftの左に移動させるパラメーターを探してそれと同じようにする。
２．Radioボタンの左にLabelをHorizontalで配置する。

１に関しては、正直な所おすすめはしない事ではありますが、方法の一つとして提示させていただきます。
（ただし必ずしもできるとはいっていない）

というのも、Styleには、触れてないパラメータも多くあり、仮に、RadioボタンとToggleLeftの値を、全部見比べるだけでもなかなか大変な上、実際にその影響のしている箇所を見つけても
ラジオが左によるとは限らないからです。

苦労の割には少し見合わないかなと思います。

２に関しては、手軽に調整等を行えるので、関数だけ作ってしまえば、
非常に導入が簡単になるのかなと思います。（たぶん）
clone or download > Download ZIPしたら、pull requestできなくなった

（超絶初心者なので違う解決方法があるとは思います。悪しからず。）

# 発生した問題

ローカルで、ブランチ(send_file)を作成して、作っていた。
しかし、プッシュしたときに下のようにmasterから独立してリモートにブランチができてしまった。

<img width="578" alt="スクリーンショット 2018-04-30 18.14.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/252445/a35f5056-7de9-a3ea-6f84-0005e452f6f0.png">

pushは無限にできるのだが、どうやってもpull request,　mergeができない。
（超絶初心者なので、もしかしたら他にやり方があったのかもしれないが、、）

# そもそもの原因
今まで作っていたアプリを諸事情によって一度丸ごと消してしまった。

そのあと、自分作成のリモートリポジトリから
Code > clone or download > **Download ZIP**
でファイルをDLし、元あった場所に貼り付けた。

これによりmasterとsend_fileは異なる履歴として見られてしまったらしい。

# やってみたこと

## git rebase --onto

これを使うと別のとこに伸びているブランチを
他のところにくっつけられるとのこと。（言い方が雑で申し訳ない、引用をみて）

>https://qiita.com/kyanro@github/items/d0111b07022494457b75

>https://stackoverflow.com/questions/23344320/there-isnt-anything-to-compare-nothing-to-compare-branches-are-entirely-diffe

しかしこれは、ローカルのブランチで実行できてもリモートのブランチではできなかった。


## git clone -b

もう今まで更新していたブランチは一回削除してmasterからクローンを作ることにした。

>https://qiita.com/icoxfog417/items/5776e0f0f758f0f0e48a

結果としては、これにより従来通り利用ができるようになった。
しかし、当時のブランチのデータは全て消えてしまった、、

# 教訓

Code > clone or download > **Download ZIP**　はNG

クローンでデータを引っ張ってくること。
もちろん、pullで持ってこれるのが一番楽だし安全。

もっと勉強せねば。ハイフンとアンダーバーを組み合わせるて、、
ブランチの命名規則から勉強、、
Minecraft Pi Editionのスクリーンショットを撮る

Minecraft Pi editionの画面をscrotなどで撮ろうとしても、真っ黒になってうまく行きません。raspi2pngというコマンドを使います。

```
raspi2png -d 5 -p "lm-minecraft.png"
```

-d　：撮るタイミングを遅らせる。`-d 5` --> ５秒後に撮る
-p　：ファイル名をつける。 `-p ファイル名`

aptでは直接入らないため、GitHubのリポジトリから取得して利用します。

https://github.com/AndrewFromMelbourne/raspi2png

## 参考リンク
https://www.raspberrypi-spy.co.uk/2014/05/how-to-capture-minecraft-screenshots-on-the-raspberry-pi/
mktmp, pushd, popdの使い方

mktmp, pushd, popdはセットで使われることが多いと思います。
シェルスクリプト内で、一時ディレクトリを作成してそこにカレントディレクトリを変更し、また以前のカレントディレクトリに戻るといったときに使われます。

```bash

# (処理)

# /tmp以下に一時ディレクトリを作成し、TMPDIR変数にパスを格納
TMPDIR=$(mktemp -d --tmpdir=/tmp)
# 一時ディレクトリに移動
pushd $TMPDIR > /dev/null

# (処理)

# 元いたディレクトリに戻る
popd > /dev/null

# (処理)

```
agettyがCPU100%に張り付いたときの対応

特に起動スクリプトがあるわけではないので、下記コマンドを使って再起動しました。

```bash
$ sudo initctl list
rc stop/waiting
tty (/dev/tty3) start/running, process 2914
tty (/dev/tty2) start/running, process 2911
tty (/dev/tty1) start/running, process 2907
tty (/dev/tty6) start/running, process 2921
tty (/dev/tty5) start/running, process 2918
tty (/dev/tty4) start/running, process 2916
update-motd stop/waiting
plymouth-shutdown stop/waiting
control-alt-delete stop/waiting
rcS-emergency stop/waiting
kexec-disable stop/waiting
quit-plymouth stop/waiting
rcS stop/waiting
prefdm stop/waiting
init-system-dbus stop/waiting
print-image-id stop/waiting
elastic-network-interfaces stop/waiting
splash-manager stop/waiting
start-ttys stop/waiting
amazon-ssm-agent start/running, process 17313
rcS-sulogin stop/waiting
serial (ttyS0) start/running, process 2906

$ sudo initctl status serial DEV=ttyS0 serial (ttyS0) start/running, process 2906

$ sudo initctl restart serial DEV=ttyS0 serial (ttyS0) start/running, process 5688
```
【Unity】Prefabの階層を全て表示してHierarchyと同じように編集できるエディタ拡張

# はじめに

Unityを使う上でPrefabの存在は欠かせないものですが、実際に使うと使いずらい部分が何点かあります。
特に自分は、

- Pojectビューでは2階層までしか表示されない
- Scene上に配置しないとPrefab内部を編集できない（Deleteなど）
- ネスト化ができない

この3つが使いずらい部分に感じています。
ネスト化に関しては @kyubuns さんが以下のサイトにてネスト化ツールを公開しているためそちらを参照するとして、今回はそれ以外を対処していきます。
https://qiita.com/kyubuns/items/5741e5281f4bb8de656c

# 環境
Unity 2017 4.1f1

# 作ったもの
いろいろと解説をする前に、早速作ったものを紹介します。

![mo68j-62ce3.gif](https://qiita-image-store.s3.amazonaws.com/0/253997/f96feacd-de7d-6d3d-ce15-540786af2e9f.gif)

名は『Prefab Editor』
これを使うことで、いままでScene上に配置しなければあまり編集できなかったPrefabが編集できるようになります。

このエディタ拡張では、Projectビューで選択したPrefabがPrefab EditorのWindowに表示されるようになっています。
Window上の見た目はHierarchyをそのまんま参考にしています。そして、できることも、

- Prefabの3階層以下を表示し、選択するとInspector上にも表示される
- GameObjectの親子関係を編集できる
- 別のPrefabやScene上に配置されているGameObjectを中につっこめる
- 二回クリックするとリネームできる
- 右クリックでGameObjectを作成したり削除したりできる
- etc...

このように、ProjectビューからScene上に配置しなくても、Hierarchy上とほとんど同じことができるようになっています。

#使い方
以下のリンクからダウンロードできるpackageをダブルクリックしてUnityにインポートしてください。
https://github.com/yukiringo/PrefabEditor/raw/master/prefab_editor.unitypackage

![menu.png](https://qiita-image-store.s3.amazonaws.com/0/253997/9d6681be-0fbb-b0da-fdd9-78656ee3ecc8.png)

Window -> Prefab Editor
を選択します。

![select.PNG](https://qiita-image-store.s3.amazonaws.com/0/253997/daec9eb1-19ae-3421-fc1d-3ba2d2d13b27.png)

そして、Projectビューにある編集したいPrefabを選択してください。
Prefab EditorのWindow上に、選択したPrefabがHierarchyへ配置したように表示されていると思います。

あとは、Hierarchyでやるのと同じように編集してもらえばOKです。

# 簡単に解説
このまま終わるのもあれなので、使った機能について紹介します。

今回はHierarchyのような見た目にするため、Unity 5.6にて追加されたTreeViewを用いています。このTreeViewはHierarchyにも使用されているらしいです。
なので、この機能を使えばある程度楽にHierarchyを再現することができます。

詳細: https://docs.unity3d.com/Manual/TreeViewAPI.html

ですが実は自分、最初この機能の存在を知りませんでした…
なので、この機能を知るまではFoldoutなどを使って地道にやっていました（めちゃくちゃ面倒だった）

TreeViewは高機能なので、もし似たようなエディタ拡張をする際はぜひ使ってみてください。

# まとめ
これでPrefabをいちいちScene上に配置せずとも編集できるようになりました。
これによって劇的に楽になるわけではないですが、少しでも作業効率が上がればいいなと思います。

こちらはgithubにて公開しています。
https://github.com/yukiringo/PrefabEditor

バグ報告や感想、意見などお待ちしております。
https://twitter.com/_ykringo
TypeScript でプロパティあり関数を定義する

# はじめに

JavaScript の関数は、単なるオブジェクトでもあるため、プロパティやメソッドをはやすことができます。使用例としては、jQuery オブジェクトが一番有名でしょうか。シンタックスを簡素化するため、いろいろなライブラリで従来からよく使用されているテクニックです。

```javascript
var fn = function() {
  return "function";
};
fn.prop = "property";
fn.method = function() {
  return "method";
};

console.log(fn()); // => "function"
console.log(fn.prop); // => "property"
console.log(fn.method()); // => "method"
```

問題は、これを TypeScript で書くにはどうすればよいかです。

# 失敗したパターン

まず思いつくのが次の方法です。interface では関数型インターフェイスの記法があるわけですから、そのまま実装してしまえばよいと考えるのが自然です。しかし、この方法では`public ()`の部分でコンパイルエラーになってしまいます。どうも、関数型インターフェイスの記法のままでは実装を書くことはできないようです。 

```typescript
class Fn {
  public () {
    return "function";
  }

  public prop = "property";

  public method() {
    return "method";
  }
}
```

# 成功したパターン

実はきちんと [TypeScript のリファレンスに書いて](https://www.typescriptlang.org/docs/handbook/interfaces.html#hybrid-types)ありました。関数を定義した後、むりやりキャストすれば良いようです。

```typescript
interface IFn {
  (): string;
  prop: string;
  method(): string;
}

const fn = (() => "function") as IFn;
fn.prop = "property";
fn.method = () => "method";
```

いやはや、なかなかにトリッキーな解決策です。
Spring Data REST HAL BrowserでSpringのRESTを動作確認

[Spring Data JPAプログラミング入門 - Amazon](https://www.amazon.co.jp/dp/4798051950)にSpring Data RESTのRESTクライアントにHAL Browserがある、と書いてあったので動かす。

## 準備
```xml:pom.xml
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.1.RELEASE</version>
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-rest</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-rest-hal-browser</artifactId>
		</dependency>
		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
		</dependency>
	</dependencies>
```

```java
@RestController
@SpringBootApplication
public class App {
	@RequestMapping("/hoge")
	public String hoge() {
		return "{\"sdfsa\":\"hogehoge\"}";
	}

	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}
}
```

## うごかす

http://localhost:8080/ にアクセス。

![springrestdatahal.jpg](https://qiita-image-store.s3.amazonaws.com/0/31934/125e516b-7c0e-1dd1-7ed4-2bb1a23a6d4f.jpeg)

ただ、```spring-data-rest```の[HAL](http://stateless.co/hal_specification.html)の動作確認が主用途なので、汎用のGUI RESTクライアントとしては微妙といったところか。上で書いたように```spring-data-rest```以外の自前の```@RestController```にはアクセスできるのでローカルの動作確認用には使える…が、そのために依存性入れるのはちょっと微妙。
gemでRmagickをインストールする時に起こったエラー。



#Railsで画像を管理を扱いたい時に便利な以下のgem

```
gem 'carrierwave' (画像管理)
gem 'rmagick' (画像加工用)
```

ただしrmagickをインストールする場合、imagemagickというソフトウェアを先にインストールする必要があります。

```
$ brew install imagemagick
```

bundle install ではなくbrew installでosに直接インストールする。(C言語で書かれているからみたいです)


gemをインストールする準備完了。ただ、これで*bundle install*をしてしまうとエラーが起こった。
#原因
上記でbrew install したimagemagickはデフォルトではバージョンが７以上で、RMagickはImagemagickのバージョン7に対応していないみたいです。なので既に入っているバージョンが7の場合は、バージョンを下げます。

```
$ brew info imagemagick (バージョン確認)
```
バージョンが7以上だったら↓

```
$ brew uninstall imagemagick (imagemagickをアンインストール)
$ brew install imagemagick@6 (バージョンが６のimagemagickをインストール)
```
Tcl/Tkでプログラムを書く(3)

[Tcl/Tkでプログラムを書く(2)](https://qiita.com/akinori-ito/items/a6abe82f4c814272f06c)から続く

#GUIを使う
基本的なコマンドの使い方の説明も飽きてきたので、GUIを使ってみよう。単純なアプリとして、次のようなものを作ってみる。

+ ボタン1個のみからなる
+ ボタンを押すと、押した時刻を標準出力に吐き出す

単純なものだが、こんなものでも使い道はあるだろう。

まずプログラムを見てみる。

```Tcl
proc printtime {} {
  puts [clock format [clock seconds]]
}
button .b -text push -command printtime
pack .b
```
これを実行すると、次のようなボタンが現れる。

![クリップボード.png](https://qiita-image-store.s3.amazonaws.com/0/219428/083c0bf7-b584-3f3b-d3a1-358ed519e789.png)

で、これを押すと、標準出力に次のような出力が出てくる。

```
Mon Apr 30 16:45:52 +0900 2018
Mon Apr 30 16:45:56 +0900 2018
```
#GUI部品を選んで表示

GUIを作るには、まず部品(widget)を選ぶ必要がある。これには次のような手順が必要だ。

1. 必要な部品を選び、部品を生成する
2. 生成した部品を配置する

##部品の生成
部品を生成するには、生成のためのコマンドを使う。ボタンを生成するのは`button`コマンドである。

```
button 部品名 -text 表示文字列 -command 実行コマンド
```
部品の名前は . で始まり、適当な名前をつけることができる。今回のプログラムは

```
button .b -text push -command printtime
```

だったので、

+ .b という名前のボタンを作る
+ ボタンには push と表示
+ ボタンが押された時には printtime というコマンドを実行

という指定であることが分かる。

この .b という名前は単なる名前ではなく、コマンドになっている。定義されたすべての部品はそれぞれ独自のコマンドになっていて、その部品を操作したり、情報を取得するために使う。これをウィジェットコマンドという。

##部品の配置
部品を生成しただけでは、部品は表示されず、使えるようにもならない。部品を使うためには配置しなければならない。

部品を配置するコマンドには`place`, `pack`, `grid`の３つがある。`place`は画面の指定した座標に部品を配置するが、柔軟性がないのであまり使わない。`pack`は画面の端から指定した方向に部品を詰め込んでいく配置法である。また、`grid`は画面を格子状に区切り、指定した区画に部品を詰め込む配置法である。簡単な配置には`pack`を、複雑な配置には`grid`を使うのが良いだろう。

`pack`は次のように使う。

```
pack 部品名... [-side 方向] 
```

方向は top, bottom, left, right のいずれか。topにすると上から下へ、leftにすると左から右へ部品を詰める。画面に入りきらなくなると折り返す。

`grid`の使い方はこんな感じ。

```
grid 部品名 -row 行番号 -column 列番号
```
行番号、列番号は0から始まる。

`pack`,`grid`いずれも多くのオプションがある。たとえば、画面をリサイズした時に部品の大きさは変わるのか、変わらない場合には区画のどちら側に寄るのか、などが指定できる。

#時刻の表示

GUIそのものとは関係ないが、時刻の表示についてもすこし説明する。
`clock seconds`コマンドは現在の秒数を返すコマンドであり、`clock format`コマンドはそれを時刻表示に変換するコマンドである。
機械学習の環境構築でよく見る公式リンクのメモ 

tensorflow、cuda、cudnnがバージョンアップする度に相性問題が発生するので、
よく訪れるページをメモをする

■Tensorflow

- Tensorflow
  https://www.tensorflow.org/install/install_sources#tested_source_configurations

■Ubuntu

- Ubuntu
https://www.ubuntu.com/download

- Ubuntu Japanese Team
https://www.ubuntulinux.jp/download/ja-remix

- Ubuntu パッケージ検索
https://packages.ubuntu.com/

■Nvidia

- Nvidia Driver
http://www.nvidia.co.jp/Download/index.aspx?lang=jp

- CUDA
  https://developer.nvidia.com/cuda-downloads

- CUDNN
https://developer.nvidia.com/rdp/cudnn-download

■Docker

- Docker(Ubuntu)
https://docs.docker.com/install/linux/docker-ce/ubuntu/

- DOCKER HUB(nvidia/cuda)
https://hub.docker.com/r/nvidia/cuda/

- NVIDA DOCKER
https://nvidia.github.io/nvidia-docker/
学内Rails勉強会用資料

ほぼほぼ他の方が作られたもののリンクを纏めてるだけです。
書かれた方に多謝

# 目次
1. 環境構築
2. アプリ作成
3. デプロイ



## 環境構築
今回は

- AWSCloud9
- Rails 5.2
- Ruby 2.4
- MySQL
- AWS(EC2サーバー)

で作成していきます

### AWSCloud9(２時間)
1.AWSアカウント取得

- クレジットカード持ってる人は[こちら](https://aws.amazon.com/jp/register-flow/)
- 学生は[こちら](https://www.awseducate.com/registration?refid=0ut2khdPC5Ljlw6mgkdQIr1Cj1SKTePY#APP_TYPE-Student)

2.AWS初期設定

- ちょっと記事が古いかも知れないけど[こちら](https://qiita.com/tmknom/items/303db2d1d928db720888)

### Github

- [学生無料](https://qiita.com/mtfum/items/d8c06c9a28ce04d3043a)なので設定しておこう

## Cloud9への設定

そのままだとMySQLは使えないのでCloud9のbashの画面で
 ```sudo yum install mysql-devel
gem install mysql2```

## アプリケーション作成

##### 1.アプリ作成  
```rails new アプリ名 -d mysql```
###### ディレクトリ移動
```cd アプリ名```
##### 3.ユーザー関係（ログインなど）作成
deviseを利用
gem でインストールが必要
[参考](https://qiita.com/cigalecigales/items/f4274088f20832252374) 
##### 4.各種カテゴリ作成
railsの機能であるscaffoldを使用
記事の投稿や削除などが出来る
[参考](https://qiita.com/prgseek/items/400a49fd4783f3be7fa2)

##### 5.ここらで一旦DB作成
DB作成
```rake db:create ```
DB更新
```rake db:migrate```

##### 6.見た目がイマイチ?
[テンプレートを適用](http://now-is-the-time1014.com/programming/post-613/)


※まだ途中
[mac]php composerのインストール方法

composerをサクッとインストールしていきます！

#composerをインストールする

```.bash
#composerをインストール
curl -sS https://getcomposer.org/installer | php

#/usr/local/bin/composerに移動させる
sudo mv composer.phar /usr/local/bin/composer

#composerがインストールされているか確認
composer --version

#別の方法で確認
which composer

```

じゃあcomposer installやってみよう。

```
composer install
```

できた。

終わり！
[C#] Stackを複製する時の罠

C# でコピーコンストラクタを書いてて、 Stack<T> の複製の落とし穴に嵌ったのでメモ。

下記のコード、一見何も問題ないように思いますよね？　

```csharp
Stack<T> CopyStack<T>(Stack<T> from){
   return new Stack<T>(from);
}
```

でも、実はこうすると中身が逆順になってしまうんです。
fromの中身が [1,2,3] だと、複製したスタックは [3,2,1]になっちゃいます。

正しく複製するには、引数を逆転させないといけなかった。

```csharp
Stack<T> CopyStack<T>(Stack<T> from){
   return new Stack<T>(from.Reverse());
}
```

Stack<T> のコンストラクタに Stack<T> を渡すと IEnumerable<T> に変換されますが、
この時の変換処理は、順次 Pop して取り出していく実装になってます。
ところが、コンストラクタでは IEnumerable<T> から取り出した順に Push していく実装になってます。
このミスマッチによって中身の逆転した Stack<T> が生成されてしまうようです。

[1,2,3] >> []
[1,2]   >> [3]
[1]     >> [3,2]
[]      >> [3,2,1]
Windows10でYOLOv3のKeras実装を動かした

#前提環境
[前回の環境構築](https://qiita.com/mhirok/items/0504d402e9d719d1b7d1)で準備。
- Windows10 Professional 64bit
- Anaconda3 5.0.0 64bit(Python3.6)
- CUDA 9.0
- cuDNN 7.1.3
- TensorFlow
- Keras

# 導入するもの
- YOLOv3 Keras実装 

# YOLOv3を取得
[qqwweee/keras-yolo3](https://github.com/qqwweee/keras-yolo3)でYOLOのKeras実装が公開されているので、cloneしてきました。

# Quick Start
基本、READMEの通りに動かせばすぐに実行できました。
- [YOLO website](https://pjreddie.com/darknet/yolo/)から学習済みパラメータを取得。
- yolo.h5を作る
- pillowが入ってなかったので入れた
- 適当な画像を用意し、yolo.pyを実行

```text:実行結果
Found 22 boxes for img
truck 0.38 (98, 59) (109, 72)
truck 0.89 (54, 110) (81, 138)
bus 0.93 (37, 86) (67, 116)
car 0.30 (86, 92) (98, 99)
car 0.31 (88, 98) (98, 107)
car 0.43 (181, 84) (197, 94)
car 0.55 (103, 96) (119, 105)
car 0.55 (121, 66) (130, 73)
car 0.64 (84, 94) (99, 106)
car 0.66 (108, 67) (117, 74)
car 0.66 (169, 88) (181, 98)
car 0.80 (198, 96) (213, 106)
car 0.87 (169, 133) (198, 160)
car 0.91 (13, 145) (57, 186)
car 0.92 (149, 93) (165, 105)
car 0.95 (0, 127) (18, 159)
car 0.97 (181, 97) (199, 111)
car 0.97 (101, 107) (122, 120)
car 0.98 (111, 85) (127, 97)
car 0.98 (73, 101) (92, 116)
car 0.98 (88, 129) (115, 154)
car 0.99 (215, 163) (259, 193)
5.983695983886719
```
Tcl/Tkでプログラムを書く(2)

[Tcl/Tkでプログラムを書く(1)](https://qiita.com/akinori-ito/items/92ca39617773a2f48e0b)から続く。

#制御構造

標準的な制御構造は一通り使える。(1)で書いたとおり、すべての制御構造はコマンドである。

`if`コマンドは見た目普通である。「条件」は`expr`が評価する。

```Tcl
if 条件 成立部 else 非成立部
```

前述の`for`と同じく、`if`も１行で書かなければならないので、

```Tcl
if {$i == 0} {
  puts yes
}
else {
  puts no
}
```

のようには書けない（これだと`else`が次の行に来る）。正しくは次のようになる。

```Tcl
if {$i == 0} {
  puts yes
} else {
  puts no
}
```



`switch`もある。見づらいので個人的にはあまり使わない。

```Tcl
switch [オプション] 値 パターン 処理 [パターン 処理 ...] [default 処理]
```

`switch`もコマンドなので、{ }の中の改行を除き、１行で書かなければならない。行をまたぐ時には \ で継続行にしなければならない。例えばこんな感じ。

```Tcl
switch $var \
  aaa {puts 1} \
  bbb {puts 2} \
  default {puts 100}
```

ループには`while`, `for`, `foreach` がある。

```Tcl
while 条件 処理
for 初期化 継続判定 更新 処理
foreach 変数 リスト 処理
```

`foreach`は例えば次のように使う。

```Tcl
set words {foo baa baz}
foreach w $words {
  puts $w
}
```

#コマンドが返す値の利用

ほかのコマンドが返す値を使いたいことがある。例えば`expr`で計算した値を変数に代入する場合などである。これには[ ]を使う。

```Tcl
set x 10
set y [expr $x*$x]
```

#コマンドの定義

コマンドの定義は`proc`コマンドである。

```Tcl
proc コマンド名 引数リスト 処理
```

例えば同じ引数を２度繰り返すコマンドは次のように定義できる。

```Tcl
proc dub {x} {
  return $x$x
}
```

同じ引数をn回繰り返すコマンドは（いろんな書き方があるが）次のように書ける。

```Tcl
proc dubn {x n} {
  if {$n == 0} {
    return {}
  } else {
    return $x[dubn $x [expr $n-1]]
  }
}
```

[その(3)](https://qiita.com/akinori-ito/items/919edfd6c52cf0b37247)に続く
rg(ripgrep)でinclude/excludeする

### コード

```
# include
rg foo -g '*.min.js'

# exclude
rg foo -g '!*.min.js'
```

`!`を使うとincludeがexcludeに切り替わる。`-g`は`--glob`のショートハンド。
急いで探しものをしているときとか、非常に助かります。

### ちょっとした注意点

がいくつかありまして。

* `!`(exclude)とクォートを組み合わせる時はシングルクォーテーションにする
    * ダブルクオーテーションだとヒストリ展開されてしまう
* globの対象はファイルパス
    * ファイルの中身が対象ではないので注意

globしつつファイルの中身に対して絞り込み等をしたい場合は、最初の例のようにオプションなし引数で単語を渡すか、あるいは下記のように正規表現のオプション`-e`が使えます。

```
rg -e '^foo' -g '*.md'
```

### 参考
* https://qiita.com/anqooqie/items/785f46a8cc5f10ba7abb
WOWHoneypotの追加設定


WOWHoneypotで追加設定した項目を以下に記載します。

##Firewallで全TCPポートを8080へリダイレクト 
[morihi-soc](https://github.com/morihisa/WOWHoneypot)さんが公開している構築方法では、80/tcp宛へのHTTP通信を8080/tcpへリダイレクトするだけです。
昨今、IoT系の攻撃が多いとのことなので、80/tcp以外のポートも検知したい。
そこで、構築手順にある設定を少し変更することで全ポートを8080/tcpへリダイレクトさせます。

```before.
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
```
```after.
-A PREROUTING -p tcp --dport 1:65535 -j REDIRECT --to-port 8080
```

##応答ヘッダ追加 
CMS等は特定のHTTPヘッダを返しますので、攻撃者は特定ヘッダを確認してから攻撃してる可能性があります。
例えば、ShodanはこのHTTPヘッダを確認してシステムを識別しています。
そこで逆手をとって、wowhoneypot.pyの120行目あたりに偽装したい追加のHTTPヘッダを追加します。
例えば、以下の行を追加します。
システムのHTTPヘッダを確認して追加することで、良い感じに攻撃を収穫できるのではないかなー。

・self.send_header('Server', 'Microsoft-IIS/6.0')
・self.send_header('X-Powered-By', 'PHP/5.6.30')


##defaultのHTMLを変更
「応答ヘッダ追加」で書いたこととほとんど同じです。
ShodanはHTTPヘッダを確認してシステムを識別していますが、もちろんソースコードも確認してシステムを識別しています。
偽装したいシステムのソースを一部ひっぱり、HTMLに追加しました。

##mrrules_local.xmlに30個程追加
攻撃を受けるための記述はmrrules.xmlに記載されているが、攻撃を受けた時の成功応答に関する記述がなかったので、自家焙煎することにしました。
攻撃の内容を見ると、実害系のwgetしてファイル取得することや、脆弱有無系のwhoamiを実行させたりすることが多い気がします。
そこで、URIまたはボディにwhoamiがあった場合「root」と返してあげるようにした。
他に来そうな脆弱有無系のコマンドを同じように作成しました。

```mrrules_local.xml
  <mrr>
    <meta>
      <mrrid>20009</mrrid>
      <enable>True</enable>
      <note>whoami(GET)</note>
    </meta>
    <trigger>
          <method>GET</method>
      <uri>whoami</uri>
    </trigger>
    <response>
      <status>200</status>
      <body filename="whoami.txt"></body>
    </response>
  </mrr>

  <mrr>
    <meta>
      <mrrid>20010</mrrid>
      <enable>True</enable>
      <note>whoami(POST)</note>
    </meta>
    <trigger>
      <method>POST</method>
      <body>whoami</body>
    </trigger>
    <response>
      <status>200</status>
      <body filename="whoami.txt"></body>
    </response>
  </mrr>
```

##最後に
WOWHoneypotの田植えと収穫に関する内容は多いけど、WOWHoneypotの育成があまり見受けられなかった。
mrrules_local.xmlがもう少し充実してきたら、公開、、、できたらいいな。
CentOS 7 cmake 3.11.1のソースファイルからのインストール

# 動作確認環境
- 仮想環境 VMware Workstation Player 14.1.1
- OS Windows 10 Pro 64bit

# 仮想環境
- OS CentOS 7.4 (1708) minimalインストール
- メモリ 2GB
- HDD 250GB

# ダウンロード・展開
最新バージョンの確認
[Download | CMake](https://cmake.org/download/)

`/usr/local/src`ディレクトリに移動する。

````
cd /usr/local/src
````
ソースファイルをダウンロードする。

````
wget https://cmake.org/files/v3.11/cmake-3.11.1.tar.gz
````

ダウンロードしたファイルを展開する。

````
tar zxvf cmake-3.11.1.tar.gz
````
# コンパイル・インストール
展開したディレクトリに移動する。

````
cd cmake-3.11.1
````

コンパイル・インストール

````
./bootstrap --prefix=/opt/cmake --no-system-libs
make
make install
````
./bootstrapが成功すると最後に以下のような表示をする。

````
---------------------------------------------
CMake has bootstrapped.  Now run gmake.
````

# エラー対策
`./bootstrap`で`lib64`関連のエラーが発生した場合、共有ライブラリへの対策。
エラー内容。

````
/usr/local/src/cmake-3.11.1/Bootstrap.cmk/cmake: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/local/src/cmake-3.11.1/Bootstrap.cmk/cmake)
/usr/local/src/cmake-3.11.1/Bootstrap.cmk/cmake: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /usr/local/src/cmake-3.11.1/Bootstrap.cmk/cmake)
---------------------------------------------
Error when bootstrapping CMake:
Problem while running initial CMake
---------------------------------------------
````

`/etc/ld.so.conf`の編集

````
vi /etc/ld.so.conf
````
`/usr/local/lib64/`を追加し、更新コマンド`ldconfig`を実行する。

````
/usr/local/lib64/
````

この時点で`ldconfig`するとエラーが表示される。

````
ldconfig: /usr/local/lib64/libstdc++.so.6.0.24-gdb.py は ELF ファイルではありま せん - 先頭に誤ったマジックバイトを持っています。
````

対策を行う。（参照しないようにする）

````
mv /usr/local/lib64/libstdc++.so.6.0.24-gdb.py /usr/local/lib64/back.libstdc++.so.6.0.24-gdb.py
````

以上で`./bootstrap`が実行できる。

# 環境変数 PATH の設定
インストールしただけではcmakeが実行できないので、`/etc/bashrc`環境変数を設定する。

````
vi /etc/bashrc
````

`PATH=$PATH:/opt/cmake/bin`を追加し、コマンドを実行する。

````
PATH=$PATH:/opt/cmake/bin
source /etc/bashrc
````
# バージョン確認

````
cmake -version
````
以下のような内容が、表示される。

````
cmake version 3.11.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).
````
# 参考
[MySQLのビルドに欠かせないCMakeを準備する：仕事で使える魔法のLAMP（45） - ＠IT](http://www.atmarkit.co.jp/ait/articles/1203/02/news117.html)
[CMakeインストールメモ(Hishidama's CMake install Memo)](http://www.ne.jp/asahi/hishidama/home/tech/cmake/install.html)
(

---
[目次](https://qiita.com/knutpb1205/items/3ece0cab588afdb13f02)
MacはXAMPPが必要ないって！？でも、仕事で使うんだよ・・・解決策見つけた！

このような方が見るべき記事です。

ターミナルでwhich phpと打つと、元から入っているphpの場所が出力される

```
which php
/usr/bin/php
```

ターミナルでphp -vとうつと、元から入っているphpのバージョンが現れる

```
php -v
PHP 7.1.14 with Suhosin-Patch (cli) (built: Dec  9 2012 19:32:02) 
Copyright (c) 1997-2018 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
```

XAMPPのphpを使いたいので、これを変える必要があります。


解決策をやっと見つけました。

#元からあるphpを無効にする
元からあるphpの名前を変更します。

```
sudo mv /usr/bin/php /usr/bin/php.org
```

僕はここで、permission deniedみたいなエラーが出ました。


##permission deniedと出たら・・・

1.macを再起動してCommand+Rを押し続ける
⇨リカバリーモードで立ち上がります。

2.上にあるメニューバーからターミナルを起動して以下のコマンドを打ち込む

```
csrutil statsu
```

これがenabledになっていたら、無効にしてあげます。
下のコマンドを打ってください。

```
csrutil disabled
```

そして、以下のコマンドを打つことで再起動できます。

```
reboot
```

で、上の元からあるphpを無効にするを実行してみてください。


which php　ってやったら、何も出ないと思います。そうなったら成功！

#XAMPPのphpにパスを通す
.bash_profileにこれを追記することで、パスを通します。

```
export PATH=/Applications/XAMPP/bin:$PATH

```

で、ターミナルを再起動。

```
$ which php
/Applications/XAMPP/bin/php

$ php -v
PHP 7.1.16 (cli) (built: Apr 10 2018 10:58:22) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
```

できた！！最高！！
競プロにおける fmt.Scan の落とし穴

# はじめに
競技プログラミングでは、標準入力から数値や文字列をインタラクティブに受け取って処理するコードをよく書きます。Go では、入力のサイズによって、fmt.Scan、bufio.Scanner、bufio.Reader.LeadLine を使い分けるのが定石です。


> 簡単に書きたいとき
fmt.Scan を使う
たくさん (> 10^5) 読み込みたいとき
bufio の Scanner を使う
長い行を (> 64x10^3) 読み込みたいとき
bufio の ReadLine を使う
- [Go 言語で標準入力から読み込む競技プログラミングのアレ](https://qiita.com/tnoda_/items/b503a72eac82862d30c6#%E7%AD%94%E3%81%88-%E3%81%A8%E3%81%8D%E3%81%A8%E5%A0%B4%E5%90%88%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E4%BD%BF%E3%81%84%E5%88%86%E3%81%91%E3%82%8B)

ただ、具体的にどの程度性能に差がでるか、ベンチーマークの結果を示している記事が見当たらなかったので、書いてみました。

# 測定対象のコード
[AIZU ONLINE JUDGE の問題](http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_1_D) を使って、ベンチマーク測定の対象となるコードを書きました。
fmt.Scan は、fmt.Fscan のラッパー関数で、[引数の io.Reader に標準入力を渡しているだけ](https://github.com/golang/go/blob/master/src/fmt/scan.go#L63)です。ですので、テストコードではテストケースごとに入力するファイルを作成して、io.Reader にそのファイルディスクリプタを渡してあげました。

コードは [Gist](https://gist.github.com/toVersus/095cd1010f8cabc44298badbdb0e11bb) にあげています。

# ベンチマークの測定結果
Windows マシン上で測定したベンチマークの結果です。コンパイラによる最適化前の結果ですので、あくまで参考値ですが、たくさん読み込む必要がある場合、性能が1桁程度違ってくることが分かりました。

```
PS> go test -bench . --benchmem
goos: windows
goarch: amd64
pkg: github.com/toversus/go-aoj/alds1/1_d_maximum_profit
BenchmarkGetMaxProfitByFscan-8              2000            688114 ns/op            6338 B/op       2004 allocs/op
BenchmarkGetMaxProfitByScanner-8           20000             75352 ns/op           10416 B/op       2002 allocs/op
PASS
```

この問題で「Time Limit Exceeded」から抜け出せない原因が、fmt.Scan による入力処理部分のボトルネックだと気付くのに時間が掛かってしまいました。皆さんも気を付けましょう。

## 2018/5/22 追記
コードに手を入れていたら、測定結果が変わってきたので、記事を更新しました。

せっかくなので、Russ Cox 先生作の benchstat を使って、両者を比較してみました。
1行目が処理時間、2行目がメモリアロケーションで確保した容量、3行目がメモリアロケーションの回数の比較です。

```
PS > go get golang.org/x/perf/cmd/benchstat
PS > benchstat .\old.txt .\new.txt
name            old time/op    new time/op    delta
GetMaxProfit-8     684µs ± 3%      74µs ± 7%  -89.16%  (p=0.000 n=10+10)

name            old alloc/op   new alloc/op   delta
GetMaxProfit-8    6.34kB ± 0%   10.42kB ± 0%  +64.34%  (p=0.000 n=10+10)

name            old allocs/op  new allocs/op  delta
GetMaxProfit-8     2.00k ± 0%     2.00k ± 0%   -0.10%  (p=0.000 n=10+10)
```
6. ECHONET Lite Appendix探索用のWebページ

## これは？

ECHONET Liteのプログラミングをしていると，「家庭用エアコンの運転モード設定ってEDTなんだっけ？」ってことがよくありますよね？規格書をみてみるけれど「わー検索したい！」とか，「複数ページを開いておきたい！」といったことがあると思います。ということで，ECHONET Liteの機器情報の詳細（Appendix）を調べる為のWebサイトを作りました。皆さんで使っていただけると幸いです。（研究室開発のWebサイトですので，時々繋がらないことはお許しください）

https://eldb.sugimulab.net/

また，対応AppendixはRelease Gですので，少し古いですがお許しください。手の空いた時に更新されます。WebサイトはNode.jsで作成しています。

## Webサイト作成者（変更履歴）

- 2017 杉村
- 2017 竹内
- 2016 原
- 2016 杉村

## 謝辞

ECHONET LiteのAppendixデータは下記のJSONデータを利用させていただきました。
神奈川工科大学　HEMSセンター
https://github.com/KAIT-HEMS/ECHONET-APPENDIX
Tcl/Tkでプログラムを書く(1)

# Tcl使おうぜ
[Tcl/Tk](https://ja.wikipedia.org/wiki/Tcl/Tk)は、90年代に流行したスクリプト言語だ。私はTclが気に入っていてよく使うのだが、周りには使っている人が誰もいない。情報もほとんどないので、そもそも使い始めようと思わないかもしれない。しかしGUIベースのちょっとしたプログラムを作るには大変便利なものなので、ちょっと紹介してみようかな。
#究極のおまけ言語
Tclなんか使ったことない、という人のPCにもすでにTcl/Tkがインストール済みであることが多い。さまざまなプログラミング言語やアプリケーションのグラフィックライブラリがわりについてくることが多いからだ。私が知っているだけでも、R, Python, Maxima などにおまけとして付いてくる。これらの言語を使っている人はディレクトリを掘ると出てくるので探してみて欲しい。
# 特徴
Tclは非常に癖のある言語だ。その特徴は次のようになる。

+ 言語の機能はほとんどすべて「コマンド」として実現されている。プログラムの見た目はshell scriptにそっくり。コマンドなので、行の概念がある。
+ 言語が扱うデータは、すべて（見た目は）文字列として表現されている。リストは空白で区切られた文字列であり、プログラム自体もリストである。（実際は効率のために内部表現になっている）

#文字列とリスト
特に変態なのが、`{ }` による文字列だ。文字列の表現には、次の３種類がある。

+ 文字列の両端に何もつけずに書く。たとえば `abc` は文字列である。文字列の間に空白を含めることはできない。`$var`のような変数置換を行う。
+ 文字列の両端を `"` で囲む。`"abc def"`は１つの文字列である。文字列に空白が含まれても良い。変数置換が行われる。
+ 文字列の両端を`{ }`で囲む。`{abc def}`は１つの文字列である。文字列に空白が含まれても良い。変数置換は行われない。

`{ }`による文字列の中に、再帰的に`{ }`を含めることができる。例えば、`{a {b c} d}`という文字列の場合、1文字目はa（最初の`{`は区切り文字なので文字列に含まれない）、2文字目は空白、3文字目は{、4文字目はbといった具合。また、`{ }`による文字列には空白だけでなく改行を含めることができる。例えば

```Tcl
set x {abc
def
ghi}
```
という具合だ。

文字列はリストとして解釈することもできる。リストは空白で区切られた文字列であり、リストの中にリストを含めることができる。

+ `{a b c}`は"a","b","c"という３つの文字列からなるリスト
+ `{a {b c} d}`は"a","b c","d" という３つの文字列からなるリスト
+ `{a {b {c d}} e}` は"a","b {c d}","e"という３つの文字列からなるリスト
+ 
「文字列はリストでもある」というのがTclの大きな特徴であり、わかりにくい点でもある。ちなみに空白で区切られた文字列がリストなので、"ab cd ef"もリストである。

#プログラムを書いてみる
文字列の話も飽きたので、プログラムを書いてみよう。

```Tcl
puts "Hello,world"
```

数を数えることもできる。

```Tcl
for {set i 0} {$i < 10} {incr i} {
  puts "Hello, world $i"
}
```

Tclでは変数への値の代入は`set`を使う。

```Tcl
set 変数名 値
```

値を省略すると、変数の値を返す。

Tclには、言語の機能としての「式」はない。値の計算をするのは`expr`というコマンドである。

```Tcl
set i 10
expr $i+2  ;# 12
```

ここでの`$i+2`は単なる文字列で、変数置換により`10+2`という文字列になる。それを`expr`コマンドが解釈して12という値を返す。

変数の値を±1する処理はプログラムのあちこちに頻出するが、それにいちいち`expr`を使っているとめんどくさいので、変数の値に定数を加える`incr`コマンドがある。`incr`コマンドは、第1引数に書いた変数の値を+1する。第2引数を書くと、その値を変数に加える。

```Tcl
set i 0
incr i
puts $i    ;# 1
```

ということで、先ほどの`for`は次のような形をしている。`for`もコマンドであり、４つの引数を取る。それぞれの引数はリストである。{ }で囲まれているので、普通の言語でのブロックのように見えるが、Tclにはブロックはない。単なる文字列/リストである。

```Tcl
for 初期化 継続判定 更新 処理
```

これは次のような動作をする。

1. 「初期化」リストを評価する。
2. 「継続判定」リストを`expr`の引数として実行。値が0ならば終了。
2. 「処理」リストを評価する。
3. 「更新」リストを評価する。
4. 2.から実行する。

`for`はコマンドなので、

```Tcl
for {set i 0} {$i < 10} {incr i}
{
   puts $i
}
```

のように書くとエラーになる。コマンドは行で終了するので、上の例では引数が３つしかないからだ。

```Tcl
for {set i 0} {$i < 10} {incr i} {
   puts $i
}
```

のようにすると、`for`の引数は４つであり、４つ目の引数である文字列の中に改行文字が含まれる。


[その2](https://qiita.com/akinori-ito/items/a6abe82f4c814272f06c)に続く。
sinxの微分がcosx であることの証明


*戯れに証明してみただけなので証明が正しいことは保証しません*

# 示す式

```math
\lim_{\Delta x \to 0} \frac{\sin(x+\Delta x)- \sin(x)}{\Delta x} = \cos x 
  　(G)
```

# 式変形

式Gの左辺を三角関数の加法定理で変形していくと

```math
\begin{align}
(左辺） &= \lim_{\Delta x \to 0} \frac{\sin(x) \cos(\Delta x) + \cos(x) \sin(\Delta x) - \sin x}{\Delta x} \\
      &= \sin x \lim_{\Delta x \to 0} \frac{\cos \Delta x - 1}{\Delta x}
         + \cos x \lim_{\Delta x \to 0} \frac{\sin \Delta x}{\Delta x} \\
      &= \sin x \lim_{\Delta x \to 0} \frac{-\sin \Delta x}{1 + \cos \Delta x} \frac{\sin \Delta x}{\Delta x}
         + \cos x \lim_{\Delta x \to 0} \frac{\sin \Delta x}{\Delta x} \\
\end{align}
```

とsinc関数(sinx/x)の０点の極限の値を用いた形に変形できる。ここで、

```math
\lim_{\Delta x \to 0} \frac{\sin \Delta x}{\Delta x} \to 1　 (1)
```

が成立すれば、上記の式は

```math
(左辺) = \cos x
```

に変形でき、sinx の微分がcosxであることが言える。(このあたりは極限の操作に関して、厳密な議論が必要そうだがしていない。）

# 式1の証明


ここでは初等幾何を用いて以下の不等式を証明することで、式1を示す。

```math
\cos \Delta x < \frac{sin \Delta x}{\Delta x} < cos \frac{\Delta x}{2}　(2)
```

式(2)が成立するとすれば、不等式の最左辺、最右辺ともに⊿x -> 0の極限でどちらも1に収束するため、式(1)が言える。

### 左側の不等式

以下の図を用いて示す。

![sin-proof-figure2.jpg](https://qiita-image-store.s3.amazonaws.com/0/52689/a4feb8d5-e1ad-a76a-6c94-87d769ff2817.jpeg)


∠BAC'が⊿x であることから、

```math
  |AB| = |AC'| \cos \Delta x
```

弧AC'と辺AC'の長さを比べることで

```math
\begin{align}
 &|弧AC| < |AC'| \\
\Leftrightarrow 
&\Delta x < \frac{|AB|}{ \cos \Delta x } \\
\Leftrightarrow
&\cos \Delta x < \frac{\sin \Delta x}{\Delta x}
\end{align}
```


### 右側の不等式

![sin-proof-figure1.jpg](https://qiita-image-store.s3.amazonaws.com/0/52689/f6550193-af78-5fc2-fb03-0d5240dbd2ac.jpeg)

∠BACが⊿x/2 であることから、

```math
  |AB| = |AC| \cos \frac{\Delta x}{2}
```

弧ACと辺ACの長さを比べることで

```math
\begin{align}
 &|AC| < |弧AC| \\
\Leftrightarrow 
& \frac{|AB|}{ \cos \Delta \frac{x}{2}} < \Delta x \\
\Leftrightarrow
& \frac{\sin \Delta x}{\Delta x} < \cos \frac{\Delta x}{2} 
\end{align}
```


これにより、式2の左右の不等式が示された。

Q.E.D
Excel比較ツール「方眼Diff」作りました


> __2020/08/03__
> __これまでのWindows版に加えて、macOS版を試験リリースしました。__:blush:

# Excelファイル比較ツール「方眼Diff」[^1]
こんな感じです。
※財務省が[公開している](https://www.bb.mof.go.jp/hdocs/bxsselect.html)2018年度および2019年度の一般会計歳入予算明細書を比較しています。

![方眼Diff_e1_v0.16.0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84939/5f4a108e-f518-3c24-38e1-cfc852216e22.png)
![方眼Diff_e2_v0.16.0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84939/947e0bb4-a88d-aafb-366c-0fefd39bc4b7.png)
![方眼Diff_e3_v0.16.0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84939/a54d96b1-5977-3231-0187-0dd6587173fb.png)

## できること
- 2つのExcelファイルの差分を取ることができます。
- 元のExcelファイル（をコピーしたもの）に対して、**差分箇所に色を付けて表示**します。加えて、差分箇所をテキストでレポートすることもできます。
- **行や列の挿入／削除を自動で検出**することができます。キー列やキー行を指定する必要はありません。
- Excelブック同士または特定のシート同士を比較することができます。Excelブック同士を比較する場合は、**シート名が似たもの同士を自動でマッチング**して比較します。
- コマンドラインから起動することができます。すなわち、**TortoiseGit等のバージョン管理ツールと組み合わせて使用することができます**。

まだ初期開発版ではありますが、単純なExcelファイルに対しては実用レベルに手が届いたと判断し、公開することにしました。

:::note info
#### 2024/4/29追記：
公開後50回以上のバージョンアップを重ね、多くの方にご利用いただいています。
大変便利ですので是非ご利用ください！
:::

ダウンロードや詳しい説明はコチラからどうぞ。
方眼Diff：https://hogandiff.hotchpotch.xyz/


## 動作の紹介

<iframe width="560" height="315" src="https://www.youtube.com/embed/ZUWfTaO1WzE" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" loading="lazy" allowfullscreen></iframe>

## 実装
「方眼Diff」では次の要素技術およびアルゴリズムを採用しています。

- JavaFX : GUIの実装に利用
- Apache POI : Excelファイルの読み書きに利用
    - イベントモデルAPIをファイル内容の読み取りに利用
    - ユーザーモデルAPIを.xls形式の結果レポート生成に利用
- SAX : .xlsx/.xlsm形式のExcelファイルからのシート名取得に利用
- StAX : .xlsx/.xlsm形式の結果レポート生成に利用
- [exewrap](https://exewrap.osdn.jp/) : .jarファイルを.exeファイルにラップして配布するのに利用
- 組み合わせ最適化問題の応用：
  - diff計算にレーベンシュタイン距離の拡張と動的計画法を利用
  - シート名同士の曖昧マッチングに貪欲法を利用
  - Excelブック名同士の曖昧マッチングに最小費用流問題の解法を利用

追い追い、それぞれの要素に関する派生記事を書いていきたいと思います。
⇒ ぼちぼち書いています。

- [diffのアルゴリズム：Excel行・列の2次元diffを求める方法](https://qiita.com/nmby/items/ab1c52c5baf076a4b47d)
- [Excelのシート名一覧をJavaで取得する方法（POI vs SAX）](https://qiita.com/nmby/items/fe46efb2c849d96c044c)
- [Apache POI ハマりポイント一覧](https://qiita.com/nmby/items/21378b8a9d81d3121378)

## 想い
システム開発であれ一般の事務であれ、日本ではExcelによるドキュメントが広く利用されています。
その一方で、Excelファイルには**diff（変更差分）を取りづらい、バージョン管理システムとの相性が悪い**という大きな欠点があります。

いくつかの無料diffツールがあるにはあります。しかしどれもイマイチしっくりこない。良さそうなものになると有料になってしまう。
だったら自分で作れば良いじゃない！ ということで作ってみた次第です。

プログラミングによって、誰かが楽になる、ハッピーになる！ 日本の生産性が上がる！！ となれば、プログラマ冥利に尽きるというものです。

[^1]: 本当はもっと別の名前にしたかったのですが・・・ しっくりくる名前は既に使われちゃってるんですよね。トホホ
レスポンシブでダサくないLPを1時間で作る

ちょっとしたランディングページ(LP)を作りたいときってありませんか？

ちょっとしたサービスを公開したとき、ちょっとしたイベントがあるとき...。LPを作りたいけど時間がかかるし、デザイナーさんにお願いするお金もないし、テンプレートを探すのも時間かかるし...。

そんなとき、サクッとLPを作れるアプリがあります。[Bootstrap Studio](https://bootstrapstudio.io/)です。豊富なテンプレートが用意されているため、選択するだけでベースとなるLPを簡単に作成することができます。

以前にも紹介する記事を書いたんですが、
今回はレスポンシブでダサくないLPを作る方法を共有します。

※**Bootstrap Studioは有料のアプリです:bow:**

【以前の紹介記事】
[最高のモックアップツールかもしれないBootstrap Studio](https://qiita.com/Yuta_Fujiwara/items/10df62b820d056a92e86)

## **Bootstrap Studioの概要**

<img width="1280" alt="スクリーンショット 2018-04-30 7.06.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/2c78d658-0650-1b55-7448-4fb2047b8844.png">

### **特徴**
* 25$ → 2,700円くらい
* bootstrapのcssフレームワークを使ってモックが作れる
* 基本的にはドラック&ドロップで編集
* CSSは直接変更可能
* 変更したモックを即時にブラウザで確認することができる
* 一生使うことができる（買い切り型）
* HTMLとCSSとJavascriptのファイルが自動で生成される

## **作り方**

### **①Bootstrap Studioのインストール**
インストールをしてアプリを開きます。「CREATE NEW DESIGN」を選択します。

【トップページ】
<img width="1279" alt="スクリーンショット 2018-04-30 11.59.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/1a1ac717-0c54-9ebc-9dd4-f279f0ad6d75.png">

### **②組み込みたいセクションを選択**
NewDesignのページに遷移するので、組み込みたいセクションを選択します。

【テンプレート選択】
<img width="1026" alt="スクリーンショット 2018-04-30 11.59.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/27f05f12-1c44-a0e2-6910-9d898cc4446d.png">

### **③ テンプレート完成**
ベースの部分はこれで完成です。後はリンクを変更したり、写真を入れ替えたりすればOKです。細かい部分を自分の目的に合わせて編集してください。

【編集ページ】
<img width="1273" alt="スクリーンショット 2018-04-30 12.09.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/035e37d7-ba06-90f9-4125-d567edddc9f6.png">




### **④ブラウザで確認**
右上の「Preview(ON)」を選択して「OPEN IN BROWSER」のボタンを押すと、編集中のページがブラウザで表示されます。

【プレビュー確認】
<img width="1272" alt="スクリーンショット 2018-04-30 12.11.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/0e35c508-43d3-1f28-270a-104c16de26c6.png">

【ブラウザの表示確認】
<img width="1275" alt="スクリーンショット 2018-04-30 12.11.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/8b60e1b0-a61f-7617-7c0f-6878ce663b84.png">

【スマホの表示確認】
<img width="1207" alt="スクリーンショット 2018-04-30 12.40.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/f7b098bf-0fda-876a-5946-6af27b792368.png">



### **⑤ファイルを出力**

「Export」のボタンをクリックして、Exportするディレクトリを選択すれば、編集していたファイルが一式出力されます。

【エクスポート画面】
<img width="1271" alt="スクリーンショット 2018-04-30 12.34.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/d6b576b1-37a2-7da7-8a1c-700ce5d2093c.png">

【エクスポートされたファイル群】
<img width="819" alt="スクリーンショット 2018-04-30 12.52.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/e9aee5eb-e192-6ea4-9c17-8cc68f0adbec.png">


### **⑥ファイル転送**

ローカルにエクスポートしたファイルを、サーバーに転送します。ファイル転送の方法は、色々ありますが、僕は[Transmit](https://panic.com/jp/transmit/)を使用しています。有料ですがとても便利です。ファイル転送ツールは無料(寄付)アプリであれば[Cyberduck](https://cyberduck.io/)などがあります。

### **⑦完成！**

URLにアクセスして、編集していたページが開けば完成です。

## **まとめ**

LPをゼロから作ろうと思うと、時間と費用がかかってしまいますが、Bootstrap Studioを使えばレスポンシブでダサくないLPが簡単に作れます。僕はLPを作成するとき、このツールを使って作成しています。

Bootstrap Studioは有料ですが、それ以上の価値を発揮してくれるツールだと思うので、興味のある方はぜひ使ってみてください:bow:
iOS で Ethereum のアカウント（アドレス）を作成

# 動作確認環境
- Xcode 9.3
- Geth 1.8.6

# Geth フレームワークの導入
- Geth は Ethereum の go による実装です。
 - 今回は iOS 向けにビルドされた Geth を使用します。
- Geth フレームワークの導入には、Cocoapods を使用します。
- まだ、Podfile がない場合は、`$ pod init`　で Podfile を作成します。
- Podfile には次の行を追記します。
 - バージョンは適宜適切なものを使用してください。

```ruby:Podfile
pod 'Geth', '1.8.6'
```

- Podfile を更新したら、`$ pod install` で Geth フレームワークをインストールします。

# Geth フレームワークの import
- 上記の手順が完了すると、`import Geth` で Geth フレームワークをインポートできるようになります。

#  Ethereum アカウントの作成とアドレスの取得
- 次のコードで、Ethereum アカウントの作成とアドレスの取得ができます。

```swift
// keystore ファイルを保存するディレクトリのパスを取得
let dataDir = NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                                  .userDomainMask,
                                                  true)[0]
let keyStorePath = dataDir + "/keystore"
print("keyStorePath: \(keyStorePath)")

// keystore を管理してくれるやつのインスタンスを取得
let keyStoreManager = GethNewKeyStore(keyStorePath, GethLightScryptN, GethLightScryptP)

// パスワードを指定してアカウントを作成
let account = try! keyStoreManager?.newAccount("password")

// 16進数表記のアカウントのアドレスを取得
let address = account?.getAddress().getHex()
print("address: \(address!)")

// keystore ファイルの URL (パス) を表示
let url = account?.getURL()
print("url: \(url!)")
```

# 参考
- http://blog.playground.io/entry/2018/04/30/152006
- https://scrapbox.io/playground/iOS_%E3%81%A7_Ethereum_%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90
- https://github.com/ethereum/go-ethereum/wiki/Mobile:-Introduction
- https://github.com/ethereum/go-ethereum/wiki/Mobile:-Account-management

# sushiether
- Ethereum 関連の情報は https://scrapbox.io/sushiether/ に集約することにしました。
- この記事の内容に変更・更新がある場合は、[iOS で Ethereum のアカウント（アドレス）を作成 - sushiether](https://scrapbox.io/sushiether/iOS_%E3%81%A7_Ethereum_%E3%81%AE%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%EF%BC%88%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%EF%BC%89%E3%82%92%E4%BD%9C%E6%88%90) を更新します。
UbuntuでPythonプログラムの実行をショートカットのダブルクリックでおこなう方法

参考
Ubuntuでショートカットを作成する（初心者向け）
https://qiita.com/ty21ky/items/c2357b6cf24fda49280e

作成方法
１．テキストエディタで下記のファイルを作成する。（拡張子：desktop）
例．

```sh:test.desktop
[Desktop Entry]
Name=ショートカットに表示する名前
Comment=ファイルマネージャーのプロパティに表示するコメント
Exec=/usr/bin/python3 /home/ユーザ名/test.py

Icon=/home/ユーザ名/icon/application.png
Terminal=true
Type=Application
```

Icon=はショートカットに表示するイメージファイルを指定（指定しないとデフォルトのイメージが表示される）
Terminal=は値入力等を行う時は「true」(端末が起動する)、入力等は行わず起動する時は「false」(端末が起動しない)

追加）
「端末が起動しない」で実行すると、バックグランド実行で実行しているのかタスクバーにも何も表示されないし、Windowを表示させるようにしていないと何も表示されない。
うまく動作している時は、まだ良いがあれ何か動作がおかしいと思う時は、何も表示されないので？？
「端末が起動する」方が良いような気がする。

２．test.desktopファイルに実行権限を与える。

```sh:
$ chmod +x test.desktop
$ ls -l
-rwxrwxr-x 1 ty ty     233  4月 27 08:17 test.desktop
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/238800/88336071-13b7-2a5c-e057-c607636129bd.png)

（このイメージは合成したもの）

３．ショートカットをダブルクリックするとPythonプログラムが実行される。
Node-RED 上で、LINE Messaging API の署名を検証するモジュール

ここにきて、LINE Messaging API を触り始めました。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">3週遅れくらいで、 <a href="https://twitter.com/hashtag/LINEBot?src=hash&amp;ref_src=twsrc%5Etfw">#LINEBot</a> と格闘中。 <a href="https://twitter.com/hashtag/LINE?src=hash&amp;ref_src=twsrc%5Etfw">#LINE</a></p>&mdash; ほりひろ (@hori__hiro) <a href="https://twitter.com/hori__hiro/status/990513554108235778?ref_src=twsrc%5Etfw">2018年4月29日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

LINE Messaging API は WebHook でメッセージを飛ばしてくるので、みんな大好き Node-RED で HTTPS の API を作ってみました。
でも、「これ、誰でも実行できちゃうんじゃね？」と不安になったので、まじめに署名を検証しようと思ったわけです。
検証方法も書いてありますし（[公式](https://developers.line.me/ja/docs/messaging-api/reference/#anchor-b408ce0662937dae3ed576f3fbb12da6d7024ad9)とか [Qiita](https://qiita.com/yorifuji/items/71e31baf896adb69f567#%E5%AE%9F%E8%A3%85) とか）。
でも、その検証方法に書いてあるのが、「`crypto`を使え」と。

Function ノード内で、`require('crytpo')` すると怒られたので、独自ノードを作ってみました。
ついでに公開もしました。

# 使い方
## インストール
[公式のインストール方法](https://nodered.jp/docs/getting-started/adding-nodes)を参考に `node-red-contrib-line-signature-validator` をインストールしてください。

## 事前設定
薄緑のノードを配置したら、LINE Developer Console に表示される `Channel Secret` をコピーして、このノードに設定してください。
![usage-config.png](https://qiita-image-store.s3.amazonaws.com/0/90361/e18c8c5b-f138-2c24-700d-e51f574ec428.png)

## つなぎ方
WebHook のエンドポイントからメッセージを入力にして、上の出力を検証成功時の処理、下の出力を検証失敗時の処理につないでください。
![usage-nodes.png](https://qiita-image-store.s3.amazonaws.com/0/90361/2d1fed03-eb90-45a1-cf17-618e4eb76337.png)


ま、[line-bot-sdk-nodejs](https://www.npmjs.com/package/%40line%2Fbot-sdk) 使えば、全部入りなんですけどね。。。
木の高さを調べるにはどうすればいいのか？三角比を利用してみましょう。

# あの木の高さは何メートル
マレーシアにはとっても高い木がたくさんあります。この木の高さは一体日本の木に比べてどれくらい高いのでしょうか？おそらく太陽の光をたくさん浴びているので、木はどんどん大きくなっていきとっても高いはずですね。
どうやって高さを測ればいいでしょうか？まさかよじのぼって測るわけにはいきませんし、困りましたね。そういえばこれは相似という道具をつかってなんとか測ろうではありませんか。
簡単な数学の問題としては、$\tan(\theta)$で計算すればとりあえずいいでしょうね。
でも実際そこまで距離を測りに行かなければいけないので面倒くさいですよね。
そこら辺をどうやっていけばいいのかを考えてみましょう。
## 分度器はあるけど距離が非常に遠いから困ってしまった。

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">幾何級数について、適当にまとめました。<a href="https://t.co/9VBIcdFF9e">https://t.co/9VBIcdFF9e</a> <a href="https://t.co/eVJjEz1iuv">pic.twitter.com/eVJjEz1iuv</a></p>&mdash; 数学小僧 博士号 (@mathsheen) <a href="https://twitter.com/mathsheen/status/929141912535048192?ref_src=twsrc%5Etfw">November 11, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### 結論を考えてみましょう。

https://youtu.be/cyOKeDhbTsk
強調
**強調**
リンク
[リンク](http://...)
コード
```ruby:filename.rb
コード
```
リスト
- リスト 1
- リスト 2
    - リスト 2-1
1. 番号付きリスト 1
2. 番号付きリスト 2
3. 番号付きリスト 3
- [ ] チェックボックス 1
- [ ] チェックボックス 2
- [x] チェックボックス 3
データベース作成　（amazon用）

##usersテーブル

|Column|Type|Opinion|
|------|----|-------|
|product|references| foreign_key:true
comment|references|foreign_key:true
name|string|null:false,unique:true
adress|text|null:false
age|integer|null:false
gender|string|null:false
tel|integer|null:false

Association
・has_many :comments
・has_many :products

##commentsテーブル

|Column|Type|Opinion|
|------|----|-------|
|body|text|null:false
|rate|integer|null:false
|product|references|foreign_key:true
|user|references|foreign_key:true

Association
・belongs_to :user
・belongs_to :product
CircleCI画面上でビルドしたファイルを閲覧する方法

phpunitのカバレッジHTMLとか簡単に閲覧するためにはCircleCIのArtifactsという機能を使います。

https://circleci.com/docs/2.0/artifacts/#artifacts-overview

公式ページに書いてあるのですがphpunitの場合は

```yaml:.circleci/config.yml
version: 2
jobs:
  build:
------- 省略 ---------
    steps:
      - run:
          name: run phpunit with measuring coverage
          command: ./vendor/bin/phpunit --coverage-html /tmp/coverage

      - store_artifacts:
          path: /tmp/coverage
          destination: coverage
```

というようにstore_artifactsというステップが必要になります。
これを設定するとカバレッジのHTMLがCircleCI上のArtifactsタブから閲覧することができるようになります。

ググると
$CIRCLE_ARTIFACTS
って環境変数のパスに置けばいいよとか書いてありますが今は使えません。
【mac】XAMPPにPhalconをインストールする手順

とりあえずphp系で何かインストールするときにはこの人たちがいないとエラーになることが多いらしいということで、一気にインストールしました。
このコマンドをぴって貼り付けたら一発です。

```
brew install gcc re2c libmcrypt autoconf automake libiconv pcre
```


#Phalconのインストール

```
git clone git://github.com/phalcon/cphalcon.git
cd cphalcon/build
sudo ./install
```


クローンして、移動して、インストール
これで、終わりです。phalcon.soが作られているはずなので、確認しましょう。


#PhalconをXAMPPに結びつける

phalcon.soをコピーして、「/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20160303」の中に貼り付け

php.iniにこれを追記

```/Applications/XAMPP/xamppfiles/etc/php.ini
extension=phalcon.so
```


phpinfoにphalconがあれば終わり！
vimのビジュアルモードでペーストした際にヤンクさせたくない

# 経緯

vimのvisualモードで貼り付けを2回以上繰り返したいとき、1回目のペーストをヤンクしてしまうため、2回目のペーストが上手くいかない…というときの対応メモです。

# 解決方法

色々試しましたが、現時点ではこの方法を採用しています。

```
vnoremap p "_dP
```

解説すると、ヴィジュアルモードの際は、pを、ブラックホールレジスタへの削除、前方貼り付け、にマッピングを変える、という設定です。
これにより、ヴィジュアルモードでペーストした際は、ヤンクしないようになります。

# 他の候補

以下でも概ねのことが実現できます。

```
vnoremap p "0p
```
これはビジュアルモードのときのpasteに関しては、0番レジスタを使う、という指定。
ビジュアルモードで選択貼り付けした場合、選択テキストの削除→無名レジスタの内容を挿入、という動きになっています。削除は0番レジスタを更新しないため、０番レジスタには前回ヤンクした内容が残っている。その内容を使う、という解決方法です。
ただし、上記動きの影響で、削除した内容を貼り付けたい場合、貼り付けることができない。この問題は人によってはほとんど影響が無い気もしますが、個人的には少し違和感を感じたため、採用しませんでした。

# おまけ

この記事を書くために覚えたレジスタ関連のコマンド。

```
:reg
```

レジスタを参照する。

```
vim -i NONE
```

vimをviminfoを使用せずに起動する。レジスタが空の状態で起動できる。

# 参考

https://superuser.com/questions/321547/how-do-i-replace-paste-yanked-text-in-vim-without-yanking-the-deleted-lines