OmniAICreator/Qiita-1.07M huggingface dataset:
How to create same subnet IP interface within host network by vagrant-libvirt

# How to create same subnet IP interface within host network by vagrant-libvirt

- Ref. https://github.com/vagrant-libvirt/vagrant-libvirt#public-network-options

## Objectives

- Usually, vagrant-libvirt creates an interface within virbr* network subnet.
- virt-install command can attach to host bridge network with the option "--network=bridge:br0"
- How to assign a vagrant-libvirt's interface to host bridge like virt-install does?
- If possible, I can access to the VM from my client notebook within KVM host network without adding routing configuration etc
- **And that is possible.**

## System

```
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"

$ vagrant --version
Vagrant 1.8.1

$ vagrant plugin list
fog-libvirt (0.0.3)
  - Version Constraint: 0.0.3
vagrant-libvirt (0.0.35)
```

- host network is 192.168.100.0/24 has dhcp server.
- attach bridge interface "br0" on KVM host.

```
$ ip a s br0 | grep -Ei "br0|inet4"
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 192.168.100.5/24 brd 192.168.100.255 scope global br0
```
## Configure Vagrantfile

```
$ cat Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.define :vm1 do |vm1|
    vm1.vm.box = "centos/7"
    vm1.vm.network :public_network, :type => "bridge",
      dev: "br0",
      mode: "bridge",
      network_name: "public_network"
  end
end
```

## vagrant up

```
[vagrant@localhost ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:f6:a0:c2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.121.21/24 brd 192.168.121.255 scope global dynamic eth0
       valid_lft 3579sec preferred_lft 3579sec
    inet6 fe80::5054:ff:fef6:a0c2/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:31:b9:94 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.163/24 brd 192.168.100.255 scope global dynamic eth1
       valid_lft 578sec preferred_lft 578sec
    inet6 fe80::5054:ff:fe31:b994/64 scope link
       valid_lft forever preferred_lft forever
```
## Confirmation

```
C:\WINDOWS\system32>ping 192.168.100.163

Pinging 192.168.100.163 with 32 bytes of data:
Reply from 192.168.100.163: bytes=32 time=1ms TTL=64
Reply from 192.168.100.163: bytes=32 time=2ms TTL=64
Reply from 192.168.100.163: bytes=32 time=1ms TTL=64
Reply from 192.168.100.163: bytes=32 time=2ms TTL=64

Ping statistics for 192.168.100.163:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 1ms, Maximum = 2ms, Average = 1ms
```
sklearn.datasetsのmake_blobsのfeatureとcenterについて調べてみた

#_sklearn.datasets.make_blobsのfeatureとcenterについて_
## featureについて
```python

from sklearn.datasets.samples_generator import make_blobs
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

X, y = make_blobs(n_features=2, centers=3)
X_train, X_test, y_train, y_test = train_test_split(X, y)
model = KNeighborsClassifier()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

acc = accuracy_score(y_test, y_pred) * 100
print('accuracy: {}%'.format(acc))
```
n_featuresはどれだけのカラムまたは特徴量をデータセットに定義するかを決定する。

##centerについて
>center ： intまたは形状の配列[n_centers、n_features]、オプション
>（デフォルト=なし）生成する中心の数、または固定中心位置。n_samplesがintで、
>centerがNoneの場合、3つの中心が生成されます。n_samplesが配列に似ている場合、centerは>Noneまたはn_samplesの長さに等しい長さの配列のいずれかでなければなりません。
よくわからないので、プロットしてみた。

```python
# plot 1 (centers=1)
X, y = make_blobs(n_features=2, centers=1)
plt.figure()
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.savefig('centers_1.png')
plt.title('centers = 1')
```

<img width="402" alt="スクリーンショット 2019-04-13 1.27.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263492/78ddda81-d76a-74c7-c418-5673ef1f639d.png">

```python
# plot 2    ('centers = 2')
X, y = make_blobs(n_features=2, centers=2)
plt.figure()
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.title('centers = 2')
```

<img width="383" alt="スクリーンショット 2019-04-13 1.28.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263492/5cd174ac-d9c1-b329-8cb8-d28c4b505869.png">

```python
# plot 3 ('centers = 3')
X, y = make_blobs(n_features=2, centers=3)
plt.figure()
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.title('centers = 3')
```
<img width="386" alt="スクリーンショット 2019-04-13 1.28.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263492/3d2a7967-460b-d17b-d739-476622a4b3c3.png">


##これらよりcenterはそれぞれのブロブ(塊)をセンター毎に分けて生成されていることがわかる。
[引用](https://stackoverflow.com/questions/51709878/what-does-n-features-and-centers-parameters-mean-in-make-blobs-in-scikit)
【Azure DevOps】Azure Boards デモ用日本語テンプレートを作りました

# はじめに

皆さん、Azure DevOps Demo Generatorってご存知ですか？Azure DevOpsの紹介をしたい時にDemo Generatorを使うと、簡単に様々なテンプレートを展開することができ、非常に便利です。

詳細は@dz_さんのこちらの記事をご参照ください。
(https://qiita.com/dz_/items/736bfd7be1478d638518)

実は、Demo Generatorでは、自分で作成したテンプレートを公開することも可能です。

# 公開したもの

あらかじめ用意されているテンプレートを展開すると、Azure Borardsに登録されるWork Itemsはすべて英語で作成されます。

書かれている言語が英語だとしても機能の説明には特に支障はないのですが、やはり見た目のイメージとして日本語が書かれていた方が、日本のお客様には理解して頂きやすいのではないかと思います。

そこで、@yuhattor さんと協力して**完全手作業**で日本語に書き換えなおしました！ｗ
(翻訳はTranslatorを使ったので不自然な表現もあるかと思います)


※イメージ図1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267543/080e5be5-1899-405c-4e50-fb7fc95393df.png)

※イメージ図2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267543/6df86450-f468-a738-fd59-99baa521aad4.png)


チェックをしたつもりですが、もし日本語化されていない部分がありましたら、ごめんなさい・・。


#デモの作り方
それでは実際に、デモを作る方法を紹介いたします。

## サンプルテンプレートをダウンロード
今回作成したテンプレートはGitHubに公開しております。

以下のURLから取得することが可能です。
https://github.com/NoriMin/AzureBoards-DemoTemplate-Japanese

## テンプレートを作成・編集したいとき
上記のサンプルをそのままDemo Generatorにアップロードしてももちろんよいですし、zipファイルを展開し、中に入っているJSONファイルを編集して独自のテンプレートを作ることも可能です。

## Azure DevOps Demo Generatorにアクセス
以下のURLからAzure Demo Generatorにアクセスし、Sign inしてください。
https://azuredevopsdemogenerator.azurewebsites.net/?enableextractor=true

(/の後のパラメータを指定しないと、Privateプロジェクトをアップロードできませんので注意してください。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267543/eb0997f3-7d36-7e19-600f-ebe6cd460b83.png)

## テンプレートをアップロード
Sign inが完了すると、以下のような画面になります。

Azure DevOps組織とProject名を決め、最後に**Choose template**を押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267543/88b840d3-4155-8b6a-76ff-088ba64b6fa7.png)

**Private**タブから**参照**をクリックすると、アップロードするファイルを選択することができます。
(.zipファイルをアップロードします。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267543/57b5b790-5458-7ade-1af1-815b97332bad.png)

最後に**Create Project**をクリックして完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267543/f78b681d-60f5-3994-868a-0ce5a9093fb1.png)

# さいごに
デモや製品ご紹介時に是非お使いください！
Gitで作業中に起きた問題と対処法

今回は以下のような場合の対処法

- **誤ってmasterブランチで作業を行ってしまった**

- **作業内容をコミットせずに別のブランチで作業を行いたい**

##対処法 ： `git stash` コマンドを使用する

**`git stash`とは**
**変更を一時的に退避しておくことのできる機能**

まだcommitしていない状態の変更ファイル
（addしてる or add していない)が存在する状況で、
次のコマンドを実行すると変更ファイルを退避することができる。

```terminal:terminal
$ git stash
```
これで、
作業途中の**ブランチAの変更内容を退避**させ、
作業したい**ブランチBに切り替えて作業を行う**ことができる。

ではブランチBでの作業完了後、**ブランチAの作業に戻りたい**場合はどうする？

##stash（退避）した内容を確認・復活させる方法

###確認

```terminal:terminal
$ git stash list
```

上記を実行すると

```terminal:terminal
$ git stash list
 stash@{0}: WIP on ブランチA: 168601a Add chat-side
 stash@{1}: WIP on ブランチB: 189061a Add chat-main
```
現在退避させている一覧を確認することができる。
※退避させている数だけ行が増える

```terminal:説明
 stash名: WIP on stashを行ったブランチ名: ハッシュ コミットコメント
```


###復活！
listの中から復活させたいstash名を確認し、以下コマンドを実行。

```terminal:terminal
$ git stash apply stash@{0}
```
上記の場合、**ブランチAで行ったstashが復活**する。

`stash apply`で変更を復活した場合、stashリストのなかに**復活済みの変更が残る**。
これを**削除する**には、次のコマンドを使用する。

```terminal:terminal
$ git stash drop 消したいstash名
```
**復活と削除**を同時に行う場合は

```terminal:terminal
$ git stash pop stash名
```

stashが溜まってくると、なにを変更したのか、どれが必要な変更だったのか
わからなくなるのでこまめに消したり管理することが大切。

####参考
https://qiita.com/fukajun/items/41288806e4733cb9c342
Google Apps ScriptでPostする

webhookで定期実行しようと思ったものの、postがうまくいかずに苦戦しました。

postはUrlFetchAppでできるって書いてあったんですが、muteHttpExceptionsでエラーが発生。
muteHttpExceptionsの設定を`true`に変えてあげれば通る。

```javascript

var web_url = "https://hogehoge.com";
var options = {
   "text" : "post"
};
var response = UrlFetchApp.fetch(
    web_url,
    {
        method: "POST",
        contentType: "application/json",
        payload: JSON.stringify(options),
        muteHttpExceptions: true,
    }
);
```
Downgrade Java MacOS

After install Java check what versions do you have:

```terminal
$ java --version
```

Something like this will appear:

```terminal
Matching Java Virtual Machines (2):
    12, x86_64:	"Java SE 12"	/Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
    11.0.2, x86_64:	"Java SE 11.0.2"	/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home
```

Select the version you want:
`/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home`

open your bash to edit:

```terminal
$ sudo vi ~/.bash_profile
```

and add this line:

```terminal
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home
```

update your bash:

```terminal
source ~/.bash_profile
```

confirm:

```terminal
$ java --version
```
Googleスプレッドシートで月、曜日の英語表記を取得する

Googleスプレッドシートで月と曜日の英語表記（AprilやSunday）を取得するにはひと工夫必要です。
いくつか方法があるのでお好きなのをどうぞ。

# 方法1: TEXT関数

TEXT関数で英語表記を取得するには、各スプレッドシートの「言語と地域」を英語圏に変更する必要があります。
ファイル>スプレッドシートの設定>言語と地域を「アメリカ合衆国」などに設定。
※現在のスプレッドシートのみ変更されます。メニューやタブには影響ありません

### 月

```
# 正式名（Januaryなど）
=TEXT(TODAY(), "mmmm")
```
```
# 省略名（Janなど）
=TEXT(TODAY(), "mmm")
```

### 曜日

```
# 正式名（Sundayなど）
=TEXT(TODAY(), "dddd")
```
```
# 省略名（Sunなど）
=TEXT(TODAY(), "ddd")
```

注意として、通貨など言語・地域依存の表示形式にも影響します。
例: アメリカ合衆国に設定した場合、`=YEN(100)`が入力してあっても`=DOLLAR(100)`に変換された上で`$100.00`と表示されます


# 方法2: CHOOSE関数

愚直な方法ですが、以下で取得できます。

```
# 月
=CHOOSE(MONTH(TODAY()),"January","February","March","April","May","June","July","August","September","October","November","December")
```
```
# 曜日
=CHOOSE(WEEKDAY(TODAY()), "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
```


# 方法3: GOOGLETRANSLATE関数

GOOGLETRANSLATE関数を使って英語に翻訳するという荒業もあります。

```
# 月（正式名）
=GOOGLETRANSLATE(TEXT(TODAY(), "mmmm"), "ja", "en")
```

```
# 月（省略名）
=LEFT(GOOGLETRANSLATE(TEXT(TODAY(), "mmmm"), "ja", "en"), 3)
```

曜日も同様。

# 方法4: LOOKUP関数

ちょっとつらいので説明は省略します。
https://www.terakoya.work/google-spread-sheet-day-of-the-week/

# 参考リンク

* https://stackoverflow.com/questions/43525469/how-to-get-english-month-name-from-date-in-russian-excel
* https://opencage.blogspot.com/2017/09/google-text.html
* https://www.terakoya.work/google-spread-sheet-day-of-the-week/
IPython起動時にいつも使うモジュールをimportする設定

# やりたいこと
いつも使うモジュールを毎回importするのがめんどくさいので、起動時にimportしといてもらいたい。

### tl;dr
`~/.ipython/profile_default/hoge.py`以下にimport部分を書いておく。


# IPython startup directory
たぶん、`~/.ipython/profile_default/`ここにディレクトリがある。
そこに`README`があって、
1. ここにある`.py`、`.ipy`ファイルを実行前に読み込んでくれる。
2. ファイル名の辞書順で実行してくれる。
的なことが書いてある。


## 使ってみる

適当に`~/.ipython/profile_default/00-startup.py`に以下を書く。

```~/.ipython/profile_default/00-startup.py
from collections import Counter
import pickle


def pload(fname):
  return pickle.load(open(fname, 'rb'))


def pdump(object, fname):
  pickle.dump(object, open(fname, 'wb'))
```

ipython起動して、簡単にテスト

```test.
$ ipython
In [1]: pdump([1,2,3], "hoge")                                                                                                                                           

In [2]: pload("hoge")                                                                                                                                                    
Out[2]: [1, 2, 3]

In [3]: Counter("HJKLHJKLLKJLJKJKJLKJHKJJLHKLJLK")                                                                                                                                   
Out[3]: Counter({'H': 4, 'J': 10, 'K': 9, 'L': 8})
```

# その他
入れすぎたり、重い処理を書くと起動が遅くなるから注意。
`jupyter notebook`, `jupyter lab`とかも同じ設定でいけると思う。
いちおう`ipython hoge.py`ってやれば、事前にimportしてから`hoge.py`を実行くれる。
普通の`python`で起動するインタラクティブシェルの場合は環境変数の`PYTHONSTARTUP`にファイルのパスを設定すればいい。　https://docs.python.org/ja/3/using/cmdline.html#envvar-PYTHONSTARTUP
宴会の幹事決めプログラム(イカサマもできますがやらないでくださいね)

#1. 要約
　宴会の幹事決めるのって難しくない？先輩に任せっきりもアレだし，後輩に押し付けるのもアレだし...そんなお悩みを持つあなたのために，宴会の幹事をランダムに決定するプログラムを書きました．これで誰が選ばれても「仕方がないナァ~~~」という空気になります．
#2.核となるのはrandomモジュールのchoice()
　pythonには強力なライブラリがあります．今回はrandom.choice()という関数を利用して，幹事候補者のリストの中から一名をランダムに決定するという処理を行います．aをリストとすると，random.choice(a)はリストの要素を一つランダムに選択する関数です．そのため，幹事候補者のリストを作成することが必要となります．今回作成したプログラムは以下のステップで構成されています(フローチャート？そんなもん知らねぇ！！)．

* step 1. 候補者の人数を入力
* step 2. 候補者を一人ずつリストに格納
* step 3. 候補者リストを表示して間違い，抜け漏れがないか確認を取る
* step 4. random.choice()で候補者リストから一人選択し，画面に表示する

以上の動作に，ユーザーからの入力が正しいかどうかの判定を加えたのが今回のプログラムです．

#3.幹事決めプログラム
いつものように，ターミナルやコマンドプロンプトで実行するプログラムです．

```{python, kanji_gime.py}
# -*- coding: utf-8  -*- 
import random

"""
input
	n: number of candidate of KANJI
	name: name of candidates
output
	kanji: KANJI
"""
ans = 0

while True:
	n = float(input(u"幹事候補者の人数を入れてください(int)->  "))
	if n < 0 or n.is_integer() == False:
		print(u"\nnには正整数入れてや\n")
		continue
	elif n.is_integer():
		n = int(n)
		break
while True:
	if ans == "y":
		break
	name_list = []
	for i in range(n):
		print("%d人目" % (i+1))
		name_list.append(input(u"候補者の名前を入力してください: "))
	print(name_list)
	while True:
		ans = input(u"\n候補者リストはこれ↑で合っていますか?(y/n): ")
		if ans == 'y':
			break
		elif ans == 'n':
			print(u"やり直しやで~~~")
			break
		else:
			print(u"y(yes)かn(no)で答えてちょっ！！！")

kanji = random.choice(name_list)
print(u"\n今回の幹事は",kanji,"さんです")

```
(でもnの入力が数値以外だとエラーが出て止まります．直せる方は直して使ってください．)
乱数固定するとイカサマできます．
タブ文字とスペースは可視化するようにエディタで設定するべき理由

## タブ文字とスペースは可視化するようにエディタで設定するべき理由
理由は、特にチーム開発においてファイルの変更が無駄に多くなってしまう可能性があるからです。
つまり、インデントのタブ文字とスペースが入れ替わるだけでもgitでは変更とみなされてしまいます。

タブ文字とスペースを可視化するようにすることで、インデントにこれらが混ざるのを防ぐことが出来ます。

下は、統合開発環境IntelliJで、タブとスペースを可視化した状態です
。<img width="100" alt="Screen Shot 2019-04-12 at 23.49.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250231/57c1d4e8-84c6-b36e-a599-15b55aa4143b.png">

...がスペースで、→がタブ文字です。
インデントとして、タブ文字とスペースが統一されていない悪い例です。
どの開発環境・エディタでも同様の機能はあるので、ぜひ設定しておきましょう。
## 終わりに
私は現在、Web3のサービスの開発をしています。詳しくはこちらの記事をご覧下さい。
        [無料でイーサリアムが当たる、Web3時代の寄付サイトを作った話](https://note.com/kenroda/n/n814347fbdcd7)
あいまい検索で条件分岐

メルカリのコピーサイトを作成しているのですが
商品検索の画面で気づきがあったため備忘録

#実装したい機能:sunglasses:
あいまい検索

何もヒットしない時は０件と表示させ、新着アイテムを表示させる
<img width="1440" alt="スクリーンショット 2019-04-12 22.56.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325594/276236c8-882e-a8f7-e246-3a728337a47d.png">

ヒットした時は検索結果を表示させる
<img width="1440" alt="スクリーンショット 2019-04-12 22.57.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325594/30e1937b-6feb-70d0-2d23-5e50d924a130.png">

-controller

```rb
def search
@items = Item.where('name LIKE(?)', "%#{params[:keyword]}%").order("id ASC").page(params[:page]).per(15)
if @items.count == 0
@all_items = Item.limit(25).order("id DESC")
end
```

(viewでも条件分岐させ、`@items`と`@all_items`のどちらかをeachで表示させます）

アイテムが引っかかったら`@items`を、引っかからなかったら`@all_items`に新着アイテムを代入

→これで実装できるはず！


#課題:fearful:

検索がヒットした時は結果表示
→OK！（結果が表示される）

検索ワードがヒットしなかった時
→OK！（結果は０件と表示され、新着情報が表示される）

検索ワードが空欄の時
→NG。。（全件取得される）

なんで？？

#原因:thinking:
あいまい検索のコードが原因のよう

```rb
Item.where('name LIKE(?)', "%#{params[:keyword]}%")
```

検索欄が空欄のときは全件とれてしまうのがSQLの仕様っぽいので条件分岐が必要のようです。。
https://qiita.com/nogitsune413/items/9c939f50714e430461c8

#解決:relaxed:

`params[:keyword]=""`の時に、リダイレクト先を設定することで解決！

リダイレクト先は`'/items/search?utf8=✓&keyword=+++'`を指定しています。
（名前を空欄にできないDB設計のためヒットすることはないはず、、？）

-controller

```rb
def search
  @items = Item.where('name LIKE(?)', "%#{params[:keyword]}%").order("id DESC").page(params[:page]).per(15)
  if params[:keyword] == ""
    redirect_to '/items/search?utf8=✓&keyword=+++'
  end
  if @items.count == 0
    @all_items = Item.limit(25).order("id ASC")
  end
end
```

コード的にはあまり美しくないのでいい書き方があればご教示ください:relieved:
UnityのiOSビルド時にCocoaPodsの項目を追加しインストールさせる方法

## 実装環境
- Unity 2018.3.8f1
- Xcode 10.2
- CocoaPods 1.6.1

## 方法
1. `Assets/Editor` 下でファイルを生成  
(Editorフォルダ内であれば問題ないので、自分は`Assets/Editor/hoge/Editor`下に置いてます)  

2. 実装例

```XML:GoogleMobileAdsDependencies.xml
<dependencies>
  <iosPods>
    <iosPod name="Google-Mobile-Ads-SDK" version="~> 7.0">
      <sources>
        <source>https://github.com/CocoaPods/Specs</source>
      </sources>
    </iosPod>
  </iosPods>
</dependencies>
```

## 要素について
[GoogleのPlayServicesResolverのサンプル](https://raw.githubusercontent.com/googlesamples/unity-jar-resolver/master/sample/Assets/PlayServicesResolver/Editor/SampleDependencies.xml) より一部参照

```XML:SampleDependencies.xml
<dependencies>
  <!-- iOS Cocoapod dependencies can be specified by each iosPod element. -->
  <iosPods>
    <!-- iosPod supports the following attributes:
         * "name" (required)
           Name of the Cocoapod.
         * "path" (optional)
           Path to the local Cocoapod.
           NOTE: This is expanded to a local path when the Podfile is generated.
           For example, if a Unity project has the root path "/my/game" and the
           pod the path is "foo/bar", this will be will be expanded to
           "/my/game/foo/bar" when the Podfile is generated.
         * "version" (optional)
           Cocoapod version specification for the named pod.
           If this is not specified the latest version is used.
           NOTE: This can't be used when "path" is set.
         * "bitcodeEnabled" (optional)
           Whether this Cocoapod requires bitcode to be enabled in Unity's
           generated Xcode project.  This is "true" by default.
         * "minTargetSdk" (optional)
           The minimum iOS SDK required by this Cocoapod.
         * "configurations" (optional)
           Podfile formatted list of configurations to include this pod in.
         * "modular_headers" (optional)
           Set to true to enable modular headers, false to disable.
         * "source" (optional)
           Source repo to fetch the pod from.
         * "subspecs" (optional)
           Subspecs to include for the pod.
     -->
    <iosPod name="Google-Mobile-Ads-SDK" path="../google-mobile-ads-sdk" version="~> 7.0" bitcodeEnabled="true"
            minTargetSdk="6.0">
      <!-- Set of source URIs to search for this Cocoapod spec.
           By default Cocoapods will attempt to fetch the pod specs from:
           * $HOME/.cocoapods/repos
           * https://github.com/CocoaPods/Specs
           -->
      <sources>
        <source>https://github.com/CocoaPods/Specs</source>
      </sources>
    </iosPod>
  </iosPods>
</dependencies>
```


### 補足
- `<sources>`タグは必須ではありません
- Androidも `<androidPackages>`を記述する事でライブラリの追加が可能です(とはいえ現在ではGradleを用いた方が良さそう)
webpack周りでよく使いそうなパッケージを紹介

# 概要
webpackはloader覚えゲー、plugin覚えゲーなところがあるのでよく使いそうなパッケージを紹介します。
ちなみにドキュメントはこちらです。（いっぱいあります）

https://webpack.js.org/loaders
https://webpack.js.org/plugins

# webpack
webpack本体です。

# webpack-cli
webpackをコマンドラインで実行するのに必要です。

# webpack-dev-server
開発用サーバーを立てるツールです。

# babel-loader
babelを使うのに必要です。

# ts-loader
typescriptを使うのに必要です。

# url-loader
画像などのファイルを扱うのに必要です。
小さいファイルの場合はDataUrlに変換されます。

# css-loader
cssを扱うのに必要ですが、単体ではスタイルの適用まではできません。

# style-loader
読み込んだcssをstyleタグとして挿入します。
jsが実行されるまでスタイルは適用されないので注意が必要です。

# mini-css-extract-plugin
読み込んだcssをcssファイルとして出力します。
cssファイルとして出力するので、js実行前にスタイルを読み込むことができます。

# html-webpack-plugin
jsなどを読み込むタグをhtmlに自動挿入してくれます。
特にビルド後のファイル名にハッシュ値を付けてる場合は便利です。

# clean-webpack-plugin
ビルド先のディレクトリを掃除してくれます。

# optimize-css-assets-webpack-plugin
cssのminifyに必要です。

# terser-webpack-plugin
jsのminifyに必要です。
webpack4ではデフォルトで使用されます。
【Python】辞書(dict)から値をモールス信号で検索してみる

辞書（dict）オブジェクトにモールス信号リストを作成し、
入力に対応した文字列を検索して出力するものを作ってみた。

```py
# モールス符号　「.」がﾄﾝ、「-」がﾂｰ
dic = {
    '.-':'A', '-...':'B', '-.-.':'C', '-..':'D', '.':'E', '..-.':'F', '--.':'G',
    '....':'H', '..':'I', '.---':'J', '-.-':'K', '.-..':'L', '--':'M', '-.':'N',
    '---':'O', '.--.':'P', '--.-':'Q', '.-.':'R', '...':'S', '-':'T', '..-':'U',
    '...-':'V', '.--':'W', '-..-':'X', '-.--':'Y', '--..':'Z'
}

def morse(src):
    result = []
    for word in src.split("  "):
        for char in word.split(" "):
            result.append(dic[char])
        result.append(" ")
    return "".join(result)


print(morse('.... . .-.. .-.. ---  .--. -.-- - .... --- -.'))
```

```text:実行結果
HELLO PYTHON 
```

空文字2文字で単語を区切り、空文字1文字で文字を区切りながら辞書を検索していき文字を連結させる。
DockerでLaravel環境を構築する②~PHPの導入~

[DockerでLaravel環境を構築する①~webサーバーの立ち上げ~](https://qiita.com/wjtnk/items/9d6a56a05bff2068cd2c)の続きです。


Nginxを起動して、静的なファイルを返すwebサーバを立ち上げたあとは,プログラム（今回はPHP）を用いて動的にファイルを返す、アプリケーションサーバーを立ち上げなければなりません。
サーバーでPHPを動作させるためにはPHP-FPMを使います。

>  PHP-FPMとは
FPMとは、PHP標準のアプリケーションサーバです。名前にあるFastCGIというプロトコルで通信するよう実装されています。 FastCGIは、Webサーバとアプリケーションサーバの間で使われるプロトコルの一つで、ここでの例ではnginxとPHP-FPMの間で交わされるプロトコルとなります。
![php-fpm_img.png](https://qiita-image-store.s3.amazonaws.com/0/388525/985e852d-bcd6-1cb2-5c5f-73c29c23409a.png)

>>https://windii.jp/backend/laravel/laravel-with-docker-compose



docker-compose.ymlファイルに以下を追記します。
編集箇所は、

```docker-compose.yml

web:
・
・
    depends_on: 
      - app
・
・
app:
    image: php:7.2-fpm
    volumes:
      - .:/var/www/html
     
```

です。
depends_onはコンテナ作成の順序を決めてくれています。
今回の場合は、
「appコンテナ」が立ち上がってから「webコンテナ」を立ち上げるという順序にします。

最終的なdocker-compose.ymlは以下。

```docker-compose.yml

web:
    image: nginx:1.15.6
    ports:
      - "8000:80"
    depends_on: # 追加
      - app
    volumes:
      - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
      - .:/var/www/html
    
app:
    image: php:7.2-fpm
    volumes:
      - .:/var/www/html
     
```

*ここで「.:/var/www/html」は「カレントディレクトリを/var/www/htmlにマウントする」ということなので、appコンテナか、webコンテナどちらか片方だけでいいと思うのですが、わかるかたいれば教えてください。




次に、docker/web/default.confを編集します。


```docker/web/default.conf

server {
    listen 80;

    root  /var/www/html; ・・・①
    index index.php index.html index.htm;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    location / {       ・・・②
        try_files $uri $uri/index.php;
    }

    location ~ \.php$ {
          fastcgi_split_path_info ^(.+\.php)(/.+)$;
          fastcgi_pass   app:9000;
          fastcgi_index  index.php;

          include        fastcgi_params;
          fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param  PATH_INFO $fastcgi_path_info;
      }
}
     
```

①ではドキュメントルート(webで公開するディレクトリ)を指定しています。

```docker/web/default.conf
    root  /var/www/html; ・・・①
    index index.php index.html index.htm;
```
indexではルートページでどのファイルを表示するかを指定しています。
この場合では、例えば
http://localhost:8000
にアクセスしたときに、
・index.phpを探してあったら表示、なければ次
・index.htmlを探してあったら表示、なければ次
・index.htmを探してあったら表示、なければエラーを返す。
というような処理になります


②ではURLにアクセスした際に、どのような順番でファイルを探すか指定しています。

```docker/web/default.conf
    location / {       ・・・②
        try_files $uri $uri/index.php$is_args$args;
    }
```
・まずはURLそのままのディレクトリの中からファイルを探す。
ex)http://localhost:8000/newpage
にアクセスすると、「root  /var/www/html;」以下にnewpageというファイルがあるかどうか探す。

・なければ次に、newpageというディレクトリの中にindex.phpがあるかどうかを探す

という処理です。


次に、PHPの起動を確認するため、index.htmlと同じ場所に、index.php を作成

```php:index.php
<?php phpinfo();?>
```

再び、

```shell
$ docker-compose up -d
```

を実行します。

続きはこちら

[DockerでLaravel環境を構築する③~MySQL、laravelの導入~](https://qiita.com/wjtnk/items/9e553f90f38e279a8b99
)
Computational Optimal Transport 精読会 記録 (#4: 2.5後半-2.6)

# 背景

- 前回: [Computational Optimal Transport 精読会 記録 (#3: 2.5前半)](https://qiita.com/takilog/items/8fbb09caf36cae6844a4)は3/25に開催，今回は4/3に開催
- 職場でCOTを読んでおり，{自己満足,復習,将来のため}などの理由で記録をしている

# 今回の範囲の内容

- Kantorovich問題の双対問題について(後半)と残りの諸定理について(測度論パートは含まない)

## アンチョコ

- Kantorovich problem: $L_C(\mathbf{a,b}) = \min_{\mathrm{P}\in U(\mathbf{a, b})} \langle C, P \rangle$
    - *coupling matrix*: $U(a, b) = \\{\mathrm{P}\in \mathbb{R}_+^{n\times m}\mid \mathrm{P} \mathbb{1}\_m = \mathbf{a}, \mathbf{P}^T \mathbb{1}\_n = \mathbf{b} \\}$

- Dual problem $L_C(\mathbf{a,b}) = \max_{(\mathbf{f, g})\in R(C)} \langle \mathbf{f, a}\rangle + \langle \mathbf{g, b}\rangle$
    - ただし $R(C) = \\{(\mathbf{f,g})\in\mathbb{R}^n\times \mathbb{R}^m \mid \mathbf{f \oplus g} \leq C\\}$ 

### Dual Problemの解釈

- $a$を原材料置き場（倉庫），$b$を工場と考え，$a$から$b$へ輸送する問題を考える
- 主問題を解ける場合，その最適化解 $P^\star$ のように材料を輸送すればよい
- 主問題を解くリソースが存在しないと仮定し，集配側(a側)と分配側(b側)で仕事をアウトソーシングすると想定する
- アウトソーシングする場合の価格を$\bf f$と$\bf g$で考える
- 考え方: 輸送する側は価格を最小化したい，アウトソーシングされる側は得られる報酬を最大化したい
    - アウトソーシングを請け負う側が得られる報酬とは要するに $\langle \bf f, a\rangle + \langle \bf g, b\rangle$ である
    - 補足: 両方同時に上げたい（$\bf f$で減った分は$\bf g$側に入れることで解消できるイメージ）
- 輸送する側は設定された価格$\bf f, g$が正しいか(reasonable)を確認しないといけない
    - 主問題を解けば分かるが，主問題を解くリソースがない
    - けれども$\bf f_i, g_j$が分かっていれば，これと$C_{i,j}$を比較すれば良い
        - $f_i + g_j \leq C_{i,j}$であれば，アウトソーシングをOKする
        - この条件が満たされていれば，双対問題は主問題で計算されるコストと比較して良いかどうか確認できる



# 2.6 Special Cases

- 本来主問題$L_C(a,b)$を解くために何らかの計算リソースが必要となるが，いくつかの特別な場合においてこれは簡単に計算できる

### Remark 2.26

- $\bf C = \mathbb{1}_{n\times n} - \mathbb{I}_n$ であるような場合の1-Wasserstein distance
    -  注: 対角線が0，他が1であるようなコスト行列
    -  $L_C(a,b) = \frac{1}{2} ||a - b||_1$ (<font color="red">注: ここでノルムに1/2が必要だけどarXiv版では抜けている</font>)

- 証明の考え方
    - 対角線のコストが0なので，最適解について対角線に可能な限り輸送するのが良い
    - 輸送できる最大量はmarginalの制約から各$i$について$\min(a_i,b_i)$であり，仮に$a_i<b_i$であれば，$a$の方向(行方向)はすべて$0$になる，逆に$0$にならない側の輸送量は$|a_i - b_i|$となっている（対角線で送る分の残り）
    - これを全部の輸送パターンでやっていくと，全体で送る量は$\sum_{i} |a_i - b_i|$の半分になって，これは主張になる


### Remark 2.27

- 1-Dのヒストグラムを考えソートされているような問題を考え，それぞれ$1/n$ずつ重みが置かれている状況を想定する
- このとき$\mathcal{W}\_p(\alpha, \beta)^p = \frac{1}{n} \sum_{i} |x_i - y_i|^p$ となる
    - 意味: ソートされた順でマッチングしていくような計算で良い

(本の図を参照)
![1dcase.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7181/be461c2b-6ed7-9ea0-c5c8-74eafa4b6f37.png)


- 証明の考え方
    - 一番簡単なケースを考える: それぞれ2点ずつで$x_1, y_1, x_2, y_2$，各点に$\frac{1}{2}$の山が置かれているような離散測度
    - これを考えるには以下の3ケースにおいて，$x_1\mapsto y_1, x_2\mapsto y_2$が最良になることを示す
        - $x_1 < y_1 < x_2 < y_2$のケース
            - $|x_1 - y_1| = \alpha, |y_1-x_2| = \beta, |x_2 - y_2| = \gamma$
            - $x_1 \mapsto y_2, x_2\mapsto y_1$と比較して明らか
        - $x_1 < y_1 < y_2 < x_2$のケース
            - $|x_1 - y_1| = \alpha, |y_1-y_2| = \beta, |y_2 - x_2| = \gamma$
            - 上と同じ
        - $x_1 < x_2 < y_1 < y_2$のケース
            - $|x_1 - x_1| = \alpha, |x_2-y_1| = \beta, |y_1 - y_2| = \gamma$
            - 入れ替えた場合もコストを計算して$p$ノルムの場合証明が必要
            - 適当な証明を思いつくといけるらしい

### Remark 2.29

- Histogram equalizationの説明だが，必ずしも図2.10とリンクしているわけではないので注意
- 絵のベクトルをソートする関数$\sigma$を頑張って読み解く



# 次回

次回からは§3をやっていく
ReactでHelloWorldをしてみよう！

#概要
ReactでHelloWorldするまでの簡単な手順をまとめたいと思います！
とりあえずReactを触ってみたい...という方必見です...

まずはReactのことを知りたい人はこちらから
__[ReactでHello Worldをする前に...](https://qiita.com/micropig3402/items/27031fb50580ad8497fc)__

#Node.jsをインストールする
[Node.js](https://nodejs.org/ja/)にアクセスしましょう。(2019/04/12現在)
<img width="1278" alt="スクリーンショット 2019-04-12 22.28.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343290/c5519f72-5fac-c1fa-3ca0-51e844a31026.png">
LTS版はLong Term Supportの略で長期間サポートを受けられるversionです。最新版はサポート期間は短いですが、最新の機能を利用できるversionです。ちなみに私は以前に導入したv11.9.0を使っています。

#create-react-appをインストールする
```
yarn global add create-react-app
```
`create-react-app`コマンドはFacebook(React.js開発元)が公開している、React.jsアプリを素早く作るための[コマンドラインツール](https://github.com/facebook/create-react-app)です。詳しくは[この記事](https://qiita.com/chibicode/items/8533dd72f1ebaeb4b614)が参考になると思います。
<img width="488" alt="スクリーンショット 2019-04-12 22.37.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343290/4485796e-2d94-1076-41d9-e8532b3521d2.png">

##yarnとは
FacebookとExponent、Google、Tildeとの共同チームによって生まれた新しいパッケージマネージャーです！
導入方法は[こちらの記事](https://qiita.com/masterkey1009/items/50f95b1187646a7db385)へ



#create-react-appコマンドを実行する
```
create-react-app ディレクトリ名
```
<img width="491" alt="スクリーンショット 2019-04-12 22.43.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343290/4776e68a-2c56-e5eb-d226-244f2c051efd.png">

#yarn run startコマンドを実行する
```
yarn run start
```
このコマンドを入力すると`http://localhost:3000`でこのような画面が表示されるはずです！
<img width="1007" alt="スクリーンショット 2019-04-12 22.52.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343290/9b06f2e7-0952-37c6-0aab-d89276e70cec.png">

#src/App.jsのコードを書き換える
src/App.jsのなかのpタグを書き換えましょう！

```react:src/App.js
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <p>
            Hello Micropig！
          </p>
          <a
            className="App-link"
            href="https://reactjs.org"
            target="_blank"
            rel="noopener noreferrer"
          >
            Learn React
          </a>
        </header>
      </div>
    );
  }
}

export default App;
```

#完成
画面表示がこのように変わります！
<img width="1006" alt="スクリーンショット 2019-04-12 23.03.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343290/282870ed-c684-ab35-fad8-ef2414e6ecd3.png">

#リファレンス
- [Facebook公式のcreate-react-appコマンドを使ってReact.jsアプリを爆速で作成する](https://qiita.com/chibicode/items/8533dd72f1ebaeb4b614)
- [yarnを使ってみた](https://qiita.com/masterkey1009/items/50f95b1187646a7db385)
ubuntu 16.04 interface bonding memo, configuration and status check.

# ubuntu 16.04 interface bonding memo, configuration and status check.

## system

```
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
```
```
$ lsmod | grep bond
bonding               143360  0
```
```
$ dpkg -l | grep -Ei "ifenslave|bridge-utils"
ii  bridge-utils                          1.5-9ubuntu1                               amd64        Utilities for configuring the Linux Ethernet bridge
ii  ifenslave                             2.7ubuntu1                                 all          configure network interfaces for parallel routing (bonding)
```

## configuration

- file: /etc/network/interfaces

```
auto p1p1
iface p1p1 inet manual
  bond-master bond0

auto p5p1
iface p5p1 inet manual
  bond-master bond0

auto bond0
iface bond0 inet manual
  slaves p1p1 p5p1
  bond_mode active-backup
  bond_miimon 100
```


## check status by command line

```
$ ip a s p1p1 | head -1
3: p1p1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000

$ ip a s p5p1 | head -1
6: p5p1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000

$ ip a s bond0 | head -1
7: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP group default qlen 1000
```
```
$ brctl show br0
bridge name     bridge id               STP enabled     interfaces
br0             8000.001b2136b8a4       no              bond0
```

## check status by proc file system

```
$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: p5p1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: p5p1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:1b:21:(snip)
Slave queue ID: 0

Slave Interface: p1p1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:1b:21:(snip)
Slave queue ID: 0
```

## check status by sysfs

```
$ cat /sys/class/net/bond0/bonding/mode
active-backup 1

$ cat /sys/class/net/bond0/bonding/mii_status
up

$ cat /sys/class/net/bond0/bonding/miimon
100

$ cat /sys/class/net/bond0/bonding/active_slave
p5p1

$ cat /sys/class/net/bond0/bonding/slaves
p5p1 p1p1
```
ABC - 043- A&B&C

#AtCoder ABC 043 A&B&C
[AtCoder - 043](https://atcoder.jp/contests/abc043)

#A問題

 - 再帰で書くとstack over flowが怖いのでループ

```java
	private void solveA() {
		int numN = nextInt();

		long res = 0;
		for (int i = 1; i <= numN; i++) {
			res += i;
		}

		out.println(res);
	}
```

#B問題

 - 'B'が来たらListからremove

```java
	private void solveB() {
		char[] wk = next().toCharArray();

		List<Character> res = new ArrayList<Character>();
		for (char c : wk) {
			if (c != 'B') {
				res.add(c);
			} else {
				if (res.size() != 0) {
					res.remove(res.size() - 1);
				}
			}
		}

		StringBuilder builder = new StringBuilder();
		for (Character character : res) {
			builder.append(character);
		}
		out.println(builder.toString());
	}
```

#C問題

 - コストが $(x-y)^2$ かかる
     * aiの範囲は $-100 \leqq ai<=100$
     * どの数値にするとコストが最小になるのか？

```java
	 /*
	 * コストが(x-y)^2かかる
	 * aiの範囲は -100<= ai<=100
	 * どの数値にするとコストが最小になるのか？
	 */
	private void solveC() {
		int numN = nextInt();
		int[] wk = IntStream.range(0, numN).map(i -> nextInt()).toArray();

		long res = Long.MAX_VALUE;
		/*
		 * -100 から 100まで全探索
		 */
		for (int i = -100; i <= 100; i++) {
			long resTmp = 0;
			for (int j = 0; j < wk.length; j++) {
				resTmp += Math.pow((wk[j] - i), 2);
			}
			res = Math.min(res, resTmp);
		}
		out.println(res);
	}
```
GitHubのリポジトリ一覧を取得してスプレッドシートに転記

# 経緯
リポジトリの必要・不必要の判断をしてもらうためGitHubのリポジトリ一覧を作成する必要がありました。
一覧はスプレッドシートで共有して判断をしてもらうという形式をとりました。
また、数百というリポジトリがあったので手動でやるには無理があったので簡単なスクリプトを作成しました。

# 事前準備
GitHubのAPIを利用するのでトークンを発行する必要があります。
GitHubの【Personal settings】から【Developer settings】を選択します。
<img width="200" alt="スクリーンショット 2019-04-12 21.36.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374301/3a23f6e9-bcaf-dd09-badd-785479250d53.png">

【Personal access tokens】に遷移後、【Generate new token】を押下します。
<img width="500" alt="スクリーンショット 2019-04-12 21.44.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374301/30f57f03-3894-541b-a487-1fbfa85cb6ff.png">

【Token description】に任意のトークン名を入力して以下の【repo】にチェックを入れてください。
チェックを入れないとPrivateリポジトリの取得ができません。
<img width="500" alt="スクリーンショット 2019-04-12 21.50.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374301/0ecdb68a-8436-95e5-f006-6c1e1c3e71ce.png">

【Generate token】を押下すればトークンが発行されますので控えておいてください。

# 前提
A1列にカラム名、A2列以降にリポジトリ名を記載することをイメージしております。
今回はパッと出したかったので転記するセルをガチガチに決めています。

# 実装
```javascript:main.gs
function getRepositoryList() {
  
  // スプレッドシートの取得
  // スプレッドシートとプロジェクトを分けたかったのでスプレッドシートを取得
  var spreadsheet = SpreadsheetApp.openById('対象スプレッドシートのID');
  
  // 対象シートの取得
  var sheet = spreadsheet.getSheetByName('シート名');
  
  // 記載済みのリポジトリ一覧をクリアにする
  sheet.getRange(2, 1, sheet.getLastRow(), 1).clear();
  
  // 一度に取得できるリポジトリ数が100なのでAPIを複数回実行する
  var page = 1;
  while(true) {
    // :org部分は自分のOrganizationを指定
    // Public・Private両方のリポジトリを取得
    var apiUrl = "https://api.github.com/orgs/:org/repos?per_page=100&page=" + page +"&type=all&sort=full_name";
    var repoList = exeGetGitHubAPI(apiUrl);
    // リポジトリが取得できなくなったらループを抜ける
    if(repoList.length == 0) {
      break;
    } else {
      page++;
      for(var i = 0; i < repoList.length; i++) {
        // API実行結果からリポジトリ名を取り出す
        sheet.getRange(sheet.getLastRow()+1, 1).setValue(repoList[i]['name']);
      }
    }
  }

}


function exeGetGitHubAPI(apiUrl) {
  
  var token = '先ほど取得したGitHubトークン';
  
  var header = {
    "Authorization" : "token " + token
  };
  
  var options = {
    "method" : "get",
    'contentType' : 'application/json',
    'headers' : header
  };
  
  try {
    var result = UrlFetchApp.fetch(apiUrl, options);
  } catch(e) {
    Logger.log("処理に失敗しました。エラー内容は以下です。\n" + e);
  }
  
  return JSON.parse(result);
  
}
```
トークンを直書きしているのでいけてないのですが、上記ソースコードが格納されたプロジェクトに権限を割り当てることで閲覧者を限定させています。

# 参考資料
[GitHub APIリファレンス](https://developer.github.com/v3/)
Octaveで文字列を扱う時に知っておくこと


##はじめに

スパムメールの判定時など文字データがテキストで与えられる場合がある。Octaveでこのような文字データを処理するにあたり、知っておきたい文字列の扱い方、覚えておきたい関数についてまとめる。

##関数の用法

wordを行列として定義する。

```octave:octave
C = {'Trump','Abe'}

C =
{
  [1,1] = Trump
  [1,2] = Abe
}

size(C)
ans =   1   2
```

行列要素の抽出の仕方２通り。

```octave:octave
C(1)
ans =
{
  [1,1] = Trump
}

C{1}
ans = Trump
```

文字行列がword単位でなくアルファベット単位になる場合。

```octave:octave
C = ['Trump', 'Abe'] or C = ['Trump' 'Abe']
C = TrumpAbe

size(C)
ans =
   1   8

C = ['Trump Abe']
C = Trump Abe

size(C)
ans =
   1   9
```

文字列を空白で区切りwordに分断したい時、strsplitが使える。

```octave:octave
str1=['Abe Trump Abe Abe']
str1 = Abe Trump Abe Abe
size(str1)
ans =
    1   17

strsplit(str1)
ans =
{
  [1,1] = Abe
  [1,2] = Trump
  [1,3] = Abe
  [1,4] = Abe
}
```

文字列が１行１列の行列になっているとstrsplitは使えない。

```octave:octave
str2={'Abe Trump Abe Abe'}
str2 =
{
  [1,1] = Abe Trump Abe Abe
}
size(str2)
ans =
   1   1

strsplit(str2)
error: strsplit: S and DEL must be string values
```

文字列s1とs2が同じであれば1を返し、異なれば0を返す。

```octave:octave
s1={'Trump'}
s2={'Abe'}

strcmp(s1, s2)

ans = 0
```
ターミナルのコマンド 初心者編

#CUIで操作してみよう！
あの黒いウィンドウの中でキーボードだけを操作してやるアレです。
でもコマンドの意味をしっかり理解できればそんなに怖くない。

##ディレクトリ操作系

#####cd
change directory（ディレクトリを変更する）
これでフォルダを移動していく。

#####pwd
present working directory（現在の作業ディレクトリ）
現在居るフォルダのパスを表示する。

#####ls
list（一覧表）
現在居るフォルダのファイルを表示する。

```bash
-a　隠しファイルも全て表示する。（all）
-l　ファイルを詳しく表示する。（long）
```

##ファイル操作系

#####cat
catenate（繋ぐ）
本来はファイルとファイルを繋げて表示するコマンド。
でもファイルを1つしか指定しない場合は、ただそのファイルを表示するだけ。

#####tail
tail（尻尾）
指定されたファイルを最後の行から表示するコマンド。

```bash
-100　最後から100行を表示する。
-f　最新の状態を監視しながら表示する。（follow）
```

#####mv
move（動かす）
ファイルを指定のディレクトリに動かすコマンド。
ファイルの名前を変更するときにも使う。

#####cp
copy（写す）
ファイルをコピーするコマンド。

```bash
-r　ディレクトリをコピーする。（recursive）
-p　パーミッション情報もコピーする。（preserve）
```

#####rm
remove（削除する）
ファイルをデリートするコマンド。
`rm -rf /`を入力してはいけない(戒め

```bash
-r　ディレクトリをデリートする。（recursive）
-f　強制的にデリートする。　（force）
```

#####mkdir
make directory（ディレクトリの作成）
ディレクトリを作成する。

##エディター操作

#####vi
visual editor（ビジュアルエディター）
viというテキストエディターで編集するコマンド。

######iキー
insertion（挿入）
viで閲覧状態から編集状態に切り替える。

######escキー
escape（脱する）
viで編集状態から閲覧状態に切り替える。

######shiftキー + $キー
行の最後へカーソルを移動する。

######shiftキー + ^キー
行の最初へカーソルを移動する。

######shiftキー + gキー
ファイルの最後へカーソルを移動する。

######/○○○
文字で検索する。

######nキー
next（次へ）
検索結果の次へ

######shiftキー + nキー
検索結果の前へ

######:q
quit（終わる）
viを終了する。

######:wq
write quit（書き込みを終える）
編集を保存してviを終了する。

######:q!
quit!（脱しろ！）
編集を保存せずに終了する。

######:set number
set number（番号を置く）
行番号を表示する。


##その他操作

#####history
history（履歴）
打ったコマンドの履歴が見れる。

#####su
substitute user（代替ユーザー）
ユーザーのログイン。

#####exit
exit（出口）
ユーザーのログアウト。

#####whoami
who am i（私は誰？）
現在のユーザーを知る事ができる。

#編集後記
入社10日目
祝二桁！
今日は上司から丁寧に教わったコマンドをまとめました。
他にもchmodやchown、wgetやtar、sudoやdf
など教えてもらいましたが、多分中級者向けだなと思ったんで今回は割愛。
日本語での意味がわかると親しみやすいですね！
python postgreSQLのライブラリpsycopg2の使い方メモ

##psycopg2を使うことに決めた理由について
・高速である（ネット情報）
・select結果を辞書形式で取得できる　★これにつきる

##psycopg2のselectの仕方（自分がしっくりくる基本はこれ）
※psycopb2をインストールしてから

```python
#import
import psycopg2 
import psycopg2.extras
import os

#postgreSQLに接続（接続情報は環境変数、PG_XXX）
connection = psycopg2.connect(\ 
	host=os.environ.get('PG_HOST'),\ 
	user=os.environ.get('PG_USER'),\ 
	password=os.environ.get('PG_PASS'),\ 
	database=os.environ.get('PG_DBNM'),\ 
	port=int(os.environ.get('PG_PORT'))) 

#クライアントプログラムのエンコードを設定（DBの文字コードから自動変換してくれる）
connection.set_client_encoding('utf-8') 

#select結果を辞書形式で取得するように設定 
connection.cursor_factory=psycopg2.extras.DictCursor

#カーソルの取得
cursor = connection.cursor() 

#SQL文設定(%はバインド変数）
sql = 'select name, work from m_user where id = %(target_id)s'

#SQL実行
target_id = 1
cursor.execute(sql, {'target_id': (target_id,)}) 

#取得結果を出力　★辞書形式　row['name']　辞書形式でなければ、row[0]、orz
results = cursor.fetchall() 
for row in results: 
	print(row['name'])
	print(row['work'])

#カーソルをとじる
cursor.close() 

#切断
connection.close() 
```
##参考
・psycopg2のBasic module usage
　http://initd.org/psycopg/docs/usage.html
　※バインド変数は、「Passing parameters to SQL queries」に記載あり

・psycopg2のThe connection class
　http://initd.org/psycopg/docs/connection.html

・psycopg2のThe cursor class
　http://initd.org/psycopg/docs/cursor.html

・バインドin句の例
　sql = """
					select name, work from m_user_a where id in %s
					union all
					select name, work from m_user_b where id in %s
				"""
	cursor.execute(sql,(('1', '3', '5'), ('1', '4', '5')))
Excelでフルパスからファイル名のみを抽出する

# はじめに

たまに使うので、メモとして残しておこうと思った次第です。
Excelの関数のみで、VBAは使いません。
タイトルの通りですが、やりたいことはこんなこと。
![2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393759/057f4c16-e293-2cdc-9f17-61a8a1045495.gif)

# 結論から

ソースのフルパスをB2に記述した状態で下記をコピペしてください。

```php
=IF(ISERR(RIGHT(B2,LEN(B2)-FIND("-_-",SUBSTITUTE(B2,"/","-_-",LEN(B2)-LEN(SUBSTITUTE(B2,"/","")))))),B2,RIGHT(B2,LEN(B2)-FIND("-_-",SUBSTITUTE(B2,"/","-_-",LEN(B2)-LEN(SUBSTITUTE(B2,"/",""))))))
```

#解説
上記の関数でなぜ抽出できるのか、
後ろから簡単に解説していきます。

```:①
SUBSTITUTE(B2,"/","")
```

B2の"/"を""(ブランク)に置換
※第4引数の置換対象を省略しているため、B2のにおける全ての"/"が""(ブランク)に置換されます。

```:②
LEN(B2)
```

B2の長さ(文字数)

```:③
LEN(SUBSTITUTE(B2,"/",""))
```

B2の全ての"/"を""(ブランク)に置換した文字列の長さ
⇒**(B2の長さ - "/"の数)を算出**

```:④
SUBSTITUTE(B2,"/","-_-",LEN(B2)-③)
```

B2の(B2の長さ - "/"の数)番目の"/"を"-\_-"に置換
⇒**B2の1番後ろにある"/"を"-_-"に置換**

```:⑤
FIND("-_-",④)
```

"-\_-"が何文字目かを算出
※第3引数の開始位置を省略しているため、開始位置は1が割り当てられます。
⇒**B2の1番後ろの"/"は何文字目かを算出**

```:⑥
RIGHT(B2,LEN(B2)-⑤)
```

B2の、(B2の長さ - B2の1番後ろの"/"までの長さ)から後を出力
⇒**B2の1番後ろにある"/"から後を出力**

```:⑦
=IF(ISERR(⑥),B2,⑥)
```

親ディレクトリ直下にあるファイル(Javaプロジェクトでいうpom.xmlとか)の場合、"/"(ディレクトリ階層の区切り文字)がなく、エラーが返るため、
その場合は、なにもせずそのまま表示する。としています。

##### つまり

直下にある場合は、そのまま表示
階層がある場合は、ファイル名のみを抽出して表示
となっています。

# うまく抽出できない場合

解説を見ていただけたらわかるかと思いますが、

- フルパス内に"-_-"が含まれている
- ディレクトリ階層の区切り文字が"/"でなく、"\"若しくは"&yen;"となっている

などの可能性があります。
適宜、変更して使用していただければと思います。


# おまけ

似たような感じで、パスのみも下記で抽出できます。

```php
=LEFT(B2,FIND("-_-",SUBSTITUTE(B2,"/","-_-",LEN(B2)-LEN(SUBSTITUTE(B2,"/",""))))-1)
```
getho.ioのアカウントロックの外し方

※追記
gethoさんサービス終了してしまったようで、、、残念です。
MyEthereumWalletとかでも同じようなことできるのでお試しください。
やっぱりRemixさいつよな気もしてます。

# gethoとは


https://getho.io/

Ethereumのプライベートチェーンを作って開発用に利用できるサービス。
ドメインを共有することで、複数人でプライベートチェーンを共有でき、
もちろんスマートコントラクトもデプロイできる。
デプロイしたコントラクトは実際にgetho上で実行でき、直感的にデバッグもできる優れもの。


# 使い方

本家のHow to deployを見ましょう！
https://getho.io/document/deploy?subdomain=scaly-chimpanzee-41050

まず普通にgetho.ioにログインしてノードを立てる。

Truffleからアクセスできるようにtruffle-config.jsのnetworksに下記を追加


```node
getho: {
      host: "[自分のノードID/jsonrpc]",
      port: 80,
      network_id: 1010,
      gas: 4712388
}
```


これで``` truffle migrate --network getho --reset --compile-all ```
 でもやればgethoにデプロイできる。


# functionが実行できない！

gethoにはあらかじめ3つのアカウントが用意されているが、一人目以外のアカウントはロックがかかった状態になっており、実行しようとすると認証エラーで利用できない。

```
authentication needed: password or unlock
```


# アカウントロックの外し方

※下記で検証

```
Node v11.1.0
Truffle v5.0.5
web3 1.0.0-beta.37
```

truffleでは開発用gethコンソールに``` truffle develop ``` でアクセスできますが、
gethクライアントでgethoにアクセスするには下記を実行


```
truffle console --network getho
```


残高を確認する下記コマンドで疎通を確認できる。


```
balance = await web3.eth.getBalance("[アカウントアドレス]")
balance
```


アカウントロックを外したいならdocの通り下記を実行することでロック解除できる。
https://web3js.readthedocs.io/en/1.0/web3-eth-personal.html#unlockaccount

```
web3.eth.personal.unlockAccount('[アカウントアドレス]', '[アカウント秘密鍵]', 0)
```

trueが返ればOK！
ポートを閉じる時に使うコマンド（lsofとkillコマンド）

# 概要

PHPのビルトインサーバとかNode.jsでちょこっと作ったものを動かしたままTerminal閉じちゃった、とかの時に使うコマンドのメモ。
環境はMac。

# コマンド

```sh
$ ~> lsof -i -P | grep 3000
node  10760  hoge  25u  IPv6 0xbcd2618d610bf4e3  0t0  TCP *:3000 (LISTEN)
$ ~> kill -9 10760
```

lsofでポート指定してプロセスを特定してkillすればOK
varchar(max) の場合は SqlParameter の size 引数に何を渡すか

# varchar(max) の場合は SqlParameter の size 引数に何を渡すか

-1 です(終了).

```csharp
new SqlParameter("@Param", SqlDbType.VarChar, -1) {
```

SQL Server の1行は基本的には8060バイトが上限で、varchar の場合は varchar(8000) が最大長になります.
ただし、SQL Server 2005 で追加された新機能 varchar(max) を使うとそのカラムは最大 2GB になります.
その中間の10000文字とかで制限したいと思っても出来ません.

Microsoft の .NET API ページの SqlParameter Class の Size の説明に何も書かれていないのがもうね…….
RichTextBoxのカーソルの行（の背景）に色を付ける。

#今、ちょっとログブラウザを作っています。
決まったディレクトリにあるログファイルの一覧を作って、そこから選んだらログファイルを閲覧できる。
まあ、それだけなら楽ちんなのですが、「特定のキーワードでは色付けしたい」「今見ている行がすぐわかるようにしたい」「キーボードで今見ている行を移動できるようにしたい」
ということを実現しようとしています。
当初は、Windows Formsで`RichTextBox`を使うという方法を考えました。特定のキーワードで色付けはすでに実績があります。
簡単に言うと、

```WindowsFormsRTB.cs
void LoadFile(string FileName, string KeyWordRegEx)
{
  richTextBox1.Text = File.ReadAllText(FileName);
  var ms = RegEx.Matches(richTextBox1.Text, KeyWordRegEx).Cast<Match>().Reverse;
  foreach(var m in ms)
  {
    richTextBox1.Select(m.Index, m.Length);
    richTextBox1.SelectionColor = Color.Red;
  }
}
```
しかし、「**今見ている行がすぐわかるようにしたい**」の実現がなかなか難しい。
現在のカレット位置に合わせてPictureを動かすというかなり強引な手法で実装してみたのだけど、どうも位置がうまくあわない。

##若者よWindowsFormsを捨てよ
いろいろ悩んだ挙げ句に、**Windows Forms**を捨てて**WPF(Windows Presentation Foundation)**でちょっと試してみることにしました。
**Windows Forms**の`RichTextBox`は上記のように読み込んだテキストファイルを`RichTextBox.Text`に代入して、そこに`Rtf`を編集するか、`RichTextBox`上で選択->カラー変更　を繰り返すなんて手法になります。Rtfの編集は早いのですが、かなりハードルは高いです。

**WPF**の`RichTextBox`はぜんぜん違います。
簡単に言うと、`FlowDocument`というオブジェクトを`RichTextBox.Document`に割り付けます。
`FlowDocument`オブジェクトの下に`Block`オブジェクトを起き、その`Block`オブジェクトの中にさらに下位のオブジェクトを配置するなんていう迂遠なことをやります。なお、それぞれのオブジェクト単位でしか色づけとかはできません。
というわけで、

```LoadFile.cs
void LoadFile(FlowDocument fd, string Path)
{
  var Lines = File.ReadLines(Path);
  foreach(var Line in Lines)
  {
    var p = new Paragraph();
    var ms = RegularExpressions.RegEx.Split(Line, Pattern);
    foreach(var m in ms)
    {
      var b = new Run(m);
      if (Pattern.Contains(m))
      b.Foreground = Brushes.Pink;
      p.Inlines.Add(b);
    }
  fd.Blocks.Add(p);
  }
}
```
なんて形で書きます。ここで重要なのはPatternに書く正規表現です。例えば、「OK」「完了」という文字を色付けしたければ、
`"(OK)|(完了)"`と書きます。
こうすると、`RegEx.Split()`で分割する際に分割パターンも配列に入ります。
後は、`RichTextBox`の`SelectionChanged`イベントをトリガーにして、`fd`以下のすべてのBlockオブジェクトのBackcolorを変更します。こんな感じですかね。

```CaretMoved.cs
void CaretMoved( object sender, EventArgs e )
{
  var Target = fd.CaretPosition.Paragraph;
  foreach(var b in fd.Blocks.Where(p => p!=Target))
  {
    b.Background = Brushes.White;
  }
  if (Target != null) Target.Backcolor = Brushes.LightSkyBlue; 
}
```
みたいな感じで書けば、カレットが動くたびにその行の色が反転してくれます。
SourceTree に Homebrew でインストールした Mercurial (Hg) を使わせる

# 問題設定

SourceTree は内部に Mercurial (Hg) クライアントを持っているが，バージョンが古い場合がある．そこで，外部の Mercurial (Hg) コマンドを使うように設定したい．

# 用意するもの

* Mac
* SourceTree
* Homebrew

# 手順

SourceTree, Homebrew はすでにインストールされているものとする．

## 最新版の Mercurial (Hg) をインストールする

```shell
$ brew update
$ brew install mercurial
```
## SourceTree の設定を変更する

SourceTree の Preference を開いて，Mercurial タブを開き "Use System Mercurial" ボタンを押す．

![Screen Shot 2019-04-12 at 21.39.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15782/2a5a8371-1336-da56-4547-e49b952297d7.png)

`/usr/local/Cellar/mercurial/4.9.1/lib/python2.7/site-packages/mercurial` フォルダを指定する．（バージョン番号はインストールされた Mercurial による．）


（完了）