OmniAICreator/Qiita-1.07M huggingface dataset:
有線LANを使わず無線LANからRaspberry Pi3の初期設定

##はじめに
当記事では有線LANを使わずに無線LANからRaspberry Piの初期設定をしていきます


##必要なもの


- Raspberry Pi3本体(無線LAN対応モデル)　　[今回使ったモデル](https://www.amazon.co.jp/Raspberry-%E3%83%9C%E3%83%BC%E3%83%89%EF%BC%86%E3%82%B1%E3%83%BC%E3%82%B9%E3%82%BB%E3%83%83%E3%83%88-Physical-Computing-Lab/dp/B01CSFZ4JG/ref=sr_1_11?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%83%A9%E3%82%BA%E3%83%99%E3%83%AA%E3%83%BC%E3%83%91%E3%82%A4&qid=1564775008&s=gateway&sr=8-11)
- Micro SD　8GBあれば十分みたいです 　　 今回は32GBのものを使用しました
- PC
- キーボード
- HDMIモニタとケーブル

##OS(Raspbian)をダウンロード
Raspbianを[公式サイト](https://www.raspberrypi.org/downloads/raspbian/)からPCへダウンロードする
![Raspbian.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407680/a72839b7-c8c0-1591-85c9-36d0806a3952.png)

この記事を執筆している時点で3種類のOSがありますが
【with desktop】というのはGUI付きであり
【Lite】はCUIのみの機能になります
CUIしか使わないので【Lite】をダウンロードしていきます

##SDにOSを書き込む
Windowsの場合、Win32DiskImagerやEtcherなどのソフトを使って書き込みます
私はEtcherを使いました、UIがおしゃれですね

Macの場合は特にソフトも必要なくターミナルから書き込めます
ここでは割愛させていただきます

##Raspberry Piを起動してネットワーク設定
SDをセットしモニターに接続して電源を入れます
初期のユーザー名は　pi
パスワードは　raspberry
になります

コマンドラインから

```raspberry.pi
$sudo raspi-config
```

を入力してメニュー画面を出します
![menu.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407680/f5817eca-c703-a3c6-d118-f3fe29fcc8eb.jpeg)

5番を選択して
SSHを有効(enable)にします

※ちなみにここの2番からでもwi-fiの設定はできるようですが
パスワードを暗号化したいのでここではしません

続いてネットワークの設定をしていきます


```raspberry.pi
//ディレクトリに移動
$cd /etc/wpa_supplicant

//権限を一時的に付与
$sudo chmod 666 wpa_supplicant.conf    

//以下のコマンドでルータのパスワードを暗号化してその結果をwpa_supplicant.confの中に書き込みます
//コマンド中の「""(引用符)」も必要なので気を付けてください
$sudo wpa_passphrase "ルータのSSID" "ルータのパスワード" >> /etc/wpa_supplicant/wpa_supplicant.conf

//このままだとルータのパスワードが平文でコメントアウトされているので1行削除します
$sudo vi wpa_supplicant.conf
network={
        ssid="ルータのSSID"
        #psk="ルータのパスワード"       //この行を削除
        psk=XXXXXXXXXXXXXXXXXXXXXXXXXX
}

//権限を元に戻す
$sudo chmod 644 wpa_supplicant.conf    
```

ここで再起動します

起動できたら
ifconfigコマンドでwlanに動的にIPアドレスが付与されていることを確認します
確認出来たらTeraTermなどでSSH接続できるようになります

##ターミナルソフトからSSHで接続
ここまでできたらほぼ終わったも同然ですね
まずVIMをインストールします

```raspberry.pi
$sudo apt install vim
```

現在のままではIPアドレスが固定されていないので
静的に割り当てます

```raspberry.pi
$cd /etc
$sudo vim dhcpcd.conf
```
を実行して

最下部に

```dhcpcd.conf
#static ip                                 //コメント
interface wlan0
static ip_address=192.168.xx.xx            //割り当てたいIPを記述
static routers=192.168.xx.xx               //ルータのIP
static domain_name_servers=xx.xx.xx.xx     //DNSサーバのIP
```
を追記します
ここでもう一度再起動

TeraTermなどのターミナルから割り当てたIPでアクセスできれば完了です！
パッケージも最新化しておきましょう

```raspberry.pi
$sudo apt update
$sudo apt upgrade
```
Viewでタップ領域のみを拡大したい[UIButton,UIViewなど](Swift)


あとでまとめる

# 参考記事
**・[【iOS】UIButtonのタップ領域だけを拡大する - Qiita](https://qiita.com/KokiEnomoto/items/264f26bfa92d06b1996e)**
→`view`のタップから処理実行までの流れ、コードもポイント解説付き
**・[IB上で範囲の確認ができるUIButtonのタップエリアを拡大する実装 - Qiita](https://qiita.com/KikurageChan/items/9d0e3ba82e6492e02d12)**
→上記の記事を`IBDesignable`に昇華させたもの
**・[ボタンのタップエリアを拡張する - Qiita](https://qiita.com/norizou4/items/357900fd8a267a9ccb8c)**
→上記２記事の軽いまとめ。
`ExpansionButtonクラスを作成し、そのクラスをUIViewに設定することで、そのクラスと関連を容易に持たせる
ことができます。
それぞれの機能を持ったクラスを振り分けて、それを関連させることで、重複を防ぐことができることになります`　わかりやすい。
MS Access が７月のアップデート以降、異常終了してしまう

#症状
 MS Access のフォームに TreeView や ListView などの MSCOMCTL.OCX に由来するコントロールを使用しているとき、7月のアップデート後に異常終了してしまう。

#解決
MS Officeをダウングレードする。
参考リンクの１番より、安全なバージョンは 16.0.11629.20246 なので、管理者権限付きのコマンドプロンプトをひらいて以下の様に入力する。

```
cd %programfiles%\Common Files\Microsoft Shared\ClickToRun
```
```
officec2rclient.exe /update user updatetoversion=16.0.11629.20246
```
ダウングレードに成功したら、Officeの自動更新オプションを禁止にしておく。

##参考リンク
1. [Forms with ActiveX controls cause Exception 0xc0000374 since at least 16.0.11727.20118](https://answers.microsoft.com/en-us/msoffice/forum/all/forms-with-activex-controls-cause-exception/5e22b983-a94f-454c-ad48-8dea36b9ee68)
2. [Error messages or Access crashes after you install security update MS16-004](https://docs.microsoft.com/en-us/office/troubleshoot/access/access-crashes-update-ms16-004)
3. [How to downgrade Office 365?](https://superuser.com/questions/1380385/how-to-downgrade-office-365)

#概要
ふと魔が差してしまって2019年7月にMicrosoft Office365の更新をしてしまう。しばらく更新しないようにしていたのだがその時はなぜそのような設定をしていたのか理由を忘れてしまっていた。これが悪夢の始まりだった。
Accessで作った自作のソフトを２０年ほど前から仕事に使用しているのだが、アップデート後いつものフォームを開いたところ、すぐに終了してしまう。タイミングはバラバラでフォームを開けた途端落ちることもあれば、しばらくたってからのこともある。
イベントログを確認すると ntdll.dll でヒープエラーが出ている模様。

```
障害が発生しているアプリケーション名: MSACCESS.EXE、バージョン: 16.0.11727.20244、タイム スタンプ: 0x5d173402
障害が発生しているモジュール名: ntdll.dll、バージョン: 10.0.18362.207、タイム スタンプ: 0xc5943461
例外コード: 0xc0000374
障害オフセット: 0x00000000000f9269
障害が発生しているプロセス ID: 0x1bb4
障害が発生しているアプリケーションの開始時刻: 0x01d542c10f63f087
障害が発生しているアプリケーション パス: C:\Program Files\Microsoft Office\Root\Office16\MSACCESS.EXE
障害が発生しているモジュール パス: C:\WINDOWS\SYSTEM32\ntdll.dll
レポート ID: f86ec508-ea3f-49fb-9de7-431a334c49e6
障害が発生しているパッケージの完全な名前: 
障害が発生しているパッケージに関連するアプリケーション ID: 
```

確か何年か前に似たような症状が出たのを思い出した。その時もアップデート後の不具合と原因はMSCOMCTL.OCXがらみだった。
前回は、何とかしようと思い、できなくて、知らないうちに解決されていた。今回はもっと詳しく調べて見たがネット検索でもヒットせず、もしかして自分だけの問題かもとクリーンインストールを視野にいていたら７月半ばになっていろいろとネット上に情報が出てきました。それで今回の問題は姑息的ではあるが解決にいたったのでしたが、日本語の情報は全くありませんでした。皆さんAcvtiveXコントロールはもう使用されていないのでしょうか？

今回ネットを検索しても数年前の記事ばかりで解決法も分からず、しばらくAccessは使用できずにいた。ここにきてかなり私の仕事はAccessに依存していることに気がついた。今後も十分起こりえることなのでもっと安定したシステムを構築すべきだと思わされました。

最近アップデート後が非常に不安定でOSもソフトも使用するにあたってどこか不安感を覚える。今まで使っていたMS-DOSからWin7まではこんな感情を抱くことはありませんでした。ユーザを利用してバグ修正を行うのではなく、Microsoftにはもっと検証してからアップデートを配布していただきたい。
IBDesignable , CAGradientLayer の透過が濁る[top color, bottom color](Swift)

対処法がわかりやすくまとまっていたので共有
僕の場合`IBDesignable`を使っており、稀に描画がうまくいかないなんて記事もあったりしたので
これに気づかず迷宮入りしてしまいました
**・[【Swift】CAGradientLayer の透過が濁る│RC-Code](https://rc-code.info/ios/post-305/)**
→結論としてはグラデーションする場合`clear`を使う時は**何色の`clear`にするか**も考えましょう、という内容です
docker(107)今日のdocker error: docker: Error response from daemon: error while creating mount source path 

```shell-session:macOS
$ docker run -v /Users/administrator/Downloads/work:/home/work  -p 8080:8080 -it  continuumio/anaconda3   /bin/bash 
Unable to find image 'continuumio/anaconda3:latest' locally
latest: Pulling from continuumio/anaconda3
f5d23c7fed46: Pull complete 
4ec751ea16da: Pull complete 
4849068df588: Pull complete 
Digest: sha256:9fad434f3f775ed245f0f888cda954bc93f81ffdc31d4e3e37d69283260c3f41
Status: Downloaded newer image for continuumio/anaconda3:latest
docker: Error response from daemon: error while creating mount source path '/Users/administrator/Downloads/work': mkdir /Users/administrator: permission denied.
```

今日もやらかしました。
別の機材のfolder構成と、今日の機材のfolder構成の違いを無視して入力。

フォルダ名（ユーザ名）をかえなきゃいけなかった。

# 今日のdocker error: その２

```shell-session:macOS
$ docker run -it kaizenjapan/fortran /bin/bash
Unable to find image 'kaizenjapan/fortran:latest' locally
latest: Pulling from kaizenjapan/fortran
7413c47ba209: Already exists 
0fe7e7cbb2e8: Already exists 
1d425c982345: Already exists 
344da5c95cec: Already exists 
dd8bdc34e09d: Already exists 
2f073af74e61: Extracting [==================================================>]    6.5kB/6.5kB
docker: failed to register layer: open /var/lib/docker/overlay2/608bfa669921f6094e3db45cebfca5e858597807940d5e841384b29629c97641/link: no such file or directory.
See 'docker run --help'.

$ docker run -it kaizenjapan/fortran /bin/bash
Unable to find image 'kaizenjapan/fortran:latest' locally
latest: Pulling from kaizenjapan/fortran
7413c47ba209: Already exists 
0fe7e7cbb2e8: Already exists 
1d425c982345: Already exists 
344da5c95cec: Already exists 
dd8bdc34e09d: Pull complete 
2f073af74e61: Pull complete 
Digest: sha256:795884e9c10eb7530effd09267ba4f08c5fda80ad60c190004693cc4423fcf3d
Status: Downloaded newer image for kaizenjapan/fortran:latest
```
やり直したら、それだけで通った。理由は不明。

p.s.

![頻度.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/57669c47-524f-8437-5a5e-eecf8e5b5bfd.png)
というMSGが出て、今日、１つも投稿できなくなっている。
１日で１つも新規登録してない。
### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
個人的にあとでまとめたいStackView

**・[【Swift】超便利StackViewの実践的使い方！まだAutoLayoutで消耗してるの？ - Qiita](https://qiita.com/kinopontas/items/d08f84dbb711c5acbe28)**
**・[Xcode7 の新機能「StackView」を使うと、Storyboard の AutoLayout を簡単に設定できる - Qiita](https://qiita.com/merrill/items/04be7d2222cd70dd6408)**
**・[StackViewを賢く使ってらくちんAutoLayout - Qiita](https://qiita.com/yucovin/items/ff58fcbd60ca81de77cb)**
**・[ScrollViewとStackViewを使った簡単でレイアウト変更に強い実装方法 - Qiita](https://qiita.com/Masataka-n/items/c19456f172627359d0d8)**
→`ScrollView`とセット
**・[遅ればせながら UIStackView 入門 - Qiita](https://qiita.com/tasanobu/items/6908c956b758547ccf6c)**
→パラメータの解説豊富
**・[[iOS 9] UIStackViewを知らない人向けの基礎知識 ｜ DevelopersIO](https://dev.classmethod.jp/smartphone/iphone/ios9_uistackview/)**
→縦横軸、SubViewsの変更方法、入れ子のやり方など

#### 制約
**・[今更だけど正しく身につけよう『Content Hugging Priority』と『Content Compression Resistance Priority』 - Takahiro Octopress Blog](http://grandbig.github.io/blog/2018/08/04/content-hugging-priority/)**
**・[制約は完璧なはずなのに・・・実行するとコンソールに警告が表示されるとき - Qiita](https://qiita.com/jinyogi/items/d40f1c2a9a8a9c653960)**
【Nuxt.js】Docker開発環境を導入する

既存Nuxtプロジェクトでの開発でDockerを使用していなかったので、使用したいなーって思ってついでに記事も書きました😃

# Docker開発環境への導入手順

1. Dockerfileとdocker-compose.yml作成
2. docker-compose build
3. 起動確認

## 1. Dockerfileとdocker-compose.yml作成

まずは、Dockerを導入したいプロジェクト直下に移動
移動したらこのコマンドでDockerfileとdocker-compose.ymlを作成

```bash:
$ touch Dockerfile docker-compose.yml
```

作成できたら各ファイルに内容を書いていきます

```js:Dockerfile
FROM node:8-alpine // 1

WORKDIR /app

RUN apk update \
  && apk --no-chache add vim \
  && yarn global add firebase-tools jest \
  && yarn install // 2
```

vimを使うのでadd vimを記述してますが、vimを使用しない人は削除してください

1. イメージは軽量にしたいので8-alpineを使います
2. alpineはapkコマンドを使用してupdateやadd(yarnでいうinstall)を行います

> alpineについてはこちらの記事がわかりやすかったです。--no-chacheコマンドなどの説明が書かれています。
 [Dockerやる前のAlpine Linux](https://yoshinorin.net/2016/10/01/alpine-linux/)

```js:docker-compose.yml
version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 3000:3000
    volumes:
      - .:/app
    tty: true
```

## 2. docker-compose build

Dockerfileとdocker-compose.ymlができたら次はbuildします

```bash:
$ docker-compose build
```

## 3. 起動確認

正常にビルドできたら、コンテナを立ち上げ、コンテナ内に入ってNuxtを起動してみましょう

まずはコンテナを立ち上げます

```bash:
$ docker-compose up -d
```

コンテナ内に入ります

```bash:
$ docker-compose exec app /bin/ash
```

npm install後、npm run devでNuxtを起動してみます

```
/app # npm install
/app # npm run dev 
```

これで起動ができました！

Nuxtのビルドが終わり次第 http://localhost:3000/ に表示されるはずです！
ros1_bridge経由でrvizを使う

自作ナビゲーションパッケージ(https://github.com/ymd-stella/stella_nav )をROS2対応させようとしていて、ros2/rvizについて困ったのでその内容について初投稿です。

問題になったのは[laser scans not showing when fixed frame is not equal to the laser scans frame id #332](https://github.com/ros2/rviz/issues/332) で、tfによる座標変換が必要なセンサデータを描画できないというものです。
ros2/rvizの実装を待ちきれなかったので、[ros1_bridge](https://github.com/ros2/ros1_bridge)経由でrvizを使ってみました。
環境を壊したくないのでdocker上で作業しています。

作ったもの： https://github.com/ymd-stella/ros1_bridge_docker

（19/08/14 追記）
https://github.com/ros2/rviz/pull/375 のマージが完了したので上記の問題は最新のソースを使えば（おそらく）解決します。
（19/08/19 追記）
最新版を使ってみましたが、解決しておらず、まだ同じエラーが出るようです。

## 依存パッケージのインストール
ROS関係のパッケージとしては以下を入れました。

```
ros-dashing-desktop
python3-colcon-common-extensions
ros-dashing-tf2
ros-dashing-sensor-msgs
ros-dashing-rqt-plot
ros-melodic-ros-base
ros-melodic-rviz
```

## ビルド
ros1_bridgeはlaunch_testingなどに依存が合って、何故かaptから入れたros-dashing-launchには含まれていなかったため、https://github.com/ros2/launch をros2_ws/srcに追加する必要がありました。

以下ビルド手順です。

```
. /opt/ros/dashing/setup.bash
colcon build --symlink-install --packages-skip ros1_bridge
. /opt/ros/melodic/setup.bash
. install/setup.bash
colcon build --packages-select ros1_bridge --cmake-force-configure
```

## 実行
環境変数の設定が必要で手順が煩雑だったのてtmux用の同時実行スクリプトを書きました。

```rviz.sh
tmux split-window "source /opt/ros/melodic/setup.bash && \
     roscore"
tmux split-window "source ros2_ws/install/setup.bash && \
     export ROS_MASTER_URI=http://localhost:11311 && \
     ros2 run ros1_bridge dynamic_bridge --bridge-all-2to1-topics"
tmux select-layout even-vertical
source /opt/ros/melodic/setup.bash
rviz
```

## rvizにsensor_msgs/LaserScanのデータを描画
gazeboのセンサデータ(sensor_msgs/LaserScan)とTFを描画してみました。

![描画](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472745/7029c005-8bd8-da52-374a-06233051c255.png)

## おわりに
https://github.com/ros2/rviz/pull/375 のマージが完了すればros2/rvizも使えそうですが、しばらくはros1_bridge経由でrvizを使うのが良さそうです。
Google Cloud Platform 無料トライアルの利用規約を真面目に読んでみました。

#Google Cloud Platform 無料トライアルの利用規約を真面目に読んでみました。
いつも何となく読み飛ばしてしまう為、英語学習も兼ねています。分からなかった単語をメモする事で、英文をスムーズに理解できるようになることも期待しています。
---
>Supplemental Terms and Conditions For Google Cloud Platform Free Trial
>>グーグルクラウドプラットフォーム無料体験の為の補足条項と条件

>単語：
>>Supplemental：補足
>>Supplemental Term：補足条項
>>Free Trial：無料体験

>These Supplemental Terms and Conditions for Google Cloud Platform Free Tria("Free Trial Terms and Conditions") are an addendum to the Google Cloud Platform License Agreement, and apply to Customer's participation in the Google Cloud Platform Free Trial("Free Trial").
>>以下のグーグルクラウドプラットフォーム無料体験についての補足条項と条件はグーグルクラウドプラットフォームライセンスへの同意の追加であり、お客様に無料体験の参加を宛がいます。

>単語：
>>addendum：追加、補遺、付録
>>agree：同意する
>>apply to：宛がう
>>participation：参加、関与
30日間OS自作(helloos)をVirtualBoxでやってみた

<h2>目的</h2>
『30日でできる!OS自作入門』のhelloos.imgをvirtualBoxで実行する流れを記述してます。

<h2>環境</h2>
・widows10
・Bz(バイナリエディタ)

<h2>ゴール</h2>
VirtualBoxで「helloWorld」を表示する。

<h2>前準備</h2>
・VirtualBoxのインストール
https://www.virtualbox.org/wiki/Downloads

・バイナリエディタの導入
https://helpsupport.blog.fc2.com/blog-entry-47.html

<h2>流れ</h2>
<h3>1,バイナリエディタhelloos.imgを作成する。</h3>

<img width="576" alt="バイナリエディタ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/17513fc4-1287-6a0d-8737-44df48beb356.png">

<h3>2,仮想マシンを新規作成</h3>

<img width="576" alt="virtualBox新規.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/ac6a7c5d-3bfe-b8ef-9945-e6c031b723ad.png">
virtualBoxを起動して、”新規”をクリック

<img width="576" alt="virtualBox2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/b97bf7a2-762d-1e59-a62c-62ac1b04fa10.png">
適当な名前を入れて、仮想マシンを作成

<img width="576" alt="virtualBox3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/124a4f3b-3491-13b7-3fb2-7c8c66c4245c.png">
画像の内容でチェックを入れ、作成

<img width="576" alt="virtualBox4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/bf62b889-4515-604c-f23b-61903ea583b4.png">
仮想マシン作成完了！！

<h3>3,作成した仮想マシンにhelloos.imgをセット</h3>

<img width="576" alt="virtualBox4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/598bf0f7-0608-d362-871a-ec96a06cf592.png">
「設定」をクリック

<img width="632" alt="画像5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/08d9313e-2d05-e116-880b-e50d2743fc49.png">
「ストレージ」をクリック

<img width="634" alt="画像6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/aba5ea13-8dc7-19d3-aacc-1067a28007a1.png">
画像下記の4つのボタンの一番左「新しいストレージコントローラーを追加します」
をクリックし、「フロッピーコントローラーを追加」をクリック

<img width="635" alt="画像7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/652021d8-d98d-f287-963c-056fb2bdaa47.png">
画像のようにコントローラが作成されればOK

<img width="634" alt="画像8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/745adc61-5692-ec67-6673-05c5c7bb1751.png">
「コントローラー: Floppy」右の「フロッピードライブを追加」ボタンをクリックし、
「ディスクを選択」をクリック

<img width="576" alt="画像9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/843aecca-d7c2-67fb-f8b8-b60584b19b87.png">
「追加」ボタンでローカルの「helloos.img」を選択

<img width="883" alt="画像10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/9e87e087-95da-115f-f01c-0f3d7aac1259.png">

最後に「OK」をクリック

<h3>4,仮想マシンを起動してhelloos.imgを実行</h3>

<img width="576" alt="画像11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/498b7edf-e0cc-5e78-6069-01f0eeca95a0.png">
「起動」ボタンをクリック

<img width="576" alt="画像12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131238/3d8df881-f9b8-6be3-6e12-9edfa2a53361.png">
「hello, world」が表示されればOK


参考になれば幸いです！

<h4>参照元</h4>
https://blog.binfish.jp/os/hello-world/
git subtree pushをした際、どんどん重くなってしまうときの対処法

## 問題
メインの開発ブランチから`git subtree push `コマンドで、リポジトリの一部を別のブランチへと切り出したとき、
処理内で、開発ブランチのコミットを全部クロールするようになっています。

開発が続くとどんどんコミットが増えていくので、コマンドの実行が重くなっていきます（泣）

```
>> git subtree push --prefix _site/ origin master
git push using:  engine-remote master
-n 1/    1193 (0) 
-n 2/    1193 (1) 
-n 3/    1193 (2)
...
-n 1193/    1193 (1152)　<-これがどんどん増える。。
Counting objects: 176, done.
...
```

## 経緯
GitHub PagesでJekyllで作成したサイトを表示しています。

一番簡単なのは、Jekyllプロジェクトをそのままリポジトリに突っ込む方法です。

ただ、今回はGitHub Pages側では対応していないプラグインを使いたかったので、
`jekyll build`で生成した静的サイト（`_site`ディレクトリ以下）をリポジトリに渡していました。

そのままリポジトリ内で`jekyll build`しただけではプロジェクトのルートに`_site`が生成されてしまい、GitHub Pages側に参照させることができません。

`_site`だけgitの管理下に置くという方法もありますが、個人的にプロジェクトごと管理したかったので、違う方法を取りました。

参考 ↓↓↓↓
[Github pagesで意地でもサブディレクトリをルートにする](https://matsuuratomoya.com/blog/2016-05-07/githubpage-subdirectory/)
<br>

現在はプロジェクトに対して、`develop`ブランチ（メイン）、`master`ブランチ（`_site`ディレクトリのみ、コイツが表示される）で管理しています。

更新後`develop`ブランチでコミットし、

`>> git subtree push --prefix _site/ origin master`

でGitHub Pagesが参照している`master`ブランチに`_site`の中身だけpushしています。

しかし、この状態で開発をしていると、前述の通りどんどん処理が重くなっていきます。。。

<a id="ans"></a>
## 対処法


`>> git subtree push --prefix _site/ origin master`

を以下に置き換えます。

`>> git subtree split --prefix _site/ --rejoin --branch subtree_branch`
`>> git push origin subtree_branch:master`

### なにしてるの？
`git subtree push`では、`git subtree split`と`git push`をやってくれるのですが、
`subtree split`を実行時に、コミットをクロールしています。

このクロール対象は、`git subtree`を実行した際に付くコミットメッセージの内容から判断されます。

そのコミットメッセージが無いと、すべてのコミットをクロールしてしまいます。

これを避けるため、`subtree split`実行時に`--rejoin`オプションで、コミットメッセージを付けさせる事により、クロール対象を最新のコミットのみに絞っています。

なお`subtree_branch`は、`git subtree push`の処理を分けて書くために作成している一時的なブランチです。
RaspberryPi 3B+(UbuntuMate16.04LTS)でintel Realsense D435を動かした際の備忘録

# 目的
RaspberryPi 3B+（UbuntuMate16.04LTS）でintel Realsense D435を動かした際の備忘録です

# 準備
[RaspberryPi 3B+](https://www.amazon.co.jp/dp/B07R7M7N3P/ref=cm_sw_r_tw_dp_U_x_UUXmDbDMTYSA8)

RaspberryPi 3B+には UbuntuMate16.04LTS をインストールします。
> [Raspberry Pi 3B+(Ubuntu Mate 16.04LTS)にROS kinetic をインストールしてturtlesimを動かす](https://qiita.com/seigot/items/ce88174c1123400fc2a4)

[intel Realsense D435](https://www.amazon.co.jp/dp/B07BLS5477/ref=cm_sw_r_tw_dp_U_x_STXmDb8PW4CAJ)

# librealsense SDK インストール

下記を参考にインストールします。
（ただしSDK v2.17.0であることに注意）

> [Raspberry Pi 3でRealSenseを使う](https://www.rt-shop.jp/blog/archives/11223)

```
$ sudo apt update && sudo apt upgrade
$ sudo apt install git libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev libglfw3-dev cmake
$ sudo apt install dphys-swapfile
```

```
$ mkdir ~/tmp
$ cd ~/tmp
$ wget https://github.com/IntelRealSense/librealsense/archive/v2.17.0.zip
$ unzip v2.17.0.zip
$ cd librealsense-2.17.0/
$ sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ 
$ sudo udevadm control --reload-rules && udevadm trigger
```

```
$ mkdir build
$ cd build
$ cmake ../ -DCMAKE_BUILD_TYPE=Release
$ sudo make uninstall && make clean && make && sudo make install
```

その後、下記の通りOpenGLを有効にします。
> ビルドが完了したら、OpenGLを有効にします。raspi-configを使って有効にします。
> まず、raspi-configを起動します。
> 
> sudo raspi-config
> 起動したら、7 Advanced Options → A7 GL Driverを選択していきます。
> そのあと、G2 GL (Fake KMS)を選択して再起動をします。
> 
> 再起動したらRealSenseを接続します。

# テスト

realsense-viewerコマンドを使い、intel Realsense D435の画像、距離データを表示できればOK

```
realsense-viewer
```


# 備考

librealsense SDK 最新版をインストールしたい場合は下記を参考にすれば良さそう。

[librealsense distribution_linux](https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md)
[librealsense installation](https://github.com/IntelRealSense/librealsense/blob/development/doc/installation.md)

```rb:install-librealsenseSDK
$ git clone https://github.com/IntelRealSense/librealsense
$ cd librealsense
$ mkdir build
$ cd build
$ cmake ../ -DCMAKE_BUILD_TYPE=Release
$ sudo make uninstall && make clean && make && sudo make install
```
# 参考
[Raspberry Pi 3でRealSenseを使う](https://www.rt-shop.jp/blog/archives/11223)
[Realsense D435について](https://qiita.com/furushchev/items/c003f19563b1ca00bafb)
[RealSense D435をROSで使う]
(https://demura.net/misc/14263.html)
[librealsense distribution_linux](https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md)
[librealsense installation](https://github.com/IntelRealSense/librealsense/blob/development/doc/installation.md)
[IntelRealSense librealsense](https://github.com/IntelRealSense/librealsense)
[Laravel5.8]Controller上でデータ取得後、新しくプロパティを追加する

#Controller上でプロパティを追加する

Controller上でデータベースから取得したデータに、新しくプロパティを追加できることに気がつきました。
`$object->新しいプロパティ名=〇〇`
で新たなプロパティを追加できます。

尚その場限りのもので、これだけではプロパティを保存したり、テーブルのカラムを書き換えたりすることができないようです。

#前提
- Laravel5.8を使用。
- twitterのようなアプリを作っています。投稿を一覧表示する、会員登録、ログイン、つぶやきの投稿、いいねが可能です。

#コード
以下はアプリのcontrollerの一部を抜粋したものです。
一覧表示するための投稿データを取得し、自分が投稿に対していいね押していた場合プロパティを追加します。

``` PostController.php
    public function index()
    {
      $posts = Post::with('likes')->latest()->paginate(20);
      $user_id = Auth::id();
      if($user_id){
        foreach($posts as $post){
          foreach($post->likes as $like){
            if($like->user_id===$user_id){
              //新しく追加するプロパティ
              $post->liked_id = $like->id;
            }
          }
        }
      }
      return view('index')->with('posts',$posts);
    }
```

dd($post)で、$postのattributesを確認するとプロパティが追加されているのがわかります。

プロパティ追加前

```
attributes: array:5 [▼
    "id" => 18
    "created_at" => "2005-11-09 09:04:07"
    "updated_at" => "1999-11-01 17:05:26"
    "body" => "Libero nihil eum nam suscipit."
    "user_id" => 4
  ]
```

プロパティ追加後

```
attributes: array:6 [▼
    "id" => 18
    "created_at" => "2005-11-09 09:04:07"
    "updated_at" => "1999-11-01 17:05:26"
    "body" => "Libero nihil eum nam suscipit."
    "user_id" => 4
    "liked_id" => 6
```

新しいプロパティは既存のプロパティと同じように、`$post->propaty`で使うことができます。
アプリでは$post->liked_idが存在するか否かで画面の表示を変えたり、リンクを切り替えたりすることに使っています。
これで自分が投稿にいいねを押していたとき、表示を変える機能を実装することができました。

<img width="1176" alt="スクリーンショット 2019-08-03 17.57.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266753/c1fee044-8a4c-5492-5ebf-653e58621282.png">


またEagerLoadと組み合わせてクエリを削減したり、ユーザーの属性に合わせて動的にプロパティを追加、変更できると思います。ちょっとだけ便利かもしれません。




#参考
[【Laravel】EagerLoadまとめ。動的プロパティとEloquentリレーションの違いなど]
(https://qiita.com/katsunory/items/d4757b8d9ac099a5291e)
[Laravel 5.7で基本的なCRUDを作る]
(https://qiita.com/sutara79/items/ef30fcdfb7afcb2188ea)
(こちらを参考にアプリを作らせていただきました。ありがとうございます)
仕事でチャットを使うときにまず作るチャンネルN選

# 職場にチャット環境を導入したい
チャット、便利ですよね。なぜ便利なのか、はここでは説明しません。

主に、私が次にチャット環境を整備したときにメンバに読んでもらう用です。

もしも、これを読んで「チャットを試したい。けどSlackというのはクラウドサービスだから、ローカルでチャットできないかな…」という人がいたら宣伝です。（仮想マシンの中にチャットを立てる手順です。）
[Windowsで(VMの中に)RocketChatを立てたい](https://qiita.com/yamatok/items/d23982e045ca10a41ca1)

# 書くこと
私がチャット環境を構築するときに、作るチャンネルとその使い方

# 前提
想定しているツールは、Slack、またはRocketChatとします。
命名例の紹介のため、仮にここに"aaa"PJがあり、その中に"app1"チームがあるとします。他に"app2"チームがあるとします。

# 必ず作るチャンネル
PJやチームが小規模であれば、以下で紹介するチャンネルの役割を１つのチャンネルにまとめるのはアリです。
ただ、チャットの特性上「すぐ会話が流れる」ので、なるべく分けましょう。

## 1. 全体連絡・情報共有用チャンネル（鍵付き(private)チャンネル）
* 作成単位: PJ全体・チーム単位
* 参加メンバ: PJまたはチーム全員
* 命名例：aaa_general, app1_team_general

PJやTeamの重要な連絡事項や、決定事項等の共有を行うチャンネルです。
「チャンネル参加メンバは必ずこのチャンネルへの投稿内容を確認する」ことが必要です。
PJで１つのチャット環境なら、デフォルトで用意される公開チャンネル(general)がaaa_generalの代わりになります。

このチャンネルの注意事項は、「雑談をここでしない」「議論もしない。議論になり始めたら、なるべく議論する人だけが参加してる狭いチャンネルに移動して議論し、結論が出たらaaa_generalに書く」。
とにかく一番多くの人に「必ず確認すること」を要求しているので、余計な情報によって、本当に重要な情報が埋もれないようにする必要があります。

## 2. 業務連絡チャンネル（鍵付き(private)チャンネル）
* 作成単位: チーム単位
* 参加メンバ: チーム全員
* 命名例: app1_team_業務連絡, app2_team

日常の業務連絡や、議論・情報共有を行うチャンネルです。
「話しかけたい相手がいるなら、必ずメンションをつける。メンションがなければ無視されても仕方がない」場所です。
一番よく使うチャンネルですが、いろいろな話題で混ざるので、「同じ話題が多いな〜」と思った人が早い段階で、別チャンネルを作るように働きかけてください。口には出しませんが皆喜びます。

## 3. チーム間連絡チャンネル（公開(public)チャンネル）
* 作成単位: チーム単位
* 参加メンバ: 窓口役は参加必須＆そのチームに用がある別チームの人
* 命名例: app1_team_com

「自分のチーム名が入っているチャンネルが、そのチームの問い合わせ窓口（例:メーリングリスト）」のイメージです。
例えば"app1"チームに用(依頼・質問)がある"app2"チームの人は、app1_team_comに参加して発言します。（メンションは任意）
「窓口役を明確にし、窓口役は、そのチャンネルの全てに、"着信したこと"や"回答”を返信する」ことが求められます。

# よく作るチャンネル
必須ではないが、よく作るチャンネルを紹介します。業務連絡チャンネルの流れを穏やかにするためにも、状況に応じて作成してください。

## 4. 勤怠連絡チャンネル
* 作成単位: チーム
* 参加メンバ: チーム全員
* 命名例: app1_team_attendance, app2_team_勤怠連絡

「遅刻や休暇連絡をする」チャンネルです。
「遅刻します、半までには着きます」「体調不良で休みます。」など。
"そういえばあの人いないけど…？"というとき、勤怠連絡チャンネルがあるとすごく便利です。

## 5. レビュー依頼チャンネル
* 作成単位: チーム
* 参加メンバ: チーム全員
* 命名例: app1_team_review

「レビューを依頼する。レビュー完了報告・指摘内容を返信する」チャンネルです。
PJの時期によっては"レビューお願いします”でチャンネルが流れて ~~鬱陶しい~~ 困ったことになります。
試しに作ってみると、意外と好評なチャンネルのうちの１つです。

## 6. 〇〇工程など期間限定チャンネル
* 作成単位: 期間ごと
* 参加メンバ: チーム問わず関係者
* 命名例: it_Asubsys_com, st_scenario_com, app1_team_Asubsys

「期間限定で、その関係者が集う」チャンネルです。
例えば、複数のサブシステムから成るシステムを作るPJで、"Aサブシステム"と"Bサブシステム"でチーム内でも人員が分かれて作業する場合、１チーム内でも全く別の話題が交差するので、別チャンネルに分けたほうがいいことがあります。
あと、工程によっては他チームと合流したりするので、チームにこだわらないチャンネルがあると便利だったりします。
また、のちのち会話を遡りたいとき、記録をまとめるという点でも意外と便利です。

## 7. 雑談チャンネル
* 作成単位: 任意
* 参加メンバ: 任意
* 命名例: app1_team_random, app2_team_lunch

「業務外の連絡をする」チャンネルです。
"お昼ご飯、2Fの〇〇屋にするけど来る人〜？", "雨降り始めた"などです。

# 最後に
チャンネルの運用は文化や人にもよります。正解はありません。
ただ、運用がごたごたすると、使ってくれる人が減っちゃうので、想いのある人が先導できるとよいですね。

他に、よい案があれば、教えてください！

では、よいチャットライフを！
「晶子と啄木」平板な批評を超えるための自然言語処理と社会評価法

国文学　解釈と鑑賞 1994年2月号 第５９巻２号　753 特集　与謝野晶子の世界
![1564584504153090.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/00ae0cca-9d58-2b67-29de-ac475b3a1382.jpeg)
p.34
晶子と啄木 目良卓
>「みだれ髪」は当時の若い文学者・文学青年達に多大の影響を与えた。啄木もその一人

与謝野晶子と石川啄木は、自分が十歳から十八歳までの間に影響を受けた文学者の唯二人。
これまで、与謝野晶子の短歌と石川啄木の詩は拝見しても、関係について調べたことはなかった。

自分が感じていたことが何かが分かった気がした。

p.35「啄木と晶子の差異」

p.38
>啄木も晶子を個人的には慕いつつも、芸術的には晶子離れを促進していったのである。

どちらも、焦点が定まっていない。

根拠を示していない。

p.36 「啄木は明治四十一年七月十日の日記に「... 晶子女子の作は巧みであるが、まるで生気なし」記し」

これは、この時点での評価である。
離れて行ったわけではない。
お互いのその時点での興味が違うだけである。

離れるとは、何か共同作業をしていて、その共同作業を辞めて、違う方向性の共同作業を始めるような現象を指す。
草の夢　1922(大正１１)年　日本評論社
p.95 「草の夢　風景の肉身化」で　佐伯裕子は、
p.97 「突然に旅行歌を多作するなど、同時代のリアリズム短歌への接近と動揺を見せる晶子は、アララギの調べや技巧の部分ではなく、表現の抑制の方にばかりこだわりを持っていったようだ。それは晶子の作り方には向かなかったと思う。」

すでに啄木がなくなって１０年。

流星の道　1924(大正１３)年
p.98 「流星の道　短い晩年意識」佐伯裕子
p.99 「「短命の予感される私」という自覚の在り方が、晶子を＜晩年の長き＞を思う苦痛から解き放った。もっと弓なりになって＜晩年＞と戦っていたらとおもわないではない。冷えびえと安堵に満ちた作風の退屈さには＜死の匂い＞も確かにまつわりついている。」

人としての活躍と、短歌の作品の方向性は必ずしも同一とは限らない。

短歌作品の文字面と、短歌以外の記録での発言をもって、うんぬん言うのは文学者の遊びでしかない。その時代に、その人が、どのように生きようとしていて、その言語表現が、散文と韻文にどのように分布し、そのことが、その人の価値をどのように高めたか、それが周りの人にどのように影響を与えたか、社会にどのような影響を与えたかを評価しないのは怠慢だろう。

そのためには、散文の言語処理による評価と、韻文の言語処理による評価と、社会事象の評価という、必ずしも直交するとは限らない三つの軸で横顔(profile)してみるとよいだろう。

散文の処理は機械学習によって精度があがっているが、韻文の評価はまだ進んでいない。
歴史的な社会事象の評価は、これからである。

文字鏡フォントによって、すべての古典が電子化できるようになった現在、文学者がやるべきことはたくさんある。文字鏡フォントによって、諸橋大漢和辞典の重複などが指摘されたように、従来の文学的定説は電子化によってかなり変化することが想定できる。これは、生物の分類が遺伝子解析によって細部はかなりの入れ替えが起こっていることとも相似である可能性がある。

学術上の雑音として無視されないような意味のある議論を文学も始める時期だろう。

#時代と速度
与謝野晶子　1878年（明治11年）12月7日 - 1942年（昭和17年）5月29日）
https://ja.wikipedia.org/wiki/与謝野晶子
1901 みだれ髪 鳳晶子

石川啄木　1886年（明治19年）2月20日 - 1912年（明治45年）4月13日）
https://ja.wikipedia.org/wiki/石川啄木
1910 一握の砂

年齢が７歳離れており、出版が９年離れている。
世代の違いというほどではない。

なくなったのが石川啄木が早く、26歳である。
石川啄木が一握の砂を出した時、与謝野晶子はすでに31歳である。



##歴史

琉球処分  　1879年 4月 4日 
岐阜事件　　1882年 4月 6日　　板垣退助遭難
名古屋事件　1884年 8月　　　　政府転覆未遂
東海道本線　1889年 7月1日 　　全通（新橋 - 神戸間）
大津事件   1891年 5月11日  　ロシア帝国皇太子・ニコライ
ハワイ共和国1894年 7月4日
日清戦争　　1894年 7月25日 - 1895年 4月17日
台湾統治　　1895年 4月17日 - 1945年10月25日
足尾鉱毒事件1901年12月10日    田中正造直訴
日露戦争　　1904年 2月 8日 - 1905年 9月5日
大逆事件　　1910年 5月25日 　　幸徳秋水
韓国併合　　1910年 8月29日 - 1945年 9月9日
中華民国    1912年 1月 1日 孫文@南京
関東大震災　1923年 9月1日11時58分32秒


#社会評価
##人口
社会を評価するには、マルサスの人口論を引用するまでもなく、人口分布・増減が基本である。
社会の構成要素が人だからである。人の定量的な値は、その時点での人口と年齢分布である。
##食料品生産量
エンゲル係数のように、人と密接にむすびつく、社会現象は、食料品の生産量である。
飢餓は人類にとって重要な事件であり、その原因である干ばつなどの自然現象も記録しておくとよい。


##食料品以外生産量

木器時代であれば木、石器時代であれば石、鉄器時代であれば鉄の生産量は重要である。
現代のように鉄器時代の終わりだと、木、石、鉄、以外に石油が大事かもしれない。

##貨幣価値流通

金本位制の場合には金、金本位制崩壊後は、貨幣流通量と速度などを測定する。


# 参考文献(reference)

青山語文第十号 『みだれ髪』の与えたもの,  新間進一, 1980 
http://www.cl.aoyama.ac.jp/japanese/thesis/index.html#1

## 自己参照

IT分野から与謝野晶子を学ぶには

https://qiita.com/kaizen_nagoya/items/aa25d827e4667ccf168b

人生で影響を受けた本100冊。

https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

#### Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
【プレゼン】聞き手のための権利宣言


# はじめに
講師時代の上司から[この本](https://www.amazon.co.jp/dp/4492555277/ref=cm_sw_em_r_mt_dp_U_9nprDbEBGJM60)のP18,19をしっかり読んでおけと言われた時のもの。
全部はできておりませんが、自分が開催する会議や発表するときは大変参考になってます。
当時は書き留めておくことしていなかったですが、SEになってとても意識する場面が多いので、
まとめておこうと思います。

# 聞き手の人の権利
本には8つと書いてありました、以下にその内容と特に意識してるところを書き留めてしておきます。

## 1. 目的
  * 1-1. プレゼンテーションの結果として**自分に何を行って欲しいか、何を考えて欲しいか**を知る権利
    * 自分は、結果どうなるかを考え提示することを意識してます。
  * 1-2. なぜ自分の関与が必要なのかという理由を知る権利
    * 自分は、なぜこの話をするのかを提示するようにします。
  * 1-3. 自分がプレゼンテーションを懸命に**聞いている時間に相当する価値を受け取る**権利
    * 自分は、この講義をすることでどういうことが身につくのか何をすることができるのかを提示します。

## 2. 尊敬
  * 2-1. 知的な内容に貢献する権利、そして**成果の割り当てを受ける権利**
  * 2-2. 瞬時の判断に迫られることなく、**考える時間を与えてもらう権利**
  * 2-3. へりくだった話し方や見下した話し方をされることなく、同時に、**自分の経験や知性や知識に敬意を払った話し方をしてもらう権利**
  * 2-4. 自分の質問に答えられない場合には**その旨を正直に行ってもらう権利**
  * 2-5.退出することで不満を表し、熟慮の乏しいプレゼンテーションに対しては、退出をする権利(普通しないけど) 

## 3. タイミング
  * 3-1. プレゼンテーションにかかる**時間を前もって知らせてもらう権利**
  * 3-2. 忙しい日程を折り合わせて出席するのだから、**時間通りに開始し時間通りに終了してもらう権利**
時々休憩時間をもらう権利。生理的要求(お手洗いとか)のばかりとは限らない。

## 4. 内容
  * 4-1. 自分がどの方向に向かうのか、プレゼンテーションがどんな風に進行していくのかをあらかじめ知ってもらう権利
  * 4-2. 未解決の懸念事項は何か、話し手の立場に対する理論的根拠、またこの理論を支える事実を知る権利
  * 4-3. 問題を何を使ってどうやって解決するかを順序立てて説明をする。
重要な情報を先に知る権利

## 5. 資料
* 5-1. 会場のどこを座ってようとも、**虫眼鏡なしでも示される資料の文字が全て読める権利**
  - **これすごく大事！**
* 5-2. **複雑な資料については説明を受ける権利**
  - 特に専門用語はちゃんとかみ砕いて説明できるように工夫をしておく。
  
## 6. フレキシビリティ
* 6-1. ディスカッションのためにプレゼンテーションを中断し、**全員が共通の理解に達するまで補足する権利**
   * 誰にでも理解できるよう言い回しを変えて説明することが大事です。
* 6-2. 「後ほど説明を」と延期されるのではなく、**いつでも質問でき、質問をされた時に答えてもらう権利**

## 7. プレゼンテーションの実施
 * 7-1. 部屋の後ろにいてもプレゼンターの話を聞くことができる権利
 * 7-2. 派手な身振り手振りに気を散らされることなく、**プレゼンテーションの内容をよく理解する権利**
 * 7-3.プレゼンターの後頭部ばかりでなく顔も見る権利
   * 自身持って前をみて話す！俺様は神だ！というくらいの自身で(ほんとに俺様が神だ！とか言ったらヒンシュク食らうのでやめてね)
 * 7-4. 言いたいことを述べる上で効果を上げ、**聞き手の緊張を解きほぐし、両者が緊密な関係を作る上で役立つ場合に限り、ユーモアのセンスを楽しませてもらう権利**
   * 受講者も緊張します。できるだけアイスブレイクなどを入れるといいですね。

## 8. エンディング 
* 8-1. 同意に達した**事項や次にくる自体を名してもらう権利**
  * 次回何をするのかを提示する。
* 8-2. 何か意義あることを**成し遂げたいという実感をえる権利**
  * 振り返りやまとめをすること

# まとめ
書籍の内容はドギヅイ(つまらなかったら退出する..とか)ことも書いてあるのですが、とっても参考になるので自分の解釈でそしゃくしてお役に立てると思います。

# 参考書籍
[マッキンゼー流 プレゼンテーションの技術](https://www.amazon.co.jp/dp/4492555277/ref=cm_sw_em_r_mt_dp_U_9nprDbEBGJM60)
1remとfont-size: 62.5%について

```
html {
  font-size: 100%;
}
```
`100% = 16px = 1rem`なので、これすなわち

```
html {
  font-size: 16px;
}
```
`●rem`は`htmlで指定されたフォントサイズの●倍`なので、
この状態での`1rem`は、
`16px * 1.0`
つまり、`1rem = 16px`

ここで、

```
html {
  font-size: 62.5%;
}
```
とすると、`100% = 16px = 1rem`なので、これすなわち


```
html {
  font-size: 10px;
}
```

だって、`16px * 0.625 = 10px`だから。

繰り返すけど、
`●rem`は`htmlで指定されたフォントサイズの●倍`なので、
この状態での`1rem`は、
`10px * 1.0`
つまり、`1rem = 10px`

<br>

ではこの状態での`1.2rem`は？
`10px * 1.2`
つまり、`1.2rem = 12px`


# 結論
```
html {
  font-size: 62.5%;
}
```
を指定するだけで、

<b>`●rem = (● * 10)px`</b>
となり、<b>remの係数を10倍すればpxの数値となって計算が簡単になる</b>ことがわかった。
kerasを学ぶ（ model = Model(inputs=inputs, outputs=predictions) ）

#目的
kerasのサイトの以下のコードで、

　***Model(inputs=inputs, outputs=predictions)***

のような、inとoutの定義で、なぜ、複数のレイヤをもつmodelが構成できるのかがわからなかったので調べた。

```
from keras.layers import Input, Dense
from keras.models import Model

# This returns a tensor
inputs = Input(shape=(784,))

# a layer instance is callable on a tensor, and returns a tensor
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)

# This creates a model that includes
# the Input layer and three Dense layers
model = Model(inputs=inputs, outputs=predictions)コード
```

#調べた結果

以下あたりで、コツコツ接続しているよう。
\site-packages\keras\engine\network.py

```
def _map_graph_network(inputs, outputs):
    """Validates a network's topology and gather its layers and nodes.

    # Arguments
        inputs: List of input tensors.
        outputs: List of outputs tensors.
```

#まとめ
ネットワーク構造をなんとかするようなコードに慣れていないので、
どうなっているか、まったく、わからなかった。
個々のTensorの属性と関係は、いまだに、厳密には全くわかっていないが、
**コツコツつないでいる**という想像です。
それらしい動きはしていました。

#今後
この程度の調査が、今後の役にたつかは不明。
このあたりのコードは、あまり、バシバシ読めませぬ。
コメントなどあれば、お願いします。:candy:

#関連
[Grad-CAMで、湖畔と谷とマッシュドポテト、構成と質感認識、VGG16の。](https://qiita.com/enoughspacefor/items/16cd85911017fb994138)
Atcoderで自分がよくやらかす失敗

随時更新．

## DPで配列が大きすぎる
main関数の外側で配列を確保．

## 配列が大きい＋格納する値のBit数が大きい
XOR等の問題でBIT数が大きい数字（例えば，$2^{60}$．XOR sum 4でこれが起こった．）が$10^5$個等存在するときにRunning Errorが出ます．

## long long に int を足し込む
必ず足す前及び`min` or `max`関数等に代入する前に確認．

## そもそも実行しているファイルが異なる

実際に作成したファイルと実行しているファイルが違っていて，いつまで経ってもACしない現象はまあまあ経験しています．

## Runtime Error
0の割り算，配列の範囲外アクセス等が原因．特に指定範囲がすごい小さいときに範囲外アクセスを起こしがち．例えば，`A[x][y]`の`y`に対して，`y=Y-1`のときにする処理が`A[x][y-1]`にアクセスする処理だとしたら，`Y==1`のときに`-1`にアクセスしたりする．

## ループ内で代入している変数が違う・ループ内でカウント変数のインクリメント忘れ

その名の通り．`rep(i,n)`で配列に`n`を代入しているとか．ループ内で最大値更新忘れるとか．混乱しているときは案外気づかない．

## 配列に値を代入していない領域を計算に利用
`a[1e5]`として，実際には100番目の要素までしか代入していないときに101番目の要素を利用すると変な答えになる．

## 変数の初期化忘れ

## priority queueが空のときに参照
空のときは参照しないように必ずIF文を挟むこと．
iOSアプリにおけるUserDefaultsとはそもそも何なのか

# この記事について
- UserDefaultsの操作方法の記事は多いんですが、「UserDefaultsってそもそも何なのか？」をズバンと説明してくれる記事が見つからなかったので、調べて書きました
- UserDefaultsの概念を説明する記事です。
- UserDefaultsのCRUD操作の実装方法が知りたい方は、別記事をあたってください
- 筆者の知識レベルは、何度か使ったことがあるレベルです

# UserDefaultsとは
* [公式ドキュメント](https://developer.apple.com/documentation/foundation/userdefaults)
を要約すると、「アプリの終了後も消えてほしくない永続データを、保存するDBにアクセスするためのプログラミング上のインターフェイス」
* ⇒インターフェイス、というと途端にイメージしづらいが、言葉を代えるならアクセス手法。
* 　DBの実体については後述する。
* < Key, Value >形式の辞書型でアクセスできる。
* 1つのiOSアプリは、1端末に対して1つの UserDefaultsを持っている
* 多人数で1つの端末を利用する場合は、NSUbiquitousKeyValueStoreの利用が推奨されている（iCloudに保存）
* アプリを削除すると、UserDefaultsも消える

# 想定されている使い方
以上がUserDefaultsの端的な説明ですが、どういうときに使うべきなんでしょうか？
基本的にはユーザーの設定情報（Preferences）を保存する場所です。
**そのアプリのみで使う、かつ永続的に保存する設定情報の保存場所です。**

# UIの設計方針（ちょっと脱線）
下記のAppleのアーカイブ文書によれば、
[Preferences and Settings Programming Guide(About the User Defaults System)](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/UserDefaults/AboutPreferenceDomains/AboutPreferenceDomains.html#//apple_ref/doc/uid/10000059i-CH2-SW6)

| Preference | iOS | OS X |
|:--|:--|:--|
| Frequently changed preferences | Custom UI | Custom UI |
| Infrequently changed preferences| Settings bundle | Custom UI |

よく変更する設定の例としては、音量やゲームのコントローラー設定。
あまり変更しない設定の例としては、メールアドレスやメールサーバの設定情報など。
Mac OSのアプリならば、あまり変更しない設定であっても、設定画面から参照可能にすべき。
iOSなら、あまり変更しない設定は、iPhoneの「設定」からいけるようにするのが推奨です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333454/5ba9549b-f18e-5d56-3aec-3559f4e5c2ed.png)
（[こちら](https://milanista224.blogspot.com/2015/01/settings-bundle.html)より転載）

こんな感じです。

# 設定情報のドメイン
英文理解しきれてないですが、Appleは設定情報を5階層のドメインにわけています。

1. The Argument Domain
2. The Application Domain
3. The Global Domain
4. The Languages Domains
5. The Registration Domain

1から順に検索していくみたいなので、重複があるとたぶん上位が優先されます。
UserDefaultsを使ってデータを保存すると、2番扱いになります。
The Registration Domain（登録層？）は、揮発性のデータということなのですが、具体的に何を指しているのかよくわかってないです。

# ファイルの実体
UserDefaultsの実体がどうしても気になったので、下記の記事を参考に追ってみました。

[NSUserDefaultsの保存場所
](https://qiita.com/dondoko-susumu/items/85f5e1449df94be20fa9)

DBの実体は、「< ApplicationBundleIdentifer >.plist」という名前のplistファイルです。
自分のアプリのBundleIDは、Xcode上で自分のプロジェクトファイルを選択すると見れます。
捜索は結構難航しましたが、僕の環境だと、下記にありました。
ちなみに実機でデバッグした際に作成したものなので、シミュレータだとまた別の場所にあるかもしれません。

```
/Users/< Username >/Library/Developer/CoreSimulator/Devices/< Device ID >/data/Containers/Data/Application/  < 謎ID >/Library/Preferences/< Bundle ID >.plist
```
Applicationの下で、ID別のディレクトリがあったんですが、これが何のIDなのか謎です。
（アプリケーションごとのIDなんですかね？）
ネストがとにかく深いのと、Applicationの下のIDが何なのかわからず、まあまあな数あるので、下記のコマンドを使って特定しました。

```bash
cd /Users/< Username >/Library/Developer/CoreSimulator/Devices/< Device ID >/data/Containers/Data/Application
find ./ -name *.plist
```

こんな感じでファイルの実体が見られるので、試してはいませんが、やろうと思えばUserDefaultsではなく、
直でパスを指定してアクセスして、強引に書き込むのも可能と思われますが、当然Apple非推奨です。
>  You should not modify this file directly but can inspect it during debugging to make sure preference values are being written by your app.
【自分メモ】MAMPが起動しない時の対処方法

#はじめに
MAMPを起動しようとしたら急にエラー文が出て使えなくなりました。
今後のために対処方法をメモしておきます。

#エラー内容
Apache couldn't be started because port 8888 is in use by some other software.

「8888ポートが他で使われているため起動できないよ」　と言われています。

#実施したこと
　１）ターミナルを起動(macを使っています)

　２）ホームディレクトリから以下コマンドを実行（ポートの状態を確認できるコマンド）
　　$ sudo lsof -i -P | grep "LISTEN"

　３）パスワードを求められるので入力
　　※ここでのパスワードは自分のPCのロックを解除するパスワード

　４）ポートの状態が一覧で表示
　　※「8888」が使われているものを発見・・・！

　５）以下コマンドで削除を実行
　　$ kill -9 XXXX （XXXXは該当する番号を入力）

　　例）　kill -9 1234

　６）もう一度　２）と同じコマンドで状態を確認
　　※「8888」を使っていたものが削除されていました！

　７）MAMPを起動したら無事に成功
Akamai EdgeWorkers について

AkamaiがEdgeWorkersという面白そうなサービスを開発者向けにベータでリリースしていたので調べてみた。

# これは何？
Akamaiが出してるエッジコンピューティングのサービスです。AWSでいうLambda@Edge。
24万台あると言われているAkamaiのEdgeサーバ側で、自作したプログラムが動かせるようになるというもの。
CDN業界に限った話ではないですが、エッジ側で処理させるのが流行っているようで、Akamaiもそれに乗っかったという形だと思います。


(2019/08/06追記)
公式からユーザーガイドが公開されていました
https://learn.akamai.com/en-us/webhelp/edgeworkers/edgeworkers-user-guide/GUID-4CC14D7E-D92D-4F2D-9292-17F8BE6E2DAE.html

#EdgeWorkersについて
情報が少ないのでわかっていることのみ記載
・javascriptで動作
・IONおよびDynamic Site Acceleratorを契約している方が利用可能
・デプロイするリソースに制限あり
・ベータ版 (2019/08/03現在)

言語がjsなのはNode.jsなどのjsが理解できるユーザが多いからだと思われるが、jsのライブラリを使えるのか？などどこまで使えるかは不明。

#所感
今のところEdgeWorkersを使う利点が私には無い(Lambda@Edge使えば問題なさそうなため)
ただAkamaiのEdgeサーバが世界中のISPにある関係から、低レイテンシ且つ大規模処理をEdge側でやるようなシステム向けなのかもしれない。
機械学習などのリソースを使う系のものは、中央処理ではなくEdge側で分散処理させる形で行うことでメリットを得られる可能性はあり。

#おまけ
Akamaiの営業の方に聞いてみたところ、LunaのProperty(設定ファイル)をコード管理したい、という要望がいろいろな会社から出てきているようです。
今後EdgeWorkersなどのコードベース管理のものが多くなると、IaCも進むので楽しみです。

参考：https://developer.akamai.com/api/web_performance/edgeworkers/v1.html
Leetcode #1087: Campus Bikes

```swift
func assignBikes(_ workers: [[Int]], _ bikes: [[Int]]) -> [Int] {
    var distance = [[Int]]()
    for i in stride(from: 0, to: workers.count, by: 1) {
        for j in stride(from: 0, to: bikes.count, by: 1) {
            distance.append([i, j, abs(workers[i][0]-bikes[j][0]) + abs(workers[i][1]-bikes[j][1])])
        }
    }
    distance = distance.sorted {
        if $0[2] == $1[2] {
            if $0[0] == $1[0] {
                return $0[1] < $1[1]
            } else {
                return $0[0] < $1[0]
            }
        } else {
            return $0[2] < $1[2]
        }
    }
    var answer = Array(repeating: -1, count: workers.count)
    var assignedBikes = Set<Int>()
    for i in stride(from: 0, to: distance.count, by: 1) {
        if !assignedBikes.contains(distance[i][1]) && answer[distance[i][0]] == -1 {
            answer[distance[i][0]] = distance[i][1]
            assignedBikes.insert(distance[i][1])
        }
    }
    return answer
}
```
【Flutter】最小コードを読んで初めてのFlutter

# はじめに
Flutterを学習し始めたため、[公式ドキュメント](https://flutter.dev/docs/development/ui/widgets-intro)を参考に練習も兼ねてログを残します。

# 最小のソースコード
以下が最小のソースコードなります。

``` Flutter
import 'package:flutter/material.dart';

void main() {
  runApp(
    Center(
      child: Text(
        'Hello, world!',
        textDirection: TextDirection.ltr,
      ),
    ),
  );
}
```
実行すると以下になります。
<img width="535" alt="スクリーンショット 2019-08-03 16.07.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319161/4e0df378-ed16-5930-64f1-fb2de6152048.png">

##　ソースコードを読む
上記のソースコードは、「中心に“Hello World”が表示される」コードになります。ソースコードのCenter()関数は、要素を中心に配置する関数になります。
Center()関数内のchildにText()関数を挿入することにより中心に文字を配置できるようになっているみたいです。とてもわかりやすいですね。

## 調整しやすく書き直したソースコード
少し配置を調整しやすくするため、以下のように書き直します。

```
import 'package:flutter/material.dart';

void main() {
  runApp(
    Center(
      child: Container(
        color: Color.fromARGB(255, 255, 0, 0),
        width: 100.0,
        height: 100.0,
        child: Align(
          alignment: Alignment.center,
          child: Text(
            "hello world",
            textDirection: TextDirection.ltr,
          ),
        ),
      ),
    ),
  );
}
```

結果は以下になります。
<img width="535" alt="スクリーンショット 2019-08-03 16.45.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319161/bb8bd0ba-d044-0df0-94b3-4e11e9a73a3d.png">


このContainer()関数により、要素の範囲を設定できるようになります。このサンプルでは、幅100、高さ100の四角形の範囲(上手の赤い四角)を設定し、その範囲内の中心に“Hello World”を配置しています。

ここの``` alignment: Alignment.center ```で配置する位置を中心に設定します。
例えば、``` alignment: Alignment.topLeft ```にすると以下になります。
<img width="535" alt="スクリーンショット 2019-08-03 16.48.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319161/5995638c-7bad-bf62-4f64-b78cde4c7d39.png">

#おわりに
child要素に```FlutterLogo(size:60)```を追加すると、以下のようにFlutterのロゴが出力されます。画像を配置する際のデバッグに使えそうです。
<img width="535" alt="スクリーンショット 2019-08-03 16.54.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319161/b92970df-5f88-02d9-6bfc-839aa1d9c068.png">
SQLモードについて

##SQLモードとは
そもそもMySQLはSQL文を独自に解釈してより柔軟に動作するデータベースエンジン。

MySQLバージョン5あたりからSQL規格に則った実装で速度改善と、SQLの整合性を図ろうとしたものの、
その場合、旧バージョンで動かなくなる可能性もあった。


そこで作られたのがSQLモード。MySQL上で他のデータベースと同じような正規SQL文を高速に使用できるようになり設定を減らすことで旧バージョンのMySQL互換性を維持しつつ稼働できようにしている。

つまり、MySQLはSQL文を独自に解釈していた柔軟性と、SQL本来の厳密性の互換性を持っている


もともとMySQLはそういった柔軟性というか、ゆるふわだったので、例えば古いバージョンで動いていたデータベースを新しいバージョンのデータベースに移行させるときに、バージョンが新しいほど厳密になってくるので、厳密性がなかった古いバージョンで動いていたデーターベースを新しいデータベースで動かすときにSQLモードの設定で緩くする必要がある。



##MySQLがゆるふわと言われる
MySQLはよくゆるふわと言われることが多いですが、例えば、

###日付データの登録がゆるい
0000-00-00 00:00:00または0000-00-00という日付データが登録されてしまう。
(Zero Dateがなぜだめなのかは<a href="https://soudai.hatenablog.com/entry/2018/05/12/191050">こちら</a>に詳しく書かれています)
これはSQLモードでNO_ZERO_IN_DATEまたはNO_ZERO_DATEを有効にすれば上記のような日付データは登録できなくする。


###集約してない列名も参照できてしまう
GROUP BY で集約した行データを SELECTで参照できるのは、集約に使用した列名だが
集約してない列名も参照できてしまう。

この場合SELECTのところでshohin_idを指定しているがGROUP BYでは指定されてないので本来であれば参照できないが、
標準できてしまうことがある
ONLY_FULL_GROUP_BYを有効にすればGROUBY BYでSELECTで指定してない行データを指定しないと警告がでる

```
mysql> select shohin_id,shohin_mei  from shohin group by  shohin_mei;
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'sql_mode.shohin.shohin_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
```

###その他
他にも値が長いと勝手に切り詰められたりなど、いくつかあります。

##SQLの設定について
SQLモードの設定は<a href="https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html">公式</a>や調べてればいろいろと出てくるのですが、主な設定をいくつか挙げてみます

###TRADITIONAL
不正なデータを入れようとするときにエラーがでるようにします。
アプリケーションを動かしているときに、不正なデータを入れるぐらいだったら、エラー出したほうが良いと思ってます。


###STRICT_TRANS_TABLES
これは最初にあげたTRADITIONALと同等の設定です。
TRADITIONALの違いとしてはSTRICT_TRANS_TABLESは
無効なデータを有効なデータとして調整し、調整された値を挿入します。
TRADITIONALでは無効なデータは挿入せず弾くので厳密度でいうとTRADITIONALが一番上です


###ONLY_FULL_GROUP_BY
これは先程あげたので省略


###バージョンごとにデフォルト設定

MySQLのバージョン5.7あたりからデフォルトのSQLモードの設定がそれぞれ異なるようです。<a href="https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_sql_mode">参考URL</a>

|バージョン  |デフォルトの設定  |
|---|---|
| 5.7.8  |ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION |
| 5.7.7  |ONLY_FULL_GROUP_BY、 STRICT_TRANS_TABLES、 NO_AUTO_CREATE_USER、 NO_ENGINE_SUBSTITUTION  |
|5.7.5, 5.7.6  | ONLY_FULL_GROUP_BY、 STRICT_TRANS_TABLES、 NO_ENGINE_SUBSTITUTION　|
| 5.7.4 | NO_ENGINE_SUBSTITUTION | 

バージョンによってSQLモードの設定は異なり予期せぬ挙動を起こしたりするときがあるので
SQLモードは設定しておきましょう。
pyenv(python-3.7.4)でpandasが動かなかったのでpython入れ直した

家のMac（mojave）でpandasを使おうと、importかけたら下記のようなエラーが出て試行錯誤した記録。

```
Traceback (most recent call last):
  File "titanic.py", line 2, in <module>
    import pandas as pd
  File "/Users/yusuke/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/__init__.py", line 55, in <module>
    from pandas.core.api import (
  File "/Users/yusuke/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/core/api.py", line 24, in <module>
    from pandas.core.groupby import Grouper, NamedAgg
  File "/Users/yusuke/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/core/groupby/__init__.py", line 1, in <module>
    from pandas.core.groupby.generic import (  # noqa: F401
  File "/Users/yusuke/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/core/groupby/generic.py", line 44, in <module>
    from pandas.core.frame import DataFrame
  File "/Users/yusuke/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/core/frame.py", line 88, in <module>
    from pandas.core.generic import NDFrame, _shared_docs
  File "/Users/yusuke/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/core/generic.py", line 71, in <module>
    from pandas.io.formats.format import DataFrameFormatter, format_percentiles
  File "/Users/yusuke/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/io/formats/format.py", line 47, in <module>
    from pandas.io.common import _expand_user, _stringify_path
  File "/Users/yusuke/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/io/common.py", line 9, in <module>
    import lzma
  File "/Users/yusuke/.pyenv/versions/3.7.4/lib/python3.7/lzma.py", line 27, in <module>
    from _lzma import *
ModuleNotFoundError: No module named '_lzma'
```

_lzmaがないらしい。_lzmaとは何かを調べて見ると[これ](https://tukaani.org/xz/)のことらしい。
いろいろ調べていると、pyenvのインストールが怪しかったことが発覚。
https://github.com/pyenv/pyenv/wiki#suggested-build-environment
ここにある依存関係のライブラリをインストールしていなかったっぽい。

そのため、一旦 `pyenv uninstall 3.7.4` でpythonを引っこ抜いて上記依存ライブラリをbrewでインストールし、再度3.7.4をインストールすることに。

そうしたところ、今度は下記のエラー。

```
ModuleNotFoundError: No module named 'pyexpat'
make: *** [install] Error 1
```

pyenvのリポジトリで[こんな](https://github.com/pyenv/pyenv/issues/1066)記載があったので、 Command Line Tools を入れ直してみる。

ここからCommand Line Tools for XCode Beta 5をダウンロードしてきてインストール。
https://developer.apple.com/download/more/?=command%20line%20tools

その後に `pyenv install 3.7.4` でpython-3.7.4をインストール。
無事pandasが使えるようになった。
Safari 12 で sVim をインストールしてvimキーバインドで操作する

## 追記 2019年11月２２日

VimariがSafari 13に対応してMac App Storeでリリースされました。
https://apps.apple.com/jp/app/vimari/id1480933944

## tl;dr

Mojave / Safari 12へはSafari Extensions GalleryからsVimをインストールできます。
https://safari-extensions.apple.com/details/?id=com.flipxfx.svim-6Q2K7JYUZ6

## 背景

2018/09/19にリリースされたSafari 12からsafariextz形式の機能拡張を非推奨/廃止予定と発表されました。
今後はMac App StoreからSafari機能拡張を公開するように推奨されてます。

これに伴い[Safari Extensions Gallery](https://safari-extensions.apple.com)への新規登録は2019/01/01に受付がストップされるとアナウンスされました。

## sVimがSafari Extensions Galleryに登録

Mojave / Safari 12への対応として、[Release sVim as official extension · Issue #94 · flipxfx/sVim](https://github.com/flipxfx/sVim/issues/94) というissueで議論が開始され、新規登録受付がストップされる前の2018年9月にSafari Extensions Galleryへ登録されました。

https://safari-extensions.apple.com/details/?id=com.flipxfx.svim-6Q2K7JYUZ6

これによってSafari Extensions Galleryからインストールできるようになり、Safari 12でsVimを使えるようになりました。

## sVim2としてApp Storeに

issueの中に、sVim2としてApp Storeへリリースする取り組みの話が出ていたので引用します。

> There will be a period of time, I suspect about 9 months (let's call it January 2019 - October 2019), while the extensions gallery is not accepting new submissions, and during which our last extensions gallery release should still be installable. During that time, we can work on releases of a new thing, "sVim2", in the app store.

https://github.com/flipxfx/sVim/issues/94#issuecomment-417904633

Safari Extensions Galleryは新規登録がストップされていることもあり、いつまで公開されているか不明です。App StoreへsVim2がリリースされる日が待ち遠しいですね！