OmniAICreator/Qiita-1.07M huggingface dataset:
とある企業の、差し込み駆動開発

# はじめに
本当に、ただの雑記です。
きっかけは、前職の飲み会で出た、

> あれだけの時間をかけて検討したのに、20 分の発表と 10 分の質疑で、
偉い人に刺さるか刺さらないかで終わるのは、どうなのだろう。

この言葉から、自分が出会った上司たちが、
まるで接待麻雀でもしていたかのように振り返ることが出来たので、
それぞれのタイプと差し込み方法を解説していこうと思います。

# 差し込み駆動開発とは
業務を麻雀（牌はスキルやタスクなど）に例えた開発手法です。
差し込みを要求する親（上司）がいる場合に、差し込み（スキルやタスク提供）をタイミングよく行うと上手くいく開発手法になります。

# タイプ説明と、差し込み方法

### 混全帯ヤオ九 のみ待ち型
* リーダーや、課長に多いタイプ
    * 安くて、早い承認を得られやすいタイプ
    * ただ、さらに上の上司を動かすには役が足りず、その場で終わってしまうこともある
* 差し込みポイント
    * 捨て牌などの予備動作で読みやすいが、
    * アタリは限定的なので、読み違えると手数（工数）がかかる
    * 不要牌を切ったら、アタリだった！など、ラッキーもよくある

### オープンリーチ型
* プロジェクトマネジャーやプロダクトオーナーに多いタイプ
    * 自身が欲する牌（機能や製品）を説明し、差し込みを要求する
    * 実際に差し込めると、とてつもなく評価される
* 差し込みポイント
    * オープンされた牌（技術やスキル）をもっていれば、考えなしに差し込んでいけばよい
    * 読み間違いなども発生しないので、アタリを切れない状況は、無駄にみられてしまう
    * ただ牌をもっていないと、自摸（他部署やアウトソースの対応）を待つ必要があり関係性は悪くなる

### 面前清一色 多面待ち型
* 部長職以上に多いタイプ
    * 捨て牌（事前動作など）で、要求牌を分かりやすく伝えてくれる
    * 役も高く、差し込めると一気に上まで通ったり、昇進機会が与えられる
* 差し込みポイント
    * 分かりやすく待ちの色を示してくれるので、手数少なく差し込みやすい
    * 多面待ちにしてくれるタイプが多いので、どこを切ってもアタリという寛大さがある
    * ただ、同色を持ってない（ソリが合わない）と、そもそも期待されなかったりする。

### 南 4 枚切れ 国士無双 南待ち型
* 役員などに多いタイプ
    * 卓上（世の中）に旋風を呼び起こすような役を聴牌するがカラテン
    * しかし、聴牌をアガリたいために子（部下）に無理を強いる傾向がある
* 差し込みポイント
    * そもそも南が 4 枚見えてるので、国士待ってるなんて思いもよらない
    * ローズでも通しでも使い、何待ちか確認しなければ無茶を言われ続ける
    * 待ちが分かった時点で字牌周辺を切ってニコヤカにやり過ごすしかない
    * 多くの場合、流局（プロジェクトの終わりなど）になってから待ちと役が分かり、
    * 終わってから無茶振りだったと気付く

### 純正九蓮宝燈 9 面待ち型
* ベンチャー社長などに多いタイプ
    * 萬子どこを切られてもアタリで、役も高い！
* 差し込みポイント
    * 捨て牌気配も分かりやすく、差し込みがなくとも自分で自摸ることが多い
    * また、「萬子ならどこを切ってもアガリ」なので、子（部下）の自摸（学習や取り組み）にも大きな期待をしてくれる
    * そのため、無理難題を強いるのではなく他家（競合）への振り込み（先行）さえされなければ関係性も悪くならない

# おわりに
本当に、ただの雑記だったでしょう。
本当に本当に、お付き合いいただきありがとうございました。
ブログや Note にしようかとも思ったのですが、今手元にある発信ツールが Qiita だったので、楽しんでもらえていれば光栄です。
postgresql PG::ConnectionBad

##エラー内容

```
PG::ConnectionBad (could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
):
```

##状況
スリープ状態にしていたため、充電が切れてしまいサーバーを立ち上げたが上記のエラーが発生しました。

##解決するためにやったこと

postgresql起動させる


```
$ brew services start postgresql
```

```
Error: Unknown command: services
```

##解決した手順

```
$ brew tap homebrew/services
```

```
$ brew services start postgresql
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)
```


エラーは解決できました


##参考記事

https://qiita.com/tearoom6/items/1abf24ca6d872e6579b0

https://apple.stackexchange.com/questions/150300/need-help-using-homebrew-services-command

https://make-from-scratch.com/error-connections-on-unix-domain-socket-tmp-s-pgsql-5432/
Ubuntuで公開VPNに接続する方法

#環境
Ubuntu18.04以降で可能なことを確認しています。
デスクトップ版(マウスのドラッグやクリックで操作可能)である必要があります。


#1. OpenVPNをインストールしよう
まずVPNを扱うために新しいネットワークマネージャを導入します。ここでは広く使われているOpenVPNを使用します。

OpenVPNはコマンドラインから以下のコマンドでインストールできます。

```bash:OpenVPNのインストール
$ sudo apt install network-manager-openvpn
```


#2. VPNの設定ファイルをダウンロードしよう
VPNは世界中から沢山貸し出されています。[VPN Gate](https://www.vpngate.net/ja/)ではその一覧表を見ることができます。
表の項目は左から『国・地域』『DDNS名・IPアドレス』『VPN接続数』『回線品質』と続いていくはずです。

この中から適当にVPNを選びます。１つ選べたなら、そのVPNの『OpenVPN』の項目から**「OpenVPN設定ファイル」**のリンクを開きます。

飛んだ先のページにある**「DDNSホスト名が埋め込まれている.ovpnファイル」**をダウンロードします。
（※「IPアドレスが埋め込まれている.ovpnファイル」を使うこともできますが、IPアドレスは変わる可能性があるので推奨はしません）

#3. UbuntuにVPNを登録しよう
ダウンロードが完了したら、Ubuntuの「設定」を開きましょう。ここからの操作はUbuntuのバージョン依存になるので、適宜読み替えてください。

「設定」から「ネットワーク」を開くと、「VPN」の項目があると思います。その右上にある**「＋」**を押してVPNを登録します。

「＋」を押すと設定方法の指定に移ります。ここでは**「ファイルからインポート」**をクリックし、さきほどダウンロードした.ovpnファイルを選びます。

ファイルの読み込みが成功したらVPNの設定画面に移ります。設定は自動で設定されているので、あとは右上の「追加」を押すだけで追加は完了です。


#4. 実際にVPNを使ってみよう
これで「VPN」の項目に新しくVPNが追加されたと思います。**VPNの名前の隣にあるバーをクリック**してONにしましょう。

少し待ってみて右上のステータスバーにVPNの表示がされたなら、接続完了です！

ただし、接続できないことも多々あります。そんなときはそのVPNに接続するのは諦めて、別のVPNで試してみましょう。

#まとめ
見ての通りとても簡単な手順なのですが、自分が苦戦したときに難しい内容の記事にしかヒットしなかったのでまとめました。いわゆる備忘録なので細かいところは気にしないでもらえると幸いです。
言語処理100本ノック-33(pandas使用):サ変名詞

[言語処理100本ノック 2015](http://www.cl.ecei.tohoku.ac.jp/nlp100/)[「第4章: 形態素解析」](http://www.cl.ecei.tohoku.ac.jp/nlp100/#ch4)の[33本目「サ変名詞」](http://www.cl.ecei.tohoku.ac.jp/nlp100/#sec33)記録です。
前回同様、抽出条件が変わるだけで非常に簡単です。

# 参考リンク

|リンク|備考|
|:--|:--|
|[033.サ変名詞.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/04.%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90/033.%E3%82%B5%E5%A4%89%E5%90%8D%E8%A9%9E.ipynb)|回答プログラムのGitHubリンク|
|[素人の言語処理100本ノック:33](https://qiita.com/segavvy/items/229d0a672a866b3e09a1)|多くのソース部分のコピペ元|
|[MeCab公式](https://taku910.github.io/mecab/)|最初に見ておくMeCabのページ|

# 環境

|種類|バージョン|内容|
|:--|:--|:--|
|OS|Ubuntu18.04.01 LTS|仮想で動かしています|
|pyenv|1.2.16|複数Python環境を使うことがあるのでpyenv使っています|
|Python|3.8.1|pyenv上でpython3.8.1を使っています<br>パッケージはvenvを使って管理しています|
|Mecab|0.996-5|apt-getでインストール|

上記環境で、以下のPython追加パッケージを使っています。通常のpipでインストールするだけです。

|種類|バージョン|
|:--|:--|
|pandas|1.0.1|

# [第4章: 形態素解析](http://www.cl.ecei.tohoku.ac.jp/nlp100/#ch4)
## 学習内容
> 夏目漱石の小説『吾輩は猫である』に形態素解析器MeCabを適用し，小説中の単語の統計を求めます．
>> 形態素解析, MeCab, 品詞, 出現頻度, Zipfの法則, [matplotlib](http://matplotlib.org/), [Gnuplot](http://www.gnuplot.info/)

## ノック内容
> 夏目漱石の小説『吾輩は猫である』の文章（[neko.txt](http://www.cl.ecei.tohoku.ac.jp/nlp100/data/neko.txt)）をMeCabを使って形態素解析し，その結果をneko.txt.mecabというファイルに保存せよ．このファイルを用いて，以下の問に対応するプログラムを実装せよ．

なお，問題37, 38, 39は[matplotlib](http://matplotlib.org/)もしくは[Gnuplot](http://www.gnuplot.info/)を用いるとよい．

### [33. サ変名詞](http://www.cl.ecei.tohoku.ac.jp/nlp100/#sec33)
> サ変接続の名詞をすべて抽出せよ．

# 回答
## 回答プログラム [033.サ変名詞.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/04.%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90/033.%E3%82%B5%E5%A4%89%E5%90%8D%E8%A9%9E.ipynb)

```python
import pandas as pd

def read_text():
    # 0:表層形(surface)
    # 1:品詞(pos)
    # 2:品詞細分類1(pos1)
    # 7:基本形(base)
    df = pd.read_table('./neko.txt.mecab', sep='\t|,', header=None, 
                       usecols=[0, 1, 2, 7], names=['surface', 'pos', 'pos1', 'base'], 
                       skiprows=4, skipfooter=1 ,engine='python')
    return df[(df['pos'] != '空白') & (df['surface'] != 'EOS') & (df['pos'] != '記号')]

df = read_text()
df[(df['pos'] == '名詞') & (df['pos1'] == 'サ変接続')]
```

## 回答解説
前回と変わっているのは以下の1文です。大したことないですね。

```python:
df[(df['pos'] == '名詞') & (df['pos1'] == 'サ変接続')]
```

### 出力結果(実行結果)
プログラム実行すると以下の結果が出力されます。75の「そうだ」はMeCabの間違えではないでしょうか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134273/3d53dc10-26d8-54c5-1abc-f98bee5c1d19.png)
PofEAAのユニットオブワークを実装してみた

マーチン・ファウラー著の[エンタープライズアーキテクチャーパターン（以下PofEOAA)](https://booklog.jp/item/1/4798105538)に載っていた、ユニットオブワーク(UnitOfWork)というパターンを理解するために、Rubyで実装してみたという話です。

### ユニットオブワークとは

PofEOAAでは次のように記載されています。

> ビジネストランザクションの影響を受けるオブジェクトのリストを保持しつつ、変更点の書き込みと並行性の問題の解決を調整する。
> 引用： マーチン・ファウラー. エンタープライズアプリケーションアーキテクチャパターン (Japanese Edition) 

ドメインロジックで、オブジェクトに複数の変更を加えたいとき、トランザクションをどの範囲で設定したらよいか悩むことがあると思いますが、そうした問題に対処できそう、ということでこのユニットオブワークの理解を深めることにしました。

### 実装方法

オブジェクトの変更を、それぞれ追加、変更、削除を記録しておくコレクションに追加しておき、コミットメソッドが呼ばれたら一気に変更を反映する、というやり方をします。

### ソースコード

[githubのこちらのリポジトリ](https://github.com/TokyoYoshida/UnitOfWorkSample)にも置いてあります。

```ruby:ユニットオブワークのソースコード
require 'singleton'

# Mapperはサンプルなので何もしません
class SomeMapper 
    def self.insert(obj)
        puts "追加処理をしました"
    end

    def self.update(obj)
        puts "更新処理をしました"
    end

    def self.getSomeDomainObject()
        return SomeDomeinObject.create
    end
end

# これがユニットオブワークの実装です
class UnitOfWork 
    include Singleton

    def initialize
        @newObjects = []
        @dirtyObjects = [] # 変更を保存しておく場所。Cleanな状態から変更されたのでDirtyです。
        @removedObjects = []
    end
    
    def registerNew(domainObj) 
        @newObjects << domainObj
    end

    def registerDirty(domainObj)
        @dirtyObjects << domainObj unless @dirtyObjects.include?(domainObj)
    end

    def registerRemoved(domainObj)
        return if @newObjects.delete domainObj
        @dirtyObjects.delete domainObj
        @removedObjects << domainObj unless @removedObjects.include?(domainObj)
    end

    def registerClean(domainObj)
    end

    def commit()
        insertNew()
        updateDirty()
        deleteRemoved()
    end

    def insertNew
        @newObjects.each do |o|
            SomeMapper.insert o
        end
    end

    def updateDirty
        @newObjects.each do |o|
            SomeMapper.update o
        end
    end

    def deleteRemoved
        # 略
    end
end

# ユニットオブワークに記録されるドメインオブジェクトの基底クラス
class DomainObject 
    def markNew
        UnitOfWork.instance.registerNew self
    end

    def markClean
        UnitOfWork.instance.registerClean self
    end

    def markDirty
        UnitOfWork.instance.registerDirty self
    end

    def markRemoved
        UnitOfWork.instance.registerRemoved self
    end
end

# ドメインオブジェクトの実装
class SomeDomeinObject < DomainObject
    def self.create
        obj = SomeDomeinObject.new
        obj.markNew # ここでユニットオブワークに追加を記録している
        return obj
    end

    def setSomeValue(newValue)
        @some_value = newValue
        markDirty() # ここでユニットオブワークに変更を記録している
    end
end

# ここからは実際にサンプルを実行するところ
dobj = SomeMapper.getSomeDomainObject()
dobj.setSomeValue("test")
UnitOfWork.instance.commit()
```

### まとめ

PofEOAAに載っているサンプルは、ただ記録して、それを反映するだけのシンプルなものでした。
実際に並列性の問題を解消するためには、ロックの仕組みを入れていかなければなりませんが、これについては書かれていませんでした。

PofEOAAにはこの他に、軽ロックや重ロックなどのパターンが説明されているので、これらと組み合わせて並列性の問題を解決しましょう、ということなのかもしれません。

重ロックというとヘビーメタルみたいですね。
初心者によるプログラミング学習ログ 248日目

#100日チャレンジの248日目
twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。

100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。

248日目は、

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">おはようございます<br>248日目<br>・webサイト模写<br>・Udemyで、photoshopバナー作成講座<a href="https://twitter.com/hashtag/%E6%97%A9%E8%B5%B7%E3%81%8D%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8?src=hash&amp;ref_src=twsrc%5Etfw">#早起きチャレンジ</a><a href="https://twitter.com/hashtag/%E9%A7%86%E3%81%91%E5%87%BA%E3%81%97%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%A8%E7%B9%8B%E3%81%8C%E3%82%8A%E3%81%9F%E3%81%84?src=hash&amp;ref_src=twsrc%5Etfw">#駆け出しエンジニアと繋がりたい</a><a href="https://twitter.com/hashtag/100DaysOfCode?src=hash&amp;ref_src=twsrc%5Etfw">#100DaysOfCode</a></p>&mdash; ぱぺまぺ@webエンジニアを目指したい社畜 (@yudapinokio) <a href="https://twitter.com/yudapinokio/status/1232034266671771648?ref_src=twsrc%5Etfw">February 24, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Excel　VBAの圏論的アプローチ

圏論の入門書[圏論の道案内 ～矢印でえがく数学の世界～](https://gihyo.jp/book/2019/978-4-297-10723-9)の最初を読み始めで、まだ関手とか自然変換とかが、判らない状態なのですが、矢印のところだけは、理解できたのかな～と思っています。

今まで、書いてきた関数のなかで、 R=R といった記法があるのですが、これは
f: R(Range) ⇒　R(二次元配列) といった意味で、Excel　VBAを説明するにも、
圏論的なアプローチが有効かもしれません。
 
すでに、[EXCELで５ミリ方眼旋盤CAD（図形情報)](https://qiita.com/matumoto_onga/items/375d3a707fff836789af)で恒投射とか言っています。

SPILL関数が導入されたら、関数を返した結果が、
f: R(Range)     ⇒ S(二次元配列)
g: S(二次元配列) ⇒ R(Range)

になることが判っています。
型変換が圏論でどのように扱われているのか、気になります。

上記の後に,[Rustで自然変換する話](https://qiita.com/passw0rd/items/966b5b24dd63b2e4e80b)を読みました。

Range: V(文字列)　⇒　R(Range)　で関手、
=: R(Range) ⇒　R(二次元配列)　が自然変換として理解していいのでしょうか？
全角スペース問題を解決した話

###全角スペースにハマってしまった
技術書の通りに写経しているのにエラーが発生してしまい、
試行錯誤した結果、全角スペースが入っていたことが原因でした:frowning2:
気づくのにかなり時間をつかってしまったので、再発防止策を考えました
※Qiita初投稿です。乱文失礼致します

---
###解決方法

結論から申し上げると、半角スペースを見える化することで、
全角スペースを発見することができます:point_up:

VSCODEの場合、Whitespace+という半角スペースに色をつけてくれる拡張機能が存在しいます。

①Cmd+Shift+x で拡張画面を開き「Whitespace+」を検索し、インストール。
②Cmd+Shift+pでコマンドパレットを開き、「Whitespace+ Toggle」を実行する。

---
###実例

<img width="493" alt="スクリーンショット 2020-02-25 4.13.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592016/23d6a196-2872-fc3a-75bd-4079b82250d7.png">

 change_column_nullのあとに、
全角スペースが存在しているのがひと目で確認できるようになりました:relaxed:
RustでHello World

# 概要

ローカルにRustを入れて`Hello World`するだけ

## 前提

- Mac

### 参考

- [Rest 日本語ドキュメント](https://doc.rust-jp.rs/)知りたいことはだいたい書いてある

- [Rust パッケージ一覧](https://crates.io/)例えば[乱数](https://crates.io/crates/rand)など

- [VSCode Rust(rls)](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust)この拡張機能でだいたいのことはできます

- [ブラウザ Rest 実行環境](https://play.rust-lang.org/)サクッと動かすなら

## インストール

- [バージョン管理 rustup](https://rustup.rs/)

インストール

```terminal:terminal
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

path を通す(環境依存)

```terminal:terminal
source $HOME/.cargo/env
```

バージョン確認

```terminal:terminal
rustc -V
```

## プロジェクト作成→実行

- [パッケージマネージャ cargo](https://doc.rust-lang.org/cargo/)

バージョン確認

```terminal:terminal
cargo -V
```

プロジェクト作成

```terminal:terminal
cargo new project
cd project
```

コンパイルチェック

```terminal:terminal
cargo check
```

ビルド

```terminal:terminal
cargo build

// リリースビルド
cargo build --release
```

実行

```terminal:terminal
cargo run
```

## おまけ

### ドキュメント生成 cargo

ドキュメント(HTML)を自動生成できる

例えば下記のようにコメントしておくと

```rust:例
/// 関数の説明
///
/// #example
///
/// `rust
/// println!(mult(a, b));
/// `
fn mult(a: i32, b: i64) -> i32 {
    return a * b as i32;
}
```

ドキュメント生成(HTML)

```terminal:terminal
cargo doc --open
```

ドキュメント生成例

![img000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317701/119b5dca-6a59-c8dd-4fba-c4e8a3dd01b2.png)

### example

#### Hello World

```rust:例
fn main() {
    println!("Hello, world!");
}
```

#### フィボナッチ数列

`※計算にコストがかかる実装なので注意`

```rust:例
fn fib(n: i64) -> i64 {
    // return省略可能
    if n == 0 {
        0
    } else if n == 1 {
        1
    } else {
        fib(n - 1) + fib(n - 2)
    }
}

fn main() {
    for i in 1..11 {
        println!("{}: {}", i, fib(i));
    }
}
```
HTML  基礎

## HTML & CSS
Webページは「HTML」と「CSS」という言語を組み合わせて作られています。
HTMlとは「Hyper　Text　Markup Language」の略で**マークアップ**言語に分類されます。
そしてマークアップ言語とは「文章を構造化」する言語のことです。

今はHTML5が標準となっています。(HTML5とは、HTMLのバージョン5、改訂第5版です。)


## タグの種類
よく使いそうな物をまとめてみました。
http://www.htmq.com/html5/

|タグ  |意味  |備考  |
|--- |---|---|
|<!DOCTYPE html>|ドキュメントタイプを宣言する|HTML5で作成されたものであることを宣言するために、 文書の先頭に記述する|
|html|HTML文書であることを示す|HTML文書であることを示す記述|
|head　|文書のヘッダ情報を表す|そのHTML文書に関するメタデータを集めたもの|
|body　|文書の本体を表す|**\<html>タグ**の中に一つだけ配置します。 中には見出し・段落・表・フォームなどの要素を配置します。|
<br />
**bodyの中で使うタグ**

|タグ  |意味  |備考  |
|--- |---|---|
|header　|ヘッダであることを示す|HTML5から新たに追加された要素です|
|footer |フッタであることを示す|HTML5から新たに追加された要素です|
|section |一つのセクション　||
|article|記事であることを示す|内容が単体で完結するセクションであることを示す際に使用します|
|aside| 余談・補足情報のセクションであることを示す| |
|\<h1>-\<h6> |見出しを付ける|セクション|
|div|ひとかたまりの範囲として定義する|意味はない|
|span|ひとつの範囲として定義する|\<span>で囲まれた範囲に特定のスタイルシートやスクリプトを適用したりしたい時に使う|
|p |ひとつの段落（パラグラフ）であることを表す|コンテンツの分類|
|ol |順序のあるリストを表示する|リスト項目は、\<li>タグで指定する|
|li |リストの項目を記述する|順番が変わると困る時に使う|
|ul |順序のないリストを表示する||
|dl |定義・説明リスト|\<dt>\<dd>を配置してリストを作成する|
|dt |定義・説明される言葉|---|
|dd |定義用語や言葉の説明をする|---|
|a| ハイパーリンクを指定する|\<a href="飛びたいURL">リンク</a><br>|
|i| 声や心の中で思ったことなど、他と区別したいテキストを表す||
|br | 改行|\<br />|
|img|画像を表示する|\<img src="画像のpath">|
|video|動画を再生する| |

**メタデータ**

|タグ  |意味  |  
|--- |---|---|
|title|文書にタイトルをつける|
|base|相対パスの基準URIを指定する|
|link| リンクする外部リソースを指定する|
|meta|その文書に関する情報（メタデータ）を指定する|
|style|スタイルシートを記述する|

**特殊文字**

|表示したい文字|タグ |  | 
|--- |---|---|
|<|\&lt;| |
|>|\&gt;| |
|&|\&amp;||
|半角スペース|\&nbsp;||
[特殊文字コード](http://www.shurey.com/js/labo/character.html)

**コメントアウト**
<!-- ここにコメントアウトしたい文字を記述する！ -->


## id属性とclass属性
htmlの各タグにはid属性やclass属性という属性が設定できます。これによって指定した「特定の要素のうち一部だけ」装飾したり、

**class** =  種別名を割り当てる(同じclass名を、1ページ中に何度でも使える。 )
**id** =  固有の名前を割り当てる(同じid名は、1ページ中に1度しか使えない。)
*id属性を使うと「ページ内リンク」が作れ、アンカーポイントとして指定できます。

## 基本構造
``` html
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
</head>

<body>
    <!-- ここに書いていきます！ -->
</body>

</html>
```
ページの本文は`<body>`タグの中に書いていきます！

## とりあえず確認するための準備

簡単にブラウザーで確認する場合は、
1. フォルダーを作成
2. 新規ファイルで「ファイル名.html」を作成
3.そのファイルのpathをコピーし、ブラウザーに貼り付ける
だけです！


## 見出しをつける

見出しの要素は`<h1>`から`<h6>`まであります。

``` html
<h1>サンプルコード</h1>
<h2>サンプルコード</h2>
<h3>サンプルコード</h3>
<h4>サンプルコード</h4>
<h5>サンプルコード</h5>
<h6>サンプルコード</h6>
```

**やってみた**
<img width="283" alt="スクリーンショット 2020-02-25 2.37.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394411/2b46084e-a141-0604-db06-22c9ec48e5b1.png">
markdown

qiitaを書くときに何気なく使っているmarkdownについて改めて勉強してみました。
##　markdownとは
>##### MarkDown         
Markdown（マークダウン）は、文書を記述するための軽量マークアップ言語のひとつである。本来はプレーンテキスト形式で手軽に書いた文書からHTMLを生成するために開発されたものである。しかし、現在ではHTMLのほかパワーポイント形式やLATEX形式のファイルへ変換するソフトウェア（コンバータ）も開発されている。各コンバータの開発者によって多様な拡張が施されるため、各種の方言が存在する。

[wiki](https://ja.wikipedia.org/wiki/Markdown)


マークアップ言語とは「文章を構造化」する言語のことです。マークダウン言語はHTMLなどのマークアップ言語を、簡単な記号や改行で使えるようにしたものだそうです。


|タグ  |書き方  | | タグ|書き方  | 
|---  |---   |---|---  |---   |---   |
|見出し | # 見出しh1 <br > ## 見出しh2 ||ナンバリング| 文字の前に数字とピリオドをつける |  |
|強調 | \*\*文字\*\* |   |引用|  引用文の前に「>」 | |
|斜体 | \*文字\* |  |リンク| \[リンク](URL) |  |
|改行 | 半角スペースを2個 |  |画像| \!\[画像](URL) |  |引用|  引用文の前に「>」 | |
|水平線 | アスタリスク・ハイフン・アンダーバーを3つ以上並べる |  |無効化 |　\  |　|
|箇条書き| 文字の前にアスタリスク | |打ち消し線|　\~\~テキスト~~|　|　 
|テーブル | <img width="301" alt="スクリーンショット 2020-02-24 0.47.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394411/b5cf8200-12a2-13f3-f616-5228ca2e6db5.png">|  |チェックボックス|- [ ] チェックボックス|

## 見出し
1個から6個シャープで見出しを記述することができます。

```
# Title １
## Title ２
### Title ３
#### Title ４
##### Title ５
###### Title ６
####### 意味なし
```
# Title １
## Title ２
### Title ３
#### Title ４
##### Title ５
###### Title ６
####### 意味なし

## 強調

```
**文字**
```
**文字**

## 斜体
```
*文字*
```
*文字*

## 改行
```
Title １

Title ２ //半角スペースを2個入れる
```
**<結果>**

Title １

Title ２

## 水平線
```
***
* * *
---
- - -
```
↑これらは全て下記の様に表示されます。
***

## 箇条書き
```
* 箇条書き１
* 箇条書き２
* 箇条書き３
```
* 箇条書き１
* 箇条書き２
* 箇条書き３

## ナンバリング
```
1. ナンバリング1
2. ナンバリング2
3. ナンバリング3
```
1. ナンバリング 1
2. ナンバリング 2
3. ナンバリング 3

## 引用
``` 
> 　テスト１
>> テスト2
>>> テスト3
```

> 　テスト１
>> テスト2
>>> テスト3

## リンク	
```
[test](https://qiita.com/)
```
[tes](https://qiita.com/)

## 画像
```
![画像](URL)
```
 ![Qiita](https://qiita-image-store.s3.amazonaws.com/0/45617/015bd058-7ea0-e6a5-b9cb-36a4fb38e59c.png "Qiita")

## 無効化
バックスラッシュ[\]をMarkdownの前に挿入することで、Markdownをエスケープ(無効化)することができます。(バックスラッシュ　macは 「 alt + ¥ 」 )

```
###### test
\# test
```

###### test
\# test

## 打ち消し線

```
　~~テキスト~~
```
　~~テキスト~~

## テーブル

|ヘッダ行1  |ヘッダ行2   |ヘッダ行3|
|---  |---   |---| 
|データ行１|データ行２|データ行３　|
|-１-  |-２-   |-３-|

セルの両端の空白は削除される。
セル同士の結合は不可。

2行目は列ごとのアラインメントを設定する行です。
左寄せ --- (または:--)
右寄せ --:
センタリング :-:

|左寄せ  |センタリング|右寄せ|
|---|:---:|---:|
|データ行11111|データ行22222|データ行33333　|

##　チェックボックス
```
- [ ] チェックボックス
- [x] チェックボックス
```
- [ ] チェックボックス
- [x] チェックボックス



参考
[Markdown記法 チートシート](https://qiita.com/Qiita/items/c686397e4a0f4f11683d)
[Qiitaのテーブルの書き方についてまとめた](https://qiita.com/zakuroishikuro/items/f33929eab9d55c5bd073)
npm について

## npmパッケージについて
npmパッケージとは、誰かが作った便利な機能をまとめたものです。
babelはnpmパッケージの1つです。

npm install することでインストールしたnpmパッケージはすべて「node_modules」というディレクトリに入っています。

```
"start": "./node_modules/.bin/babel src --out-dir dist && node dist/index.js"
```
↑package.jsonの中のコードです。

**コマンドのやっていること**
1. 「./node_modules/.bin/babel src --out-dir dist」 = babelでsrcディレクトリのファイルをコンパイルしてdistディレクトリの出力
2. 「node dist/index.js」　＝　distディレクトリのindex.jsを実行

## 使ってみる
chalkを使ってみました！

--saveをつけることで、npmパッケージが「node_modules」内にインストールされる際に「package.json」に記述されます。逆に書かない場合は、「package.json」には記述されないまま「node_module」にインストールされます。基本的には--saveをつけてインストールしましょう。

インストール

```
npm install --save chalk
```

src/index.jsに下記のコードを追加する。
``` js
import chalk from "chalk";
console.log(chalk.bgCyan("これはテストメッセージです"));
```

<img width="744" alt="スクリーンショット 2020-02-10 4.17.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394411/7f165418-04f4-0e24-f7f8-d9447a19aec2.png">

実行！！！

```
npm run start
```

色がついて、ログが実行されれば成功です！！！
<img width="480" alt="スクリーンショット 2020-02-10 4.20.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394411/1e50c766-2d7d-2692-6a23-90ca5fef2210.png">

https://www.npmjs.com/package/chalk

## readline-syncを使ってみる
readline-syncとは、コンソール上で質問文を表示し、受け取った答えをそのまま任意の定数に格納できるパッケージです。


インストール

```
npm install --save readline-sync
```

src/index.jsに下記のコードを追加する。

<img width="434" alt="スクリーンショット 2020-02-10 4.30.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394411/118c33f5-3dcf-3285-3f77-8abd9d97b49b.png">
```
import chalk from "chalk";
import readlineSync from "readline-sync";

let input = readlineSync.question("What's your name?: ");
console.log(chalk.magenta.bold.underline(input));
```

実行！！！

```
npm run start
```
<img width="434" alt="スクリーンショット 2020-02-10 4.30.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394411/c3c9e846-110b-ac3f-518a-4bd907801c81.png">

ここに入力するとsrc/index.jsの　input に代入され、表示されれば成功です！


<img width="570" alt="スクリーンショット 2020-02-10 4.41.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394411/8b3151ef-93ba-d985-f2bc-2a44a0e8be52.png">
Catalinaにアップデートしたら、anaconda使えなくたってしもうた...

[Will anaconda support MacOS Catalina(zsh)? ](https://github.com/ContinuumIO/anaconda-issues/issues/11334)
`zsh conda init zsh`
とやってから、ターミナルを起動しなおしたら直った？


`conda update conda`
`conda update jupyter`

[macOS Catalina にしたら、Anaconda 使えなくなった場合の対処法](https://qiita.com/akinko/items/1909c8d0145d9ba530b9)
Automation Anywhere A2019のユーザーインターフェイスの呼び方 まとめ

RPAツールであるAutomation Anywhere A2019の画面のユーザーインターフェイスの名称について調べてみたのでメモ。
バージョンによって公式ドキュメントも表現に多少のゆれがあるみたいですが、これが最も一般的な名称であろうというものを記載してみました。

# Control Room
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/770759db-4b14-bd19-ccd7-6e73054d9129.png)

# マイBot
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/8ed8fe5f-bd27-47e0-b32e-563f1b48dd3f.png)

**参考記事**

* [ユーザー管理の概要](https://docs.automationanywhere.com/bundle/enterprise-v11.3/page/enterprise/topics/control-room/administration/users/users-overview.html)

# Botエディター
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/b3fc6610-3295-01a8-8ce2-9b1c26f952bd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/6c13298e-b64a-96e5-df1a-cf239eb02b73.png)


# アプリケーションのレコーディングウィンドウ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/eb8a7255-28e9-dea3-cc95-b13fe24ebdbc.png)

**参考記事**

* [タスクの記録](https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/aae-client/bot-creator/using-the-workbench/cloud-capturing-recording.html)

# その他の参考記事

* [Automation Anywhere v11のユーザーインターフェイスの呼び方 まとめ](https://qiita.com/RPAbot/items/2d964a0f4e3dfef26796)
laravel 外部キー接続と、リレーションの違い

マイグレーションファイルに外部キー接続する処理を書けば、DB側でそれを指定できるが、laravel側はDB側で外部キー接続しているかを識別できない。なので、その外部キー接続をlaravel側でも定義してあげないといけない。
それがモデルに書くリレーションになる。なので、極論を言うとマイグレーションファイルにわざわざ外部キー接続は書く必要はない。
【Blender2.8】ツールバー表示、非表示切り替え


環境メモ
⭐️Mac OS Mojave バージョン10.14
⭐️Blender2.8

# ツールバーで表示、非表示に切り替える
「T」キーで、ツールバー表示、非表示に切り替える
<img width="403" alt="スクリーンショット 2020-02-22 15.29.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/4c50f8d3-a472-37b9-3327-6172706d60a2.png">
【Blender2.8】エリア分割

環境メモ
⭐️Mac OS Mojave バージョン10.14
⭐️Blender2.8

# エリア分割

「ビユー」ー「エリア」ー「縦に分割」を選択する
<img width="939" alt="スクリーンショット 2020-02-22 15.15.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/ee0248bb-8017-7a5b-41c3-ab9ff83cb8d0.png">

分割したい位置でクリックする
<img width="950" alt="スクリーンショット 2020-02-22 15.17.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/773b8d28-9e26-fe3b-0cc1-b827e0c5ad3e.png">

分割成功
<img width="1014" alt="スクリーンショット 2020-02-22 15.18.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/8a1af38a-7b5b-09c1-cb95-9a19ff5fbf0b.png">
iOSアプリのアイコンをffmpegコマンドを使ってアルファチャンネルなしで各サイズを吐き出す

# はじめに
iosアプリのアイコンでは異なるサイズの画像をたくさん作る必要があります。
でこれがめちゃくちゃめんどくさいので、そのためのツールが色々あるのでまずはこれらを試してみることをお勧めします。

一番簡単にWebアプリ上できるのがこちらで
[appicon](https://appicon.co/)

Macのアプリでできるのがこちらです
[Image2icon](https://apps.apple.com/jp/app/image2icon-%E7%8B%AC%E8%87%AA%E3%81%AE%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86/id992115977?mt=12)

# 遭遇した問題 〜 アルファチャンネルが追加されてしまう 〜

今回自分はillustratorでアイコンを描き画像としてでexportしました。
そして上記のツールでアイコンを作成して、App Store Connectにアップロードしようとすると、以下のようなエラーが出ました。

> Error ITMS-90717: "Invalid App Store Icon. The App Store Icon in the asset catalog in 'YourApp.app' can't be transparent nor contain an alpha channel."

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71154/47ae1b57-7bff-a79c-5760-7a5417a5c092.png)

アルファチャンネルが含まれているから使えないよーとのことですね。
なるほど書き出したアイコンにアルファチャンネルが含まれているのねーということで確認してみると、含まれていません。

<img width="300" alt="apole_pngの情報.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71154/76e19eb4-5cbc-132d-241f-659a2104fa07.png">

色々試してみたのですが、どのツールを使っても書き出し後の画像にはアルファチャンネルが含まれてしまいました。
<img width="300" alt="Icon-1024_pngの情報_と_ダウンロード.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71154/1a16525e-f7cf-8f22-1aa7-909f946b9b12.png">


# 解決法 〜 ffmpegでリサイズする 〜
事前に1024px x 1024pxの画像についてMacのプレビューアプリなど使ってアルファチャンネルを除去します。
ファイル > 書き出す でアルファチャンネルのチェックを外して保存します。

<img width="460" alt="書き出す_と_output_1024_png.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71154/49ce8189-c31d-58e1-845b-15a321c903e3.png">


用意した画像にffmpegを使ったshell scriptを使い、異なるサイズの画像を一気に作成します。

```sh:multi_size_image_export.sh
# Export ios app icons by ffmpeg scale command
# usage: sh export_ios_icons.sh {path_to_your_img}
# example: sh export_ios_icons.sh ./app_icon.png

# sizes of images
# you can get other size images by editing thisarray
size=(20 40 60 29 58 87 80 120 180 76 152 167 1024)
for i in "${size[@]}"
do
   : 
    ffmpeg -i $1 -vf scale=$i:$i output_$ix$i.png
done
```
[gist](https://gist.github.com/kazuooooo/8a22a809f1bf164708b8558ae1709b6c)

作りたい画像サイズを配列で保持しておいて、
ここでリサイズした画像を生成します。

```sh
ffmpeg -i $1 -vf scale=$i:$i output_$ix$i.png
# ex) ffmpeg -i $1 -vf scale=1024:1024 output_1024x1024.png
```

実行時はこんな風にします。

```sh
sh multi_size_image_export.sh icon.png
```

実行すると以下のように各画像サイズのアイコンが出力され、アルファチャンネルがない状態も見事キープされていますね！
<img width="200" alt="ios_icon.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71154/df3673d6-b63f-bfa0-3957-caf9a1960c7a.png">
<img width="300" alt="output_1024_pngの情報.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71154/c5649eea-5504-eb66-98eb-a74718763f0e.png">

めでたしめでたし :confetti_ball: 

(あとで気づいたがそもそも[jpgでやれば、こんな問題全く起きなかったかも...](https://stackoverflow.com/questions/46585809/error-itms-90717-invalid-app-store-icon/60380881#60380881))
PHPで独自フレームワークを作ってサイトも作ってみた

Lalavelが重いと感じたのでPHP7でフレームワークを作ってサイトも作ってみました
サイトは https://mokuzist.com です

laravelが重いというところから始まったので無駄なものは出来るだけ入れないというスタンスです

Composerも名前空間も使っています
構造はDVECモデルとなっています

Controller、Entity Model、Data Model、Viewです
サイト自体は興味のある事をマッチング出来るサイトとなっています
サイトを使って頂いてバグ等あれば教えて頂けると幸いです

機能的にここがダメとかこれが欲しいという要望も受け付けております
これからの予定としては言語選択出来るようにして英語版も作る
人のフォロー機能もつける
もう少しスマホで使いやすいようにボタンを大きくする
スマホアプリ版も作る
といったような改修を予定しております

レビューありがとうございます
登録するとメールアドレスにhashがついたUrlが飛ぶのでそこにアクセスすると登録完了となります
【Java】エスケープシーケンス

# エスケープシーケンス
```.
りんご 
"みかん" 
メロン
```

みかんだけ " "(ダブルクオーテーション) で強調したいときはどのように記入すればよいでしょうか・・・？:thinking: 

```test.java
public class Main {
	public static void main(String[] args) {
		System.out.println("りんご");
		System.out.println(""みかん"");
		System.out.println("メロン");
	}
}
```

上記のようにみかんだけ " " をさらにつけてみるとコンパイルエラーとなってしまいました:weary:
このようなときに使用するのがエスケープシーケンスです:smile:
エスケープシーケンスをつかった下記のコードに修正してみると・・・

```例.java
public class Main {
	public static void main(String[] args) {
		System.out.println("りんご");
		System.out.println("¥"みかん¥"");
		System.out.println("メロン");
	}
}
```

```コンソール.
りんご 
"みかん" 
メロン
```

ちゃんと表示してくれました:laughing: 

さっきはなぜエラーになってしまったのかというと
パソコンくんは " から " までを文字列として判断するのです。

つまり ""みかん"" だと
" から " まで文字が何も入ってないぞ？？
みかんって書いてあるけど、これはなんだ？？
また " から " まで文字が何も入ってないぞ？？
・・・差し戻します。
ということになるのです:scream:

それを回避するために " の前に ¥ をつけて、これは文字列の " じゃないんだよ。
文字として表示してほしいための " なんだよ。
だから区別するために ¥" と記入するから文字として表示してね。
ってことです:smile:

なので表示してほしい記号の前に ¥ をつけると文字として表示されます。
一部ですが下記に記載しますね:smile:

|表記|意味|
|---|---|
|¥"|"（ダブルクオーテーション）|
|¥'|'（シングルクォーテーション）|
|¥¥|¥（円マーク）|
Android Studioで署名付きAPK作成時にLintエラーが出た場合の対処法

アプリが完成し、いざ署名付きリリースビルド！
と思ったら以下のエラーが出ました。

```
Lint found fatal errors while assembling a release target.

To proceed, either fix the issues identified by lint, or modify your build script as follows:
...
android {
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
}
...
```

![qiita_2020-02-25_01h28_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131798/86fe1bb5-6e41-8be6-1143-43a25557c348.png)

指示通り、build.gradle(Module:app)の「android」の中に
「lintOptions」を貼り付けて「Sync Now」。

checkReleaseBuildsは、
リリースビルド時にLintチェックするかどうか。
abortOnErrorはエラー時にビルドを停止する、ですね。

ビルドし直すとエラーが出なくなりました。
クラウド用語集

#概要
・AWS 認定ソリューションアーキテクト – アソシエイト試験で出題されそうな用語を参考書籍よりまとめました。

#用語
###■アベイラビリティゾーン
・リージョン（東京リージョンなど）という地域の中、独立し異なる場所にある１つ以上のデータセンターのこと。
・データセンターはコンピューター、ストレージ、通信といったIT設備を設置運用する冗長化された施設。

###■インスタンス
・仮想化の用語として、物理的なコンピューター上で稼働する仮想的なサーバーのこと。

###■エッジロケーション
・利用者から見て近くにあるデータセンターで、低レイテンシー（応答時間を短くする）実現の目的で利用。CloudFrontなどで利用される。

###■オンプレミス
・ITシステムを利用企業の設備内に設置し、自前で運用する形態。サービスを借りて利用するクラウドとは対になる言葉。

###■クエリ
・データの検索や更新、削除、抽出などの要求をデータベースに送信すること。

###■コンテナ
・仮想化の１つでアプリケーション、ライブラリ、ミドルウェアなどをパッケージ化し、１つのOS上で実行プロセスとして独立して稼働するもの。

###■シャード
・DBの負荷分散のためにインデックスを分け、複数のノードに分散して格納したまとまり。

###■スケーリング
・規模を拡大、縮小する処理。水平分散で台数を増やす処理をスケールアウト（縮小はスケールイン）、垂直に能力向上させる処理をスケールアップ（縮小はスケールダウン）という。

###■スナップショット
・ある時点でのファイルやデータベースなどの状態を丸ごとコピーしたもの。

###■スループット
・単位時間あたりに処理できる量。単位時間内に実行出来る処理件数や通信上の実効伝送量。

###■静的コンテンツ
・index.htmlなどのように、リクエストされたHTMLなどのデータを、サーバーのプログラムで処理などをせずにそのまま応答データとして送信する方式のWebページ。

###■デプロイ
・開発工程の中で、開発したアプリケーションやサービスを利用できる状態にする作業。

###■トランザクション
・複数の処理を、業務上一連の処理としてまとめたもの。この一連の処理は途中で処理を分離することができない。ある業務における一管理単位。

###■トリガ
・何らかのきっかけによって、動作すること。引き金となること。

###■バージョニング
・同時に複数バージョンが存在出来ること。S3では同じパケット内で複数オブジェクトのバージョンをもたせることが出来る。これにより、意図しない削除から復旧可能。

###■バケット
・S3の用語。S3にデータをアップロードするには、S3バケットを作成する必要がある。

###■ピアリング
・VPCでの用語。2つのVPC間でプライベートなトラフィックを可能にするネットワーキング接続。

###■フルマネージド
・インフラへの変更リクエスト、モニタリング、パッチ管理、セキュリティ、バックアップなどが自動化され、運用負担とリスクの軽減が可能なサービス形態。

###■プロビジョニング
・必要に応じたネットワークやコンピューター設備等のリソースを予測して、準備すること。

###■プロプライエタリ
・ある特定の開発元のソフトウェア製品（例：Windows,Macなど）。オープンソースの反意語。

###■ヘルスチェック
・システムなどの正常稼働を外部の別の機能から監視あるいは検査すること。ELBなどで実施。

###■ホストされる
・間貸しする。ホスティングする。

###■リージョン
・完全に独立して、地理的に離れた領域で構成されたAWSサービスを提供するエリア。リージョンの中に少なくとも２つ以上のアベイラビリティゾーンがある。

###■リスナー
・ネットワークでは外部からの接続要求を待ち続けるプログラム。TCPのポート等で待ち受ける。

###■リファクタリング
・プログラムの動作／振る舞いを変更せず、内部の設計やコードを見直し変更すること。

###■レガシーアプリケーション
・現行OSのバージョンではサポートされていないアプリケーション。クラウドのオープン技術上で動作しないアプリケーションという意味でも使用される。

###■ローカルリポジトリ
・ファイルやディレクトリの状態を記録する場所で、自分の手元のマシン上に配置しているもの。

###■ロードバランサ
・サーバーにかかる負荷をある設定されたパターンによって振り分けるための装置。

###■ワークロード
・OS、ミドルウェア、アプリケーションソフト、データ等、実行状態にあるソフトウェアの全体。

###■DR（Disaster Recovery）
・ITシステムが自然災害等で深刻な被害を受けた時に、損害の軽減、回復・復旧すること。

###■NAT
・ネットワークアドレス変換の１つ。プライベートIPのアドレスをグローバルIPアドレスへ変換。プライベートからパブリックに出る時に必要。

###■RPO（Recovery Point Objective）
・目標復旧時点。失われたデータを復元する際に、過去のどの時点まで遡ることを許容するか表す目標値。

###■RTO（Recovery Time Objective）
・目標復旧時間。業務が停止後、一定レベルに復旧するまでの目標時間。

#参考書籍情報
>一夜漬け AWS認定ソリューションアーキテクト アソシエイト 直前対策テキスト　：山内 貴弘  (著)
>https://www.amazon.co.jp/%E4%B8%80%E5%A4%9C%E6%BC%AC%E3%81%91-AWS%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88-%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88-%E7%9B%B4%E5%89%8D%E5%AF%BE%E7%AD%96%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-%E5%B1%B1%E5%86%85/dp/4798059463
【.NET】HttpClientの初回が遅いのはプロクシの自動検出が原因

# はじめに
サーバーリプレース作業(Windows Server 2008R2 + Oracle 11g → Windows Server 2016 + PostgreSQL 9.6)で、Delphi5で作成されたアプリケーション(インターフェイス)をC#に作り替えました。
別会社によりC++で作成されたアプリケーションからパラメータを引数としてexe形式(Delphi5→C#)で呼び出され、Web(レガシーASP)で処理した結果を返すというものです。

性能検証してDelphi5で作成されたものと同性能であることを確認していました。ところがユーザーにいざ導入してみると体感として3秒くらい遅いとして却下され、Delphi5版をそのまま使用することになってしまいました。

ユーザーのPCは古いPCということもあって、C#(.NET Framework)にしたことで遅くなったのかと思って、Ngen.exe(ネイティブ イメージ ジェネレーター)など導入してもらったのですが結果は変わりませんでした。

# 調査
導入から４ヶ月くらい経ってようやくユーザーからC#版の調査の許可を得ること出来ました。
何が悪さをしているのか？

* PC性能の問題
* ネットワーク環境の問題

Windows 7のPCで確かに3秒くらいかかる現象が発生しました。しかし、Windows 10のPCでは現象が発生しませんでした。
Windows 7のPCは、こちらで持参し性能検証しても問題なかったPCでした。そのPCで現象が発生したということは性能の問題ではないということです。
ネットワークが怪しいということで、そういえばプロキシあたりが悪さをしているのかもとネット上で「プロキシ 遅い C#」で検索してみたところ、下記サイトが見つかりました。
[プロキシ設定によりWebページへのアクセスを高速化するには？](https://www.atmarkit.co.jp/fdotnet/dotnettips/673defaultproxy/defaultproxy.html)

プロキシを使用しないようにするconfigファイルの設定

```xml:xxx.exe.config
<configuration >
  <system.net>
    <defaultProxy>
      <proxy usesystemdefault="false" />
    </defaultProxy>
  </system.net>
</configuration>
```

この設定をexeと一緒に配置して実行したところ、3秒くらいかかる現象が発生しなくなりました。

会社に持ち帰り詳細に調査することにしました。会社とユーザーとの環境の違いとして、Widows 7のPCのサーバーへの接続方法があります。
これまで動的IPアドレスで接続していたのですが、固定IPアドレスに切り替えました。ただしプロキシは未指定です。
すると、会社でも固定IPアドレスにすると現象が発生することが分かりました。
また、IEのインターネットオプションの接続タブのLANの設定にて「設定を自動的に検出する」のチェックをオフにすることで、現象が発生しなくなることを確認しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/2878ee19-687a-258d-4e67-2230211ceed5.png)

# 原因
調査を踏まえて、どういうことなのかってことですね。キーワードとしては、「[自動プロキシ検出](https://docs.microsoft.com/ja-jp/dotnet/framework/network-programming/automatic-proxy-detection)」となります。

固定IPアドレスの場合、プロキシの自動検出機能によりプロキシ構成スクリプトの検出で遅くなっている。IPアドレスの自動取得の場合、DHCPサーバーがあることでプロキシ構成スクリプトがすぐ見つかるため遅くならない。

C#(.NET Framework)のWebClientクラスやHttpWebRequestクラスやHttpClientクラスでは、デフォルト設定では自動プロキシ検出が行われるようになっている。Delphi5で問題なかったのは、自動プロキシ検出など使わない方式だったためです。

# 対応
今回は、configファイルは使用せずにプログラム上で自動プロキシ検出をしないように修正した。

```csharp
// プロキシを使用しない
HttpClientHandler handler = new HttpClientHandler();
handler.UseProxy = false;

using (var client = new HttpClient(handler))
{
    string uri = "http://localhost/";
```

今回はexe形式のインターフェイスで起動するたびにインスタンスを生成するため、HttpClientをusingで囲んでいますが、本来はHttpClientをusingで囲わない方がいいです。

* [HttpClientをusingで囲わないでください](https://qiita.com/superriver/items/91781bca04a76aec7dc0)
* [.NET(Framework)のHttpClientの取り扱いには要注意という話](https://qiita.com/nskhara/items/b7c31d60531ffbe29537)

# 最後に
性能検証でユーザー環境と同じ固定IPアドレスにするという観点は見逃していました。そんなところで問題が出るとは思わなかったです。
今回の対応はするとして、自動プロキシ検出に10〜15秒かかるという記事がある中で3秒くらいであること、持参したWindows 10では現象が発生してないことなど、まだ謎が残っている。これは何か分かり次第追記していきます。

.NET Frameworkの初回起動が遅いのは有名ですが、Web系アプリケーションだと自動プロキシ検出で余分にかかっているかも知れませんね。
#SharePoint #OneDriveforBusiness の /_layouts 配下のURL

随時追加予定

- SPFx デバッグページ
    - /_layouts/15/workbench.aspx
- サイトコンテンツ
    - /_layouts/15/viewlsts.aspx
- OneDrive for Business のトップページ
    - /_layouts/15/onedrive.aspx
【SwiftUI】1-1 Creating and Combining Views を噛み砕いていく【チュートリアル】

実行環境

- MacOS 10.15.3
- Xcode Version 11.3.1 

---

最初の章「SwiftUI Essentials」は以下の3章からなってます
- **Creating and Combining Views (今回)**
- Building Lists and Navigation
- Handling User Input

<img width="700" alt="スクリーンショット 2020-02-24 22.48.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/443316/bd2eaf7c-7390-ac1b-3737-b5cc44ec958f.png">

**該当ページからファイルをダウンロードしないと、できない演習がありますので、毎回必ずダウンロードしてからチュートリアルを進めてください。**

今回解説するCreating and Combining Viewsは全部で6編あります
　　
1. 編集内容がリアルタイムに反映されるよ
2. 文字色の変え方
3. 縦横リスト、空白等の挿入方法
4. 画像の挿入方法や画像加工の方法
5. UIkitとMapViewを使ってみよう
6. 2〜6の知識をまとめて1つのUIを作ってみよう


という内容になってます。
実際にXcodeで動かしてみてください。

最初の章なので、まっさらなところから書き始めます。
次の章からはページの初めにあるproject Fileをダウンロードして、starting pointのファイルからプロジェクト(チュートリアル)を開始します。

ちなみにcompleteというファイルもありますが、これは演習が全て完了した場合のコードです。エラーが出たときなどに使ってみましょう。

1-1 編集内容がリアルタイムに反映されるよ
---
要点…Resumeを押すとCanvasに変更内容がリアルタイムで反映される。

用語
・Project navigator...Xcodeの左端にあるファイル図が表示されているエリア。左上のファイルマークをクリックすると表示される(デフォルト)
・Resume…Canvasにコードの結果を表示するボタン。
・Canvas…コード結果を反映するエリアのこと(プレビューエリア)。上のEditorで色々いじれるっぽい
<img width="1251" alt="スクリーンショット 2020-02-24 23.22.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/443316/6e433ecf-27dd-45f6-655f-41b0c397afd6.png">



1-2 文字色の変え方
---
要点…commandキー押しながらプレビューのテキストorコード内のText()をクリックするとそのエリアに対して様々なアクションを起こせる。
今回はShow Swift Inspect(チュートリアルではInspect)を押すことで、コードを書かなくても文字とその関連情報を一括で操作できることを確認する。(ショートカット有)

いろいろなところでコマンドキーを押しながらコードやらプレビューをクリックして慣れよう。


用語
・Inspect...text()内のフォント等を一括でGUI操作するアクション

1-3 縦横リスト、空白等の挿入方法
---
要点…CSS既習の人には見慣れたライブラリが多い。
Xcodeでは文字を打つだけでなく、左上の「＋」ボタンを押すとライブラリがまとめて表示され、それをエディター部分にドラッグアンドドロップすると、コードが書き込まれるという話。

用語
・VStack…縦方向に要素や配列を揃える。HStackは横
・alignment: .leading (右)とか…CSSでお馴染み(?)のやつ。alignmentは「揃える」という意味。.hogehogeは右、中央、左等に揃える場所を選べる。
・spacer, padding…ライブラリ。前者はスペースを出力。後者はエリア周上に空白を出力
(次からライブラリは用語に書かない。興味ある人はライブラリの説明文と開発者向けドキュメントを読んでください)

今回のライブラリはpadding以外全部「＋」のライブラリにありました。

1-4 画像の挿入方法や画像加工の方法
---
要点…Xcodeで画像ソース等を使う場合、「Preview content」フォルダの「Preview Assets.xcassets」にドラッグアンドドロップする。
その後、画像編集用のファイルを新規作成しライブラリを使って画像を加工していく。

コードを書いても可能、ライブラリのドラッグアンドドロップも可能。

用語
なし。ライブラリのみ

1-5 UIkitとMapViewを使ってみよう
---
要点…正直よくわからない。コピーアンドペーストで済ませた。詳細が発覚し次第、書こうと思います。ちなみにIDEあるあるですが、コーディングが完了前にエラーが出続けても、Appleさんは「かまわん、行け」と仰るのでそのまま書き続けましょう。

用語
なし
1-6 2〜6の知識をまとめて1つのUIを作ってみよう
---
要点…4と5で作ったファイルは他のファイルで呼び出せるので、組み合わせようという話。

用語
なし

まとめ
---

・なんかあったらcommandキーを押しながら操作してみよう。
・Xcodeの基本的な操作方法が習得できる。
・ファイルを超えて構造体や関数を呼び出せる


そのうちXcode専用用語のまとめとか作れたらいいなーと思ってます

次回→

その他
SwiftUIではデフォルトでプレビューと本体がデフォルトで宣言されるようです。
プレビューは使わないのであれば、該当する行を消しても問題ないと思います

---
追記
関数じゃなくて構造体を呼び出せるってことだったっぽい
PEP-544 (Protocols: Structural subtyping (static duck typing)) を読んだよメモ

ある議論の流れで [PEP 544 -- Protocols: Structural subtyping (static duck typing)](https://www.python.org/dev/peps/pep-0544/) を読むことになったので、自分の理解をメモに残しておく。

## 概要

* [PEP 484 (Type Hints)](https://www.python.org/dev/peps/pep-0484/) では、あるインターフェースの実装を表現するには継承が必要とされていた(いわゆる nominal subtyping)
* PEP 544 では、プロトコルクラスを提起することで継承を伴わない型チェックにも対応する (いわゆる structural subtyping)
* ダックタイプの文化を持つ Python では structural subtyping の導入は自然である

## アプローチ

### プロトコルの定義

`typing.Protocol` を継承したクラスをプロトコルクラス(もしくは単にプロトコルとも)と呼ぶ。
プロトコルクラスにはプロトコルメンバーとして、どういう型のどういうメンバー(変数、メソッド)を持つのかを定義できる。

次の例では「引数無しで、返り値を持たない `close()` というメソッドをひとつ持つ」 `SupportsClose` プロトコルを定義している。

```
from typing import Protocol

class SupportsClose(Protocol):
    def close(self) -> None:
        pass
```

たとえば、次のようなクラスは `SupportsClose` プロトコルを満たしていると言える。

```
class Resource:
    ...
    def close(self) -> None:
        self.file.close()
        self.lock.release()
```

そのため、次のようなコードは意図通り型チェックされる。

```
def close_all(things: Iterable[SupportsClose]) -> None:
    for t in things:
        t.close()

f = open('foo.txt')
r = Resource()
close_all([f, r])  # OK!
close_all([1])     # Error: 'int' has no 'close' method
```

### プロトコルメンバー(変数)の定義

変数アノテーションを使って、変数をプロトコルメンバーとして定義できる。
なお、メソッドの中で変数を初期化する場合はプロトコルメンバーにはならないため、以下のコードで言う `self.temp` は無視される (プロトコルの型チェックには影響しない)。

```
from typing import Protocol, List

class Template(Protocol):
    name: str        # This is a protocol member
    value: int = 0   # This one too (with default)

    def method(self) -> None:
        self.temp: List[int] = [] # Error in type checker
```

ちなみに、クラス変数の場合は `typing.ClassVar` を使いましょう、とのこと[^1]。

[^1]: 手元で実験してみたけどうまく行かないが…? :thinking: 

### プロトコルクラスの継承

ここまではプロトコルクラスを型として扱う (型アノテーションする) ものとして説明してきたが、プロトコルクラスはふつうの Python クラスであるため、継承して派生クラスを作ってもよい。

```
class PColor(Protocol):
    @abstractmethod
    def draw(self) -> str:
        ...
    def complex_method(self) -> int:
        # some complex code here

class NiceColor(PColor):
    def draw(self) -> str:
        return "deep blue"
```

継承した場合はメンバーがそのまま派生クラスに継承されるので、もちろんプロトコルを満たすとみなされる [^2]。

単に型チェックをするだけであれば継承する必要はないので、この使い方をする場合は実装を共有できるのが利点と考えるのが良さそうです。`abc.abstractmethod` と組み合わせて使う例なども紹介されていて、ABC (Abstract Base Classes)ライクな紹介をされています[^3]。

[^2]: 敢えてプロトコルを満たさないように派生クラスでオーバーライドすることもできますが、イレギュラーな使い方なので説明は端折ります。
[^3]: というか、型ヒント以外の振る舞いは(= 実行時は)ほぼ ABC と同等とみなして良さそう。

### コールバックプロトコル

可変引数やオーバーロード、Generic などの複雑な callable インターフェースを表現するのに、`__call__()` メソッドを持ったプロトコルクラスを使うといいよ、とありました。これは便利そう。

```
from typing import Optional, List, Protocol

class Combiner(Protocol):
    def __call__(self, *vals: bytes,
                 maxlen: Optional[int] = None) -> List[bytes]: ...
```

## 感想

* 最初に PEP-554 を流し読みしたときは、タイトルの影響もあってプロトコルクラス = structural subtyping として理解していたので、ちゃんと読んでみたら実装継承もできるよ! って書いてあってびっくりした。完全に記憶から抜け落ちていた。
* プロトコルクラスは nominal subtyping 的に(explicit に)継承して使うこともできるし、structural subtyping 的に(implicit に)継承せずにも使えるので非常に分かりづらい。
* なにはともあれ Python 3.8 からは自分でプロトコルを定義できるようになったのはめでたい。
【Java】System.out.println()

# System.out.println()
:sunny: （） の中に文字や数字を入力したものが出力される
:sunny: 文字を出力したい場合は "" で文字を囲む

```例.java
public class Main {
	public static void main(String[] args) {
		System.out.println("りんご");
	}
}
```

```コンソール.
りんご
```

３行目に System.out.println("りんご"); と記入することで りんご と表示されました:smile:
りんご は文字なので "" で囲みます。
"" で囲むのを忘れるとエラーになりプログラムが実行されません:tired_face:


```例.java
public class Main {
	public static void main(String[] args) {
		System.out.println(5);
	}
}
```

```コンソール.
5
```

今度は数字の 5 を（）に入力してコンソールへ出力してみました。
今回は数字なので "" で 5 を囲む必要がありません:smile:

ではこの 5 を出力するプログラムの下に以下のような命令文を記入します。
するとどのように表示されるのでしょうか・・・？？:thinking: 

```例.java
public class Main {
	public static void main(String[] args) {
		System.out.println(5);
		System.out.println(5 + 2);
		System.out.println("5 + 2");
		System.out.println("5" + "2");
		System.out.println("りんご" + "ジュース");
	}
}
```

```コンソール.
5
7
5 + 2
52
りんごジュース
```

System.out.println(5);
　→ これはさきほどの説明どおり 5 を出力しただけの命令文です。

System.out.println(5 + 2);
　→ これは 5+2 の結果を表示してくださいという命令文なので 5 と 2 を足した結果の 7 が表示されます

System.out.println("5 + 2");
　→ 5+2 の結果の 7 が表示されるのでは？？と思ってしまいますが、"" で囲っているため、これは文字なんだ！とパソコンが認識します。そのため 5 + 2 とそのまま表示されるのです。

System.out.println("5" + "2");
 → "5" という文字と "2" という文字を連結して 52 と表示されます。

System.out.println("りんご" + "ジュース");
　→ "りんご" という文字と "ジュース" という文字を連結して りんごジュース と表示されます。


### その他の計算

```例.java
public class Main {
	public static void main(String[] args) {
		System.out.println(5 + 2);
		System.out.println(4 - 3);
		System.out.println(3 * 2);
		System.out.println(6 / 3);
		System.out.println(6 % 4);
	}
}
```

```コンソール.
7
1
6
2
2
```

もちろん足し算の他にも計算できます:smile:
一部学校でならった記号と違うのでそこだけ注意です。

+　・・・　足し算
-　・・・　引き算
*　・・・　掛け算
/　・・・　割り算
%　・・・　割り算の余り
【Java】基本的構造

# Java の基本的構造
```例.java
public class Main {
	public static void main(String[] args) {
		System.out.println("hello, world!");
	}
}
```

１行目の public class Main {　

から

5行目の } まで
を **クラスブロック** といいます。


２行目の public static void main(String[] args) {

から

4行目の } まで
を **メソッドブロック** といいます

３行目はパソコンに何をしてほしいかという命令文を書いていきます。
イメージとしては下の画像のような感じでしょうか。
<img width="316" alt="スクリーンショット 2020-02-24 12.24.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532773/0f924196-2dd9-f4da-30e6-a9053f264541.png">

クラスブロックという箱のなかにメソッドブロックの箱と命令文の箱が入っている。
メソッドブロックの箱の中には命令文の箱が入っている。
いわゆるロシアのお人形さんのような入れ子式というものです:smile:

![matryoshkas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532773/d1ccdc3e-94e8-afdd-aa05-6267d58ade53.png)

しばらくはこの３行目の命令文の部分をアウトプットしていきたいと思います。
クラスブロックとメソッドブロックはいずれ・・・私の勉強が進んだらアウトプットしていきます:sweat_smile:
KVM導入

仮想VM上のOSでVirtualBoxが動かない

１）導入
sudo yum install qemu-kvm libvirt virt-install virt-manager bridge-utils
※Red Hat8では環境が許されるなら勝手に導入および動作。削除が簡単にできなかったのでdisableで埋め殺し

２）KVM基盤でのNW設定
＃virsh net-list

３）修正する場合
＃virsh net-edit XXXX

４）設定反映
停止と起動操作となります。
＃virsh net-destroy default
＃virsh net-start default

５）既に仮想マシンが動いている場合
かつNWは設定変更前に上記XXXXの場合、一度Defaultなど別なNWを選択し、戻すことで疎通できるようになることがある（多い）

６）Nestできるようにする（仮想VM内で、さらに仮想VMを動かしたい時）
仮想でVMはなく、ホストでの設定
以下を入力し状況の確認

 #cat /sys/module/kvm_intel/parameters/nested 
  N   <-有効になるとY

以下の通り新規にファイルを作成し設定
 # vi /etc/modprobe.d/kvm-nested.conf 

以下１行を記述

options kvm_intel nested=1 

保存し、以下を実行
 （モジュールのアンロード）
 #modprobe -r kvm_intel 
 （モジュールのロード）
 #modprobe kvm_intel 

確認
 #cat /sys/module/kvm_intel/parameters/nested 
  Y   <-有効になるとY

７）NestするVMにCPUの仮想化支援機能を使えるようにする
　ホストではなく仮想VMでの設定
　KVM上で作成したVMの設定を修正する

　# virsh edit (対象のVM)
  対象のVMの設定において、CPUモジュール部分を以下のように修正する。

  <cpu mode='host-passthrough'> 

設定効果のポイント：
・以下手順７を実行しないため仮想VM上のOSでVirtualBoxが動かない。
・以下手順６と７をセットと覚えておく
jestでvueファイルのカバレッジが収集されない問題への対処

## 概要
最近になって [Codecov](https://codecov.io/) というサービスを知ってテストのカバレッジに気を使うようになったのですが、Jestを使って*.vueのカバレッジを取ろうとしても無視されるような動作に悩まされていました。
(おそらくはv25など特定のバージョンに起因する問題)

2020年2月時点の話で、直近のアップデートで改善されると思われるものの
メモしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51174/1593337c-e698-68e2-29c3-d18ffd25ed8a.png)
図: カバレッジにjsファイルは表示されても、vueファイルがカウントされない


## TL;DR

vue-jestの[Issue#217のコメント](https://github.com/vuejs/vue-jest/issues/217#issuecomment-585996947)を参考に、以下を行い`yarn test` を再実行したところ、カバレッジが収集されることを確認しました。

(1). パッケージのインストール

```
yarn add -D @vue/cli-plugin-unit-jest @vue/cli-service
```

(2). package.json(scriptsセクション)の編集
(自分のプロジェクトはLaravelが生成したpackage.jsonで、VueCLIを使用していなかったため)

```
# 変更前
"test": "jest",

# 変更後
"test": "vue-cli-service test:unit",
```

(3). `yarn test` を再実行して確認
今度はvueファイルのカバレッジが取れていることを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51174/b2e1060e-265f-904b-3283-0c9d1feb4c3b.png)


## 参考情報

### 各種バージョン

jest: 25.1.0
vue-jest: 3.0.5

### この事象発生時のJestの設定

```
    "jest": {
        "globals": {
            "Vue": true
        },
        "moduleFileExtensions": [
            "js",
            "json",
            "vue"
        ],
        "collectCoverage": true,
        "collectCoverageFrom": [
            "<rootDir>/resources/js/**/*.{js,vue}",
            "!**/node_modules/**",
            "!**/vendor/**"
        ],
        "setupFiles": [
            "./tests/js/setup.js"
        ],
        "transform": {
            "^.+\\.js$": "babel-jest",
            "^.+\\.vue$": "vue-jest"
        },
        "moduleNameMapper": {
            "^@/(.*)$": "<rootDir>/resources/js/$1"
        }
    }
```
jupyter notebookで仮想環境を利用したい！

## 経緯
「TensorFlowではじめるDeepLearning」（インプレス　新村拓也＝著）で学習を進めようと思ったらTensorFlowの最新版ではコードエラーが発生することが判明しました。
今後も同じような事態が起こることを考えると仮想環境の構築をマスターしておきたいと思い、環境を作成してみました。
本記事はその忘備録。

## 目的
・仮想環境を作成してTensorFlow 1.4をインストールする
・作成した仮想環境をjupyter notebookで使用する


## 手順
ベース環境にkernelを追加してくれるライブラリをインストールします。

```
pip install environment_kernels
```

次に仮想環境を新規に作成します。pythonとjupyter、ipykernelもついでにインストールしておきます。

```
conda create -n hoge python=3.6 jupyter ipykernel
conda info -e
$base ＊ C:/Users/...　 #アクティブな環境
$hoge    C:/Users/...
```

作成した仮想環境をアクティブ化します。

```
activate hoge
$(hoge) C:\Users\...>  #と表示されればOK
```
jupyter notebookのconfigファイルを作成します。

```
jupyter notebook --generate-config
```
.jupyter/jupyter_notebook_config.pyが作成されるので、適当な場所に以下を追記します。

```
c.NotebookApp.kernel_spec_manager_class = 'environment_kernels.EnvironmentKernelSpecManager'
c.EnvironmentKernelSpecManager.conda_env_dirs=['/home/User/Anaconda3/envs/']
```
[]内は仮想環境が保存されているフォルダを指定してください。


カーネルに仮想環境をセットします。

```
ipython kernel install --user --name=hoge
```


とりあえずこの状態で仮想環境が利用可能です。
jupyter notebookを起動すれば、kernelのタブに追加されているはずです。
あとは煮るなり焼くなり好きにしてください。

## 参考にした記事など
###Using both Python 2.x and Python 3.x in IPython Notebook
https://stackoverflow.com/questions/30492623/using-both-python-2-x-and-python-3-x-in-ipython-notebook

###Jupyter Notebookでpython3 Kernelを追加するのにはまったメモ
https://qiita.com/suzukihi724/items/b29f3fe9df96f7102ec9

###Anacondaで作成した仮想環境をJupyter NotebookのKernelに追加する
https://kazusa-pg.com/jupyter-notebook-use-virtual-env-kernel/

###Condaで作ってる仮想環境の切り替えをJupyter上で簡単に行う方法
https://qiita.com/yoppe/items/38005f415a5b8b884c7d

###Jupyterで複数カーネルを簡単に選択するための設定
https://qiita.com/tomochiii/items/8b937f15c79a0c3eae0e

###【jupyter】Anaconda仮想環境をjupyter notebookで使用する
https://nodaki.hatenablog.com/entry/2019/04/03/223102
Javascriptで画像付きツイートを行う

### 経緯

[山手線 Ver.2020 by 東京感動線](https://www.jreast.co.jp/tokyomovinground/contents/interaction/047.html)でWebARから画像付きツイートをすることになり、色々と悪戦苦闘して、動くものができたので残しておきます。ニーズが無いのか、ググってもビンゴの記事がないのですよね。

### コード

プラットフォームとして、[Oauth.io](https://oauth.io/)を使っています。
ポイントをコメントで残しました。

```javascript
/* detail : base64エンコード済みの画像データ */
/* tweet_text : ツイート内容 */
function twitter_tweet(detail, tweet_text) {
    var oauth_result;
    OAuth.initialize("***public key***"); /* 各自PUBLIC KEYを設定 */
    OAuth.popup('twitter').then(function(result) {
        oauth_result = result;
    }).fail(function(err){
        /* エラー処理 */;
    });

    /* multipartにするための区切り */
    var bound_text = "------------------------1ae47d990b354d1b00a4eea60e6b5b72";

    var image_src =
        "--" + bound_text + "\r\n" +
        'Content-Disposition: form-data; name="media_data"' + "\r\n" +
        "\r\n" +
        detail + "\r\n" +
        "--" + bound_text + "--\r\n\r\n";

    /* この書き方でOauth署名は正しく作成される模様 */
    var param1 = {
        headers: {
            'Content-Type' : 'multipart/form-data; boundary=' + bound_text
        },
        data: image_src
    };

    /* 画像のアップロード　*/
    oauth_result.post('https://upload.twitter.com/1.1/media/upload.json', param1).done(function (response) {
        /* 画像のアップロードに成功したら、ツイートと紐づけるために */
        /* 画像データのIDを取得する */
        var media_id_ = response.media_id_string;

        var param2 = {
            data: {
                status: tweet_text,
                media_ids: media_id_
            }
        };

        /* ツイート */
        oauth_result.post('/1.1/statuses/update.json', param2).done(function (response) {
            /* ツイート成功時の処理 */;
        }).fail(function (err) {
            /* ツイート失敗時のエラー処理 */;
        });
    }).fail(function(err) {
        /* 画像アップロード失敗時のエラー処理 */;
    });
}
```

### 参考
- [OAuth.io API Reference](http://docs.oauth.io/)
- [POST media/upload - 画像をアップロードする](https://syncer.jp/Web/API/Twitter/REST_API/POST/media/upload/)
- [JavaScriptでOAuth認証した後TwitterにPOSTする - Qiita](https://qiita.com/olt/items/472c1ebee201e541ddc3)

### 最後に

あまり親切な文書になってないと思うので、気が向いたら更新します。
ここをもっと書いて欲しいとうのご要望いただけるとありがたいです。